Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Алфавит Turbopascal 7.0
В него входят:
1) заглавные и строчные буквы латинского алфавита
2) арабские цифры 0 9
3) знаки операций + - / (численное деление) * = < > <= >= := (присваивание в матем.ф-лах)
4) ограничители:
`. , : ; ___ (пробел) ____________ (подчеркивание) ( ) [ ] = (. . ) { } = (* *) (для разъяснений в программе)
В качестве комментариев, пояснений в программе или какого-то текста на экране можно применять русский алфавит.
Имена, используемые в ТР.7.0
Все имена (слова) разбиты на 3 группы.
Используются для обозначения программ, переменных или постоянных в программе.
Следующие требования:
В качестве составляющих имени нельзя использовать другие символы, кроме знака «Подчеркивание»:
Пример: Авс А_в W1 V2Z3 |
Нельзя: S+K 1а 4 d_c |
На практике имя ограничивают максимально 8 символами.
Это:
(programm, var, const, uses, label…)
(for, while, repeat…)
(if, goto…)
(array, record, set, file…) и т.д.
Это:
(sin, cos, tg, ctg…)
(real, char, integer…)
(write, readln…) и т.д.
Все имена, используемые в ТР7.0, предназначены для работы с какими-либо данными, т.е. с такими параметрами, которые изменяются в программе или сохраняют свое значение неизменным в зависимости от того, к какому типу относятся эти данные, с ними могут быть проведены различные операции или действия.
В ТР.7 существуют следующие типы данных:
ТИПЫ ДАННЫХ |
||||||||||||||
Простые (скалярные) |
Сложные (структурированные) |
|||||||||||||
Стандартные |
Переменные |
Тип-массив (array) |
||||||||||||
Целочисленные (integer) |
Тип-диапазон (отрезочный) |
Тип-запись (record) |
||||||||||||
Дробные (вещественные) (read) |
Строковый (string) |
Тип-файл (file) |
||||||||||||
Символьные (char) |
Тип-множество (set) |
|||||||||||||
Логические (boolean) |
||||||||||||||
Целочисленные типы данных.
Следующие разновидности целых чисел:
№ п/п |
Наименование |
Диапазон |
|
Integer |
-32768 … +32767 |
|
Lobgibt |
-2147483648 …+2147483647 |
|
Shortint |
-128 … +127 |
|
Word |
0 … +65535 |
|
Byte |
0 … +255 |
Вещественные (дробные) типы данных
№ п/п |
Наименование |
Диапазон |
1. |
Real |
(-/+) 2,9 х 10-39 … 1,7 х 10 38 |
2. |
Single |
(-/+) 1,5 х 10-45 … 3,4 х 10 38 |
3. |
Double |
(-/+) 5 х х 10-324 … 1,7 х 10 308 |
4. |
Extended |
(-/+) 3,4 х 10-4932 … 1,1 х 10-4932 |
5. |
Comp |
- 2 63 … + 263 |
Символьные данные
В этот тип входят все те символы и значки, которые имеются на клавиатуре, а также символы, которые получаются при нажатии различных комбинаций клавиш.
Всего 256.
В соответствии с американским стандартом кодировки информации этим символам присвоены номера от 0 до 255.
Этот тип находи ограниченное применение в программах.
В ТР.7 существуют функции, которые по номеру символа выдают его обозначение, и наоборот, по введенному символу выдают его порядковый номер.
Логические типы
Используются в программе для реализации каких-либо логических задач. К этому типу данных относятся такие, которые могут принимать одно из двух значений:
True False |
Отрядочный тип
Разновидность данных порядкового типа, к которому относят целые числа и символы. При использовании этого типа программист сам задает нижнюю и верхнюю границы их применения, разделяя их двумя точками. При этом, если в качестве данных используются символы, они заключаются в апострофы.
Var Х: 10 .. 50
Y: `a` .. `X`
Необходимость применения типа-отрезка иногда вызывается тем, что в программе необходимо сэкономить место под память, занимаемую переменными или же осуществить автоматический контроль за переменной, изменяющейся в указанных границах.
Как только переменная выбывает за эти границы, машина выдает сообщение.
Строковый тип (string)
Какое-либо слово, словосочетание или строка, состоящая из отдельных символов. Если в программе использовать слово string по умолчанию, т.е. не указывая максимального количества символов в строке, то программа может использовать строки длиной не более 256 символов.
Var Х: string
Если же после слова string указать в [ ] число, то это будет означать максимальное количество символов, допустимых в этой строке:
Var Y: string [8]
Арифметические функции в ТР.70
Abs (x) |
|x| |
|
Sin (x) |
Sin x |
(в радианах) |
Cos (x) |
Cos x |
|
Arctan (x) |
Arctg x |
|
Ln (x) |
Ln x |
|
Exp (x) |
ex |
|
Sqr (x) |
x2 |
|
Sqrt (x) |
Корень из Х |
|
ав => eв lna |
Exp (в * ln (a)) |
|
div |
Целочисленное деление А div b 5 div 4 = 1 |
|
A mob B |
Поиск остатка от целочисленного деления |
|
Round (x) |
Округление дробного Х до целого по правилу |
|
Trunc (x) |
Округление Х до целого путем отбрасывания дробной части |
|
Frac (x) |
Определение дробной части |
|
Int (x) |
Округление дробного Х до целого в меньшую сторону При этом Х не будет относиться к целому типу данных |
|
Inc (x, y) |
Увеличение Х на Y. Если в записи отсутствует Y, то Х увеличится на 1 |
|
Dec (x, y) |
Уменьшение Х на Y. Если Y нет, то Х уменьшается на 1 |
|
Add (x) |
Проверка Х на нечетность. Результат будет true, если Х нечетный. |
|
Сhr (x) |
Вывод символа по его номеру Х |
|
Ord (x) |
Вывод номера для символа Х |
|
Pred (x) |
Вывод символа, предшествующего символу Х |
|
Succ (x) |
Вывод символа, следующего за Х |
|
Random (x) |
Генерация в программе случайных чисел от 0 до Х. Если в записи отсутствует Х, то генерируются числа от 0 до 1 . При использовании функции при каждом запуске программы на экране будет появляться одна и та же комбинация случайных чисел. Чтобы этого не происходило, необходимо перед функцией random в программе запускать генератор случайных числе с помощью функции randomize. |
Все функции, которые используются в формуле или программе, выполняются в определенной очередности. Для обеспечения правильной записи формул используют следующую таблицу:
№ |
Название операций или действий |
Содержание |
1 |
Вычисления в круглых скобках |
( ) |
2 |
Вычисление функций |
Sin, cos, ln ... |
3 |
Одноместные операции |
+4, -2, not (логическое НЕ) |
4 |
Операции типа умножение |
* / dif, mod, and (логическое И) |
5 |
Операции типа сложение |
+, -, or (логическое ИЛИ) |
6 |
Операции сравнения |
=, <, >, <>, <=, >=, in |
Пример: Записать формулу для вычисления функции Y на языке ТР.7 Y: = ( (х * х + sqrt (x) ) / (ln (x) sin (x) ) / (exp (x) + abs (x) ); |
Операторы ввода и вывода информации
Для того, чтобы ввести какие-либо данные в память машины, используют операторы ввода READ или READLN.
При использовании READ после ввода информации курсор останется мигать на той же строке, что и вводимый параметр. При использовании READLN курсор перейдет на новую строку.
Read (x);
Readln (x);
В некоторых случаях с помощью первого оператора вводят несколько переменных:
Read (x, y, z)
Чтобы вывести на экран дисплея результат расчета или какую-либо другую информацию (комментарий, текст…), используют операторы вывода WRITE или WRITELN:
Write (x);
Writeln (y);
Writeln (`при х = `, x, `_ _ y = `, y);
Удобно сочетать как текстовую информацию, так и подсчитанную цифровую. При этом текстовая информация заключается в апострофы, а выводимые элементы разделяются запятыми.
Если с помощь WRITE или WRITELN на экран выводятся дробные числа, то машина представляет их в неудобном для восприятия экспоненциальном виде:
16,23 => 1.6230000000Е + 01
Чтобы выводить на экран числа в привычном виде, в операторе вывода у выводимых дробных параметров записывают их формат, т.е. количество позиций, отводимых под дробную часть выводимого числа. Эти параметры отделяются друг от друга двоеточием:
Y = 16,23
Writeln (y: 5: 2)
(5 общее количество позиций под число, 2 количество знаков после запятой)
Формат можно указывать и при выводе на экран целых чисел:
Writeln (x : 4)
Если выводимое целое число занимает меньшее количество позиций, чем под него отведено, то машина сдвинет это число от левой части экрана до количества незаполненных позиций.
Объявление в программах раздела переменных
Все переменные в программе должны быть объявлены в соответствующем разделе переменных.
Процесс объявления переменных в общем виде может быть представлен так:
VAR <имя переменной> : <тип данных переменной>; |
Var X : Integer;
Y : Cha ;
Z : String [10];
Если в программе используются несколько переменных, относящихся к одному и тому же типу данных, то они перечисляются через запятую:
Var V, W, C : Real;
Объявление раздела постоянных
Все постоянные в ТР.7 делятся на две группы простые и типизированные.
У простых постоянных машина по умолчанию распознает тип данных, к которому они относятся.
Для их объявления используется следующая форма записи:
CONST <имя постоянной> = <значение постоянной>; |
Const A = 3;
C = 13/43;
TP = `Turbopascal`;
У постоянный второго типа (типизированные) в явном виде указывается тип данных, к которому они относятся. Их общая форма записи:
CONST <имя постоянной> : <тип данных постоянной> = <значение постоянной> |
Const A: Integer = 3;
C: Real = 13.43;
TP: String = `TurboPascal`;
Структура программы на языке ТР.7
Программа может содержать в себе следующие разделы:
Program |
Заголовок программы |
Uses |
Подключение дополнительных модулей или библиотек к программе |
Label |
Объявление раздела меток |
Const |
Объявление раздела постоянных |
Var |
Объявление раздела переменных |
Procedure |
Объявление раздела процедур |
Function |
Раздел функций |
Begin ... end |
Исполнительная часть, или тело программы |
При написании программы необходимо придерживаться следующих рекомендаций:
Writeln (x); {вывод на экран Х}
Program ... ; Uses Crt; Var...; Const...; Begin Clrscr; Readkey; End. |
Пример: Составить формулу для вычисления суммы Х и Y Program Summa; Uses Crt; Var X, Y, S: Integer Const...; Begin Clrscr; Write (`Введите число Х: _`); Readln (x); Write (`Введите число Y: _`); Readln (y); S: = x + y; Writeln (`При х =`, x, `_ и y = `, y, `S = `, S) Readkey; End. |
Операторы языка ТР.7
В ТР.7 в программах используют следующие операторы:
1. Составной оператор Begin ... end. Применяется в программе в тех случаях, когда те или иные конструкции программы предусматривают выполнение в них только одного оператора, а нам в данной программе нужно выполнить несколько операторов. В этом случае эти операторы заключают в «операторные скобки» BEGIN…END, и программа думает, что она имеет дело с одним составным оператором.
Begin
Оператор 1
Оператор 2
- - - - - - - - -
оператор N
end;
Исполнительная часть программы представляет собой большой составной оператор, т.к. также заключается в «операторные скобки» BEGIN…END.
После слова BEGIN и перед словом END точку в запятой ставить не обязательно, т.к. они являются своеобразными знаками препинания.
2.Условный оператор If реализует в программе алгоритмическую конструкцию «развилка».
Схема линейного алгоритма
Схема алгоритма «развилка»
Различают 2 варианта оператора IF:
IF <условие> THEN <оператор 1> ELSE < оператор 2> ; |
Пример:
If (х >= 0) then у: = sqrt (х)
else у: = abs (х);
IF <условие> THEN <оператор 1> ; |
If (х >= 0) then у: = sqrt (х);
В этих конструкциях условие проверяемое логическое условие.
В каждой ветви оператора IF по умолчанию может выполняться только один оператор. Если же нам необходимо в каждой ветви выполнить по нескольку операторов, то их заключают в «операторные скобки» BEGIN…END:
IF <условие> THEN <оператор 1> ELSE BEGIN < оператор 2>; < оператор 3>; < оператор 4>; END; |
Часто в программах приходится вычислять по нескольку функций в зависимости от истинности или ложности проверяемых логических условий. В этих случаях в программах применяют несколько операторов IF либо несколько «полных развилок», либо комбинацию из «коротких» и «полных развилок»:
IF <Y 1> THEN <оператор 1> ELSE < оператор 2> ; IF <Y 2> THEN <оператор 3> ELSE < оператор 4> ; |
IF <Y 1> THEN <оператор 1> IF <Y 2> THEN <оператор 2> IF <Y 3> THEN <оператор 3> IF <Y 4> THEN <оператор 4> |
С увеличением количества проверяемых условий программа становится более громоздкой и в ее структуре могут возникать логические несоответствия.
Для того, чтобы сократить количество проверяемых логических условий и правильнее записывать алгоритм программы, необходимо применять так называемые «вложенные» конструкции оператора IF.
В общем виде:
If <Y 1> THEN <оператор 1> ELSE IF < Y 2> then < оператор 2> ELSE IF < Y 3> THEN < оператор 3> ELSE IF < Y 4> THEN < оператор 4> ; |
Пример:
Составить программу для вычисления функции Y с помощью коротких развилок и с помощью вложенных операторов:
{ |
||
х |
||
Y = |
х + 5 |
|
х 2 |
||
I. |
||
Program Y__X; Uses Crt; Var X, Y: Real; Begin Clrscr; Write (`Введите Х: _`); Readln (x); If (X < 0) then Y:= sqrt (abs (x)); If (X < 0) then Y:= х + 5; If (X < 0) then Y: = х * х; Writeln (`При х =`, x:4:2, `_ _ _ Y= `), y:4:3; Readkey; End. |
II. |
Program Y__X; Uses Crt; Var X, Y: Real; Begin Clrscr; Write (`Введите Х: _`); Readln (x); If (X < 0) then Y:= sqrt (abs (x)) else if (Х = 0) then y:= x + 5 else y: = x * x; Writeln (`При х =`, x:4:2, `_ _ _ Y= `), y:4:3; Readkey; End. |
При использовании в программах IF двойных условий применяют для связи этих условий между собой логические операторы AND, NOT, ОR.
Чтобы логическое условие записывалось правильно, необходимо каждую половину двойного условия заключать в скобки:
0 х 5
if (x >=0) and (x <= 5) then
3. Оператор безусловного перехода Goto позволяет изменить ход выполнения программы, начиная с какого-либо оператора, который помечен в программе специальной меткой.
Все метки в программе должны быть объявлены заранее в разделе меток LABEL.
В разделе LABEL метки перечисляются через запятую:
Label 1, а, W, c1…;
В качестве меток можно использовать:
Оператор, который помечается меткой, отделяется от нее двоеточием:
1: Writeln (x);
- - - - - -
goto 1;
Ссылка на помеченный оператор осуществляется оператором GOTO с указанием имени метки.
Пример: Нахождение частного от деления X и Y, которое бы осуществило страховку программы от деления на 0. Program Delenie; Uses Crt; Label 1; Var X, Y, Z: Real; Begin Clrscr; Write (`Ввод Х: _`); Readln (x); 1: Write (`Ввод Y: _`); Readln (y); If (Y = 0) then begin Writeln (`Делить на 0 нельзя!`); Goto 1 End else Z: = x / y; Writeln (`Z =`, `Z:4:`1 `); Readkey; End. |
4. Оператор выбора Case
Для реализации в программах помимо условного оператора IF используется оператор СASE.
В общем виде:
СASE <селектор> OF <Вариант 1> : <оператор 1>; <Вариант 2> : <оператор 2>; - - - - - - - <Вариант N - 1> : <оператор N - 1>; ELSE <оператор N >; END; |
где селектор выражение порядкового типа (например, INTEGER, CHAR ), значение которого вычисляется в программе заранее, вариант 1, 2, …, N возможные значения селектора.
В каждой ветви оператора CASE на месте любого варианта может стоять либо одно значение селектора, либо несколько таких значений через запятую, либо значения селектора в виде отрезка.
В каждой ветви оператора CASE по умолчанию может выполняться только 1 оператор. Если же нам необходимо выполнить несколько операторов, то их заключают в «операторные скобки» BEGIN…END.
В любом случае в операторе CASE должны быть перечислены все возможные значения селектора либо их указания в явном виде в вариантах от 1 до N 1, либо отнесением к пункту ЕLSE в неявном виде.
Case X of
1: Y: = X + 1;
2, 3, 4: Y : X + 2;
5 .. 10: Y: = X + 3;
else Y: = 0;
end;
Пример: Проверка чисел от 1 до 10 на четность Program Chet; Uses Crt; Var X: Integer; Begin Clrscr; Write (`Введите Х от 1 до 10`); Readln (x); Case X of 1, 3, 7, 9: Writeln (`Это нечетное число`); 2, 4, 6, 8, 10: Writeln (`Это четное число`); else Writeln (`Ввод неверен!`); end; Readkey; End. |
5. Операторы циклических процессов.
Во многих программах приходится многократно повторять некоторые их участки. Такие повторы реализуются с помощью циклических процессов (циклов)
Существует 2 разновидности цикла FOR:
FOR <i>: = <st> TO <F> DO <оператор> |
FOR <i>: = <F> DOWNTOWN <St> DO <оператор> |
I индекс или параметр цикла, представляющий собой выражение порядкового цикла (Integer, Char).
St и F соответственно, начальное и конечное значение параметра цикла.
For i: = 1 to Y: = x + i
For i: = 5 down to 0 do writeln (`ЗВФ`);
Если в цикле FOR необходимо выполнить несколько операторов, то их заключают в «операторные скобки» BEGIN…END.
В цикле FOR нельзя задавать шаг, отличный от 1 (т.к. программа по умолчанию в этом цикле изменяет индекс цикла на 1).
Пример: Составить программу для нахождения среднего арифметического размера у деталей в партии. Program Sr__rasmer; Uses Crt; Var i, N: Integer; S, r, Sr: Real; Begin Clrscr; Write (`Количество деталей в партии: _ _ `); Readln (N); S: = 0; For i: = 1 to N do Begin Write (`Введите размер `, i, `-той детали: _ _ `); Readln (r); S: = S + r; End; Sr: = S/N; Writeln (`Sr = `, Sr:5:3); Readkey; End. |
Структура цикла WHILE:
WHILE< условие> DO <оператор>; |
Условие логическое условие, истинность которого проверяется перед каждым заходом на цикл.
Если проверяемое условие верно, то цикл WHILE выполняется вновь.
Как только условие становится ложным, мы выходим из цикла.
Если условие никогда не становится ложным, то программа зацикливается.
Для выхода из зацикливания необходимо нажать комбинацию клавиш: Ctrl + Break |
Если в цикле WHILE необходимо выполнить несколько операторов, то их заключают в «операторные скобки» BEGIN…END.
Пример: Модернизировать программу по расчету среднего арифметического размера деталей в партии (см.выше) с помощью цикла WHILE. Program Sr__rasmer1; Uses Crt; Var i, N: Integer; S, r, Sr: Real; Begin Clrscr; Write (`Количество деталей в партии: _ _ `); Readln (N); S: = 0; i: = 1; While (I <= N) do Begin Write (`Введите размер `, i, `-той детали: _ _ `); Readln (r); S: = S + r; I: = I + 1; End; Sr: = S/N; Writeln (`Sr = `, Sr:5:3); Readkey; End. |
Структура:
REPEAT <оператор 1>; <оператор 2> ; <оператор 3> ; - - - - - - - <оператор N> ; UNТIL <условие>; |
В цикле REPEAT условие проверяется на выходе из цикла, поэтому этот цикл выполняется хотя бы 1 раз в любом случае.
Выход из цикла REPEAT осуществляется в том случае, когда проверяемое условие становится истинным.
Если оно не становится истинным никогда, то программа зацикливается.
Для выхода из зацикливания необходимо нажать комбинацию клавиш: Ctrl + Break |
Пример: Модернизировать программу по расчету среднего арифметического размера с помощью цикла REPEAT. Program Sr__rasmer2; Uses Crt; Var i, N: Integer; S, r, Sr: Real; Begin Clrscr; Write (`Количество деталей в партии: _ _ `); Readln (N); S: = 0; i: = 1; Repeat Write (`Введите размер `, i, `-той детали: _ _ `); Readln (r); S: = S + r; I: = I + 1; Until (I > N); Sr: = S/N; Writeln (`Sr = `, Sr:4:2); Readkey; End. |
Состоит из внешнего и внутреннего циклов.
Могут представлять собой различные комбинации из циклов FOR, WHILE, REPEAT.
При этом глубина вложенности первого цикла в другой может быть любой и ограничивается только возможностями машины.
При составлении вложенных циклов необходимо соблюдать следующее правило: Все операторы внутреннего цикла должны полностью находиться в теле внешнего цикла. |
Пример: Вычисление функции Z = X + Y, если Х изменяется от 1 до 4 шагом 1, а Y изменяется от 3 до 5 с шагом 0,5. Program Z_x_y; Uses Crt; Var X, Y, Z: Real; Begin Clrscr; X: = 1; Wrile (X <= 4) do Begin Y: = 3; While (Y <= 5) do Begin Z: = X + Y; Writeln (`X =`, X:4:2, `_ _ y =`, y:4:2, `_ _ Z =`, Z:5:2); Y : = Y + 0,5 ; End; Writeln; Z: = X + 1; End; Readkey; End. |
||
X = 1 |
Y = 3 |
Z = 4 |
X = 1 |
Y = 3,5 |
Z = 4,5 |
X = 1 |
Y = 4 |
Z = 5 |
X = 1 |
Y = 4,5 |
Z = 5,5 |
X = 1 |
Y = 5 |
Z = 6 |
X = 2 |
Y = 3 |
Z = 5 |
X = 2 |
Y = 3,5 |
Z = 5,5 |
X = 2 |
Y = 4 |
Z = 6 |
X = 2 |
Y = 4,5 |
Z = 6,5 |
X = 2 |
Y = 5 |
Z = 7 |
И т.д. |
Полученный результат на мониторе выглядит так:
6. Использование в программах массивов.
Массивом называется упорядоченная последовательность компонентов одного типа, в которой каждому компоненту присвоен индекс или набор индексов однозначно определяющий нахождение этих компонентов в общей последовательности.
Для того, чтобы задать в программе массив, необходимо после ARRAY в [ ] указать тип данных и диапазон изменения индексов массива, а затем после OF тип данных, к которому принадлежат сами компоненты массива.
Общая форма:
TYPE <имя массива> = ARRAY [тип и диапазон индексов массива] |
Если массив состоит из 10 целых чисел, он будет объявлен в разделе TYPE:
Type A = array [1 .. 10] of Integer;
Диапазон индексов массива задается в виде отрезка. Если массив многомерный, то в [ ] записывают несколько отрезков через запятую.
Двумерный массив В размерность 2 х 3, состоящий из дробных чисел, запишется так:
Type B = array [1 .. 2, 1 .. 3] of Real;
В качестве индексов массива применяют данные порядкового типа (символы или целые числа, кроме диапазона LONGINT).
Размерность массива может быть любой, а в качестве компонентов массива можно использовать любой тип данных, кроме типа FILE.
Количество индексов, необходимых для определения положения элемента в массиве, характеризует размерность этого массива.
Если N = 1, то массив одномерный, т.е. строка.
А1 , А2, А3 …
Если в индексе присутствует 2 цифры, т.е. N = 2, то массив двумерных, т.е. матрица (например, 2 х 3):
В 11 |
В12 |
В21 |
В22 |
В31 |
В32 |
После объявления в разделе TYPE массивов, в разделе переменных VAR можно объявлять переменные, относящиеся к этим массивам:
Var X: A;
Y: B;
Если в программе используются однородные массивы, то их удобнее объявлять непосредственно в разделе переменных:
Var Z: array [1 .. 3, 1 .. 4] of Char;
Для того, чтобы в программе сослаться на какой-либо элемент массива или присвоить ему какое-либо значение, или выполнить с ним какое-либо действие, используют следующую форму записи указывают имя переменной этого массива, а затем в [ ] индексы элемента этого массива:
- - - - - - - -
X [3]: = 5;
Y [3, 1]: = 13.4; или Y [3] [1]: = 13.4;
Z [2, 4]: = `w`;
Чтобы вводить элементы массива в память машины или выводить результаты работы с этими массивами на экран, применяют обычные операторы ввода-вывода соответственно READ (READLN) или WRITE (WRITELN):
Readln (X [i]);
Read (Y [i, j]);
Для организации процесса ввода-вывода элементов массива используют цикл FOR или же комбинацию из этих циклов в зависимости от размерности массива.
Процесс ввода в память машины матрицы Y можно записать так: …For i:= 1 to 2 do For j: = 1 to 3 do Begin Write (`Y [`, i, j, `]=`); Readln (Y [i,j] ); End; … |
Пример: нахождение суммы двух матриц А и В размерностью 3 х 4, состоящих из целых чисел. Program Sum_Matr; Uses Crt; Var A, B, C: array [1 .. 3, 1 .. 4] of Integer; i, j: Integer; Begin Clrscr; For i:= 1 to 3 do For j: = 1 to 4 do Begin Write (`A [`, i, j, `]=`); Readln (A [i,j] ); End; For i:= 1 to 3 do For j: = 1 to 4 do Begin Write (`B [`, i, j, `]=`); Readln (B [i,j] ); End; For i:= 1 to 3 do For j: = 1 to 4 do C [i, j]:= A [i, j] + B [i, j]; Clrscr; Writeln (`Результат расчетов`); Writeln; For i:= 1 to 3 do Begin For j: = 1 to 4 do Write (`C [`, i, j, `]_ _ _`); Writeln; End; Readkey; End. |
Использование в программах типов записи.
Тип записи последовательность компонентов различного типа, в которой каждый компонент имеет свое неповторимое имя (имя поля). Т.к. в типе записи используются данные различного типа, то к ним нельзя обращаться, как у массива, по номерам индексов. Поэтому, для того чтобы организовать процесс обращения, каждому компоненту или полю присваивают свое неповторимое имя. При объявлении в программе типов записи после слова RECORD указывают имена полей, составляющих запись, затем ставят двоеточие и записывают, к какому типу данных принадлежат эти поля:
TYPE <тип записи> = RECORD < имя 1 поля (компонента) записи> : <тип данных 1 поля записи>; < имя 2 поля (компонента) записи> : <тип данных 2 поля записи>; - - - - - - < имя N поля (компонента) записи> : <тип данных N поля записи>; END; |
Тип записи, содержащей сведения о студенте, может выглядеть следующим образом:
Type Student =
Record
Fam: string;
God: Word;
Pol: Char;
End;
После объявления в разделе TYPE записи можно в разделе переменных VAR задавать переменные, относящиеся к этому типу записей:
Var X: Student;
Чтобы в программе обратиться к какому-либо полю записи, необходимо вначале записать имя переменной этой записи, поставить точку, и только после нее записать имя интересующего нас поля:
X. fam: = `Иванов С.П.`);
X. god: = 1985;
Чтобы распространить записи на большее количество объектов (на группу студентов), необходимо в разделе VAR задавать массив, состоящий из записей:
Var gruppa: array [1 .. 25] of Student;
Gruppa [i]. fam
Пример: Вычисление среднего балла у каждого студента группы по результатам сессий (по 3 предметам) Program Sr__ball; Uses Crt; TYPE Student = Record Fam: string; b1, b2, b3: 2 .. 5; Sr: Real; End; Var i, N: Integer; Gruppa: array [1 .. 50] of Student Begin Clrscr; Write (`Количество cтудентов в группе: _ `); Readln (N); For i: = 1 to N do Begin Write (`Ф.И.О. - _ `); Readln (Gruppa [i]. fam); Write (`Химия - _ `); Readln (Gruppa [i]. b1); Write (`Матеем. - _ `); Readln (Gruppa [i]. b2); Write (`Физика - _ `); Readln (Gruppa [i]. b3); End; For i: = 1 to N do Begin Gruppa [i]. Sr : = (gruppa [i]. b1) + gruppa [i]. b2) + gruppa [i]. b3) /3; Writeln (`Gruppa [i].fam, ` - `, gruppa [i]. Sr : 3 : 1); End; Readkey; End. |
Как видно из программы, обращение к полям записи в традиционном виде - < имя переменной. имя поля> - приводит к тому, что программа становится громоздкой. Чтобы сделать программу компактнее и удобнее было работать с полями, используют оператор присоединения WITH, который позволяет обращаться к полям записи как к простым переменным.
Структура оператора WITH:
WITH <имя переменной записи> DO <оператор>; |
С учетом оператора присоединения фрагмент программы по вычислению среднего балла будет выглядеть так:
- - - - - -
for i: = 1 to N do
with Gruppa [i] do
begin
Sr: = (b1 + b2 + b3 ) / 3;
Writeln (fam. ` - `, Sr : 3 : 1);
End;
- - - - -
Применение в программах типов множеств
Тип множества совокупность неповторяющихся элементов порядкового типа, которая является подмножеством исходного множества из этих элементов.
В типе множества его элементы расположены в произвольном порядке и не «нумеруются».
Чтобы объявить в программе тип множества, надо записать слово SET, затем после слова OF указать тип компонентов, входящих в это множество в виде перечисления или отрезков:
Set of Char;
Set of 10 .. 20;
Объявление в программе какого-либо множества еще не означает, что переменные, относящиеся к этому множеству, содержат указанные элементы. Такая форма записи говорит лишь о возможности содержания этих элементов в множестве:
Var Z: Set of Byte;
Чтобы множественной переменной задать конкретное значение, необходимо создать так называемое множественное выражение (конструктор) и перечислить в [ ] все элементы, входящие в это множество:
Var Y: Set f Char;
Z: Set of 10 .. 20;
X: Set of Byte;
Begin
Y: = [`a`, `b`, `d`];
Z: = [11, 12, 13];
X: = [0, 1, 2, 3, 4];
В программах над множественными выражениями можно выполнить следующие операции:
+ |
Объединение двух множеств |
* |
Пересечение двух множеств |
- |
Определение разности двух множеств |
= |
Определение эквивалентности двух множеств |
< > |
Определение неравенства двух множеств |
<= |
Является ли левое множество подмножеством правого |
>= |
Является ли правое множество подмножеством левого |
IN |
Проверка, входит ли какой-либо элемент, расположенный слева от оператора IN, в множество, расположенное справа от него. |
Результатом действия первых трех операций является какое-либо множество, а всех остальных операций логический результат (TRUE или FALSE).
Объединением двух множеств А и В является множество, содержащее в себе элементы множества А или В, или того и другого одновременно.
Пересечением двух множеств А и В является множество, содержащее в себе элементы, одновременно принадлежащие как А, так и В.
Разностью двух множеств А и В является множество, которое содержит в себе такие элементы А, которые отсутствуют в множестве В.
- - - - - -
Var A, B, C: Set of Char;
Begin
A: = [`a`, `б`, `в`, `г`];
B: = [`в`, `г`, `д`];
C: = А + В |
C: = [`a`, `б`, `в`, `г`, `д`]; |
|
C: = А * В |
C: = [``в`, `г`]; |
|
C: = А В |
C: = [`a`, `б`]; |
В зависимости от выполняемой над множествами операций, последовательность ее выполнения может быть различной, в зависимости от ее приоритета.
В первую очередь при работе с множествами будут выполняться операции по их пересечению, затем операции по их объединению и разности, а затем операции отношения (сравнения).
Пример: По нажатой клавише определять, является ли она буквой латинского алфавита или нет. При этом выход из программы осуществляется при нажатии клавиш от 1 до 9. Program Knopka; Uses Crt; Var Bukva, Chislo : Set of Char; b, c : Char; Begin Clrscr; Repeat Bukva : = [`A` .. `Z`, `a` .. `z`]; Chislo : = [1 .. 9]; Write (`Нажмите на любую клавишу: `); Readln (b); If (b in Bukva) then writeln (`Это буква латинского алфавита`); Else writeln (`Это не буква латинского алфавита`); Write (`Для выхода нажмите цифру от 1 до 9`); Readln (c); Until (c in Chislo); Readkey; End. |
Применение в программах типов файлов
Тип файл последовательность компонентов одного типа, расположенная на каком-либо внешнем устройстве (жестком диске, дискете).
Необходимость в применении типов файлов возникает потому, что все ранее рассмотренные операторы и типы данных не позволяют сохранять результаты расчетов, в отличие от типов файлов.
В ТР.7 они бывают:
Var X : File of Integer;
Недостатком является то, что они позволяют сохранить данные только одного типа.
Var Y : text;
Var Z : file;
У этих файлов машина по умолчанию распознает, к какому типу данных относятся компоненты.
Прежде чем использовать файлы в программе, необходимо установить связь между текстом программы и тем файлом, в котором будут сохраняться результаты расчетов на дискете или винчестере.
Эта связь устанавливается с помощью файловых переменных (текстовых, типизированных или файлов без типов) и процедуры ASSIGN.
После установления связи файл необходимо открыть для чтения или записи с помощью процедур RESET или REWRITE, затем выполнить программу; указать, какие результаты будем сохранять в файле, и в конце программы закрыть файл процедурой СLOSE.
Наиболее часто для работы с файловыми переменными используются следующие процедуры:
ASSIGN установление связи между программой и файлом, в котором будут сохраняться результаты расчетов:
ASSIGN ( <F>, <путь к файлу и имя файла>) |
(F имя файловой переменной, объявленной в программе)
ASSIGN (f, `C` : \ TP7 \ Pas \ result/ txt` );
RESET (<F>) - процедура открытия существующего файла.
REWRITE (<F>) открытие нового файла.
(если файл с таким именем уже существует, то его старые данные уничтожаются)
RENAME (<F> <новое имя>) переименование файла
WRITELN (<F>, <результаты расчета>) вывод на экран и записей файла, и результатов расчета.
CLOSE (<F>) закрытие файла.
- - - - - - -
Пример: Программа для определения функции Y = X2 с сохранением результатов расчетов на диске А в файле RESULT.TXT. Program Y__X; Uses Crt; Var X, Y: Real; F: text; Begin Clrscr; Assign (f, `A:\result/ txt`); Rewrite (f); Write (`X =`); Readln (x); Y: = x * x; Writeln (`При Х =`, x : 4 : 2, `Y =`, Y : 5 : 3); Close (f) ; Readkey; End. |