|
|
Заполните прямоугольный массив числами в С++, Заполните прямоугольный массив числами |
|
|
|
8.12.2019, 16:25
|
Группа: Участники форума
Сообщений: 1237
Регистрация: 23.2.2009
Из: Московская область
Пользователь №: 29574
|
Ребята. помогите моему студенту плиз. Ну и мне интересно стало.
По условиям ТЗ нужно заполнить прямоугольный массив натуральными числами. Поиск решения привёл к такому:
#include <iostream> using namespace std; int main() { int const n=11; int A[n][n]; int i=1,j,k,p=n/2; for(k=1;k<=p;k++)/*Цикл по номеру витка*/ { for (j=k-1;j<n-k+1;j++) A[k-1][j]=i++;/*Определение значений верхнего гор столбца*/ for (j=k;j<n-k+1;j++) A[j][n-k]=i++;/* --//-- По правому вертикальному столбцу*/ for (j=n-k-1;j>=k-1;--j) A[n-k][j]=i++;/* --//-- по нижнему горизонтальному столбцу*/ for (j=n-k-1;j>=k;j--) A[j][k-1]=i++;/* --//-- по левому вертикальному столбцу*/ } if (n%2==1) A[p][p]=n*n; for(i=0;i<n;i++) for(j=0;j<n;j++) { printf(" %4d ",A[i][j]); if(j==n-1) printf("\n"); } }
Разобрался, что массив 11х11 (прямоугольник не получается сделать), что i- это начало отсчёта и значение первого числа. По остальному непонятно. Что такое, и откуда взялись: k,j,p.
Можно тезисно, или где про это почитать? Для себя нарисовал систему координат, но сын говорит, что так не верно рассуждать. Мне логика непонятна - но я и не программер ни разу..... Большое спасибо.
|
|
|
|
|
8.12.2019, 16:30
|
Группа: Участники форума
Сообщений: 352
Регистрация: 30.1.2016
Пользователь №: 288667
|
Цитата(327 @ 8.12.2019, 16:25) for(k=1;k<=p;k++) for (j=k-1;j<n-k+1;j++) Что такое, и откуда взялись: k,j,p. k=1 j=k-1
Сообщение отредактировал Юрий_Нд - 8.12.2019, 16:34
|
|
|
|
|
8.12.2019, 17:10
|
проекты ТС без авансов
Группа: Участники форума
Сообщений: 1786
Регистрация: 31.3.2015
Пользователь №: 263772
|
Помощь студентам https://programmersforum.ru/forumdisplay.php?f=31все переменные прокомментируйте для себя но зачем что-то делать со столбцами и со строками ... непонятно заполнение прямоугольного массива: 2 вложенных цикла натуральные если последовательные то просто счётчик независимо от циклов qb64 в 1 строку сжато Код dim x(7,5):S=9:for i=1 to 7:for j=1 to 5:s=s+1:x(i,j)=s:next:next:for i=1 to 7:for j=1 to 5:?x(i,j);:next:?:next' abok.bas результат: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 Помощь студентам https://programmersforum.ru/forumdisplay.php?f=31
Сообщение отредактировал экспорт - 8.12.2019, 17:11
|
|
|
|
|
8.12.2019, 17:36
|
Группа: Участники форума
Сообщений: 1237
Регистрация: 23.2.2009
Из: Московская область
Пользователь №: 29574
|
Спасибо. Но они ещё не проходили автоматическое заполнение. 1сем. 1курс...
|
|
|
|
|
8.12.2019, 19:19
|
Группа: Участники форума
Сообщений: 2898
Регистрация: 30.9.2010
Из: Иркутск
Пользователь №: 74376
|
int const n=11; объявляется константа n = 11; // для удобства, чтоб потом можно было менять только в одном месте. Для единичного случая можно всё заменить тупо на число 11. Тип целое, в памяти резервируется 16, 32 или 64 бит в зависимости от процессора.
int i=1,j,k,p=n/2; //резервируется место под переменную i, тип целое, i присваивается начальное значение 1. это будет тупо первое число. потом к этой переменной будет прибавляться 1, результат будет сохраняться в памяти и записываться в таблицу вывода в определённых строке и столбце. //резервируется место под переменные j, k, тип целое. Они будут потом счётчиками цикла. переменные инициализируются по ходу программы. //резервируется место под переменную p, тип целое, p присваивается начальное значение n/2 == 5. Переменная будет ограничивать цикл на проходы. В таком виде, чтобы не писать дополнительно ещё и здесь, когда выбирается n пользователем, так как число зависит от n. Непонятно, почему такие сложности. Если каких-то требований к порядку заполнения таблицы нет, то можно сделать построчно, как это сделано в разделе вывода на экран. Но тут заполнение разделено на 4 прямоугольника и в каждом заполняется по своему. Я бы использовал в этом случае if-else внутри вложенного цикла, было бы понятней. Наверно учитель хотел завизуализировать мудрёный порядок обхода.
Вот образец простого заполнения таблицы. int main() { int const n=11; // вставьте тут размер желаемого квадрата int A[n][n]; // инициализация массива с размером n ширины и n высоты. int i=1,j,k,p=n/2; // комментарий см. выше for(j=0; j<n; j++) // цикл заполнения строк от 1 до n ..{ // желательно отделять тела функций скобками, это предотвращает неправильное выполнение компилятором и делает программу более понятной ....for(k=0; k<n; k++) // цикл заполнения элементов строки ......{ ......A[j][k]=i++; Присвоение текущему элементу значения ......if (n%2==1) A[p][p]=n*n; // тут какой-то особый случай. Если квадрат несимметричный, центральная точка заполняется числом n^2. .............................................// Нехорошо выполнять эту проверку каждый раз, но для простоты пойдёт. ......printf(" %4d ",A[j][k]); // сразу вывод на печать ......if(k==n-1) printf("\n"); // если строка заполнена, перенос строки ......} // end for k ..} // end for j } // end main
Сообщение отредактировал kosmos440o - 8.12.2019, 19:32
|
|
|
|
|
8.12.2019, 19:43
|
Группа: Участники форума
Сообщений: 1237
Регистрация: 23.2.2009
Из: Московская область
Пользователь №: 29574
|
Цитата(kosmos440o @ 8.12.2019, 19:19) ............. Спасибо.
|
|
|
|
|
8.12.2019, 23:16
|
проекты ТС без авансов
Группа: Участники форума
Сообщений: 1786
Регистрация: 31.3.2015
Пользователь №: 263772
|
сайт онлайн выполнения программ https://rextester.com/l/cpp_online_compiler_gccна разных языках программирования и есть другие компиляторы онлайн сохраняя программу и вычисления https://rextester.com/JRGX29275пример: компьютер угадал число
Сообщение отредактировал экспорт - 8.12.2019, 23:17
|
|
|
|
|
8.12.2019, 23:57
|
Группа: Участники форума
Сообщений: 1237
Регистрация: 23.2.2009
Из: Московская область
Пользователь №: 29574
|
экспорт, спасибо. Передам сыну.
Задачку решили. Правила пришлось тестировать и отлаживать, но вроде бы на разных размерах работает. Помогал мой знакомый IT-шник. Проблема была с вычислением кол-ва интераций и условиями для "for". Ходов выбрали 4 шт. - верх слева-направо горизонт/справа сверху-вниз вертикаль/низ справа-налево горизонт/ слева снизу-вверх вертикаль (по часовой стрелке).
Блин. Увлекательная штука однако. Жаль нет времени на это.
|
|
|
|
|
10.12.2019, 11:49
|
проекты ТС без авансов
Группа: Участники форума
Сообщений: 1786
Регистрация: 31.3.2015
Пользователь №: 263772
|
программы на форуме легко найти ища слово using и получив результаты как сообщения
|
|
|
|
|
28.1.2020, 22:35
|
Группа: New
Сообщений: 1
Регистрация: 28.1.2020
Пользователь №: 372111
|
Цитата(327 @ 8.12.2019, 17:25) Ребята. помогите моему студенту плиз. Ну и мне интересно стало.
По условиям ТЗ нужно заполнить прямоугольный массив натуральными числами. Поиск решения привёл к такому:
#include <iostream> using namespace std; int main() { int const n=11; int A[n][n]; int i=1,j,k,p=n/2; for(k=1;k<=p;k++)/*Цикл по номеру витка*/ { for (j=k-1;j<n-k+1;j++) A[k-1][j]=i++;/*Определение значений верхнего гор столбца*/ for (j=k;j<n-k+1;j++) A[j][n-k]=i++;/* --//-- По правому вертикальному столбцу*/ for (j=n-k-1;j>=k-1;--j) A[n-k][j]=i++;/* --//-- по нижнему горизонтальному столбцу*/ for (j=n-k-1;j>=k;j--) A[j][k-1]=i++;/* --//-- по левому вертикальному столбцу*/ } if (n%2==1) A[p][p]=n*n; for(i=0;i<n;i++) for(j=0;j<n;j++) { printf(" %4d ",A[i][j]); if(j==n-1) printf("\n"); } }
Разобрался, что массив 11х11 (прямоугольник не получается сделать), что i- это начало отсчёта и значение первого числа. По остальному непонятно. Что такое, и откуда взялись: k,j,p.
Можно тезисно, или где про это почитать? Для себя нарисовал систему координат, но сын говорит, что так не верно рассуждать. Мне логика непонятна - но я и не программер ни разу..... Большое спасибо. Советую почитать code convention на с++ и на с, без него в будущем никуда, расставляйте обязательно скобки, потому что именно они показывают вложенность. Это важная штука
|
|
|
|
|
29.1.2020, 20:33
|
Группа: New
Сообщений: 1
Регистрация: 20.1.2020
Пользователь №: 371661
|
Цитата Cоветую почитать code convention на с++ и на с , без него в будущем никуда, расставляйте обязательно скобки, потому что именно они показывают вложенность. Это важная штука Полностью соглашусь с вами, без нормального оформления кода, зачастую не понятно, что вообще происходит. Хотел еще вам бы посоветовать такую тему как спортивное программирование. Как по мне очень интересное направление программирование и дает возможность быстро развить логику и выучить базовые элементы языка.
Сообщение отредактировал homapavlenko - 29.1.2020, 20:34
|
|
|
|
|
29.1.2020, 21:34
|
Группа: Участники форума
Сообщений: 1237
Регистрация: 23.2.2009
Из: Московская область
Пользователь №: 29574
|
Спасибо. Передам сыну.
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2Vtzqx6MLPt
Последние сообщения Форума
|