Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 5

Проблема сравнения данных в массиве с другими данными

10.09.2011, 21:45. Показов 1219. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Только вчера начал осваивать С++, со многими вопросами разобрался, но с этим никак =(

Данные:
Есть двухмерный массив с тремя видами символов (char - 'X', 'O', ' '), все переменные объявлены и инициированы. Х и У - int.

Проблема:
При попытке сравнить данные имеющиеся в массиве по определенному адресу (причем, по любому) с другими данными, условия указанные в if игнорируются, как будто бы просто не находит в этой ячейке точно такого же значения.

Часть шапки:
Code
1
2
3
4
5
6
7
8
9
#include "stdafx.h" // требует MVS
#include <iostream> // cin, cout
#include <clocale>  // поддержка русского языка
#include <conio.h>  // _getch()
#include <stdlib.h> // поддержка функции очистки экрана system("cls")
 
using namespace std;
 
char map_full[3][3];
Варианты, которые использовал безрезультатно:

Code
1
2
3
4
        if ((map_full [x][y] == 'X') && (map_full [x][y] == 'O'))
        {
            cout << "Сюда ставить уже нельзя\n";
        }
Code
1
2
3
4
        if (map_full [x][y] != ' ')
        {
            cout << "Сюда ставить уже нельзя\n";
        }
Очень прошу помочь и указать в чем косяк, задолбался уже с этой частью кода.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.09.2011, 21:45
Ответы с готовыми решениями:

Как записать в столбец с логическим типом данных результат сравнения из 2 столбцов с числовыми данными
Прошу помочь , требуется записать в столбец с логическим типом данных результат сравнения из 2 столбцов с числовыми данными (программно)....

Реализация сравнения данных в массиве в классах
Прошу нравоучения наверн, как организовать можно сравнение веса(weight) спортсменов и вывод в конце программы самого лёгкого.. с массивами...

Выбрать записи, где поле ФИО из БД с исходными данными равно полю ФИО из БД с данными для сравнения. Сравнение в цикле
Доброго времени суток! Есть 2 базы данных. 1. Исходные данные: ФИО, адрес, телефон. 2. Данные для сравнения: ФИО Нужно...

11
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
10.09.2011, 21:47
Выложите полный код, может ошибка не здесь.
0
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 5
10.09.2011, 21:50  [ТС]
Просьба не пугаться =) Это экспериментальная площадка =)
Развернуть код
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
// XO.cpp: создаем Крестики-нолики .
//
 
#include "stdafx.h"
#include <iostream> // cin, cout
#include <clocale>  // поддержка русского языка
#include <conio.h>  // _getch()
#include <stdlib.h> // поддержка функции очистки экрана system("cls")
 
using namespace std;
 
int x_const=3;
int y_const=3;
char act;
int ch;
int z;
int x=1;
int y=1;
int x_old;
int y_old;
char map[3][3];
char map_full[3][3];
int i;
int j;
char gamer;
char gamer1 = 'X';
char gamer2 = 'O';
 
inline void plus (int& x, int& y)
{
    
    if (x==x_const)
    {
        x=x_const-1;
    }
    if (y==y_const)
    {
        y=y_const-1;
    }
    if (x<0)
    {
        x=0;
    }
    if (y<0)
    {
        y=0;
    }
 
    //z=' ';
}
 
inline void map_move (int& x, int& y)
{
    plus (x, y);
    map [x][y] = gamer; 
}
 
 
int main()
{
    setlocale (LC_CTYPE,"Russian");
    
    cout << "Введите кто первый ходит Х или О?\n";
 
        act = _getch();
        ch = static_cast<int>(act);
 
        //cout << ch;
        //_getch();
 
 
        switch (ch)
        {
 
        case -32:
            break;
 
        case 120:
            gamer = gamer1;
            break;
 
        case -27:
            gamer = gamer1;
            break;
 
        case 111:
            gamer = gamer2;
            break;
 
        case -82:
            gamer = gamer2;
            break;
        }
 
 
    for (i=0; i<x_const; i++)
    {
        for (j=0; j<y_const; j++)
        {
            map[i][j]=' ';
            map_full[i][j]=' ';
        }
    }
 
map[x][y] = gamer;
 
while (1)
{
    system("cls");
    cout <<"Координаты х="<<x<<", у="<<y<<"\n";
 
    for (i=0; i<x_const; i++)
    {
        for (j=0; j<y_const; j++)
        {
            cout << map[i][j];
        }
    cout << "\n";
    }
 
    act = _getch();
    ch = static_cast<int>(act);
 
    //cout << ch;
    //_getch();
 
 
    switch (ch)
    {
    case -32: // от двойного вывода на экран
        break;
 
    case 27:
            exit(0);
        break;
 
    case 80:
        map [x][y] = ' ';
        x_old=x;
        x++;
        map_move(x, y);
        break;
 
    case 72:
        map [x][y] = ' ';
        x_old=x;
        x--;
        map_move(x, y);
        break;
 
    case 75:
        map [x][y] = ' ';
        y_old=y;
        y--;
        map_move(x, y);
        break;
 
    case 77:
        map [x][y] = ' ';
        y_old=y;
        y++;
        map_move(x, y);
        break;
 
    case 13:
        if ((map_full [x_old][y_old] == gamer1) && (map_full [x_old][y_old] == gamer2))
        {
            cout << "Сюда ставить уже нельзя\n";
            _getch();
        } 
        else
        {
            map_full[x_old][y_old] = gamer;
            
            cout << "Запомнил\n";
            
            if (gamer == gamer1)
            {
                gamer = gamer2;
            } 
            else
            {
                gamer = gamer1;
            }
 
            _getch();
        }
        break;
         
    }
 
 
}
 
 
 
    return 0;
}
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
10.09.2011, 21:54
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int x_const=3;
int y_const=3;
char act;
int ch, z;
int x=1;
int y=1;
int x_old;
int y_old;
char map[3][3];
char map_full[3][3];
int i;
int j;
char gamer;
char gamer1 = 'X';
char gamer2 = 'O';
Лучше воспользоваться оператором перечисления, тогда код красивее будет.

Добавлено через 1 минуту
C++
1
2
int x_const=3, y_const=3, ch, z, x=1, y=1, x_old, y_old, i, j;
char act, map[3][3], map_full[3][3], gamer, gamer1 = 'X', gamer2 = 'O';
1
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 5
10.09.2011, 21:57  [ТС]
Цитата Сообщение от Dani Посмотреть сообщение
Лучше воспользоваться оператором перечисления, тогда код красивее будет
Спасибо, не знал о такой возможности.
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
10.09.2011, 22:02
Еще вот:
C++
1
2
3
4
5
6
7
8
 if (gamer == gamer1)
                        {
                                gamer = gamer2;
                        } 
                        else
                        {
                                gamer = gamer1;
                        }
Не надо делать блок (хотя это и правильно), когда стоит 1 выражение:
C++
1
2
 if (gamer == gamer1)   gamer = gamer2;
                        else  gamer = gamer1;
1
...
 Аватар для Liebe
891 / 78 / 6
Регистрация: 21.02.2010
Сообщений: 2,196
Записей в блоге: 1
11.09.2011, 02:42
Цитата Сообщение от Bearserker Посмотреть сообщение
Варианты, которые использовал безрезультатно:

Code
1
2
3
4
        if ((map_full [x][y] == 'X') && (map_full [x][y] == 'O'))
        {
            cout << "Сюда ставить уже нельзя\n";
        }
а как у вас одновременно в одной ячейке может быть и 'X' и 'О' ? попробуйте вместо && использовать ||
C++
1
if ((map_full [x][y] == 'X') || (map_full [x][y] == 'O'))
1
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.09.2011, 07:54
Цитата Сообщение от Bearserker Посмотреть сообщение
Спасибо, не знал о такой возможности.
Лучше забудь о такой возможности. Проблем от этого гораздо больше, чем якобы пользы.

Добавлено через 1 минуту
Для задания размера map и map_full используй константы x_conssst и y_const.
1
 Аватар для antid0t
4 / 4 / 0
Регистрация: 23.02.2011
Сообщений: 42
11.09.2011, 11:32
Варианты, которые использовал безрезультатно:

Code
1
2
3
4
        if ((map_full [x][y] == 'X') && (map_full [x][y] == 'O'))
        {
            cout << "Сюда ставить уже нельзя\n";
        }
Code
1
2
3
4
        if (map_full [x][y] != ' ')
        {
            cout << "Сюда ставить уже нельзя\n";
        }
Очень прошу помочь и указать в чем косяк, задолбался уже с этой частью кода.[/QUOTE]

Как уже сказали выше, ошибка в первом коде: в одной ячейке не может быть одновремено записано Х и О, используйте оператор || (логическое ИЛИ).
Второй код выглядит правильным, но я не уверен что разрешаются пробелы перед размерностью масива, попробуйте if (map_full[x][y] != ' ')
1
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 5
11.09.2011, 12:46  [ТС]
Цитата Сообщение от Dani Посмотреть сообщение
Не надо делать блок (хотя это и правильно), когда стоит 1 выражение
Об этой возможности знаю, но для новичка так легче читается код.

Цитата Сообщение от liebe Посмотреть сообщение
а как у вас одновременно в одной ячейке может быть и 'X' и 'О' ? попробуйте вместо && использовать ||
Спасибо, как раз здесь и была ошибка. Я не правильно понимал функцию && и ||.

Цитата Сообщение от Deviaphan Посмотреть сообщение
Лучше забудь о такой возможности. Проблем от этого гораздо больше, чем якобы пользы.
Вы не могли бы написать чем эта функция плоха?

Цитата Сообщение от Deviaphan Посмотреть сообщение
Для задания размера map и map_full используй константы x_conssst и y_const.
Изначально для этого и вводил константные переменные, но у меня возникли сложности в какой-то момент, но после подстановки чисел вместо переменных код заработал и я пока отложил это и вывел почти все переменные в шапку.

Цитата Сообщение от antid0t Посмотреть сообщение
Второй код выглядит правильным, но я не уверен что разрешаются пробелы перед размерностью масива, попробуйте if (map_full[x][y] != ' ')
Сейчас попробовал и код заработал =/ Единственное с чем я это связываю: перезапуск MSV, либо в момент запуска этой версии if была паралельная ошибка, которую уже исправил.

Проверил: наличие и отсутствие пробела перед размерностью массива никак не сказывается на результате.



Еще раз всем спасибо, вы мне очень помогли =)
Думаю я не последний раз к Вам обращаюсь за помощью.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.09.2011, 15:14
Цитата Сообщение от Bearserker Посмотреть сообщение
Вы не могли бы написать чем эта функция плоха?
Сложно читать и поддерживать. Чтобы найти определение переменной х, нужно читать строки полностью, невозможно сразу её увидеть. Ещё сложнее поменять тип отдельных переменных. В данной программе это всё пофиг, а вот в реальных программах очень не пофиг.
1
0 / 0 / 0
Регистрация: 10.09.2011
Сообщений: 5
11.09.2011, 17:18  [ТС]
Спасибо, нечто подобное я и предлагал, но думал - вдруг есть еще и техническая сторона.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.09.2011, 17:18
Помогаю со студенческими работами здесь

Перевод даты типа структура в число для сравнения с другими датами
перевод даты типа структура в число для сравнения с другими датами с++

Подсчет количества сравнений в быстрой сортировке, для сравнения ее эффективности с другими сортировками
Вот код процедуры, она сортирует. в процедуру передается n-количество элементов массива. a-сам...

Метод для сравнения одного элемента списка с несколькими другими за один проход ?
Допустим есть код, которые сравнивает елемент с индексом 1 списка lines2 с каждым елементом списка lines1: for (int k = 0; k &lt;...

обмен данными с другими конфигурациями в 1с
Возможно ли настроить обмен данных из бухгалтерии в склад. В частности меня интересует банковская выписка.

Как отправить IP адрес вместе с другими данными?
Доброго времени суток! Имеется PHP код &lt;?require $_SERVER.'/../phpmailer/PHPMailerAutoload.php'; ?&gt; &lt;? $arResult = array(); if...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru