Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2021, 06:37   #11
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Что-то не вижу динамического выделения памяти под матрицу.
Этой функции нельзя скормить
Код:
int a[4][4];
, можно только явный
Код:
int **p;
. А выделить по нему память можно только динамически. Таким образом, данная функция подразумевает динамическое выделение памяти в другом месте программы.

Цитата:
Сообщение от bulka_v_pechali Посмотреть сообщение
int n)
Не ошибка, но лучше
Код:
size_t n
. Может int и size_t различаются не в 2 раза, а в 4 или даже в 8? 16 бит и 64 или даже 16 бит и 128. Тогда size_t поддерживает гигантские матрицы, а int – нет. Теоретически такое чудо-юдо возможно: стандарт предписывает только соотношение разрядности sizeof(short int)<=sizeof(int)<=sizeof(long int)<=sizeof(long long int), но ничего не говорит о конкретных разрядностях. А size_t в любом случае хватит на любой массив, который в адресное пространство влезет, так как он-то как раз мемсайз. Соответственно, его хватит и на любой массив, который влезет в доступную память.

Цитата:
Сообщение от bulka_v_pechali Посмотреть сообщение
if(m[i+1][j]%2==1 && m[i-1][j]%2==1 && m[i][j+1]%2==1 && m[i][j-1]%2==1)
Каждое логическое подвыражение лучше взять в скобки, чтоб защититься от распределения приоритетов, отличающегося от ожидаемого. В стандарте-то оно прописано. А Вы помните у сравнения приоритет выше или у логического оператора? Это ж не школьная арифметика, стандарт на которую не зависит от языка. А Вы ещё и нерабочий софт пишите. Для ученика таблица приоритетов ещё более не надёжна.

Цитата:
Сообщение от bulka_v_pechali Посмотреть сообщение
if(m[i+1][j]%2==1 && m[i-1][j]%2==1 && m[i][j+1]%2==1 && m[i][j-1]%2==1)
SetColor(5);
k++
А с какого перепугу инкремент отформатирован также, как тело цикла? Кстати, привыкайте сразу заключать ветви и тела циклов в операторные скобки. Например, было:
Код:
for (i=0; i<n; ++i)
 if (a[i]>b[i])
  c[i]=true;
 k=c[2]&&c[34];
, потом решили заменить на
Код:
for (i=0; i<n; ++i)
{
 if (a[i]>b[i])
  c[i]=true;
 t[i]=a[i]/b[i+1];
}
k=c[2]&&c[34];
, потом – на
Код:
for (i=0; i<n; ++i)
{
 if (a[i]>b[i])
 {
  c[i]=true;
  z+=a[i];
 }
 t[i]=a[i]/b[i+1];
}
k=c[2]&&c[34];
. Обратите внимание: при добавлении в ветвь или в тело цикла всего одной инструкции приходится исправлять первую и последнюю строки, но делается это не сразу, а через неизвестное время. Когда? Через век? Через два? Или всего через час? При этом замысел может как ещё быть в голове, так и уже быть забыт, изменения может даже вносить другой человек. И можно будет не только забыть поставить скобки, так как это делается потом. Придётся искать начало и конец, а с Вашим форматированием это не самая простая задача. При этом может потребоваться ещё одновременно держать перед глазами строчку на несколько десятков ниже, из-за чего тело цикла будет в окне, а заголовок – уже нет или ветвь будет в окне, а иф – уже нет. Или надо будет одновременно держать перед глазами строчку на несколько десятков выше, из-за чего тело цикла ещё будет в окне, а } как раз убежит за её нижнюю границу. Заранее экономить две строки на случай одновременно обзора удалённых строк не стоит, когда обе строки уже известны, можно юзать прокрутку, а расстояние между строками всё равно заранее не известно, они могут быть и в сотнях тысяч строк друг от друга. А для поиска места простановки скобки задним числом это как раз значимо.

Цитата:
Сообщение от bulka_v_pechali Посмотреть сообщение
SetColor(5);
А в каком месте Вы хотите поставить этот цвет? Вы здесь ничего не выводите, координаты не передали, а следующая инструкция будет уже на другом шаге цикла и к данной установке цвета относиться не должна.

Цитата:
Сообщение от bulka_v_pechali Посмотреть сообщение
printf("В матрице %i искомых элементов.",k);
Вот только i здесь уже не только не имеет значения, но уже даже не декларирована. Область действия её декларации ограничена циклом, а эта строка вне его.

Последний раз редактировалось BDA; 14.08.2021 в 01:04.
taras-proger77 вне форума Ответить с цитированием
Старый 13.08.2021, 09:56   #12
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Не флейма ради, а токмо замечания для.
Вот не было давно у нас одного участника (фамилию забыл), скучновато было. А теперь смотришь, как он лепит один пост за другим непрерывно - душа радуется: есть ещё креативщики! Банально воспользоваться кнопкой ПРАВКА для дополнения предыдущего поста - не, это не наш мэтод. Это - для чайников.
Настоятельно рекомендуем почитать "Правила", раздел НАСТОЯТЕЛЬНО РЕКОМЕНДУЕМ

Что до исходного кода - продолжаю недоумевать. Задача - посчитать и вывести число элементов, удовлетворяющих определённым условиям. И никто никого не красит. А SetColor, видимо, перекочевал из какого-то сдуваемого прототипа. Ну ладно. Не место красит человека, а человек - ячейку.
А об подсчёте элементов - ни одной строчки. Виноват, это в исходной версии. А в исправленной - что-то там инкрементирует.

Да, я - зануда.

Последний раз редактировалось digitalis; 13.08.2021 в 10:14.
digitalis вне форума Ответить с цитированием
Старый 13.08.2021, 13:04   #13
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Это раздел «решите за меня и помешайте»? Нет.
taras-proger77 вне форума Ответить с цитированием
Старый 14.08.2021, 05:13   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от taras-proger77 Посмотреть сообщение
Вот только i здесь уже не только не имеет значения
А это и не переменная, а спецификатор формата.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск максимального значения элемента из наименьших элементов каждой строки матрицы (Assembler Linux) TIMON_Dark Фриланс 2 08.12.2016 22:08
Поиск элементов матрицы C++++ Помощь студентам 3 15.06.2014 16:26
Матрицы.Поиск координат элементов матрицы. dima-intro Помощь студентам 1 11.12.2010 22:48
поиск серии одинаковых элементов строк матрицы Termit1995 Помощь студентам 1 20.05.2010 06:44
Сумма четных элементов матрицы. Произведение элементов 3-го столбца. Минимальный элемент матрицы. renovare Помощь студентам 2 03.07.2009 21:13