Алгоритмические языки высокого уровня. Курс лекций
.pdfend;
function M_V(VS:RealAr):integer; var
nom:integer;
PromV:real; begin
nom := 1; PromV :=VS[1]; for i :=2 to MaxRaz do begin
if VS[i] > PromV then begin
nom := i; PromV :=VS[i]; end;
end;
Max_Value :=nom; end;
Begin
fin :=false; repeat
clrscr;
gotoxy(1,1); write(‘Введите MaxRaz - ’); readln(maxRaz); gotoxy(20,1); write(‘MaxR =’,maxRaz);
if maxRaz=0 then Fin := true; assign (FileD,FileName); rewtite(FileD);
for i :=1 to maxRaz do begin
gotoxy(15,3); write(Pr); gotoxy(15,4);write(Pr);
gotoxy(1,3); write(‘Введите Name - ’); read(NameFD); gotoxy(1,4);write(‘Введите Sum - ’); readln(SumFD);
VFD.Name := NameFD; VFD.Sum :=SumFD;
write(FileD,VFD);
gotoxy(1,6); write(i,‘-элемент’,‘Name=’,NameFD:10,‘Sum=’,SumFD:12:2); end;
close(FileD); Read_FileD; Write_Array; gotoxy(1,24);
write('max’,‘Name’,Vname[M_V(VSum)]:10, ‘Sum-’,VSum[M_V(VSum)]:12:2);
while not keypressed do until Fin
End.
31
3. ОПЕРАТОРЫ ЯЗЫКА РASCAL
Структурированная программа – это программа, составленная из фиксированного множества базовых конструкций (следование, ветв- ление, цикл). Применяя эти конструкции, можно реализовать алго- ритм решения любой задачи.
Конструкция, представляющая собой последовательное выполне- ние двух или более операций, называется следованием (P1, P2 – опе- рации).
Конструкция, состоящая из развилки, двух операций и слияния, называется ветвлением (P1, P2 – операции).
Конструкция, имеющая линии управления, ведущие к предыду- щим операциям или разветвлениям, называется циклом (P1 – опера- ция).
Конструкции следование, ветвление и цикл можно представить как операции, так как они имеют единственный вход и единственный
32
выход. Произвольную последовательность операций можно предста- вить как одну операцию. Операция может быть реализована любым оператором языка (простым или составным), либо группой операто- ров. В Pascal используются следующие базовые конструкции: следо- вание, ветвление, цикл с пред- и постусловием, цикл с параметром, вариант.
3.1.Простые операторы
1.Самым простым действием над переменной является занесение
внее величины соответствующего типа (присвоение переменной конкретного значения).
Оператор присваивания – представляет собой одно строго опре- деленное действие по записи вычисленного значения (выражения) в оперативную память.
Синтаксис
Имя переменной |
:= |
Выражение |
|
|
Пример: а := а + 1; (из ячейки памяти, в которой находится значение переменной а, берется это значение, прибавляется единица и полученное значение помещается обратно в эту ячейку памяти).
Выражение, указанное справа от знака «:=», должно приводить к значению того же типа, какого и сама переменная, или типа, совмес- тимого с переменной относительно команды присваивания. Напри- мер, переменной типа Real можно присвоить значение типа Integer или Word (но наоборот этого делать нельзя). Выражение будет сна- чала вычислено, затем его результат будет положен в ячейки памяти, отведенные для хранения значения переменной.
2. Этот оператор является основой многих элементов алгоритмов. Составной оператор – это последовательность произвольных операторов программы, заключенная в операторные скобки begin
. . . end. |
|
|
|
|
|
|
Синтаксис |
|
|
|
|
|
begin |
|
Оператор (ы) |
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Составной оператор служит для объединения нескольких опера- торов.
33
Пример
begin
if x<0 then writeln (’y = ’,y:8:3); end;
Составной оператор предоставляет возможность выполнить лю- бое количество команд там, где подразумевается использование только одного оператора.
3.2. Условные операторы
Условный оператор – средство для разветвления вычислитель- ного процесса на два направления.
Синтаксис
if |
Логическое |
then |
|
else |
|
|
выражение |
1 |
2 |
||||
|
Оператор |
Оператор |
Сначала вычисляется выражение (условие), которое должно иметь логический тип. Если оно имеет значение true, выполняется первый оператор, иначе – второй.
После этого управление передается на оператор, следующий за условным. Одна из ветвей может отсутствовать. Операторы, входя- щие в состав условного оператора, могут быть простыми или состав- ными.
34
Пример программы
Описание: программа выводит на экран код введенного числа в шестнадцатеричной системе счисления.
program IF_Test;{HEX} uses crt;
var ch:char; n:integer;
Stop:boolean; begin
Stop := false; Repeat
clrscr;
gotoxy(1,1); write ( ‘Введите число ’ ); read (n);
if (n>0) and (n<15) then begin
if n<10 then
ch := chr(ord(‘O’) + n) else
ch := chr(ord(‘A’) + n - 1)
gotoxy(1,2); write(‘ Результат - ’, ch); end
else begin
gotoxy(1,2); write(‘ Ошибка ’); Stop := true;
end;
gotoxy(1,3); write(‘Press any key…’ ); while not keypressed do
until Stop end.
Оператор выбора – позволяет выбрать одно из нескольких воз- можных продолжений (ветвлений) программы.
|
|
|
Case |
|
|
|
|
Выражение порядкового типа |
|
|
Of |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
По результату ключевого выражения |
Из вариантов |
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Варианты через ; |
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
Константа |
|
|
: |
|
|
|
|
|
Оператор |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Действие по варианту |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
ELSE |
|
|
|
|
Оператор |
|
|
|
|
|
END |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35
Синтаксис
сase <ключ выбора> of <список выбора> else <оператор> end;
Параметром, по которому осуществляется выбор, является выра- жение <ключ выбора> – выражение (<ключевое выражение>) любого порядкового типа, дающее результат порядкового типа, имеющего не более 65535 значений.
Ключевое |
нет |
|
|
||
|
Действия при несовпадении |
||||
выражение |
|
||||
|
|||||
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ключ 1 |
|
|
|
Действия по варианту 1 |
|
|
|
|
|
|
|
Ключ 2 |
|
|
|
|
|
|
|
|
Действия по варианту 2 |
|
|
Ключ 3 |
|
|
|
|
|
|
|
|
|
||
|
|
|
Действия по варианту 3 |
|
|
|
|
|
|
|
|
. . . |
|
|
. . . |
. . . |
|
Ключ n |
|
|
|
|
|
|
|
|
Действия по варианту n |
|
|
|
|
||||
|
|
|
|
|
|
<Список выбора> – одна или несколько конструкций вида:
<константа выбора>(ключ) <константы выбора> : <оператор>.
Все константы (ключи), являющиеся ключами вариантов, должны быть уникальными и по типу совместимыми с типом ключевого вы- ражения.
Пример программы
Описание: программа определяет, какая из клавиш клавиатуры была нажата. В состав Pascal входят модули (библиотеки), исполь- зуемые при программировании ресурсов. В модуле (библиотеке) Crt, входящей в состав Pascal есть функция readkey, позволяющая полу- чить код нажатой клавиши. Действие функции readkey: если нажата алфавитно-цифровая клавиша, функция возвращает соответствую- щий символ. Если нажата клавиша курсора, возвращается символ с кодом 0, а при повторном вызове можно получить так называемый расширенный код клавиши. Для простоты можно считать, что рас- ширенный код – это номер клавиши на клавиатуре. Функция ord по- зволяет получить числовой код символа.
36
program cursor_keys; uses Crt;
var key : char; begin
writeln('Нажмите одну из клавиш клавиатуры '); key := readkey;
if ord(key) <> 0 then writeln('обычная клавиша') else
begin
key := readkey; case ord(key) of
77: writeln('стрелка вправо'); 75: writeln('стрелка влево'); 72: writeln('стрелка вверх');
80:writeln('стрелка вниз'); else writeln('не стрелка');
end;
end;
end.
Пример программы
Описание: программа-калькулятор для выполнения простых арифмитических действий.
program CASE_test;{калькулятор - calculator} uses crt;
var
znak: char; x,y,z: real; Stop: boolean; begin
Stop := false;
Repeat clrscr;
gotoxy(1,1); write(‘Введите первое число: ’); readln(x); gotoxy(1,2); write(‘Введите второе число: ’); readln(y); gotoxy(1,3); wtite(‘Введите знак операции: ’); read(znak);
case znak of ‘+’ : z := x+y; ‘-’ : z := x-y; ‘*’ : z := x*y; ‘/’ : z := x/y; else
begin
gotoxy(1,5); write(‘Ошибка ’); Stop := true;
end;
end;
37
if not Stop then begin
gotoxy(1,6); write(x:6:2, ‘ ’, znak, ’ ’, y:6:2, ‘ = ’, z:12:2);
end else begin break; end;
gotoxy(1,10); write(‘Press any key…’ ); while not keypressed do
until false; end.
3.3. Операторы цикла
Оператор цикла с параметром – используется в алгоритмах, ко- гда для каждого значения переменной из диапазона множества зна- чений необходимо выполнять одинаковые действия. Эта переменная называется параметром цикла.
|
|
Параметр цикла |
|
|
Список |
Выполнять |
|
||||
Для |
|
|
|
значений |
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
Переменная |
|
|
|
|
|
|
|
|
|
For |
|
порядкового |
:= |
|
Диапазон |
DO |
|
|
Оператор |
||
|
|
значений |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
||
|
|
типа |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Синтаксис: For i:=1 to (downto) do <оператор>
Список значений может быть определен двумя способами – как возрастающий диапазон значений (определяется символом TO) или как убывающий диапазон значений (DOWNTO).
|
TO |
Выражение 1 |
Выражение 2 |
DOWNTO
Выражение 1 и выражение 2 определяют границы диапазона зна- чений параметра цикла. Результаты вычислений выражений 1 и 2 и параметр цикла должны быть одного порядкового типа.
38
Условием выполнения оператора цикла с параметром является существование списка значений – для возрастающего списка значе- ний (TO) значение выражения 1 должно быть меньше или равно зна- чению выражения 2; для убывающего списка значений (DOWNTO) значение выражения 1 должно быть больше или равно значению вы- ражения 2.
Порядок выполнения оператора цикла.
1.Вычисляется условие выполнения оператора цикла с парамет- ром. Если условие имеет значение FALSE, то выполнение оператора цикла прекращается (выполняется следующий оператор, стоящий за оператором цикла).
2.Выбирается очередное значение параметра цикла из списка зна- чений (первый раз – значение выражения 1). Если список значений исчерпан (было выбрано значение выражения 2), то выполнение опе- ратора цикла прекращается (выполняется следующий оператор, стоящий за оператором цикла).
3.Выполняется оператор, стоящий после символа DO (тело цик-
ла).
4.Осуществляется переход к пункту 2.
Пример программы
Описание: программа выводит на экран результат вычисления сумм.
Program for_test; {Вычисление сумм} uses crt;
var
i, n, s: integer; rs: real;
Stop: boolean; begin
stop:= false; repeat
clrscr;
gotoxy(1,1);write(‘Введите число ’); read(n); s:=0; rs:=0;
if (n>0) then begin
for i:=1 to n do begin
s:= s+1; rs:= rs+sqrt(i); end;
end else begin
39
for i:=-1 downto n do begin
s:=s+i; rs:=rs+sqrt(abs(i)); end;
end;
goto(1,2); write(‘Результат: s= ’,s, ‘ rs = ‘, rs); if n=0 then
begin
gotoxy(1,2); write(‘ Stop ’); Stop:= true; end;
gotoxy(1,3); write(‘ Press any key… ’); while not keypressed do
until Stop end.
Оператор цикла с предусловием – полностью соответствует структуре цикла с предусловием: «пока выполняется условие повто- рения – повторять серию команд».
вход
|
|
|
|
|
|
Условие |
|
нет |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
повторения |
|
|
|
выход |
|
|
|||
|
|
|
|
|
|
цикла |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
да |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
Тело цикла |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
Серия |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WHILE |
|
|
Логическое |
|
|
|
|
DO |
|
Оператор |
|||||
|
|
|
|
|
|
выражение |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Синтаксис: While <условие> do <оператор>
Название этого оператора определяется тем, что условие распо- ложено в начале структуры. С точки зрения синтаксиса тело опера- тора цикла пока может состоять только из одного оператора (естест- венно, любого, в том числе и составного).
Порядок выполнение оператора цикла с предусловием.
1. Вычисляется логическое выражение, являющееся условием по- вторения цикла.
40
