Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль.doc
Скачиваний:
58
Добавлен:
07.06.2015
Размер:
1.21 Mб
Скачать

10. Примеры программ обработки массивов

Пример 1. Ввести в ЭВМ массив, содержащий не более 100 чисел вещественных чисел. Вывести числа, стоящие на четных местах в массиве.

Рrogram Wtr;

Const

Nmax=100;

Var

X : Array[1..Nmax] Of Real;

i, n : Integer;

Begin

Writeln('Введите количество чисел');

Readln(n);

Writeln('Введите массив');

For i:= 1 To n Do

Read (X[i]);

For I:= 1 To n div 2 Do

Write (X[2*i]);

End.

Пример 2. Ввести в ЭВМ массив (последовательность) из n чисел (n<=100). Подсчитать количество положительных и отрицательных чисел, их суммы и средние значения.

Алгоритм (общий подход).

1. Ввести числа.

2. Положить количества положительных, отрицательных чисел и суммы = 0

3. Для номера числа от 1 до n выполнить

вычислить соответствующие суммы и количества

4. Вывести суммы, количества и средние.

5. Закончить.

Уточним этот алгоритм.

1.1. Ввести количество чисел n

1.2. Для номера числа (i) от 1 до n выполнить

ввести числоi

2. Положить количества положительных, отрицательных чисел и их сумм =0

3. Для номера числа от 1 до n выполнить

3.1. Если числоi >0, то

а) Количество_Пол_Чисел = Количество_Пол_Чисел +1 и

б) Сумма_Пол_Чисел = Сумма_Пол_Чисел + числоi

иначе

если числоi >0, то

а) Количество_Отр_Чисел = Количество_Отр_Чисел+1 и

б) Сумма_Отр_Чисел = Сумма_Отр_Чисел + числоi

4.1 Если Количество_Пол_Чисел. > 0, то

Среднее_Пол_Чисел = Сумма_Пол_Чисел / Количество_Пол_Чисел

4.2 Если Количество_Отр_Чисел > 0, то

Среднее_Отр_Чисел = Сумма_Отр_Чисел / Количество_Отр_Чисел

Программа для этого алгоритма будет иметь вид

Program Count_sred;

Const

Nmax = 100;

Var

X : Array[1..Nmax] Of Real;

N, I, Ko, Kp : Integer;

So, Sp, Sro, Srp : Real;

Begin

Writeln('Введите количество чисел');

Readln(n);

Writeln('Вводите элементы массива');

For i:=1 To n Do

Read(X[i]);

Ko:=0;

Kp:=0;

So:=0;

Sp:=0;

For i:=1 To N Do

If X[i]>0 Then

Begin

Kp:=Kp+1;

Sp:=Sp+X[i]

End

Else

If X[i]>0 Then

Begin

Ko:=Ko+1;

So:=So+ X[i]

End;

If Ko<>0 Then

Begin

Sro:= So/Ko;

Writeln('Количество отрицательных чисел = ', Ko);

Writeln('Сумма отрицательных чисел = ', So:8:2);

Writeln('Среднее отрицательных чисел = ',Sro:8:2);

End

Else

Writeln('В массиве нет отрицательных чисел.');

If Kp<>0 Then

Begin

Srp:= Sp/Kp;

Writeln('Количество положительных чисел = ', Kp);

Writeln('Сумма положительных чисел = ', Sp:8:2);

Writeln('Среднее положительных чисел = ', Srp:8:2);

End

Else

Writeln('В массиве нет положительных чисел.');

End.

11. Особенности алгоритмов и программ с накапливанием

Вычисление суммы и произведения нескольких чисел, а также подсчет количества в большинстве языков программирования выполняется постепенно, путем накапливания.

1) Сумма вычисляется по формуле

сумма := cумма + очередное слагаемое;

Перед вычислениями начальному значению суммы нужно присвоить ноль.

2) Произведение вычисляется по формуле

произведение := произведение * очередной сомножитель

Перед вычислениями начальному значению произведения нужно присвоить 1.

3) Подсчет количества выполняется по формуле, подобной формуле для вычисления суммы:

количество := количество + 1

Начальное значение количества должно быть = 0.

12. Алгоритм нахождения минимума и максимума

Задача 1. Ввести в ЭВМ последовательность из n чисел x1, х2,..., хn, n<200. Найти минимальное и максимальное из них.

При поиске минимума или максимума используется дополнительная переменная min (или max), которой:

1) вначале присваивается значение первого числа из последовательности (x1), т.е. принимается, что первое число является текущим минимумом (максимумом);

2) начиная со второго числа, производится сравнение этого числа со значением переменной min (или max) и если число из массива меньше min (больше max), то на место min (max) записывается это число. Теперь это число будет текущим минимумом (максимумом).

Ясно, что после просмотра всех чисел последовательности в переменной min (или max) будет находиться окончательное значение минимума (или максимума). Программа для этого алгоритма будет иметь вид

Program Minmax;

Const

Nmax=200;

Var

X : Array [1..Nmax] Of Real;

Min, Max : Real;

N, i : Integer;

Begin

Writeln('Введите количество чисел');

Readln(n);

Writeln('Вводите элементы массива');

For i := 1 To n Do

Read(X[i]);

Min := X[1];

Max := X[1];

For i : =2 To n Do

If Max < X[i] Then

Max := X[i]

Else

If Min > X[i] Then

Min :=X [i];

Writeln ('Min= ', Min:8;2,'Max= ', Max:8:2);

End.

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

Задача 2. Найти минимум в последовательности из n чисел (n>=100) и номер минимального числа. В этой задаче необходимо использовать ещё одну переменную: не только Min, но и номер, – например Imin. Каждый раз, когда Min присваивается очередное значение, нужно запомнить и индекс (номер) числа. Соответствующая программа может быть представлена в виде

Program Minimum;

Const

Nmax = 100;

Var

X : Array[1..Nmax] Of Real;

Min : Real;

n, i, Imin : Integer;

Begin

Writeln('Введите количество чисел');

Readln(n);

Writeln('Вводите элементы массива');

For i:=1 To n Do

Read(X[i]);

Min := X[1];

Imin := 1;

For i := 2 To n Do

If Min > X[i] Then

Begin

Min := X[i];

Imin := i;

End;

Writeln('Минимум = ', Min:8:2, ' Номер = ', Imin)

End.