Форум программистов, компьютерный форум 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
25.05.2014, 20:04     Программа входит в бесконечный цикл при изменении двумерного массива
Написал код для задания: "Ввести двумерный массив А (NxM). Каждый второй элемент в массиве с нечётной суммой индексов, чьё значение лежит в диапазоне [-3; 5] заменить единицей. Массив вывести до и после преобразования."

Массив корректно вводится, выводится после этого, а дальше в цикле, где идёт проверка элементов массива на удовлетворение условиям, программа впадает в бесконечный цикл.

Код
C++
1
2
3
4
5
6
7
8
9
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#pragma hdrstop
#pragma argsused
 
#include <iostream.h>
#include <iomanip>
 
int _tmain()
{   int row, column;
    cout<<("Input rows count: ");
    cin>>row; //кол-во строк
    cout<<("\nInput columns count: ");
    cin>>column; //кол-во столбцов
 
    int ** A = new int * [row];     //указатель на двумерный массив
    for (int i = 0; i < row; i++)
        A [i] = new int [column];
 
    srand(time(NULL));
 
    //заполнение массива
    for(int i = 0; i < row; i++){   
        for(int j = 0; j < column; j++){   
            A[i][j] = 1 + rand() % 100;  //заполняем текущую ячейку
        }
    }
 
        //Вывод изначального массива
    cout << "\nThe original array\n";
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < column; j++)
            cout << setw(4) << A[i][j];
        cout << endl;
    }// конец вывода
 
    cout<<("test 1"); //для проверки
 
    //изменяем массив
    for(int i = 0; i < row; i++){   
        for(int j = 1; j < column; j+2){   
            if ( ( (i+j)%2!=(i+j) ) & (-3 <= (i+j) <= 5) ) {    //проверка условия
            A[i][j]=1;  //заменяем текущий элемент на 1
            
                   cout<<("test 2");//для проверки
            }
        }
    }
    cout<<("\ntest 3"); //для проверки
    cout << "\nThe resulting array\n";
 
    //вывод изменённого массива
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < column; j++)
            cout << setw(4) << A[i][j];
        cout << endl;
    }//конец вывода
    system("pause");
 
    return 0;
}


В таком виде программа выводит изначальный массив, затем выводит test1, а после начинает заполнять консольку надписью test2, до тех пор, пока не закроешь консоль.
Если закомментить цикл, в котором массив изменяется, то программа выводит массив 2 раза, и ожидает нажатия на кнопку. Пробовал в условии оставить только проверку на нечётность суммы индексов элемента, но эффект тот же
  • Во-первых, есть сомнения по поводу правильности этой части условия: (-3 <= (i+j) <= 5). Можно ли так записать проверку вхождения суммы индексов элемента в интервал [-3; 5]? Или надо писать (-3 <= (i+j) ) & ( (i+j) <=5)?
  • Во-вторых, появились сомнения по поводу использования if внутри цикла, но если не использовать if в цикле, то как тогда выполнить изменение массива по критериям?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru