
- •1. Двоичная система счисления.
- •2. Восьмеричная система счисления.
- •3. Шестнадцатеричная система счисления.
- •4. Сложение и вычитание в 2, 8 и 16 c/c.
- •2. Вещественные числа (числа с плавающей запятой).
- •3. Логические данные.
- •2. Зарезервированные слова.
- •X a8 alpha Massiv z52d9 eps Res_52_a ___75
- •6. Метка.
- •2. Целые типы данных.
- •4. Вещественные типы.
- •1. Раздел описания меток.
- •2. Раздел описания констант.
- •3. Раздел описания типов.
- •4. Раздел описания переменных.
- •6. Раздел операторов.
- •7. Последовательность разделов.
- •1. Формульно-словесный способ.
- •2. Блок-схемный способ.
- •Ввод - вывод одномерного массива
- •2. Ввод массива из текстового файла.
- •3. Вывод одномерного массива на экран.
- •Примеры обработки одномерных массивов
- •1. Параметр цикла должен быть ординального типа.
- •2. Параметр должен быть описан в том же блоке, где находится сам оператор цикла.
- •5. В теле цикла параметр не должен изменяться.
- •6. Начальное и конечное значения параметра цикла вычисляются только один раз, до начала цикла.
- •7. При нормальном завершении цикла значение его параметра считается неопределенным.
- •Контроль ординальных переменных
- •Вставка элемента в упорядоченный массив
- •Удаление элементов из массива
- •«Школьный» алгоритм сортировки
- •Группировка массива методом прямой выборки
- •Группировка массива методом прямого обмена
- •Var c : array[1..10,1..15,1..8] of real.
- •1. Ввод элементов матрицы с клавиатуры.
- •2. Ввод матрицы из текстового файла.
- •3. Вывод матрицы на экран.
- •Тождественные и совместимые типы
- •Обработка в процедуре одномерных массивов с различными именами типов
- •Обработка в процедуре матриц с различными именами типов
- •Var s : string[V],
- •Процедуры и функции для обработки строк
- •Определение битовой структуры поля памяти
- •Процедуры и функции для файлов любого типа
- •Var p : pointer;
- •1. Формирование стека из текстового файла.
- •7. Определение значения и местоположения максимального элемента в стеке.
- •8. Удаление из стека максимального элемента.
- •9. Добавление элемента в упорядоченный стек.
- •2. Добавление нового элемента в очередь.
- •3. Удаление элемента из очереди.
- •6. Удаление произвольного элемента из очереди.
- •7. Добавление нового элемента в произвольное место очереди.
- •1. Формирование дека.
- •Var sin : integer;
- •Процедура заполнения FillChar
- •Процедура перемещения данных move
- •Управление экраном в текстовом режиме
- •Сохранение и восстановление экрана
- •Interface
- •Implementation
- •Процедуры управления текстовым режимом экрана
- •Intr(n:byte; Var Reg:Registers),
- •If KeyPressed then
- •Автоматическая оптимизация программ
- •1. Свертывание констант.
- •2. Слияние констант.
- •3. Вычисление по короткой схеме.
- •4. Удаление неиспользуемого кода.
- •If false then
- •5. Эффективная компоновка.
- •Оверлейная структура программы
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Использование сопроцессора
Ввод - вывод одномерного массива
Ввод и вывод массива, в том числе ввод с клавиатуры и вывод на экран, можно осуществить только по-элементно.
Ввод массива с клавиатуры.
Const Nmax = 500;
Type Ar = array[1..Nmax] of real;
Var i, { параметр цикла }
n : word; { текущий размер массива }
X : Ar; { массив }
Begin
Read(n); Writeln('n= ',n);
For i:=1 to n do
Read(x[i]);
Каждой переменной, как простой, так и составной, при старте программы выделяется столько памяти, сколько определено описанием этой переменной в разделе Var. В данном случае массиву X выделяется память для размещения Nmax = 500 элементов (500 6 = 3000 байт). Это поле памяти может полностью или частично использоваться при работе программы. Очевидно, что при этом должно выполняться отношение n Nmax, где n - текущий размер массива X.
Более удобной для пользователя при вводе данных с клавиатуры является такая программа, в которой перед вводом очередной переменной пользователю сообщается, что именно должно быть введено. В данном случае программа может выглядеть следующим образом:
Const Nmax = 500;
Type Ar = array[1..Nmax] of real;
Var i, { параметр цикла }
n
: word;
{ кол-во
элементов в массиве,
}
X : Ar; { формируемый массив }
Begin
Writeln('Введите значение n ');
Read(n); Writeln('n= ',n);
For i:=1 to n do
Begin
Writeln('Введите значение элемента x[',i,'] ');
Read(x[i]);
End;
При отладке программы требуется производить ее многократный запуск с одними и теми же исходными данными для обнаружения и устранения синтаксических и семантических ошибок. При большом объеме исходных данных, в частности при наличии в их составе массивов, ввод данных с клавиатуры создает определенные неудобства для пользователя (при каждом запуске программы необходимо заново вводить все компоненты массива, что не исключает появление новых ошибок при вводе с клавиатуры и, как следствие, различие в результатах работы программы). Поэтому более предпочтительным является ввод данных из текстового файла. В этом случае массив формируется в файле один раз, а затем многократно используется в программе.
2. Ввод массива из текстового файла.
Файлы будут подробно рассмотрены несколько позже. Здесь же будут приведены лишь основные сведения, необходимые для организации ввода из текстового файла.
Текстовый файл, содержащий исходные данные, ничем не отличается от файла, содержащего текст Паскаль-программы. Формирование этих файлов производится одним и тем же способом. Если в такой файл записываются числовые данные, то здесь должны быть выполнены лишь два основных требования:
- числа должны иметь форму правильных констант;
разделителем между числами являются один или несколько пробелов.
При этом не имеет значения, сколько чисел записано в каждой строке текстового файла.
Предположим, что файл на диске имеет имя 'Mas.dat'. Программа ввода из этого файла может иметь вид:
Const Nmax = 500;
Type Ar = array[1..Nmax] of real;
Var i,n : word;
X : Ar;
F : text; { текстовый файл }
Begin
Assign(F,'Mas.dat');
Reset(F);
Read(F,n); Writeln('n= ',n);
For i:=1 to n do
Read(F,x[i]);
Close(F);
Здесь F - имя текстового файла, объявленное в разделе Var (внутреннее имя файла);
Assign - процедура, устанавливающая связь между внутренним именем F и именем файла на диске (внешним именем);
Reset, Close - процедуры открытия и закрытия файла.
По объявлению
Var F : text;
в программе создается файловая переменная F, в состав элементов которой входит, в частности, информация об имени файла на диске. Эта информация содержится в процедуре Assign и заносится в переменную F при открытии файла с помощью процедуры Reset. При срабатывании процедуры Close информация о внешнем имени файла удаляется из переменной F.
Внешнее имя файла формируется по правилам, принятым в операционной системе MS DOS.
В данном примере первым значением, которое вводится из файла F, является количество элементов n в массиве X.
В файле Mas.dat можно не размещать значение переменной n (количество элементов массива), возложив определение этого значения непосредственно на программу ввода.
Const Nmax = 500;
Type Ar = array[1..Nmax] of real;
Var i,n : word;
X : Ar;
F : text;
Begin
Assign(F,'Mas.dat');
Reset(F);
n:=0;
While not SeekEof(F) do
Begin
n:=n+1; Read(F,x[n]);
End;
Close(F);
В Турбо Паскале имеются две логические функции, выходным значением которых является true при достижении конца файла: Eof(F) и SeekEof(F) (eof - сокращение слов End Of File). Как будет показано позже при рассмотрении текстовых файлов, при вводе числовых массивов более предпочтительна функция SeekEof(F).
В приведенной выше программе цикл While работает до тех пор, пока не будет достигнут конец файла F.