Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Пример 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
Спасибо, исправил.