Структура программы на языке Паскаль

 



На этом занятии мы познакомимся с конструкцией программ на языке программирования высокого уровня "Паскаль".
Этот язык разработал сравнительно недавно, в 1970 году, профессор кафедры вычислительной техники Швейцарского федерального института технологии - Николас Вирт.

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

Изучение конструкции программ на Паскале начнем с простого примера.

Пример 1. Составить программу решения следующей задачи.
Саша спросил Сережу: "Сколько тебе лет?" Сережа ответил:
"Если бы число моих лет увеличить в 3 раза, а потом уменьшить на 17, то мне было бы 16 лет". Сколько лет Сереже?

Обычно решение такого типа задач начинается с "конца".
Число лет, которое было бы Сереже, т. е. 16, увеличиваем на 17, получаем
Полученный результат уменьшаем в 3 раза, т.е. делим на  получаем 11.
Итак, Сереже было 11 лет.

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

Program Serg;
   var
a, b, c: integer;
begin
write("Ведите число лет, которое было бы Сереже "); readln(a);
b := a + 17;
c := b div 3;
writeln("Сереже было ", c, " лет")
end.

Если эту программу ввести в компьютер и выполнить, то на экране появится вначале запрос для пользователя:

              Введите число лет, которое было бы Сереже

После ввода числа 16, компьютер выдаст на экран:

Сереже было 11 лет

Рассмотрим более детально построение программы.
Она начинается со слова program. Слово program зарезервировано в Паскале, т.е. не может использоваться ни в каких других целях, лишь для начала программы.
После служебного слова  program  записывается имя программы. В нашей программе именем является serg. Имя программы записывается на английском языке по усмотрению и фантазии автора программы. (В некоторых версиях Паскаля допускается запись имени программы на русском языке). Конечно, желательным является, чтобы имя программы выражало ее содержание, но как вы сами понимаете, это не всегда возможно.
Имя программы никак в дальнейшем не используется, поэтому требование обязательности объявления имени программы можно считать излишним. Программу можно выполнять и без имени. С другой стороны, - программа без имени неудобна, а иногда непонятна для пользователей и программистов.
Количество символов в имени программы не ограничивается, но значащими считаются первые 63 символа.

Имя программы должно начинаться с буквы. В нем не должно быть пробелов, запятых, точек.

В конце первой строки, после имени программы стоит ";" - точка с запятой. Этот знак указывает на то, что некоторая инструкция закончена и за ней будет записана следующая инструкция. Правда, первая "инструкция" является именем программы и не походит на инструкцию в смысле "делай то и делай так", но термин " инструкция" мы употребляем в более широком смысле, как одно логически завершенное предложение или его часть. Точка с запятой является обязательным разделительным знаком в языке Паскаль.
В некоторых версиях языка Паскаль, вы можете встретить такое начало программы:
              Program Serg (input, output);

Как видите, в скобках записаны служебные слова input (ввод) и output (вывод). Они указывают, что в программе будет вводиться и выводиться информация. Для большинства современных версий языка Паскаль и для Турбо Паскаля эти служебные слова являются необязательными. Хотя, надо заметить, их запись в программе не приведет к ошибке. В дальнейшем мы не будем использовать их в программах.

Следующая строка программы:

     var
       a, b, c : integer;

В этой строке обязательно указываются все переменные, участвующие в программе и их типы.
Слово var - это сокращение от слова variable (переменная) и является так же, как и слово program, зарезервированным словом.
После него записываются имена переменных - идентификаторы, в нашем примере: a, b, c. Они записываются через запятую.
После имен переменных стоит ":" - двоеточие, а затем записано служебное, зарезервированное, слово integer. Integer (целый) указывает тип значений, которые принимают переменные - целые числа (..., -4, -3, -2, -1, 0, 1, 2, 3, 4, 5,...). Эта строка программы, также как и предыдущая, заканчивается ";" - точкой с запятой.
Далее в программе следует служебное, зарезервированное, слово begin (начать), которым начинается новый раздел программы - раздел операторов.
В этом разделе последовательно записываются команды, операторы, которые разделяются ";" - точкой с запятой. Они будут выполняться компьютером.
Программа заканчивается служебным словом end, после которого стоит точка. Она является обязательной во всех паскалевских программах. Точка оповещает о конце текста программы.
Заметьте, последняя строка из раздела операторов перед служебным словом end не заканчивается точкой с запятой. Но, если вы ее поставите, то ошибки не будет.


1. Итак,   КОНСТРУКЦИЯ ПРОГРАММЫ на языке
ПАСКАЛЬ

Program <имя>;

РАЗДЕЛ ОПИСАНИЙ
В нем описываются имена переменных и их типы.

Begin

РАЗДЕЛ ОПЕРАТОРОВ
Ввод данных, последовательность команд, вывод результатов.

end.

Эту конструкцию очень удобно изобразить с помощью блок-схемы. Вспомним, что блок-схема состоит из отдельных геометрических фигур - блоков, каждый из которых показывает какие команды или операции надо выполнить.

Вот эти блоки:


Рис. 1


Рис. 2

2. Переменные и их имена

Под переменной в языке Паскаль, как и в других языках программирования, понимают программный объект (число, слово, часть слова, несколько слов, символы), имеющий имя и значение, которое может быть получено и изменено программой.

Если "заглянуть" в компьютер, то переменную можно определить так.


Переменная - это имя физического участка в памяти, в котором в каждый момент времени может быть только одно значение.

Само название "переменная" подразумевает, что содержимое этого участка может изменяться.
В качестве имен переменных в Паскале могут быть латинские буквы с индексами. Причем может быть не одна буква, а несколько.
В качестве числового индекса может быть любое целое число. Всего в обозначении переменных может быть произвольное число символов, но значащими считаются первые 63 символа. В некоторых версиях Паскаля допускаются имена переменных, содержащие до 8 символов.
Примеры обозначений переменных: a, b, e, vert, trenin, d, f1, g23, p564, red18 и т.п.
Имена переменных называются идентификаторами.

Замечания

Не имеет значение в обозначении переменных маленькими или большими (строчными или прописными) буквами они написаны!
Имя переменной должно удовлетворять следующим требованиям:
1) всегда начинаться с буквы, после которой при необходимости может следовать некоторое целое число (индекс);
2) в идентификаторе (имени) не должно быть пробелов, запятых или других непредусмотренных знаков, например недопустимы следующие имена переменных: jan.2 (есть точка); 3x (начинается с цифры); a 2 (имеется пробел); чн (русские буквы);


3) нельзя использовать в качестве имен переменных слова, которые являются служебными или операторами, например: program, begin, write, end и другие.      

3. Команда присваивания

 

В программе, которая была приведена выше, есть следующие записи:    Что означает знак ":="?
Так на языке Паскаль обозначается команда присваивания. В чем ее сущность?

Команда присваивания "стирает" предыдущее значение переменной и "придает" ей новое значение. На языке Паскаль команда присваивания обозначается: := двоеточие и знак равно.

В нашей программе, переменной b присваивается значение a + 17, что равно 33, переменной c присваивается значение частного от деления переменной b на 3,
Чтобы понять значение терминов "стирает" и "придает" в определении команды присваивания, надо немного глубже рассмотреть "компьютерную физиологию", т.е., что происходит в компьютере при выполнении команды присваивания.
Для каждой переменной в оперативной памяти компьютера отводится место - ячейка памяти, куда компьютер заносит значение этой переменной. Каждая ячейка имеет свое имя по имени переменной в программе. В нашей программе под переменные отведено 3 ячейки с именами a, b, c.
При выполнении команды присваивания в ячейки с этими именами будут занесены соответствующие числа. Если в них была записана какая-то информация, то она уничтожится. Происходит процесс похожий на запись на магнитофонную ленту. При записи новой информации прежняя стирается.

4. Операторы write и writeln. Процедуры вывода информации

 

Вы обратили внимание, что в программе были использованы операторы write и writeln. Английское слово  write  переводится - писать, а слово  writeln  происходит  как сокращение от двух английских слов write - писать и line - строка.
Кроме операторов write и writeln мы говорим о процедурах вывода информации.
Что же такое процедура?
Понятие процедуры - одно из основных понятий Паскаля. Ему подобна подпрограмма на языке Бейсик.

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

Выше мы говорили об операторах вывода информации, хотя в Паскале, в отличие от Бейсика нет операторов вывода информации, а через служебные слова write и writeln происходит обращение к стандартной или встроенной процедуре вывода информации. Стандартная процедура не нуждается в предварительном описании, она доступна любой программе, в которой содержится обращение к ней. Вот почему обращение к  write  или writeln напоминает оператор PRINT -  вывода информации на языке Бейсик.
Разница между оператором вывода и обращением к процедуре вывода состоит в том, что имя процедуры вывода, как и любой другой процедуры Паскаля не является зарезервированным словом, а, следовательно, пользователь может написать свою собственную процедуру с именем write или writeln. Но это очень редко используется на практике.

Таким образом, операторы  write  и  writeln  являются операторами обращения к встроенным процедурам вывода информации.

Обе эти процедуры выводят информацию на экран, если эта информация содержится в виде значений переменных, тогда достаточно в скобках в операторах write или writeln записать имена этих переменных, например: write(a), writeln(f). Если таких переменных несколько, то их записывают через запятую, например: write(a, b, c, d), writeln(e,f, g, h).
Если информацией являются слова, предложения, части слов или символы, тогда она заключается между знаками " " " - апостроф, например:
write("Введите длину пути"),
writeln("Значение скорости равно"
Возможен одновременный вывод и символьной информации и значений переменных, тогда в операторе  write  или writeln они разделяются запятыми, например:
write("Значение температуры равно ", t),
writeln("Скорость равна ", v, " при времени движения ", t).
Заметьте, в конце слов, перед апострофом оставлен пробел.
Для чего это сделано? Конечно, чтобы  следующая числовая информация была разделена со словами пробелом.
В чем состоит отличие в работе процедур  write и writeln?

Процедура write требует от следующих процедур ввода или вывода, информацию вводить или выводить ее на ту же строку (в одну строку).

Если в программе указан оператор write и за ним следуют еще операторы write или writeln, то выводимая ими информация будет присоединяться к строке информации первого оператора write.

Например: write("Сегодня и завтра будут ");
write("выходные дни ");

На экран выводится:
Сегодня и завтра будут выходные дни

Пробел между словом "будут" и "выходные" обеспечивается за счет пробела в конце первой строки. Если его не будет, то вывод произойдет слитно:

    write("Сегодня и завтра будут");
write("выходные дни");
Сегодня и завтра будутвыходные дни

Еще некоторые примеры: t:=20;
write("Время движения равно ");
write(t);
write(" секунд");
Время движения равно 20 секунд
a := 18; b := 12;
write("Сумма чисел равна ");
write(a+b);
write(", а произведение ");
write(a*b);
Сумма чисел равна 30, а произведение 216

Процедура writeln обеспечивает для следующих процедур ввода или вывода информации вводить или выводить ее с начала каждой новой строки.

В программе:

writeln("Сегодня вечером, вечером, вечером,");
writeln("Когда пилотам, скажем прямо, делать нечего");

На экран выводится:

Сегодня вечером, вечером, вечером,
  Когда пилотам, скажем прямо, делать нечего

В программе:

a := 25;
b := 17;
writeln("Сумма и разность чисел равны:");
writeln(a + b);
writeln(a - b);

На экране:

Сумма и разность чисел равны:
42
8

5. Операторы read и readln. Процедуры ввода информации

 

Так же, как и для операторов вывода информации, операторы read и reeadln являются операторами обращения к встроенным процедурам ввода информации.
Операторы read (считывать) и readln, который происходит от двух английских слов read (считывать) и line (строка) используются в программах для ввода информации в память компьютера и "считывания" значений в переменную.
Рассмотрим работу этих операторов и процедур ввода информации.
В нашей программе есть процедура readln(a). При выполнении программы, встретив оператор readln, компьютер приостановит работу в ожидании ввода информации. После того, как мы введем с клавиатуры значение переменной a - 16, компьютер присвоит это значение переменной a, т.е. отправит его в ячейку памяти с именем a и продолжит выполнение программы. Этот процесс мы называем "считыванием" значения в переменную.

Итак, процедуры read и readln "считывают" значения переменных и присваивают их тем переменным, которые записаны в них.

Таких переменных может быть несколько, тогда они записываются в этих операторах через запятую, например:
read(a, b, c, n, g, j, i), readln(e,f, k, p, d) и т.п.
Чем же отличается работа процедур read и readln?

Процедура read потребует после себя ввод или вывод информации в одну строку, а процедура  readln  дает возможность после себя вводить и выводить информацию с начала новой строки.


Например:
В программе: write("Введите значения a и b "); read(a, b);
write("Ввод информации в одну строку");

При выполнении этой части программы, на экран будет выведено все то, что записано в первом операторе write, затем в той же строке будет находиться курсор, и компьютер будет ждать ввода значений a и b. Введем их значения - 2 и 3, разделяя их пробелом или, иначе говоря, через пробел. После этого, в той же строке будет выдана информация записанная в следующем операторе write.
На экране:

Введите значения a и b 2 3 Ввод информации в одну строку

В программе:

writeln("Введите значения a, b и c); readln(a, b, c);
writeln("Ввод и вывод информации с начала строки");

На экране:

Введите значения a, b и c
2 3 4

Ввод и вывод информации с начала строки

Автор: Тишин Владимир Иванович

Роль образа Софьи

В основе сюжета комедии Грибоедова лежит конфликт человеке прогрессивных убеждений Александра Андреевича Чацкого с консервативным обществом Но эта сюжетная линия развивается в пьесе одновременно другой, ведь приезжает герой в Москву с единствен ной целью - после трехлетней разлуки встретиться с девушкой, которую он любит. Это дочь хозяина дома -Софья Павловна Фамусова. Зрители ...

Тип Кольчатые черви

Тип Кольчатые черви Кольчатые черви (кольчецы) — крупный тип (около 9 тыс. видов) высших свободножи вущих морских, пресноводных и почвенных животных, имеющих более сложную организацию, чем плоские и круглые черви. Это в первую очередь относятся к морским многощетинковым червям, которые являются узловой группой в эволюции высших беспозвоночных: от их древних предков ...

Пульсары

В 60-х годах XX века совершенно случайно, при наблюдении с радиотелескопом, который был предназначен для изучения мерцаний космических радиоисточников, Джослин Белл, Энтони Хьюиш и другие сотрудники Кембриджского университета Великобритании обнаружили серии периодических импульсов продолжительностью 0,3 секунды на частоте 81,5 МГц, которые повторялись через удивительно ...

Колебания и волны

  Колебания — повторяющийся в той или иной степени во времени процесс изменения состояний системы. Например, при колебаниях маятника повторяются отклонения его в ту и другую сторону от вертикального положения; при колебаниях в электрическом колебательном контуре повторяются величина и направление тока, текущего через катушку. Колебания почти всегда связаны с попеременным ...