Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ знаки Зодиака

Автор: ve7er 15.05.2007 0:39

Люди посоветуйте как решить задачку:

Известно, что астрологи делят год на 12 периодов и каждому из них ставят в соответствии один из знаков Зодиака. Напишите программу для ввода даты некоторого дня года и печати названия соответствующего знака Зодиака.
Водолей 20,01-18,02
Рыбы 19,02-20,03
Овен 21,03-19,04
Телец 20,04-20,05
Близнеца 21,05-21,06
Рак 22,06-22,07
Лев 23,07-22,08
Дева 23,08-22,09
Весы 23,09-22,10
Скорпион 23,10-22,11
Стрелец 23,11-21,12
Козерог 22,12-19,01

Я её короче сделал используя только if... then writeln... при этом рассчитав какой дате соответствует какой день года:
Знак зодиака---> Период---> Промежутки дней года
Водолей---> 20,01-18,02---> 20-49
Рыбы---> 19,02-20,03---> 50-79
Овен---> 21,03-19,04---> 80-109
Телец---> 20,04-20,05---> 110-140
Близнеца---> 21,05-21,06---> 141-172
Рак---> 22,06-22,07---> 173-203
Лев---> 23,07-22,08---> 204-234
Дева---> 23,08-22,09---> 235-265
Весы---> 23,09-22,10---> 266-295
Скорпион---> 23,10-22,11---> 296-326
Стрелец---> 23,11-21,12---> 327-355
Козерог---> 22,12-19,01---> 356-365-19
Все короче работает, но мою очаровательную преподавательницу это не устроило...

Автор: volvo 15.05.2007 1:15

Твою очаровательную преподавательницу устроит такой вариант?

Сохраняем все данные в виде типизированных констант:

type
zodiak_names = (vodoley, ... ); { <--- перечисляешь названия всех знаков задиака }
tdata = record
day: integer;
month: integer;
end;

trange = record
start, finish: tdata;
end;

const
zodiak: array[zodiak_names] of trange = (
(start: (day: 20; month: 1); finish: (day: 18; month: 2)),
... { <--- и так далее, все знаки зодиака }
);

{ а потом пишем функцию, которая проверяет попадание даты в trange }
function in_range(const d: tdata; const rng: trange): boolean;
begin
...
end;

var i: zodiak_names;

{ и после ввода даты the_data ... }
for i := low(zodiak_names) to high(zodiak_names) do
if in_range(the_data, zodiak[i]) then begin
{ вывод сообщения, что это - нужный знак зодиака }
break;
end;


или это ее тоже не устроит?

Автор: ve7er 16.05.2007 0:17

Ну что могу сказать, красавица нашего института не прыгала от счастья. Ну чита я не допру эту прогу до победного конца. У меня бесконечные ошибки с типами. Пришлось даже запыленные книжки по Паскалю доставать.

........__|__
___ / **** \=======#
;|HH*T-34*HH:\
(@=@=@=@=@) Короче один в поле не воин. Help me!!!