- •Введение
- •1. Программирование на языке Паскаль
- •1.1. Структура программы
- •1.2. Типы данных
- •1.2.1. Целый тип данных
- •1.2.2. Логические типы данных – Boolean
- •1.2.3. Данные символьного типа
- •1.3. Операторы языка программирования Турбо Паскаль
- •1.3.1. Операции в Турбо Паскаль
- •1.3.2. Правила вычисления выражений
- •1.3.3. Встроенные функции в Турбо Паскаль
- •1.3.4. Описание констант и переменных
- •1.3.5. Операторы в Турбо Паскаль
- •Вопросы для самопроверки
- •Лабораторная работа №1 Организация программ линейных структур
- •2. Организация форматного вывода данных на языке Паскаль
- •Варианты задания
- •3. Организация программ разветвляющихся структур
- •3.1. Полная форма условного оператора
- •3.2. Краткая форма условного оператора
- •Вопросы для самопроверки
- •Лабораторная работа №3 Организация программ разветвляющихся структур
- •Варианты заданий
- •4. Организация циклических процессов
- •Лабораторная работа №4 Составление циклических программ
- •Варианты заданий
- •Методические указания
- •Варианты заданий
- •5. Программирование структур с вложенными циклами
- •Вопросы для самопроверки
- •Лабораторная работа №5 программирование структур с вложенными циклами. Вычисление суммы ряда
- •Методические указания
- •Варианты заданий
- •6. Перечислимые и ограниченные типы данных
- •6.1 Перечислимый тип данных
- •6.2. Ограниченный тип данных
- •6.3. Оператор выбора (варианта)
- •Вопросы для самопроверки
- •Лабораторная работа №6 Перечислимые и ограниченные типы данных
- •Варианты заданий.
- •7. Регулярные типы данных
- •7.1. Одномерные массивы
- •7.1.1. Краткая форма объявления одномерного массива
- •7.1.2. Полная форма объявления одномерного массива
- •7.1.3. Доступ к элементам массива
- •Вопросы для самопроверки
- •Лабораторная работа №7_1 регулярные типы данных. Массивы
- •Варианты заданий
- •7.2. Двумерные массивы
- •Вопросы для самопроверки
- •Лабораторная работа №7_2 регулярные типы данных. МАтрицы
- •Варианты заданий
- •7.3. Сортировка элементов массива
- •7.3.1. Сортировка методом «пузырька»
- •7.3.2. Сортировка вставками
- •7.3.3. Сортировка посредством выбора
- •7.3.4. Быстрая сортировка
- •8. Составление программ с использованием подпрограмм
- •8.1. Область видимости идентификатора переменной
- •8.2. Подпрограммы - процедуры (procedure)
- •8.2.1. Формальные и фактические параметры
- •Вопросы для самопроверки
- •8.3. Подпрограммы-функции (function)
- •Вопросы для самопроверки
- •Лабораторная работа №8_2 составление программ с использованием подпрограмм - функций
- •Варианты заданий
- •8.4. Рекурсия
- •8.4.1. Вычисление факториала
- •8.4.2. Формы рекурсивных процедур
- •8.4.3. Числа Фибоначчи
- •Вопросы для самопроверки
- •9. Модули
- •Вопросы для самопроверки
- •Лабораторная работа №9 составление программ с использованием модулей
- •Варианты заданий
- •10. Строковые типы данных (String)
- •10.1 Операции со строками
- •10.2. Стандартные процедуры и функции для строк
- •10.3. Хранение строк
- •Вопросы для самопроверки
- •Лабораторная работа №10 обработка символьной информации
- •Варианты заданий
- •11. Комбинированные типы. Записи (Record)
- •11.1 Записи с фиксированными частями
- •11.2. Оператор with…do
- •11.3. Вариантные записи
- •Вопросы для самопроверки
- •Лабораторная работа №11 Комбинированные типы. Записи
- •Варианты заданий
- •12. Файлы
- •12.1. Классификация файлов
- •12.1.1. Чтение файла
- •12.1.2. Запись файла
- •Вопросы для самопроверки
- •Лабораторная работа №12 организация работы с внешней памятью
- •Варианты заданий
- •13. Множества
- •13.1. Объявление множества
- •13.2. Операции над множествами
- •13.3. Сравнение множеств
- •13.4. Старшинство множественных операций
- •Вопросы для самопроверки
- •Лабораторная работа №13 множества
- •Варианты заданий
- •Библиографический список
12.1.1. Чтение файла
Под чтением файла понимают ввод данных из внешнего файла, находящегося на диске, в оперативную память машины. Данные внешнего файла становятся доступны программе.
Для чтения файла необходимо выполнить следующие действия:
Открыть файл для чтения оператором RESET(имя файла);
Ввести данные файла в программу: READ(имя файла, параметры);
Закрыть файл для чтения CLOSE(имя файла);
Файл, из которого считываются данные, называется входным файлом.
Оператор RESET может встречаться неоднократно. После его выполнения указатель файла устанавливается на первый элемент и готов к чтению сначала, то есть данные внешнего файла можно считать более чем один раз.
Так как число элементов не задаётся, то для определения конца ввода используется стандартная функция EOF (имя файла). Если указатель файла находится за последним элементом, то функция принимает истинное значение, в противном случае – ложное.
Например,
{раздел описаний}
…
begin
{главная программа}
ASSIGN(F,’D:\PROGRAM.DAT’);
RESET(F);
…
{текст программы}
…
WHILE NOT EOF(F) DO
BEGIN
…
END;
CLOSE(F);
…
END.
12.1.2. Запись файла
Под записью файла понимается вывод результатов программы из оперативной памяти на диск, то есть создание нового файла на внешнем устройстве.
Для записи файла необходимо:
Открыть файл для записи оператором REWRITE(имя файла);
Вывести данные оператором WRITE(имя файла, параметры);
Закрыть файл для записи CLOSE(имя файла);
Внешний файл, в который записываются данные, называется выходным.
Например, VAR F : TEXT;
begin
ASSIGN(F,’D:\TEST.DAT’);
REWRITE(F);
WRITELN(F,’Привет!’);
CLOSE(F);
end.
Если после создания текстового файла необходимо ввести в него дополнительную информацию, то используют оператор APPEND (F).
Например, VAR F : TEXT;
begin
ASSIGN(F, ‘…’);
REWRITE(F); //
WRITELN(F, ‘Привет!’);
APPEND(F);
WRITELN(F, ‘Мир!!!’);
CLOSE(F);
end.
Если в операторе на месте имени внешнего файла указать стандартное устройство клавиатуры, то данные можно будет вводить с клавиатуры ‘con:’: ASSIGN(F,’CON:’);
Для вывода результатов на печать в качестве внешнего файла необходимо указать печатающее устройство: ASSIGN(F, ‘PRN:’); Необходимо подключить стандартный библиотечный модуль PRINTER.
При обращении к стандартным функциям и процедурам ввода/вывода автоматически производится проверка на наличие ошибок. При обнаружении ошибок программа прекращает работу и выводит на экран сообщение. С помощью директив компилятора {$I-} и {$I+} автоматическую проверку ошибок ввода/вывода можно отключить или выключить. Если автоматическая проверка отключена, ошибки ввода/вывода, возникающие при работе программы, не приводят к её останову. Стандартная функция IORESULT возвращает код ошибки. Нулевое значение кода ошибки означает нормальное завершение операции ввода/вывода.
Задача 12.1. Сформировать файл, состоящий из 10 целых чисел. Считать данные из файла, посчитать их сумму и вывести их на экран.
Листинг программы
PROGRAM TASK1;
USES CRT;
CONST N = 10;
VAR F : FILE OF INTEGER;
X : ARRAY[1..N] OF INTEGER;
I : INTEGER;
S : LONGINT;
ROAD : STRING[30];
BEGIN
CLRSCR;
RANDOMIZE;
ROAD := 'E:\PASCAL\FILE\TASK1.DAT';
{$I-}
ASSIGN(F,ROAD);
IF IORESULT <> 0 THEN WRITELN ('ERROR ON CREATE FILE!')
ELSE
BEGIN
REWRITE(F);
IF IORESULT <> 0 THEN WRITELN ('ERROR ON OPEN/WRITE FILE!') {$I+}
ELSE
BEGIN
{$I+}
FOR I := 1 TO N DO
BEGIN
X[I] := RANDOM(21)-10;
WRITE(F,X[I]);
END;
CLOSE(F);
END;
{$I-}
S := 0;
I := 1;
RESET(F);
IF IORESULT <> 0 THEN WRITE ('ERROR ON OPEN FILE!') {$I+}
ELSE
BEGIN
{$I+}
WHILE NOT EOF (F) DO
BEGIN
READ(F,X[I]);
WRITELN(X[I]);
S := S + X[I];
INC(I);
END;
WRITELN('S=',S:4);
CLOSE(F);
END;
END;
READLN;
ERASE(F);
END.
Задача 12.2. Сформировать файл из 5 компонент строкового типа, считать их из файла. Если первые две компоненты – числа, то образовать их них число и определить является ли оно чётным или нет.
Листинг программы
ROGRAM TASK2;
USES CRT;
CONST N = 5;
ROAD = 'E:\PASCAL\FILE\TASK2.DAT';
VAR F : TEXT;
I : BYTE;
C : CHAR;
S : STRING;
SUM, CODE : INTEGER;
D : ARRAY[1..N] OF STRING;
BEGIN
REPEAT
CLRSCR;
{$I-}
ASSIGN(F,ROAD);
IF IORESULT <> 0 THEN BEGIN WRITELN ('ERROR ON CREATE FILE!');
HALT;
{$I+}
END
ELSE
BEGIN
REWRITE(F);
IF IORESULT <> 0 THEN BEGIN WRITELN ('ERROR ON OPEN/WRITE FILE!');
HALT;
{$I+}
END
ELSE
BEGIN
{$I+}
FOR I := 1 TO N DO
BEGIN
READLN(D[I]);
WRITELN(F,D[I]);
END;
END;
END;
CLOSE(F);
{$I-}
RESET(F);
IF IORESULT <> 0 THEN BEGIN WRITELN ('ERROR ON READ FILE!');
HALT;
{$I+}
END
ELSE
BEGIN
{$I+}
I := 1;
WRITELN('OUTPUT');
WHILE NOT SEEKEOF(F) DO
BEGIN
READLN(F,D[I]);
WRITELN(D[I]);
INC(I);
END;
CLOSE(F);
END;
WRITELN;
S := D[1] + D[2];
VAL(S,SUM,CODE);
IF CODE <> 0 THEN WRITELN ('ERROR IN STATEMENT')
ELSE
BEGIN
IF NOT ODD(SUM) THEN WRITELN ('YES')
ELSE WRITELN ('NO');
END;
WRITE('CONTINUE Y/N ?');
READLN(C);
UNTIL (C = 'N') OR (C = 'n');
ERASE(F);
END.