ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.04.2025
Просмотров: 270
Скачиваний: 1
Нет
Да
Нет
Да
I вариант:
Program P;
Uses CRT;
Label KON;
VAR A:array [1..100] of real;
I:integer;
Begin
Clrscr;
FOR i:=1 to 100 DO
Begin
Write(‘A[‘,I,’]=’);
Readln(A[i]);
End;
FOR i:=1 to 100 DO
IF (A[i]=0) THEN
Begin
Writeln(‘Номер=’,i);
GOTO KON;
End;
Writeln(‘НЕТ 0’);
KON: end.
Оператор EXIT прерывает выполнение программы и передаёт управление на конец процедуры или модуля.
II вариант:
Program P;
Uses CRT;
VAR A:array [1..100] of real;
I:integer;
Begin
Clrscr;
FOR i:=1 to 100 DO
Begin
Write(‘A[‘,I,’]=’);
Readln(A[i]);
End;
FOR i:=1 to 100 DO
IF (A[i]=0) THEN
Begin
Writeln(‘Номер=’,i);
EXIT;
End;
Writeln(‘НЕТ 0’);
End.
Оператор HALT завершает работу всей программы.
Метод совмещения условий
{$R+} – включить контроль границ диапазона.
{$R-} – сокращённое вычисление логических выражений.
…
Begin
<Ввод массива A(100)>
I:=1;
While (A[i]<>0) and (i<=100) DO
I:=i+1;
IF i>100 THEN writeln(‘нет 0’) ELSE
Writeln(‘номер ‘,i);
End.
I=1
A(100)
I=i+1
i>100
Нет 0
i
Начало
(A[i]<>0) and (i<=100)
Да Нет
Конец
Оператор break … continue
<заголовок цикла>
…
Break; {переход на оператор, который следует за
<конец цикла> циклом}
<заголовок цикла>
Continue; {переход на последний оператор в цикле}
…
<конец цикла>
Примеры:
Begin
…
K:=0;
FOR i:=1 TO 100 DO
begin
IF (A[i]=0) THEN begin
Writeln(‘i=’,i);
Break;
End;
IF k<100 THEN k:=k+1;
End;
Writeln(‘нет 0’);
end.
BEGIN
…
FOR i:=1 TO 100 DO
Begin
IF (A[i]<>0) THEN continue;
Writeln(‘i=’,i);
Exit;
End;
Writeln(‘нет 0’);
End.
Метод флажков (универсальный метод)
F=true
I=1
F
Ai=0
i
I=i+1
F=false
i>100
Нет 0
F=false
Нет
Да
Да нет
Нет да
Program P;
Var A:array [1..100] of real;
I:integer; F:Boolean;
Begin
<Ввод A>;
F:=true;
I:=1;
While F do
If (A[i]=0) Then begin
Writeln(‘i=’,i);
F:=false;
End else begin
I:=i+1;
If i>100 then begin
Writeln(‘нет 0’);
F:=false;
End; end;
End.
Сортировка одномерного массива A(100)
-
По возрастанию (знак «<»);
-
По убыванию (знак «>»).
Метод пузырька
A(100)
I=2
J=100
Aj-1>Aj
X=Aj-1
Aj-1=Aj
Aj=X
Да

J=j-1
j>i
I=i+1
i>100
A(100)
Да
Нет
нет
Да
Program P;
Var A:array [1..100] of real;
I,j:integer; x:real;
Begin
<Ввод A>;
For i:=2 to 100 do
For j:=100 downto I do
If (A[j-1] > A[j]) then begin
X:=A[j-1];
A[j-1]:=A[j];
A[j]:=X;
End;
<Вывод A>;
End.
Лекция №9
Процедуры
Основная программа
(головной модуль)
|
Program … |
||
|
Обращение к процедуре |
||
|
|
||
|
Обращение к процедуре |
||
|
|
||
|
Процедура |
||
|
Описание процедуры
|
|
|
Бывают:
-
Внутренние процедуры;
-
Внешние процедуры.
Внутренняя процедура
Описание процедуры помещается в раздел описаний программы.
Program P;
Uses …
Const …
Label …
TYPE …
VAR …
Procedure <имя> [(<список параметров>)];
…
Begin {описание процедуры}
…
End;
Function <имя> (<список параметров>): <тип данных>;
…
Begin {описание функции}
…
End;
Begin {раздел операторов}
…
<обращение к процедуре>
…
End.
Процедура вызывается указанием имени и фактических параметров, функции вызываются в выражениях.
Внешняя процедура
Program P;
Uses mod1;
…
P1;
…
End.
Unit mod1;
…
Procedure P1;
…
End.
Процедуры различаются по типу:
-
Стандартные процедуры (функции, описание которых подключено непосредственно компилятором);
-
Procedure;
-
Function.
Обращение к процедуре является операндом. В списке фактических параметров можно задавать выражения, в процедуру будет передаваться значение выражения.
Описание процедуры – Procedure
Procedure <имя> [<список формальных параметров>];
{заголовок процедуры}
VAR
… <раздел описаний локальных имен>
Begin {тело процедуры}
… {раздел операторов}
End;
Обращение к процедуре:
<имя> [<список фактических параметров>)];
Обращение к процедуре является самостоятельным оператором. При обращении к процедуре список формальных параметров заменяется на список фактических параметров.
Процедуры без параметров
Дан массив A(20). Найти в нем min и max.
Program P;
Const n=20;
TYPE mas=array [1..n] of real;
VAR A:mas; i:integer; min,max:real;
Procedure minmax;
VAR i:1..n;
Begin
Min:=A[1];
Max:=A[1];
FOR i:=2 TO n DO
Begin
IF (A[i] > max) THEN max:=A[i];
IF (A[i] < min) THEN min:=A[i];
End;
End;
Лекция № 10
Связь формальных и фактических параметров
При описании процедуры мы задаем формальные параметры, а при обращении к процедуре – фактические параметры.
Между формальными и фактическими параметрами должно существовать взаимно-однозначное соответствие (в обе стороны).
Соответствие устанавливается:
-
Количеством параметров;
-
Строгим порядком следования;
-
Тип данных параметров должен совпадать.
Пример:
PROCEDURE NAME (a, b: real);
NAME (2.0, 3.5);
Входные
Procedure
NAME
выходные

Параметры VAR параметры
Program P;
VAR a, b: integer;
Procedure P1 (x: integer; VAR y: integer);
Begin
X:= x+1;
Y:= y+1;
End;
Begin
A:= 0;
B:= 0;
P1 (a, b);
Writeln (‘a=’,a,’ b=’,b);
End.
A=0 B=1
Для входных параметров (параметры-значения) в процедуру передается значение фактического параметра и в процедуре для него выделяется локальная область памяти.
Для выходных параметров (параметры-переменные) в процедуре никакой памяти не выделяется, а передается в процедуру адрес фактического параметра.
P1 (0, 0) – второй 0 – это ошибка!
В качестве фактического параметра можно использовать выражение, если ему соответствует входной параметр.
Процедуры-функции
Описание функции:
Function <имя>[(<список формальных параметров>)]: <тип данных>;
<описание локальных параметров>
Begin
<операторы>
End;
Отличия функции от процедуры:
-
Функция имеет тип данных, в то время как процедура общего вида типа не имеет;
-
В теле функции должен встретиться хотя бы один оператор, в котором имени функции присваивается значение;
-
Вызов функции происходит в выражении (оператор «присвоить значение»), а вызов процедуры - просто указанием имени и параметров.
Пример:
VAR y:real;
PROCEDURE SUM (a, b: real; VAR y: real);
Begin
Y:= a+ b;
End;
Begin
SUM(2.0, 3.0, y);
Writeln (y);
End.
VAR y:real;
Function SUM(a, b :real): real;
Begin
SUM:= a+b;
End;
Begin
Y:= SUM(2.0, 3.0); {можно writeln (SUM(2.0, 3.0)); }
Writeln (y);
End.
Задача
2: Найти сумму одномерного массива B(50)
– S=
В
процедуре посчитать y=

Program P;
Const m=50;
Type MAS=array [1..m] of real;
VAR B: MAS; j: integer; S: real;
PROCEDURE SUMMA (A:MAS; n: integer; VAR y: real);
VAR i: integer;
Begin
Y:=0;
FOR i:=1 TO n DO
Y:= y + A[i];
End;
Begin {начало программы}
FOR j:=1 TO m DO
Begin
Write (‘B [‘, j, ‘]=’);
Readln (B[j]);
End;
SUMMA (B, m, S);
Writeln (‘Сумма = ‘, S);
End.
Глобальные и локальные имена
Глобальные имена объявляются во внешнем программном блоке и распространяют свое действие на все внутренние блоки, за исключением тех блоков, в которых имеется собственное описание данного имени.
Локальные имена действуют только в том блоке, в котором они описаны. При выходе из блока они теряют свое значение.
Процедура с параметрами
Пример
Даны 2 одномерных массива A и B. Найти в каждом из них min и max.
Program P;
Const n=20;
Type MAS=array [1..n] of real;
VAR A, B: MAS; i: integer;
mina, minb, maxa, maxb: real;
PROCEDURE Minmax (C: MAS; VAR min, max: real);
VAR i: integer;
Begin
Min:= C[1];
Max:= C[1];
FOR i:= 2 TO n DO
Begin
IF (С[i] > max) THEN max:= С[i];
IF (С[i] < min) THEN min:= С[i];
End;
End;
Begin {Начало программы}
FOR i:=1 TO n DO
Begin
Write (‘A[‘, I, ‘]=’);
Readln (A[i]);
End;
FOR i:=1 TO n DO
Begin
Write (‘B[‘, I, ‘]=’);
Readln (B[i]);