ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 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 …

Обращение к процедуре

Обращение к процедуре

Процедура

Описание процедуры

Бывают:

  1. Внутренние процедуры;

  2. Внешние процедуры.

Внутренняя процедура

Описание процедуры помещается в раздел описаний программы.

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.

Процедуры различаются по типу:

  1. Стандартные процедуры (функции, описание которых подключено непосредственно компилятором);

  2. Procedure;

  3. 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

Связь формальных и фактических параметров

При описании процедуры мы задаем формальные параметры, а при обращении к процедуре – фактические параметры.

Между формальными и фактическими параметрами должно существовать взаимно-однозначное соответствие (в обе стороны).

Соответствие устанавливается:

  1. Количеством параметров;

  2. Строгим порядком следования;

  3. Тип данных параметров должен совпадать.

Пример:

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;

Отличия функции от процедуры:

  1. Функция имеет тип данных, в то время как процедура общего вида типа не имеет;

  2. В теле функции должен встретиться хотя бы один оператор, в котором имени функции присваивается значение;

  3. Вызов функции происходит в выражении (оператор «присвоить значение»), а вызов процедуры - просто указанием имени и параметров.

Пример:

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]);