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

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

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

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


Новичок
*

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

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


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

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

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

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


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 20.05.2024 5:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name