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

Не могу найти ошибку, сравнение целочисленных - C++

Восстановить пароль Регистрация
 
antoxin
0 / 0 / 0
Регистрация: 07.03.2011
Сообщений: 3
08.03.2011, 00:11     Не могу найти ошибку, сравнение целочисленных #1
В общем, написал такой вот код:

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <windows.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    ofstream out_file("file.txt");
    
    int c;
    cout << "Ââåäèòå êîëè÷åñòâî ãîòîâûõ öåïî÷åê èëè 0 äëÿ âûõîäГ*: ";
    cin >> c;
    while(c)
    {
            //ÑîçäГ*ГҐГ¬ Г¬Г*Г±Г±ГЁГў Г§Г*Г*Г·ГҐГ*ГЁГ©
            int value[15][2];
            value[0][0] = 1; value[0][1] = 2;
            value[1][0] = 1; value[1][1] = 3;
            value[2][0] = 1; value[2][1] = 4;
            value[3][0] = 1; value[3][1] = 5;
            value[4][0] = 1; value[4][1] = 6;
            value[5][0] = 2; value[5][1] = 3;
            value[6][0] = 2; value[6][1] = 4;
            value[7][0] = 2; value[7][1] = 5;
            value[8][0] = 2; value[8][1] = 6;
            value[9][0] = 3; value[9][1] = 4;
            value[10][0] = 3; value[10][1] = 5;
            value[11][0] = 3; value[11][1] = 6;
            value[12][0] = 4; value[12][1] = 5;
            value[13][0] = 4; value[13][1] = 6;
            value[14][0] = 5; value[14][1] = 6;
            
            //Îáúÿâëÿåì ïåðåìåГ*Г*ûå
            int value2[15][2];
            int temp;
            int temp2;
            int r1;
            int r2;
            int first = 0;
            int second = first + 2;
            int all = 14;
            int x1, x2, y1, y2;
            
            srand((unsigned)time(NULL));
            
            //ÏåðåìåøèâГ*ГҐГ¬ Г¬Г*Г±Г±ГЁГў
            for (int i(0); i < 1000; ++i)
            {
                r1 = rand() % 15;
                r2 = rand() % 15;
                temp = value[r1][0];
                temp2 = value[r1][1];
                
                value[r1][0] = value[r2][0];
                value[r1][1] = value[r2][1];
                value[r2][0] = temp;
                value[r2][1] = temp2;
                }
                
            //Êîïèðóåì Г¬Г*Г±Г±ГЁГў
            for (int i(0); i < 15; ++i)
            {
                for(int j(0); j < 2; ++j)
                {
                        value2[i][j] = value[i][j];
                        }
                }
                
            //Âûâîäèì êîïèþ Г¬Г*Г±Г±ГЁГўГ* Гў ГЄГ®Г*ñîëü 
            for (int i = 0; i < 15; ++i)
            {
                cout << value2[i][0] << value2[i][1] << " ";
                }
                cout << "\n";
                
            //Ïðîâåðÿåì öåïî÷êó
            for(int i(0); i !=1;)
            {
                    if (all < 2) //Åñëè Гў öåïî÷êå îñòГ*ëîñü äâГ* Г§Г*Г*Г·ГҐГ*ГЁГї,
                    {            //ГЇГЁГёГҐГ¬ ГҐВё Гў ГґГ*éë
                    
                            for(int o(0); o < 15; ++o)
                            {
                                    out_file << value[o][0] << value[o][1] << " ";
                                    }
                            out_file << "\n";
                            cout << "\nCëîæèëîñü!\n\n";
                            Sleep(1000); //Æäåì Г±ГҐГЄГіГ*äó ГЁ âûõîäèì ГЁГ§ öèêëГ*
                            c--;
                            break;
                            }
                            
                    //ÑðГ*ГўГ*ГЁГўГ*ГҐГ¬ Г§Г*Г*Г·ГҐГ*ГЁГї
                    x1 = value2[first][0];
                    x2 = value2[first][1];
                    y1 = value2[second][0];
                    y2 = value2[second][1];
                    
                    if(x1 != y1 and x1 != y2 and x2 != y1 and x2 != y2) //Åñëè Г§Г*Г*Г·ГҐГ*ГЁГї Г°Г*çëè÷Г*Г»,
                    {
                          if(second == all) //ГЁ Г±Г°Г*ГўГ*ГЁГўГ*ГҐГІГ±Гї ïîñëåäГ*ГҐГҐ Г§Г*Г*Г·ГҐГ*ГЁГҐ Гў öåïî÷êå
                          {
                                    cout << "\nГЌГҐ ñëîæèëîñü!\n\n";
                                    Sleep(1000); //æäåì Г±ГҐГЄГіГ*äó ГЁ âûõîäèì ГЁГ§ öèêëГ*
                                    break;
                                    }
                          first++; //åñëè Г§Г*Г*Г·ГҐГ*ГЁГҐ Г*ГҐ ïîñëåäГ*ГҐГҐ, áåðåì ñëåäóþùèå.
                          continue;
                          }
                    
                    for(int j(first); j < all; ++j) //Åñëè Г°Г*ГўГҐГ*Г±ГІГўГ® ГҐГ±ГІГј,
                    {
                            value2[j][0] = value2[j + 1][0]; //ñäâèãГ*ГҐГ¬
                            value2[j][1] = value2[j + 1][1]; //öåïî÷êó âïåðåä
                            }
                            --all; //ÓêîðГ*Г·ГЁГўГ*ГҐГ¬ öåïî÷êó ГЁ,
                            first = 0; //Г*Г*Г·ГЁГ*Г*ГҐГ¬ ïðîâåðêó Г±Г*Г*Г·Г*Г«Г*
                            }
                    }
    return 0;
}
Программа должна генерировать цепочки значений типа: "34 13 16 36 24 45 35 46 14 26 15 56 23 12 25", где пары цифр не числа, а именно пары. Проверять цепочки на сложение определенным образом, и сложившиеся писать в файл.

Сложение происходить таким образом:

Сначала берем первое и третье значение "34 13 16 36 24 45 35 46 14 26 15 56 23 12 25".
И ищем совпадения цифр первого значения с цифрами второго. Если совпадений нет, сдвигаемся вправо. Если есть "34 13 16 36 24 45 35 46 14 26 15 56 23 12 25", то сдвигаем цепочку влево, закрывая левое значение, во так "34 16 36 24 45 35 46 14 26 15 56 23 12 25".

Дальше начинаем сначала и т.д.

Сложенная цепочка имеет всего два значения "12 25".


Проблема в том, что в файл пишутся и не сложившиеся цепочки.

Уже все глаза стер о монитор, а ошибки не вижу ))

Помогите!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VASSUV
MiThEoN
 Аватар для VASSUV
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 403
Записей в блоге: 2
08.03.2011, 00:34     Не могу найти ошибку, сравнение целочисленных #2
Чтоб ошибку найти не обязательно только в монитор смотреть!
Отладку выполнять надо!
antoxin
0 / 0 / 0
Регистрация: 07.03.2011
Сообщений: 3
08.03.2011, 00:43  [ТС]     Не могу найти ошибку, сравнение целочисленных #3
Чтоб ошибку найти не обязательно только в монитор смотреть!
Отладку выполнять надо!
Пользуюсь Dev-C++? жму "отладка", прога запускается, работает, завершается. Никаких ошибок не выдает, или я не там смотрю?

Я совсем новичок)
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.03.2011, 00:45     Не могу найти ошибку, сравнение целочисленных #4
выполните программу пошагово, отслеживая значения переменных в дебаггере
antoxin
0 / 0 / 0
Регистрация: 07.03.2011
Сообщений: 3
08.03.2011, 01:55  [ТС]     Не могу найти ошибку, сравнение целочисленных #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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <windows.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    ofstream out_file("file.txt");
    
    int c;
    cout << "Введите количество готовых цепочек или 0 для выхода: ";
    cin >> c;
    while(c)
    {
            //Создаем массив значений
            int value[15][2];
            value[0][0] = 1; value[0][1] = 2;
            value[1][0] = 1; value[1][1] = 3;
            value[2][0] = 1; value[2][1] = 4;
            value[3][0] = 1; value[3][1] = 5;
            value[4][0] = 1; value[4][1] = 6;
            value[5][0] = 2; value[5][1] = 3;
            value[6][0] = 2; value[6][1] = 4;
            value[7][0] = 2; value[7][1] = 5;
            value[8][0] = 2; value[8][1] = 6;
            value[9][0] = 3; value[9][1] = 4;
            value[10][0] = 3; value[10][1] = 5;
            value[11][0] = 3; value[11][1] = 6;
            value[12][0] = 4; value[12][1] = 5;
            value[13][0] = 4; value[13][1] = 6;
            value[14][0] = 5; value[14][1] = 6;
            
            //Объявляем переменные
            int value2[15][2];
            int temp;
            int temp2;
            int r1;
            int r2;
            int first = 0;
            int second; // Здесь было int second = first + 2;
            int all = 14;
            int x1, x2, y1, y2;
            
            srand((unsigned)time(NULL));
            
            //Перемешиваем массив
            for (int i(0); i < 1000; ++i)
            {
                r1 = rand() % 15;
                r2 = rand() % 15;
                temp = value[r1][0];
                temp2 = value[r1][1];
                
                value[r1][0] = value[r2][0];
                value[r1][1] = value[r2][1];
                value[r2][0] = temp;
                value[r2][1] = temp2;
                }
                
            //Копируем массив
            for (int i(0); i < 15; ++i)
            {
                for(int j(0); j < 2; ++j)
                {
                        value2[i][j] = value[i][j];
                        }
                }
                
            //Выводим копию массива в консоль 
            for (int i = 0; i < 15; ++i)
            {
                cout << value2[i][0] << value2[i][1] << " ";
                }
                cout << "\n";
     
            //Проверяем цепочку
            for(int i(0); i !=1;)
            {
                    second = first + 2; // Поставил вычесление переменной в начало проверки
                                        // и все заработало!
                    if (all < 2) //Если в цепочке осталось два значения,
                    {            //пишем её в файл
                    
                            for(int o(0); o < 15; ++o)
                            {
                                    out_file << value[o][0] << value[o][1] << " ";
                                    }
                            out_file << "\n";
                            cout << "\nCложилось!\n\n";
                            Sleep(1000); //Ждем секунду и выходим из цикла
                            c--;
                            break;
                            }
                            
                    //Сравниваем значения
                    x1 = value2[first][0];
                    x2 = value2[first][1];
                    y1 = value2[second][0];
                    y2 = value2[second][1];
                    
                    if(x1 != y1 and x1 != y2 and x2 != y1 and x2 != y2) //Если значения различны,
                    {
                          if(second == all) //и сравнивается последнее значение в цепочке
                          {
                                    cout << "\nНе сложилось!\n\n";
                                    Sleep(1000); //ждем секунду и выходим из цикла
                                    break;
                                    }
                          first++; //если значение не последнее, берем следующие.
                          continue;
                          }
                    
                    for(int j(first); j < all; ++j) //Если равенство есть,
                    {
                            value2[j][0] = value2[j + 1][0]; //сдвигаем
                            value2[j][1] = value2[j + 1][1]; //цепочку вперед
                            }
                            --all; //Укорачиваем цепочку и,
                            first = 0; //начинаем проверку сначала
                            }
                    }
    return 0;
}
Я почему-то думал что, переменная second будет вычисляться каждый раз при обращении к ней, ан нет))

Всем спасибо! Отладка рулит(правда пока в ней разобрался...)
Yandex
Объявления
08.03.2011, 01:55     Не могу найти ошибку, сравнение целочисленных
Ответ Создать тему
Опции темы

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