Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Пример 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.
Следующий раздел:
Предыдущий раздел:
Для уточнения
элемент = индекс
иди
число = элемент
?
Элемент = переменная, имеющая индекс. Как всякая переменная он хранит значение (например, число). Когда говорят «найдем сумму элементов» имеют ввиду сумму чисел в эти элементы записанную (не индексов).
пример 3
Массив в данном случае является индексом числа, как я понимаю. И для решения этих задач необходимо указать чему равен x[0..n-1] и чему равен y. И Что необходимо все 10 х указывать ? Или можно сделать прогрессию,чтобы паскаль понимал как необходимо увеличивать х? А то если самому указывать, то нету смысла находить индекс k.
Программа должна работать для любого массива, откуда бы он ни взялся. А откуда ты будешь брать конкретные значения элементов, на которых будешь тестировать решение, это в общем-то дело твое. Хочешь, вводи все 10, хочешь делай прогрессию, хочешь уменьши на время тестирования размер массива и вводи меньше чисел. Ну, и можно случайными числами заполнить, как в примере 1. Только нужны целые числа. Их можно получить как-нибудь так:
x[i] := trunc(100*random);
Или сразу получать случайные целые числа, что позволяет делать та же функция random, но с параметром:
x[i] := random(m);
Получатся случайные целые числа в диапазоне 0..m-1.
по-видимому, в примере 3:
if k=n then
по-видимому, в примере 3:
if k=n then
в примере 4:
Kmax:=0; {Предположим, что первый элемент – самый большой}
for k:=2 to n-1 do
корректировка:
по-видимому, в примере 3:
if k=n then
в примере 4:
Kmax:=0; {Предположим, что первый элемент – самый большой}
for k:=1 to n-1 do
Спасибо, исправил.