ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.07.2024

Просмотров: 41

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Тема 7. Нестандартные типы данных в языке Паскаль

1.Два способа описания нестандартных объектов

2.Скалярные типы данных

3.Структурированные типы данных

1.Для описания данных нестандартных типов могут быть использованы два метода:

I.type < имя типа> = <описание типа>; var <имя переменной>:<имя типа>;

Например:

type vector = array [1..3] of real; var x: vector;

II. var <имя переменной>: <описание типа>;

Например:

var x: array [1..3] of real;

1

Тема 7. Нестандартные типы данных в языке Паскаль

2.1. Перечислимый тип

type <имя типа>=(<const1>, <const2>, … <constN>);

Например:

type detaly = (gaika, vint, bolt, shaiba, shyrup); color =(red, blue, wait, green, yellow);

Ограничения:

1.WiWj, если ij

2.Wi>Wj, если i>j

3.Ни одна константа не должна попадать в разные типы.

Стандартным образом (через процедуры read и write) организовать ввод и

вывод значений перечислимого типа НЕЛЬЗЯ. Ввод и вывод значений перечислимого типа осуществляется при помощи оператора CASE.

2

Тема 7. Нестандартные типы данных в языке Паскаль

2.2. Интервальный тип (тип-диапазон)

type <имя типа>=<const1> .. <const2>;

Константы должны относится к одному скалярному типу, кроме real.

Тип к которому относятся константы называется БАЗОВЫМ.

Например:

type letter = A’.. ’Z; num = 0’ .. ’9;

day = (mon, tue, wed, thu, fri, sat, san); workday = mon .. fri;

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

3


Тема 7. Нестандартные типы данных в языке Паскаль

3. Структурированные типы данных

Структурированный тип определяет наборы однотипных или разнотипных данных, которые называются компонентами. Относится к нестандартным типам и предусматривает обязательное описание в программе.

Признаки по которым осуществляется разделение структурированных типов данных:

1.Известно или нет заранее число компонент

2.Тип компонент одинаков или нет

3.Способ выделения нужной компоненты

Вязыке Turbo Pascal существуют следующие структурированные типы

1.Регулярный тип (тип-массив)

2.Комбинированный тип (тип-запись)

3.Множественный тип (тип-множество)

4.Файловый тип (тип-файл)

5.Строковый тип (тип-строка)* {Существует только в ТР_7.0}

4

Тема 7. Нестандартные типы данных в языке Паскаль

3.1. Регулярный тип (тип-массив)

Массив - это пронумерованная последовательность данных одного и того же типа, снабженных индексами.

Признаки структурированного типа данных массив:

1.Число компонент всегда заранее известно

2.Тип компонент всегда одинаков

3.Выделения нужной компоненты осуществляется при помощи индекса(ов)

Описание регулярного типа

type <имя регулярного типа> = array [<тип индекса>] of <тип компонент>;

a = ( ax ay az)=(a1 a2 a3)

аi - A[i]

Например

 

type vector= array[1.. 3] of real;

a[1], c[3], b[i], b[i+1]

var a, b, c : vector ;

 

или

 

matr = array [1.. 3, 1..3] of real;

 

5


Тема 7. Нестандартные типы данных в языке Паскаль

Кроме операции присваивания над полной переменной регулярного типа

не разрешено ни одно действие.

var A,B: array [1..3] of integer; C: array [1..3] of real;

A:=B;

A:=C; - не допустимо!

Массив обрабатывается поэлементно.

Над отдельными компонентами массива допускаются все те операции, которые допустимы для переменных типа указанного в описании массиве. Ввод или

вывод массива должны проводиться также поэлементно

Если массив одномерный, то for i:=1 to n do readln(a[i]); {writeln(a[i]);}

Если массив двухмерный, то for i:=1 to n do

for j:=1 to m do

 

readln(a[i,j]); {writeln(a[i,j]);}

6

 

Тема 7. Нестандартные типы данных в языке Паскаль

Пример 1 Задана последовательность 100 вещественных чисел, найти наибольший элемент этой последовательности.

program max (input, output); uses crt;

const n=100;

type vector= array[1..n] of real; var x:vector;

u:real;

i:1..n; Begin clrsсr;

writeln(‘Введи последовательность’); for i:=1 to n do begin

write (‘x[‘,i,’]= ‘); readln(x[i]); end; u:=x[1];

for i:=2 to n do

if u<x[i] then u:=x[i]; {вывод результата}

writeln (‘Максимальный элемент в последовательности - ‘,u); repeat until keypressed;

end.

7


Тема 7. Нестандартные типы данных в языке Паскаль

Пример 2 Рассчитать скалярное произведение двух n – мерных векторов Р = Σ ai bi

program PR1 (input, output); uses crt;

const n=50;

var a,b: array[1..n] of real; P: real; i: 1..n;

Begin clrsсr;

writeln(‘Введи компоненты’); P:=0;

for i:=1 to n do begin write (‘a[‘,i,’]= ‘); readln(a[i]); write (‘b[‘,i,’]= ‘); readln(b[i]); P:=P+a[i]*b[i]; end; writeln(‘P=‘,P);

repeat until keypressed; end.

8

Тема 7. Нестандартные типы данных в языке Паскаль

Пример 3 Дана матрица n×m. Найти число элементов этой матрицы, не превосходящих среднего арифметического.

program PR3 (input, output); uses crt;

const t=100;

var a: array[1..t,1..t] of real; S: real; i,j,k,n,m: integer;

Begin clrsсr;

writeln(‘Введи число строк матрицы n=‘); readln(n); writeln(‘Введи число столбцов матрицы m=‘); readln(m); writeln(‘Введи матрицу по строкам’);

S:=0;

for i:=1 do n do begin for j:=1 do m do begin

write (‘a[‘,i,’,’,j,’]= ‘); readln(a[i,j]); S:=S+a[i,j]; end; writeln; end;

S:=S/(n*m); k:=0; for i:=1 do n do

for j:=1 do m do begin

if a[i,j]<=S then k:=k+1 end;

writeln(‘В массиве ’,k,’ элементов не превосходят среднего значения’);

 

repeat until keypressed;

 

end.

9

Тема 7. Нестандартные типы данных в языке Паскаль

3.2. Строковый тип (тип-строка)

В языке Turbo-Pascal тип - строка (стандартный тип string) - последовательность символов произвольной длины (до 255 символов). У типа - строки в квадратных скобках может быть указан его размер от 1 до 225. Если размер не указан, он считается 255.

Признаки структурированного типа данных строка:

1.Число компонент всегда заранее известно

2.Тип компонент всегда одинаков (char)

3.Выделения нужной компоненты осуществляется при помощи спецфункций

Строковые константы - это последовательность символов заключенная в апострофы.

Пример const Mart: string[10]=‘Март’;

Для строк имеют место операции сравнения и конкатенации (объединения, слияния) – “+”.

Пример var str1, str2, str:string[100];

str1:=‘Turbo’; str2:=‘Pascal’; str:=str1+str2;

Над строками определены следующие функции, являющиеся стандартными.

1)Length(x) - возвращает длину строки х, результат целое число.

2)Copy(S,P,len) - вырезка подстроки S длиной len начиная с позиции P.

3)Pos(str,S) - возвращает номер позиции, начиная с которой подстрока str входит в строку S.

4)Delete(S,P,len) -удаление подстроки длиной len из строки S начиная с позиции P.

5)

Insert(S1,S2,P) - вставка строки S1 в строку S2 начиная с позиции P.

10

6)

Сoncat(S1,...,SN) слияние (конкатенация) строк [аналогична ”+”].