Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

10. Массивы

Предыдущий раздел:

Следующий раздел:

10.4. Примеры программ, работающих с массивами

Пример 1: Заполнение массива случайными числами.

  const
    n = 10; {Количество элементов массива будем хранить в константе}
  type
    TMassive = array [0..n-1] of real; {тип-массив из n элементов}
  var
    x: TMassive;
    i: integer;
  begin
    for i:=0 to n-1 do
      x[i]:=random; {Заполнение i-го элемента случайными числами}
    for i:=0 to n-1 do
      writeln(x[i]);	{Вывод элементов массива}
  end.

Как говорилось ранее, важным приемом программирования является параметризация. В данном случае мы работаем с массивом из 10 элементов, но всюду в программе используем не число 10, а константу n равную 10. Это облегчает возможную модификацию программы в случае, когда придется работать с другим количеством элементов в массиве: достаточно изменить значение константы.

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

Пример 2: Вычисление среднего арифметического элементов массива.

Вычисление состоит из двух этапов – подсчета суммы элементов и ее деления на общее число элементов.

  const
    n = 10;
  type
    TMassive = array [0..n-1] of real;
  var
    x: TMassive;
    s: real;
    i: integer;
  begin
    {<Присвоение значений элементам массива x>}
    s:=0;
    for i:=0 to n-1 do
      s:=s+x[i];
    s:=s/n;
    writeln('Mean value = ', s);
  end.

Смысл программы кажется прозрачным и не нуждается в пояснениях.

Пример 3: Поиск элемента в массиве.

Пусть задан вещественнозначный массив x[0], x[2], …, x[n-1], а также число y. Определить, есть ли в массиве элемент x[k], такой что x[k] = y, и чему равен его индекс k.

  const
    n = 10;
  type
    TMassive = array [0..n-1] of integer;
  var
    x: TMassive;
    y: real;
    k: integer;
  begin
    {<Присвоение значений элементам массива x>}
    readln(y);
    k:=0;
    while (k<n)and(x[k]<>y) do
      k:=k+1;
    if k=n then
      writeln('No such element')
    else
      writeln('Element has number: ', k);
  end.

Цикл while может закончиться по двум причинам: когда найден нужный элемент (x[k] = y) или когда были проверены все элементы (k>=n). Понять, что послужило причиной окончания цикла можно по значению переменной k.

Заметим, что если в массиве нет искомого элемента, то на последнем шаге цикла k = n. по этой причине принципиально в каком порядке стоят условия продолжения цикла while. Если поменять их местами, сделав (x[k]<>y)and(k<n) это приведет к ошибке – обращению к несуществующему элементу x[n] на последнем шаге.

Пример 4: Поиск максимального элемента в массиве.

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

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

  const
    n = 10;
  type
    TMassive = array [0..n-1] of integer;
  var
    x: TMassive;
    k, Kmax: integer; {Kmax – переменная для хранения индекса 
                       наибольшего из просмотренных элементов}
  begin
    {<Присвоение значений элементам массива x>}
    Kmax:=0; {Предположим, что первый элемент – самый большой}
    for k:=1 to n-1 do
      if x[k]>x[Kmax] then
        Kmax:=k; {Если очередной элемент больше самого большого из 
                  предыдущих, запоминаем его номер. На следующем 
                  шаге цикла новый элемент будет сравниваться уже с 
                  ним}
    writeln('Max = ', x[Kmax]);
    writeln('Max element number = ', Kmax);
  end.

Следующий раздел:

Предыдущий раздел:

8 комментариев

  1. Константин

    Для уточнения

    элемент = индекс
    иди
    число = элемент

    ?

  2. Taras

    Элемент = переменная, имеющая индекс. Как всякая переменная он хранит значение (например, число). Когда говорят «найдем сумму элементов» имеют ввиду сумму чисел в эти элементы записанную (не индексов).

  3. Игорёк

    пример 3
    Массив в данном случае является индексом числа, как я понимаю. И для решения этих задач необходимо указать чему равен x[0..n-1] и чему равен y. И Что необходимо все 10 х указывать ? Или можно сделать прогрессию,чтобы паскаль понимал как необходимо увеличивать х? А то если самому указывать, то нету смысла находить индекс k.

  4. Taras

    Программа должна работать для любого массива, откуда бы он ни взялся. А откуда ты будешь брать конкретные значения элементов, на которых будешь тестировать решение, это в общем-то дело твое. Хочешь, вводи все 10, хочешь делай прогрессию, хочешь уменьши на время тестирования размер массива и вводи меньше чисел. Ну, и можно случайными числами заполнить, как в примере 1. Только нужны целые числа. Их можно получить как-нибудь так:

    x[i] := trunc(100*random);

    Или сразу получать случайные целые числа, что позволяет делать та же функция random, но с параметром:

    x[i] := random(m);

    Получатся случайные целые числа в диапазоне 0..m-1.

  5. Alex_Kot

    по-видимому, в примере 3:
    if k=n then

  6. Alex_Kot

    по-видимому, в примере 3:
    if k=n then

    в примере 4:
    Kmax:=0; {Предположим, что первый элемент – самый большой}
    for k:=2 to n-1 do

  7. Alex_Kot

    корректировка:
    по-видимому, в примере 3:
    if k=n then

    в примере 4:
    Kmax:=0; {Предположим, что первый элемент – самый большой}
    for k:=1 to n-1 do

  8. Taras

    Спасибо, исправил.

Добавить комментарий