IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Роза ветров, Задача на одномерный массив
barlog
сообщение 26.10.2006 21:19
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: г

Репутация: -  0  +


В строке данных записаны 30 чисел от 1 до 8, показывающих, в каком направлении дул ветер в соответствующий день месяца (1-северный, 2-северо-восточный, 3-восточный, 4-юго-воточный, 5 южный, 6-юго-западный, 7-западный, 8-северо-западный).
Вывести на экран ”розу ветров” - многоугольник, вершинами которого лежат на 8-лучах, выходящих из общего центра с равным углами, расстояния от вершины до этого центра пропорционально дней месяца, в который дул соответствующий ветер.

Нашёл программу примера ”розы ветров”.

Вот она... (Показать/Скрыть)

Хотел сдать в таком виде, но преподаватель сказал, что не полностью выполняется условия поставленной задачи. И она, по-моему, очень уж громоздкая. Помогите, пожалуйста. Т.е 30 раз нужно будет ввести числа от 1 до 8 и уж, потом на этом основании строиться график. Чтобы узнать в какой день, что дуло нужно, чтобы ещё и на лучах насечки были с соответствующим днём?
Если так то по-моему сложновато! Помогите товарищи. Заранее спасибо. Почти ни разу не оставался без ответа и помощи на вашем форуме.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 26.10.2006 22:44
Сообщение #2


Гость






Ну, вот что-то такое:
(это без оптимизации, можно еще "причесать" код программы, добавить пару функций, код будет выглядеть гораздо красивее)

uses graph;

type
Dir = (
N, NE, E, SE, S, SW, W, NW
);
arrType = array[Dir] of integer;


procedure read_data(var arr: arrType);
var
i, X: integer;
ix: Dir;
begin

for ix := low(Dir) to
high(Dir) do arr[ix] := 0;

for i := 1 to 30 do begin
read(X);
inc(arr[Dir(pred(X))]);
end;
readln;

end;

procedure line_polar(phi_st, r_st, phi_fn, r_fn: real);
const mult = 25;
begin
line(
(getmaxx div 2) + trunc(mult * r_st*cos(phi_st)),
(getmaxy div 2) - trunc(mult * r_st*sin(phi_st)),
(getmaxx div 2) + trunc(mult * r_fn*cos(phi_fn)),
(getmaxy div 2) - trunc(mult * r_fn*sin(phi_fn))
);
end;



var
arr: arrType;
i, j, start, finish, amount: integer;

gDriver, gMode, errCode: integer;

begin
read_data(arr);

initgraph(gDriver, gMode, '');
errCode := graphresult;
if errCode <> grOk then begin
writeln('error: ', grapherrormsg(errCode));
readln; halt(100);
end;


start := ord(low(Dir));
finish := ord(high(dir));
amount := finish - start + 1;

for i := 1 to 2 do begin
j := arr[Dir(start)];
move(arr[Dir(start + 1)], arr[Dir(start)], (amount - 1) * sizeof(j));
arr[Dir(finish)] := j;
end;

for i := start to finish do begin
setcolor(white);
line_polar(0, 0, i * (360 div amount) * (Pi / 180), 10);

if i = finish then j := start else j := i + 1;
setcolor(red);
line_polar(i * (360 div amount) * (Pi / 180), arr[Dir(i)],
j * (360 div amount) * (Pi / 180), arr[Dir(j)])
end;

readln;
closegraph;
end.


Проверял вот с такими данными (вводишь в одну строку, жмешь Enter):
Цитата
1 2 3 4 5 6 7 8 1 2 2 2 2 3 4 5 5 4 2 6 5 5 3 4 7 1 1 2 3 4

Результат - (отработал, правда в FPC, но и TP дает точно такую же картинку, проверил) в аттаче:


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
barlog
сообщение 26.10.2006 23:07
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: г

Репутация: -  0  +


volvo ты просто молодец. Именно такой ввод нужен. А как можно будет узнавать когда и в каком направлении дул ветер? Что насечки с надписями выводить или что. Плиз допомогите. Спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 14:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"