С Новым годом! Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 20.12.2011
Сообщений: 64

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

20.03.2013, 10:26. Показов 5128. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется двумерный массив А. Требуется просуммировать значения всех элементов массива. Алгоритм должен содержать только одну управляющую структуру типа ЦИКЛ.
Я конечно понимаю, что любую задачу в принципе можно сделать за один цикл, но просто в этом случае мне кажется разумен подход плана:
Все элементы массива перебираются и добавляются в одну и ту же переменную. Перебор элементов массива осуществляется в цикле for + добавляется вложенный цикл for для прохода по элементам каждой строки матрицы.
но это получается 2 цикла... и это проблематично представить в виде блок-схемы. В смысле не проблематично, но ясно становится что 2 цикла.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.03.2013, 10:26
Ответы с готовыми решениями:

Суммирование элементов двумерного массива
Составьте программу суммирования элементов двумерного массива, сумма индексов которых равна заданной константе

Суммирование элементов двумерного массива, сумма индексов которых равна заданной константе
суммирование элементов двумерного массива,сумма индексов которых равна заданной константе массив Х размерностью 10х30 содержит...

Суммирование элементов двумерного массива, сумма индексов которая равна заданной константе
Составьте программу суммирования элементов двумерного массива,сумма индексов которая равна заданной константе.

31
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
20.03.2013, 10:37
Цитата Сообщение от marokanin Посмотреть сообщение
В смысле не проблематично, но ясно становится что 2 цикла.
Однако её вполне можно решить используя один цикл.
0
1 / 1 / 0
Регистрация: 20.12.2011
Сообщений: 64
20.03.2013, 12:22  [ТС]
Вполне можно, но не понятно как. Через использование индексов? но, этот метод мне не знаком..
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
20.03.2013, 12:43
Цитата Сообщение от marokanin Посмотреть сообщение
Вполне можно, но не понятно как.
Что именно не понятно.
Цитата Сообщение от marokanin Посмотреть сообщение
Через использование индексов?
В Си
C
1
array[i][j];
В Паскале(если не изменяет память)
Pascal
1
array[i,j]
вычислить i, j достаточно легко.
0
1 / 1 / 0
Регистрация: 20.12.2011
Сообщений: 64
20.03.2013, 12:46  [ТС]
моя задача сформулировать алгоритм и нарисовать блок схему без привязки к языку программирования, но я просто не знаю как можно это преобразовать в 1 из 2!
0
 Аватар для OldFedor
7486 / 4150 / 474
Регистрация: 25.08.2012
Сообщений: 11,530
Записей в блоге: 11
20.03.2013, 12:56
Цитата Сообщение от marokanin Посмотреть сообщение
преобразовать в 1 из 2!
1. Можно одним циклом. Но для этого надо знать как располагается массив в памяти.
Например в VB по столбцам и через API обращаться к нужному элементу.
2. Один явный For заменить на IF, хотя это будет тотже цикл.
3. Если массив вводится (не формируется в программе), то по мере ввода - обработка.
Все это можно изобразить в виде блок-схем.

Как?
0
1 / 1 / 0
Регистрация: 20.12.2011
Сообщений: 64
20.03.2013, 12:59  [ТС]
на сколько я понял привязка к конкретному языку не важна, if вместо если я тоже думаю, что это цикл - поэтому не подходит... обработка... наверно то что надо, но в виде блок схемы, как это будет выглядеть.. нет идей..
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
20.03.2013, 13:10
Цитата Сообщение от OldFedor Посмотреть сообщение
1. Можно одним циклом. Но для этого надо знать как располагается массив в памяти.
Вы бредите сударь
C
1
2
3
4
5
for(int k = 0; k<(n*m); ++k)
{
   int i = k / n;   // строка
   int j = k % m; // столбец  
}
мог на +/-1 ошибиться на границе массива.
1
Я не экстрасенс
 Аватар для barbudo59
382 / 339 / 34
Регистрация: 22.01.2013
Сообщений: 1,126
20.03.2013, 13:19
Казуистический подход в постановке задачи требует аналогичного ответа. По-моему так.
Цитата Сообщение от marokanin Посмотреть сообщение
управляющую структуру типа ЦИКЛ
Цикл делать по i,
inc(j);
if j... goto
и пусть кто-то докажет, что здесь 2 ЦИКЛА!
0
1 / 1 / 0
Регистрация: 20.12.2011
Сообщений: 64
20.03.2013, 13:20  [ТС]
на блок схеме видно что 2 цикла...
0
 Аватар для OldFedor
7486 / 4150 / 474
Регистрация: 25.08.2012
Сообщений: 11,530
Записей в блоге: 11
20.03.2013, 14:03
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Вы бредите сударь
Я бы мог ответить Вам в том же духе. Но воздержусь.
Читайте внимательно - VB, а не СИ.
0
 Аватар для Rayne
76 / 62 / 23
Регистрация: 11.07.2009
Сообщений: 730
20.03.2013, 14:16
Можно выделить одномерную структуру куда при заполнении массива (вручную, или иначе) будут писаться элементы и далее суммироваться, соответственно в цикле "от 1 до N*M". Очень просто, но получается избыточность информации, ну или прямо при формировании массива уже писать сумму, действительно, ничего нового не используя, хотя как-то неочень всё-таки.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
20.03.2013, 15:12
Цитата Сообщение от OldFedor Посмотреть сообщение
Я бы мог ответить Вам в том же духе. Но воздержусь.
Читайте внимательно - VB, а не СИ.
Да хоть Pascal, оператор доступа по индексу доступен и в VB.
0
 Аватар для OldFedor
7486 / 4150 / 474
Регистрация: 25.08.2012
Сообщений: 11,530
Записей в блоге: 11
20.03.2013, 15:17
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Да хоть Pacsal, оператор доступа по индексу доступен и в VB.
Это известно и, извините, банально.
Другое дело, что в VB обратиться напрямую к элементу многомерного массива кроме как x(i, j,...) нельзя.
Нужны ухищрения.
Об этом и была речь.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.03.2013, 15:21
Цитата Сообщение от marokanin Посмотреть сообщение
Имеется двумерный массив А. Требуется просуммировать значения всех элементов массива. Алгоритм должен содержать только одну управляющую структуру типа ЦИКЛ.
тогда выход один: линерализовать массив. Как вариант массив можно сразу хранить в быстро линерализованном формате:
C++
1
2
3
4
5
6
7
double **A;
double *data;
data=new double [n*m];
for (i=n-1; i>=0; --i)
{
 A[i]=data+i*m;
}
, после чего достаточно обращаться к data, или к A[0] вместо A, как к линерализованной версии всего массива.
1
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
21.03.2013, 01:52
OldFedor, Dmitriy_M имел ввиду, что зная количество столбцов и количество строк можно в любой момент, организовав цикл с числом итераций, равному количеству элементов в массиве, вычислить индексы этого элемента в массиве.
0
 Аватар для OldFedor
7486 / 4150 / 474
Регистрация: 25.08.2012
Сообщений: 11,530
Записей в блоге: 11
21.03.2013, 09:48
Цитата Сообщение от HighPredator Посмотреть сообщение
OldFedor, Dmitriy_M имел ввиду, что зная...
Благодарствую, HighPredator, я уже "догнал".
0
1 / 1 / 0
Регистрация: 20.12.2011
Сообщений: 64
24.03.2013, 01:26  [ТС]
А можно хотя бы намекнуть как нарисовать на блок-схеме линерализацию массива с последующим суммированием в один цикл?

Добавлено через 1 час 2 минуты
Или хотя бы код, того варианта который был активно пропагандирован...
0
Я не экстрасенс
 Аватар для barbudo59
382 / 339 / 34
Регистрация: 22.01.2013
Сообщений: 1,126
24.03.2013, 10:18
1) "О терминах не спорят, о них договариваются!"
Давайте вместе решим, что такое "управляющая структура типа ЦИКЛ". На мой взгляд это for, while, repeat...
Но не if... goto

2) К вопросу об 1 цикле - такая идея:
A:array[x,y];

z:=x*y;
i:=0; y:=0; s=0;
for k:=1 to z do
begin
s:=s+A[x,y];
inc(i);
if i>x then
begin
i:=0;
inc(y);
end;
end;
writeln(s);
0
1 / 1 / 0
Регистрация: 20.12.2011
Сообщений: 64
24.03.2013, 10:58  [ТС]
barbudo59, Я попробовал дойти вот до такого формата...
C++ (Qt)
1
2
3
4
5
double data[n][m]; // это для простоты; n,m - целые!
double A; // здесь будет сумма всех элементов data'ы.
A = 0; // вначале там пусто то бишь ноль
for( int i=0; i<n*m; i++) // то, что элементов n*m это ж будет всегда !
 A += data[i/m][i%m]; // i/m пробежит целочисленно от 0 до n-1 включительно, i%m пробежит от 0 до m-1 включительно
В вашем варианте вы не могли бы пояснить момент с k?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.03.2013, 10:58
Помогаю со студенческими работами здесь

Не работает суммирование столбцов двумерного массива
Проблема в суммировании столбцов двумерного масива: первий столбец суммируется і заносится в одномерний масив, но начиная с другого...

Цикл по обработке двумерного массива
Здравствуйте, коллеги! В прикреплённом файле Маткад 15 программа по обработке данных двумерного массива, которая выдает в результате две...

Цикл перебора столбцов двумерного массива
Подскажите пожалуйста, как зациклить перебор столбцов до того момента пока не получится осмысленный текст. Подобрал вручную 1 2 3 4 5 О...

Суммирование M первых элементов сформированного массива с M последними элементами же массива
Файл исходных данных содержит значения величин N, M и элементов массива IVECT..IVECT.Написать, отладить и протестировать паскаль-прогу,...

Как составить цикл для двумерного массива
Здравствуйте товарищи. Имеется такая ситуация: https://www.cyberforum.ru/attachment.php?attachmentid=441659&amp;stc=1&amp;d=1412972303...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru