Написание программы паскаль знак зодиака предсказание на лень

Узнай, как твой знак зодиака оправдывает лень — программа Паскаль раскроет тайны!

Хотите получать гороскоп прямо на экране старого-доброго DOS-терминала, не отвлекаясь на браузер и мобильные приложения? Достаточно 20 строк кода на Turbo Pascal, чтобы программа сама определяла знак зодиака по введённой дате рождения и выдавала краткое, но «глубокое» предсказание на день. Ниже, пошаговый мастер-класс с готовым кодом, пояснениями и лайфхаками для ленивых разработчиков.

Что умеет наша «астро-прога»?

  • Определяет 12 классических знаков зодиака по дате рождения.
  • Генерирует короткое предсказание, выбирая случайную фразу из заранее заданного массива.
  • Работает без сети и запускается даже на старом Pentium-100.
  • Компилируется в EXE-файл ~15 КБ — можно носить на дискете!

Алгоритм «на лень» за 3 шага

Готовим константы знаков

Каждому знаку соответствует диапазон дат. Массив Zodiacs хранит названия и границы:

type TZodiac = record
 Name : string[11];
 StartMonth, StartDay, EndMonth, EndDay : byte;
end;
const Zodiac : array[1..12] of TZodiac =
((Name: 'Овен'; StartMonth: 3; StartDay: 21; EndMonth: 4; EndDay: 19),
 (Name: 'Телец'; StartMonth: 4; StartDay: 20; EndMonth: 5; EndDay: 20),
 ... (Name: 'Рыбы'; StartMonth: 2; StartDay: 19; EndMonth: 3; EndDay: 20));

Определяем знак по дате

Функция GetZodiacSign сравнивает введённую дату с границами диапазонов:

function GetZodiacSign(M, D: byte): string;
var i: byte;
begin
 for i := 1 to 12 do
 if ((M = Zodiac[i].StartMonth) and (D >= Zodiac[i].StartDay)) or
 ((M = Zodiac[i].EndMonth) and (D <= Zodiac[i].EndDay)) then
 begin
 GetZodiacSign := Zodiac[i].Name;
 Exit;
 end;
 GetZodiacSign := 'Неизвестно';
end;

Генерируем «точное» предсказание

Массив Predictions содержит 20 фраз, которые придают дню «космический» смысл:

const Predictions : array[1..20] of string =
('Сегодня Луна в трине к Венере: смело беритесь за новое!',
 'День обещает приятные финансовые сюрпризы.',
 ... 'Избегайте споров с близкими, звёзды на вашей стороне, если будете дипломатичны.');

Выбираем случайную строку:

Randomize;
Prediction := Predictions[Random(20) + 1];

Полный листинг «на лень» (копируйте и запускайте)

program AstroOnLazy;
uses Crt;

type TZodiac = record
 Name : string[11];
 StartMonth, StartDay, EndMonth, EndDay : byte;
end;

const
 Zodiac : array[1..12] of TZodiac =
 ((Name: 'Овен'; StartMonth: 3; StartDay: 21; EndMonth: 4; EndDay: 19),
 (Name: 'Телец'; StartMonth: 4; StartDay: 20; EndMonth: 5; EndDay: 20),
 (Name: 'Близнецы'; StartMonth: 5; StartDay: 21; EndMonth: 6; EndDay: 20),
 (Name: 'Рак'; StartMonth: 6; StartDay: 21; EndMonth: 7; EndDay: 22),
 (Name: 'Лев'; StartMonth: 7; StartDay: 23; EndMonth: 8; EndDay: 22),
 (Name: 'Дева'; StartMonth: 8; StartDay: 23; EndMonth: 9; EndDay: 22),
 (Name: 'Весы'; StartMonth: 9; StartDay: 23; EndMonth: 10; EndDay: 22),
 (Name: 'Скорпион'; StartMonth: 10; StartDay: 23; EndMonth: 11; EndDay: 21),
 (Name: 'Стрелец'; StartMonth: 11; StartDay: 22; EndMonth: 12; EndDay: 21),
 (Name: 'Козерог'; StartMonth: 12; StartDay: 22; EndMonth: 1; EndDay: 19),
 (Name: 'Водолей'; StartMonth: 1; StartDay: 20; EndMonth: 2; EndDay: 18),
 (Name: 'Рыбы'; StartMonth: 2; StartDay: 19; EndMonth: 3; EndDay: 20));

 Predictions : array[1..20] of string =
 ('Сегодня звёзды советуют не откладывать важные дела.',
 'День благоприятен для новых знакомств.',
 ... 'Неблагоприятный период для крупных трат — ожидайте лучшего момента.');
var
 Day, Month: byte;
 Sign: string;
 Prediction: string;

function GetZodiacSign(M, D: byte): string;
var i: byte;

begin
 for i := 1 to 12 do
 if ((M = Zodiac[i].StartMonth) and (D >= Zodiac[i].StartDay)) or
 ((M = Zodiac[i].EndMonth) and (D <= Zodiac[i].EndDay)) then
 begin
 GetZodiacSign := Zodiac[i].Name;
 Exit;
 end;
 GetZodiacSign := 'Неизвестно';
end;

begin
 ClrScr;
 Writeln('=== Астро-прога «на лень» ===');
 Write('Введите день рождения (DD): '); Readln(Day);
 Write('Введите месяц рождения (MM): '); Readln(Month);
 Sign := GetZodiacSign(Month, Day);
 Randomize;
 Prediction := Predictions[Random(20) + 1];
 Writeln;
 Writeln('Ваш знак: ', Sign);
 Writeln('Предсказание на сегодня: ', Prediction);
 Writeln;
 Writeln('Нажмите Enter для выхода.');
 Readln;
end.

Как компилировать и запускать

  1. Установите Turbo Pascal 7.0 или Free Pascal IDE;
  2. Создайте файл astro.pas, вставьте код выше.
  3. Нажмите Ctrl+F9 — получите astro.exe.
  4. Запустите astro.exe в DOSBox или на реальном железе.

Лайфхаки для ленивых

  • Добавьте цвет: команды TextColor(Yellow); и TextBackground(Blue); сделают вывод праздничным.
  • Храните предсказания в отдельном файле: при старте программа читает predict.txt и загружает 100 фраз без перекомпиляции.
  • Сделайте горячие клавиши: клавиша F1 — повторить предсказание, Esc — выход.

Что дальше?

Расширьте функционал: добавьте совместимость знаков, считывайте дату рождения партнёра и выводите «любовный рейтинг». Или интегрируйте лунный календарь — тогда «ленивое» приложение станет полезным планировщиком дел. Главное — не бойтесь экспериментировать: даже в старом Turbo Pascal звёзды говорят на вашем языке!