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

Оператор условия - C++

Восстановить пароль Регистрация
 
azeriker
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
29.11.2012, 20:41     Оператор условия #1
Есть массив в нём есть 10 элементов(например цифр 1). Например я могу изменять любой элемент массива на 0. Как мне прописать, что бы при наличии у элементов массива №1, №2, №3 значения равного 0, происходил например вывод на экран какого-либо сообщения или выполнение действия?
Конструкция
C++
1
2
3
4
if(Arr[0]==Arr[1]==Arr[2])
{
....
}
-не катит
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
29.11.2012, 20:44     Оператор условия #2
Цитата Сообщение от azeriker Посмотреть сообщение
if(Arr[0]==Arr[1]==Arr[2])
{
....
}
Во- первых,
C++
1
2
3
4
if(Arr[0]==Arr[1] && Arr[1]==Arr[2])
{
....
}
Во-вторых, твой код тоже скомпилируется, но будет работать только, если все 3 числа равны 1. Угадай почему.
azeriker
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
29.11.2012, 20:55  [ТС]     Оператор условия #3
Если сделать так, то в цикле при проверки на верность, я могу ведь изменить другой элемент массива и тогда первые три окажутся равными и произойдёт то, что мне не нужно...
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
29.11.2012, 21:25     Оператор условия #4
Цитата Сообщение от azeriker Посмотреть сообщение
Если сделать так, то в цикле при проверки на верность, я могу ведь изменить другой элемент массива и тогда первые три окажутся равными и произойдёт то, что мне не нужно...
Я тебя совершенно не понял. Тебе трудно писать?
Что тебе не нужно? Покажи пример.
azeriker
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
30.11.2012, 05:28  [ТС]     Оператор условия #5
Я пишу сейчас крестики-нолики и практически всё готово, это моя первая более-менее серьёзная работа. Мне осталось добавить только проверку на победу. Я конечно понимаю что этот проект не о чём, но я пишу для себя. Всё поле у меня представляет собой одномерный символьный массив размером в 9, и мне нужна проверка, но я не понимаю как реализовать её покороче
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
30.11.2012, 06:21     Оператор условия #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Во-вторых, твой код тоже скомпилируется, но будет работать только, если все 3 числа равны 1. Угадай почему.
фигвам(индейская национальная хижина)

Цитата Сообщение от azeriker Посмотреть сообщение
if(Arr[0]==Arr[1]==Arr[2])
0 1 2
0 0 1 сработает
0 1 0 сработает
1 0 0 сработает

объяснить почему ?

Добавлено через 8 минут
Цитата Сообщение от azeriker Посмотреть сообщение
Как мне прописать, что бы при наличии у элементов массива №1, №2, №3 значения равного 0
можно так
C++
1
if(!Arr[0] && !Arr[1] && !Arr[2])
А можно так
C++
1
if(!(Arr[0] || Arr[1] || Arr[2]))
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
30.11.2012, 09:20     Оператор условия #7
Цитата Сообщение от ValeryS Посмотреть сообщение
0 0 1 сработает
0 1 0 сработает
1 0 0 сработает
почему ты это называешь сработает, если это очевидно ошибка и автору нужно чтобы код срабатывал следующим образом:если 3 числа равны - заходил в if, иначе заходил в else.
А в твоём примере он не работает, т.к. заходит в if даже если числа не равны друг другу!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
30.11.2012, 09:30     Оператор условия #8
----------------удалил----------------
azeriker
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
30.11.2012, 10:08  [ТС]     Оператор условия #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
2
3
4
if(Arr[0]==Arr[1] && Arr[1]==Arr[2])
{
....
}
к твоему коду пришлось добавить && Arr[1]!='-'
т.к изначально все имеют значения '-'
теперь вроде всё нормально, спс
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
30.11.2012, 10:21     Оператор условия #10
Цитата Сообщение от azeriker Посмотреть сообщение
к твоему коду пришлось добавить && Arr[1]!='-'
т.к изначально все имеют значения '-'
теперь вроде всё нормально, спс
ты о чём вообще? какие значения? Что значит "изначально"? Ты даже программу здесь не выложил! я не понимаю, о чём ты говоришь и при чём здесь '-'
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
30.11.2012, 12:48     Оператор условия #11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
почему ты это называешь сработает,
это я отвечал тебе на
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
твой код тоже скомпилируется, но будет работать только, если все 3 числа равны 1.
т.е ты сказал что if сработает если все три переменные равны 1
я тебе показал еще три условия когда сработает if

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
если 3 числа равны - заходил в if, иначе заходил в else.
ему надо не просто что они равны а равны 0

Цитата Сообщение от azeriker Посмотреть сообщение
Как мне прописать, что бы при наличии у элементов массива №1, №2, №3 значения равного 0,
если он конечно опять не передумал
Цитата Сообщение от azeriker Посмотреть сообщение
к твоему коду пришлось добавить && Arr[1]!='-'
т.к изначально все имеют значения '-'
видишь какие то минусы появились
хотя изначально
Цитата Сообщение от azeriker Посмотреть сообщение
Есть массив в нём есть 10 элементов(например цифр 1). Например я могу изменять любой элемент массива на 0.
никакими минусами не пахло

на равенство 0 всех трех переменных я ему привел даже 2 примера

Цитата Сообщение от ValeryS Посмотреть сообщение
можно так
C++
1
if(!Arr[0] && !Arr[1] && !Arr[2])
А можно так Код
C++
1
if(!(Arr[0] || Arr[1] || Arr[2]))
но он как то это проигнорировал
azeriker
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
30.11.2012, 12:55  [ТС]     Оператор условия #12
Короче ребята вот весь код, он конечно написан не очень красиво. А про единицы и ноли-это я просто хотел немного абстрактно объяснить, а потом не заметно для себя перешёл на свой код
Со строки 40 начинается то про что я спрашивал
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
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<string>
using namespace std;
char Pole[9]={'-','-','-','-','-','-','-','-','-'};
char point;
bool Errorr=false, win=false;
int Tar, TarSl;
int T=0, MainT=0, PrT=0 ;
class Game
{
      public:
             void Go()
             {
                  
             cin>>Tar;
              if(Pole[Tar-1]!='-')
              {
                cout<<"3DECb 3AH9TO!!"<<endl;
              }
              else if(Pole[Tar-1]=='-')
              {
                  if(MainT%2==0)
                       Pole[Tar-1]='X';
                  if(MainT%2==1)
                   Pole[Tar-1]='O';
              }
             };
            void VvP()
             {
                 cout<<"|_"<<Pole[6]<<"_|_"<<Pole[7]<<"_|_"<<Pole[8]<<"_|"<<"                   |_7_|_8_|_9_|      "<<endl;
                 cout<<"|_"<<Pole[3]<<"_|_"<<Pole[4]<<"_|_"<<Pole[5]<<"_|"<<"  O6PA3EU, --->    |_4_|_5_|_6_|      "<<endl;
                 cout<<"|_"<<Pole[0]<<"_|_"<<Pole[1]<<"_|_"<<Pole[2]<<"_|"<<"                   |_1_|_2_|_3_|      "<<endl; 
             }
             void Error()
             {
                 system ("cls");
             };
            void Proverka()
             {
                 for(PrT=0;PrT>-1;PrT++)
                  if(Pole[0]==Pole[1] && Pole[1]==Pole[2] && Pole[1]!='-')
                  {
                                               cout<<"POBEDA  "<<Pole[1]<<endl;
                                               win=true;
                  }
             }
             
                     
};
int main()
{
    Game Player;
    for (MainT=1;MainT>0; MainT++)
    {
        if(MainT%2==0)
            cout<<"XOD KPESTIKA"<<endl;
        if(MainT%2==1)
            cout<<"XOD NOLIKA"<<endl;
        Player.Go();
        Player.VvP();
        Player.Proverka();
        if(win==true)
        {
                     cout<<"U HAC ECTb POBEDITEL"<<endl;
                     getch();
                     break;
        };     
      cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;
        
    }
}
думаю разберётесь
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
30.11.2012, 12:58     Оператор условия #13
Цитата Сообщение от ValeryS Посмотреть сообщение
т.е ты сказал что if сработает если все три переменные равны 1
я тебе показал еще три условия когда сработает if
да, но я сказал, при этих условиях код работать не будет, а не if
т.к. будет выдавать сообщение "3 числа равны" в ответ на неравные числа. Это я тоже называю
Цитата Сообщение от ValeryS Посмотреть сообщение
код тоже скомпилируется, но будет не работать
Т.к. отвечать "3 числа равны" в ответ на 0 0 1 - это неверная работа
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
30.11.2012, 13:03     Оператор условия #14
Цитата Сообщение от azeriker Посмотреть сообщение
for (MainT=1;MainT>0; MainT++)
цикл то вечен(или почти вечен окончится после 2147483646 итерации)
ты точно этого хотел???

Добавлено через 2 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
при этих условиях программа работать не будет,
я это называю будет работать неправильно
извини, не понял твою терминологию
претензии снимаю
azeriker
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
30.11.2012, 13:05  [ТС]     Оператор условия #15
пока мне это и нужно, но потом я хочу чтобы при выигрыше можно было сделать рестарт и при заполнении всех клеток тоже рестарт, а выйти и крестиком можно
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
30.11.2012, 13:17     Оператор условия #16
Выбрось все глобальные переменные
для передачи данных существуют параметры функции да и функция возвращает результат
и зачем ты здесь класс запузырил? для красоты?

Добавлено через 4 минуты
Цитата Сообщение от azeriker Посмотреть сообщение
for(PrT=0;PrT>-1;PrT++)
* * * * * * * * * if(Pole[0]==Pole[1] && Pole[1]==Pole[2] && Pole[1]!='-')
* * * * * * * * * {
тоже самое с циклом (слишком много итераций)
и все эти 2 миллиарда итераций мы сравниваем одни и те же значения

Добавлено через 2 минуты
Цитата Сообщение от azeriker Посмотреть сообщение
char Pole[9]
логичней бы сделать двумерный массив
char Pole[3][3]
azeriker
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
30.11.2012, 13:17  [ТС]     Оператор условия #17
я эту тему(про параметры) немного не понял когда читал книжку, вот и приходится писать так, а класс думал понадобится с самого начала, а потом удалять жалко уже было
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
30.11.2012, 14:04     Оператор условия #18
Цитата Сообщение от azeriker Посмотреть сообщение
я эту тему(про параметры) немного не понял когда читал книжку,
че тут непонятного
C++
1
2
3
4
int fncAdd(int a,int b)
 {
   return a+b;
 }
функция принимает два аргумента и возвращает их сумму
вызвать можно так
C++
1
fncAdd(5,10);
вернет 15

ты эти ассемблерные штучки бросай передавать параметры через глобальные переменные
нехорошо это


Цитата Сообщение от azeriker Посмотреть сообщение
а потом удалять жалко уже было
чего там жалеть выбрасывай эту программу и пиши заново
про двумерный массив я тебе уже сказал
теперь еще подскажу
в нем должны быть числа а не символы
например нолик =0 крестик=1 пустое поле =10
(открой для себя enum)
тогда вся проверка выглядит так
например проверяем 1 строку
C++
1
2
3
4
5
int tmpSum=Pole[0][0]+Pole[0][1]+Pole[0][2];
 if(tmpSum==0)
 // победили нолики
if(tmpSum==3)   
 // победили крестики
проверка на допустимость хода
C++
1
2
3
4
5
6
int tmpSum=0;
for(int i=0;i<3;i++)
  for(int j=0;j<3;j++)
    tmpSum+=Pole[i][j];
if(tmpSum<10)
  // все поля заполнили
azeriker
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
30.11.2012, 15:57  [ТС]     Оператор условия #19
ValeryS, спасибо за помошь, попробую заново написать всё с 0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 16:16     Оператор условия
Еще ссылки по теме:

Оператор условия C++
C++ Оператор условия. Определить, пересекаются ли заданные кривая и прямая
C++ Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
30.11.2012, 16:16     Оператор условия #20
Цитата Сообщение от azeriker Посмотреть сообщение
ValeryS, спасибо за помошь,
Для "спасибы" кнопка есть
Yandex
Объявления
30.11.2012, 16:16     Оператор условия
Ответ Создать тему
Опции темы

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