Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
20
Добавлен:
30.04.2013
Размер:
153.09 Кб
Скачать

88

7. Типовые алгоритмы обработки массивов

Анализ программ обработки массивов позволяет выделить несколько типовых алгоритмов. Ниже приводится несколько часто встречающихся алгоритмов. Алгоритмы будут представлены в основном на языке «псевдоПаскаль», т.е. в таком виде, когда на Паскале записаны «инвариантные» части алгоритма, а на русском языке - та часть текста, которая зависит от специфики применения алгоритма.

А1. Ввод массива с клавиатуры

Д

План ”Ввод-массива-вещественных-чисел”

Внутр. перем.: n, j : цел {n – фактический объем массива}

a[1..nmax] : вещ { nmax = 100 - константа}

Нач

{ввод числа элементов массива}

цикл

вывод (’Введите число элементов ’)

ввод (n)

если (n<1) или (n>nmax) то

вывод (’Ошибка’)

все

кцикл-до (n>=1) и (n<=nmax)

{ввод элементов массива}

цикл-для j от 1 до n

вывод (’введите ’,j,’-й элемент ’)

ввод (a[j])

кцикл

Кон

анный алгоритм представлен на псевдокоде:

Как видно из текста исполнимой части, алгоритм сводится к последовательному выполнению двух действий: вводу числа элементов и вводу элементов. Логика первого действия построена таким образом, что она будет завершена только в том случае, когда значение вводимого числа будет допустимым, т.е. принадлежать интервалу {1 . . nmax}.

Примечание. Объявление внутренних переменных приведено только для того, чтобы при кодировании на Паскале использовать корректные средства этого языка. Однако приведенный алгоритм корректный и для случая вещественных элементов массива.

Исполнимая часть алгоритма приведена ниже в виде фрагмента на Паскале:

{ввод числа элементов массива}

repeat

write (’Введите число элементов ’);

readln(n);

if (n<1) or (n>nmax) then

writeln(’Ошибка’);

{if}

until (n>=1) and (n>=nmax);

{ввод элементов массива}

for j:=1 to n do begin

write(’ введите ’,j,’-й элемент’);

readln(a[j]);

end; {for}

При этом предполагается, что в программе, где расположен этот фрагмент, объявлены следующие переменные:

Const

nmax = 100; {максимальный объем массива}

Var

n, j : integer; {n – фактический объем массива а}

{j – счетчик цикла}

a : array [1..nmax] of real;

А2. Вывод одномерного массива целых по k чисел в строке

Идея алгоритма заключается в том, что в теле цикла каждый раз выводится без смены строки один элемент, а строка меняется только после вывода элемента, номер которого кратен значению k.

Т

for j:=1 to n do begin {повторить для каждого элемента}

write (a[j]:7); {напечатать текущий в 7-ми позициях}

if (j mod k)=0 then {если текущий k–й в строке то}

writeln; {сменить строку}

{end if}

end; {for}

writeln; {перейти на новую строку}

екст А2 на Паскале приведен ниже.

А3. Вывод элементов прямоугольной матрицы по строкам

Алгоритм приведен для случая, когда число столбцов матрицы позволяет напечатать строку матрицы в одной строке экрана (при выводе на экран монитора в текстовом режиме ширина строки равна 80 символам).

{Пусть матрица имеет n строк и m столбцов,}

{а ее элементы – вещественные числа }

{Пусть также все m элементов помещаются в одной строке печати}

for i:=1 to n do begin

for j:=1 to m do {печатать все элементы строки j}

write (a[i,j]:8:2); {напечатать число в 8-ми позициях, }

{отобразив в нем 2 десятичные цифры}

{end if}

writeln; {сменить строку печати перед выводом

новой строки матрицы}

end;

Соседние файлы в папке лекции