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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
antoxin
0 / 0 / 0
Регистрация: 07.03.2011
Сообщений: 3
#1

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

08.03.2011, 00:11. Просмотров 328. Ответов 4
Метки нет (Все метки)

В общем, написал такой вот код:

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".


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

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

Помогите!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2011, 00:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу найти ошибку, сравнение целочисленных (C++):

Найти ошибку в коде. Вывод целочисленных из строки - C++
Код компелирует, но на середине выдает ошибку, в чем причина, как исправить? #include &lt;iostream&gt; #include &lt;cstring&gt; #include...

не могу никак найти сравнение цифр в числе - C++
народ помогите с индексами в массиве, надо сделать задачку в массиве из 4 индексов например 13 2 45 19 нужно из каждого индекса найти...

Найти слова, повторяющиеся более одного раза, не могу найти ошибку - C++
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int i; int k; char *tm; for(i...

Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) - C++
// Заданы матрицы X(8;4),Y(5;5),Z(6;9). // Для каждой из матриц определить строку, в которой находится наименьшее // количество...

Не могу найти ошибку - C++
Задание: Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти номер первой из строк, содержащих хотя бы...

Не могу найти ошибку! - C++
Только-только начал работать с функциями и не могу понять, почему в моей игре(кидаешь с компьютером кубик) и у пользователя и у программы...

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

Я совсем новичок)
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.03.2011, 00:45 #4
выполните программу пошагово, отслеживая значения переменных в дебаггере
0
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 будет вычисляться каждый раз при обращении к ней, ан нет))

Всем спасибо! Отладка рулит(правда пока в ней разобрался...)
0
08.03.2011, 01:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2011, 01:55
Привет! Вот еще темы с ответами:

Не могу найти ошибку - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; #define N = 3 using namespace std; void vvodMatr(int a, int n) int poiskMax (int a, int n) ...

Не могу найти ошибку. - C++
Добрый день всем! Опять у меня проблемы с моими &quot;любимыми&quot; шаблонами. Есть две шаблонные функции печатающие содержимое списка. Первая для...

Не могу найти ошибку! - C++
#include &lt;iostream.h&gt; int main() { cout &lt;&lt; &quot;Hello there.\n&quot;; cout &lt;&lt; &quot;Here is 5:&quot; &lt;&lt; 5 &lt;&lt; &quot;\n&quot;; cout &lt;&lt; &quot;The manipulator end1...

Не могу найти ошибку - C++
fatal error LNK1120: неразрешенных внешних элементов: 1 #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;thread&gt; using namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru