Тема: " Нестандартные типы данных: перечисляемый и ограниченный тип"

Ход урока.

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. Домашнее задание.

Подготовка к зачету по теме: "Операторы Паскаля. Линейные, разветвляющиеся, циклические алгоритмы".

Hosted by uCoz

к оглавлению     на домашнюю