Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по TURBO PASCAL.doc
Скачиваний:
18
Добавлен:
04.11.2018
Размер:
1.13 Mб
Скачать
  1. Операции с элементами массива

Теперь вы уже можете составлять несложные программки для обработки данных в массиве. Мы уже с вами находили сумму элементов массива. Давайте теперь составим программу, которая

запросит массив из 10 элементов и увеличит на единицу каждый её элемент.

Как и раньше, для ввода массива мы будем использовать цикл for. Для оптимизации программы можно сразу в этом же цикле увеличивать элементы массива. Вот как это можно сделать:

Program Povyshenie_Stipendii;

Var A : array [1..10] of integer;

i : integer;

Begin

Writeln (’Введите 10 элементов массива: ’);

For i := 1 to 10 do

begin

Readln (A[i]);

A[i] := A[i] + 1; {выполнение задания}

end;

Writeln (’После повышения получим:’);

For i := 1 to 10 do

writeln (i, ’-ый элемент равен ’, A[i]);

End.

В программе можно использовать сразу несколько массивов. В одном может храниться, например, зарплата, во втором – премия, а в третьем – общий доход. Тогда, зная значения элементов первых двух массивов, можно вычислить элементы третьего массива. Для массовости алгоритма запросим количество элементов для обработки. Тогда из всех 100 элементов массива будут задействованы только первые n элементов, где n – число обрабатываемых элементов, оно вводится с клавиатуры. В этом случае удобней описать массив таким образом:

Var A : array [1..n] of integer;

Но так делать нельзя, так как компьютер перед запуском программы должен знать сколько надо выделить ячеек памяти для хранения массива. Переменная n же принимает значение только после запуска программы. В результате все элементы массива с номерами больше n не будут задействованы в программе, а будут только зря занимать память компьютера. И с этим приходится смириться. Однако можно использовать константу.

Основная программа может быть такой:

Program Tri_Massiva;

const max_n = 100;

Var A, B, C : array [1..max_n] of integer;

i, n : integer; { Три поросёнка }

Begin

Write(’Введите число служащих: ’);

readln (n);

if n > max_n

then begin

writeln(’Это число не может быть больше ’,max_n);

halt; { не забыли этот оператор? }

end;

Writeln (’Введите зарплаты служащих: ’);

For i := 1 to n do

Readln (A[i]);

Writeln (’Введите премии служащих: ’);

For i := 1 to n do

Readln (B[i]);

For i := 1 to n do

begin

C[i] := A[i] + B[i];

Writeln (i, ’-ый служащий получит ’, C[i], ’ $’);

end;

End.

Уверен, что в этой программе вы не найдёте ничего сложного!

  1. Анализ информации в массиве

Предположим, что у нас есть массив из 10 элементов:

7 30 4 15 32 6 18 41 6 40

И нам нужно найти максимальный элемент. Как бы вы сами нашли его? Одного взгляда на этот ряд чисел достаточно, чтобы сказать: это число 41. Но компьютер не может сразу взглянуть на все числа и найти нужное число. Ему приходится перебирать числа по одному. Это можно представить так: числа перед нами появляются по одному: сначала 7, потом 30, потом 4, затем 15... последним мы увидим число 40. Как из них найти максимальное?

Сначала предположим, что максимальным является первое число. Запишем где-нибудь, что 7 – это максимальное число. Когда перейдем ко второму числу, сравним его с максимальным: 30 больше чем 7? Да! Значит, теперь мы нашли новое максимальное число – 30. Продолжаем искать дальше. Сравниваем следующий элемент с максимальным, то есть 4 сравниваем с 30. 4 больше 30? Нет! Со спокойной совестью переходим к следующему числу. Как только новое число будет больше максимального, запомним его, как наибольшее число. В конце концов мы найдем ответ: максимальное число 41.

Переведём сказанное на язык Паскаль:

Max := a [1];

If a [2] > max then max := a [2];

If a [3] > max then max := a [3];

If a [4] > max then max := a [4];

И так далее, до последнего элемента.

Но это не очень удачный способ, так как мы не всегда знаем заранее, сколько элементов содержится в массиве. Поэтому лучше использовать цикл for:

Max := a [1];

For i := 2 to 10 do

If a [i] > max

then max := a [i];

Чаще бывает необходимо найти не только максимальный элемент, но и его номер. Например, если в таблице записаны стипендии студентов, то куда интереснее найти не только размер самой высокой стипендии, но и номер студента, который её получает. Как это осуществить в программе? Для этого при нахождении очередного элемента, претендующего на максимальный, надо будет запомнить не только его значение, но и его номер. На этот раз составим программу полностью:

Program Poisk_Krutyx_Studentov;

var A : array [1..10] of integer;

i, max, maxNr : integer;

begin

writeln ('Введите стипендии 10 студентов!');

for i := 1 to 10 do

readln (A [i]);

max := A [1]; { в max – значение максимального элемента, }

MaxNr := 1; { в MaxNr – номер этого элемента в массиве }

For i := 2 to 10 do

If A [i] > max

then begin

Max := A [i];

MaxNr:= i;{Запоминаем номер макс. элемента}

End

writeln ('Самый богатый студент с номером ', MaxNr);

End.

Попробуйте самостоятельно составить программу для нахождения минимального элемента массива и его номера. Что произойдёт, если в массиве будет несколько элементов с минимальными (максимальными) значениями?