Ход урока.
I. Анализ домашнего задания.
№ 1. Длины сторон треугольника равны a, b, c. Определите, является ли этот треугольник остроугольным, прямоугольным или тупоугольным.
Решение.
program q1;
{Используем следствие из теоремы косинусов: если в треугольнике со сторонами
a,b,c t=a*a+c*c - a*a и t>0, то
угол a - острый, если t=0, то угол а -
прямой, если t<0, то угол а -тупой}
var a,b,c,t:real;
y:string;
begin
read (a,b,c);
t:=sqr(b)+sqr(c)-sqr(a);
if (b>=c)
and (b>=a) then t:=sqr(a)+sqr(c)-sqr(b);
if (c>=a) and (c>=b) then
t:=sqr(a)+sqr(b)-sqr(c);
if t>0 then y:='треугольник
остроугольный'
else if t=0 then y:='треугольник прямоугольный'
else
y:='треугольник тупоугольный';
writeln (y);
end.
№ 2. Найти остаток от
деления целой части значения функции z=ln(x2 + a*b) на 7 и в
зависимости от его величины напечатать
сообщение об одном из дней недели,
пронумеровав их от 0 до 6.
Решение.
program qwer;
{остаток от деления}
uses crt;
var x,a,b:real;
z: integer;
n:
0..6;
begin
clrscr;
read (x,a,b);
z:=trunc(ln(x*x+a*b)) mod
7;
n:=trunc(z);
case n of
0: writeln('понедельник');
1:
writeln('вторник');
2: writeln('среда');
3: writeln('четверг');
4:
writeln('пятница');
5: writeln('суббота');
6: writeln('воскресенье') else
writeln ('ошибка');end;
end.
№ 3. Найти сумму: y=sin x + sin sin x + sin sin sin x + .... + sin sin .... sin x
Решение.
program q3;
{zadan3}
var x,y,p:real;
i,n: integer;
begin
read (x,n);
y:=0;
p:=x;
for i:=1 to n
do
begin
p:=sin(p);
y:=y+p;
end;
writeln(y:5:2);
end.
№ 4. Используя циклы с
условием решить задачу: Найти произведение первых N сомножителей
Решение.
program q4;
{zadan4}
label 1;
var p:real;
i,n,q: integer;
begin
read
(n);
q:=1; p:=1; i:=2;
if i<2 then goto 1;
while i<=n
do
begin
p:=p*(q+2)/i;
q:=q+2;
i:=i+1;
end;
1:writeln(p:5:2);
end.
II. Новая тема.
Кроме стандартных типов разрешено введение новых типов. Эти новые типы должны быть описаны в разделе типов. TYPE располагается между CONST и VAR.
Введение новых типов расширяет возможности языка Паскаль, повышает читабельность программ.
Перечисляемый тип данных называется так потому, что задается в виде перечисления в строго определенном порядке и в строго ограниченном количестве всех значений, которые могут принимать данные рассматриваемого типа.
Описание перечисляемого типа:
TYPE имя типа=(список
констант);
VAR имя переменной: имя типа;
Константы любые,
разделяются запятой.
TYPE GOD=(ZIMA, WESNA, LETO, OSEN);
VAR
A:GOD;
Допускается указывать константы
непосредственно в разделе переменных без TYPE.
VAR A: (ZIMA, WESNA,
LETO, OSEN);
Порядковый номер начинается с 0.
Задача 1. Имеется перечень зверей. Определить в этом списке порядковый номер тигра и порядковый номер зверя после косули.
PROGRAM Q1;
TYPE
ZWER=(LISA, WOLK, ZAJAZ, TIGR, LEW, MEDWED,
KOSULJA, OLENJ, BARS);
VAR
P1,P2: ZWER;
N1, N2: INTEGER;
BEGIN
P1:=TIGR;
P2:=SUCC(KOSULJA);
N1:=ORD(P1)+1; {т.к. счет перечисляемых
данных начинается от 0, то необходимо добавить
1}
N2:=ORD(P2)+1;
WRITELN('Порядковый номер тигра=',
n1:2);
WRITELN('Порядковый номер зверя после косули=',
n2:2);
END.
Ограниченный тип данных:
Если какая-то переменная
принимает не все значения своего типа, а только значения, содержащиеся в некотором
ограниченном диапазоне, то ее можно рассматривать как переменную ограниченного
типа.
Отрезок типа определяется в разделе TYPE с помощью ведения ограничения на уже определенный или стандартный скалярный тип (кроме вещественного). Ограничение типа задается указанием диапазона: минимального и максимального значений (нижней и верхней границ). Тип, из которого выбирается отрезок, называется базовым.
TYPE имя типа=константа .. константа;
Обе граничные константы должны быть одинакового типа.
В качестве базового типа
можно использовать любой простой тип, кроме REAL.
I=0..63; L='A'..'Z';
osen=sent .. nov;
Начальное значение при определении ограниченного типа не должно быть больше конечного значения.
Переменные должны быть описаны в VAR с помощью имен этих типов.
Переменные ограниченного типа можно описывать, не обращаясь к разделу описания типа.
Использование ограниченных типов в программе делает их наглядными, позволяет экономить память машины и проводить во время выполнения программы контроль присваиваний.
program z1;
var m1:
1..12;
d:1..31;
y: 1901 .. 2000;
g, n: integer;
t: boolean;
begin
write ('введите d,m1,y');
read (d, m1, y);
g:=y mod 100;
if (d=m1)
and (m1=g) and (d=g) then t:=true else
t:=false;
writeln(t);
end.
III. Практическое задание.
"Работа с нестандартными типами данных".
Постановка задачи. По
заданным номеру квартала, дате, включающей число, название месяца, год и дню
недели, которым является данное число требуется определить последующую дату
вводимого в программе дня недели, ближайшего к указанной дате.
Указания.
Использовать в программе ограниченный и перечислимый тип данных, оператор
варианта.
Протокол работы программы
для исходной даты 30 сентября 1994 года пятница:
= = > 3 30 9 1994
5
1 октября 1994 года - 4 квартал - суббота
IV. Домашнее задание.
Подготовка к зачету по
теме: "Операторы Паскаля. Линейные, разветвляющиеся, циклические алгоритмы".