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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
barlog
сообщение 10.12.2006 17:30
Сообщение #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

 



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