Одна задача обработки массива
Решим следующую задачу. Массив заполняется случайным набором целых чисел. Нужно определить, сколько раз данное целое число входит в этот массив. 
Что такое случайные числа
Сначала несколько слов о случайных числах. Все себе представляют игральный кубик, имеющий шесть граней. При каждом бросании кубика выпадение какого-то числа есть случайное событие. С равной вероятностью может выпасть любое число от 1 до 6. Результат бросания кубика - это случайное число. А теперь представьте себе кубик с 10-ю гранями. Правда, кубиком его можно назвать только условно. Это - десятигранник, на каждой грани которого нанесены числа от 1 до 10. Результат бросания такого "кубика" - случайное число в диапазоне от 1 до 10. При розыгрыше лотереи из вращающегося барабана достают пронумерованные шары. Выпавший номер шара - случайное число. 
Датчик случайных чисел на Паскале
В языках программирования, как правило, имеется аналог подобного "кубика" или лототрона, позволяющий получать случайные числа. Он называется датчиком случайных чисел. Это стандартная функция. В Паскале она записывается так: random (X) . Здесь X - целое число. При выполнении функции ее результатом становится целое число в диапазоне от 0 до X. Например, если X = 50, то в результате можем получить любое целое число от 0 до 50. 
Приведем программу, которая демонстрирует работу датчика случайных чисел на Паскале: 
Program Example;  
var I: integer; 
begin 
for I:=l to 10 do 
    write(random(50):4)  
end.
 
По этой программе на экран выводится десять случайных чисел из диапазона от 0 до 50. Вот результат тестового выполнения этой программы: 
0      3      17      20      27      7      31      16      37      42 
А теперь вернемся к условию задачи. Получающиеся с помощью датчика случайные числа "раскладываются" по элементам массива. Назовем массив Rand, а число элементов в нем пусть будет равно 20. Искомое число будет вводиться в переменную X. 
Алгоритм поиска числа в массиве
На рис. 3.14 приведена блок-схема алгоритма поиска в массиве Rand величины X с подсчетом числа его вхождений в массив в переменной NumberX. 
 
     | 
  
 
   | Рис. 3.14. Подсчет вхождений числа в массив | 
  
   
  
Обратите внимание на блок, отображающий цикл с параметром. Он имеет форму вытянутого шестиугольника. В блоке записывается параметр цикла (переменная I), начальное и конечное значения параметра через запятую (:=1, 20). 
Переменная NumberX играет роль счетчика. Вначале ей присваивается ноль. Затем в цикле происходит перебор всех элементов массива, и при каждом выполнении условия равенства к счетчику добавляется единица. Так всегда организуются счетчики в программах! В результате выполнения программы на экран будет выведен один из двух вариантов ответа: либо сообщение, что в массиве нет искомого числа, либо сообщение о том, сколько раз это число присутствует в массиве, если оно там обнаружено. 
Программа поиска числа в массиве
Напишем программу на Паскале, содержащую как заполнение массива случайными числами, так и алгоритм, описанный в блок-схеме на рис. 3.14.  
Program Example2;  
var  Rand:   array[1..20]   of  integer; 
     I,   X,   NumberX   :   integer,  
     begin 
     {Установка  датчика   случайных  чисел} 
     Randomize; 
     {Заполнение массива   случайными  числами и вывод их  на   экран} 
     writeln( 'Массив случайных чисел: ') 
     for I:=l to 20 do 
     begin 
         Rand[I]:=random(50); Write(Rand[I]:4) 
     end; 
     writeln; 
     {Ввод X} 
     write ( 'Введите X: ')); Readln(X); 
     {Подсчет  числа  вхождений X в массив} 
     NumberX:=0; 
     for I:=l to 20 do 
     if Rand(I)=X then NumberX:=NumberX+l; 
     {Анализ  и вывод результата} 
     if NumberX=0 
     then writeln('В массиве нет числа r,X) 
     else writeln( 'Число ',Х,' в массиве присутствует ',NumberX,' раз')  
end.
 
В этой программе присутствует еще один новый для нас оператор: Randomize. Это стандартная процедура Паскаля, которая производит установку начального состояния датчика случайных чисел. Дело в том, что без этого оператора функция random при многократном повторении выполнения программы всегда будет выдавать одну и ту же последовательность чисел. Процедура Randomize случайным образом устанавливает начальное состояние датчика. Поэтому при повторном выполнении программы будут получаться разные наборы случайных чисел. 
Посмотрите на результаты выполнения этой программы. Первое выполнение: 
Массив случайных чисел: 
5     44     0     41     29     12     1     39     32     25     17     31     44     5     5     16     29      10     13     34 
Введите X: 5 
Число   5   в  массиве  присутствует   3  раз 
Жирным шрифтом обозначено вводимое с клавиатуры значение. Все остальные символы выводятся на экран по программе. Второе выполнение программы: 
Массив случайных чисел: 
41     33     26     26     33     11     19     38     29     4     31     20      6     32     39     21     28     40     7     19 
Введите X: 2 
В массиве  нет  числа  2 
Вопросы и задания 
1.	Придумайте свои способы получения случайных чисел. 
2.	Какие значения может принимать целая переменная Y, если в программе записано: Y:=10+random(5)? 
3.	Как, используя функцию random(X), можно получать числа в диапазонах: от 1 до 10, от -10 до +10, от 50 до 100? 
4.	Введите в компьютер программу Example2. Выполните программу, получите результаты. 
5.	Составьте программу заполнения массива из 100 чисел случайными значениями из диапазона от -20 до 20. Подсчитайте в этом массиве количество положительных и количество отрицательных значений. 
6.	Заполните случайными числами в диапазоне от 1 до 5 два массива: А[1:20] и B[1:20]. Найдите и выведите на экран только те элементы этих массивов, значения которых совпадают. Например, если А[2] = В[2] = 4, то на экран надо вывести: 
Номер: 2   значение: 4 
Если таких совпадений нет, то вывести на экран сообщение об этом. 
  
       |