![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
MegaUser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
начал недавно изучать С++ и столкнулся с такой непонятностью, помогите разобраться:
условие такое нужно чтобы одна из трех переменных равнялась такомуто числу, если другие три переменные равняются еще определенным трем переменным...(надеюсь понятно), вот что я написал :
причем перед этим кодом у меня переменные x y z даже близко неравны a[0],a[1]или a[2], по идее результат должен равняться 0 но в итоге результат у меня получается 50.... почему? может быть есть более лучший способ реализовать мое условие?, или проконсультируйте чайника что не так делаю.. |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 92 |
В С++ оператор сравнения это == а не =.
Т.е. надо писать if (x == a[0]) и т.п. Это сообщение отредактировал(а) Дрон - 20.12.2006, 18:40 -------------------- Да. Именно так. |
|||
|
||||
CaptainFlint |
|
|||
![]() Искатель сокровищ ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 26.2.2003 Где: Москва Репутация: нет Всего: 23 |
MegaUser
Сравнение в плюсах - это ==, а одиночное = - это присваивание (даже внутри if'а). -------------------- Почему же, ё-моё, ты нигде не пишешь "ё"? -------------------- Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) |
|||
|
||||
MegaUser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
от млин точно, спасибо))) , читал же даже про это, получилось,
тада еще вопрос: к такому коду я пришел за пол дня, сначала пробовал записать все в одну строчку, щас уже непомню как у меня это выглядело, но ничего неполучалось, поскажите как оформить это одной строкой(через && или ||). |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 92 |
А можешь подробнее объяснить задачу, а то
не слишком понятно, и не очень соотносится с тем, что написано в коде. -------------------- Да. Именно так. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
MegaUser,
По другому одной строкой не получится... Это сообщение отредактировал(а) UniBomb - 20.12.2006, 18:59 |
|||
|
||||
MegaUser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
To Дрон
я тока как неделю сел за с++ (типа хобби себе придумал), почитаю книжки прикину в голове задачу(так как книжные неочень), и пытаюсь ее реализовать, вот и сегодня почитав , поставил себе задачу написать чтото типа джек пота(казиношная игра) , есть три случайно выпадающие цифры, и соответственно нужно написать алгоритм расчета выигрыша , т.е если я набрал 123, а выпало 456 выигрыш =0 , а если 156 выпало то скажем выигрыш равен 250.... To UniBomb а почему нельзя через "и" или "или" реализовать? |
|||
|
||||
Partizan |
|
||||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 4 Всего: 67 |
А так слабо?
-------------------- СУВ, Partizan. |
||||
|
|||||
bilbobagginz |
|
||||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
совет: при сравнении с константой, ставь константу слева от ==. тогда если ошибешься, и оставишь "=", при компиляции выйдет ошибка.
-------------------- Я ещё не демон. Я только учусь. |
||||
|
|||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 92 |
Во! Совсем другое дело. Сейчас подумаю... ![]()
Вуаля ![]() Хитрость в том, что в Си можно считать, что истина (true) равна 1, а ложь (false) -- 0. Ну и наоборот, если понадобится ![]() Это сообщение отредактировал(а) Дрон - 20.12.2006, 19:15 -------------------- Да. Именно так. |
|||
|
||||
UniBomb |
|
||||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
MegaUser,
Partizan, Я не понял смысл сказанного:
Но судя по листингу - если какая то из переменных равна какому то числу, то другой переменной с той же буквой присвоить значение 50. Здесь же:
Присваивается значение всем переменным, но только в случае всеобщего равенства (x == a[0] && y == a[1] && z == a[2]) Оба куска кода которые вы написали будут выполнять разные действия. |
||||
|
|||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
мне рассказывали, что единственное что могут обещать в Си - false == 0 a то, что true == 1 я не слышал. ( не факт что это не правда ) может быть один компилятор и реализует true через 1. а другой может и не реализует. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Истина все, что не 0
|
|||
|
||||
Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 92 |
Ок, не буду говорить за Си, но в С++ это должно быть определено однозначно: http://msdn2.microsoft.com/en-us/library/t...80a(VS.80).aspx
То же самое упоминается здесь: http://www.kuzbass.ru:8086/docs/isocpp/conv.html в пункте 4.5.4. Это сообщение отредактировал(а) Дрон - 20.12.2006, 22:29 -------------------- Да. Именно так. |
||||
|
|||||
MegaUser |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
вот про "истина (true) равна 1, а ложь (false) -- 0" - ценная информация, ее и буду использовать.... спасибо ![]() а, опять столкнулся с непонятками, вот еще вопрос: почему
у меня mnoj равна всегда 0 почему?, вроде все верно сделал...... Это сообщение отредактировал(а) MegaUser - 21.12.2006, 12:16 |
||||||
|
|||||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Я бы всетаки ориентировался, что ложь это 0, а истина - все остальное. Потому, что если алгоритм будет заточен именно на то, что истина 1, то возможна его неправильная работа:
В любом случае лично я использую явное сравнение - 100% гарантия успеха if (i==0) { ...} else {...} |
||||
|
|||||
WatchCat |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 14.10.2006 Репутация: нет Всего: нет |
Дело в том, что if может проверять не только тип bool, так ещё с C пошло. Поэтому надо всегда учитывать что true это всё что не 0.
Результат будет
![]() |
||||
|
|||||
Little_Lamer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 5.12.2006 Репутация: нет Всего: нет |
MegaUser, хмм.. судя по твоей задаче, при подсчете mnoj тебе вместо
if (x1==a[0]){x1=1;} нужно поставить if (x==a[0]){x1=1;} Это сообщение отредактировал(а) Little_Lamer - 21.12.2006, 17:41 |
|||
|
||||
MegaUser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
да и те и те переменные вставлял, результат один и тотже, на этот вариант расчета я в итоге забил и сделал чуть подругому, просто очнь интересно было почему неработает такой код...... плохо что непонятно изза чего он непашет можно лопухнутся следующий раз с чем нибудь.. to Anikmar: я вот так у себя правду ложь реализовал : if (x==a[0]||y==a[1]||z==a[2]){rez=5*( (x==a[0]) + (y==a[1]) + (z==a[2]) ); rezult();} можеш на этом примере подсказать как подстраховаться, а то я тока начал изучать с++ и чесно говоря невъехал как это: if (i==0) { ...} else {...} и еще у меня вопрос некасаемо if, в начале я прописываю #include "iostream" что это я примерно понял, но вот иногда возникают мысли насчет того , как определить что мне нужно в программе добавить #include "iomanip" или что то еще, короче как узнать какой #include и когда мне понадобится?, или отошлите где это обсуждалось, чето я порыскал по форуму и ненашел(поиск неработает кстати на форуме)... Это сообщение отредактировал(а) MegaUser - 21.12.2006, 18:52 |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Если есть 100% гарантия, что true == 1 то будет работать. Лично у меня ее нет - так как лично сталкивался с компилятором, который true преобразовывал в -1 (не помню какой - давно было)
Лично я бы сделал так (может подлиньше, но 100% работать будет)
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
else (x2,y2,z2=0);
замени на
Оператор запятая в С++ имеет совсем другой смысл. Это сообщение отредактировал(а) JackYF - 21.12.2006, 19:31 |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Тут уже говорилось, в стандарте прописано, что при преобразовании rvalue типа bool к rvalue типа int, false -> 0 и true -> 1 Если же идет обратное преобразование, то: 0, нулевой указатель, нулевой указатель на метод -> false, всё остальное -> true |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Видимо с -1 у меня компилятор Си был. Не помню, давно было, но после этого такие конструкции я не использую (да и большого смысла нет).
Конечно На С++ можно в одну строку записать абалденную конструкцию. Но когда к такому приколу возвращаешься через пол-года, то весьма много о себе же вслух произносишь нецензурного, пытаясь врубиться в то, что сам написал. |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 92 |
Я такое знаю только в Бейсике. Угу. Я и не говорю, что так стоит делать. Просто раз попросили одной строкой -- я и записал ![]() -------------------- Да. Именно так. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
MegaUser, потому что неправильно написано - else не проверяет на истинность, потому оно и переводится как иначе. Ты логически построй структуру если тырыпыры, иначе трам-пам-пам. А тот вариант, что у тебя написан должен выглядеть так:
Здесь проверяется переменная x1, если она равна числу а, то остальное даже не проверяется... Тоже самое относится к остальным переменным... Ну и в конце, если ни одна переменная не подходит, то находим mnoj... |
|||
|
||||
MegaUser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
спасибо всем, много чего нового(чего в книжках нету) узнал, вот что у меня в итоге получилось:
посмотрите как гуру может надо что то не так делать или как то по другому, мне важно мнение специалистов, так как для меня, то что я написал - все как надо, тока несмеятся если есть глупые какие нить вещи в ней, третья по счету моя програмулина
|
|||
|
||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Ой-ой. Так нельзя делать:
Если ты будешь вызывать main по кругу - постоянно сжирать стек будешь. Про то, что это вечный кайф получится - я молчу (как выйти из программы интересно? - Только по Ctrl+c?) Общая структура должна быть такая:
|
||||
|
|||||
MegaUser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
спасиб за подсказку.... ща попробую что нить сделать..
выход только по Ctrl+c, ибо я недодумаюсь никак как сделать выход из программы скажем по нжатию кнопки Q... вот так получилось теперь, main нетрогается, правильно ли?? а для чего в main был совет для использования do/while? и еще про сжирание стека, это только касаемо только main , или другие тоже нежелательно покругу пускать?
от терь с выходом из программы заморочился.... как это реализовать то? ![]() все привинтил "выход" неполучалось изза того что писал q вместо 'q' тока он неудобно реализован, но это фигня, главное получилоь, потом можно подумать куда его лучше впихнуть ![]() Это сообщение отредактировал(а) MegaUser - 22.12.2006, 14:27 |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Грубо говоря "Те же яйца вид сбоку"
Последовательность вызовов: main -> man2 -> result ->man2 ... Нет возвратов. Я набросал схему вызовов - там без цикла никак не обойтись (goto исключаю - не тот случай) |
|||
|
||||
MegaUser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
чето я недопонимаю логики для чего нужно do/while , она ведь будет все равно обращатся к функциям main -> man2 -> result ->man2 только внутри будет условие "do ..... while",
объясни этот момент, если можно, я так чувствую что то важное упускаю..... еще, я подумал, может скакать между функциями так?: return rezult(),0; return man2(),0; |
|||
|
||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Нет, это тоже ерунда получается. Делаем функцию main В ней цикл. Я не могу набрасывать сразу походу - я не помню синтаксис консольных команд (не разу с ними не работал) - поэтому набрасываю алгоритм:
|
||||
|
|||||
MegaUser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
ага, кажется дошло, я немного нетак сначала тебя понял
![]() спасибы ... осталось только чтобы все заработало что у меня в голове придумалось(только одно нестыкуется "пользователь радостно жмет y" - нехотелось чтобы он постоянно жал "y" чтобы продолжить цикл) , и тема можно считать пройдена... |
|||
|
||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: нет Всего: 38 |
16 строчка в коде MegaUserа, абсолютно бесполезная
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Ну тогда - сам Бог велел изучать нормальные виндовые приложения. Сделать окошки, кнопочки. Можно звук мерзкий добавить. Можно и не мерзкий. |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Только rand че то одно и то-же выдает всегда Это сообщение отредактировал(а) apook - 22.12.2006, 17:54 -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
apook, ты
сделал в начале main() ? |
|||
|
||||
MegaUser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2006 Репутация: нет Всего: нет |
to Anikmar , я пока недочитал как виндовские проекты собирать пока чертыхаюсь в досовских окнах....((((
to apook некомпилится у меня код этот..... генератор да дурацкий, другого пока непридумал(но дело времени), поменять int rezult() на long rezult() , это тоже моя недодумка, long будет правильней.... goto ниразу неприменял, везде пишут что нужно стараться обходится без него, и нигде больше про него нерассказывается, что конкретно делает goto(я понимаю что "идти к" может просто есть какие нить нюансы)? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |