
- •Часть I. Этапы решения задачи на компьютере 7
- •Часть II. Задачи. Алгоритмизация и программирование 15
- •Часть III. Теоретические положения и примеры программ 188
- •Введение
- •Часть I. Этапы решения задачи на компьютере
- •1.1 Постановка и формализация условий задачи
- •1.2 Алгоритмизация задачи
- •1.2.1 Интерпретация объектов
- •1.2.2 Вычислительная схема
- •1.2.3 Вычислительная схема решаемой задачи
- •1.2.4 Составление блок-схемы
- •1.2.5 Трассировка
- •1.3 Составление программы на языке Паскаль
- •1.4 Подготовка текста программы на машинном носителе
- •1.5 Трансляция (компиляция) программы
- •1.6 Компоновка (редактирование связей)
- •1.7 Запуск программы на исполнение
- •1.8 Анализ результатов
- •Часть II. Задачи. Алгоритмизация и программирование классических вычислительных процессов
- •1 Линейный вычислительный процесс
- •1.1 Программирование формул
- •1.2 Формализация и алгоритмизация задачи
- •2 Разветвляющийся вычислительный процесс
- •2.1 Программирование формул
- •2.2 Формализация и алгоритмизация графических задач
- •2 .3 Параметрические задачи
- •3 Циклические вычислительные процессы
- •3.1 Арифметический цикл
- •Вычисление произведения n сомножителей.
- •Табулирование функции на конечном отрезке.
- •3.2 Итерационный цикл
- •Вычисление предела последовательности с заданной точностью.
- •Вычисление суммы бесконечного ряда с заданной точностью.
- •3.3 Арифметические циклы с рекуррентными соотношениями
- •3.4 Итерационные циклы с рекуррентными соотношениями
- •3.5 Двойной вложенный цикл
- •4. Пользовательские алгебраические функции
- •4.1 Применение функции в линейных и разветвляющихся вычислительных процессах
- •4.2 Использование функции в циклических процессах
- •4.3 Табуляция функции
- •5 Одномерные числовые массивы
- •5.1 Работа с компонентами массива
- •5.2 Работа с векторами
- •6 Двумерные числовые массивы
- •6.1 Работа с элементами массива
- •6.2 Работа с векторами и матрицами
- •6.3 Использование процедур и функций для работы с массивами
- •7 Работа со строками
- •7.1 Анализ и преобразование текста строки
- •7.2 Работа со строковыми функциями и процедурами
- •8 Работа со списками
- •8.1 Стеки
- •8.2 Очереди
- •8.3 Бинарные деревья
- •9 Работа с текстовыми файлами
- •10 Работа с файлами записей
- •11 Компьютерная графика
- •12 Анимация изображений
- •Часть III. Теоретические положения и примеры программ
- •1 Вычисление определителя квадратной матрицы
- •2.2 Использование записей для описания таблиц
- •Работа с полями записи
- •Использование оператора with … do
- •Ввод данных в массив записей с клавиатуры
- •2.3 Вложение записей
- •Присвоение значений полям вложенных записей
- •3 Файлы записей
- •3.1 Структура файла
- •3.2 Встроенные процедуры и функции обработки файлов
- •3.3 Организация последовательного доступа к записям файла
- •3.4 Организация прямого доступа к компонентам файла
- •3.5 Создание индексного файла
- •3.6 Работа с файлом произвольного доступа
- •Просмотр файла
- •Редактирование записей
- •Изменение структуры основного файла
- •Использование клавиш для управления программой
- •Удаление записи из файла
- •Добавление записи в файл
- •3.7 Информационное взаимодействие текстовых файлов и файлов записей
- •Экспорт данных. Копирование информации из файла записей в текстовый файл
- •Импорт данных. Копирование информации из текстового файла в файл записей
- •3.8 Запросы к файлам записей
- •Запрос с группировкой
- •4 Графическое программирование
- •4.1 Управление видеорежимом
- •Инициализация видеорежима. Процедура InitGraph
- •Закрытие видеорежима. Процедура CloseGraph
- •Создание графического окна. Процедура SetViewPort
- •Закрытие графического окна. Процедура ClearDevice
- •4.2 Построение графических фигур
- •Построение прямой линии. Процедуры SetColor, SetLineStyle, Line, LineRel, LineTo
- •Построение прямоугольника. Процедуры Rectangle и Bar
- •Построение окружности. Процедура Circle
- •Построение дуги окружности. Процедура Arc
- •Построение эллипса. Процедуры Ellipse, FillEllipse
- •Построение сектора. Процедуры PieSlice, Sector
- •4.3 Корректировка изображения Процедуры GetAspectRatio, SetAspectRatio
- •4.4 Создание пользовательского шаблона заливки
- •Заливка замкнутой области. Процедура FloodFill
- •Построение и окраска произвольного рисунка на примере замка
- •Построение и заливка правильного многоугольника
- •4.5 Работа с текстом
- •Выбор стандартного шрифта. Процедура SetTextStyle
- •Коррекция стандартного шрифта. Процедура SetUserCharSize
- •Вывод числовых величин на экран
- •5 Анимация изображений
- •5.1 Дублирования спрайта цветом фона
- •5.2 Манипулирование фрагментами изображения
- •5.3 Использование страниц видеопамяти
- •6 Сообщения об ошибках
- •6.1 Ошибки стадии компиляции
- •6.2 Ошибки стадии выполнения
- •Ошибки ввода-вывода
- •Фатальные ошибки
- •Библиографический список
Экспорт данных. Копирование информации из файла записей в текстовый файл
Пример 11. Информацию из файла записей Students.dat, упорядочить в алфавитном порядке фамилий студентов и вывести в текстовый файл Students.txt. Каждую запись оформить в виде строки, заканчивающуюся точкой с запятой. Информацию из полей TAB, FIO, DATA, GRUP, STEPA разделить запятыми.
Ниже приведен код программы имеющей следующий алгоритм.
Ввести с клавиатуры в строку St путь и имя файла записей Students.dat. Открыть файл записей St для чтения.
Для упорядочения записей в алфавитном порядке фамилий студентов будем использовать индексный файл, поэтому в строку Sti введем с клавиатуры путь и имя индексного файла. В нашем случае это A:\Students.ntx.
Откроем индексный файл Sti для чтения.
Сделаем программу более гибкой чем исходные условия. Введем с клавиатуры в переменную CH литерного типа (CHAR) литеру - разделитель полей, в нашем случае это запятая.
Введем с клавиатуры в переменную CH1 литерного типа (CHAR) литеру - разделитель записей, в нашем случае это точка с запятой. Но следует заметить, что точка с запятой как разделитель не является обязательным атрибутом формируемого текстового файла. Она лишь логически отделяет строку текста от следующей строки. Фактическим разделителем строк является EOLN, то есть два байта: возврат каретки, перевод строки. Именно поэтому каждая строка начинается с первой позиции текста.
На основании пути и имени основного файла сформируем строку Stx - путь и имя выходного текстового файла A:\Students.txt путем замещения расширения .dat на расширение .txt.
Создадим новый текстовый файл и именем Stx.
Будем читать запись за записью из индексного файла Sti, пока не достигнем конца файла. Для каждой записи индексного файла будем считывать соответствующую запись их основного файла St. На основании этой записи будем формировать строку Strb, как сцепку полей и разделителей S_TAB + CH + S.FIO + CH + S.Data + CH + S.Grup + CH + S_STEPA + CH1. Вывод строки Strb в текстовый файл Stx.
Закрыть все три файла: St, Sti, Stx.
PROGRAM PR11;
{СОЗДАНИЕ ТЕКСТОВОГО ФАЙЛА, СОДЕРЖАЩЕГО ВСЕ ЗАПИСИ ОСНОВНОГО ФАЙЛА, УПОРЯДОЧЕННЫЕ В СООТВЕТСТВИИ С ИНДЕКСНЫМ ФАЙЛОМ С ИМЕНЕМ СТАРОГО ОСНОВНОГО ФАЙЛА И РАСШИРЕНИЕМ .TXT.
ПОЛЕ ОТ ПОЛЯ ОТДЕЛЯЕТСЯ РАЗДЕЛИТЕЛЕМ CH - ВВОДИМЫМ С КЛАВИАТУРЫ.
В КОНЦЕ ЗАПИСИ СИМВОЛ CH1 - ВВОДИМЫЙ С КЛАВИАТУРЫ.
КОПИРУЮТСЯ ТОЛЬКО ПОЛЯ TAB, FIO, DATA, GRUP, STEPA}
Type Student = record
Tab : Longint;
Fio : String[15];
Data : String[8];
Grup : String[7];
Stepa: Real;
DEL: BYTE;
DATE: STRING[8]
end;
Index = record
Fio : String[15];
Namber: integer
End;
Var L:Index; S:Student; St,Sti,Stx, Strb:String;
S_STEPA, S_TAB: String; CH, CH1: CHAR;
Fs: File of Student; Fi: File of Index;
FTXT: TEXT;
Begin
Writeln('Введите имя основного файла: '); Readln(St);
Assign (Fs,St); Reset(Fs);
Writeln('Введите имя индексного файла: '); Readln(Sti);
Writeln('Введите Разделитель полей: '); Readln(CH);
Writeln('Введите Разделитель записей: '); Readln(CH1);
Assign (Fi, Sti); Reset(Fi);
Stx:=COPY(ST,1,POS('.',ST)-1)+'.txt';{ПУТЬ И ИМЯ ТЕКСТОВОГО ФАЙЛА}
Assign (FTXT, Stx); Rewrite(FTXT);
While Not Eof(Fi) {ПРОСМОТР ИНДЕКСНОГО ФАЙЛА}
Do begin
Read(Fi, L);
Seek(Fs, L.Namber);
Read(Fs, S); {Чтение соотв. записи из основного файла}
WRITELN(S.TAB:9, S.FIO:15, S.Data:10, S.Grup:9, S.STEPA:9:2);
STR(S.TAB, S_TAB); {ПЕРЕВОД ЧИСЛА В СТРОКУ ТЕКСТА}
STR(S.STEPA:4:2, S_STEPA);
Strb := S_TAB+CH+S.FIO+CH+S.Data+CH+S.Grup+CH+S_STEPA+CH1;
WRITELN(FTXT, Strb) {ВЫВОД СТРОКИ В ТЕКСТОВЫЙ ФАЙЛ}
end;
Close(Fs); Close(Fi); Close(FTXT);
End.
В результате работы программы выходной текстовый файл Students.txt будет иметь следующие строки:
100010,АНИСИМОВ,11.04.91,ИС-11,500.00;
100000,АФАНАСЬЕВ,01.02.90,ПИ-11,500.00;
100012,БУНАКОВ,21.06.90,ИС-11,850.00;
100002,ВАСИЛЬЕВ,15.01. 91,ПИ-11,350.00;
100016,ВАХРУШЕВА,13.02. 91,ИС-11,350.00;
100007,ВЕЙНЕРМАН,09.06. 90,ПИ-11,500.00;
100017,ВЫСОЦКИЙ,06.08. 90,ИС-11,850.00;
100005,ГАВРИЛОВ,10.12. 90,ПИ-11,850.00;
100019,ГОРОХОВ,15.09. 90,ИС-11,500.00;
100009,ЗИБЕРМАН,13.09. 91,ИС-11,0.00;
100006,ИВАНОВА,15.05. 91,ПИ-11,500.00;
100020,НЕКРАСОВА,13.09. 91,ИС-11,350.00;
100021,ПАВЛИНОВ,01.02. 91,ПИ-11,350.00;
100011,ПЕТРОВ,03.05. 91,ИС-11,350.00;
100014,СЕМЕНОВ,30.01. 91,ИС-11,500.00;
100018,СЕРЕГИНА,05.04. 91,ИС-11,500.00;
100004,СИДОРОВ,01.11. 91,ПИ-11,500.00;
100001,СЫЧЕВ,13.03. 91,ПИ-11,500.00;
100003,УШАКОВ,12.12.90,ПИ-11,0.00;
100013,ФАДЕЕВ,04.10. 90,ИС-11,350.00;
100023,ФОМИН,13.09.89,ИС-11,850.00;
100015,ЩУКИНА,15.03. 91,ИС-11,0.00;
100008,ЯКУШЕВ,24.10. 90,ПИ-11,0.00;