Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum_po_Turbo_Paskaliu.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.39 Mб
Скачать

Решение задач

Пример:

Type

week = (sunday, monday, tuesday, wednesday, thursday, friday, saturday);

work_week = monday..friday;

day=1..31;

Обратите внимание на то, что при объявлении пользовательских типов между их именем и конструкцией, определяющей тип, расположен знак равенства.

Задание типа означает, что теперь в разделе описания переменных можно пользоваться вновь введённым идентификатором.

Итак, мы научились определять константы, задавать свои типы. Эти разделы описаний в программе должны находится перед основным блоком программы. Порядок их следования значения не имеет.

Решение задач

  1. Указать ошибки в следующем разделе типов:

Const n = 180; pi = 3.1415;

Type sign = ('a','b','c','d');

gl = (a, e, i, o, u);

sgl = (b..d,f,g);

log = Boolean;

sign = '0'..'9';

  1. Найти ошибки в следующей программе:

Program mistake_1; Type month = (january, february, marth, april, may, june, jule, august, september, october, november, december); autumn = september..november; Var m : autumn; d : '0'..'9'; k : 0..9; Begin Readln(m,d,k); If m>september Then d := k Else k := Ord(m) - 8; Writeln(k, d + k); End

Преобразование типов. Совместимость типов

Повторение

Найти ошибки в следующей программе и объяснить, какие правила языка Паскаль здесь нарушены:

Program mistake_2; Type month = (january, february, marth, april, may, june, jule, august, september, october, november, december); winter = december..february; spring = marth..may; Var m : month; k : 1..12; Begin Write('Введите месяц'); Readln(m); If m>spring Then m := june; For k := Ord(january) To Ord(m) Do m := succ(m); Writeln(m); End.

На предыдущих занятиях были рассмотрены основные типы Паскаля и действия, которые можно совершать с этими типами, одним из самых распространенных действий является присваивание.

Рассмотрим такую ситуацию, пусть заданы типы Т1 и Т2, а также описаны переменные р1 и р2 следующим образом:

Var p1 : T1; p2 : T2;

Возникает вопрос, когда можно записать р1 := р2? Чтобы ответить на этот вопрос, рассмотрим совместимость простых типов по присваиванию. Операция р1 := р2 является допустимой, если истинно одно из следующих утверждений:

Т1 и Т2 - тождественные типы.

Типы являются тождественными, если они описаны одним и тем же идентификатором или происходят от одного и того же идентификатора.

Например,

Type T1 = Real; T2 = Real; T3 = T1; T4 = (red, gren, blue, black, white); T5 = (red, gren, blue, black, white); T6 = T4;

Здесь Т1, Т2 и Т3 - идентичные типы, Т4, Т5 - не идентичны, поскольку (red, gren, blue, black, white) не являются идентификатором типа, Т4, Т6 являются идентичными.

Т2 является поддиапазоном типа Т1.

Например,

Type T1 = Real; T2 = Integer;

(множество целых чисел входит в диапазон вещественных чисел).

Т1 и Т2 - являются отрезками одного и того же типа.

Например,

Type T1 = 1..100; T2 = -3..20; week = (d1, d2, d3, d4, d5, d6, d7); working_week = (d1..d5).

Совместимость по присваиванию станет более понятна, если вспомнить, что переменные в памяти занимают определённое число байт. Так, переменная типа Integer занимает 2 байта, типа - Real 6 байтов, а в большее число ячеек всегда можно поместить меньшее, а наоборот не всегда.

Совместимость типов необходима также в выражениях и операциях сравнения.

Program Example; Var a : Byte; b : Integer; c : Longint; Begin Writeln('Введите 2 числа:(Byte, Integer)'); Readln(a, b); c:=a + b; Writeln(c); End.