
- •Утверждаю Зам.Директора по учебной работе
- •Основы Алгоритмизации и программирования учебно-методическое пособие
- •220301 Автоматизированные системы обработки информации и правления
- •Введение
- •Основные этапы решения задач на эвм
- •Глава 1 способы записи алгоритма
- •1.1 Алгоритм и его свойства
- •Схемы алгоритма
- •1.2 Структуры алгоритмов
- •1.2.1 Алгоритм линейной структуры
- •1.2.2 Алгоритм разветвляющейся структуры
- •1.2.3 Алгоритм циклической структуры
- •1.2.4 Алгоритм со структурой итерационных циклов
- •1.2.5 Алгоритм со структурой вложенных циклов
- •Глава 2 программа на языке высокого уровня
- •2.1 Системы программирования
- •2.2 Характеристика языка программирования Паскаль
- •2.3 Алфавит и структура программы на Паскале Алфавит программы
- •Структура программы
- •Глава 3 Стандартные типы данных
- •3.1 Данные. Типы
- •3.2 Вещественные типы
- •3.3 Целочисленные типы
- •3.4 Символьный тип
- •3.5 Логический тип
- •4 Представление основных структур программирования: итерация, ветвление, повторение
- •4.1 Линейная структура (следование)
- •Var X,y,f: real;
- •4.2 Разветвляющая структура (ветвление)
- •4.3 Циклическая структура (повторение)
- •4.3.1 Оператор цикла с параметром
- •I : Integrer; {номер числа }
- •4.3.2 Оператор цикла с постусловием
- •I,n: integer;
- •4.3.3 Оператор цикла с предусловием
- •4.3.4 Итерационные циклы
- •Var r,a:real;
- •Приближенное вычисление функций
- •Решение уравнений приближенными методами
- •Метод деления отрезка пополам
- •Xsl, Xpr, a, b, e, y1, y2, Lev, Prav, y: Real;
- •Метод Ньютона
- •Метод прохождения отрезка с переменным шагом
- •Вычисление определенных интегралов
- •1. Метод прямоугольников
- •X: Real;
- •2. Метод трапеций
- •X: Real;
- •Глава 5 Типы данных, определяемые пользователем
- •5.1 Пользовательский тип данных
- •5.1.1 Типизированные константы
- •5.1.2 Перечисляемый тип
- •I:1..6; loto: num;
- •5.2 Массивы
- •I : integer;
- •5.2.1. Работа с одномерными массивами
- •I,sum : integer;
- •Var a: array [1..N] of real;
- •Var I,s,r: integer;
- •I : list;
- •I : integer;
- •X : mass;
- •I, j, p, n, m, k:integer;
- •I, j, k, nd : integer;
- •Xmin : real;
- •X : mass;
- •Var I, j, nd : integer;
- •X : mass;
- •5.2.2 Работа с двумерными массивами( матицы)
- •Var I,j,n : integer;
- •I,j,n,m : integer;
- •5.2.3 Сортировка массивов
- •Сортировка методом "пузырька"
- •X : Array [1..Nmax] Of Real;
- •X : Array [1..Nmax] Of Real;
- •Сортировка выбором
- •Обменная сортировка
- •Var m:array[1..1000] of integer;
- •I,z,n:integer; Key:byte;
- •Сортировка слиянием
- •Var { Описание массивов и переменных}
- •X, y: array[1..1000] of integer;
- •5.3 Строковые типы
- •Var s: string[10];
- •5.3.1 Операции над строками
- •5.3.2 Стандартные процедуры и функции для строк
- •Функция Length
- •Функция Upcase
- •Функция Copy
- •Функция Роs
- •I, n, p: integer;
- •I: integer;
- •I: integer;
- •Insert (word2, text, I);
- •Insert (chr (k-32), t, I);
- •Insert (chr (k-80), t, I);
- •Insert (‘е’, t, I);
- •Глава 6 Процедуры и функции
- •6.1 Процедуры
- •I : Integer;
- •I, n: integer;
- •Input _ mas (k, n);
- •I,n : Integer;
- •I,k : Integer;
- •6.2 Функции
- •I:Integer;
- •2) Массивы;
- •I,n : Integer;
- •I : Integer;
- •I,tn,tk:Real;
- •Глава 7 Программирование рекурсивных алгоритмов
- •7.1 Понятие рекурсии
- •7.2 Техника построения рекурсивных алгоритмов
- •7.3 Формы рекурсий
- •If Prim(I) then
- •7.4 Рекурсия и итерация
- •7.5 Программирование с использованием рекурсии
- •Var p: Integer;
- •Var X, y: Integer; begin
- •Var z: Real; begin
- •Var I:integer; j:real;
- •Глава 8 Файлы
- •8.1 Текстовые файлы
- •I,n : Integer; {Вспомогательные переменные}
- •8.2 Типизированные файлы
- •X,m,s : Real;
- •8.3 Нетипизированные файлы
- •Глава 9 Записи
- •9.1 Описание записи
- •I: integer;
- •9.2 Оператор присоединения
- •I, j, k, m : integer;
- •X: real;
- •9.3 Вложенные записи
- •9.4 Записи с вариантами
- •Information: record
- •I, k, n : integer;
- •Vedom : Array [1..Nmax] Of Stud;
- •I,j : Integer;
- •Vedom : File Of Stud;
- •Vedom : File Of Stud;
- •I,j,kdv,k2 : Integer;
- •If Not Eof (Ftel) Then
- •If Not Eof(Ftel) then
- •If Not Eof(FilComp) then
- •Глава 10 Динамические структуры данных
- •10.1 Распределение памяти при выполнении программ
- •Верхняя граница памяти ms-dos
- •10.2 Ссылочные переменные
- •10.3 Процедуры управления кучей
- •10.4 Использование переменных ссылочного типа
- •I: Integer;
- •I, k : Integer;
- •Val(b, k, code);{Превратили второй символ в ч исло}
- •10.5 Списки
- •Var Ch : Char;
- •Var Ch : Char;
- •10.6 Деревья
- •10.7 Константы ссылочного типа
- •Глава 11. Язык Паскаль. Графический модуль Graph Список используемой литературы Основная
- •Дополнительная
8.2 Типизированные файлы
Типизированный или компонентный файл – это файл с объявленным типом его компонентов, т.е. файл с наборами данных одной и той же структуры. Объявление такого файлового типа имеет вид:
Var
Имя : File Of Тип_Записей;
где Тип_Записей – скалярный (число, символ) или сложный (массив, тип Record и др.).
Пример. Type
Anketa = Record
Fam,Im,Ot : String[10];
Numz : Integer;
O : Array[1..5] Of Integer;
End;
Var
FilAnk : file of Anketa;
Dan : File Of Real;
Fl : File Of Char;
Rank : Anketa;
X : Real;
Процедуры обработки типизированных файлов
Read (f,<сп. ввода>) – считывает данные из файла. Здесь <сп. ввода> - список ввода, содержащий одну или более переменных такого же типа, что и компоненты файла.
Write (f,<сп. ввода>) – записывает данные в файл.
Seek (f,<№ компоненты>) – устанавливает номер текущего компонента файла f. Назначенный компонент будет считан или записан последующей операцией ввода-вывода. Процедура организует прямой доступ в файл.
Функции обработки типизированных файлов
Eof (f) – возвращает результат типа Boolean: True, если считан последний компонент файла, и False – в противном случае. Файл должен быть открыт.
FilePos (f) – возвращает номер текущего компонента. Результат типа Longint.
Filesize (f) – возвращает реальное число записей в открытом файле. Результат типа Longint.
Пример
8.3 Программа
обработки файла, содержащего данные
простого типа.
При исследовании
некоторого технического объекта замерены
его параметры Xi
и записаны в набор данных StatDan
в виде вещественных чисел. Вычислить
их среднее значение Mx
и стандартное отклонение
по формулам:
Program Stat;
Var
F : File Of Real;
X,m,s : Real;
N : Integer;
Begin
Assign(F,’StatDan’);{ Здесь имя набора задано в виде}
Reset(F); { строковой константы StatDan}
S := 0;
M := 0;
N := 0;
While not Eof(F) do
Begin
Read(F,X);
N := N+1;
M := M+x;
S := S+Sqr(X);
end;
M := M/N;
S := Sqrt(S-Sqr(M))/ N;
Writeln(’Количество измерений - ’,N);
Writeln(’Среднее: ’,M:8:3,’ Отклонение: ’,S:8:3);
end.
8.3 Нетипизированные файлы
Нетипизированные файлы манипулируют с данными, не задумываясь об их типе. Нетипизированные файлы - файлы, совместимые с данными любого типа, позволяющие обмениваться информацией блоками; обрабатываются быстрее, чем типизированные. С помощью нетипизированных файлов можно записывать на диск произвольные участки памяти ЭВМ. Объявление такого файлового типа имеет вид:
f: File;
Принципы работы с нетипизированными файлами такие же, как и с типизированными. Нетипизированные файлы являются файлами прямого■ доступа. Файловая переменная должна быть связана с конкретным физическим файлом оператором Assign. Далее файл должен быть открыт для чтения или записи с помощью процедуры Reset(f) или Rewrite(f). В конце работы файл должен быть закрыт процедурой Close(f).
По умолчанию размер буфера передачи данных равен 128 байт. Можно явным способом указать иной размер буфера (чем он больше, тем быстрее происходит ввод-вывод), исходя из ресурсов памяти и удобства работы с данными. Для задания буфера надо после оператора Assign открывать файл расширенной записью процедур:
Reset (f, BufSize) и Rewrite (f, BufSize),
где f - переменная типа File; BufSize типа Word - задает число байтов, считываемых (или записываемых) из файла за одно обращение к нему.
Минимальный блок, который может быть записан или прочитан из файла, - 1 байт. Максимальный размер блока не может превышать 64К. Для обеспечения максимальной скорости обмена данными следует задавать длину, которая была бы кратна длине физического сектора дискового носителя информации. Фактически пространство на диске выделяется любому файлу порциями-кластерами, которые в зависимости от типа диска могут занимать два и более смежных секторов. Как правило, кластер может быть прочитан или записан за один оборот диска, поэтому наивысшую скорость обмена данными можно получить, если указать длину записи, равную длине кластера.
При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением Read и Write. Их заменяют процедуры:
BlockRead (Var f : file; Var A; n : Word; Var result: Word) и BlockWrite (Var f : file; Var A; n : Word; Var result : Word).
Эти процедуры осуществляют чтение в переменную А и запись из переменной А не компонентов файла или его строк, а блоков, состоящих из того количества байтов, которое определено для буфера файла f. Если n больше 1, то за одно обращение будет считано п емкостей буфера. Значение n < 1 не имеет смысла. Всегда должно выполняться условие:
n * BtrfSize < 64K.
Необязательный параметр result возвращает число буферов, считанное текущей операцией BlockRead. Аналогичный параметр в процедуре BlockWrite после каждой операции записи показывает число буферов, записанное этой операцией. Если операции ввода или чтения прошли успешно, то значения result будут равны соответствующим значениям п. Эти параметры могут использоваться для контроля выполнения BlockRead и BlockWrite.
Пример 8.4 Скопировать содержимое файла а1 в файл а2. Использовать нетипизированные файлы.
Размер блока нетипизированного файла в операторах Reset и Rewrite зададим равным 1. Количество записей, которые должны быть прочитаны или записаны за одно обращение к диску, в этом случае рассчитывается просто это размер памяти, необходимой для переменной в операторе BlockRead. Если Buf массив из 10000 элементов типа Char, то количество записей, считанных за одно обращение, равно 10000. Окончание считывания определяется по последнему параметру процедуры BlockRead. При последнем вводе количество фактически обработанных записей либо равно 0, либо меньше n.;
Program Task8;
Const nn = 10000;
Var
alFile, a2File : String[20];
Buf : Array[1 ..nn] of Char; {Массив из 10000 символов.}
f, f1 : File;
code : byte;
n, n1 : Word;
Begin
Repeat
Write ('Введите имя исходного файла');
Readln (a 1 File);
Assign (f, alFile);
{$1-} Reset (f,1); {$l+}
code := IOResult;
If Code <> 0 Then
WritelnC Ошибка чтения файла!')
Until Code = 0;
Write('BBeflHTe имя выходного файла');
Readln(a2File);
Assign (f 1, a2File);
Rewrite (f1, 1);
Repeat
BlockRead(f, Buf, Sizeof(Buf), n);
BlockWrite(f 1, Buf, n, n1);
Until (n = 0) or (noni);
Close (f1);
Close(f);
End.
Процедуры обработки нетипизированных файлов
Rename ( f; NewName) - переименовывает физический файл, ранее связанный с файловой переменной f, в имя NewName;
Erase (f) - стирает физический файл, связанный с файловой переменной f, с носителя информации (удаляемый файл должен быть закрыт);
GetDir (drive : Byte; Var S : String) - возвращает в строке S текущее имя каталога на диске с индексом drive;
ChDir (S : String) - устанавливает текущим каталог с именем, содержащимся в S;
MkDir (S : String) - создает каталог с именем S на диске;
RmDir (S : String) - удаляет пустой каталог с именем S с диска.