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


Новичок
*

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

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


Извините, но это снова я.
Посмотрев твой вариант volvo сдал вот такой вот вариант.

uses graph,crt;

type
Dir = (E,NE,N,NW,W,SW,S,SE);
arrType = array[Dir] of integer;
const
titles: array[Dir] of string = ('E','NE','N','NW','W','SW','S','SE');
start = ord(low(Dir));
finish = ord(high(dir));
amount = finish - start + 1;
sector = (360 div amount) * (Pi / 180);
{--------------------------------------------------}
function read_data(var arr:arrType):integer;
var
i,X,max:integer;
ix:Dir;
begin
for ix:=low(Dir) to
high(Dir) do arr[ix]:=0;
for i:=1 to 30 do begin
read(X);
if X <= 3 then X:=4-X else X:=12 - X;
inc(arr[Dir(pred(X))]);
end;
max:=0;
for ix:=low(Dir) to high(Dir) do
if arr[ix]>max then max:=arr[ix];
read_data:=max;
readln;
end;
{--------------------------------------------------}
var center_x, center_y:integer;
const mult=20;
{--------------------------------------------------}
function get_x(r,phi:real):integer;
begin
get_x:=center_x + trunc(mult * r * cos(phi));
end;
{--------------------------------------------------}
function get_y(r,phi:real):integer;
begin
get_y:=center_y - trunc(mult * r * sin(phi));
end;
{--------------------------------------------------}
procedure line_polar(phi_st,r_st,phi_fn,r_fn:real);
begin
line(
get_x(r_st,phi_st), get_y(r_st,phi_st),
get_x(r_fn,phi_fn), get_y(r_fn,phi_fn)
);
end;
{--------------------------------------------------}
procedure text_polar(phi,r:real; const T:string);
begin
outtextxy(get_x(r,phi), get_y(r,phi),T);
end;
{--------------------------------------------------}
procedure circle_polar(phi,r:real;radius:integer);
begin
circle(get_x(r,phi), get_y(r,phi), mult*radius);
end;
{--------------------------------------------------}
var
arr:arrType;
i,j,max_val,gdriver,gmode:integer;

begin
ClrScr;
GotoXY(2,2); Writeln('N=1');
GotoXY(2,3); Writeln('NE=2');
GotoXY(2,4); Writeln('E=3');
GotoXY(2,5); Writeln('SE=4');
GotoXY(2,6); Writeln('S=5');
GotoXY(2,7); Writeln('SW=6');
GotoXY(2,8); Writeln('W=7');
GotoXY(2,9); Writeln('NW=8');
max_val := read_data(arr);
initgraph(gDriver, gMode, 'd:\bp\bgi');
center_x := getmaxx div 2;
center_y := getmaxy div 2;
for i := start to finish do begin
setcolor(white);
line_polar(0, 0, i * sector, 10);
text_polar(i * sector, 11, titles[Dir(i)]);
if i = finish then j := start else j := i + 1;
setcolor(red);
line_polar(i * sector, arr[Dir(i)], j * sector, arr[Dir(j)])
end;
setcolor(darkgray);
for i := 1 to max_val do
circle_polar(0, 0, i);
readln;
closegraph;
end.


Сказали что мол нельзя изменить количество направлений длая розы ветров. Т.е на 16 направлений и т.д
Т.е нужна универсальная программа. Помогите разобраться пожалуйстаю! Спасибо за помощь!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





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