Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
pz6-11.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
118.78 Кб
Скачать
  1. Рішення задач за допомогою процедур.

Розглянемо приклад програми, в якій використовуються процедури створені користувачем.

Приклад 1. Дано матриці дійсних чисел A, B, C, D розміром ЗхЗ. Обчислити вираз:

Z=(A+B)*C-A*B.

program example_1;

type

matr=array [1..3, 1..3] of real;

var

A, B, C, D, Z, M1, M2, M3 : matr;

I, J : byte;

procedure mkmatr(C : char; var A : matr); {процедура створення матриці} begin

for I := 1 to 3 do

for J := 1 to 3 do

begin

write(C,'[', I, ‘,’, J, ']=');

readln(A[I, J])

end

end;

procedure printmatr(C : char; A : matr);

{процедура виведення результуючої матриці}

begin

for I := 1 to 3 do

for I := 1 to 3 do

writeln(' C, '[', I, ‘,’, J, ']=', A[I, J]:7:3);

end;

procedure sum(A, B matr; var C :matr);

{процедура знаходження суми двох матриць}

begin

for I := 1 to 3 do

for J := 1 to 3 do

C[I, J] := A[ I, J] + B[ I, J];

end;

procedure product(A, B matr; var C :matr);

{процедура знаходження добутку двох матриць}

begin

for I := Ml to N1 do

for J := M2 to N2 do

begin

C[I, J ] :=0;

for K := M2 to N2 do

C[I, J] := C[ I, J] + A[ I, K] * B[ K, J]

end

end;

procedure negativ(A, B matr; var C :matr);

{процедура знаходження різниці двох матриць}

begin

for I := 1 to 3 do

for J :-= 1 to 3 do

C[ I, J] := A[ I, J] - B[ I, J];

end;

begin

mkmatr('A',A);

mkmatr('B', B);

mkmatr('C', C);

mkmatr('D', D);

sum(A, B, Ml);

product(M1, C, M2);

product(A, B, M3);

negativ(M2, M3, Z);

printmatr('Z', Z);

readln

end.

Приклад 2

Створити підпрограму, яка б із тексту S вилучала вказаний символ х і обчислювала кількість вилучень. У програмі організувати виклик цієї підпрограми.

Підпрограма, яка виконує дану задачу, повинна мати три формальних параметри. Позначимо їх наступним чином:

S - заданий текст (змінна рядкового типу string);

x - символ, що підлягає вилученню (змінна символьного типу char);

count - кількість вилучень (числова змінна цілого типу, наприклад byte).

Параметр x повинен бути параметром-значенням (вхідний параметр), а параметри S та count параметрами-змінними (вихідні параметри). Рядок S фактично являється і вхідним, і вихідним, тому що за умовою задачі саме в ньому необхідно здійснити вилучення заданих символів.

Для виконання поставленої задачі, на наш погляд, зручніше використовувати цикл з передумовою, тому що після вилучення символів з рядку він змінює свою довжину і використання циклу з параметром (for) може привести до помилки. Крім того, зверніть увагу на те, що зміна індексу і (номер поточної позиції рядка) виконується тільки у випадку, якщо шуканий символ не знайдено. Це пов'язано з тим, що рядок може містити цей символ у сусідніх позиціях і після вилучення поточного символу на ту саму позицію попадає знов шуканий символ.

Оформлення основної програми, на наш погляд, не повинно викликати сумнівів. Зазначимо лише, що відповідні фактичні параметри у запропонованій програмі будуть називатися А (заданий текст), ch (символ, що підлягає вилученню), N (кількість вилучень).

Програма, що виконує запропонований алгоритм, має наступний вигляд:

Program Example_2;

Uses crt; {Підключення бібліотеки}

Procedure Solution (x:char; var S:string;

var count:byte);

var i:byte; {локальна змінна для організаціїциклу}

Begin

count:=0; i:=1;

while i<=length(S) do

begin

if S[i]=x

then

begin

count:=count+1;

delete(S,i,1);

end

else i:=i+1;

end;

End;

Var A:string; ch:char; N:byte;

Begin

clrscr;

writeln  ('Введіть текст: ');

readln(A);

write ('Введіть шуканий символ: ');

readln (ch);

Solution(ch,A,N);

writeln ('Результуючий текст: ',A);

writeln ('Кількість виконаних вилучень: ',N);

readkey;

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]