Уроки 48. Запись вспомогательных алгоритмов на языке Паскаль
Планируемые образовательные результаты:
предметные
– представления о способах записи
вспомогательных алгоритмов в языке Паскаль;
метапредметные – умение самостоятельно планировать пути
достижения целей; умение соотносить свои действия с
планируемыми результатами, осуществлять контроль своей
деятельности, определять способы действий в рамках
предложенных условий, корректировать свои действия в
соответствии с изменяющейся ситуацией; умение оценивать
правильность выполнения учебной задачи;
личностные – алгоритмическое мышление, необходимое для
профессиональной деятельности в современном обществе;
представление о программировании как сфере возможной
профессиональной деятельности.
Решаемые учебные задачи:
1) напомнить сущность понятия вспомогательного алгоритма, ввести понятие подпрограммы;
2) познакомить с правилами оформления подпрограммы в виде процедуры;
3) познакомить с правилами оформления подпрограммы в виде функции;
4) познакомит с примером рекурсивной функции.
Основные понятия, рассматриваемые на уроках:
![]()
вспомогательный алгоритм;
![]()
подпрограмма;
процедура;
![]()
функция;
рекурсивная функция.
Используемые на уроке средства ИКТ:
персональный компьютер (ПК) учителя, мультимедийный
проектор, экран;
ПК учащихся.
Электронные образовательные ресурсы
презентация «Запись
вспомогательных алгоритмов на языке Паскаль» из электронного приложения к
учебнику.
Особенности изложения содержания темы урока
Рассматриваемая на этом уроке тема имеет повышенный уровень сложности. Еѐ рассмотрение может быть проведено в ознакомительном порядке или вообще отложено для дальнейшего изучения в 10-11 классах.
Ответы и решения к заданиям в тексте параграфа
№ 1 (стр. 226). Необходимо исправить опечатки в программе из примера
1:
program n_20_a;
const m: array [1..5] of integer = (12, 24, 30, 48, 30);
var i, x, y, z: integer;
procedure nod (a, b : integer; var c: integer); begin
while a<>b do
if a>b then a:=a-b else b:=b-a;
c:=a
end;
begin
x:= m[1];
for i := 2 to 5 do
begin
y := m[i];
nod (x, y, z);
x := z
end;
writeln ('НОД=', x);
end.
program n_20_b;
var m: array [1..10] of integer;
i, x, y, z: integer;
procedure nod (a, b : integer; var c: integer); begin
while a<>b do
if a>b then a:=a-b else b:=b-a;
c:=a
end;
begin
randomize;
for i := 1 to 10 do
begin
m[i]:=random(90)+10;
writeln ('m[', i, ']=', m[i]);
end;
x:= m[1];
for i := 2 to 10 do
begin
y := m[i];
nod (x, y, z);
|
x := z |
|
|
end; |
|
|
writeln ('НОД=', x); |
|
|
end. |
|
|
№ 2 (стр. 227). |
|
|
program n_21_a; |
program n_21_b; |
|
var a, b, c, f: integer; |
var b, c, d, f: integer; |
|
function max (x, y : integer) : integer; |
function max (x, y : integer) : integer; |
|
begin |
begin |
|
if x>y then max:=x else max:=y; |
if x>y then max:=x else max:=y; |
|
end; |
end; |
|
begin |
begin |
|
readln (a, b, c); |
readln (b, c, d); |
|
f:= max(max(a, b), c); |
f:= max(max(b, c), d); |
|
writeln ('f=', f); |
writeln ('f=', f); |
|
end. |
end. |
|
program n_21_v; |
program n_21_g; |
|
var a, b, c, d, f: integer; |
var a, b, c, d, f: integer; |
|
function min (x, y : integer) : integer; |
function min (x, y : integer) : integer; |
|
begin |
begin |
|
if x<y then min:=x else min:=y; |
if x<y then min:=x else min:=y; |
|
end; |
end; |
|
begin |
function max (x, y : integer) : integer; |
|
readln (a, b, c, d); |
begin |
|
f:= min(min(a, b), min(c,d)); |
if x>y then max:=x else max:=y; |
|
writeln ('f=', f); |
end; |
|
end. |
begin |
|
|
readln (a, b, c, d); |
|
|
f:= max(max(a, b), max(c,d))- |
|
|
min(min(a, b), min(c,d)); |
|
|
writeln ('f=', f); |
|
|
end. |
№ 3 (стр. 228). Этого задания нет, но его можно предложить ученикам. Написать программу, вычисляющую и выводящую на экран 10 первых
членов последовательности Фибоначчи.
program n_22;
var i: integer;
function f (n : integer) : integer;
begin
if (n=1) or (n=2) then f:=1
else f:=f(n-1)+f(n-2)
end;
begin
for i:=1 to 10 do
writeln ('f[', i, ']=', f(i))
end.
Ответы и решения к заданиям в учебнике (после параграфа)
№ 3. Наименьшее общее кратное (НОК) двух целых чисел m и n есть наименьшее натуральное число, которое делится на m и n без остатка.
НОД и НОК связаны следующей формулой: НОД(m, n) и НОК(m,n) связаны соотношением:
НОД(m, n) НОК(m,n)= m n. program n_3_228;
var
i, x, y, z: integer;
t1, t2: real;
procedure nod (a, b : integer; var c: integer); begin
while a<>b do
if a>b then a:=a-b else b:=b-a; c:=a
end; begin
x:= 36; y:=54; nod (x, y, z); t1 := x*y/z; x:= 18; y:=15; nod (x, y, z); t2 := x*y/z;
x:= round(t1); y:=round(t2); nod (x, y, z);
writeln ('НОК=', x*y/z); end.
№ 4.
![]()
![]()
program n_4_228;
var a, b, c: integer;
procedure swap (var x, y: integer);
var m: integer;
begin
m:=x;
x:=y;
y:=m
end;
begin
writeln ('Введите три числа через пробел'); read (a, b, c);
if a>b then swap (a,b);
if a>c then swap (a, c);
if b>c then swap (b, c);
writeln (a, b, c);
end.
№ 5. Возможный вариант решения задачи. program n_5_229;
var a, b, c, d, f: integer;
procedure max (x, y, z : integer; var m : integer); begin
m := x;
if y>m then m := y; if z>m then m := z;
end; begin
readln (a, b, c, d); max (a, b, c, f); a := f;
max (a, a, d, f); writeln ('max=', f);
end.
№ 6. Возможный вариант решения задачи. program n_6_229;
var
i, j, imax, x: integer;
a: array [1..10] of integer;
procedure max (b: array [1..10] of integer; k: integer; var jmax: integer);
var j: integer;
begin
jmax := k;
for j := k+1 to 10 do
if b[j] > b[jmax] then jmax := j
end;
begin
randomize;
for i :=1 to 10 do
a[i]:= random(100);
writeln ('Исходный массив');
for i :=1 to 10 do
writeln ('a[', i, ']=', a[i]);
for i := 1 to 9 do
begin
max (a, i, imax);
x := a[i];
a[i] := a[imax];
a[imax] := x
end;
writeln ('Отсортированный по убыванию массив'); for i :=1 to 10 do
writeln ('a[', i, ']=', a[i]);
end.
№ 7.
program n_7_229;
var i, n, s: integer;
function f (m : integer) : integer;
begin
if m=1 then f:=1
else f:=f(m-1)*m
end;
begin
writeln ('n=');
readln (n);
s:=0;
for i:=1 to n do
s:=s+f(i);
writeln ('s=', s)
end.
№ 8. Здесь нет явных ограничений на x и n. В связи с этим может возникнуть потребность в типе longint.
program n_8_229; var x, n : integer;
s: longint;
function st (a, b: integer): longint;
var i: integer; rez: longint;
begin
rez := 1;
for i:=1 to b do rez:=rez*a;
st:=rez
end;
begin
write ('x=');
readln (x);
write ('n=');
readln (n);
s:=st(x, 3)+st(x,5)+st(x,n);
writeln ('s=', s)
end.
№ 9.
program n_9_229;
var
xa, ya, xb, yb, xc, yc: real; // Исходные данные
p : real; // Результат
function d (x1, y1, x2, y2: real): real;
var rez: real;
begin
rez := sqrt (sqr(x1-x2)+sqr(y1-y2));
d:=rez
end;
begin
write ('xa=');
readln (xa);
write ('ya=');
readln (ya);
write ('xb=');
readln (xb);
write ('yb=');
readln (yb);
write('xc=');
readln(xc);
write('yc=');
readln(yc);
p:=d(xa, ya, xb, yb)+ d(xa, ya, xc, yc)+ d(xc, yc, xb, yb); writeln ('P = ', p:6:2);
end.
№ 10.
var
xa, ya, xb, yb, xc, yc, xd, yd: integer; // Исходные данные
ab, ac, bc, p: real; // Промежуточные величины
s4: real; // Результат
function s3 (x1, y1, x2, y2, x3, y3: integer): real; var d1, d2, d3, p, rez: real;
begin
d1 := sqrt (sqr(x1-x2)+sqr(y1-y2));
d2 := sqrt (sqr(x3-x2)+sqr(y3-y2));
d3 := sqrt (sqr(x1-x3)+sqr(y1-y3)); p:=(d1+d2+d3)/2; rez:=sqrt(p*(p-d1)*(p-d2)*(p-d3)); s3:=rez
end;
begin
writeln ('xa и ya');
readln (xa, ya);
writeln ('xb и yb');
readln (xb, yb);
writeln ('xc и yc');
readln (xc, yc);
writeln ('xd и yd');
readln(xd, yd);
s4:=s3(xa, ya, xb, yb, xc, yc) + s3(xa, ya, xd, yd, xc, yc); writeln ('S = ', s4:6:
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.