
- •Утверждаю Зам.Директора по учебной работе
- •Основы Алгоритмизации и программирования учебно-методическое пособие
- •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:1..6; loto: num;
begin
randomize;
for i:=1 to 6 do
begin
loto :=random(49)+1;
writeln('Nr.',i:2,loto:6)
end
end.
В программе объявлен новый тип данных num. Возможные значения переменной типа num ограничены и находятся в интервале от 1 до 49. Далее пeрeменная loto объявляется как переменная типа num. Переменная i также является переменной диапазонного типа. Как известно, переменные диапазонного типа могут задаваться в разделе описания переменных. Randomize - встроенная математическая функция инициации датчика псевдослучайных чисел.
Эта программа имеет тот недостаток, что не все шесть выпавших в лото чисел могут оказаться различными. В этой маленькой программе еще не совсем ясна необходимость в переменных ограниченного типа, хотя в больших программах такая необходимость есть. Когда мы имеем дело с программой в две дюжины строк, очень неудобно помнить, какие именно значения могут иметь отдельные переменные. Например, сообщение, что i имеет тип integer, мало что нам говорит, в то время как переменная, имеющая диапазонный тип 1 .. 6, дает намного больше информации. Это не всегда удобно для пользователя, но зато делает программиста более уверенным в программе. Если только из-за ошибки в программе значение вычисленной переменной выйдет за допустимый интервал, то последует сообщение об ошибке. Таким способом можно получать дополнительный контроль. Переменные интервального типа в языке Паскаль используются, в частности, тогда, когда заранее известно, что значение переменной может находиться только в определенном интервале.
Пример 5.3 Рассчитать продолжительность рабочей недели в часах.
program rabweek;
type
day = (mo,tu,we,th,fr,sa,su);
workday = mo..fr;
var
den: workday;
time: integer;
begin
time := 0;
for den := mo to fr do time := time + 8;
write (time)
end.
Тип day объявляется путем перечисления всех значений (здесь перечислены сокращенные английские названия всех дней недели). Новый тип workday является типом-диапазоном и все возможные значения переменной типа workday ограничены и находятся в интервале от mо до fr. Из предыдущей (базовой) строки ЭВМ может определить, что здесь возможными значениями будут mо, tu, we, th, fr. Переменная den имеет тип workday. Если этой переменной захотят присвоить значение, отличающееся от перечисленных в списке от то до fr включительно, например su, то в этом случае появится сообщение об ошибке. Целая переменная time с каждым рабочим днем недели увеличивается на 8. Таким образом, мы найдем продолжительность рабочей недели, равную 40 часам.
5.2 Массивы
В Турбо Паскале четыре типа структурированных данных: массивы, записи, множества и файлы. Переменная или константа структурированного типа всегда имеет несколько компонентов. Каждый компонент, в свою очередь, может принадлежать структурированному типу, что позволяет говорить о возможной вложенности типов.
Массивовый тип - это одномерная или многомерная совокупность фиксированного числа однотипных элементов.
Массивы (регулярные типы данных) представляют собой упорядоченную последовательность переменных одного типа. Элементы массива являются его компонентами. Все компоненты относятся к одному типу, его называют типом компонент. Каждая компонента может быть явно обозначена с помощью имени переменной массива, за которым в квадратных скобках следует индекс. Индекс - это величина, характеризующая положение элемента относительно начала массива. Индексом может быть произвольное выражение порядкового типа, заключенное в квадратные скобки. Время, требуемое для доступа к любой компоненте, не зависит от значения индекса. Поэтому о массивах можно говорить как об объектах, структура которых допускает прямой доступ.
Переменные b[1], b[2], ..., b[40] являются элементами массива b; с[1], с[2], ..., с[40] - элементы массива с. b[12] - двенадцатый элемент массива b, c[39] - тридцать девятый элемент массива с. Если массив состоит только из 40 элементов, то нельзя использовать переменную b[41], так как такой переменной нет в массиве. В качестве индекса может использоваться выражение, например:
a[i + 2 ], b [2 * ( i + 1) + 1].
Каждому массиву, используемому в программе, выделяется место в памяти. Но в отличие от простых переменных массиву отводится не одна ячейка, а последовательность расположенных друг за другом ячеек, в каждую из которых записывается значение соответствующего элемента.
Массивы, как и простые переменные, подлежат описанию в разделе переменных. Например,
var
а : array [1 .. 40] of real;
b,c : array [1 .. n] of real;
d : array [5 .. 20] of integer;
p : real;
В приведенном примере описаны четыре массива: а, b, с, d и простая переменная р. Ключевое слово array означает, что описываемый объект является массивом. В описании массива содержатся следующие сведения:
сведения о типе элементов массива (элементы массивов а, b, с - вещественные, массива d - целые);
диапазон изменения индексов, определяемый граничной парой, например: 1.. 40, 1 .. n, 5 .. 20. Нижняя граница отделяется от верхней двумя точками. Нижняя граница показывает наименьшее возможное значение индекса, верхняя - наибольшее. Очевидно, что нижняя граница не может превосходить верхнюю.
В описании массивов df и cf
df : array [1 .. 10] of real;
cf : array [1 .. 10] of real
указаны один и тот же тип элементов и одинаковая граничная пара, поэтому такое описание может быть заменено более коротким:
df, cf : array [1 .. 10] of real.
ели несколько массивов имеют один и тот же тип и одинаковые гранитные пары, то их описания можно объединить, разделив имена массивов запятыми.
Каждому из массивов df и cf выделяется по 10 последовательно расположенных друг за другом ячеек памяти. О том, какое количество ячеек памяти нужно выделить массиву, машина "узнает" из описания.
Пусть массив K описан следующим образом:
vаr К : array [n .. m] of integer.
Какое количество ячеек должно быть выделено для хранения элементов массива К? Это зависит от значений n и m. Выделение памяти для переменных и массивов производится раньше, чем выполняется какой-либо оператор программы, n и m должны получить значение прежде, чем начнется процесс выделения памяти для переменных. Определить значения n и m можно в разделе констант, который помещается в программе между разделом меток и переменных.
Пример 5.4 Программа чтения элементов массива и вывода элементов этого массива, помноженных на число .
program pri;
const n = 1; m = 10;
var