Моя пятая лабораторная работа по программированию на Pascal.
Цель: освоение методов программирования с использованием процедур и функций.
Задачи работы:
— проверка знаний по организации и использованию процедур и функций, понимание способов передачи параметров;
— знакомство с сообщениями транслятора при обнаружении ошибок в описаниях и/или обращениях к процедурам и функциям;
— знакомство с некоторыми видами ошибок при описании и вызове процедур, тренировка умения поиска и устранения ошибок (отладка);
— получение практических навыков по программированию с использованием процедур и функций.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
program Test6A; var A,B,T,P,I: integer; M: array [1..2] of integer; procedure P1; begin T:=A; A:=B; B:=T end; procedure P2; var T: integer; begin T:=A; A:=B; B:=T end; procedure P3 (X,Y: integer); begin T:=X; X:=Y; Y:=T end; procedure P4 (var X,Y: integer); var T: integer; begin T:=X; X:=Y; Y:=T end; procedure P5 (var X,Y: integer); var T: integer; function Kv (var A: integer): integer; begin Kv:=A*A end; begin T:=Kv(X); X:=Kv(Y); Y:=T; end; begin Write('Введите целое в интеpвале 1..9: '); Readln (P); I:=2; M[1]:=0; M[2]:=1; A:=1; B:=2; T:=3; case P of 1: P1; 2: P2; 3: P3 (A,B); 4: P3 (A+1,B+2); 5: P4 (A,B); 6: begin P4 (I,M[I]); A:=I; B:=M[1]; T:=M[2] end; 7: P5 (A,B); 8: P5 (B,B); end; Writeln( 'A=',A,' B=',B,' T=',T) end. |
Таблица 10
P | Результаты | Механизм
передачи параметров (по адpесу или ссылке) |
|||||
Анализа программы TEST6А | Выполнения пpогpаммы TEST6А | ||||||
A | B | T | A | B | T | ||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
1
2 3 4 5 6 7 8 9 |
2
2 1 1 2 1 4 1 1 |
1
1 2 2 1 0 1 4 2 |
1
3 1 2 3 2 3 3 3 |
2
2 1 1 2 1 4 1 1 |
1
1 2 2 1 0 1 4 2 |
1
3 1 2 3 2 3 3 3 |
по адресу
по адресу по адресу по адресу по ссылке по ссылке по ссылке по ссылке по адресу |
1 2 3 4 5 6 7 8 9 |
program Test6b; var A: integer; B: real; procedure S (X,Y: integer); begin T:=X; X:=Y; Y:=T end; A:=1; B:=2; T:=3; S(B); writeln (A:7,B:7,T:7) end. |
По сообщениям компилятора об ошибках была заполнена таблица:
N строки программы | N ошибки | Текст сообщения об ошибке | Классификация ошибки и причина возникновения | |
На английском языке | На русском языке | |||
7 | 3 | Unknown identifier | Неизвестный идентификатор | Переменная T не была объявлена |
9 | 36 | BEGIN expected | BEGIN пропущено | BEGIN пропущено |
10 | 87 | “,” expexted. | «,» пропущена | Пропущена запятая и переменная |
При устранении логических ошибок была составлена таблица:
Результаты выполнения после устранения ошибок | ||||||||
синтаксических | семантических | побочного эффекта | ||||||
A | B | T | A | B | T | A | B | T |
1 | 2 | 1 | 2 | 1 | 1 | 2 | 1 | 3 |
1 2 3 4 5 6 7 8 9 10 11 |
program Test6b; var A,b,t: integer; procedure S(VAR A,B:integer); var t:integer; begin T:=A; A:=B; B:=T end; BEGIN A:=1; B:=2; T:=3; S(A,B); writeln (A:7,B:7,T:7) end. |
Индивидуальное задание.
Составить программу для вычисления F по следующей формуле (символ «^» означает возведение в степень):
F = (A^2 + B^2)^2 + (C^2 + D^2)^2 (1)
В программе должны быть описаны и использованы две подпрограммы: квадрат и сумма.
При вызове процедур (функций) в основной программе следует обратить особое внимание на способ подстановки параметров (значением или переменной), спользование локальных и глобальных переменных и возможность нежелательного побочного эффекта.
Вариант 1, N1=2; N2=4
Текст программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Program lab6; {F = (A^2 + B^2)^2 + (C^2 + D^2)^2} var a,b,c,d,f,r: real; Procedure square; begin R:=r*r; end; Procedure Sum(var z:real); begin z:=z+r; end; begin Writeln('F = (A^2 + B^2)^2 + (C^2 + D^2)^2'); Write('Input A, B, C, D...');readln(A,B,C,D); r:=a; square; a:=r; r:=b; square; b:=r;r:=c; square; c:=r; r:=d; square; d:=r; r:=b; sum(a);r:=d; sum(c); r:=a;square;a:=r; r:=c; square;c:=r; r:=c; sum (a); f:=a; Writeln('F= ',f:10:10);Writeln('Press return key to exit...'); readln; end. |
Выходные данные
|
Выходные данные | ||||||
A | B | C | D | Анализ (F=) | Результат (F=) | ||
1 | 2 | 3 | 4 | 650 | 650 | ||
2 | 3 | 1 | 4 | 458 | 458 | ||
3 | 3 | 4 | 1 | 613 | 613 | ||
4 | 5 | 7 | 1 | 4181 | 4181 | ||
0 | 0 | 0 | 0 | 0 | 0 | ||
Результат анализа работы программы программа работает правильно.
Вывод: мы изучили возможность использования процедур и функций в Turbo Pascal-е.