1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
1

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

29.11.2012, 20:41. Показов 1124. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть массив в нём есть 10 элементов(например цифр 1). Например я могу изменять любой элемент массива на 0. Как мне прописать, что бы при наличии у элементов массива №1, №2, №3 значения равного 0, происходил например вывод на экран какого-либо сообщения или выполнение действия?
Конструкция
C++
1
2
3
4
if(Arr[0]==Arr[1]==Arr[2])
{
....
}
-не катит
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2012, 20:41
Ответы с готовыми решениями:

Оператор условия в C++
Не как не могу написать программу по данной задаче(вложение)

Оператор условия
Можете помочь с оператором условия надо сделать чтобы он писал всех тех людей кому старше 62 в 3...

оператор условия if.
Я написал программу: #include<iostream.h> void main(void) { int test=95; if(test>=90)...

оператор условия if
я написал программу: #include<iostream.h> void main(void) { int test; cout<<"test=";...

19
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 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. Угадай почему.
1
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
29.11.2012, 20:55  [ТС] 3
Если сделать так, то в цикле при проверки на верность, я могу ведь изменить другой элемент массива и тогда первые три окажутся равными и произойдёт то, что мне не нужно...
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
29.11.2012, 21:25 4
Цитата Сообщение от azeriker Посмотреть сообщение
Если сделать так, то в цикле при проверки на верность, я могу ведь изменить другой элемент массива и тогда первые три окажутся равными и произойдёт то, что мне не нужно...
Я тебя совершенно не понял. Тебе трудно писать?
Что тебе не нужно? Покажи пример.
0
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
30.11.2012, 05:28  [ТС] 5
Я пишу сейчас крестики-нолики и практически всё готово, это моя первая более-менее серьёзная работа. Мне осталось добавить только проверку на победу. Я конечно понимаю что этот проект не о чём, но я пишу для себя. Всё поле у меня представляет собой одномерный символьный массив размером в 9, и мне нужна проверка, но я не понимаю как реализовать её покороче
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,511
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]))
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
30.11.2012, 09:20 7
Цитата Сообщение от ValeryS Посмотреть сообщение
0 0 1 сработает
0 1 0 сработает
1 0 0 сработает
почему ты это называешь сработает, если это очевидно ошибка и автору нужно чтобы код срабатывал следующим образом:если 3 числа равны - заходил в if, иначе заходил в else.
А в твоём примере он не работает, т.к. заходит в if даже если числа не равны друг другу!
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
30.11.2012, 09:30 8
----------------удалил----------------
0
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]!='-'
т.к изначально все имеют значения '-'
теперь вроде всё нормально, спс
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
30.11.2012, 10:21 10
Цитата Сообщение от azeriker Посмотреть сообщение
к твоему коду пришлось добавить && Arr[1]!='-'
т.к изначально все имеют значения '-'
теперь вроде всё нормально, спс
ты о чём вообще? какие значения? Что значит "изначально"? Ты даже программу здесь не выложил! я не понимаю, о чём ты говоришь и при чём здесь '-'
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,511
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]))
но он как то это проигнорировал
0
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;
        
    }
}
думаю разберётесь
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
30.11.2012, 12:58 13
Цитата Сообщение от ValeryS Посмотреть сообщение
т.е ты сказал что if сработает если все три переменные равны 1
я тебе показал еще три условия когда сработает if
да, но я сказал, при этих условиях код работать не будет, а не if
т.к. будет выдавать сообщение "3 числа равны" в ответ на неравные числа. Это я тоже называю
Цитата Сообщение от ValeryS Посмотреть сообщение
код тоже скомпилируется, но будет не работать
Т.к. отвечать "3 числа равны" в ответ на 0 0 1 - это неверная работа
1
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,511
30.11.2012, 13:03 14
Цитата Сообщение от azeriker Посмотреть сообщение
for (MainT=1;MainT>0; MainT++)
цикл то вечен(или почти вечен окончится после 2147483646 итерации)
ты точно этого хотел???

Добавлено через 2 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
при этих условиях программа работать не будет,
я это называю будет работать неправильно
извини, не понял твою терминологию
претензии снимаю
0
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
30.11.2012, 13:05  [ТС] 15
пока мне это и нужно, но потом я хочу чтобы при выигрыше можно было сделать рестарт и при заполнении всех клеток тоже рестарт, а выйти и крестиком можно
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,511
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]
0
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
30.11.2012, 13:17  [ТС] 17
я эту тему(про параметры) немного не понял когда читал книжку, вот и приходится писать так, а класс думал понадобится с самого начала, а потом удалять жалко уже было
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,511
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)
  // все поля заполнили
0
1 / 1 / 0
Регистрация: 26.11.2012
Сообщений: 12
30.11.2012, 15:57  [ТС] 19
ValeryS, спасибо за помошь, попробую заново написать всё с 0
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,511
30.11.2012, 16:16 20
Цитата Сообщение от azeriker Посмотреть сообщение
ValeryS, спасибо за помошь,
Для "спасибы" кнопка есть
2
30.11.2012, 16:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2012, 16:16
Помогаю со студенческими работами здесь

Оператор условия. Определить, пересекаются ли заданные кривая и прямая
Определить пересекаются ли кривая y=ax³+bx²+cx+d и прямая y=fx+g. При положительном ответе найти...

Записать оператор условия для проверки принадлежности m заданному отрезку [20;30]
Записать оператор условия для проверки принадлежности m заданному отрезку

Оператор "запятая" внутри условия if(a>0, b>0)
Почему ЭТО не является ошибкой? if(a&gt;0 , b&gt;0) { cout &lt;&lt; &quot;1&quot;; } Что делает запятая?

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли определённые...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru