ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.07.2024
Просмотров: 38
Скачиваний: 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.Wi≠Wj, если i≠j
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) – слияние (конкатенация) строк [аналогична ”+”]. |
||
|