КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Лабораторная работа № 8. {Ввод исходных данных задачи}
Begin Begin Begin Begin If x < y then z:= x else z:= y End;
{Ввод исходных данных задачи} Writeln(‘Введите три числа’); Readln(a,b,c); {Присваивание исходных данных для функции} x:= a; y:= b; Min; {Первый вызов функции} {После вызова функции z=min (a,b) } {Присваивание новых исходных данных для функции} x:= z; y:= c; Min; {Второй вызов функции} {Вывод результата} Writeln (‘Наименьшее из введенных чисел - ’, z); End.
Использование параметров для обмена данными
Для удобства передачи данных в процедуру и получения из нее результатов используются параметры, которые бывают формальными и фактическими. Формальные параметры описываются в заголовке и используются при записи алгоритма в описании процедуры. Фактические параметры указываются при вызове процедуры. При выполнении процедуры они подставляются в алгоритм на место формальных параметров. Формальные и фактические параметры должны соответствовать друг другу по количеству, типу и порядку следования. Формальные параметры, описанные в заголовке процедуры, больше нигде не описываются. Их описание похоже на описание данных в разделе переменных и может также содержать слово var. Существуют параметры-значения и параметры-переменные. Параметры-значения описываются без слова var. Для их хранения на время выполнения подпрограммы выделяются дополнительные ячейки в памяти. При вызове подпрограммы значения фактических параметров копируются в ячейки формальных параметров и алгоритм подпрограммы обращается именно к этим копиям. После окончания работы подпрограммы доступ к этим ячейкам теряется. Следствиями этого для параметров-значений являются следующие факты: · в качестве фактического параметра при вызове подпрограммы в общем случае может быть выражение, в частности, переменная или константа; · если фактическим значением параметра была переменная, то изменение значения формального параметра при выполнении подпрограммы не влечет за собой никакого изменения значения фактического параметра; · параметры-значения могут использоваться только для передачи в подпрограмму исходных данных. Параметры-переменные описываются со словом var. Для их хранения на время выполнения подпрограммы в памяти не выделяются дополнительные ячейки. При работе алгоритма подпрограммы переменные – формальные параметры – используют ячейки памяти фактических параметров и обращаются непосредственно к ним. Следствиями этого для параметров-переменных являются следующие факты: · в качестве фактического параметра при вызове подпрограммы может быть только переменная; · изменение значения формального параметра при выполнении подпрограммы приводит к такому же изменению значения фактического параметра; · параметры-переменные могут использоваться как для передачи в подпрограмму исходных данных, так и для передачи результата из подпрограммы в вызывающую программу. Напишем новую программу, решающую задачу 1 с использованием подпрограммы с параметрами. Исходные данные подпрограммы (x, y) могут быть описаны как параметры-значения, а результат (z) должен быть описан как параметр-переменная.
Program Min2; {Описание переменных} Var a,b,c, {исходные данные задачи} z: real; {результат функции и результат задачи} {Описание функции} Procedure Min (x,y: real; var z:real); If x < y then z:= x else z:= y End;
{Ввод исходных данных задачи} Writeln(‘Введите три числа’); Readln(a,b,c); {Первый вызов функции} Min (a,b,z); {После вызова функции z=min (a,b) } {Второй вызов функции} Min (z,c,z); {Вывод результата} Writeln (‘Наименьшее из введенных чисел - ’, z); End.
Пример выполнения лабораторной работы Задание. Найти разность R между максимальным и минимальным элементами массива Программа расчета:
program lab_8_2; uses crt; const MaxDim = 10; {максимальный размер матрицы} type arr=array[1.. MaxDim,1.. MaxDim] of integer; {описание типа arr} {для массива А } var A: arr; {массив А} R: integer; {разность} Amax: integer; {максимальный элемент} Amin: integer; {минимальный элемент} m: word; {реальный размер квадратной матрицы} fi,fo: text; {файловые переменные} {описание процедуры чтения массива из файла} {f, a1, MaxD, m1 – формальные параметры}
Procedure ReadFromFile (var f:text; var a1:arr; MaxD:word;var m1:word); {Исходные данные: f – файл исходных данных, MaxD – максимальная размерность массива a1. Результат: заполненный массив a1 и его реальный размер – m1.. } Var i, j: word; {счетчики по строкам, столбцам – локальные переменные } begin readln (f,m1); {чтение размера матрицы из} {первой строки файла} if m1> MaxD then {проверка размера матрицы} begin m1:= MaxD; writeln(‘Матрица из файла урезана до размера массива’); end;
for i:=1 to m1 do {чтение из файла матрицы А} begin for j:=1 to m1 do read (fi,a1[i,j]); readln(fi); {перевод указателя файла на новую строку} end; end;
{описание процедуры нахождения минимального и максимального элементов массива}
Procedure MaxMin(a1:arr; m1:word; var min, max: integer); {Исходные данные: массив a1 и его реальный размер – m1. Результат: min, max – минимальный и максимальный его элементы.} Var i, j: word; {счетчики по строкам, столбцам – локальные переменные } begin min:=a1[1,1]; {начальные установки} max:=a1[1,1]; {поиск минимального и максимального элементов:} for i:=1 to m1 do for j:=1 to m1 do begin if a1[i,j] < min then min:=a1[i,j]; if a1[i,j] > max then max:=a1[i,j]; end; end;
{описание процедуры вывода результата в файл и на экран}
Procedure SaveToFile(var f:text; min, max, R: integer); {Исходные данные: f – файл для сохранения результата, min, max, R – выводимые в файл и на экран данные. Результатом подпрограммы является вывод результатов программы в файл и на экран}
begin writeln (fo,' Amax=',max,' Amin=',min,' Разность=',R); writeln ('Amax=',max,' Amin=',min,' Разность=',R); end; {начало основной программы} begin clrscr; assign (fi, 'input8_2.pas'); reset (fi); {вызов процедуры чтения данных из файла} { fi, A, MaxDim, m – фактические параметры} ReadFromFile (fi, A, MaxDim, m); close(fi); {вызов процедуры решения основной задачи} {A, m, Amin, Amax – фактические параметры} MaxMin(A, m, Amin, Amax); R:=Amax-Amin; { вычисление разности} assign (fo, 'out_8_2.pas'); rewrite (fo); {вызов процедуры вывода результатов в файл} { fo, Amin, Amax, R – фактические параметры} SaveToFile(fo, Amin, Amax, R); close (fo); repeat until keypressed; end.
Файл исходных данных Input8_2.pas:
Файл результата Out_8_2.pas:
Варианты заданий взять из лабораторной работы № 5 (для задачи 2).
Дата добавления: 2014-12-26; Просмотров: 467; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |