Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > функция if неодолеть никак ее логику


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

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.... почему?
может быть есть более лучший способ реализовать мое условие?, или проконсультируйте чайника что не так делаю..

Автор: Дрон 20.12.2006, 18:39
В С++ оператор сравнения это == а не =.

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

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

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

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

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

Автор: UniBomb 20.12.2006, 18:58
MegaUser

Код

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


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

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

Автор: Partizan 20.12.2006, 19:05
Цитата

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


А так слабо?

Код

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

Автор: bilbobagginz 20.12.2006, 19:06
Цитата

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

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

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



Автор: Дрон 20.12.2006, 19:13
Цитата(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

Автор: UniBomb 20.12.2006, 19:14
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])


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

Автор: bilbobagginz 20.12.2006, 19:43
Цитата

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

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


Автор: Xenon 20.12.2006, 20:10
Истина все, что не 0 

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

Ок, не буду говорить за Си, но в С++ это должно быть определено однозначно:
http://msdn2.microsoft.com/en-us/library/tf4dy80a(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.

Автор: MegaUser 21.12.2006, 12:03
Цитата(Дрон @ 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 почему?, вроде все верно сделал......

Автор: Anikmar 21.12.2006, 15:45
Цитата

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


Я бы всетаки ориентировался, что ложь это 0, а истина - все остальное. Потому, что если алгоритм будет заточен именно на то, что истина 1, то возможна его неправильная работа:

Код

int i; 

//i = Некоторое значение, которое должно быть 1 при правильной работе
// Если здесь i получает значение 2 или любое другое, то слудующее условие отработает неправильно

if (i) { ... Ветка, которая правильная}

// А вот такой подход будет работать надежнее
if(!i) { Ветка, которая "неправильная"}


В любом случае лично я использую явное сравнение - 100% гарантия успеха
if (i==0) { ...} else {...}

Автор: WatchCat 21.12.2006, 17:27
Цитата(Anikmar @  21.12.2006,  22:45 Найти цитируемый пост)
Я бы всетаки ориентировался, что ложь это 0, а истина - все остальное. Потому, что если алгоритм будет заточен именно на то, что истина 1, то возможна его неправильная работа:

Дело в том, что if может проверять не только  тип bool, так ещё с C пошло. Поэтому надо всегда учитывать что true это всё что не 0.
Код

int t = 5;
if(t){
    cout << "Passed if(5)" << endl;
}
t = 0;
if(t){ // не отработает.
    cout << "Passed if(0)" << endl;
}
cout << "end" << endl;


Результат будет 
Код

Passed if(5)
end


 smile 

Автор: Little_Lamer 21.12.2006, 17:40
MegaUser, хмм.. судя по твоей задаче, при подсчете mnoj тебе вместо 

if (x1==a[0]){x1=1;}

нужно поставить 

if (x==a[0]){x1=1;}

Автор: MegaUser 21.12.2006, 18:14
Цитата(Little_Lamer @ 21.12.2006,  17:40)
MegaUser, хмм.. судя по твоей задаче, при подсчете mnoj тебе вместо 

if (x1==a[0]){x1=1;}

нужно поставить 

if (x==a[0]){x1=1;}

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

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  и когда мне понадобится?, или отошлите где это обсуждалось, чето я порыскал по форуму и ненашел(поиск неработает кстати на форуме)... 

Автор: Anikmar 21.12.2006, 19:21
Если есть 100% гарантия, что true == 1 то будет работать. Лично у меня ее нет - так как лично сталкивался с компилятором, который true преобразовывал в -1 (не помню какой - давно было)

Лично я бы сделал так (может подлиньше, но 100% работать будет)

Код

int  k=0;
if (x == a[0]) k++;
if (y == a[1]) k++;
if (z == a[2]) k++;
rez = 5*k;

Автор: JackYF 21.12.2006, 19:30
else (x2,y2,z2=0);

замени на 
Код

else (x2=y2=z2=0);


Оператор запятая в С++ имеет совсем другой смысл.

Автор: Daevaorn 21.12.2006, 19:33
Цитата(Anikmar @  21.12.2006,  20:21 Найти цитируемый пост)
Если есть 100% гарантия, что true == 1 то будет работать.

Тут уже говорилось, в стандарте прописано, что при преобразовании rvalue типа  bool к rvalue типа int, false -> 0 и true -> 1
Если же идет обратное преобразование, то: 0, нулевой указатель, нулевой указатель на метод -> false, всё остальное -> true

Автор: Anikmar 21.12.2006, 20:28
Видимо с -1 у меня компилятор Си был. Не помню, давно было, но после этого такие конструкции я не использую (да и большого смысла нет).

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

Автор: Дрон 21.12.2006, 22:29
Цитата(Anikmar @  21.12.2006,  20:28 Найти цитируемый пост)
Видимо с -1 у меня компилятор Си был.

Я такое знаю только в Бейсике.

Цитата(Anikmar @  21.12.2006,  20:28 Найти цитируемый пост)
Конечно На С++ можно в одну строку записать абалденную конструкцию. Но когда к такому приколу возвращаешься через пол-года, то весьма много о себе же вслух произносишь нецензурного, пытаясь врубиться в то, что сам написал. 

Угу. Я и не говорю, что так стоит делать. Просто раз попросили одной строкой -- я и записал smile

Автор: UniBomb 22.12.2006, 00:59
MegaUser, потому что неправильно написано - else не проверяет на истинность, потому оно и переводится как иначе. Ты логически построй структуру если тырыпыры, иначе трам-пам-пам. А тот вариант, что у тебя написан должен выглядеть так:

Код

if (x1 == a[0] {...}
else if (y1 == a[1] {...}
else if (z1 == a[2]) {...}
else {mnoj= x1+ y1+ z1;}


Здесь проверяется переменная x1, если она равна числу а, то остальное даже не проверяется... Тоже самое относится к остальным переменным... Ну и в конце, если ни одна переменная не подходит, то находим mnoj...

Автор: MegaUser 22.12.2006, 11:19
спасибо всем, много чего нового(чего в книжках нету) узнал, вот что у меня в итоге получилось:
посмотрите как гуру может  надо что то не так делать или как то по другому, мне важно мнение специалистов, так как для меня, то что  я написал - все как надо, тока несмеятся если есть глупые какие нить вещи в ней, третья по счету моя програмулина 
Код

#include "iostream"

  using namespace std;
    int x;
    int y;
    int z;
    int x2;
    int y2;
    int z2;
    int rez;
    int rez2;
    int nal=10;
    int stavka;
 int rezult();
 int main();
 int man2();

 int main()
{

    cout << "*********************************************\n";
    cout << "*********************************************\n";
    cout << "***************IGRA TIPA KAZINO**************\n";
    cout << "*********************************************\n";
    cout << "*********************************************\n\n";
    nal=rez2+nal;
    if (nal<=0){cout <<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n*********GAME OVER***********\n\n\n\n\n\n\n\n\n\n\n\n\n\n";nal=10; system("PAUSE");}
    cout << "=================NALICHKA: "<< nal<<"================\n";
    cout <<"VVEDI STAVKU:  ";
    cin>> stavka;
    if (stavka>nal){cout <<"NIFIGA!!!!  U TEBYA STOKA NALICHKI NETU!!!\n<<";main();}
 man2();
}
int man2()
{
    cout <<"Vvedi pervoe chislo ot 1 do 9:  ";
    cin>>x;
    cout <<"Vvedi vtoroe chislo ot 1 do 9:  ";
    cin>>y;
    cout <<"Vvedi trtie chislo  ot 1 do 9:  ";
    cin>>z;
 const int n=3;//генератор случайных чисел(тока он странный какойто)
 int a[n];
 cout<<"##########VYPALI CHISLA#########"<<endl;
  for (int i=0; i<n; i++)
  {
      a[i]=rand()%9+1;
      cout<< "################################"<<a[i]<<"\n";
  };
//это условия для расчета результата
if (x==a[0]&&y==a[1]&&z==a[2]){rez=50;cout<< "\n!!!NU TIPA BINGO!!!! VSE UGADAL!!!\n";rezult(); }
else rez=0;
if (x==a[0]||y==a[1]||z==a[2]){rez=5*( (x==a[0]) + (y==a[1]) + (z==a[2]) ); rezult();}
else rez=0;
if (x==a[2]||x==a[1]){x2=2;}
else x2=0;
if (y==a[0]||y==a[2]){y2=2;}
else y2=0;
if (z==a[0]||z==a[1]){z2=2;}
else z2=0;
//конец условий  исчисления результата
rezult();//передаю управление функции для расчета результата
}
int rezult()
{
rez2=((rez+x2+y2+z2)*stavka-stavka);
cout <<"\nVuygral stolko: "<<rez2<<"\nStavka byla:  "<<stavka <<"\n";
main();//прыгаем в начало где идет расчет ниличности и ввода ставки
}
 

Автор: Anikmar 22.12.2006, 11:53
Ой-ой. Так нельзя делать:

Код

int rezult()
{
rez2=((rez+x2+y2+z2)*stavka-stavka);
cout <<"\nVuygral stolko: "<<rez2<<"\nStavka byla:  "<<stavka <<"\n";
main();//прыгаем в начало где идет расчет ниличности и ввода ставки
}


Если ты будешь вызывать main по кругу - постоянно сжирать стек будешь.
Про то, что это вечный кайф получится - я молчу (как выйти из программы интересно? - Только по Ctrl+c?)

Общая структура должна быть такая:
Код

main()
{
   do
   {
      // Тут вызываем меню или ставку
      // и вызываем result
   } while (не условие выхода из цикла)
}
result()
{
  // Тут считаем бабло
}


Автор: MegaUser 22.12.2006, 12:51
спасиб за подсказку.... ща попробую что нить сделать..
выход только по Ctrl+c, ибо я недодумаюсь никак как сделать выход из программы скажем по нжатию кнопки Q... 
вот так получилось теперь, main нетрогается, правильно ли?? а для чего в main был совет для использования do/while?
и еще про сжирание стека, это только касаемо только main , или другие тоже нежелательно покругу пускать? 
Код

#include "iostream"

  using namespace std;
    int x;
    int y;
    int z;
    int x2;
    int y2;
    int z2;
    int rez;
    char quit;
    int rez2;
    int nal=10;
    int stavka;
 int rezult();
 int main();
 int man2();

 int main()
{
    cout << "*********************************************\n";
    cout << "*********************************************\n";
    cout << "***************IGRA TIPA KAZINO**************\n";
    cout << "*********************************************\n";
    cout << "*********************************************\n\n";
rezult();//ïîñëå âñòóïëåíèÿ -> ê ðàñ÷åòàì
 }
int man2()
{
    cout <<"Vvedi pervoe chislo ot 1 do 9:  ";
    cin>>x;
    cout <<"Vvedi vtoroe chislo ot 1 do 9:  ";
    cin>>y;
    cout <<"Vvedi trtie chislo  ot 1 do 9:  ";
    cin>>z;
 const int n=3;//ãåíåðàòîð ñëó÷àéíûõ ÷èñåë(òîêà îí ñòðàííûé êàêîéòî)
 int a[n];
 cout<<"##########VYPALI CHISLA#########"<<endl;
  for (int i=0; i<n; i++)
  {
      a[i]=rand()%9+1;
      cout<< "################################"<<a[i]<<"\n";
  };
//ýòî óñëîâèÿ äëÿ ðàñ÷åòà ðåçóëüòàòà, òàê äî êîíöà òîëêîì è íåïðîðàáîòàë
if (x==a[0]&&y==a[1]&&z==a[2]){rez=50;cout<< "\n!!!NU TIPA BINGO!!!! VSE UGSDAL!!!\n";rezult(); }
else rez=0;
if (x==a[0]||y==a[1]||z==a[2]){rez=5*( (x==a[0]) + (y==a[1]) + (z==a[2]) ); rezult();}
else rez=0;
if (x==a[2]||x==a[1]){x2=2;}
else x2=0;
if (y==a[0]||y==a[2]){y2=2;}
else y2=0;
if (z==a[0]||z==a[1]){z2=2;}
else z2=0;
//êîíåö óñëîâèé íåïðîðàáîòàííûõ äëÿ èñ÷èñëåíèÿ ðåçóëüòàòà
rezult();//ïåðåäàþ óïðàâëåíèå ôóíêöèè äëÿ ðàñ÷åòà ðåçóëüòàòà
}
int rezult()
{
    cout << "TO QUIT PRESS: q  TO PLAY PRESS: p  ";
    cin>> quit;
    if (quit =='q'||quit =='Q') exit(0);
    else
rez2=((rez+x2+y2+z2)*stavka-stavka);
cout <<"\nVuygral stolko: "<<rez2<<"\nStavka byla:  "<<stavka <<"\n";
nal=rez2+nal;
    if (nal<=0)
    {cout <<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n*********GAME OVER***********\n\n\n\n\n\n\n\n\n\n\n\n\n\n";stavka=0;nal=10; system("PAUSE");main();}
    cout << "=================NALICHKA: "<< nal<<"================\n";

    cout <<"VVEDI STAVKU:  ";
    cin>> stavka;
    if (stavka>nal)
    {stavka=0;cout <<"NIFIGA!!!!  U TEBYA STOKA NALICHKI NETU!!!\n<<";
    rezult();}
 man2();
}


от терь с выходом из программы заморочился.... как это реализовать то? smile ...
все привинтил "выход" неполучалось изза того что писал  q вместо 'q' тока он неудобно реализован, но это фигня, главное получилоь, потом можно подумать куда его лучше впихнутьsmile 

Автор: Anikmar 22.12.2006, 14:50
Грубо говоря "Те же яйца вид сбоку"

Последовательность вызовов:
main -> man2 -> result ->man2 ...

Нет возвратов.

Я набросал схему вызовов - там без цикла никак не обойтись (goto исключаю - не тот случай)


Автор: MegaUser 22.12.2006, 15:42
чето я недопонимаю логики для чего нужно do/while , она ведь будет все равно обращатся к функциям main -> man2 -> result ->man2 только внутри будет условие "do  .....  while",
объясни этот момент, если можно, я так чувствую что то важное упускаю.....
еще, я подумал,  может скакать между функциями так?:
    return rezult(),0;
 return man2(),0;


Автор: Anikmar 22.12.2006, 16:45
Цитата(MegaUser @ 22.12.2006,  15:42)
чето я недопонимаю логики для чего нужно do/while , она ведь будет все равно обращатся к функциям main -> man2 -> result ->man2 только внутри будет условие "do  .....  while",
объясни этот момент, если можно, я так чувствую что то важное упускаю.....
еще, я подумал,  может скакать между функциями так?:
    return rezult(),0;
 return man2(),0;

Нет, это тоже ерунда получается.

Делаем функцию main
В ней цикл. Я не могу набрасывать сразу походу - я не помню синтаксис консольных команд (не разу с ними не работал) - поэтому набрасываю алгоритм:
Код

main()
{
  char Otvet
  do  // Начинаем гонять по кругу игрушку
  {
      // Ведите числа - тут пользователь вводит числа
      Result(); // Тут рассчитываем бабло
      // Тут выводим итоговое количество денег
      // Теперь спрашиваем пользователя: Вы хотите сыграть еще раз?
      // команда типа  с = getche();
  } while (Otvet = 'y'); // Продолжаем цикл пока пользователь радостно жмет y (в смысле YES!!!!)
  // Сюда попадаем, если наглый пользователь отказался играть - просто выходим из программы
}

void Result(void)
{
  // Здесь мы считаем бабло
  // для возврата никаких команд не надо, в крайнем случае return;
}


Автор: MegaUser 22.12.2006, 17:29
ага, кажется дошло, я немного нетак сначала тебя понял  smile , терь уже тока в понедельник попрактикуюсь....
спасибы ... 
осталось только чтобы все заработало что у меня в голове придумалось(только одно нестыкуется "пользователь радостно жмет y" - нехотелось чтобы он постоянно жал "y" чтобы продолжить цикл) , и тема можно считать пройдена...

Автор: KelTron 22.12.2006, 17:33
16 строчка в коде MegaUserа, абсолютно бесполезная 

Автор: Anikmar 22.12.2006, 17:35
Цитата(MegaUser @  22.12.2006,  17:29 Найти цитируемый пост)
ага, кажется дошло, я немного нетак сначала тебя понял   , терь уже тока в понедельник попрактикуюсь....
спасибы ... 
осталось только чтобы все заработало что у меня в голове придумалось(только одно нестыкуется "пользователь радостно жмет y" - нехотелось чтобы он постоянно жал "y" чтобы продолжить цикл) , и тема можно считать пройдена... 

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

Автор: apook 22.12.2006, 17:52
Код

#include "iostream.h"
#include "stdlib.h"
#include "conio.h"
//using namespace std;    

int x=0;    
int y=0;    
int z=0;    
int x2=0;    
int y2=0;    
int z2=0;    
int rez=0;    
int rez2=0;    
int nal=10;    
long stavka_=0;

long rezult()    
{
return ((rez +x2 +y2 +z2) *stavka_) -stavka_;    
}


long stavka()
{
long l=0;
cout << "=============NALICHKA: " << nal << "============\n";    
cout <<"VVEDI STAVKU:  ";    
cin >> l;
return l;    
}



void main()    
{
int i=0;
char ch;
start:    
cout << "*********************************************\n";    
cout << "*********************************************\n";    
cout << "***************IGRA TIPA KAZINO**************\n";    
cout << "*********************************************\n";    
cout << "*********************************************\n\n";    

while( (stavka_=(stavka())) >nal )
cout << "NIFIGA!!!!  U TEBYA STOKA NALICHKI NETU!!!\n";


cout << "Vvedi pervoe chislo ot 1 do 9:  ";    
cin >> x;    
cout << "Vvedi vtoroe chislo ot 1 do 9:  ";    
cin >> y;    
cout << "Vvedi trtie chislo  ot 1 do 9:  ";    
cin >> z;
    
const int n =3;    
int a[n]; //генератор случайных чисел(тока он странный какойто)
    
cout << "##########VYPALI CHISLA#########" << endl;    

for( i=0; i <n; i++ )    
{
    a[i] =rand() % 9+1;    
    cout << "################################  ->" << a[i] << "\n";    
    }
    
//это условия для расчета результата    
if( x==a[0] && y==a[1] && z==a[2] )
{
    cout << "\n!!!NU TIPA BINGO!!!! VSE UGADAL!!!\n";
    rez =( (x2=a[0]) +(y2=a[1]) +(z2=a[2]) ) +50;
    rez2 =rezult();
    }
    
else if( x==a[0] || y==a[1] || z==a[2] )
{
    rez =(x2=a[0]) +(y2=a[1]) +(z2=a[2]);
    rez2 =rezult();
    }
    
else
{

cout << x << "-x " << y << "-y " << z << "-z\n";
    
    if( x==a[1] || x==a[2] ) x2=2;
    if( y==a[0] || y==a[2] ) y2=2;
    if( z==a[0] || z==a[1] ) z2=2;
    if( x2!=0 || y2 !=0 || z2 !=0 ) rez2 =rezult();
    }

cout << "\nVuygral stolko: " << rez2 << "\nStavka byla:  " << stavka_ << "\n";

if( rez2 ==0 ) nal=nal-stavka_;
else  nal=nal +rez2;
if( nal <=0 )
{
    cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n*********GAME OVER***********\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
    system("PAUSE");
    }
else
{
  cout << "Ќ «  г ⥡п " << nal << "\n";
    }

cout << "Џа®¤®«¦Ёвм ? Y/N:  ";    
cin >> ch;
if( ch =='y' || ch =='Y' ) goto start; //зҐ в® ­Ґ ў Ї ¤«г    

return;    
}

Только rand че то одно и то-же выдает всегда

Автор: JackYF 22.12.2006, 18:05
Цитата(apook @  22.12.2006,  17:52 Найти цитируемый пост)
Только rand че то одно и то-же выдает всегда


apook, ты
Код

srand(time(NULL));

сделал в начале main() ?


Автор: MegaUser 25.12.2006, 10:48
to Anikmar , я пока недочитал как виндовские проекты собирать пока чертыхаюсь в досовских окнах....((((
to apook некомпилится у меня код этот.....
генератор да дурацкий, другого пока непридумал(но дело времени), поменять int rezult() на long rezult() , это тоже моя недодумка, long будет правильней....
goto ниразу неприменял, везде пишут что нужно стараться обходится без него, и нигде больше про него нерассказывается, что конкретно делает goto(я понимаю что "идти к" может просто есть какие нить нюансы)?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)