Программа на Turbo-Pascal состоит из: заголовка программы; блока; знака (. ). Заголовок программ
Вид материала | Программа |
- Компоновать программы из отдельных частей отлаживать программы выполнять программы., 197.76kb.
- Программирование на языке высокого уровня, 59.92kb.
- Доманская Юлия Георгиевна г. Вилейка 2006г пояснительная записка, 74.95kb.
- Програма на мові Turbo Pascal, лінійні програми Команди галуження, вибору та мітки, 1485.97kb.
- Задачи работы Научиться создавать программы на языке Turbo Pascal с использованием, 598.05kb.
- Структура программы на Паскале Система программирования Турбо Паскаль, 145.34kb.
- Б. В. Ващук Turbo Pascal, 715.52kb.
- Изучаем Turbo Pascal» (главы 2, 4-6), Г. Г. Рапаков, С. Ю. Ржеуцкая «Turbo Pascal для, 92kb.
- Конспект урока по информатике для десятого класса по теме «Условный оператор в Turbo, 32.44kb.
- Курс «Программирование на языке Turbo Pascal 0» Цель курса, 19.6kb.
Лабораторная работа №2.
Задание А Вариант 2
1. Вычислить значение функции, заданной в таблице 5.3(в соответствии с вариантом задания). Осуществить вывод значений выводимых исходных данных и результата; вычисление значения функции, сопровождая вывод наименованиями переменных.
Пx2-7/x2 x<1,3 a=1,5
y= {ax3+7kopx x=1,3
eg(x+7kopx) x>1,3 Xe[0,8; 2]
дX=0,1
2. выполнить программы на ЭВМ и протестировать все ветви алгоритма.
Задание Б
3. Модифицировать программу таким образом, чтобы вычислялось многократное значение функции при изменении аргумента в указанном диапазоне и с заданным шагом. Организовать вывод значения аргумента и вычисленного значения функции в виде таблицы.
Таблица Функции Y(X)
X Y
… …
… …
… …
Цель работы: овладение практическими навыками разработки, программирования вычислительного процесса разветвляющейся и циклической структур, получение дальнейших навыков по отладке и тестированию программ.
17-февраля var cos: integer
1-четверг begin
1mod7->1четв. Read(c)
2mod7->2пятн. OS:=C mod7;
3mod7->3субб. If os=1 then write(c,’четв.’)
. . . .4воскр. if os=2 then write(c,’->пятн.’)
. . . .5понед. . . . . . . . . . . . .
. . . .6втор if os=0 then write(c,’->среда’)
. . . .0среда . . . . . . . . . . . .
17 mod 7->3субб.
Оператор варианта
Формат:
“case” <селектор> ”of”
альтернатива1 “:” предложения1 “;”
. . . . . . . . .
альтернатива n “:” предложения n “;”
[? Предложения для else “;”] “end;”
вместо вложенной конструкции IF
TURBO PASCAL, предлагал новый механизм: оператор варианта (оператор выбора).
<селектор> - может быть некоторое выражение порядкового типа.(Целочисленный или символьный тип).
<селектор> определяет какое из предложений должно быть выполнено.
“альтернатива” – это константа, представляющая одно из возможных значений.<селектора>. “альтернатива” может быть представлена более чем одной константой. В этом случае возможные значения <селектора>, относящихся к 1-ой “альтернативе”, отделяются друг от друга запятыми, образуя список. “Альтернатива” может представлять константу интервального типа.
“Предложение” – это простой или составной оператор.
Оператор CASE работает:
1. Вычисляется значение <селектора>
2. Значение <селектора> сравнивается с “альтернативой1”:
а) Если они совпадают, то выполняется предложение1, а остальные пункты CASE пропускаются, действия программы переходят на оператор за END для CASE.
б) Если <селектор> не равен “альтернативе1”, то описанный процесс повторяется для каждой “альтернативы”.
в) Если ни одна “альтернатива” не совпадала с <селектором>, то выполняется пункт ”ELSE” – как бы образующий еще одну “альтернативу”, к которой относятся все до сих пор не указанные значения <селектора>. Пункт еще выбирается только тогда, если не было “совпадений” ни с одной из предыдущих “альтернатив”.
Пример: read(r)
Case c mod 7 of
1: write (c,’->четверг’);
2: write (c,’->пятница’);
3: write (c,’->суббота’);
4: write (c,’->воскресенье’);
5: write (c,’->понедельник’);
6: write (c,’->вторник’);
0: write (c,’->среда’);
end;
Case (c mod7) of
1: write;
2: write;
5:
6:
0:
else write (c,’-> выходные дни’)
end; {case}
var i: integer
case I of
0, 2, 4, 6, 8: write(‘четное число’);
1, 3, 5, 7, 9: write(‘нечетное число’);
10 . . . 100: write(‘число от 10 до 100’);
else write (‘число меньше 0 или больше 100’);
end; {case}
case Year of
1941…1945: write(‘рожденные в годы войны’);
1980…1999: write(‘рожденные в годы перестройки‘);
end.
Оператор цикла.
Цикл – это управляющая конструкция, в которой группа операторов или 1 оператор, написанные 1раз, могут быть выполнены нужное число раз.
F
. . . . . . . . . . .
. . . . . . . . .
F
T
F
. . . . . . . . . . .
“While” – позволяет многократно выполнять одни и те же действия в зависимости от некоторого условия, значение которого меняется внутри цикла.
ФОРМАТ.
“While” <условие> ”do”<тело цикла>.
<условие> - булевское выражение, результат которого может быть истина или ложь. В условии участвуют переменные любого типа, которые принимают начальное значение до While.
<тело цикла> - состоит из простого оператора или составного. В нем должен присутствовать хотя бы один оператор, в который значение переменной <условие> меняет таким образом, что условие в конце концов станет ложным.
Цикл “While” работает следующим образом:
1) вычисляется условие;
а) Если условие истина, то выполняется <т.ц.>.
б) Если условие ложь, действие переходит на оператор за <т.ц.>.
2) Когда выполняется <т.ц.>, то переменная участвующая в условии, должна изменить свое значение.
3) Когда <т.ц.> будет выполнена до конца, оператор While возьмет управление на себя(т.е. ход программы опять вернется на оператор While с измененной переменной).
4) Если условие опять истина, <тело цикла> выполняется еще раз.
5) Если условие с первого раза ложь, то <т.ц.> не выполняется ни разу.
While false do x:=x*0,5;
Не будет работать
While not false do x:=x*0,5;
Будет работать бесконечно.
While true do x:=x*0,5;
Составить программу для выполнения функции:
Sin x x<=a dx=0,01.
Z={ cos x если a
Tg x x>b ---o---|--|---|---
Xn=0
Оператор цикла repeat-until.
Цикл repeat-until – цикл с пост. условием, т.е. условие проверяется по выходу из цикла.
“repeat”
<тело цикла>
“until” <условие>
<условие> - булевское выражение(которое имеет внутри себя операции отношения)
В <условии> участвуют переменные любого типа.
Переменная, влияющая на результат <условия>, свое начальное значение может получить в <теле цикла>.
<тело цикла> состоит из любого количества операторов.
<т.ц.> начинается оператором repeat и заканчивается “until”.
Цикл работает следующим образом:
1. Выполняется <тело цикла>
2. По достижению “until” вычисляется <условие>: а) Если результат - ложь, то действия переходят на repeat, и возобновляется <тело цикла>; б) Если результат истина, то действия переходят на оператор, стоящий за “until”.
3. Если условие с первого раза истина, то <т.ц.> выполняется один раз.
Repeat until false; (бесконечно будет работать)
Ввести число n<=20;
Repeat
gotoXY(30,5); Clreol; (если ложь)
until n<=20; (если истина)
function up case (ch: char): char;
function readkey: char;
up case – преобразует строчную литерную букву в заглавную.
Readkey – считывает код нажатия клавиши и освобождает буфер клавиатуры от считанного символа.
Begin
“приветствие”
repeat
window (10,25,40,25); Text Att=4=7*16; clrscr;
write (‘работа завершена Y/N’); Text Mode (Co 80);
Until Up Case (read key)=’Y’; end.
Оператор FOR TO DO.
Применяется для организации цикла по счетчику, который отсчитывает выполнение операторов цикла несколько раз.
Формат:
“for” <счетчик> ”:=” <начальное значение> ”to” <конечное значение> ”do” <тело цикла>.
<счетчик> - индексная переменная перечисляемого типа;
<начальное значение> - переменная того же типа, что и счетчик, это значение для счетчика является началом отсчета;
<конечное значение> - переменная одного типа что и <счетчик> и <начальное значение>.
Это конечное значение, до которого увеличивается <счетчик> c шагом роста-еденица.
Если ключевое слово “to”, то <начальное значение> <=
<= <конечное значение>.
<тело цикла> - может быть простой, структурированный или составной оператор.
Работа цикла.
1. <счетчик> цикла принимает начальное значение;
2. проверяется: а) если значение <счетчика> <= <конечное значение>, то <тело цикла> не выполняется, а действия программы переходят на оператор, стоящий за <телом цикла>.
3. Как только выполняется последний оператор <тела цикла>, то оператор FOR берет управление на себя: а) к <счетчику> прибавляется шаг роста единица и с новым значением <счетчика> повторяется действие с пункта 2.
Пример. Число а возвести в 7 степень.
a*aa2
a2*aa3
. . . . .
a3*aast
R:=R*a
1 способ.
Var a,R; real; i, st: byte;
Begin
Write (‘введите основание степени’); real(a);
Write (‘введите показатель степени’); real(st);
R:=1;
For i:= 1 to st do
R:=R*a;
2. R:=a;
for i:=2 to st do
R:=R*a
Пример 2.
Type N=(A…Z);
Var i: N;
Begin
For i:=’A’ to ‘Z’ do begin{1}
<тело цикла> end;{1}
Оператор for down to do.
“for” <счетчик> “:=” <начальное значение> “down to” <конечное значение> “do”.
Цикл работает по тем же правилам, что и fo to do , только <нач. зн.> > =< кон зн.>, т.е. значение <счетчика> изменяется от большего значения к меньшему со стандартным шагом уменьшения – единица.
R:=1 i :=7 >=1 R R* a
For i :=7 down to 1 do R 1*а
R := R * a 6 > = 1t R R* a
5 > = 1t R R *a
4 > = 1t R R *a
3 > = 1t R R *a
2 > = 1t R R *a
1 > = 1t R R *a
0 > = 1t
Внутренние циклы должны иметь вложенную конструкцию и не должны иметь пересекающуюся.
Внутренний цикл запускается столько раз, сколько работает внешний цикл и работает нужное число раз.
Структурированные типы данных.
Структурированные типы данных определяют наборы однотипных или разнотипных компонентов. В языке Турбо Паскаль следующие структурированные типы:
1. Массивовый тип.
2. Множественный.
3. Строковый.
4. Записной.
5. Файловый.
1. Массивовый тип является составным типом данных. Массив состоит из определенного количества компонентов одинакового типа. Компоненты могут быть простыми и составными. Доступ к каждому элементу массива осуществляется с помощью индексирования. Индексом может быть произвольное выражение порядкового типа, заключенное в квадратные скобки. Допустимый диапазон индексов определяется в описании массива.
Формат:< иден.мас.>” :” “arrau”<[интервальный тип индексов]>”of” <тип эл-та >;
<Интервальный тип индексов> – описание порядкового типа.
<Тип эл-тов > - описание типа элементов, простого или структурированного типа.
Var A, B: array [1...5] of integer;
array [1...5] of integer
А:=В; {можно, т.к. они идентичны}
А:=С; {нельзя, т.к. они не идентичны}.
Чтобы массивы были идентичны, надо создать псевдоним этого типа.
Type TM = array [1...100] of integer
var А:ТМ; В:ТМ; С:ТМ; теперь они все идентичны
А:=С; А:=В; {можно}
П2. Type Color = (Read, Green, Blue);
Н= 0...200;
var S: array [Color] of N;
П3. Const N=30;
Type FIO = array [1...N] of char;
class = array [1...N] of FIO;
var shool: array [1...20] of class;
Иначе
var shool: array [1...20, 1...N] of FIO;
Существуют п-мерные массивы.
П. В гостинице из 5 этажей на каждом этаже 20 комнат, в каждой из которых 4 койки, каждая из которых либо занята, лтбо свободна.
Var gost: array [1...5, 1...20, 1...4] of boolen;
Работа с одномерным массивом.
Одномерный массив имеет одну меру измерения, в нем может быть n-элементов, использовать можем k элементов, где n>=k. Каждый элемент стоит на i месте, где i изменяется от 1 до k.
n>=ki [i...k]
П. В массиве из 100 элементов найти наибольший элемент и установить его на 1 место.
Program Proba;
const n=100;
type TM=array[1...n] of real;
var M:TM; K,i: byte; DM: real;
begin {Запросить, какое количество элементов будет обработано}
write (укажите количество элементов);
repeat Gotoxy (?,?); CLRBOL; read (K);
until K<=n;
{заполнить массив}
read mas [1]:=
mas [2]:=
mas [3]:=
for i:=1 to K do begin {1}
mas [i]:= random (50) - 25;
random - генератор случайных чисел.
{Выработаны случайные значения от - 25 до +25}.
write(M[i]:8:1); end;{1}
for i:=2 to K do
if M[1]
DM:=M[1];M[1]:=M[i]
M[i]:=DM; end;{2}
write(M[1]);
наиб.элемент =(M[1]);
П. For i:=1 to K-1 do
for j:=i+1 to K do
if M [i]
then перестан;
Когда завершился внутренний цикл, переходим на внешний цикл.
Пузырьковая сортировка.
Program Proba;
var M: array [1...5] of integer;
DM:integer;
PR:boolean;
begin {Заполним и распечатаем исходный массив}
PR:=false;{Предположим, что наш массив ложный, т.е. не отсортированный}.
{Будем сортировать до тех пор, пока массив ложный}.
While PR=false do begin {1}
PR:=true; {Предполагаю, что массив истина}.
For i:=1 to k-1 do {Организовываю цикл, в который буду переставлять элементы попарно}.
If M[i]
begin DM:=M[i]:
M[i]:=M[i+1]
M[i+1]:=DM;
PR:=false; end:{1}
Если в массиве допускается хотя бы одна перестановка, значит массив неправильный.
Предположим PR:=false; false t PR=t i=1
M[1]
M[2]
M[3]
M[4]
перестановка не происходит, но все равно false
Внутренний режим отработан, переходим на внешний цикл
PR:=f=f t
{Предположим, что в этот раз не будет ни одной перестановки}.
Bubble.pas.
Program Proba;
uses crt;
const pi:real=3,14;
var xn,xx,y,dx,a:real;
var i:byte;
begin
i:=0;
textattr:=22;
clrscr;
gotoxy (35,2); write(‘ ‘);
gotoxy (35,3); write(‘ ‘);
gotoxy (41,4); write(‘ ‘);
gotoxy (41,5); write(‘ ‘);
window (2,8,19,15);
gotoxy (3,9); textcolor (15); writeln (‘ ‘);
gotoxy (4,10);write (‘xn =’); read (xn);
gotoxy (4,11);write (‘xk =’); read (xk);
gotoxy (4,12);write (‘dx =’); read (dx);
gotoxy (4,13);write (‘a=’); read (a=);
window (40,6,70,24);
clrscr;
writeln (‘ ‘);
writeln (‘ ‘);
writeln (‘ ‘);
writeln (‘ ‘);
writeln (‘ ‘);
i:=1; window (40,11,70,24);
while xn<=xk do begin
if xn,<1,3 then y:=pi * sgr (xn) -7/ sgr (xn);
if xn,=1,3 then y:=a * exp (3*ln(xn)) +7/ sgr (xn);
if xn,>1,3 then y:=ln(xn +7/ sgr (xn));
gotoxy (1,i); write (xn:5:2);
gotoxy (3,i); write (y:5:2);
xn:= xn +dx;
inc (i);
if i=13 then begin readln; readln;
i:=1; window (40,11,70,24);clrscr;end;end;
gotoxy (1;i);write (‘| |’);
readln;readln;
end.
Лабораторная работа № 3.
Обработка одномерных массивов.
Цель работы - овладеть практическим навыками работы с массивами, особенностями их ввода и вывода, приобретение дальнейших навыков по организации пр-м циклической структуры с использованием приемов программирования.
Массив Действия
А(80) Вычислить среднее арифметическое значение массива A.
Условия Аi> 0.
Работа с двухмерными массивами.
Двухмерный массив из элементов, каждый из которых структурированный.
Type Tst=array[1...10] of byte;
TM=array[1...10] of Tst;
var Mas:TM; i=
Mas [1]:Mas [i,j];
for j:=1 to 10 do по строке {1}
for i:=1 to do begin {2}
Mas [i,j]:=random (30)=15; Мы должны распечатать.
random - случайно выработанное число.
Gotoxy (j*4-2,6+i); write (s); end; {1}
for j:=2
i:=1
1:=0
Пробор по главной диагонали.
For i:=1 to 10 do
if Mas [i,j]>0 then.....
for i:=1 to 9 do
for j:=i+1 to 10 do
элементы ниже главной диагонали.
For i:=2 to 10 do
for j:=1 to i-1 do
Строковые переменные.
Структурированный тип строка представляет собой от 1 до 256 элементов одного и того же типа (символ).
Формат:
<имя переменной> : ”string” [количество литеров];
П. Const Name: string [30]= ‘Жуков’ И.А’.;
var str1:string [10];
Это значит, вся область памяти, отводимая str1, разделена на 10 элементарных ячеек длиной в 1 byte, в каждой из которых может находиться 1 литера (буква, цифра, пробел, знак). Максимальное количество литеров 255, max длина String 256 byte. В самом начале области Str1 создается дополнительная ячейка Str1 [0]- нулевая ячейка, в которой хранится текущее значение длины String.
Длина String = количеству символов.
String oбладает свойствами массива:
- Может иметь n элементов (255) одного и того же типа Char.
- Заполнено элементов К, где К<=n.
- К каждому элементу можно обращаться по его порядковому номеру, т.е. Name [3], где i<=k<=255.
Свойства, отличающие от массива:
- Присутствует 0-й byte, хранящий длину массива.
- String может получить значение по его имени.
Переменная типа String получает значение.
Можем прочесть с клавиатуры сразу всю переменную.
Readln (Str1); ln - oбязательно.
Str1:=’Зина’;
str1[1]:=’p’
Действия, производимые над стрингами
и их правила.
Каждая отдельно взятая литера представлена в компьютере некоторым числом, называемым кодом.
‘a’ < ‘a’; ‘A’ < ‘a’;
Правило сравнения.
Два стринга или стринговых выражения с V-текущими значениями и max длинами могут сравниваться между собой. Для установления факта равенства необходимо(string1=string2), чтобы сравниваемые объекты имели одинаковые значения и их текущие длины совпадали.
ПРИСВОЕНИЕ: механизм стринговых назначений имеет некоторые особенности, обусловленные соответствием длин стрингов получателя (который принимает) и источника (который отдает).
- Если длина получателя = длине источника, то значение string-а источника целиком помещается в string-е получателя.
- Если max длина получателя превышает текущую длину источника, все содержимое стринга - источника попадает в стринг-получатель и текущая длина получателя становится равной текущей длине источника.
- Если max длина получателя меньше текущей длины источника, значением получателя становятся первые литеры источника, которые поместились в получатель. Текущая длина получателя равна максимальной длине получателя.
Конкатинация - сцепление одного стринга с другим.
П. Var str0; string [50];
str1; string [10];
str2; string [8];
str3; string [6];
str4; string [8];
begin
str2:=’не| |’;
str1:=’ правда’;
str3:=’ правда’| |’;
Первый способ:
str0:=str2+str1; {не правда}
str1:=str1+ ‘| |’;{правда | |}
if (str1+’| |’) = str3 then write (str1);
{правда};
При конкатинации надо побеспокоиться, чтобы приемник принял сумму длин текущих источников.
2 случай: используем функцию concat
function concat ({a,b,:string}): string
str0:=concat (str1,str2);{ правда не | |}
str0:=concat (str2,str1); { не | | правда}
Удаление из стринга.
Выполняется с помощью Delete.
Delete предназначена для удаления из стринга с указанной позиции нужное количество литеров.
Delete (стринг, № позиции, количество удаляемых символов).
С 5 позиции удалить 2 символа.
Delete (str1,5,2); {Правда}
str1:=’ лидера’;
Delete (str1,3,2); {лира}
- Если кол-во удаленных литеров меньше количества существующих литеров с данной позиции, то оставшиеся справа символы присоединяются к левым символам.
- Если количество удаленных символов больше реальной существующих с данной позиции, то будет удалено лишь максимально возможное в данной ситуации.
- Если номер, с которого удаляют символы больше текущей длины стринга, то ни одной литеры удалено не будет.
Insert - это процедура, где на 1 месте вставляемый стринг, на 2 - принимаемый, затем позиция приема.
Insert (вставляемый стринг, принимаемый стринг, позиция вставки)
Insert (‘де’,str1,3); {Лидера}
- Если максимальная длина стринга, который намереваемся вставить больше длины принимаемого стринга, то в принимаемом стринге все литеры, выходящие за пределы приемника, будут отброшены.
- Если позиция вставки задана параметром больше текущей длины стринга, то 2 параметр будет присоединяться к концу 1-го параметра.
- Если значение 3 параметра находится вне отрезка от 0 до 255, то возникает ошибка программы.
Копирование стрингов.
приемник стр:= (стринг источ., нач. поз., кол-во позиций).
Str2:=’computer’;
str0:=copy (str2,1,4) + ‘U’ + copy (str2,5,2);
Результат { computer}
Позиционирование в стринге (pos)
k:=pos (стр., которую ищем, стринг, в котором ищем);
К - целочисленная переменная, которая указывает на номер позиции, с которой повторится искомый стринг.
Str2:=’вечер’;
k:=pos (‘e’,str2); {k=2}
Определение длины стрингов.
Функция length возвращает целочисленное значение, указывающее длину нашего стринга.
Var size:byte;
str1:string;
read (str1);
size:= length (str1);
str1:= ’вечер’;
size:= length (str1); {5}
Для определения кода 0 ячейки.
Size:=ord (str1[0]);
Код 0-го byte-а стринга str1 (присвоения) помещает целочисленную переменную size, что равносильно текущей длине str1.
П. Удалить все лишние пробелы в тексте, оставив по одному.
K:=pos (‘| | |’,str1)
while k <>0 do begin
Delete (str1,k,1)
k:=pos (‘| | |’,str1);
end;
П. Из стринга str1 распечатать буквы по алфавиту, указав их количество.
A1: последний k=0
Б1: последний k=
B1: последний k=
Г
.
.
Я
если К есть - распечатываем.
Var j:char;
k,i:byte;
str1:string;
for j:’a’ to ‘я’ do begin
k:=0;
for i:=1 to length (str1) do
if j:=str1[i] then inc (k);
end;
Множества.
Множество - это структурированный тип данных, состоящий из 255 элементов одного и того же типа (перечисляемого).
Свойства множества.
- Повторяющиеся элементы во множестве игнорируются.
- Не имеет значения порядок следования элементов.
- Размер множества ограничен (256).
Объявление множества.
Var chset:set of char;
type tchset: set of char;
var ch1,ch2,ch3:tchset;
d:set of 0...9;
liter:set of ‘A’...’Z’;
color:set of (white, black, gray);
Построение множества.
Чтобы во множестве появились какие-либо элементы необходимо выполнить предложение назначения, в левой части которого указано имя set -переменной, а в правой - некоторое множественное выражение. Результатом вычисления этого выражения должно быть множество с точно таким же базовым типом, что и у стоящей слева переменной.
Color:=[white,gray]; (true)
liter:=[‘k’..’t’];
var number1:0...9;
number2:0...9;
number:set of 0...9;
number1:=5;
number2:=7;
num:=[ number1..9, number2];
num:=[0,1,2,5,9];
type weekdays=(Monday,tursday,Friday);
var days:set of weekdays;
days:=[Friday,Monday];
days:=[]; - создали пустое множество, очистили его.
Операции над множествами.
- Объединение 2 множеств А и В записывается А+В, есть новое множество, состоящее из элементов, принадлежащих множеству А и множеству В.
П.type chset:set of char;
var ch1,ch2,ch3:tchset;
ch1:=[‘a’,’x’,’e’];
ch2:=[‘a’,’b’,’e’];
ch3:=ch1+ch2;
{[‘a’,’x’,’e’,’b’]};
Обязательное условие: все три множества должны быть одного базового типа (Tchset)/
- Пересечение 2 множеств А и В есть новое множество, состоящее из элементов, принадлежащих как А, так и В.
П. Ch3:=ch1*ch2; {[‘a’,’e’]}
- Разность 2 множеств А-В есть новое множество, состоящее из тех элементов А, которые отсутствуют в В.
Ch1:=ch1-[‘e’]; {[‘a’,’x’]};
Ch1:=ch1+[‘e’]; {[‘a’,’x’,’e’]};
Ch1:=ch1+[‘k’]; {[‘a’,’x’,’e’,’k’]};
Ch1:=[‘k’]; {[’k’]};
ch3:=ch2-ch1; {[‘b’]};
- Сравнение множеств.
Два множества А и В равны, если каждый элемент из А является также элементом В и наоборот.
Множество А есть подмножество В, если каждый элемент А также присутствует и в В.
На Pascale имеют место такие выражения, как А<=В; А>=В; А=В.
Для этого необходимо выяснить, является ли А подмножеством В, предусматривается специальный оператор in.
Пусть А - множество элементов определенного базового типа, а Х - переменная этого типа, тогда выражение ХinА - истина, если Х является элементом множества А. В нашем примере
if’a’ in ch1 then <действия>
Правило приоритета для множественных операций.
I - *
II +;-
III =,<>,>=,<=/in
Применение множества.
Множество используется как память определенных условий.
Подпрограммы.
Алгоритм проблемной или сервисной программы представляет собой достаточно большой объем, что препятствует качественному написанию программы. В момент разработки программы алгоритм разбивается на фрагменты, что способствует детальному изучению фрагмента, легкости написания и отладки. Решение отдельного фрагмента сложной задачи может представлять собой программный блок, называемый подпрограммой.
Подпрограмма - это отдельная конструкция программы, находящаяся в теле программы. Структура подпрограммы идентична структуре программы, позволяет сосредоточить в ней подробное описание некоторых операций.
В нужной части основной программы оформляется вызов подпрограммы, что способствует выполнению соответствующих операций.
В нужной части основной программы оформляется вывоз подпрограммы, что способствует выполнению соответствующих операций. Такие вызовы подпрограмм возможно неоднократно из разных участков основной программы. При вызове подпрограмм можно передавать некоторую информацию, чтобы одни и теже операции выполнялись для разных исходных данных. А также подпрограмма имеет возможность передавать в вызываемую программу результаты своей работы. Подпрограммы по организации и использованию делятся на процедуры и функции.
Структура основной программы,
имеющей подпрограмму.
“Program” <идентификатор пл. пр.> “;”
Директивы компилятора, uses, type, const, var – глобальные объявления.
{Раздел подпрограмм}
{Заголовок подпрограммы Директивы компилятора, uses, type, const, var – локальные объявления
{Раздел подпрограмм}
{begin {begin
{операции подпрограммы
{end
{операции подпрограммы
{end;
Подпрограмма может использовать локальные переменные, т.е. переменные объявленные в декларативной части подпрограммы и доступные только ей самой. Каждая подпрограмма знает только о своих переменных и о глобальных переменных объявленных выше. Обмен информацией между основной программой и подпрограммой можно осуществить только через глобальные переменные. Для каждой подпрограммы наибольшим приоритетом пользуются собственные, локальные переменные. Действие программы имеющей подпрограммы начинается с исполняемой части главной программы. Главная программа может вызывать подпрограмму первого уровня, а о втором уровне она ничего не знает. Подпрограмма остается объявленной структурной переменной в секторе данных оперативной памяти пока не произойдет ее вызов. После вызова программа организуется в разделе оперативной памяти, называемой СТЕК, резервируя место под свои декларации. Поэтому имя переменной подпрограмма ищет сначала в стеке и если не найдет, то в секторе данных. Поэтому глобальные и локальные переменные могут иметь один и тот же идентификатор только в том случае, если подпрограмма никогда не будет пользоваться глобальной переменной. По завершению подпрограммы действия переходят в главную часть программы, в точку вызова и связь с адресами стека теряется. Если подпрограмма должна главной программе результат, то прежде чем завершиться она должна оставить его в глобальных переменных в секторе данных оперативной памяти. Подпрограмма может использовать глобальные параметры(переменные) двоякими способами:
1. через идентификатор глобальных переменных, для этого необходимо, чтобы идентификатор локальной переменной не совпадал с индикатором глобальной переменной;
2. через механизм формальных параметров “по адресу”
Формальные параметры – параметры, описанные в заголовке подпрограммы, указывающие по какой форме подпрограмма принимает исходные данные для своей работы и вызывает результат.
Фактические значения (параметры) - выражение, заключающее конкретное значение при обращении к подпрограмме, соответствующее форме формальных параметров.