Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебники по паскалю / Простейшие алгоритмы на одномерном массиве.doc
Скачиваний:
68
Добавлен:
25.03.2015
Размер:
66.05 Кб
Скачать

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

...

s:=0; { Подсчет элементов }

for i:=1 to 10 do { равных данному ( 5 ) }

if a[i]=5 then s :=s+1;

...

s:=a[1]; { Поиск }

for i:=2 to 10 do { максимального элемента }

if a[i]>s then s:=a[i];

...

s:=a[1]; { Поиск }

for i:=2 to 10 do { минимального элемента }

if a[i]<s then s:=a[i];

...

i:=1; { Поиск элементов }

while (i<=10) and (a[i]<>3) do i:=i+1; { равных данному (3) }

if i>10

then writeln('3 нет ')

else writeln('первая 3 имеет индекс ',i);

...

Давайте рассмотрим их по порядку

Подсчет элементов, обладающих заданным свойством

s:=0; { Подсчет элементов }

for i:=1 to 10 do { равных данному ( 5 ) }

if a[i]=5 then s:=s+1;

Пусть мы имеем одномерный массив с оценками 10 учеников по информатике. Требуется посчитать, сколько из них имеют оценку 5.

По заведенной у нас традиции, рассмотрим алгоритм построчно:

s:=0;

Начальное значение количества отличников по информатике устанавливаем в 0.

for i:=1 to 10 do

Для I от 1 до 10 делать

Обратите внимание в программе SUM_1MAS что именно делать (читать элемент с клавиатуры или выводить его на экран) мы писали в той же самой строке. А в этот раз - в следующей и поэтому в конце этой строки НЕ СТАВИТСЯ символ ";" ! Еще очень важно обратить внимание на то, что следующая строка пишется со сдвигом вправо на 2 позиции относительно предыдущей строки. Таким образом, мы сообщаем себе и всем, кто потом будет читать нашу программу, что эта строка не сама по себе, а является продолжением предыдущей строки.

if a[i]=5 then s:=s+1;

Если A[i] равно 5 то увеличить значение S на 1.

Более подробно это можно прочитать следующим образом:

Если i-тый элемент массива A равен 5, то новое значение переменной S надо сформировать, сложив старое значение S с 1.

Или, возвращаясь к нашей задаче об отличниках, если очередной ученик имеет оценку 5, то его надо посчитать. Ведь увеличение на 1 это и есть подсчет.

Вопрос: А как посчитать количество троечников?

s:=0;

for i:=1 to 10 do

if a[i]=3 then s:=s+1;

А как посчитать количество хорошистов и отличников?

s:=0;

for i:=1 to 10 do

if a[i]>=4 then s:=s+1;

вообще в операторе IF (Если) можно использовать следующие

знаки сравнения

= равно

> больше

< меньше

>= больше либо равно

<= меньше либо равно

<> не равно

Например, сколько человек имеют в качестве оценки не 5?

s:=0;

for i:=1 to 10 do

if a[i]<>5 then s:=s+1;

В операторе IF можно писать и более сложные условия, используя слова AND (И), OR (ИЛИ) и скобки.

Например, пусть A[i] это массив оценок по информатике, а B[i] - массив оценок по математике. Как посчитать количество учеников, которые имеют оценку 5 и по информатике и по математике ?

s:=0;

for i:=1 to 10 do

if (a[i]=5) and (b[i]=5) then s:=s+1;

А как посчитать количество учеников, которые имеют оценку 5 хотя бы по одному из предметов - математика или информатика ?

s:=0;

for i:=1 to 10 do

if (a[i]=5) or (b[i]=5) then s:=s+1;

Уверен, что теперь Вы можете решить любую задачу, в которой нужно посчитать количество элементов в одномерном массиве, обладающих каким-то свойством. Например, задачи 1 и 5 из приведенных в пункте 1.1.5.

А придумать задачи, которые решаются подсчетом элементов, обладающих заданным свойством, сможете? Попробуйте!