- •Конспект лекций по информатике
- •Организация данных в эвм и основы программирования
- •1. Основные понятия языка программирования паскаль
- •1.1. Структурное программирование
- •1.2. Основные символы языка
- •1.3. Элементы языка
- •1.4. Интегрированная среда turbo pascal
- •1.5. Структура программы в turbo pascal
- •1.6. Определение типов
- •1.7. Операторы в программе
- •1.7.1. Операторные скобки
- •1.7.2. Операторы ввода
- •1.7.3. Оператор присваивания
- •1.7.4. Условный оператор
- •1.7.5. Пример простой программы
- •1.7.6. Оперетор безусловного перехода
- •1.8. Организация циклов
- •1.8.1. Использование операторов условного и безусловного перехода
- •1.8.2. Цикл с параметром
- •1.8.3. Цикл с предусловием - цикл while
- •1.8.4. Цикл с постусловием - цикл repeat
- •1.9. Оператор выбора варианта
- •1.10. Расположение операторов в программе
- •1.11. Концепция типов данных
- •2. Стандартные простые типы
- •2.1 Целый тип
- •2.1.1. Операции над данными целого типа:
- •2.2. Действительный тип
- •2.2.1. Операции над данными действительного типа:
- •2.3. Логический тип
- •Var p, q, r : Boolean;
- •2.3.1. Алгебра логики в Паскале
- •2.3.2. Законы алгебры логики в Паскале
- •2.4. Символьный тип
- •2.4.1. Символьные строковые константы
- •3. Нестандартные простые типы (определяемые пользователем)
- •3.1. Перечисляемый тип
- •3.2. Ограниченный тип (диапазон, интервал)
- •4. Процедуры и функции
- •4.1. Описание процедур
- •4.2. Стандартные процедуры
- •4.3. Описание функций
- •4.4. Стандартные функции
- •4.5. Итерация и рекурсия
- •4.6. Побочный эффект рекурсии
- •4.7. Предварительное описание (ссылки вперед)
- •5. Регулярные типы
- •5.1. Одномерный массив, или переменные с индексами
- •Алгоритмы сортировки массивов
- •1. Метод пузырька (метод обменной сортировки с выбором)
- •2. Сортировка выбором
- •3. Метод Шелла
- •4. Метод Хoopа
- •5.2. Многомерные массивы
- •5.3. Упакованные массивы
- •5.4. Строки
- •6. Множественные типы
- •6.1. Свойства множеств
- •6.2. Операции над множествами
- •7. Комбинированные типы
- •7.1. Описание записей и действия с ними
- •7.2. Оператор присоединения.
- •7.3. Записи с вариантами
- •8. Типизированная константа
- •8.1. Простая типизированная константа
- •8.2. Структурированная (сложная) типизированная константа
- •8.2.1. Типизированная константа массива
- •8.2.2. Типизированная константа записи
- •8.2.3. Типизированная константа множества.
- •9. Преобразование типов
- •9.1. Неявные преобразования типов
- •9.2. Использование стандартных функций для преобразования
- •9.3. Явные преобразования типов
- •9.5. Совместимость типов
- •10. Файловые типы
- •10.1. Определение файлового типа
- •10.2. Структура файла
- •10.3. Имя файла
- •10.4. Описание файлового типа
- •10.5. Файловая переменная
- •10.6. Операции над файлами
- •10.7. Типизированные файлы
- •10.8. Текстовые файлы
- •10.9. Нетипизированные файлы
- •10.10. Стандартные файлы inpuTиOutput
5.3. Упакованные массивы
Как правило, одно целое число или один символ занимают в памяти ЭВМ два байта. В то же время для изображения символа достаточно одного байта. С целью экономии памяти машины в языке программирования Паскаль введено понятие упакованного массива. Элементы упакованного массива хранятся по два в двух байтах ЭВМ. И хотя при этом экономится место в памяти, но увеличивается время доступа к компонентам массива.
Элементы упакованного массива используются в программе точно так же, как элементы не упакованного массива. Только память машины при этом автоматически выделяется меньше.
Например, массивы А и АР описаны как
Var AP: Packed Array [1..3] of Boolean;
A:Array[1..3]ofBoolean;
Обычнвй м упакованный массивы идентичны в смысле объема и характера хранимой информации, но различаются способами представления в памяти ЭВМ.
Упакованный массив можно описывать в разделе переменных или с использованием раздела типов.
Описание в разделе типов:
Typeимя типа =PackedArray[имя индекса]ofтип элемента;
Varимя переменной:имя типа;
Здесь служебное слово Packedуказывает на то, что массив данных является упакованным.
К упакованным символьным массивам в языке программирования Паскаль относится строки символов, которые задаются либо в разделе операторов, либо в разделе констант (строки символов, а не символьные строки String, о которых речь пойдет дальше). Как известно, тип константы однозначно определяется ее записью. Поэтому если, например, в разделе констант определена константа S=’end’, то она принадлежит к типу:PackedArray[1..3]ofChar.
Считается, что символьные константы имеют тип упакованных массивов:
Packed Array [1..n] of Char;
где n- длина строки.
Символьные массивы и константы могут участвовать в операциях присваивания и сравнения.
Пусть, например, описание символов массива имеет вид:
Type Mas= Packed Array [1..7] of Char;
VarA:Mas;
Тогда, можно записать такой оператор:
A:=’ZADACHA’;
Если к строкам и упакованным символьным векторам применяют операции сравнения, то при этом аргументы обязательно должны содержать одинаковое количество символов, т.е. их типы д/б идентичными. Операции сравнения выполняются посимвольно, слева направо.
Пример: ‘String’ < ’Strong’, т.к. в алфавите символ ‘i’ стоит раньше, чем ’o’ и его код меньше, т.е. ’i’<’o’.
Пусть, например, имеется строка: “ABCDEFG”. Эту строку можно считать массивом символов, состоящим из 8 символов, включая пробел. Если этот массив символов обозначить именемSim, то описание примет вид:
Type T = Packed Array [1..8] of Char;
VarSim: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.
Обратите внимание, что для ввода и вывода символьных массивов здесь не применяется цикл!