Лекция Pascal_9.pptx
- Количество слайдов: 36
9. Подпрограммы
9. Подпрограммы Подпрограмма – это именованная, логически законченная группа операторов языка, которую можно вызвать для выполнения любое количество раз из различных мест программы. Задача Подзадача 1 1. 2 1. 3 Подзадача 2 2. 1 2. 2 Подзадача 3 2. 3 3. 1 3. 2 3. 3
9. Подпрограммы делятся на два класса: – стандартные ( dec(n), inc(k) ) – определенные пользователем. ПОДПРОГРАММЫ Процедуры Функции
9. 1. Процедуры. Формальные параметры Описание процедуры состоит из заголовка и тела процедуры. заголовок формальные параметры procedure < имя >( < список параметров и их тип>); < раздел описаний >; begin < раздел операторов >; end; тело процедуры Формальные параметры отделяются точкой с запятой (список однотипных параметров перечисляют через запятую). procedure A (x, z: real; y, k, l: integer);
9. 2. Процедуры. Фактические параметры Оператор вызова процедуры имеет вид: фактические параметры < имя процедуры >(< список параметров >); Механизм применения формальных-фактических параметров позволяет выполнять процедуру с различными данными. Количество, типы и порядок следования формальных и фактических параметров должны совпадать.
9. 3. Пример программы с процедурой Пример 35. Написать программу вычисления площади круга с помощью процедуры. program pr 35; var формальные параметры r, s: real; procedure pl(x: real; var y: real); procedure pl(r: real; var s: real); begin y: = pi*sqr(x); s: = p*sqr(r); end; begin процедура вызов write (’Введите r = ’); процедуры readln (r); фактические параметры pl(r, s); writeln(’r =’, r: 0: 2, ’ s =’, s: 0: 2); end.
9. 3. Пример программы с процедурой Пример 35. Написать программу вычисления площади круга с помощью процедуры. program pr 35; параметры var переменные r, s: real; procedure pl(x: real; var y: real); procedure pl(r: real; var s: real); begin y: = pi*sqr(x); s: = p*sqr(r); параметры- значения end; Два основных класса формальных параметров: - параметры-значения; - параметры-переменные. В качестве входных данных в подпрограмме следует использовать параметры-значения, в качестве выходных – параметры-переменные. Данные, которые являются и входными, и выходными, следует описывать как параметрыпеременные.
9. 3. Пример программы с процедурой Пример 36. Найти максимальные элементы массивов A, B, C и их номера (с помощью процедур). program pr 36; type vector=array[1. . 200]of real; var A, B, C: vector; f: text; procedure vvod(var x: vector; l: integer); var i: byte; begin for i: =1 to l do begin read(f, x[i]); write(x[i]: 0: 2, ' ' ) end;
9. 3. Пример программы с процедурой Пример 36. (продолжение текста программы) procedure max(x: vector; l: integer); var i: byte; begin n: =1; for i: =2 to l do if x[i] > x[n] then n: =i; write('max=', x[n]: 0: 2, ' номер max: ', n) ; writeln; end;
9. 3. Пример программы с процедурой Пример 36. (продолжение текста программы – раздел операторов) begin assign(f, 'C: . . . LR_36. txt'); reset(f); vvod(A, 5); Окно вывода max(A, 5); 1. 00 2. 00 3. 00 4. 00 5. 00 vvod(B, 10); max=5. 00 номер max: 5 max(B, 10); 2. 00 4. 00 6. 00 8. 00 0. 00 10. 00 -2. 00 -4. 00 -6. 00 -8. 00 vvod(C, 15); max=10. 00 номер max: 6 max(C, 15); 0. 00 1. 00 close(f); 1. 00 2. 00 1. 00 end. 1. 00 -1. 00 max=2. 00 номер max: 9
9. 4. Функции Описание функции состоит из заголовка и тела процедуры. заголовок формальные параметры function <имя>(<параметры и их тип>): <тип результата>; < раздел описаний >; begin < раздел операторов >; end; тело функции Пример: function Max (a, b: integer): integer; function integer begin if a > b then Max : = a Max else Max : = b; Max это результат end; функции
9. 4. Функции Оператор вызова функции имеет вид: program qq; var a, b, max: integer; c function Max (a, b: integer): integer; begin . . . фактические параметры end; begin writeln('Введите два числа'); read(a, b); вызов функции c max : = Max ( a, b ); writeln('Наибольшее число ', max ); c end. В теле функции должен быть один оператор, присваивающий значение имени функции.
9. 5. Пример программы с функцией Пример 35 а. Написать программу вычисления площади круга с помощью функции. program pr 35 a; var формальные параметры r, s: real; function pl(x: real): real; procedure pl(r: real; var s: real); begin pl: = pi*sqr(x); s: = p*sqr(r); end; begin процедура вызов write (’Введите r = ’); функции readln (r); фактические параметры s: = pl(r); writeln(’r =’, r: 0: 2, ’ s =’, s: 0: 2); end.
9. 5. Пример программы с функцией Пример. Написать функцию вычисления значения факториала числа n (n!). Program pr_f; var a, fa: integer; function FACTOR(n: integer): integer; var i, k: integer; begin k: =1; for i: =1 to n do k: =k*i; FACTOR: =k; end; begin write('Введите число: '); readln(a); fa: =FACTOR(a); write(a, '! = ', fa); end. Окно вывода Введите число: 5 5! = 120 Введите число: 7 7! = 5040
9. 6. Использование процедур и функций Пример 36 а. Заменить в каждом массиве отрицательные элементы суммой элементов с нечетными индексами. odd(i) – возвращает истинно, если аргумент нечетное число и ложь, если четное. not odd(i) - возвращает истинно, если аргумент четное число и ложь, если нечетное. function sum(var x: vector; l: integer): real; var i: byte; s: real; begin s: =0; for i: =1 to l do if odd(i) then s: = s+ x[i]; sum: = s; end;
9. 6. Использование процедур и функций Пример 36 а. (продолжение текста программы) procedure zam(var x: vector; l: integer; sx: real); var i: byte; begin for i: =1 to l do if x[i]<0 then x[i]: = sx end; procedure vivod(var x: vector; l: integer); var i: byte; begin for i: =1 to l do write(x[i]: 0: 2, ' '); writeln; end;
9. 6. Использование процедур и функций Пример 36 a. (продолжение текста программы – раздел операторов) begin. . . vvod(A, 5); SA: =sum(A, 5); zam(A, 5, SA); vivod(A, 5); vvod(B, 10); SB: =sum(B, 10); zam(B, 10, SB); vivod(A, 5); . . . close(f); end. Окно вывода 1. 00 2. 00 -3. 00 4. 00 5. 00 max=5. 00 номер max: 5 1. 00 2. 00 3. 00 4. 00 5. 00 2. 00 4. 00 6. 00 8. 00 0. 00 10. 00 -2. 00 -4. 00 -6. 00 -8. 00 max=10. 00 номер max: 6 2. 00 4. 00 6. 00 8. 00 0. 00 10. 00
9. 6. Использование процедур и функций Пример 37. Дан массив английских слов и массив их перевода на русский язык. Вывести перевод 3 -х заданных английских слов. program pr 37; const n=15; type st=string[10]; mas=array[1. . n]of st; Var r, a: mas; i: integer; c: st; f: text; procedure p(var eng: mas; var rus: mas; sl: st; k: integer); var i: integer; begin for i: =1 to k do if eng[i]=sl then write(sl, ' - ', rus[i]); writeln; end;
9. 6. Использование процедур и функций Пример 37. (продолжение текста программы) begin assign(f, 'V 9_N 9_1 a. TXT'); reset(f); for i: =1 to n do begin readln (f, a[i]); {writeln(a[i]); } readln (f, r[i]); {writeln(r[i])} end; for i: =1 to 3 do begin writeln('Введите слово'); readln(c); p(a, r, c, n); end. Окно вывода Введите слово Home - Дом Введите слово Ship - Корабль Введите слово Pig - Свинья
9. 6. Использование процедур и функций Пример 38. Заданы наименования предприятий, объемы поставок и объемы потребления. Выведите сведения о предприятиях с минимальными и максимальными объемами поставок и потребления. Program pr_38; Uses CRT; Const k=6; Type T_Arr=Array[1. . k] of string[17]; N_Arr=Array[1. . k] of integer; Var n : T_Arr; ps, pt : N_Arr; i, max, min : integer; f : text;
9. 6. Использование процедур и функций Пример 38. (продолжение текста программы) Procedure In_Arr; BEGIN Assign(f, 'С: . . . LR_38. txt'); Reset(f); While not EOF(f) do Begin inc (i); readln(f, n[i], ps[i], pt[i]); End; END;
9. 6. Использование процедур и функций Пример 38. (продолжение текста программы) Procedure Poisk(var xx: N_Arr; var p_min: integer; var p_max: integer); Var y: integer; BEGIN p_min: =1; p_max: =1; For y: =2 to k do If xx[y]
9. 6. Использование процедур и функций Пример 38. (продолжение текста программы) BEGIN {Clr. Scr; } In_Arr; Writeln('┌─────────┬─────────────────┐'); Writeln('│Наим-ние предпр-я│Объем поставок│Объем потребления│'); Writeln('├─────────┼─────────────────┤'); For i: =1 to k do writeln('│', n[i], '│', ps[i]: 14, '│', pt[i]: 17, '│'); Writeln('└─────────┴─────────────────┘'); Poisk(ps, min, max) ; writeln('Предпр-е с максим. объемом поставок: ', n[max], ps[max]); writeln('Предпр-е с минимал. объемом поставок: ', n[min], ps[min]) ; Poisk(pt, min, max) ; writeln('Предпр-е с максим. объемом потребления: ', n[max], pt[max]); writeln('Предпр-е с минимал. объемом потребления: ', n[min], pt[min]); Close(f); Readln; END.
9. 6. Использование процедур и функций Пример 38. (результат выполнения программы) Окно вывода ┌─────────┬─────────────────┐ │Наим-ние предпр-я│Объем поставок│Объем потребления│ ├─────────┼────────────────┤ │Предприятие 1 │ 3│ 1│ │Предприятие 2 │ 5│ 2│ │Предприятие 3 │ 10│ 5│ │Предприятие 4 │ 9│ 6│ │Предприятие 5 │ 8│ 7│ │Предприятие 6 │ 7│ 8│ └─────────┴─────────────────┘ Предпр-е с максим. объемом поставок: Предприятие 3 10 Предпр-е с минимал. объемом поставок: Предприятие 1 3 Предпр-е с максим. объемом потребления: Предприятие 6 8 Предпр-е с минимал. объемом потребления: Предприятие 1 1
9. 6. Использование процедур и функций Program pr_39; uses crt; const a = pi; b = pi/6; var X, sinx, e : real; j : integer;
9. 6. Использование процедур и функций Пример 39. (продолжение текста программы) function FACTOR(n: integer): integer; var i, k: integer; begin k: =1; for i: =1 to n do k: =k*i; FACTOR: =k; end;
9. 6. Использование процедур и функций Пример 39. (продолжение текста программ) procedure Sinus(var sx: real; xx, ee: real); var i: integer; ch, zn: real; begin i: =3; ch: =x; sinx: =x; repeat ch: =ch*sqr(x)*(-1); zn: =FACTOR(i); sx: =sx +ch/zn; inc(i, 2); until abs(ch/zn)
9. 6. Использование процедур и функций Пример 39. (продолжение текста программ) BEGIN clrscr; Writeln('Введите x: '); Readln(x); Writeln('Введите ε: '); Readln(e); while x
9. 6. Использование процедур и функций Пример 39. (результат выполнения программы) Окно вывода Введите x: 0 Введите ε: 0. 01 sin(0) = 0. 00 sin(0. 523598775598299) = 0. 50 sin(1. 0471975511966) = 0. 87 sin(1. 5707963267949) = 1. 00 sin(2. 0943951023932) = 0. 87 sin(2. 61799387799149) = 0. 50 sin(3. 14159265358979) = 0. 00
10. Модуль пользователя
10. 1. Структура модуля Модуль – отдельно хранимая, имеющая собственную структуру и независимо компилируемая программа. Модуль не является исполняемой программой. Структура модуля unit < имя модуля >; interface {описание видимых объектов}; implementation {описание скрытых объектов}; begin <операторы инициализации>; End. заголовок интерфейсная часть исполняемая часть инициализирующая часть
10. 2. Использование модуля Пример 37 а. Дан массив английских слов и массив их перевода на русский язык. Вывести перевод 3 -х заданных английских слов. unit modul 9; interface const n=15; type st=string[10]; mas=array[1. . n]of st; Procedure Vvod(var A 1, R 1: mas); Function Perevod(eng, rus: mas; sl: st): st; implementation Procedure Vvod; var str: string[40]; i: byte; F: text;
10. 2. Использование модуля Пример 37 а. (продолжение) begin writeln('Введите имя файла: '); readln(str); assign(F, str); reset(F); for i: =1 to 15 do begin readln(F, A 1[i]); readln(F, R 1[i]); end; close(F); end;
10. 2. Использование модуля Пример 37 а. (продолжение) Function Perevod: st; var i: byte; s: st; begin for i: =1 to 15 do if sl=eng[i] then s: =rus[i]; Perevod: =s; end; begin end.
10. 2. Использование модуля Пример 37 а. (продолжение) Program pr 37 a; uses {crt, }modul 9; var A, R : mas; S 1, S 2, S 3 : st; BEGIN {clrscr; } Vvod(A, R); write('Введите 1 -е слово: '); readln(S 1); write('Введите 2 -е слово: '); readln(S 2); write('Введите 3 -е слово: '); readln(S 3);
10. 2. Использование модуля Пример 37 а. (продолжение) writeln('Перевод слова ', S 1, ' - ', Perevod(A, R, S 1)); writeln('Перевод слова ', S 2, ' - ', Perevod(A, R, S 2)); writeln('Перевод слова ', S 3, ' - ', Perevod(A, R, S 3)); {while not keypressed do; } END. Окно вывода Введите имя файла: LR_37. txt Введите 1 -е слово: Pig Введите 2 -е слово: Red Введите 3 -е слово: Sky Перевод слова Pig - Свинья Перевод слова Red - Красный Перевод слова Sky - Небо