
- •Утверждаю Зам.Директора по учебной работе
- •Основы Алгоритмизации и программирования учебно-методическое пособие
- •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 Список используемой литературы Основная
- •Дополнительная
I: Integer;
Begin
Assign (ff, 'Dat.txt');
Reset(ff);
for i := 1 to 1000 do
Begin
Readln(ff, Buf);
GetMem(L[i], Length(Buf) + 1);
L[i] := Buf;
End;
End.
Вместо выделения для строк 256К (256 символов на строку 1000 раз) программа выделила 4К (4 байта на указатель 1000 раз).
СЛУЧАЙ 3. В программе необходимо использовать массив большой размерности.
Пример 10.4 Найти среднее значение элементов массива d, состоящего из 200 строк и 200 столбцов.
Под элементы двухмерного массива такого размера потребуется 200x200x6 байтов памяти, что составит более 234К. Переменная d : array [1..200, 1..200] of Real, не может быть объявлена. Нужно реорганизовать массив так, чтобы он распался на части, не превышающие по отдельности 64К.
Program Task12;
Type
d200 = Array [1 . . 200] of Real;{Объявлен тип строки матрицы}
dPtr = ^200;{Объявлен тип ссылки на строку}
dPtr200 = array'[1..200] of dPtr;{Tnn для массива указателей}
Var
d : dPtr200; {Объявили массив указателей, каждый элемент которого указывает на одномерный массив d200}
S : Real; i, j : Integer;
Begin
S:=0;
For i := 1 to 200 do
Begin
New(d[i]);
{Выделили память под строку из 200 элементов типа Real, на которую указывает ссылка d[i]}
For j := 1 to 200 do
Begin
d[i] ^ [j] := random(10);
{Формирование элемента с помощью датчика случайных чисел и подсчет суммы элементов}
S := S + d[i] ^ [j];
End;
Dispose(d[i]);
End;
S := S/40000; Writeln('S= ', S:2:2);
End.
Матрица 200 на 200 в программе определяется как статический массив из 200 ссылок на динамические массивы по 200 элементов. Одновременно память выделяется только для одной строки. Выделение памяти для каждой следующей строки происходит после освобождения памяти, занятой предыдущей строкой. Для каждого массива понадобится блок длиной 200x6 байтов. Обращение к элементу массива d (разыменование) имеет вид: d[i] ^ [j], где i - номер строки, a j - номер столбца.
СЛУЧАЙ 4. В программе необходимо применять ссылки на данные, имеющие разную структуру.
Пример 10.5 Компоненты файла f1 являются объектами типа "игрушка". Компоненты файла f2 являются объектами типа "багаж". "Игрушка" - это запись, состоящая из следующих полей: наименование игрушки, цена игрушки, возрастные границы. "Багаж" - это запись, состоящая из полей: количество предметов, вес предметов. В текстовом файле f расположена последовательность a,b,a2b2 ... anbn, где каждое а, - это символ "i" или "б", а каждое bi - натуральное число. Написать программу, в результате выполнения которой для каждого i = 1, 2, ..., n выводится: если а, есть символ "i" - название и стоимость игрушки, информация о которой содержится в bi,-й компоненте файла f1; если аi есть символ "б" - количество мест и вес багажа, информация о котором содержится в bi:-й компоненте файла f2. Программу составить так, чтобы в каждый момент ее выполнения было выделено место в памяти не более, чем для одного объекта типа "игрушка" или "багаж".
Program Task13;
Type
lgru = Record {Объявили записной тип "игрушка"}
Name : String[15];
Cost : Integer;
Age1, Age2 : Integer;
End;
Bagaz = Record{Объявили записной тип "багаж"}
Count : Integer;
W : Real;
End;
Var
Ig : ^ lgru;
Ba : ^Bagaz;{Объявили ссылочные переменные, которые будут ссылаться на переменные типа запись}
f1 : File of Igru;
f2 : File of Bagaz;
f : Text;