
- •Утверждаю Зам.Директора по учебной работе
- •Основы Алгоритмизации и программирования учебно-методическое пособие
- •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 {Ball}
WriteLn('Введите массив данных из 25 строк');
for i := 1 to 25 do
ReadLn(tbl[i].fam, tbl[i].b1, tbl[i].b2, tbl[i].b3, tbl[i].b4, tbl[i].b5);
for i := 1 to 25 do
begin
tbl[i].sb := (tbl[i].b1+
tbl[i].b2+tbl[i].b3+tbl[i].b4+tbl[i].b5)/5;
WriteLn(tbl[i].sb);
end;
End. {Ball}
9.2 Оператор присоединения
Использование в программе селекторов записи (составных имен) приводит к ее удлинению и излишней громоздкости. С целью устранения этого неудобства в языке Паскаль используется оператор присоединения (оператор with), который позволяет осуществлять доступ к компонентам записи таким образом, как если бы они были простыми переменными. Общий вид оператора присоединения таков:
with <имя записи> do <оператор>
В операторе к компонентам записи можно обращаться только с помощью имени компонента. Например, ввод исходных данных для отдельных компонентов записи tbl в предыдущей программе может быть организован следующим образом:
for i := 1 to 25 do
with tbl[i] do
ReadLn(fam,b1 ,Ь2,ЬЗ,Ь4,Ь5);
Окончательный вариант программы имеет следующий вид:
Пример 9.2 Определение среднего балла и сортировка
Program Shall;
Type
stud = record
fam : string[15];
b1,b2, bЗ, b4, b5:2..5; sb: real;
end ;
Var
tbl:array[1..25]ofstud;
у: stud;
I, j, k, m : integer;
X: real;
Begin {Sball}
{ввод исходных данных}
Writeln('Введите количество записей');
Read(m); {m - число записей в массиве tbl}
WriteLn(' Введите компоненты записей');
for i := 1 to m do
with tbl[i] do
ReadLn(fam, b1, b2, bЗ, b4, b5);
for i := 1 to m {вычисление среднего балла}
with tbl[i] do
sb := (b1+b2+bЗ+b4+b5)/5 ;
for i := 1 to m-1 do {copтировка списка группы студентов}
begin
k:=i;
x := tbl[i]. sb;
for i := i+1 to m do
if tbl[i] > x then
begin
k:=j;
x := tbl[j]. sb;
end;
у := tbl[k];
tbl[k] := tbl[i];
tbl[i] := y;
end;
for i := 1 to m do {печать результатов}
with tbl[i] do
WriteLn(fam : 15, sb : 6 : 3)
End. {Sball}
В приведенной программе приняты следующие обозначения: т -число студентов в группе (может быть представлено целым числом от 1 до 25); у - вспомогательная запись, необходимая для промежуточного запоминания элемента массива tbl при перестановке значений его элементов; х, к - вспомогательные переменные для запоминания максимального текущего значения среднего балла и его индекса в массиве записей.
9.3 Вложенные записи
Допускается использование записи в качестве элемента другой записи. В результате получается сложная запись.
Пример 9.3 В памяти ЭВМ требуется хранить анкетные данные, представленные в виде следующей таблицы.
Анкета |
|||||||
№ п/п |
Ф.И.О. |
Дата рождения |
Пол |
||||
Фамилия |
Имя |
Отчество |
Год |
Месяц |
Число |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обозначим запись через идентификатор anketa, который определим в разделе описания переменных следующим образом:
Var
anketa : record
npp : integer;
fio: record
fam, im, ot: string[15];
end ;
dr: record
god: 1900. .2100;
mes: string[8];
den: 1 ..31;
end ;
pol: string[3];
end;
Элементами записи anketa являются также записи fio и dr. В результате получается сложная запись. Запись anketa содержит анкетные данные одного лица. Если программист намеревается хранить анкетные данные о 100 человеках, то либо запись anketa должна иметь тип массива с числом элементов 100, либо каждый элемент второго уровня (nрр, fiо, dr, pol) должен быть массивом с числом элементов 100.
При обращении к компонентам сложных записей можно использовать оператор with, имеющий вложенную структуру с любой степенью вложенности. Например, обращение к полю происходит с помощью составного имени anketa.dr.god, а с использованием оператора присоединения - с помощью конструкции
with anketa do
with dr do
god := 1965 ;
Или несколько проще:
with anketa, dr do
god := 1965 ;
Использование оператора присоединения существенно облегчает написание программ и делает более эффективным многократное обращение к полям одной записи.