Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник.docx
Скачиваний:
36
Добавлен:
21.12.2018
Размер:
2.15 Mб
Скачать

Сумма и произведение элементов одномерного массива

Задача:

Задачи данного типа являются достаточно простыми и сводятся к поэлементному перебору массива и выполнению соответствующих алгебраических операций.

Алгоритм решения задачи:

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

Первым значением переменной для суммы должен быть ноль, для произведения – единица.

В примере ниже отводится память под массив, максимальное количество элементов которого равно 100. Однако пользователь сам задает количество элементов массива (разумеется, до 100). Это значение присваивается переменной n.

Пользователь сам заполняет массив значениями (первый цикл for).

Переменные sum и op хранят соответственно значения суммы и произведения элементов массива. В соответствующих циклах их значения постепенно увеличиваются.

Программа на языке Паскаль:

const

max = 100;

var

arr: array[1..max] of real;

n: integer;

sum, op: real;

i: integer;

begin

write('Количество элементов: ');

readln(n);

write('Укажите значения: ');

for i := 1 to n do

read(arr[i]);

sum := 0;

for i := 1 to n do

sum := sum + arr[i];

op := 1;

for i := 1 to n do

op := op * arr[i];

writeln('Сумма элементов: ', sum:10:2);

writeln('Произведение элементов: ', op:20:2);

end.

Заполнение массива и его вывод на экран

Задача:

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

Алгоритм решения задачи:

Создадим две процедуры заполнения одномерного массива целыми числами: одну с использованием функции random и одну, где пользователь самостоятельно задает значения. Также создадим процедуру вывода массива на экран. Затем вызовем в основной ветке программы эти процедуры, передав им в качестве аргументов переменные, связанные с массивами.

Программа на языке Паскаль:

const

n = 10;

type

miniarr = array[1..n] of integer;

var

a, b: miniarr;

procedure arr_rand (k:integer; var arr: miniarr);

var i: byte;

begin

writeln ('Заполнение массива случайными числами.');

randomize;

for i := 1 to k do

arr[i] := random (100);

end;

procedure arr_user (k:integer; var arr: miniarr);

var i: byte;

begin

write ('Введите ', k, ' чисел через пробел: ');

for i := 1 to k do

read (arr[i]);

end;

procedure arr_out (k:integer; var arr: miniarr);

var i: byte;

begin

write ('Вывод массива: ');

for i := 1 to k do

write (arr[i]:4);

writeln;

end;

begin

arr_rand (n, a);

arr_out (n, a);

writeln;

arr_user (n, b);

arr_out (n, b);

readln

end.

Фильтр строки

Задача:

Программа выделяет из строки (введенной пользователем) числа (только целые) и помещает их в массив, содержимое которого затем выводится на экран.

Алгоритм решения задачи:

После того как строка считывается с ввода, измеряется ее длина (функция length).

Далее стока просматривается посимвольно во внешнем цикле while.

В переменную a записывается очередной символ из строки.

Внутренний цикл while начинает выполняться лишь в том случае, если очередным символом является цифра. При этом уже во внутреннем цикле происходит переход к следующему символу. Символы одного числа конкатенируются (соединяются) в строке str.

Внутренний цикл while останавливается, когда очередной символ не цифра.

Если (if) строка не пустая, то ее содержимое добавляется в массив, а сама стока стирается.

Программа на языке Паскаль:

var

arr: array[1..100] of string;

i, j: integer;

strinput, str: string;

a: char;

n: byte;

begin i := 1;

j := 1;

readln(strinput);

n := length(strinput);

while i <= n do begin

a := strinput[i];

while (a >= '0') and (a <= '9') do begin

str := str + a;

i := i + 1;

a := strinput[i]

end;

i := i + 1;

if str <> '' then begin

arr[j] := str;

j := j + 1;

str := '';

end;

end;

for i := 1 to j - 1 do

writeln(arr[i]);

readln

end.