
- •Утверждаю Зам.Директора по учебной работе
- •Основы Алгоритмизации и программирования учебно-методическое пособие
- •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 Список используемой литературы Основная
- •Дополнительная
Var X, y: Integer; begin
First(X, Y);
end;
Procedure First; {Снова краткий вызов первой процедуры}
Var z: Real; begin
Second(Z); end;
Директиву Forward можно использовать не только в рекурсивных подпрограммах, но и для более удобного размещения подпрограмм: сначала описать все заголовки, а затем - сами подпрограммы. Эту директиву не следует использовать в модулях для подпрограмм, объявленных в интерфейсе модуля.
Помимо непосредственной, возможна косвенная рекурсия, при которой подпрограмма а вызывает подпрограмму b, а подпрограмма b, в свою очередь, — подпрограмму а. Но как описать две подпрограммы, вызывающие одна другую? Ведь в описании любой из них, которое расположено первым в разделе описаний основной программы, будет вызов подпрограммы, описываемой дальше (т.е. в момент вызова еще неизвестной). Выход из этого затруднения предоставляет так называемое опережающее описание.
В Turbo Pascal допускается применение опережающего описания используемой подпрограммы, которое состоит только из ее заголовка, за которым следует директива FORWARD. В этом случае полный текст подпрограммы может быть расположен дальше в любом месте раздела описаний процедур и функций.
Как это будет выглядеть на примере подпрограмм а и b, о которых шла речь выше? Схема исходного текста программы, в которой описаны указанные подпрограммы, может выглядеть так.
program к;
Var I:integer; j:real;
procedure a (x:integer);
forward; {Опережающее описание}
procedure b (y:real);
begin
a(i) {Вызов еще не определенной процедуры}
end;
procedure a;
begin
b(j) end;
Здесь для процедуры а использовано опережающее описание. Затем идет описание процедуры b, из которой вызывается процедура а. Однако благодаря опережающих описанию процедуры а компилятор не зафиксирует это как наличие неизвестно! идентификатора (т.е. ошибку). За описанием процедуры b следует описание процедуры а (без повторения списка формальных параметров, поскольку информация о параметрах уже содержится в опережающем описании процедуры а).
Глава 8 Файлы
Данные, обрабатываемые программой, могут находиться не только в оперативной памяти компьютера, но и располагается на устройствах внешней памяти в файлах. Под файлом понимается либо именованная область внешней памяти ПК (жесткий диск, дискета, CD и т.д.), либо логическое устройство – потенциальный источник или приемник информации. Все что является файлом в MS DOS, является физическим файлом в Паскале.
Файл – это поименованная область памяти на внешнем носители, предназначенная для хранения информации. Файл с точки зрения языка Паскаль – это структурированный тип данных, состоящий из последовательности компонентов в большинстве случаев одного типа и одной длины. Число компонентов, называемое длиной файла, определением типа файла не фиксируется.
В зависимости от способа объявления в Паскале можно выделить три вида файлов:
типизированные, может состоять из записей любого типа;
текстовые, состоит из строк символов. Конец записи определяется концом строки. Чтение и запись в файл осуществляется посимвольно;
нетипизированные, фактически представляют собой каналы ввода/вывода нижнего уровня, используемые в основном для прямого доступа к любому файлу на диске, независимо от его типа и структуры.
Существует два способа доступа к компонентам файла; последовательный и произвольный (прямой). При последовательном способе доступа поиск требуемого элемента начинается с начала файла и проверяется по очереди каждый элемент, пока не будет найден нужный. Произвольный способ доступа позволяет обращаться к элементу файла по его порядковому номеру.
Для типизированных и нетипизированных файлов можно организовать прямой доступ к любому элементу с помощью стандартной процедуры Seek, которая перемещает текущую позицию файла к заданному элементу.
Когда программа завершает обработку файла, его нужно закрыть. Только после этого связанный с ним внешний набор данных будет обновлен. Затем файловая переменная может быть связана с другим набором данных, или обновленный набор данных может быть связан с другой файловой переменной.
Основными операциями над файлами являются:
1. Связь файла с набором данных осуществляется с помощью специальной процедуры Assign, которая в общем виде записывается так:
Assign(имя_файла, имя_НД);
Эта процедура присваивает имя внешнего набора данных имя_НД переменной файлового типа имя_файла.
Например. Assign(dan,’Isx.txt’); связь с файлом текущего каталога
Assign(datain,’а:\хх.dat’); связь с файлом на диске а:
Assign(datain,’LPT1’); связь с принтером
Assign(datain,’’); связь со стандартным файлом, как правило, файлом ‘CON’.
В операционной системе внешняя аппаратура, такая как клавиатура, принтер, дисплей, рассматриваются как устройства. С точки зрения программиста устройство можно представлять себе как набор данных и с ним можно работать, используя те же процедуры и функции, которые применяются для работы с файлом.
2. Процедура Rewrite (имя_файла) создает и открывает новый файл.
Параметр имя_файла является файловой переменной, соответствующей любому типу файла. Процедура Rewrite создает новый набор данных (внешний файл), имя которого присвоено параметру имя_файла процедурой Assign. Если внешний файл с указанным именем уже существует, то он удаляется и на его месте создается новый пустой файл. Текущая позиция в файле устанавливается на начало файла.
Если открывается текстовый файл, то он становится доступным только для записи.
3. Процедура Reset(имя_файла) открывает существующий файл. Параметр имя_файла является файловой переменной, соответствующей любому типу файла. Если файл уже открыт, то он сначала закрывается, а затем открывается вновь. Текущая позиция файла устанавливается на начало файла.
Если открывается текстовый файл, то он становится доступным только для чтения.
4. Чтение из файла осуществляется с помощью известного оператора Read, который в общем виде записывается так:
Read(имя_файла, список); или
Readln(имя_файла, список); только для текстового файла!
Например. Read (dan,str);
Readln (datain,a,b,c);
5. Запись в файл осуществляется с помощью известного оператора Write, который в общем виде записывается так:
Write(имя_файла, список);
Writeln(имя_файла, список); - только для текстового файла
Например. Write (fl,x,y);
6. Закрытие выполняется процедурой Сlose(имя_файла) для открытого файла.
Параметр имя_файла может соответствовать файлу любого типа, который был предварительно открыт с помощью процедур Reset, ReWrite или Append. В момент закрытия осуществляется полное обновление внешнего набора данных, связанного с файловой переменной имя_файла, после чего связь с набором данных разрывается. Потом файл можно открыть снова.
Например. Close(fl);
7. Усечение файла выполняется процедурой Truncate(имя_файла). Параметр имя_файла может соответствовать файлу любого типа. Все записи после текущей позиции в файле имя_файла удаляются и текущая позиция становится концом файла (т.е. функция EoF(имя_файла) принимает значение True).