Как найти сумму всех элементов массива паскаль

Урок 22. Сумма элементов массива

Просмотров 22.7к. Обновлено 23 ноября 2020

Урок из серии: «Язык программирования Паскаль«

При работе с элементами одномерного массива можно выделить несколько видов подзадач. Алгоритмы для решения этих подзадач   необходимо знать.

На этом уроке рассмотрим  алгоритмы для  нахождения суммы (или произведения) элементов одномерного массива. Здесь могут быть различные модификации — найти сумму элементов с заданным свойством.

Пример 1. Найти сумму элементов массива.

Решение.

Воспользуемся написанными ранее процедурами для ввода и вывода массива.   Массив заполним случайными числами.

Добавим  функцию Sum для  нахождения суммы элементов массива.  В алгоритме переменная i — является счетчиком элементов массива,  s — сумма элементов массива, она вычисляется по реккурентной формуле s = s+m(i).

Обработка элементов массива производится в цикле. Перед циклом сумме присваивается начальное значение равное нулю: sum := 0. В теле цикла записывается рабочая формула для накопления суммы: s := s + m[i].

Текст функции получится таким:

Function Sum(m: myarray): Integer;
Var   i, s : Integer;
Begin
   sum:=0;
   For i:=1 To n Do
     {к уже найденной сумме первых (i-1) элементов прибавляем i-ый элемент}
     s:=s+m[i];
     sum:=s;
End;

Составим программу. В ней воспользуемся для заполнения массива процедурой  Init2, которая заполняет массив случайными числами из заданного интервала.

Program primer_1;
   Const n = 30;  {n - это количество элементов массива}
   Type
      myarray = Array [1...n] Of Integer;
   Var C : myarray;
       s : Integer; {s - сумма всех элементов массива}

   Procedure Init2(a,b: integer; Var m : myarray);
   {Процедура заполнения массива случайными числами из интервала [a,b] и вывода на экран}
   ...
   Function Sum(m: myarray): Integer;
   {Функция для нахождения суммы элементов массива}
   ...
Begin {main}
   {заполняем массив случайными числами из интервала [-25, 25] и выводим на экран}
   Init2(-25, 25, C);
   s:=Sum(C); {находим сумму элементов}
   Writeln ('Их сумма равна ',s);{выводим результат}
   Readln;
End.

Для нахождения произведение  элементов массива,  переменной P перед циклом присваиваем начальное значение  равное 1: P:= 1. В теле цикла ставится рабочая  рекуррентная формула для нахождения произведения: P:= P* C[i].

Пример 2. Найти сумму элементов массива, кратных заданному числу Решение. Воспользуемся функцией Sum из предыдущей программы, но будем суммировать не все элементы, а только те, которые делятся на заданное число (остаток от деления равен 0)

Function Sum(m : myarray) : Integer;
Var i, s, k : Integer;
Begin
   Writeln ('введите число');
   Readln(k);
   s:=0; {начальное значение суммы}
   For i:=1 To n Do
     {если элемент кратен k,то прибавляем его сумме}
     If m[i] Mod k = 0 Then s := s + m[i];
   sum:=s;
End;

Все остальное можно оставить без изменения.

Вы познакомились с алгоритмом суммирования элементов массива. На следующем уроке продолжим изучение алгоритмов для одномерных массивов.

Массив включает однотипные элементы – числа или переменные. Данное направление изучает информатика, точные науки. Теория устанавливает следующие характеристики массивов:

  • Количество составляющих указывается один раз, после оно не может сокращаться или увеличиваться;
  • К каждому элементу массивов прилагается явное обозначение;
  • Все переменные, числа находятся в прямом доступе.

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

Что такое сумма элементов массива Паскаль

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

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

Как найти сумму элементов массива в Паскале – пример

Задание №1. Как найти сумму массива, складывая только кратные установленному коэффициенту значения.

Для решения нужно использовать функционал Sum. В операцию сложения берется только та группа чисел, которая делится на установленный показатель. При делении остаток – нулевой. Запишем пример расчета:

​

Чтобы заполнить класс, можно использовать случайные цифры. После добавления функции сложения можно вычислить составляющие массива. Для этого используется специальная формула: s:=s+m(i). Характер обработки компонентов – циклический. До начала операции нужно присвоить 0, который становится начальным составляющим. Получаем

Сумма элементов массива на языке Паскаль: как решать задачи, подробные примеры

s:=sum s+m[i] . В итоге функционал имеет следующий вид:

​

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

___________________________________________________​
___________________________________________________​

Смотри также: Логический тип данных в языке Паскаль и их значения: определение, примеры

Основные операции обработки массивов:

  • вычисление суммы элементов массива;
  • поиск максимального или минимального значения в массиве;
  • поиск максимального или минимального среди всех элементов массива, удовлетворяющих некоторому условию;
  • обмен значениями между элементами;
  • реверс — перестановка элементов массива местами в обратном порядке (последний становится первым, первый — последним и т. д.

Рассмотрим подробнее каждую операцию.

Вычислим сумму элементов массива из предыдущей теории — усовершенствуем программу. Цикл, с помощью которого выводился массив, заменим на цикл, который будет прибавлять к переменной (s) каждый последующий элемент массива.

Ответ: (55).

Задачи на поиск в массиве

Поиск максимального значения.

Идея поиска максимального значения заключается в следующем: каждый элемент массива поочерёдно сравнивается со следующим. Если он больше, то некоторой переменной max будет присвоено значение этого элемента. Напишем программу.

Ответ: (100).

Найдём наибольшее число, удовлетворяющее некоторому условию.

Задача: найти максимальное чётное число. Для этого добавим в условие проверку на чётность при помощи операции mod.

Ответ: (8).

Обмен значениями между элементами

Допустим, нам нужно удалить некоторый элемент массива.

Скриншот 15-10-2021 023238.jpg

Удалим элемент с индексом (6). Для этого добавляем ещё одну переменную, которая будет обозначать индекс удаляемого элемента. Далее массив будем выводить по частям. До удаляемого элемента — без изменений, пропустим удаляемый элемент и выведем остаток массива.

Скриншот 15-10-2021 030215.jpg

Скриншот 15-10-2021 030236.jpg

Сумма элементов массива. Циклы for, while, repeat

🔁 Использование циклов. Сумма положительных элементов массива. Циклы for, while, repeat. Шесть примеров решения задачи на языке Паскаль. Варианты для Turbo/Borland/FreePascal и PascalABC.NET

Σ Сумма случайных чисел. 🔁 Циклы for, while. Три задачи на нахождение суммы случайно сгенерированных элементов. Для каждой задачи приведено два варианта – классический синтаксис (Turbo/Borland Pascal) и PascalABC.NET

🔀 Обмен двух чисел в массиве. Тема “Циклы и массивы”. Два варианта решения задачи.

Σ Вычисление суммы цифр числа. Пять вариантов решения задачи, в том числе одно по рекомендациям PascalABC.NET (качество кода 149%).


Пять примеров решения задачи на языке Паскаль. В некоторых вариантах используется синтаксис для PascalABC.NET

Цикл for. Найти сумму элементов целочисленного массива

Задание:
Заполнить с клавиатуры массив из 10 целых чисел.
Найти сумму элементов массива.

Var
i, Summa : Integer;
A : array [1..10] of Integer;
begin
write(‘Введите 10 целых чисел ‘);
for i := 1 to 10 do readln(A[i]);
Summa := 0;
for i := 1 to 10 do Summa := Summa + A[i];
writeln(‘Сумма = ‘, Summa);
end.

Цикл for. Найти сумму 10 элементов массива

Задание:
Заполнить с клавиатуры массив из 10 целых чисел.
Найти сумму элементов массива.

begin
// Вариант для PascalABC.NET – “здоровье кода” составляет 101%.
var A : array [1..10] of Integer; // Замечание: Используется статический массив, вместо рекомендованного динамического

write(‘Введите 10 целых чисел ‘);
for var i := 1 to 10 do readln(A[i]); // Замечание: Для ввода использована не рекомендованная процедура Readln

var Summa : Integer := 0;
for var i := 1 to 10 do Summa := Summa + A[i];
Println(‘Сумма = ‘, Summa);
end.

Цикл while. Найти сумму 10 элементов массива

Задание:
Заполнить с клавиатуры массив из 10 целых чисел.
Найти сумму элементов массива.
Для решения задачи использовать цикл while.

Program Task_01;
Var
i, Summa : Integer;
A : array [1..10] of Integer;
begin
write(‘Введите 10 целых чисел ‘);
i := 1;
while i <= 10 do begin
readln(A[i]);
i := i + 1;
end;
Summa := 0;
i := 1;
while i <= 10 do begin
Summa := Summa + A[i];
i := i + 1;
end;
writeln(‘Сумма = ‘, Summa);
end.

Цикл while. Найти сумму элементов массива

Задание:
Заполнить с клавиатуры массив из 10 целых чисел.
Найти сумму элементов массива.
Для решения задачи использовать один цикл while.

(*
Вариант для PascalABC.NET – “здоровье кода” составляет 125%.
*)
begin
var i : Integer = 1;
var Summa : Integer = 0;
var A : array [1..10] of Integer;

writeln(‘Введите 10 целых чисел ‘);
while i <= 10 do begin
A[i] := ReadInteger;
Summa += A[i];
i += 1;
end;
Println(‘Сумма = ‘, Summa);
end.

Цикл repeat. Найти сумму элементов целочисленного массива

Задание:
Заполнить с клавиатуры массив из 10 целых чисел.
Найти сумму элементов массива.
Использовать синтаксис для PascalABC.NET

// Вариант для PascalABC.NET – “здоровье кода” составляет 129%.
begin
var i : Integer = 1;
var Summa : Integer = 0;
var A : array [1..10] of Integer;

Println(‘Введите 10 целых чисел ‘);
repeat
A[i] := ReadInteger;
Summa += A[i];
i += 1;
until i < 10;
Println(‘Сумма = ‘, Summa);
end.


🔁 Использование циклов. Сумма положительных элементов массива. Циклы for, while, repeat. Шесть примеров решения задачи на языке Паскаль. Варианты для Turbo/Borland/FreePascal и PascalABC.NET

Σ Сумма случайных чисел. 🔁 Циклы for, while. Три задачи на нахождение суммы случайно сгенерированных элементов. Для каждой задачи приведено два варианта – классический синтаксис (Turbo/Borland Pascal) и PascalABC.NET

🔀 Обмен двух чисел в массиве. Тема “Циклы и массивы”. Два варианта решения задачи.

Σ Вычисление суммы цифр числа. Пять вариантов решения задачи, в том числе одно по рекомендациям PascalABC.NET (качество кода 149%).

Рекламный блок

Информационный блок

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

Обозначим через n количество мешков на складе, через i
– номер текущего мешка, а через s – сумму яблок в мешках. Очевидно, что
для решения данной задачи нам удобно будет представить склад в виде массива
целых чисел a, элементами которого будут мешки с яблоками. Значениями
элементов будут количества яблок в мешках.

Составим блок-схему алгоритма решения задачи.
Блок-схема начинается с блока «Начало», далее будет следовать блок ввода
количества мешков на складе – n.
За ним будет следовать цикл «Для i от 1 до n», в котором будет блок ввода i-того
элемента массива. Далее мы должны задать значение суммы яблок в мешках, равной
нулю, так как пока ни одного мешка мы не просмотрели, s =
0
.
Потом снова будет следовать цикл «Для i от 1 до n», внутри
которого будет одна команда – присваивания переменной s сумму её
текущего значения и значения количества яблок в i-том мешке, s = s + a[i].
Таким образом, после просмотра всех n мешков, s будет содержать
сумму яблок во всех мешках. Далее будет следовать блок вывода s, блок-схема всегда заканчивается
блоком «Конец».

Блок-схема
алгоритма решения задачи

Начнём написание программы. Запишем служебное слово program. Назовём нашу программу sklad.
В разделе описания переменных var укажем,
что нам нужен массив a,
так как количество мешков в момент написания программы неизвестно, возьмём
размерность массива равной максимально возможному количеству мешков, например 100 элементов типа integer. А также нам понадобится
переменная n,
в которой будет храниться количество мешков на складе, переменная i,
которая будет хранить индекс текущего элемента массива, и переменная s, которая будет хранить значение
суммы яблок в мешках. Так как в данной задаче все величины выражаются в целых
числах, все переменные будут типа integer.

Между
служебными словами begin и end запишем тело программы.
Для начала выведем на экран поясняющее сообщение о том, что это программа
подсчёта яблок на cкладе
с запросом на ввод количества мешков на складе. Затем запишем команду
считывания значения переменной n с переходом на следующую строку. Далее запишем цикл for i:=1
to
n
do,
который будет содержать команду вывода на экран запроса на ввод количества
яблок в i-том мешке и команду считывания с переходом на следующую строку
значения

i-того элемента массива a.
Таким образом, мы ввели количество яблок в мешках.

Теперь
присвоим переменной s значение 0 и запишем цикл for i:=1
to
n
do,
который будет содержать всего одну команду – присваивание переменной «С», суммы
её текущего значения и значения И-того элемента массива «A»,

s:=
s
+
a[i].
Далее будет следовать команда вывода на экран поясняющего сообщения с текстом
«Количество яблок на складе:», а также значения переменной s.

Программа
решения задачи

Запустим программу на выполнение, пусть на складе
будет 4 мешка яблок, в первом мешке будет 100 яблок, во втором – 200, в третьем
– 300, а в четвёртом – 400. Действительно, всего на складе должна быть тысяча
яблок. Программа работает верно.

Пример
работы программы

Ещё раз рассмотрим нахождение суммы элементов массива
на примере нашей программы. В начале для хранения суммы элементов массива
выделяется ячейка памяти, в нашем случае это переменная s, затем ей присваивается значение,
равное 0, после чего для каждого элемента массива этой переменной присваивается
сумма её значения и значения элемента массива.

Теперь мы знаем, как найти сумму элементов массива.
Рассмотрим ещё одну задачу. Написать программу для нахождения суммы цифр целого
положительного числа. Длина числа до девяти цифр.

Обозначим число, которое вводится – k, количество его цифр – n, номер текущей цифры – i,
сумму цифр – s,
а также нам понадобится массив a, элементами которого будут цифры данного числа.

Для
начала составим блок-схему данного алгоритма. Она будет начинаться с блока
«Начало», за которым будет следовать блок ввода числа k, далее нам нужно
проинициализировать переменную i
она
будет равна нулю, так как массив цифр a пока не содержит ни одной цифры.

Теперь
нам нужно сделать из числа k
массив цифр. Запишем для этого цикл «Пока» с условием k >
0,
который
будет содержать команду выделения последней цифры числа k и записи её в
массив a.
Для этого достаточно использовать функцию нахождения остатка от деления,
которая в языке Pascal
называется mod,
так в начале нам нужно определить, в какой элемент массива a мы будем записывать данную цифру.
Для этого к числу i нужно прибавить единицу.

Теперь
i-тому элементу массива a присвоим значение последней цифры числа k, это будет остаток от его деления на
10. Теперь нужно убрать из числа k его последнюю цифру, для этого
достаточно присвоить числу k результат его безостаточного
деления на 10, данная операция записывается в языке Pascal
словом div.
Таким образом, после выполнения указанного цикла действий в массиве a
будут содержаться цифры числа k,
а в переменной i будет содержаться номер элемента массива a, в который была сохранена старшая по
разряду цифра. Он будет совпадать с количеством цифр в числе, поэтому присвоим
переменной n
значение переменной i. А также присвоим
переменной s
значение 0. Далее будет следовать уже знакомый нам цикл вычисления суммы
элементов массива a.
После него будет блок вывода

s

суммы цифр числа. Блок-схема будет заканчиваться
блоком «Конец».

Блок-схема
алгоритма решения задачи

Посмотрим, как работает наш алгоритм на примере числа
345. В начале переменной i присваивается значение 0. Так как 345 больше 0 – i увеличится
на 1, после чего первому элементу массива будет присвоено значение остатка от
деления 345 на 10, то есть 5. Само число k будет без остатка поделено на 10, и
станет равным 34. Далее так как 34 больше 0, значение переменной i
снова
увеличится на 1 и станет равным 2. Так i-тому элементу массива
будет присвоен результат остатка от деления 34 на 10, то есть 4. А число k снова будет поделено без остатка на
10 и станет равным 3. Так как 3 больше 0, переменная i станет равной 3, третьему
элементу массива a
будет присвоено значение 3, а число k снова будет поделено без остатка на
10 и станет равным 0. После завершения работы цикла массив a будет
содержать цифры числа k
в порядке, обратном их следованию в числе, а переменная i
будет
содержать номер элемента массива, который хранит цифру числа k с
самым высоким разрядом, это же число будет равно количеству элементов массива,
поэтому присвоим переменной n
значение i.
Теперь остаётся лишь просуммировать элементы массива. И вывести значение суммы
на экран. Она будет равна 12.

 Приступим к написанию программы. Назовём нашу
программу sum.
Так как число по условию не длиннее 9 цифр и значение цифры может быть только
целым, раздел описания переменных будет содержать массив a из 9 элементов типа integer, а также переменные i,
n,
s
и k
типа integer.
Тело программы будет начинаться с команды вывода на экран поясняющего сообщения
о том, что пользователь работает с программой нахождения суммы цифр числа, и
запрос на ввод числа. Далее будет следовать команда считывания числа k. Теперь присвоим переменной i
значение ноль и запишем цикл преобразования числа k в массив цифр. Он будет
продолжаться, пока k
больше 0 и будет содержать команду увеличения i на 1, команду
присваивания i-тому элементу массива a значения остатка от деления k на 10 и команду присваивания
переменной k
её значения, поделённого без остатка на 10.

После окончания цикла присвоим переменной n значение переменной i,
а переменной s
– ноль. После чего запишем цикл for i:=1
to
n
do,
который будет содержать команду присваивания переменной s суммы её текущего значения и
значения i-того
элемента массива a.
Далее будет следовать команда вывода на экран поясняющего сообщения «Сумма цифр
числа:», а также значения переменной s.

Исходный
код программы

Запустим программу на выполнение. Введём число 34 964.
Получим ответ. Сумма цифр данного числа будет равна 26. Программа работает
правильно, следовательно, задача решена.

Пример
работы программы

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

Изменим нашу программу. Уберём из неё цикл нахождения
суммы элементов массива, команду присваивания переменной s значения 0 перенесём сразу после
ввода числа, а также изменим цикл выделения цифр числа. Теперь можно убрать из
раздела описания переменных переменные i и n, а также массив a.

Изменённая
программа

Из-за того, что изменённая программа имеет в своём
составе меньшее количество команд и использует меньшее количество переменных,
то есть потребляет меньше оперативной памяти, она будет работать быстрее. Снова
запустим программу на выполнение и введём то же число, что и в первый раз, 34
964. Как и в первый раз, программа вывела ответ 26. Программа работает верно.

Пример
работы изменённой программы

Важно запомнить:

Алгоритм
нахождения суммы элементов массива
состоит из трёх шагов:

1)     
Выделения ячейки памяти для хранения
суммы.

2)     
Присваивания ей значения 0.

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

Мы научились применять алгоритм нахождения суммы
элементов массива
при решении задач.

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