Реклама / ООО «ИЗОЛПРОЕКТ» / ИНН: 7725566484 | ERID: 2VtzqwauJdq
IPB IPB
Проектирование, монтаж, наладка, сервис

Здравствуйте, гость ( Вход | Регистрация )

- Рекомендации АВОК 5.5.1-2023
«Системы противодымной вентиляции жилых и общественный зданий»

- Рекомендации АВОК 7.8.3-2023
«Проектирование инженерных систем лабораторий»

- Рекомендации АВОК 7.10-2023
«Здания жилые и общественные. Защита от шума и вибрации инженерного оборудования»

АВОК в соц. сетях
ИНН: 7714824045
 
Добавить ответ в эту темуОткрыть тему
> Заполните прямоугольный массив числами в С++, Заполните прямоугольный массив числами
327
сообщение 8.12.2019, 16:25
Сообщение #1





Группа: Участники форума
Сообщений: 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
Сообщение #2





Группа: Участники форума
Сообщений: 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
Сообщение #3


проекты ТС без авансов


Группа: Участники форума
Сообщений: 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
327
сообщение 8.12.2019, 17:36
Сообщение #4





Группа: Участники форума
Сообщений: 1237
Регистрация: 23.2.2009
Из: Московская область
Пользователь №: 29574



Спасибо. Но они ещё не проходили автоматическое заполнение. 1сем. 1курс...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kosmos440o
сообщение 8.12.2019, 19:19
Сообщение #5





Группа: Участники форума
Сообщений: 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
327
сообщение 8.12.2019, 19:43
Сообщение #6





Группа: Участники форума
Сообщений: 1237
Регистрация: 23.2.2009
Из: Московская область
Пользователь №: 29574



Цитата(kosmos440o @ 8.12.2019, 19:19) *
.............


Спасибо.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
экспорт
сообщение 8.12.2019, 23:16
Сообщение #7


проекты ТС без авансов


Группа: Участники форума
Сообщений: 1786
Регистрация: 31.3.2015
Пользователь №: 263772



сайт онлайн выполнения программ
https://rextester.com/l/cpp_online_compiler_gcc
на разных языках программирования

и есть другие компиляторы онлайн

сохраняя программу и вычисления
https://rextester.com/JRGX29275
пример: компьютер угадал число

Сообщение отредактировал экспорт - 8.12.2019, 23:17
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
327
сообщение 8.12.2019, 23:57
Сообщение #8





Группа: Участники форума
Сообщений: 1237
Регистрация: 23.2.2009
Из: Московская область
Пользователь №: 29574



экспорт, спасибо. Передам сыну.

Задачку решили. Правила пришлось тестировать и отлаживать, но вроде бы на разных размерах работает. Помогал мой знакомый IT-шник. Проблема была с вычислением кол-ва интераций и условиями для "for". Ходов выбрали 4 шт. - верх слева-направо горизонт/справа сверху-вниз вертикаль/низ справа-налево горизонт/ слева снизу-вверх вертикаль (по часовой стрелке).

Блин. Увлекательная штука однако. Жаль нет времени на это.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
экспорт
сообщение 10.12.2019, 11:49
Сообщение #9


проекты ТС без авансов


Группа: Участники форума
Сообщений: 1786
Регистрация: 31.3.2015
Пользователь №: 263772



программы на форуме легко найти
ища слово using
и получив результаты как сообщения
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
экспорт
сообщение 11.12.2019, 20:25
Сообщение #10


проекты ТС без авансов


Группа: Участники форума
Сообщений: 1786
Регистрация: 31.3.2015
Пользователь №: 263772



сегодня на форуме программистов:
решено через онлайн компилятор

на доселе неизвестном языке
используя знания яп 21-го века

решить математическое выражение
https://programmersforum.ru/showthread.php?t=333190

ссылки оттуда:
https://rosettacode.org/wiki/Category:Java
https://rextester.com/l/java_online_compiler

сочиняем и пишем и проверяем онлайн
https://rextester.com/KTOV72745

Учим C# зная Basic & Excel & qb64
https://programmersforum.ru/showthread.php?t=327446
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
dmytrokushpel
сообщение 28.1.2020, 22:35
Сообщение #11





Группа: 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 на с++ и на с, без него в будущем никуда, расставляйте обязательно скобки, потому что именно они показывают вложенность. Это важная штука
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
homapavlenko
сообщение 29.1.2020, 20:33
Сообщение #12





Группа: New
Сообщений: 1
Регистрация: 20.1.2020
Пользователь №: 371661




Цитата
Cоветую почитать code convention на с++ и на с, без него в будущем никуда, расставляйте обязательно скобки, потому что именно они показывают вложенность. Это важная штука


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

Сообщение отредактировал homapavlenko - 29.1.2020, 20:34
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
327
сообщение 29.1.2020, 21:34
Сообщение #13





Группа: Участники форума
Сообщений: 1237
Регистрация: 23.2.2009
Из: Московская область
Пользователь №: 29574



Спасибо. Передам сыну.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Добавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Реклама
ООО «Арктика групп» ИНН: 7713634274


ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2Vtzqx6MLPt

Последние сообщения Форума





Rambler's Top100 Rambler's Top100

RSS Текстовая версия Сейчас: 27.5.2024, 11:23