
- •Содержание курса
- •Раздел 1. Базовые понятия информатики.
- •Раздел 2. Техническое и программное обеспечение.
- •Раздел 3. Средства обработки информации.
- •Раздел 4. Телекоммуникационные технологии.
- •Раздел 5. Базовые понятия алгоритмизации и программирования.
- •Раздел 6. Основы программирования.
- •Раздел 7. Прикладное программирование.
- •Раздел 1. Базовые понятия информатики
- •Тема 1. Информация как основной объект изучения информатики
- •Тема 2. Информационные процессы
- •Тема 3. Социально-экономические предпосылки развития информационно-вычислительной техники (ивт).
- •Раздел 2. Техническое и программное обеспечение.
- •Тема 4. Арифметические основы эвм
- •Тема 5. Физические основы эвм.
- •Тема 6. Программное обеспечение эвм
- •Тема 7. Специальное и прикладное программное обеспечение пэвм.
- •Раздел 3. Средства обработки информации.
- •Тема 8. Технологии обработки текстовой информации.
- •Тема 9. Технологии обработки графической информации
- •Тема 10. Технологии обработки числовой информации.
- •Тема 11. Организация информационных систем Понятие базы данных
- •Тема 12. Технологии мультимедиа.
- •Раздел 4. Телекоммуникационные технологии.
- •Тема 13. Сетевые технологии
- •Раздел 5. Базовые понятия алгоритмизации и программирования.
- •Тема 14. Алгоритмизация в профессиональной деятельности экономиста
- •Тема 15. Алгоритмы и исполнители
- •Раздел 6. Основы программирования.
- •Тема 16. Основные алгоритмические структуры обработки экономической информации
- •Тема 17. Организация и использование подпрограмм
- •Тема 18. Алгоритмизация процесса обработки табличной информации. Работа с числовыми массивами.
- •Тема 19. Алгоритмизация обработки строковой информации. Обработка записей.
- •Тема 20. Алгоритмизация обработки графической информации
Тема 18. Алгоритмизация процесса обработки табличной информации. Работа с числовыми массивами.
Массивы
Задача 1:
Составить программу подсчета суммы и произведения элементов одномерного массива.
Program sum-prois;
uses crt;
const
n = 100;
var
a: array [1…n] of real;
n, k, i: integer;
p, s: real;
begin
clrscr; s: = 0; p: =1;
writeln ('введите размер массива'); readln (nk);
writeln ('введите элемент массива');
for i:=1 to nk do
readln (a[i] );
for i:=1 to nk do
begin
s:= s + a[ i ];
p:= p * a[ i ];
end;
writeln ('Сум. = ', s, 'Произ. =' , p);
end.
Необходимо подготовить ячейки:
при накапливании суммы - s=0
при подсчете произведения - p=1.
Задача рассчитана на обработку массива с максимальным размером 100 элементов (n=100).
Конкретный размер массива вводится с клавиатуры (nk).
При каждом прохождении через цикл с клавиатуры вводится только один элемент массива. Два цикла for можно было объединить в один.
Двумерные массивы.
Двумерный массив можно представить в виде матрицы.
Описание двумерных массивов:
a - имя массива;
n, m - количество строк и столбцов в массиве.
Размер
массива - n
m.
a[i, j] - элемент стоящий на пересечении i-ой строки и j-го столбца.
Каждый элемент определяется двумя индексами.
a[i, i] - элементы главной диагонали.
a[i, 2] - элементы второго стлбца.
Задача 1.
Составить программу подсчета суммы элементов над главной диагональю в двумерном массиве.
Program matrix;
const
n=10;
m=10;
var
a: array [1…n, 1…m] of real;
i, j: integer; n, m: integer;
s: real;
begin s:=0;
writeln (' введите размер массива m, n);
readln (n, m);
{Ввод массива:}
for i:=1 to n do
for j:=1 to m do
readln (a[i, j]);
for i:=1 to n do
for j:=i to m do
s: s+a[i, j];
writeln('s=', s);
end.
Для ввода элементов массива используются вложенные циклы.
i - параметр внешнего цикла;
j - параметр внутреннего цикла;
i - меняется медленнее j.
Элементы массива необходимо вводить по строкам.
Сортировка массива
Под сортировкой массива подразумевается процесс перестановки элементов с целью упорядочивания их в соответствии с каким-либо критерием. Например, если имеется массив целых а, то после сортировки по возрастанию должно выполняться условие:
а[ 1 ] < а[ 2 ]<. . . а[SIZE],
size - верхняя граница индекса массива.
Так как можно сравнивать переменные типов INTEGER, REAL, CHAR и STRING, то можно сортировать массивы этих типов.
Задача сортировки распространена в информационных системах и используется как предварительный этап задачи поиска, так как поиск в упорядоченном (отсортированном) массиве проводится намного быстрее, чем в неупорядоченном.
Существует много методов (алгоритмов) сортировки массивов. Здесь мы рассмотрим два метода: метод прямого выбора; метод прямого обмена.
Сортировка методом прямого выбора
Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так.
1. Просматривая массив от первого элемента, найти минимальный и поместить его на место первого элемента, а первый на место минимального.
2. Просматривая массив от второго элемента, найти минимальный и поместить его на место второго элемента, а второй на место минимального.
3. И так далее до предпоследнего элемента. Ниже представлена программа сортировки массива целых чисел по возрастанию. Для демонстрации процесса сортировки программа выводит массив после каждого обмена элементов.
Program sort1;
const
SIZE=5;
var
a : array [1 . . SIZE] of integer;
i : integer; { номер элемента, от которого ведется поиск минимального элемента }
min: integer; { номер минимального элемента в части массива от i до верхней границы массива }
j: integer; { номер эл-та, сравниваемого с минимальным }
buf: integer; {буфер, используемый при обмене элементов массива}
k: integer;
begin
writeln (' Сортировка массива. ');
write('Введите', SIZE:3,' целых в одной строке ');
writeln ('через пробел и нажмите ');
for k:=l to SIZE do read(a[k]);
writeln (' Сортировка');
for i:=l to SIZE-1 do
begin
{ поиск минимального эл-та в части массива от а[ i ] до a[SIZE]}
min: =i;
for j:=i+l to SIZE do
begin
if a[ j ] < a[min] then min:= j ;
{ поменяем местами a[min] и a[i] )
buf: =a [ i ];
а [ i ] : =a [min];
а [ min ]: =buf;
{ выведем массив }
for k := l to SIZE do write (a [k], ' ');
writeln;
end;
end;
writeln ( 'Массив отсортирован. ') ;
end.
Сортировка методом прямого обмена
В основе алгоритма лежит обмен соседних элементов массива. Каждый элемент массива, начиная с первого, сравнивается со следующим, и если он больше следующего, то элементы меняются местами. Таким образом, элементы с меньшим значением продвигаются к началу массива (всплывают), а элементы с большим значением - к концу массива (тонут), поэтому этот метод иногда называют "пузырьковым". Этот процесс повторяется на единицу меньше раз, чем элементов в массиве.
Ниже представлена программа сортировки массива целых чисел по возрастанию. Для демонстрации процесса сортировки программа выводит массив после каждого цикла обменов.
Program sort2;
const
SIZE=5;
var
a : array [1 . . SIZE] of integer;
i : integer; { счетчик циклов }
k : integer; { текущий индекс элемента массива }
buf: integer;
begin
writeln (' Сортировка массива пузырьковым методом. ');
write('Введите', SIZE:3,' целых в одной строке через пробел ');
writeln (' и нажмите ');
for k:=l to SIZE do read(a[k]);
writeln (' Сортировка.');
for i:=l to SIZE-1 do
begin
for k:= l to SIZE - 1 do
begin
if a[ k ] < a[ k+1]
then
begin
{ поменяем местами a[ k ] и a[k +1] )
buf: =a [ k ];
а [ k ] : =a [ k + 1];
а [ k + 1 ]: =buf;
end;
end;
for k := l to SIZE do write (a [k], ' ');
writeln;
end;
writeln ( 'Массив отсортирован. ') ;
end.
Поиск в массиве
При решении многих задач возникает необходимость установить, содержит массив определенную информацию или нет. Например, проверить, есть ли в массиве фамилий студентов фамилия "Петров". Задачи такого типа называются поиском в массиве.
Для организации поиска в массиве могут быть использованы различные алгоритмы. Наиболее простой - это алгоритм простого перебора. Поиск осуществляется последовательным сравнением элементов массива с образцом до тех пор, пока не будет найден элемент, равный образцу, или не будут проверены все элементы. Алгоритм простого перебора применяется, если элементы массива не упорядочены.
Ниже приведен текст программы поиска в массиве целых чисел. Перебор элементов массива осуществляет инструкция REPEAT, в теле которой инструкция IF сравнивает текущий элемент массива с образцом и присваивает переменной naiden значение TRUE, если текущий элемент равен образцу. Цикл завершается, если в массиве обнаружен элемент, равный образцу (naiden=TRUE), или если проверены все элементы массива. По завершении цикла по значению переменной found можно определить, успешен поиск или нет.
Program poisk1;
var
massiv:array[l..10] of integer; { массив целых}
obrazec: integer; { образец для поиска }
naiden: boolean; { признак совпадения с образцом )
i : integer;
begin
{ ввод 10 целых чисел }
writeln (' Поиск в массиве. ');
write ('Введите 10 целых в одной строке через пробел '};
wrtteln (' и нажмите ');
write (' ->');
for i:=l to 10 do read (massiv[ i ]);
{ числа введены в массив )
write ('Введите образец для поиска (целое число) -> ');
readln(obrazec);
{ поиск простым перебором }
naiden:=FALSE; { совпадений нет }
i := l; { проверяем с первого элемента массива }
repeat
if massiv[ i] = obrazec
then naiden:=TRUE { совпадение с образцом }
else i:=i+l; { переход к следующему элементу}
until (i>10) or (naiden); { завершим, если совпадение}
{ с образцом или проверен }
{ последний элемент массива }
if naiden
then writeln ( ' Совпадение с элементом номер', i :3,'. ','Поиск успешен.')
else writeln ( ' Совпадений с образцом нет.');
end.
Поиск минимального (максимального) элемента массива
Алгоритм поиска минимального (максимального) элемента массива довольно очевиден: делается предположение, что первый элемент массива является минимальным (максимальным), затем остальные элементы массива сравниваются с этим элементом. Если обнаруживается, что проверяемый элемент меньше (больше) принятого за минимальный (максимальный), то этот элемент принимается за минимальный (максимальный) и продолжается проверка оставшихся элементов. Ниже представлена программа поиска минимального элемента в массиве целых чисел.
const
GRAN I CA= 10;
var
a:array [I..GRANICA] of integer; { массив целых }
min: integer; { номер минимального эл-та массива }
i: integer; { номер эл-та сравниваемого с минимальным}
begin
{ здесь инструкции ввода массива}
min:=l;{ пусть первый элемент минимальный }
for i:=2 to GRANICA do
if a[i] < a[min] then min:=i;
writeln ( 'Минимальный элемент массива: ', а [min]);
writeln ( 'Номер элемента: ' ,min);
end.
Многомерные массивы
В программе для хранения и обработки табличных данных можно использовать совокупность одномерных массивов. Например, таблица результатов производственной деятельности нескольких филиалов фирмы может быть представлена так:
zavodl: array [ I. . 4] of integer;
zavod2 : array [ I. . 4] of integer;
zavod3 : array [ I. . 4] of integer;
Для подобных случаев Паскаль предоставляет более удобную структуру данных - двумерный массив.
В общем виде описание двумерного массива выглядит так:
Имя:array[НижняяГраницаИндекса1..ВерхняяГраницаИндекса1,НижняяГраницаИндекса2 . . ВерхняяГраницаИндекса2] оf Тип,
где Имя - имя массива, array - слово языка ТП, показывающее, что описываемый элемент данных - массив;
НижняяГраницаИндекса1..ВерхняяГраницаИндекса1, НижняяГраницаИндекса2.. ВерхняяГраницаИндекса2 - константы или выражения типа INTEGER, определяющие диапазон изменения индексов и, следовательно, число элементов массива,
Тип - тип элементов массива.
Приведенная выше таблица может быть представлена в виде двумерного массива так:
product : array[l..3,l..4] of integer
Этот массив состоит из 12 элементов типа INTEGER.
Чтобы использовать элемент массива, нужно указать имя массива и индексы элемента. Первый индекс обычно соответствует номеру строки таблицы, второй - номеру колонки. Так, элемент product [ 2, 3] содержит число продуктов третьего наименования, выпущенных вторым заводом.
Значения элементов двумерных массивов выводят на экран и вводят с клавиатуры, как правило, по строкам, т. е. сначала все элементы первой строки, затем второй и т. д. Это удобно выполнять при помощи вложенных инструкций FOR. Следующий фрагмент программы выводит на экран значения элементов массива по строкам:
for i:=l to 3 do
begin
for j := 1 to 4 do write (product[i,j]) ;
writeln;
end;
Каждый раз, когда внутренний цикл завершается, внешний цикл увеличивает i на единицу, и внутренний цикл выполняется вновь. Таким образом, выводятся все компоненты массива product:
product [ 1, 1 ], product [ 1, 2 ], product [ 1, 4 ], product [ 2, 1 ], product [ 2, 2 1,... product [ 2, 4 ] и т. д.
При описании массивов в программе удобно использовать именованные константы как значения верхних границ индексов массива.