Урок 4.
Тема урока: Практическая работа «Создание и реализация программ, которые
содержат обращения к подпрограммам».
Цели урока:
Ход урока.
I.
Орг. Момент.
Сообщение целей урока.
II.
Проверка домашнего задания.
На доске записана программа из домашнего
задания с ошибками. Задание: Найти ошибки. (3 человека набирают программы на
своих компьютерах).
(Без ошибок) Program max_tabl; const n=5; var a:array[1..n] of real; i:integer;max2:real; procedure max(x1,x2 : real;var max:real); begin if x1>x2 then max:=x1 else max:=x2; end; begin writeln ('Massiv'); for i:=1 to n do readln(a[i]); begin max(a[i],a[i+1], max2); write (max2:8:2); end;end. |
Задача: Составить программу с использованием процедуры, определяющей
наибольший элемент одномерного массива.
(с ошибками)
Program max_tabl;
const n=5;
a:array[1..n] of real; i:integer;
max:real;
procedure max(x1,x2 : real;var max:real);
begin
if
x1>x2 then
max:=x1
else
max:=x2;
end;
begin
writeln ('Massiv');
for
i:=1 to n do
readln(a[i]);
begin
max(a[i],a[i], max2);
write (max2:8:2);
end;end.
III.
Актуализация
опорных знаний
· Какие типы подпрограмм в ПАСКАЛЬ?
· Отличие процедур от функций
· Как описываются процедуры и функции?
· Отличие объявления процедуры от объявления функции
· Как в основной программе вызываются функция и процедура?
IV.
Практическая
работа.
1. Задача 1. Составить
программу с использованием процедуры, определяющей наименьший элемент прямоугольного массива случайных
чисел
Program max_tabl;
var a:array[1..3,1..2] of real; i,j:integer; min2:real;
procedure min(x1,x2 : real;var min:real);
begin
if x1<x2 then
min:=x1 else min:=x2;
end;
begin
writeln ('Massiv');
randomize;
for i:=1 to 3 do
begin
for j:=1 to 2 do
begin
a[i,j]:=random(100);
writeln (a[i,j]:3:2);
end; end;
for i:=1 to 3 do
for j:=1 to 2 do
begin
min(a[i,j],a[i+1,j+1],min2);
end;
writeln ('min=',min2:8:2);
end.
(Примечание: Следующие задачи 2
и 3 предназначены для сильных учеников. Предлагаются на карточках).
Задача 2.Составить программу сортировки по убыванию одномерного массива, используя процедуру нахождения большего элемента из двух.
Используем алгоритм упорядочения элементов массива методом прямого выбора, когда в массиве находится максимальный элемент и вставляется на место первого элемента, потом рассматривается часть таблицы, начиная со второго элемента, и в ней снова находится максимальный элемент и вставляется на место первого элемента в этой части таблицы и т. д. По этому методу упорядочения массива последовательно выполняются аналогичные действия для разных частей массива: для каждой разыскивается максимальный элемент, который меняется местами с первым элементом рассматриваемой части массива. Поэтому целесообразно описать и использовать две дополнительные подпрограммы: нахождения номера максимального элемента и обмена местами двух элементов.
Program sort_tabl; Uses Crt; const n=10; var a:array[1..n] of real; i,k,m:integer; p:real; {нахождение номера макс. элемента} Procedure makcel(n1:integer;var k1:integer); var max:real; j:integer; begin
max:=a[n1];
k1:=n1;
for j:=n1+1 to n do
if a[j]>max then
begin max:=a[j];
k1:=j; end; end; { обмен значениями двух переменных} procedure sw(var x,y:real); var z: real; begin
z:=x; x:=y; y:=z; end; |
procedure Tabl; begin
writeln ('Massiv');
for i:=1 to n do
begin a[i]:=random(100);
write (a[i]:8:2);
end;
writeln; end; begin clrscr; randomize; tabl;
for i:=1 to n do
begin
makcel(i,k);
sw(a[k],a[i]);
end; Writeln('Otsortirovany massiv:'); for i:=1 to n do write(a[i]:8:2); readln; end. end. |
3. Составить программу, которая в двумерном массиве определяет максимальный элемент в каждом столбце и записывает его в одномерный массив. Для определения максимального элемента в столбце использовать функцию, а для ввода и вывода массивов – процедуру.
Файл MAX.PAS
Program PR1; uses Crt; Const n=10; Type mas1=array [1..n] of integer;
mas2=array [1..n,1..n] of integer; var a,c:mas1; b:mas2; max,i,j:integer; Procedure INPUT; begin
Writeln('ishodny masiv:'); for
i:=1 to n do
begin
for j:=1 to n do
begin
b[i,j]:=random(100);
write(b[i,j]:6);
end;
writeln; end; end; Procedure OUTPUT; begin
Writeln('gotovy masiv:');
for i:=1 to n do write(a[i]:6);
writeln; end; |
Function M(x:mas1):integer; var mm:integer; begin mm:=x[1]; for i:=2 to n do if
mm<x[i] then mm:=x[i]; m:=mm; end; begin randomize; clrscr; Input; for j:=1 to n do begin
for i:=1 to n do
begin c[i]:=b[i,j];
end;
a[j]:=m(c); end; output; readln; end. |
2. Задачи
для самостоятельного выполнения.
A. В программе 1 процедуру нахождения наименьшего элемента заменить на функцию.
B.
Составить программу, определяющую количество
положительных элементов в двумерном массиве А. Создание и вывод на экран
массива оформить в виде процедуры, а определение количества элементов – в виде
функции.
V.
Домашнее задание.
подготовиться к ТА
Задачи:
· Написать процедуру SUM(X,Y,Z), которая каждому элементу массива Z присваивает значение суммы соответствующих элементов массивов X Y. Использовать дополнительные процедуры создания массива случайных чисел, вывода массива на экран ПК.
· Дано два одномерных массива А и В. Заменить местами максимальные элементы массивов А и В. Использовать процедуру нахождения максимального элемента массива. Задание на 12 баллов: преобразовать эту программу для двумерного массива.
VI.
Выставление
оценок за урок. Итоги урока