Форум программистов, компьютерный форум CyberForum.ru

Программа входит в бесконечный цикл при изменении двумерного массива - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка в вызове функции http://www.cyberforum.ru/cpp-beginners/thread1187826.html
Добрый день, написал маленькую программку, которая записывает в файл данные работников. Вызываю 3 функции, две из них записывают в файл все данные и наибольшую заработную плату. Так вот, в файл записывается только 3 наибольших заработных платы. Нужно что бы и данные записывались. Подскажите, как тут правильно функцию вызвать. #include <iostream> #include <fstream>
C++ Прокоментируйте пожалуйста программу #include <iostream.h> #define pi 3.14159 class Rectangle; class Circle{ float S; float R; void area() {S=pi*R*R;} friend float sumS(Rectangle,Circle); public: Circle(float r) {R=r;} http://www.cyberforum.ru/cpp-beginners/thread1187817.html
C++ Выборка из базы (выбирает, но не всё)
Всем привет! Сразу к делу, а то уже итак на это угробил кучу времени. Есть метод выборки из базы данных: std::vector< std::string > DB::select(char* id) { try { sqlite3_stmt *stmt; const char *query = "SELECT title, description, year FROM films WHERE id=";
Библиотека GGI. Программа рисует заданное в командной строке число в виде почтового индекса C++
Реализовать программу с использованием библиотеки GGI. Программа рисует заданное в командной строке число в виде почтового индекса. Предусмотреть дополнительный параметр в командной строке - масштаб (размер)
C++ Библиотека GGI. Программа рисует календарь на указанный год (год задаётся параметром командной строки) http://www.cyberforum.ru/cpp-beginners/thread1187805.html
Реализовать программу с использованием библиотеки GGI. Программа рисует календарь на указанный год (год задаётся параметром командной строки)
C++ Шаблоны функции для типов char покажите пожалуйста пример обработки строки с помощью шаблонов функций. например пусть будет подсчитать количество символов в строке. template.h template<typename T> T stroka(T count, char str) { count = strlen(str); return count; } main.cpp подробнее

Показать сообщение отдельно
LordCezis
 Аватар для LordCezis
2 / 2 / 1
Регистрация: 13.05.2012
Сообщений: 67
26.05.2014, 11:08  [ТС]     Программа входит в бесконечный цикл при изменении двумерного массива
Цитата Сообщение от zss Посмотреть сообщение
для i+j <=1 условие (i+j)%2 != i+j дает false, а для остальных - true,
Как так? Если % - остаток от деления, то, к примеру, (2+1)/2 = 1,5 => остаток 5 => 5 ≠ (2+1)

C++
1
if ( 1 < i+j  && i+j <= 5 ) {
Так тоже не подходит, ведь в условии: "Каждый второй элемент в массиве с нечётной суммой индексов, чьё значение лежит в диапазоне [-3; 5] заменить единицей."

( (i+j) % 2 !=0) - это проверка нечётности суммы индексов элемента двумерного массива, если эту часть убрать и прописать ваш код, то как же тогда определять, что элемент обладает нечётной суммой индексов ???
К тому же я могу изменить параметры рандома и массив будет заполняться отрицательными и положительными числами, так что проверка на вхождение самого элемента в диапазон [-3;5] тоже нужна.

Так же появился ещё 1 вопрос:
Я в обработке массива в цикле начинаю перебор строк с i=0, а перебор по столбцам с j=1 и увеличиваю j на 2.
C++
1
2
3
4
5
6
7
8
9
//изменяем массив
    for(int i = 0; i < row; i++){   //строки массива
        for(int j = 1; j < column; j+2){   //столбцы массива
            if ( ((i+j)%2!=0) & (-3 <= (i+j)) & ((i+j) <= 5)) {  //проверка условия
 
            A[i][j]=1;
            }
        }
    }
Если я выберу размерность массива 3х5, то получится, что в каждой строке будут перебираться только элементы: 1, 3, 5 - каждый второй элемент строки=массива.

Но если я выберу размерность массива 3х6, то в каждой строке будут перебираться: 1, 3, 5, а затем в след. строке снова 1, 3 и 5.
Получается, что тогда пропадут элементы на позициях Nx6 и Nx0, т.е. 2 элемента подряд, а это значит, что будет проверяться не каждый второй элемент массива, а каждый второй элемент строки.

Это значит, что в
C++
1
for(int j = 1; j < column; j+2){   //столбцы массива
надо вместо 1 подставлять некую переменную и вводить перед этим оператор выбора, основанный на чётности/нечётности кол-ва столбцов?
Для нечётного кол-во столбцов начинать перебор с Nx1, а для чётного - с Nx0.

Или же можно как-то иначе проверить только каждый второй элемент массива?

Добавлено через 12 часов 44 минуты
Приснилось решение для условия:
C++
1
    if ( ((i+j)%2!=0) && (-3 <= A[i][j] ) && ( A[i][j] <= 5)) {  //проверка условия
Что-то меня до этого клинило и я проверял сумму индексов на вхождение в интервал [-3;5], а по условию надо проверять значение элемента на вхождение в этот интервал.

Но бесконечный цикл так никуда и не делся
 
Текущее время: 04:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru