Песни о Паскале - [26]

Шрифт
Интервал

Работа программистов организована по тем же законам – законам специализации и кооперации. Специализация – это углубление в некоторую узкую область, специальность. Скажем, одни программисты наловчились писать драйверы, другие – базы данных, а третьи – графический интерфейс. Кооперация – это слаженное соединение усилий разных специалистов, – за это отвечает руководящая «верхушка» программного проекта (подобно тому, как правительство руководит страной).

Конечно, «руками водить», распределяя работу, может каждый (некоторые так и думают). Но толку будет чуть, если согласованную работу программистов не поддержать техническими средствами. Современные языки программирования, в том числе Паскаль, такие средства дают. Одно из них – механизм процедур и функций. Процедуры и функции – это готовые «кусочки» программ, выполняющие некоторые оговоренные действия. Иногда их называют общим именем – подпрограммы. Такие «кусочки» могут создаваться разными программистами и сохраняться в специальных файлах – библиотеках. Есть библиотеки и в Паскале.

Для применения библиотечной процедуры или функции достаточно знать её имя и список передаваемых ей параметров. А вот думать о том, как устроена эта процедура внутри, не обязательно. Хочешь выполнить какое-то действие из библиотеки? Тогда помести в нужном месте программы вызов подходящей процедуры и укажи параметры. Кстати, мы с вами уже делаем это, вызывая процедуры Readln и Writeln. В библиотеках Паскаля припасены процедуры и функции на многие случаи жизни, со временем вы узнаете о них больше.

Чем же отличаются функции от процедур? Функции обладают теми же возможностями, что и процедуры, но вдобавок возвращают значение некоторого типа (числовое, логическое или иное). Поэтому вызов функции можно вставлять внутрь выражения, что очень удобно. Как это работает, вы увидите сей же час.

Госпожа удача

Вернемся к нашему экзаменатору, где надо придумать способ формирования случайных чисел в пределах от 1 до 10. Будь под рукой игральный кубик из Монте-Карло, я бы не связывался с компьютером! Впрочем, в библиотеке Паскаля есть такой «кубик» – это функция по имени Random, что переводится как «случайный, беспорядочный». Этой функции необходимо задать один параметр – число N, определяющее предел для случайного числа. В ответ функция возвращает некоторое случайное число в диапазоне от нуля до N-1. Например, в следующем операторе в переменную X попадет некоторое число в диапазоне от 0 до 9.


>      X:= Random(10);


Говорят, что функция Random генерирует случайные числа. Чтобы лучше понять, как это работает, введите и запустите следующую программу.


>{ P_15_1 – пятикратный вызов функции Random(100) }

>begin

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Readln;

>end.


Здесь печатаются целые числа, возвращаемые функцией Random. И хотя параметр функции во всех вызовах одинаков (100), результаты получатся разными. При этом все они лежат в диапазоне от 0 до 99. Таким образом, параметр функции Random управляет диапазоном генерируемых чисел.

Запустите эту программу ещё пару раз и сравните результаты. Вы заметили, что они повторяются? Так и должно быть! Все потому, что функция Random создает псевдослучайную последовательность чисел. «Псевдо» – значит «не совсем случайную». Эта особенность функции полезна при отладке программ. Но в экзаменующей программе надо получать разные последовательности чисел, иначе смышленые школяры приноровятся к экзаменатору!

Этого можно добиться применением ещё одной процедуры. Она называется Randomize (что значит «уравнять шансы» или «перемешать») и не требует параметров. Вызвав эту процедуру единожды в начале программы, мы смешаем карты и заставим функцию Random при повторных запусках программы генерировать разные последовательности чисел. Итак, вставьте вызов процедуры Randomize в начало программы и повторите опыты, запустив программу несколько раз подряд.


>{ P_15_2 – пятикратный вызов функции Random(100) после Randomize }

>Begin

>      Randomize;

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Writeln( Random(100) );

>      Readln;

>end.


Теперь от успешного финиша проекта нас отделяет один шаг: придумаем способ генерировать числа от 1 до 10 (а не от 0 до 9). Очевидно, что простое арифметическое выражение решает эту проблему.


>      X:= 1+ Random(10);       { генерация чисел от 1 до 10 }


Сейчас вы готовы написать второй вариант экзаменатора, вот каким он может быть (новые операторы, как обычно, выделены курсивом).


>{ P_15_3 – программа-экзаменатор, версия 2 }

>var A, B, C : integer; { сомножители и произведение }

>begin

>      Randomize; { смешиваем «карты» }

>      repeat

>      A:= 1+ Random(10);       B:= 1+ Random(10);

>      Write(’Сколько будет ’, A,’ x ’,B, ’ ? ’);

>      Readln(C);

>      if C=0 then break; { завершение цикла, если C=0 }

>      { проверяем правильность вычисления }

>      if A*B=C

>      then Writeln(’Молодец, правильно!’)

>      else Writeln(’Ошибка, повтори таблицу умножения!’);


Рекомендуем почитать
Хранители: Город Сновидений

Шестнадцатилетняя девочка Энни, через книгу, попадает в город Сновидений, в котором происходит невероятная магия Луны. Там она узнает, что относится к необыкновенному роду людей – хранителям, которые защищают и помогают людям. Чтобы вернуться домой ей нужно найти лунный цветок расцветающий раз в сто лет, и который может исполнить любое, но одно желание.


Жлобские хроники

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


Другая Земля Наследие Дружан

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


Дороги своих любят

Четыре противоположности, чьи судьбы однажды удивительным образом переплелись – наемник, монах, воришка и маг – седлают коней. Что там, за горизонтом? Погони, разнесенные трактиры и странствующие музыканты да не оставят вас! Верные мечи, молитвы богам, ловкие руки, магия, и, конечно, верное плечо друга – и дороги будут благосклонны к своим любимцам, можете мне поверить.У менестрелей тяжелая работа. Но что на счет тех, кто им ее создает?


Зазеркалье. Фея для демона

Добрая и наивная сказка о любви.


Правила экстрасенса

Дело происходит в Питере. Молодой оперативник одного из убойных отделов Леонид Воронцов вызывает на допрос некоего бизнесмена Рыбкина с целью весьма низкой, а именно, получение взятки. Однако у Рыбкина, обвиняющегося в организации убийства своего зама, на этот счет совсем другие планы. Он подстраивает всё так, чтобы Воронцов получил сильный удар током, обычно в таких случаях ведущий к смерти. И Лёня действительно оказывается в морге. Однако в то время, когда для остальных такое путешествие, как правило, является последним, Лёнина история с него только начинается...