Урок 22. Сумма элементов массива
Просмотров 23к. Обновлено 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;
Все остальное можно оставить без изменения.
Вы познакомились с алгоритмом суммирования элементов массива. На следующем уроке продолжим изучение алгоритмов для одномерных массивов.
Сумма элементов массива. Циклы 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%).
Рекламный блок
Информационный блок
2 / 2 / 0 Регистрация: 22.12.2009 Сообщений: 8 |
|
1 |
|
Найти сумму элементов массива22.12.2009, 22:05. Показов 90582. Ответов 24
Народ помогите пожалуйста решить. срочно. 1)Дан одномерный массив. определить: 2) Дан массив одномерный. Найти среднеарифметическое положительных и отрицательных элементов 3) Дан 2умерный массив. Заменить значения всех элементов четвертой строки массива на число 4.
1 |
lera8 636 / 219 / 64 Регистрация: 03.11.2009 Сообщений: 488 |
||||
22.12.2009, 22:33 |
2 |
|||
1)Дан одномерный массив. определить:
2 |
Программист 1С 859 / 647 / 187 Регистрация: 03.03.2009 Сообщений: 1,154 |
|
22.12.2009, 22:34 |
3 |
lera8, Это все одна программа! — пунк а,б,с — вместе!
1 |
MEGAETX 2 / 2 / 0 Регистрация: 22.12.2009 Сообщений: 8 |
||||
22.12.2009, 22:35 [ТС] |
4 |
|||
чуть чуть не понял…. а просто нельзя так:
0 |
lera8 636 / 219 / 64 Регистрация: 03.11.2009 Сообщений: 488 |
||||
22.12.2009, 22:36 |
5 |
|||
б)произведение отр. элементов
1 |
Давид Программист 1С 859 / 647 / 187 Регистрация: 03.03.2009 Сообщений: 1,154 |
||||
22.12.2009, 22:39 |
6 |
|||
MEGAETX, Вот первая!
1 |
lera8 636 / 219 / 64 Регистрация: 03.11.2009 Сообщений: 488 |
||||||||
22.12.2009, 22:42 |
7 |
|||||||
вот первая вся вместе
Добавлено через 49 секунд
чуть чуть не понял…. а просто нельзя так:
я вас не понимаю, как просто?
2 |
2 / 2 / 0 Регистрация: 22.12.2009 Сообщений: 8 |
|
22.12.2009, 22:44 [ТС] |
8 |
Спасибо Огромное народ, что помогаете) по гроб жизни должен буду.
0 |
Давид Программист 1С 859 / 647 / 187 Регистрация: 03.03.2009 Сообщений: 1,154 |
||||
22.12.2009, 22:44 |
9 |
|||
MEGAETX, Вторая
2 |
2 / 2 / 0 Регистрация: 22.12.2009 Сообщений: 8 |
|
22.12.2009, 22:44 [ТС] |
10 |
Цитата: а просто нельзя так: Код Pascal 1 Begin я вас не понимаю, как просто? не обращайте внимания. я просто не то спросил.
0 |
Тамила 753 / 546 / 211 Регистрация: 12.11.2009 Сообщений: 1,100 |
||||
22.12.2009, 22:44 |
11 |
|||
2.
2 |
lera8 636 / 219 / 64 Регистрация: 03.11.2009 Сообщений: 488 |
||||
22.12.2009, 22:51 |
12 |
|||
2) Дан массив одномерный. Найти среднеарифметическое положительных и отрицательных элементов
2 |
Программист 1С 859 / 647 / 187 Регистрация: 03.03.2009 Сообщений: 1,154 |
|
22.12.2009, 22:52 |
13 |
РешениеТамила, Не по теме: Ви опаздали!я решил первый:p
3 |
753 / 546 / 211 Регистрация: 12.11.2009 Сообщений: 1,100 |
|
22.12.2009, 22:55 |
14 |
Решение
Не по теме: Не по теме: Вам за это СУПЕРприз…)))…от автора…
3 |
Давид Программист 1С 859 / 647 / 187 Регистрация: 03.03.2009 Сообщений: 1,154 |
||||
22.12.2009, 22:55 |
15 |
|||
MEGAETX, Третья!
1 |
lera8 636 / 219 / 64 Регистрация: 03.11.2009 Сообщений: 488 |
||||
22.12.2009, 23:09 |
16 |
|||
РешениеВот ваша 5) Дан двумерный масив. определить сумму элементов четвертого столбца меньших 100
Добавлено через 7 минут Не по теме: Ви опаздали!я решил первыйю Угу обогнали нас;)
3 |
2 / 2 / 0 Регистрация: 22.12.2009 Сообщений: 8 |
|
22.12.2009, 23:25 [ТС] |
17 |
блии….н Народ. я вам безмерно Благодарен. Спасибо огромное. и .. не сочтите за наглость а 4ю не поможете ?
0 |
lera8 636 / 219 / 64 Регистрация: 03.11.2009 Сообщений: 488 |
||||
22.12.2009, 23:26 |
18 |
|||
Решение 4) к элементам 4-ого столбца двумерного массива рахмеронстью 6*6 прибавить элементы 2-го столбца.
3 |
Программист 1С 859 / 647 / 187 Регистрация: 03.03.2009 Сообщений: 1,154 |
|
22.12.2009, 23:31 |
19 |
lera8, молодец!!!!хорошее решение!
2 |
lera8 |
22.12.2009, 23:36
|
Не по теме:
lera8, молодец!!!!хорошее решение! Спасибо большое за комплимент:-[
2 |
В этом примере продемонстрировано использование оператора +=, внутриблочных описаний переменных, автоопределения типа и описания переменной в заголовке цикла for для поиска суммы N введенных чисел
var N: integer; sum: real; begin write('Введите количество чисел: '); readln(N); write('Введите числа: '); sum := 0; for var i := 1 to N do begin var x := ReadReal; sum += x; end; writeln('Сумма введенных чисел = ',sum); end.
Следует обратить внимание, что описание переменной x внутри блока в цикле не приводит к потере производительности программы или повторному выделению памяти. Память под внутриблочную переменную выделяется один раз при входе в основную программу.
Ссылки
- Особенности языка: базовый уровень
- Сайт PascalABC.NET: Особенности языка
Заполнение массива A(10) случайными числами и вывод элементов массива
program n_2;
var i: integer;
a: array[1..10] of integer;
begin
randomize;
for i:=1 to 10 do
a[i]:=random(100);
for i:=1 to 10 do
write(a[i],' ');
end.
Вычисление суммы элементов массива
program n_3; var s, i: integer; a: array[1..10] of integer; begin s:=0; randomize; for i:=1 to 10 do a[i]:=random(100); for i:=1 to 10 do write (a[i],' '); for i:=1 to 10 do s:=s+a[i]; writeln('s=', s) end.
Вычисление суммы элементов массива
[Используем операторные скобки и всё (ввод, вывод, обработку) делаем в одном цикле]
program n_3_1;
var s, i: integer;
a: array[1..10] of integer;
begin
s:=0;
randomize;
for i:=1 to 10 do
begin
a[i]:=random(100);
write(a[i],' ');
s:=s+a[i]
end;
writeln('s=', s)
end.
Программа поиска наибольшего элемента в массиве
program n_4;
var i, imax: integer;
a: array[1..10] of integer;
begin
randomize;
for i:=1 to 10 do a[i]:=random(100);
for i:=1 to 10 do write(a[i],' ');
imax:=1;
for i:=2 to 10 do
if a[i]>a[imax] then
imax:=i;
write('Наибольший элемент a[', imax, ']=', a[imax])
end.
Поиск элемента, равного 50
program n_5; var n, i: integer; a: array[1..10] of integer; begin randomize; for i:=1 to 10 do a[i]:=random(100); for i:=1 to 10 do write(a[i],' '); n:=0; for i:=1 to 10 do if a[i]=50 then n:=i; if n=0 then write('Нет') else write(n) end.
Поиск элемента, равного 50
program n_5_1; var n, i: integer; a: array[1..10] of integer; begin randomize; for i:=1 to 10 do a[i]:=random(100); for i:=1 to 10 do write(a[i],' '); i:=0; repeat i:=i+1; until (a[i]=50) or (i=10); if a[i]=50 then write(i) else write('Нет') end.
Для подсчета вводится переменная, значение которой увеличивается на единицу каждый раз, когда найден нужный элемент.
program kolich;
var k, i: integer;
a: array[1..10] of integer;
begin
randomize;
for i:=1 to 10 do a[i]:=random(100);
for i:=1 to 10 do write (a[i],` `);
k:=0;
for i:=1 to 10 do
if a[i]>50 then
k:=k+1;
write('k=', k)
end.
Сумма значений элементов, удовлетворяющих условию
program sum ;
var s, i: integer;
a: array[1..10] of integer;
begin
randomize;
for i:=1 to 10 do
a[i]:=random(100);
for i:=1 to 10 do
write (a[i],` `);
s:=0;
for i:=1 to 10 do
if (a[i]>10) and (a[i]<30) then
s:=s+a[i];
write('s=', s)
end.
Сортировка массива
program sort; var n, i, j, x, imax: integer; a: array [1..10] of integer; begin for i:=1 to 10 do read (a[i]); for i:=1 to 10 do write (a[i], ' '); for i:=1 to 9 do begin imax:=i; for j:=i+1 to 10 do if a[j]>a[imax] then imax:=j; x:=a[i]; a[i]:=a[imax]; a[imax]:=x end; for i:=1 to 10 do write(a[i], ' ') end.
Возведение числа в любую степень.
program calc_stepen; var a, b, h, i: integer; c: real; begin b := 1; readln( a, h); for i := 1 to abs(h) do b := b * a; if h < 0 then c := 1 / b else c := b; writeln( c:3:5 ); end.
Определение гласных и согласных букв:
program alfabet; var s: char; begin read(s); case s of 'а','е','ё','и','о','у','ы','э','ю','я': writeln('гласные'); 'б','в','г','д','ж','з','й','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ': writeln('согласные'); else writeln('знаки'); end; end.
Решение 50 типовых задач на Pascal, Душистов