
- •Основные понятия языка программирования паскаль
- •Структурное программирование
- •Основные символы языка
- •Элементы языка
- •Интегрированная среда turbo pascal
- •Структура программы в turbo pascal
- •Определение типов
- •Операторы в программе
- •Операторные скобки
- •Операторы ввода
- •Оператор присваивания
- •Оператор условного перехода
- •Оперетор безусловного перехода
- •Организация циклов
- •Использование операторов условного и безусловного перехода
- •Цикл с параметром
- •Цикл с предусловием - цикл while
- •Цикл с постусловием - цикл repeat
- •Оператор выбора варианта
- •Концепция типов данных
- •Стандартные простые типы Целый тип
- •Операции над данными целого типа:
- •Действительный тип
- •Операции над данными действительного типа:
- •Логический тип
- •Символьный тип
- •Символьные строковые константы
- •Нестандартные простые типы (определяемые пользователем)
- •Перечисляемый тип
- •Ограниченный тип (диапазон, интервал)
- •Процедуры и функции
- •Описание процедур
- •Стандартные процедуры
- •Описание функций
- •Стандартные функции
- •Итерация и рекурсия
- •Побочный эффект рекурсии
- •Предварительное описание (ссылки вперед)
- •Регулярные типы Одномерный массив
- •Алгоритмы сортировки массивов
- •1. Метод пузырька (метод обменной сортировки с выбором)
- •Многомерные массивы
- •Упакованные массивы
- •Множественные типы
- •Свойства множеств
- •Операции над множествами
- •Комбинированные типы Описание записей и действия с ними
- •Оператор присоединения.
- •Записи с вариантами
- •Типизированная константа
- •Простая типизированная константа
- •Структурированная (сложная) типизированная константа Типизированная константа массива
- •Типизированная константа записи
- •Типизированная константа множества.
- •Преобразование типов
- •Неявные преобразования типов
- •Использование стандартных функций для преобразования
- •Явные преобразования типов
- •Эквивалентность типов
- •Совместимость типов
- •Файловые типы
- •Определение файлового типа
- •Структура файла
- •Имя файла
- •Описание файлового типа
- •Файловая переменная
- •Операции над файлами
- •Типизированные файлы
- •Ссылочные типы (указатели) Статические и динамические переменные
- •Ссылочные типы (указатели)
- •Удаление узла из стека:
- •Человек
- •Человек
- •Вставка
- •Динамические переменные
- •Процедуры создания и удаления динамических переменных
- •Динамические списковые структуры
- •Однонаправленные списки
- •Двунаправленные списки
- •Очереди
- •Деревья
- •Модульная система turbo pascal
- •Uses mod 1, mod 2, mod 3; (подключение трех модулей) Общая структура модуля
- •Использование идентификаторов модуля
- •Использование модуля в программе
- •Компиляция модулей
- •Системный файл turbo.Tpl
- •Стандартные модули
- •Модуль crt
- •Модуль dos
- •Модуль printer
- •Модуль overlay
- •Модуль string
- •Процедуры модуля graph
- •Графические процедуры
- •Координаты. Окна. Страницы
- •Линии и точки
- •Многоугольники
- •Дуги,окружности, эллипсы
Упакованные массивы
Как правило, одно целое число или один символ занимают в памяти ЭВМ два байта. В то же время для изображения символа достаточно одного байта. С целью экономии памяти машины в языке программирования Паскаль введено понятие упакованного массива. Элементы упакованного массива хранятся по два в двух байтах ЭВМ. И хотя при этом экономится место в памяти, но увеличивается время доступа к компонентам массива.
Элементы упакованного массива используются в программе точно так же, как элементы не упакованного массива. Только память машины при этом автоматически выделяется меньше.
Например, массивы А и АР описаны как
Var AP: Packed Array [1..3] of Boolean;
A: Array [1..3] of Boolean;
Обычнвй м упакованный массивы идентичны в смысле объема и характера хранимой информации, но различаются способами представления в памяти ЭВМ.
Упакованный массив можно описывать в разделе переменных или с использованием раздела типов.
Описание в разделе типов:
Type имя типа = Packed Array [имя индекса] of тип элемента;
Var имя переменной:имя типа;
Здесь служебное слово Packed указывает на то, что массив данных является упакованным.
К упакованным символьным массивам в языке программирования Паскаль относится строки символов, которые задаются либо в разделе операторов, либо в разделе констант (строки символов, а не символьные строки String, о которых речь пойдет дальше). Как известно, тип константы однозначно определяется ее записью. Поэтому если, например, в разделе констант определена константа S=’end’, то она принадлежит к типу: Packed Array [1..3] of Char.
Считается, что символьные константы имеют тип упакованных массивов:
Packed Array [1..n] of Char;
где n - длина строки.
Символьные массивы и константы могут участвовать в операциях присваивания и сравнения.
Пусть, например, описание символов массива имеет вид:
Type Mas= Packed Array [1..7] of Char;
Var A:Mas;
Тогда, можно записать такой оператор:
A:=’ZADACHA’;
Если к строкам и упакованным символьным векторам применяют операции сравнения, то при этом аргументы обязательно должны содержать одинаковое количество символов, т.е. их типы д/б идентичными. Операции сравнения выполняются посимвольно, слева направо.
Пример: ‘String’ < ’Strong’, т.к. в алфавите символ ‘i’ стоит раньше, чем ’o’ и его код меньше, т.е. ’i’<’o’.
Пусть, например, имеется строка: “ABCDEFG”. Эту строку можно считать массивом символов, состоящим из 8 символов, включая пробел. Если этот массив символов обозначить именем Sim, то описание примет вид:
Type T = Packed Array [1..8] of Char;
Var Sim:T;
Один элемент массива принимает значение одного символа, например:
Sim[1]=’A’;
Sim[6]=’ ’.
Элементы массива могут принимать свои значения с помощью оператора ввода Read, который располагается внутри цикла.
Пример: ввода.
I: = 1;
While I<=10 do Begin Read (A[I]); I:= I+1; End;
For I:= 1 to 46 do Read (A[I]);
Вывод массива символьных данных также организуется с использованием цикла.
Пример: Дана строка символов, обозначенная именем S1.
‘To be or not to be’
Требуется сформировать новый массив с именем S2, который содержит представленную строку символов с добавлением в конце вопросительного знака.
Program Hamlet;
Type Stroka = Packed Array [1..20] of Char;
Var S1, S2: Stroka;
I: Integer; (*счетчик символов*)
K: Integer; (*параметр цикла*)
Begin
Write (‘Ввести S1=’);
I; = 0;
While I <= 18 do
Begin
I:= I+1;
Raed (S1[I]); Readln;
End;
S2:= S1;
S2[I+1]:= ‘?’;
For K:= 1 to I+1 do Write (S2[K]);
End.
Р
азрешается
ввод и вывод символьных массивов целой
строкой, без организации цикла.
Пример: Даны два символьных массива: А1= ‘Suvorov’ и А2= ‘Suhanov’. Требуется поменять их местами.
Program Zamena;
Const N =12;
Type Mas = Array [1..N] of Char;
Var A1,A2,X: Mas;
Begin
Writeln (‘A1-Who?’);
Readln (A1); {Суворов}
Writeln (‘A2-Who?’);
Readln (A1); {Суханов}
Writeln (‘происходит замена’);
X:=A1;
A1:=A2;
A2:=X;
Writeln (‘A1=’,A1);
Writeln (‘A2=’,A2);
End.
Обратите внимание, что для ввода и вывода символьных массивов здесь не применяется цикл!
Строки
Тип String (строка) в Паскале широко используется для обработки текстов и во многом похож на одномерный массив символов Array [0..N] of Char. Однако в отличие от массива количество символов в строке – переменной может меняться от 0 до N, где N – максимальное количество символов в строке. Значение N определяется в разделе объявления типа String [N] и может быть любой константой порядкового типа, но не больше 255: N 255. Можно не указывать N, в этом случае длина строки принимается максимально возможной: N = 255.
Строка трактуется как цепочка символов. К любому символу в строке можно обратится точно так же, как к элементу одномерного массива Array [0..N] of Char.
Пример:
Var st: String;
- - - - - - - - - - - - - -
if st[5]= ‘A’ then …….
Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый значащий символ строки занимает второй и имеет индекс 1. Над длиной строки можно совершать необходимые действия и таким способом менять длину строки.
Пример:
Var st:String[10];
I:Integer;
- - - - - - - - - - - - - -
st[0]:=5;
Значение Ord (st[0]), то есть текущую длину строки можно получить с помощью функции length (st).
К строке можно применить операцию + (сцепление строк), например:
St:=’a’+’b’;{ ab}
St:=st+’c’; { abc}
Если длина сцепленной строки превысит максимально допустимую длину N, то «лишние» символы отбрасываются.
Пример:
Var st :String [1];
Begin st:=’123’;
Writeln(st); { 1}
End;
Кроме сцепления строк, все остальные действия над строками (и символами) реализуются с помощью встроенных функций.
1) Concat (S1<, S2, S3,…SN>)– функция типа String, сцепление строк;
2) Copy (имя строки,№ нач. символа, кол-во символов)– функция копирования;
Delete (имя строки,№ нач. символа, кол-во символов)– функция удаления;
Insert (имя подстроки, имя строки, № нач. символа в строке)– вставка;
Length (имя строки)– функция типа Integer, вычисляет длину строки;
Pos (имя подстроки, имя строки)- функция типа Integer, отыскивает в строке первое вхождение подстроки и дает № позиции, с которой она начинается; если подстрока не найдена, значение функции будет = 0;
Str (число Real или Integer <: общая ширина поля<: кол-во симв. в дроб. части>>, имя строки) – процедура, преобразующая число типа Real или Integer в строку символов так, как это делает процедура Writeln перед вызовом; параметры, если они присутствуют, задают формат преобразования;
Val (имя строки, число Real или Integer, параметр) – процедура, преобразующая строку символов во внутреннее представление целое или вещественное числа; параметр = 0, если преобразование проведено успешно, в противном случае он содержит № позиции в строке, где обнаружен ошибочный символ;
Upcase (символ) – функция типа Char, возвращает символ в верхнем регистре, если он определен для него, либо сам символ, если для него нет верхнего регистра.
Пример: Upcase(‘a’) даст A,
Upcase(‘2’) даст 2.
Пример:
Var
x: Real;
y: Integer;
st, st1: String;
- - - - - - - - - - - - - - - -
st:= concat (‘12’,’345’); (*получится st 12345*)
st1:= copy (st, 3, lenght(st)-2); (*получится st1 345*)
insert(‘-’,st1,2); (*получится st1 3-45*)
delete(st, pos(‘2’,st),3); (*получится st 15*)
str(pi:6:2,st); (*получится st 3.14*)
st1:=’3.1415’; (*получится st1 3.1415*)
val(st1,x,y); (*получится y=2, x – какой был*)
Операции отношения
= <> > < >= <=
выполняются над двумя строками посимвольно, слева направо, с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением chr(0).
Пример: Операции дают значение true:
‘turbo’<’turbo-pascal’;
‘A’<>’IFF’;
‘ПАскаль’<’Паскаль’;