Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> функция if неодолеть никак ее логику, вопрос от новичка по поводу if 
:(
    Опции темы
MegaUser
Дата 20.12.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.12.2006

Репутация: нет
Всего: нет



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

if (x=a[0]){x2=50;}
if (y=a[1]){y2=50;}
if (z=a[2]){z2=50;}
else (x2,y2,z2=0);
rezult=(x2+y2+z2)*5;

причем перед этим кодом у меня переменные x y z даже близко неравны a[0],a[1]или a[2], по идее результат должен равняться 0 но в итоге результат у меня получается 50.... почему?
может быть есть более лучший способ реализовать мое условие?, или проконсультируйте чайника что не так делаю..

PM MAIL   Вверх
Дрон
Дата 20.12.2006, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



В С++ оператор сравнения это == а не =.

Т.е. надо писать if (x == a[0])  и т.п.

Это сообщение отредактировал(а) Дрон - 20.12.2006, 18:40


--------------------
Да. Именно так.
PM   Вверх
CaptainFlint
Дата 20.12.2006, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: нет
Всего: 23



MegaUser
Сравнение в плюсах - это ==, а одиночное = - это присваивание (даже внутри if'а).


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
MegaUser
Дата 20.12.2006, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.12.2006

Репутация: нет
Всего: нет



от млин точно, спасибо))) , читал же даже про это, получилось, 
тада еще вопрос: к такому коду я пришел за пол дня, сначала пробовал записать все в одну строчку, щас уже непомню как у меня это выглядело, но ничего неполучалось, поскажите как оформить это одной строкой(через && или ||).
PM MAIL   Вверх
Дрон
Дата 20.12.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



А можешь подробнее объяснить задачу, а то
Цитата(MegaUser @  20.12.2006,  18:35 Найти цитируемый пост)
условие такое нужно чтобы одна из трех переменных  равнялась такомуто числу, если другие  три переменные равняются еще определенным трем переменным...

не слишком понятно, и не очень соотносится с тем, что написано в коде.



--------------------
Да. Именно так.
PM   Вверх
UniBomb
Дата 20.12.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



MegaUser

Код

if (x==a[0]){x2=50;}    if (y==a[1]){y2=50;}    if (z==a[2]){z2=50;}    else (x2,y2,z2=0);


По другому одной строкой не получится...

Это сообщение отредактировал(а) UniBomb - 20.12.2006, 18:59


--------------------
PM MAIL ICQ Skype   Вверх
MegaUser
Дата 20.12.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.12.2006

Репутация: нет
Всего: нет



To Дрон
я тока как неделю сел за с++ (типа хобби себе придумал), почитаю книжки прикину в голове задачу(так как книжные неочень), и пытаюсь ее реализовать, вот и сегодня почитав , поставил себе задачу написать чтото типа джек пота(казиношная игра) , есть три случайно выпадающие цифры, и соответственно нужно написать алгоритм расчета выигрыша , т.е если я набрал 123,
а выпало 456 выигрыш =0 , а если 156 выпало то скажем выигрыш равен 250....
To UniBomb
а почему нельзя через "и" или "или" реализовать?
PM MAIL   Вверх
Partizan
Дата 20.12.2006, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



Цитата

По другому одной строкой не получится...


А так слабо?

Код

if (x == a[0] && y == a[1] && z == a[2]){
x2 = 50;
y2 = 50;
z2 = 50;
}



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
bilbobagginz
Дата 20.12.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



Цитата

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

совет: при сравнении  с  константой, ставь константу слева от ==.
тогда если ошибешься, и оставишь "=", при компиляции выйдет ошибка.
Код

const int c=3; // c - константа
int c_var=3;   // c_var - переменная
int x=5;
if (c_var=x) {. .. } // прокатит, и будешь искать в отладчике - где же ты ошибся
if (х=c_var) {. .. } // прокатит, и будешь искать в отладчике - где же ты ошибся
if (c=х) {. .. }        // не прокатит, компилятор закричит. :)





--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Дрон
Дата 20.12.2006, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



Цитата(MegaUser @  20.12.2006,  19:04 Найти цитируемый пост)
есть три случайно выпадающие цифры, и соответственно нужно написать алгоритм расчета выигрыша , т.е если я набрал 123,
а выпало 456 выигрыш =0 , а если 156 выпало то скажем выигрыш равен 250....

Во! Совсем другое дело. Сейчас подумаю... smile

Код
result = ( (x==a[0]) + (y==a[1]) + (z==a[2]) ) * 250;


Вуаля smile
Хитрость в том, что в Си можно считать, что истина (true) равна 1, а ложь (false) -- 0. Ну и наоборот, если понадобится smile

Это сообщение отредактировал(а) Дрон - 20.12.2006, 19:15


--------------------
Да. Именно так.
PM   Вверх
UniBomb
Дата 20.12.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



MegaUser
Partizan

Я не понял смысл сказанного:

Цитата

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


Но судя по листингу - если какая то из переменных равна какому то числу, то другой переменной с той же буквой присвоить значение 50.

Здесь же:
Код

if (x == a[0] && y == a[1] && z == a[2]){    
x2 = 50;    
y2 = 50;    
z2 = 50;    
}


Присваивается значение всем переменным, но только в случае всеобщего равенства (x == a[0] && y == a[1] && z == a[2])


Оба куска кода которые вы написали будут выполнять разные действия.


--------------------
PM MAIL ICQ Skype   Вверх
bilbobagginz
Дата 20.12.2006, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



Цитата

Вуаля smile
Хитрость в том, что в Си можно считать, что истина (true) равна 1, а ложь (false) -- 0. Ну и наоборот, если понадобится smile

мне рассказывали, что единственное что могут обещать в Си - false == 0
a то, что true == 1 я не слышал. ( не факт что это не правда )
может быть один компилятор и реализует true через 1.
а другой может и не реализует.




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Xenon
Дата 20.12.2006, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Истина все, что не 0 


--------------------
user posted image  
PM MAIL   Вверх
Дрон
Дата 20.12.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



Цитата
мне рассказывали, что единственное что могут обещать в Си - false == 0

Ок, не буду говорить за Си, но в С++ это должно быть определено однозначно:
http://msdn2.microsoft.com/en-us/library/t...80a(VS.80).aspx
Цитата
The bool type participates in integral promotions. An r-value of type bool can be converted to an r-value of type int, with false becoming zero and true becoming one.


То же самое упоминается здесь: http://www.kuzbass.ru:8086/docs/isocpp/conv.html в пункте 4.5.4.

Это сообщение отредактировал(а) Дрон - 20.12.2006, 22:29


--------------------
Да. Именно так.
PM   Вверх
MegaUser
Дата 21.12.2006, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.12.2006

Репутация: нет
Всего: нет



Цитата(Дрон @ 20.12.2006,  19:13)

Код
result = ( (x==a[0]) + (y==a[1]) + (z==a[2]) ) * 250;


Вуаля smile
Хитрость в том, что в Си можно считать, что истина (true) равна 1, а ложь (false) -- 0. Ну и наоборот, если понадобится smile

вот про "истина (true) равна 1, а ложь (false) -- 0" - ценная информация, ее и буду использовать....
спасибо smile ...
а, опять столкнулся с непонятками, вот еще  вопрос:
почему 
Код

cin >> x,x1;
тыры пыры.....
cin>>y,y1;
тыры пыры итд.....

if (x1==a[0]){x1=1;}
if (y1==a[1]){y1=1;}
if (z1==a[2]){z1=1;} 
//else (x1,y1,z1=0); - это можно писать можно нет результата никакого
mnoj=( x1+ y1+ z1);

if (x==a[0]){x2=50;}
if (y==a[1]){y2=50;}
if (z==a[2]){z2=50;} 
else (x2,y2,z2=0);

rez=mnoj*(x2+y2+z2)

у меня mnoj равна всегда 0 почему?, вроде все верно сделал......

Это сообщение отредактировал(а) MegaUser - 21.12.2006, 12:16
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1291 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.