Заполнение массива
Заполнение массива по формуле
Обычно задачи про одномерные массивы начинаются со слов "заполните массив…" или "дан одномерный массив…" – всё это предполагает то, что массив был ранее создан и заполнен.
Присвоить значение элементу массива с номером `i` можно следующим образом:
{Pascal}
A[i]:=x;
//
A[i]=x;
Но если этих элементов десять или десять тысяч? Тогда на помощь приходит оператор цикла For:
{Pascal}
For i:=1 to 10000 do
A[i]:=i*2;
//
For(i=0; i<10000; i++)
A[i]=i*2;
Этот цикл не только заставляет ЭВМ выполнить большое количество действий, но и изменить при этом массу информации – содержимое 10000 ячеек. В каждом элементе массива число в два раза большее, чем его индекс.
Конечно, вместо выражения i*2 можно использовать любые математические формулы. Тогда каждый раз массив будет заполняться по функциональной зависимости, где индекс – это аргумент функции (i), а сам элемент – значение функции (A[i]).
Заполним массив значениями функции `y=x^2` для целых чисел на промежутке [1; 20].
{Pascal}
For x:=1 to 20 to
y[x]:=sqr(x);
//
For(x=0; x<20; x++)
y[x]=pow(x+1,2);
Здесь видно, что в программе y[x]:=sqr(x) – это тоже самое, что и математическое выражение
`y(x)=x^2`. В Си необходимо использовать функцию
`"pow"(x,y)` для возведения в степень (
`x^y`).
А задание к этой программке будет звучать примерно так: "Заполнить массив y квадратами чисел от 1 до 20".
Заполнение массива с клавиатуры
Но если задании сказано, что массив следует заполнить с клавиатуры?
В основе заполнения массивов, как мы выяснили, лежит простое присваивание.
Ну а там, где присваивание, есть и ввод с клавиатуры.
Вспомним как это делается для обычных переменных:
{Pascal}
ReadLn (x);
//
scanf("%d",x);
Теперь программа ожидает, пока мы наберём на клаве число и нажмём Enter. Всё! Наше число хранится в переменной x. Прикидываем, что элемент массива – это та же переменная, только с индексом:
{Pascal}
ReadLn (A[i]);
//
scanf("%d",A[i]);
В зависимости от индекса i введённое пользователем число запишется в массиве A по номеру i.
Вспомним, как мы присваивали значения элементов в цикле:
{Pascal}
For i:=1 to 20 do
ReadLn (A[i]);
//
For(x=0; x<20; x++)
scanf("%d",A[i]);
Программа запрашиват числа одно за другим, пока мы не введём 20 чисел. И все они по окончании цикла будут находиться в массиве A по тем номерам и в том порядке, как мы их вводили.