Алфавит и словарь языка паскаль
Глава 1. Основные понятия системы программирования Турбо Паскаль
Алфавит языка Турбо Паскаль
Большинство программ создаются для решения какой-либо задачи. В процессе ее решения на ПК необходимо: ввести данные, указать способ их обработки, задать способ вывода полученных результатов. Поэтому нужно знать следующее:
- Как ввести информацию в память (ввод).
- Как хранить информацию в памяти (данные).
- Как указать правильные команды для обработки данных (операции).
- Как передать данные из программы пользователю (вывод).
Необходимо также уметь упорядочивать команды так, чтобы:
- некоторые из них выполнялись только в случае, если соблюдается некоторое условие или ряд условий (условное выполнение);
- другие выполнялись повторно некоторое число раз (циклы);
- третьи выделялись в отдельные части, которые могут быть неоднократно выполнены в разных местах программы (подпрограммы).
Таким образом, нужно уметь использовать семь основных элементов программирования: ввод, данные, операции, вывод, условное выполнение, циклы и подпрограммы и на их основе строить программы.
Это список не является полным, однако, он содержит те элементы, которые присущи обычно всем программам. Многие языки программирования имеют еще и дополнительные средства, в том числе и Паскаль.
Основные файлы пакета Турбо Паскаль:
- Turbo.exe– интегрированная среда программирования;
- Turbo.hlp– файл, содержащий данные для оперативной подсказки;
- Turbo.tp – файл конфигурационной системы;
- Turbo.tpl – библиотека стандартных модулей Турбо Паскаля.
Для работы в графическом режиме необходимы Graph.tru– модуль с графическими процедурами и функциями Турбо Паскаля, несколько файлов с расширением *.BGI– драйверы различных типов видеосистем ПК, несколько файлов с расширением *.CHR, содержащих векторные шрифты.
После загрузки системы экран разделен на три части: основное (или рабочее) окно, главное меню и строка, в которой указывается назначение основных функциональных клавиш. Переход из основного окна в главное меню и обратно осуществляется посредством клавиши F10.
В рабочем окне осуществляется набор текста программы, запуск же происходит следующим образом: выход в меню, выбор пункта Run–Run.
Для того чтобы сохранить программу, необходимо: выйти в меню, выбрать File–Save(Saveas…), в появившемся окне ввести имя файла и нажать клавишуEnter.
Выход из системы программирования: выход в меню, пункт File–Exit.
Алфавит и словарь языка Паскаль
Язык – совокупность символов, соглашений и правил, используемых для общения. При записи алгоритма решения задачи на языке программирования необходимо четко знать правила написания и использования языковых единиц. Основой любого языка является алфавит (набор знаков, состоящий из букв, десятичных и шестнадцатеричных цифр, специальных символов).
Алфавит Паскаля составляют:
- прописные и строчные буквы латинского алфавита: A,B,C…Y,Z,a,b,c,…y,z;
- десятичные цифры: 0, 1, 2,…9;
- специальные символы: + - * / > < = ; # ‘ , . : {} [] ( )
- комбинации специальных символов , которые нельзя разделять пробелами, если они используются как знаки операций: «:=», «..», «<>», «<=», «>=», «{}».
- Неделимые последовательности знаков алфавита образуют слова, отделенные друг от друга разделителями. Ими могут быть пробел, комментарий или символ конца строки. Словарь Паскаля можно разделить на три группы слов: зарезервированные слова, стандартные идентификаторы и идентификаторы пользователя.
Зарезервированные слова (см таб.1) имеют фиксированное написание и навсегда определенный смысл. Они не могут изменяться программистом и их нельзя использовать в качестве имен для обозначения величин.
Идентификатор – имя (identification– установление соответствия объекта некоторому набору символов). Для обозначения определенных разработчиками языка функций, констант и т.д. служат стандартные идентификаторы, напримерSqr,Sqrtи т.д. В этом примереSqrвызывает функцию, которая возводит в квадрат данное число, аSqrt– корень квадратный из заданного числа. Пользователь может переопределить любой стандартный идентификатор, но чаще всего это приводит к ошибкам, поэтому на практике их используют без изменения. Идентификаторы пользователя – это те имена, которые дает сам программист. При записи программ нужно соблюдать общие правила написания идентификаторов:
- Идентификатор начинается только с буквы (исключение составляют специальные идентификаторы меток).
- Идентификатор может состоять из букв, цифр и знака подчеркивания.
- Максимальная длина – 127 символов.
- При написании идентификаторов можно использовать прописные и строчные буквы.
- Между двумя идентификаторами должен стоять хотя бы один пробел.
Некоторые зарезервированные слова версии Турбо Паскаль
Absolute | Абсолютный | Library | Библиотека |
And | Логическое И | Mod | Остаток от деления |
Array | Массив | Not | Логическое НЕ |
Begin | Начало блока | Or | Логическое ИЛИ |
Case | Вариант | Of | Из |
Const | Константа | Object | Объект |
Div | Деление нацело | Procedure | Процедура |
Go to | Переход на | Program | Программа |
Do | Выполнять | Repeat | Повторять |
Downto | Уменьшить до | String | Строка |
Else | Иначе | Then | То |
End | Конец блока | To | Увеличивая |
File | Файл | Type | Тип |
For | Для | Until | До |
Function | Функция | Uses | Использовать |
If | Если | Var | Переменная |
Interrupt | Прерывание | While | Пока |
Interface | Интерфейс | With | С |
Label | Метка | Xor | Исключающее ИЛИ |
Таблица 1
Группа слов, имеющая смысл, называется словосочетание. В языке программирования словосочетание, состоящее из слов и символов и задающее правило вычисления некоторого значения, называется выражением. Минимальная конструкция языка, представляющая законченную мысль, есть предложение. Если предложение языка программирования задает полное описание действия, которое необходимо выполнить, то оно называется оператором. Предложение, описывающее структуру и организацию данных, называется описанием.
Глава 1. Основные понятия системыпрограммирования Турбо Паскаль
Величины в Паскале
Решение задач на ПК - это процесс сбора, обработки и передачи информации. Поэтому задача любой программы состоит в обработке данных. В Паскале данные делятся на константы и переменные. Они определяются идентификаторами (именами).
Константами называются такие данные, которые не изменяются в процессе выполнения программы, в отличие от переменных, которые могут менять свои значения. Имя переменной подобно ящичку, который можно заполнить различными значениями, что нельзя сделать с константой. Переменная характеризуется именем, типом (см.1.2.) и значением.
Кроме констант и переменных существуют так называемые типизированные константы, которые являются как бы промежуточным звеном между переменными и константами (В данном пособии не рассматриваются. Рекомендуется дополнительная литература, например, [1]).
Глава 1. Основные понятия системы программирования Турбо Паскаль
Структура программы
В программе программист записывает последовательность действий, выполняемых над определенными данными с помощью различных операций для реализации заданной цели. Основные требования, предъявляемые к программе:
- точность полученного результата;
- время выполнения;
- объем требуемой памяти (Максимальный размер программы ограничен. Компилятор позволяет обрабатывать программы, в которых объем данных и генерируемый машинный код не превышают 64 Кбайт каждый. Если объем программы требует большего количества памяти то необходимо использовать дополнительные средства).
Структура программы:
- Заголовок, состоящий из зарезервированного слова programи имени программы. Заголовок несет смысловую нагрузку и может отсутствовать, однако рекомендуется всегда его записывать для быстрого распознавания нужной программы.
- Программный блок, состоящий из 2 разделов:
1. Раздел описаний, в котором должны быть описаны все идентификаторы, встречающиеся в программе. Он представляет собой:
список имен подключаемых библиотечных модулей (определяется зарезервированным словом uses);
описание меток;
описание констант;
определение типов данных;
описание переменных;
описание процедур и функций;
Раздел описания начинается соответствующим каждому элементу списка служебным словом (таблица 1), после которого идет последовательность величин одного типа, разделенных запятой. После списка имен ставится двоеточие и указывается тип данных (см. 1.2.).
Любой элемент данного списка в программе может отсутствовать.
2. Раздел операторов.
Данный раздел начинается со служебного слова Beginи заканчивается служебным словомEnd. Далее задаются действия над объектами программы, введенными в разделе описаний. Операторы, посредством которых эти действия производятся, разделяются точкой с запятой. После последнего словаEndставится точка.
Для лучшего восприятия текста программы и поиска ошибок рекомендуется следующая схема:
- зарезервированные слова program,procedure,functionи т.д. пишутся строчными буквами;
- идентификаторы начинаются с прописных букв;
- операторы записываются строчными буквами;
- логически подчиненные структуры записываются на 1 строку ниже и на 1- 2 позиции правее по отношению к более старшим.
Глава 1. Основные понятия системы программирования Турбо Паскаль
Типы данных
При решении задач выполняется обработка информации различного свойства, например дробные и целые числа, слова, строки и т.д. Для описания множества допустимых значений величины и совокупности операций, в которых участвует данная величина, используется указание ее типа данных. Тип данных – это множество величин, объединенных определенной совокупностью допустимых операций. Каждый тип имеет свой диапазон значений и специальное зарезервированное слово для описания. Все типы данных можно разделить на две группы: скалярные (простые) и структурированные (составные). Простые типы данных также делятся на стандартные и пользовательские. Стандартные – предлагаются разработчиками Турбо Паскаля, а пользовательские разрабатывают сами программисты.
Представим типы данных в виде схемы:
1. Простые типы
Порядковые типы
Целые типы
Логический тип
Символьный тип
Перечисляемый тип
Интервальный тип
Вещественные типы
Ссылочный тип
2. Структурированные типы
Строковый тип
Регулярный тип
Комбинированный тип
Множественный тип
Файловый тип
3. Процедурные типы
В данном учебном пособии будут рассмотрены лишь основные типы данных, используемые наиболее часто в курсе учебного школьного программирования. С другими интересующими типами данных можно познакомиться в специальной литературе (например, [1] ). Рассмотрим пока лишь простые типы данных, структурированные типы требуют отдельного более тщательного рассмотрения и будут изучены в частях 4 и 5.
Глава 1. Основные понятия системы программирования Турбо Паскаль
Целочисленные типы данных
Тип | Диапазон | Требуемая память (байт) |
Byte Shorint Integer Word Longint | 0…255 -128 …127 -32768 … 32767 0 … 65535 -2147483648 …2147483647 |
Значения целых типов могут изображаться в программе 2 способами: в десятичном виде и в шестнадцатеричном. Если число представлено в шестнадцатеричной системе, перед ним без пробела ставится знак $, а цифры старше 9 обозначаются латинскими буквами от AдоF. Диапазон изменений таких чисел от $0000 до $FFFF.
Глава 1. Основные понятия системы программирования Турбо Паскаль
Вещественные типы данных
Вещественные (действительные) типы данных представляют собой значения, которые используются в арифметических выражениях и могут быть представлены двумя способами: с фиксированной и с плавающей точкой.
Тип | Диапазон | Мантисса | Требуемая память (байт) |
Real Single Double Extended Comp | 2.9*10E-39 … 1.7*10E38 1.5*10Е-45 … 3.4*10Е38 5.0*10Е-324 … 1.7*10Е308 1.9*10Е-4951 … 1.1*10Е4932 -2Е+63+1 … 2Е+63-1 | 11 – 12 7 – 8 15 – 16 19 – 20 10 – 20 |
Примечание. Все вещественные типы, кроме Real, могут быть использованы в программе при наличии в ПК математического сопроцессораIntel8087/80287.
Действительные числа с фиксированной точкой записываются по обычным правилам арифметики, только целая часть от дробной отделяется точкой. Если точка отсутствует, число считается целым. Перед числом может стоять знак «+» или «-». Если знака нет, то число считается положительным.
Числа в форме с плавающей точкой представляются в экспоненциальном виде: mE+p, гдеm– мантисса (целое или дробное число), Е означает 10 в степени, р – порядок (целое число).
Например, 5.18Е+2 = 5.18 * 102 = 518
10Е-03 = 10 * 10 –3= 0.01
Глава 1. Основные понятия системы программирования Турбо Паскаль
Символьный тип
Литерный (символьный) тип charопределяется множеством значений кодовой таблицы ПК. Каждому символу приписывается целое число в диапазоне от 0 до 255. Для кодировки используется кодASCII. Например код символа 'A' при русской раскладке клавиатуры будет равен 192
Для размещения в памяти переменной литерного типа нужен 1 байт.
Глава 1. Основные понятия системы программирования Турбо Паскаль
Логический тип
Логический (булевский) тип boolean определяется двумя значениями: true (истина) и false (ложь). Он применяется в логических выражениях и выражениях отношения. Для размещения в памяти - 1 байт.
Глава 1. Основные понятия системы программирования Турбо Паскаль
Арифметические операции и стандартные функции
Арифметическим называется выражение, составленное из операндов – величин, над которыми производится операция, скобок и знаков операций. В результате вычисления выражения получается значение определенного типа. Порядок вычисления выражения определяется скобками и старшинством операций. Они делятся на арифметические, отношения, логические и другие. Операции могут быть унарными и бинарными.
Арифметические операции
Операция | Действие | Тип операндов | Тип результата |
Бинарные | |||
+ | Сложение | Целый, вещественный | Целый, вещественный |
- | Вычитание | Целый, вещественный | Целый, вещественный |
* | Умножение | Целый, вещественный | Целый, вещественный |
/ | Деление | Целый, вещественный | Вещественный |
DIV | Целочисленное деление | Целый | Целый |
MOD | Остаток от деления | Целый | Целый |
Унарные | |||
+ | Сохранение знака | Целый, вещественный | Целый, вещественный |
- | Отрицание знака | Целый, вещественный | Целый, вещественный |
Операции отношения
Операции отношения выполняют сравнение двух операндов и определяют, истинно значение или ложно. Сравниваемые величины могут принадлежать к любому типу данных, и результат всегда имеет логический тип, принимая одно значение из двух: истина или ложь.
Операция | Название | Выражение |
= | Равно | А=В |
<> | Неравно | А<>B |
> | Больше | A>B |
< | Меньше | A<B |
>= | Больше или равно | A>=B |
<= | Меньше или равно | A<=B |
Стандартные математические функции
Обращение | Тип аргумента | Тип результата | Функция |
Abs(x) | Целый, вещественный | Целый, вещественный | Модуль аргумента |
Arctan(x) | Целый, вещественный | Вещественный | Арктангенс |
Cos(x) | Целый, вещественный | Вещественный | Косинус |
Exp(x) | Целый, вещественный | Вещественный | ех- экпонента |
Frac(x) | Целый, вещественный | Вещественный | Дробная часть х |
Int(x) | Целый, вещественный | Вещественный | Целая часть х |
Ln(x) | Целый, вещественный | Вещественный | Натуральный логарифм |
Random | Вещественный | Псевдослучайное число [0,1] | |
Random(x) | Целый | Целый | Псевдослучайное число [0,х] |
Round(x) | Вещественный | Целый | Округление до ближайшего целого |
Sin(x) | Целый, вещественный | Вещественный | Синус |
Sqr(x) | Целый, вещественный | Вещественный | Квадрат х |
Sqrt(x) | Целый, вещественный | Вещественный | Корень квадратный из х |
Trunc(x) | Вещественный | Целый | Ближайшее целое, не превышающее х по модулю |
Логические операции
Логические выражения в результате вычисления принимают логические значения TrueиFalse. Операндами это выражения могут быть логические константы, переменные, отношения. Идентификатор логического типа в Паскале:boolean.
В Паскале имеется 4 логические операции: отрицание -NOT, логическое умножение -AND, логическое сложение -OR, исключающее «или» -XOR. Использованы обозначения:T–true,F–false.
A | B | Not A | A and B | A or B | A xor B |
T | T | F | T | T | F |
T | F | F | F | T | T |
F | F | T | F | F | F |
F | T | T | F | T | T |
Приоритеты операций: not,and,or,xor. Операции отношения ( = , <> …) имеют более высокий приоритет, чем логические операции, поэтому их следует заключать в скобки при использовании по отношению к ним логических операций.
Пример. Составить программу, по которой будет выведено значение «истина», если точка с заданными координатами (x,y) лежит внутри некоторой области, и «ложь» – в противном случае. Область состоит из 2 частей: первая частьx£0;y³-x-3 иy2+x2£9, вторая часть -x³0 иx2+y2£25.
Решение: Данная область состоит из 2 частей. 1: x<=0; x2+y2<=9; y>= - x-3.
2: x>=0; x2+y2<=25.
Точка с координатами (x,y) лежит в данной области, если она принадлежит 1или2 части.
Program point;
Var x, y:real; L:boolean;
Begin
Writeln(‘Введите х иy’);
Readln(x,y);
L:= (x<=0) and (sqr(x)+sqr(y)<=9) and (y>=-x-3) or
(x>=0) and (sqr(x)+sqr(y)<=25);
writeln(‘Точка лежит в области?’,L);
end.
Результатом выполнения программы будет:
Введите xи y
2 0 {с клавиатуры сами ввели через пробел 2 и 0}
Точка лежит в области?TRUE
Приоритет операций (в порядке убывания):
- вычисление функции;
- унарный минус, not;
- умножение, деление, div,mod,and;
- сложение, вычитание, or,xor;
- операции отношения
Глава 1. Основные понятия системы программирования Турбо Паскаль
Ввод и вывод данных
Решение даже самой простой задачи на компьютере не обходится без операций ввода – вывода информации. Ввод данных – это передача информации от внешнего носителя в оперативную память для обработки. Вывод - обратный процесс, когда данные передаются после обработки из оперативной памяти на внешний носитель (экран монитора, принтер, дискету или винчестер и другие устройства). Выполнение этих операций производится путем обращения к стандартным процедурам: Read,Readln,Write,Writeln.
Глава 1. Основные понятия системы программирования Турбо Паскаль
Ввод данных с клавиатуры
Процедура чтения Readобеспечивает ввод данных для последующей их обработки программой. Общий вид:Read(<список переменных>);
В списке перечисляются имена переменных. Значения этих переменных набираются через пробел на клавиатуре и высвечиваются на экране после запуска программы. После набора данных для одной процедуры Readнажимается клавиша вводаEnter. Значения переменных должны вводиться в строгом соответствии с синтаксисом языка Паскаль. Если соответствие нарушено, то возникают ошибки.
Процедура чтения Readln аналогична процедуре Read, единственное отличие в том, что после считывания последнего в списке значения курсор переходит на начало новой строки.
Пример:
Program primer;
Var i, k:integer; c,d, s: real;
begin
readln (c,d);
read(i,k);
…
end.
В данном случае необходимо ввести сначала два действительных числа через пробел. Переменной с присваивается значение, равное первому введенному числу, а переменной d– значение, равное второму введенному числу. После ввода этих значений курсор переходит на начало новой строки (за это отвечаетlnследующий за словомRead). Далее требуется ввести еще два целых числа, которые будут присвоены значениям переменныхiиkсоответственно.
Глава 1. Основные понятия системы программирования Турбо Паскаль
Вывод данных
Процедура вывода Writeпроизводит вывод данных.
Общий вид: Write(<список вывода>);
В списке вывода могут быть представлены выражения допустимых типов данных (integer,real,charи т.д.) и произвольный текст, заключенный в апострофы.
Например, Write(‘Привет’); Write(34.7); Write(45+55); Write(b, d);
Процедура Writelnаналогична процедуреWrite. Отличие в том, что после вывода последнего в списке выражения курсор переходит на начало новой строки.
В процедурах вывода WriteиWritelnимеется возможность записи выражения, определяющего ширину поля вывода.
При рассмотрении форматов вывода примем следующие обозначения:
I,p,q– целочисленное выражение;
R- выражение вещественного типа;
# - цифра;
* - знак «+» или «- »;
_ - пробел.
Значение I | Выражение | Результат |
Write(I); | ||
Write (I, I, I); | ||
Write (I : 6); | ___324 | |
Write (I + I : 7); | ____624 | |
Значение R | Выражение | Результат |
123.432 | Write(R); | __1.2343200000E+02 |
-1.34E+01 | Write (R); | _ -1.3400000000E+01 |
304.55 | Write (R :15); | 3.045500000E+02 |
Значение R | Выражение | Результат |
304.66 | Write(R:8 : 4); | 304.6600 |
45.322 | Write (R : 5 : 2); | 45.32 |
Пример:
Program primer;
Var
a, b, c, sum:integer;
begin
a:=4; b:=6; c:=55;
Write(a:3); Write(b:3); Write(c:3);
Sum:=a+b+c;
Writeln (‘A=’,a);
Writeln (‘B=’,b);
Writeln (‘C=’,c);
Writeln (‘Сумма A+B+C равна ’, sum);
End.
Результат выполнения:
4 6 55
А=4
В=6
С=55
Сумма А+В+С равна 65
Глава 2. Операторы языка Паскаль
Общие сведения
Оператором называется предложение языка программирования, задающее полное описание некоторого действия, которое необходимо выполнить. Основная часть программы на языке Турбо Паскаль представляет собой последовательность операторов. Разделителем операторов служит точка с запятой. Операторы, не содержащие других операторов, называются простыми. К ним относятся операторы присваивания, безусловного перехода, вызова процедуры, пустой. Структурные операторы представляют собой конструкции, построенные из других операторов по строго определенным правилам. Эти операторы можно разделить на три группы: составные, условные и повтора.
Глава 2. Операторы языка Паскаль
Оператор присваивания
Оператором называется предложение языка программирования, задающее полное описание некоторого действия, которое необходимо выполнить. Основная часть программы на языке Турбо Паскаль представляет собой последовательность операторов. Разделителем операторов служит точка с запятой. Операторы, не содержащие других операторов, называются простыми. К ним относятся операторы присваивания, безусловного перехода, вызова процедуры, пустой. Структурные операторы представляют собой конструкции, построенные из других операторов по строго определенным правилам. Эти операторы можно разделить на три группы: составные, условные и повтора.
Глава 2. Операторы языка Паскаль
Оператор вызова процедуры
Оператор вызова процедуры служит для активизации стандартной процедуры или процедуры, определенной пользователем. Стандартные процедуры находятся в файлах, подключаемых модулем и для их использования достаточно указать имя процедуры, и если необходимо дополнительные параметры. Для того, чтобы вызвать свою процедуру, ее для этого надо описать перед началом программы (begin), а затем уже использовать.
Например, ClrScr; {Вызов стандартной процедуры очистки экрана}. Подробное рассмотрение данной темы приведено в части 3.
Глава 2. Операторы языка Паскаль
Оператор безусловного перехода
Оператор безусловного перехода (goto) означает «перейти к» и применяется в случаях, когда после выполнения некоторого оператора надо выполнить не следующий по порядку, а какой-либо другой, отмеченный меткой, оператор. Общий вид:goto<метка>.
Метка объявляется в разделе описания меток и состоит из имени и следующего за ним двоеточия. Имя метки может содержать цифровые и буквенные символы, максимальная длина имени ограничена 127 знаками. Раздел описания меток начинается зарезервированным словом Label, за которым следует имя метки.
Пример.
Program primer;
Label 999, metka;
Begin
….
Go to 999;
…
999: write (‘ Имя’);
…
Go to metka;
….
Metka: write(‘Фамилия’);
…
end.
Использование безусловных передач управления в программе считается теоретически избыточным и подвергается критике, так как способствует созданию малопонятных и трудномодифицируемых программ, которые вызывают сложности при отладке. Поэтому рекомендуется минимальное использование оператора безусловного перехода с соблюдением следующих правил:
- Следует стремиться применять операторы перехода для передачи управления только вниз (вперед) по тексту программы;
- Расстояние между меткой и оператором перехода на нее не должно превышать одной страницы текста (или высоты экрана дисплея).
Глава 2. Операторы языка Паскаль
Пустой оператор
Пустой оператор не содержит никаких символов и не выполняет никаких действий. Используется для организации перехода к концу блока в случаях, если необходимо пропустить несколько операторов, но не выходить из блока. Для этого перед зарезервированным словом endставятся метка и двоеточие, например:
Label m;
…
begin
…
go to m;
…
m:
end;
Глава 2. Операторы языка Паскаль
Структурные операторы
Структурные операторы представляют собой конструкции, построенные из других операторов по строгим правилам. Их можно разделить на три группы: составные, условные и повтора. Применение структурных операторов в вашей программе очень часто просто незаменимо, потому что они позволяют программисту сделать его программу зависимой от каких-либо условий, например введенных пользователем. К тому же применяя операторы повтора вы получаете возможность обрабатывать большие объемы данных за сравнительно малый отрезок времени (это конечно же зависит и от процессора:)
Глава 2. Операторы языка Паскаль
Составной оператор
Это оператор представляет собой совокупность произвольного числа операторов, отделенных друг от друга точкой с запятой, и ограниченную операторными скобками beginиend. Он воспринимается как единое целое и может находиться в любом месте программы, где возможно наличие оператора.
Глава 2. Операторы языка Паскаль
Условные операторы
Условные операторы предназначены для выбора к исполнению одного из возможных действий, в зависимости от некоторого условия (при этом одно из действий может отсутствовать). Для программирования ветвящихся алгоритмов в Турбо Паскале есть специальные операторы. Одним из них является условный оператор If. Это одно из самых популярных средств, изменяющих порядок выполнения операторов программы.
Он может принимать одну из форм:
If<условие>then<оператор1>
else<оператор2>;
или
If<условие>then<оператор>;
Оператор выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисление получается значение логического (булевского) типа. Если это значение – «истина», то выполняется оператор1, указанный после слова then. Если же в результате имеем «ложь», то выполняется оператор2. В случае, если вместо оператора1 или оператора2 следует серия операторов, то эту серию операторов необходимо заключить в операторные скобкиbegin…end.
Обратить внимание, что перед словом elseточка с запятой не ставится.
Пример 1.Составить программу, которая запрашивает возраст ребенка и затем выдает решение о приеме ребенка в школу (возраст³7лет).
Program sh;
Var v: integer;
Begin
Write(‘Введите возраст ребенка’);
Readln(v);
If v>=7 then writeln(‘Принимаем в школу’)
else writeln (‘Не принимаем в школу’);
end.
Задание. Модифицировать данную программу, чтобы ограничить верхнюю границу приема в школу 16 годами.
Решение:
Program sh;
Var v: integer;
Begin
Write(‘Введите возраст ребенка’);
Readln(v);
If (v>=7) and (v<=16) then writeln(‘Принимаем в школу’)
else writeln (‘Не принимаем в школу’);
end.
Пример 2.Даны два числа. Меньшее из этих чисел заменить суммой данных чисел, большее - произведением.
Program sh;
Var x, y,s,p: integer;
Begin
Write(‘Введите 2 числа’);
Readln(x, y);
S:=x+y; p:=x*y;
If x>=y
then begin y:=s; x:=p; end
else begin x:=s; y:=p; end;
writeln(‘x=’, x);
writeln(‘y=’, y);
end.
Если оператор If обеспечивает выбор из двух альтернатив, то существует оператор, который позволяет сделать выбор из произвольного числа вариантов. Это оператор выбора Case. Он организует переход на один из нескольких вариантов действий в зависимости от значения выражения, называемого селектором.
Общий вид: Case k of
<const1>: <оператор1>;
<const2>: <оператор2>;
…..
<constN>: <операторN>
else<операторN+1>
end;
Здесь k– выражение-селектор, которое может иметь только простой порядковый тип (целый, символьный, логический). <const1>, …<constN> - константы того же типа, что и селектор.
Оператор Caseработает следующим образом. Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна значению селектора, то выполняется оператор, стоящий за словомelse. Если же это слово отсутствует, то активизируется оператор, находящийся за границейCase, т.е. после словаend.
При использовании оператора Caseдолжны выполняться следующие правила:
1. Выражение-селектор может иметь только простой порядковый тип (целый, символьный, логический).
2. Все константы, которые предшествуют операторам альтернатив, должны иметь тот же тип, что и селектор.
3. Все константы в альтернативах должны быть уникальны в пределах оператора выбора.
Формы записи оператора:
Селектор интервального типа:
Case I of
1..10 : writeln(‘число в диапазоне 1-10’);
11.. 20 : writeln(‘число в диапазоне 11-20’);
elsewriteln(‘число вне пределов нужных диапазонов’)
end;
Селектор целого типа:
Case I of
1 : y:= I+10;
2 : y:= I+20;
3: y:= I +30;
end;
Пример 1.Составить программу, которая по введенному номеру дня недели выводит на экран его название.
Program days;
Var day:byte;
Begin
Write(‘Введите номер дня недели’);
Readln(day);
Case day of
1: writeln(‘Понедельник’);
2: writeln(‘Вторник’);
3: writeln(‘Среда’);
4: writeln(‘Четверг’);
5: writeln(‘Пятница’);
6: writeln(‘Суббота’);
7: writeln(‘Воскресенье’)
elsewriteln(‘Такого дня нет’);
end; end.
Пример 2.Составить программу, которая по введенному номеру месяца выводит на экран название времени года.
Program m;
Var k:byte;
Begin
Write(‘Введите номер месяца’);
Readln(k);
Case k of
1, 2, 12: writeln(‘Зима’);
3, 4, 5: writeln(‘Весна’);
6, 7, 8: writeln(‘Лето’);
9, 10, 11: writeln(‘Осень’)
elsewriteln(‘Такого месяца нет’);
end;end.
Глава 2. Операторы языка Паскаль
Операторы повтора (цикла)
Если в программе возникает необходимость неоднократного выполнения некоторых операторов, то для этого используются операторы повтора (цикла). В языке Паскаль различают три вида операторов цикла: цикл с предусловием (while), цикл с постусловием (repeat) и цикл с параметром (for).
Если число требуемых повторений заранее известно, то используется оператор, называемый оператором цикла с параметром.
Оператор цикла с параметром имеет два варианта записи:
1) for<имя переменной> := <начальное значение>to<конечное значение>do
<тело цикла>
2) for<имя переменной> := <начальное значение>downto<конечное значение>do
<тело цикла>
Имя переменной – параметр цикла, простая переменная целого типа; <тело цикла> - операторы или оператор. Цикл повторяется до тех пор пока значение параметра лежит в интервале между начальным и конечным значениями. В первом варианте при каждом повторении цикла значение параметра увеличивается на 1, во втором - уменьшается на 1.
При первом обращении к оператору forвначале определяются начальное и конечное значения, и присваивается параметру цикла начальное значение. После этого циклически повторяются следующие действия.
1. Проверяется условие параметр цикла <= конечному значению.
2. Если условие выполнено, то оператор продолжает работу (выполняется оператор в теле цикла), если условие не выполнено, то оператор завершает работу и управление в программе передается на оператор, следующий за циклом.
3. Значение параметра изменяется (увеличивается на 1 или уменьшается на 1).
Если в теле цикла располагается более одного оператора, то они заключаются в операторные скобки begin…end;
Пример 1.Вывести на экран таблицу перевода из градусов по шкале Цельсия в градусы по Фаренгейту для значений от 15°С до 30°С с шагом в 1°С. Перевод осуществляется по формуле:F=C*1.8+32.
Program zf;
Var i:integer; f:real;
Begin
Writeln(‘Температура’);
For i:=15 to 30 do
Begin
F:=i*1.8+32;
Writeln(‘по Цельсию’,i, ‘по Фаренгейту’,f:5:2);
End;
End.
Пример 2.Вывести на экраннатуральные числа от 1 до 9 в обратном порядке.
Program z;
Var i:integer;
Begin
For i:=9 downto 1 do
Writeln(i);
End.
Если число повторений заранее неизвестно, а задано лишь условие его повторения (или окончания), то используются операторы while и repeat.ОператорWhileчасто называют оператором цикла с предусловием. Так как проверка условия выполнения цикла производится в самом начале оператора.
Общий вид: While<условие продолжения повторений>do
<тело цикла>;
Тело цикла – простой или составной оператор или операторы. Если операторов в теле цикла несколько, то тело цикла заключается в операторные скобки begin…end.
Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат – «истина», тело цикла выполняется и снова вычисляется выражение условия. Если результат–«ложь», происходят выход из цикла и переход к первому после whileоператору.
Пример.Найти сумму 10 произвольных чисел.
Program z;
Const
N=10;
Var k, x, s: integer;
Begin
k:=0;s:=0; {k- количество введенных чисел}
while k < n do
begin
k:=k+1;
write(‘Введите число’);
readln(x);
s:=s+x;
end;
writeln(‘Сумма чисел равна’, s);
end.
Оператор цикла repeatаналогичен операторуwhile, но отличается от него, во-первых, тем, что условие проверяется после очередного выполнения операторов тела цикла и таким образом гарантируется хотя бы однократное выполнение цикла. Во-вторых, тем, что критерием прекращения цикла является равенство выражения константеtrue. За это данный оператор часто называют циклом с постусловием, так как он прекращает выполняться, как только условие, записанное после словаuntil, выполнится. Оператор циклаrepeatсостоит из заголовка, тела и условия окончания.
Общий вид: Repeat
<оператор>
. . . . .
<оператор>
until<условие окончания цикла>
Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. В любом случае этот цикл выполняется хотя бы один раз. Если условие не выполняется, т.е. результатом выражения является False, то цикл активизируется еще раз. Если условие выполнено, то происходит выход из цикла. Использования операторных скобок, в случае, если тело цикла состоит из нескольких операторов, не требуется.
Пример.Составить программу, которая вводит и суммирует целые числа. Если введено значение 999, то на экран выводится результат суммирования.
Program s;
Var x, s:integer;
Begin
S:=0;
Repeat
Write(‘Ввести число’);
Readln(x);
If x<>999 then s:=s+x;
Untilx=999;
Writeln(‘Сумма введенных чисел’,s);
End.
Глава 3. Процедуры и функции
Стандартные библиотечные модули
В систему Турбо Паскаль версии 6.0. и старше включены 8 модулей: System,Crt,Dos,Graph,Graph3,Overlay,Printer,Turbo3 и специализированная библиотекаTurboVision. МодульSystemподключается по умолчанию, поэтому в любой программе становятся доступными все его встроенные процедуры и функции (см главу 1.3.). Остальные модули должны подключаться с помощью зарезервированного словаusesс добавлением имени модуля. Например:usesCrt.
Рассмотрим кратко назначение каждого модуля.
System- сердце Турбо Паскаля. Подпрограммы, содержащиеся в нем, обеспечивают работу всех остальных модулей системы.
Crt- содержит средства управления дисплеем и клавиатурой компьютера.
Dos- включает средства, позволяющие реализовывать различные функцииDos.
Graph3 - поддерживает использование стандартных графических подпрограмм.
Overlay- содержит средства организации специальных оверлейных программ.
Printer- обеспечивает быстрый доступ к принтеру.
Turbo3 - обеспечивает максимальную совместимость с версией Турбо Паскаль 3.0.
Graph- содержит пакет графических средств.
TurboVision- библиотека объектно-ориентированных программ для разработки пользовательских интерфейсов.
На примере модуля Crtпознакомимся поближе с работой встроенных процедур и функций. Он устанавливает режим работы адаптера дисплея, организует вывод в буфер экрана, регулирует яркость свечения символов и т.д. С момента подключения пользователю доступны все содержащиеся в нем стандартные средства. Рассмотрим некоторые из них.
§ Установка текстового режима
TextMode(Mode:integer);
Значение Modeравно 1 (40 / 25) или 3(80 / 25).
§ Очистка экрана
ClrScr– полностью очищает экран;
ClrEol– стирает все символы в строке, начиная с текущей позиции до конца строки;
§ Управление курсором
GotoXY(x,y) – перемещает курсор в позицию, заданную координатамиx,y.
§ Управление цветом
TextColor(Color:byte) - установка цвета выводимых символов;
TextBackGround(Color) – цвет фона.
Чтобы добавить при выводе эффект мерцания, при установке цвета указывается Blink(16).
Пример. Вывести в центре экрана цветными символами слово «Привет» с эффектом мерцания.
Program primer;
Uses crt;
Begin
TextMode(3);
Clrscr;
Gotoxy(36,12);
Textcolor(5+16);
Write(‘Привет’);
End.
Глава 3. Процедуры и функции
Процедуры
Для использования подпрограммы-процедуры необходимо сначала описать процедуру, а затем обращаться к ней (обращение к процедуре – отдельный оператор). Описание процедуры включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного слова procedure, имени процедуры и, заключенного в скобки, списка формальных параметров с указанием типа. Название «формальные» эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут поставлены конкретные значения. Тело процедуры – блок, по структуре аналогичный программе.
При создании программ, использующих процедуры, следует учитывать, что все объекты, которые описываются после заголовка в теле процедуры, называются локальными объектами и доступны только в пределах этой процедуры.
Все объекты, описанные в вызывающей программе, называются глобальными и являются доступными внутри процедур, вызываемых этой программой.
Общий вид описания процедуры:
Procedure<имя> (список формальных параметров, блок описания);
Const…;ù
… ýблок описания
Var….;û
begin
<операторы>
end;
Пример 1.Вывести по четырем углам экрана свое имя цветными буквами, можно с эффектом мерцания.
Program names;
Uses crt;
Procedure name(x, y, c: byte, );
Begin
Gotoxy (x, y);
Textcolor(c); {textcolor (c+16);}
Write(‘Имя’);
end;
begin
Clrscr; {очистка экрана}
name (2,2, 14);
name (2, 22, 8);
name (75,2, 3);
name (75, 22, 5);
End.
Пример 2. Найти наибольшее из четырех чисел, используя подпрограмму нахождения наибольшего из двух чисел.
Program max;
Uses crt;
Var a, b, c, d, m, p, q:real;
Procedure Bd(x,y:real, var z: real);
Begin
If x>y then z:=x
else z:=y;
end;
begin
Clrscr; {очистка экрана}
Write(‘Введите числа’);
Readln(a,b,c,d);
Bd (a, b, p);
Bd (c, d, q);
Bd (p, q, m);
Writeln(‘наибольший элемент’,m:8:3);
End.
Глава 3. Процедуры и функции
Функции
Подпрограмма-функция обрабатывает данные, переданные ей из главной программы, и затем возвращает полученный результат (в отличие от процедуры). Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово Function, имя, список формальных параметров (заключенный в скобки) и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре сходный с программой. Общий вид описания функции:
Function<имя> (<параметры>): <тип результата>;
Const…;ù
… ý блок описания
Var ….; û
begin
<операторы>
end;
В разделе операторов должен находиться, хотя бы один оператор, присваивающий имени функции значение. Обращение к функции осуществляется по имени с указанием списка аргументов. Каждый аргумент должен соответствовать формальным параметрам и иметь тот же тип.
Пример 1.Найти значение следующего выражения:F(t) –F(c), гдеF(x)=Öx+2x2+3x
Program m;
Uses crt;
Var t, c, r : real;
Function F(x: real) : real;
Begin
F:= sqrt(x)+ 2*sqr(x) + 3*x;
End;
Begin
Clrscr;
Write(‘Введите числа’);
Readln (t, c);
r:= F(t) – F(c);
write(‘результат =’, r:8:3); {8 символов на все число, 3 – на дробную часть, см п.1.4.2}
end.
Пример 2. Найти наибольшее из четырех чисел, используя подпрограмму нахождения наибольшего из двух чисел.
Program max;
Uses crt;
Var a, b, c, d, m, p, q:real;
Function Bid(x, y: real) : real;
Begin
If x>y then bid:=x
else bid:=y;
End;
Begin
Clrscr;
Write(‘Введите числа’);
Readln (a, b, c, d);
p:=bid(a, b);
q:= bid(c, d);
m:=bid(p, q);
write(‘наибольший элемент’, m:8:3);
end.
Глава 4. Массивы
Одномерные массивы
Все простые типы данных, рассматриваемые ранее, имеют два характерных свойства: неделимость и упорядоченность их значений. Составные, или структурированные, типы данных задают множество сложных значений с одним общим именем. Существует несколько методов структурирования, каждый из которых отличается способом обращения к отдельным компонентам. В данном учебном пособии будут рассмотрены только два структурированных типа данных: регулярный тип (массивы) и строковый тип (часть 5).
С понятием «массив» приходится встречаться при решении научно-технических, экономических задач обработки большого количества однотипных значений.
Таким образом, массив – это упорядоченная последовательность данных, состоящая из фиксированного числа элементов, имеющих один и тот же тип, и обозначаемая одним именем.
Название регулярный тип массивы получили за то, что в них объединены однородные элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элементы в массиве.
Массиву присваивается имя, посредством которого можно ссылаться на него, как на единое целое. Элементы, образующие массив, упорядочены так, что каждому элементу соответствует совокупность номеров (индексов), определяющих его место в общей последовательности. Индексы представляют собой выражения простого типа. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индекса нужного элемента: <имя массива>[<индекс>].
Описание массива определяет его имя, размер массива и тип данных. Общий вид описания массива:
Type<имя нового типа данных>=array[<тип индекса>] of <тип компонентов>;
Далее, в перечне переменных указывается имя массива, и через двоеточие указывается имя нового типа данных. Массив может быть описан и без представления типа в разделе описания типов данных:
Var <имя массива>: array [<тип индекса>] of <тип компонентов>;
Чаще всего в качестве типа индекса используется интервальный целый тип.
Одномерные массивы
Линейный (одномерный) массив – массив, у которого в описании задан только один индекс, если два индекса – то это двумерный массив и т.д. Одномерные массивы часто называют векторами, т.е. они представляют собой конечную последовательность пронумерованных элементов.
Присваивание начальных значений (заполнение массива) заключается в присваивании каждому элементу массива некоторого значения, заданного типа. Наиболее эффективно эта операция осуществляется при помощи оператора for. Ввод данных может осуществляться : с клавиатуры, при помощи различных формул, в том числе и датчика случайных чисел.
Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, им можно присваивать любые значения, соответствующие их типу и т.д.
Алгоритм решения задач с использованием массивов:
· Описание массива
· Заполнение массива
· Вывод (распечатка) массива
· Выполнение условий задачи
· Вывод результата
Пример 1. Задан одномерный массив В(10), заполненный произвольным образом. Подсчитать количество элементов массива, больших заданного числаk.
Program massiv;
Uses crt;
Var b:array [1..10] of integer;
I, k, s : integer;
Begin
Clrscr; S:=0;
For i:=1 to 10 do
Begin
Write(‘Введите’,i, ‘-й элемент массива ’);
Readln (B[i]);
Write(b[i], ‘ ‘);
End;
Write(‘Введите числоk’);
Readln(k);
For i:=1 to 10 do
If b[i]>k then s:=s+1;
Write(‘Количество элементов’,s);
End.
Пример 2.Определить самую высокую температуру и самый теплый день в мае.
Program massiv;
Uses crt;
Var t:array [1..31] of integer;
I, max, n : integer;
Begin
Clrscr;
For i:=1 to 31 do
Begin
t[i]:=random(20);
Write(b[i], ‘ ‘);
End;
Max:=t[1]; n:=1;
For i:=2 to 31 do
Begin
If t[i] > max then max:=t[i]; n:=i ;
End;
Write(‘максимальная температура’,max, ‘в’,n, ‘день’);
End.
Глава 4. Массивы
Двумерные массивы
Двумерный массив – структура данных, хранящая прямоугольную матрицу. В матрице каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен. В Паскале двумерный массив представляется массивом, элементами которого являются одномерные массивы. Два следующих описания двумерных массивов тождественны:
Var a: array [1..10] of array [1.. 20] of real;
Var a: array [1..10, 1..20] of real;
Чаще всего при описании двумерного массива используют второй способ. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индексов (первый индекс – номер строки, второй индекс – номер столбца). Все действия над элементами двумерного массива идентичны действиям над элементами линейного массива. Только для инициализации двумерного массива используется вложенный цикл for.
Например, For i:= 1 to 10 do
For j:= 1 to 20 do
A[i, j] := 0;
При организации вложенных (сложных) циклов необходимо учитывать:
· Все правила, присущие простому циклу, должны соблюдаться
· Имена параметров для циклов, вложенных один в другой, должны быть различными
· Внутренний цикл должен полностью входить в тело внешнего цикла. Пересечение циклов недопустимо
Пример 1.Сформировать таблицу Пифагора (таблица умножения) и вывести ее на экран.
Program Pifagor;
Uses crt;
Var p: array[1..9, 1..9] of integer; i, j:integer;
Begin
Clrscr;
for i:=1 to 9 do
for j:= 1 to 9 do
p[i,j]:= i*j;
for i:=1 to 9 do
begin
for j:=1 to 9 do
write(p[i,j], ‘ ‘);
writeln
end;
end.
Пример 2.Задан двумерный массив В(10, 10), заполненный случайными числами из
[-10,10]. Найти и вывести на экран те элементы массива, которые больше заданного числа k.
Program massiv;
Uses crt;
Var b: array[1..10, 1..10] of integer; i, j, k :integer;
Begin
Clrscr;
for i:=1 to 10 do
begin
for j:= 1 to 10 do
begin
b [i,j]:= random(20)-10;
write(b[i,j], ‘ ‘);
end;
writeln;
end;
write(‘Введите числоk’);
readln (k);
For i:=1 to 10 do
For j:=1 to 10 do
If b[i, j] >k then write (b[i, j]);
End.