- •Литература
- •10. Основы программирования на языке turbopascal. Учебное пособие. Б. А. Крымов, а. О. Мовшин, с. В. Кулакова. Воронеж: вгта. 2000.
- •Тема 1. Основные понятия информатики
- •1.1. Место информатики в человеческой деятельности
- •1.2. Информационные процессы: подробности
- •1.2.1. Процесс сбора данных
- •1.2.2. Процесс хранения данных.
- •1.2.3. Процесс передачи данных
- •Оконечное оборудование
- •1.2.4. Процесс обработки данных
- •Тема 2. Алгоритмизация и программирование
- •2.1. Алгоритм и его свойства
- •2.2. Формы записи алгоритма
- •Var m, n : integer;
- •2.3. Базовые алгоритмические структуры
- •2.4. Последовательность подготовки и решения задачи на эвм
- •Var X,y,с11,с12,с21,с22,a,b,Dx,Dy,d : real;
- •2.5. Конструктивные элементы языка pascal
- •2.6. Структура программы на языке pascal Программа на pascal состоит из двух частей: описательная часть и собственно программные операторы (исполняемая часть – список действий).
- •Var m, n : integer;
- •Тема 3. Данные и выражения простых типов
- •3.1. Данные целого типа
- •Var имя1, имя2,...: integer;
- •3.2. Данные вещественного типа
- •Var имя1, имя2,...: real;
- •Var a2, result, psi : real;
- •3.3. Данные логического типа
- •Var имя1, имя2,...: boolean;
- •3.4. Данные символьного типа
- •Var имя1, имя2, ... : char;
- •3.5. Данные ограниченного типа
- •Var month : summer;
- •3.5. Порядок выполнения операций
- •Тема 4. Основные операторы языка pascal
- •4.1. Оператор присваивания
- •4.2. Ввод числовых данных с клавиатуры
- •4.3. Вывод данных на экран монитора
- •Writeln(a,b,c);
- •Writeln(a,' ',b,' ',c)
- •Var omega, q: real;
- •4.4. Условные и составные операторы
- •Полная форма условного оператора if предназначена для программирования разветвлений и имеет вид:
- •If Логическое выражение then оператор 1 else оператор 2;
- •Var a, b, max: real;
- •Краткая форма условного оператора if. Эта форма используется при программировании ответвлений и имеет вид:
- •If Логическое выражение then оператор 1;.
- •Var a, b : real;
- •Вложенная ветвящаяся структура
- •X, y, a, b : real;
- •Var X, a, z : real;
- •4.5. Операторы цикла
- •4.5.1. Оператор цикла с предусловием Структура оператора
- •X, y, deltaX, a, b : real;
- •4.5.2. Оператор цикла с постусловием
- •X, y, deltaX, a, b : real;
- •4.5.3. Вычисление сумм
- •Var s : real;
- •Var s : real;
- •X, s, eps, a : real;
- •X, s, eps, a : real;
- •4.5.4. Оператор цикла с параметром
- •Var X, y, deltaX, a, b: real;
- •Var s: real;
- •Тема 5. Структурированные типы данных
- •5.1. Одномерные массивы
- •Var имя массива : array [тип индекса] of тип элементов;
- •Var имя массива : имя типа;
- •Имя массива [ индекс ]
- •5.2. Организация циклов с использованием массивов
- •I: integer;
- •Var max : real;
- •I : integer;
- •Var I, kP,j : integer ;
- •5.3. Двумерные массивы
- •Var I, k : integer ;
- •Var c:array [-1..8,0..19] of real;
- •I,j:integer;
- •5.4. Примеры задач с двумерными массивами
- •Var mat : array [1..N, 1..N] of real ;
- •I, j, i1, i2 : integer ;
- •Var I, j : integer;
- •Тема 6. Подпрограммы
- •6.1. Вводные понятия
- •6.2. Процедуры
- •Var p, s : real;
- •Var имя1, имя2, ... : тип параметров;
- •6.3. Функции
- •Function имя функции (список форм. Параметров) : тип результата;,
- •Var p : real;
- •Тема 7. Обзор языков программирования
- •Приложение 1 Наиболее часто используемые служебные слова pascal
- •Приложение 2 Стандартные функции pascal
Имя массива [ индекс ]
В качестве индекса можно использовать константу, переменную или выражение, соответствующие типу индексов, объявленному в описании массива.
Пример 5.3
b[100], c[k], yes[j+2]
Приведены обращения к элементам массивов с именами b, c и yes. Значения переменных k и j должны быть определены заранее.
Ввод и вывод одномерных массивов. Для ввода и вывода всего массива или его части используют операторы цикла, как правило, оператор for.
Пример 5.4
var
z : array [10..100] of integer;
k : integer;
begin
for k := 10 to 100 do read (z [ k ]);
for k := 21 to 30 do write (z [ k ]);
В приведенном фрагменте программы вводятся все элементы массива z целого типа, а выводятся 10 его элементов – с 21-го по 30-й.
Отдельные элементы массивов вводятся так же, как и простые переменные.
5.2. Организация циклов с использованием массивов
Задачи такого рода являются весьма распространёнными в вычислительной практике, и программировать их можно с использованием любого из трёх описанных выше операторов цикла. Но наилучшим для этой цели часто является оператор for. Ниже приведены примеры организации циклических вычислительных процессов с помощью оператора for.
Пример 5.5. Дан вектор a, содержащий 50 компонент. Вычислить сумму его элементов.
Вначале надо ввести массив в компьютер, затем – вычислить сумму элементов. Как и любая сумма нескольких чисел, данная сумма вычисляется методом накопления.
var
I: integer;
s: real;
a : array [1..50] of real;
begin
write ('введите массив ');
for i:=1 to 50 do read(a[i]);
s:=0; { обнуление ячейки s, предназначенной
для накопления суммы }
for i:=1 to 50 do s := s + a[i];
{ накопление суммы элементов массива }
writeln ('s=', s:10:3)
end.
Пример 5.6. Дан вектор b, содержащий 100 компонент. Найти наибольший элемент этого вектора.
Суть алгоритма задачи в следующем. Используется переменная с именем мах, в которой в каждый момент выполнения программы содержится максимум из уже просмотренных элементов (текущий максимум). Вначале мах равна первому элементу b[1]. Перебираются все элементы массива, и если встречается элемент больше мах, то его значение присваивается мах.
Var max : real;
I : integer;
b : array [1..100] of real;
begin
write ('введите массив');
for i:=1 to 100 do read (b[i]);
readln;
max:=b[1]; { присваивание текущему максимуму
max его начального значения }
{ поиск элемента вектора с наибольшим значением }
for i:=2 to 100 do
if b[i] > max then max := b[i];
writeln ('max=', max:10:3)
end.
Пример 5.7. Дан массив вещественных чисел A(10). Упорядочить этот массив по возрастанию его элементов, т.е. сделать так, чтобы каждый следующий элемент массива оказался бы больше предыдущего.
Рассмотрим один из наиболее простых алгоритмов, разработанных для задач такого рода, так называемый “метод пузырька”. Идея этого алгоритма заключается в том, что сравниваются два соседних элемента исходного массива – сначала a1 c a2, потом a2 c a3, далее a3 с a4 и т.д. Если первый элемент в паре больше второго, то меняют их численные значения, в результате чего первый элемент получает значение второго, а второй – первого. В противном случае никаких замен в паре не производят, а переходят к сравнению элементов второй пары. Каждая перестановка элементов фиксируется, т.е. при перестановке увеличивается значение специальной переменной kP.
Как поменять местами содержимое a[i] и a[i+1]? Задача кажется достаточно простой – надо записать два оператора
a[i] := a[i+1]; a[i+1] := a[i];
Однако, предположим, что значение a[i] равно 1, а a[i+1] – 10. Тогда при выполнении первого присваивания a[i] станет равным 10, так же, как и a[i+1], а старое значение a[i] потеряется. Значит, это вариант выполнения не годится.
Вспомним известную головоломку о двух стаканах: один стакан наполнен водой, другой – вином. Как поменять местами их содержимое. Наверняка все знают, что для решения задачи нужен третий, пустой стакан. Сначала из стакана с вином выливают содержимое в третий стакан, освобождая первый стакан, затем воду из второго стакана выливают в свободный первый стакан, и, наконец, из третьего стакана выливают вино в освободившийся второй. Аналогично решается задача и с элементами массива. Роль «третьего стакана» сыграет вспомогательная переменная b, а решение сведется к следующей последовательности операторов:
b := a[i]; { «освобождаем» первый элемент, сохраняя его
содержимое в «третьем стакане»}
a[i]:= a[i+1]; { переписываем значение 2-го элемента в 1-й }
a[i+1]:=b; { восстанавливаем сохраненное содержимое }
Вернёмся к алгоритму упорядочивания. В результате выполнения всего алгоритма происходит как бы постепенное «проталкивание» наибольшего элемента в конец массива (как пузырек воздуха в воде всплывает наверх – отсюда название метода), причем функцию «толкача» в алгоритме выполняет внутренний цикл. Как только наибольший элемент массива займет предназначенное ему последнее 10-е место, описанную процедуру повторяют с оставшимися неупорядоченными 9-ю элементами, в результате чего наибольший из оставшихся элемент займет последнее место в массиве и т.д.
Для получения нужного результата такую процедуру повторяют до тех пор, пока после очередного просмотра массива не получим число перестановок kP = 0. Это означает, что весь массив упорядочен, и надо заканчивать выполнение программы.
const n = 10;