Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Jednostavan zadatak,ali ipak problem

[es] :: C/C++ programiranje :: Jednostavan zadatak,ali ipak problem

[ Pregleda: 3208 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Emp
Podgorica

Član broj: 42014
Poruke: 54
*.crnagora.net.



Profil

icon Jednostavan zadatak,ali ipak problem20.10.2005. u 16:10 - pre 225 meseci
Tek se upoznajem sa charima jezika C;)
Problem imam sa sledecim zadatkom:
Dva igrača Ana i Marko naizmjenično bacaju po 2 kockice za jamb. Pobjeđuje igrač koji dobije sumu koja je djeljiva sa 3. Ako oba igrača dobiju sumu djelivu sa 3, bacanja se ponavljaju sve do pobjede jednog od igrača. Napisati program koji sa standardnog ulaza učitava pozitivan cio broj n (0<n<32767), koji služi kao seed za funkciju srand, simulira datu igru i štampa poruku o pobjedniku. Po završetku jedne igre, na ekranu treba da se pojavi poruka "Za novu igru pritsnite D ili d". Ako korisnik unese D ili d, unosi se broj n i igra se nastavlja; u suprotnom, program završava rad.

Problem je u sledecem:
Zadatak sam uradio,sem sto ne umijem da uradim stavku "ako uneses D ili d ide sve iz pocetka,a ako ne zavrsava se program".Mislio sam da to uradim jednostavno koristeci naredbu while.Ali ipak nesto ne stima;)

Moje "resenje" zadatka:

#include <stdio.h>
#include <stdlib.h>

int roll(void);
enum status{Goku,Pikolo,nastavak};
int main()
{
int n,suma1,suma2;
enum status gamestatus;
char odgovor;odgovor='D';
while (odgovor=='D' || odgovor=='d'){
printf("Unesi pozitivan cio broj n (0<n<32767),koji sluzi kao seed:");
scanf("%d",&n);
srand(n);gamestatus=nastavak;
while (gamestatus==nastavak){
suma1=roll();printf("Goku je bacio %d\n",suma1);
suma2=roll();printf("Pikolo je bacio %d\n",suma2);
if (suma1 != suma2 && suma1%3==0)gamestatus=Goku;
if (suma1 != suma2 && suma2%3==0)gamestatus=Pikolo;
if (suma1 == suma2 || (suma1!=suma2 && suma1%3!=0 && suma2%3!=0))
{gamestatus=nastavak;printf("\nNOVO BACANJE:\n");}
}/* end while */
switch(gamestatus){
case Goku:printf("\nGoku je pobijedio!\n");break;
case Pikolo:printf("\nPikolo je pobijedio!\n");break;
}

printf("Za novu igru pritisnite D ili d.\n");
scanf("%c",&odgovor);/*zasto ovo ne radiiiiiiiiiiiiii????*/
}
system("PAUSE");
return 0;
}
int roll(){
int x,y,z;
x=1+(rand()%6);
y=1+(rand()%6);
z=x+y;
printf("\nBacanje:%d+%d=%d\n",x,y,z);
return z;
}


Kad trazim da korisnik unese D ili d,program jednostavno preskoci scanf().
Zadatak je radjen u Dev-C++.
Tek sam poceo da radim u jeziku C,pa bi bilo kakva sugestija/primjedba sto se tiche ovog zadatka bila vise nego pozeljna;)
 
Odgovor na temu

jocat
Jovica T
Inđija

Član broj: 58613
Poruke: 74
*.smin.sezampro.yu.

ICQ: 308769610


Profil

icon Re: Jednostavan zadatak,ali ipak problem20.10.2005. u 17:42 - pre 225 meseci
Evo kod tvog zadatka koji radi ...

Code:

#include <stdio.h>

#include <stdlib.h>



int roll(void);

enum status{Goku,Pikolo,nastavak};

int main()

{  

    int n,suma1,suma2;

    enum status gamestatus;

    char odgovor;odgovor='D';

    while (odgovor=='D' || odgovor=='d'){

      printf("Unesi pozitivan cio broj n (0<n<32767),koji sluzi kao seed:");

      scanf("%d",&n);

      srand(n);gamestatus=nastavak;

      while (gamestatus==nastavak){

       suma1=roll();printf("Goku je bacio %d\n",suma1);

       suma2=roll();printf("Pikolo je bacio %d\n",suma2);

       if (suma1 != suma2 && suma1%3==0)gamestatus=Goku;

       if (suma1 != suma2 && suma2%3==0)gamestatus=Pikolo;

       if (suma1 == suma2 || (suma1!=suma2 && suma1%3!=0 && suma2%3!=0))

       {gamestatus=nastavak;printf("\nNOVO BACANJE:\n");}

      }/* end while */

      switch(gamestatus){

                       case Goku:printf("\nGoku je pobijedio!\n");break;

                       case Pikolo:printf("\nPikolo je pobijedio!\n");break;

                       }

      
      flushall(); /*Evo zbog ove funkcije ce sad da radi ... pogledaj sta ona radi, pa ce ti biti jasno nadam se*/
      
      printf("Za novu igru pritisnite D ili d.\n");

      scanf("%c",&odgovor);/*zasto ovo ne radiiiiiiiiiiiiii????*/

    }

      system("PAUSE");  

  return 0;

}

int roll(){

    int x,y,z;

    x=1+(rand()%6);

    y=1+(rand()%6);

    z=x+y;

    printf("\nBacanje:%d+%d=%d\n",x,y,z);

    return z;

}

... sve se moze kad se hoce ...
 
Odgovor na temu

Emp
Podgorica

Član broj: 42014
Poruke: 54
*.crnagora.net.



Profil

icon Re: Jednostavan zadatak,ali ipak problem20.10.2005. u 18:00 - pre 225 meseci
Ne moze.Javlja sledecu gresku:
[Linker error] undefined reference to `flushall'

A profesor nam nije spominjao nikakvu funkciju flushall.
Moze li kako bez toga;)?
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Jednostavan zadatak,ali ipak problem20.10.2005. u 19:22 - pre 225 meseci
Makni red flushall pa kompajliraj.
Nije mi jasna svrha flushall-a?
 
Odgovor na temu

Emp
Podgorica

Član broj: 42014
Poruke: 54
*.crnagora.net.



Profil

icon Re: Jednostavan zadatak,ali ipak problem20.10.2005. u 20:01 - pre 225 meseci
Pa zadatak bez toga flushall je isti onakav kakav sam ga ja napisao.
On je samo dodao fushall.
Neradi ni sa tim,a ni bez toga.
Jednostavno,ne trazi mi da unesem slovo D ili d za novu igru iako sam stavio
scanf("%c",&odgovor)
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Jednostavan zadatak,ali ipak problem20.10.2005. u 20:12 - pre 225 meseci
Probaj _flushall() .
 
Odgovor na temu

Emp
Podgorica

Član broj: 42014
Poruke: 54
*.crnagora.net.



Profil

icon Re: Jednostavan zadatak,ali ipak problem20.10.2005. u 20:22 - pre 225 meseci
To je to,radi.Znaci treba _flushall().Hvala.
Mada profesor nam nije rekao za tu funkciju,vjerovatno je moguce nekako i bez toga.
Inace sta radi ova funkcija?
Kad nisam chuo od profesora,onda da naucim od vas;)
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Jednostavan zadatak,ali ipak problem20.10.2005. u 21:21 - pre 225 meseci
MSDN
 
Odgovor na temu

Iljo
Marko Ilić
Varazdin-Zagreb

Član broj: 65402
Poruke: 35
*.net.t-com.hr.



Profil

icon Re: Jednostavan zadatak,ali ipak problem23.10.2005. u 23:06 - pre 224 meseci
Možeš to bez _flushall funkcije.
Trebaš samo u ovom redu:
Code:
scanf("%c",&odgovor);

napraviti ovo:
Code:
scanf(" %c",&odgovor);

E sad vidiš da je fora samo u razmaku između navodnika i %.

A to je zato jer kad ti ne staviš razmak scanf učitava i bijeline (to su ti prelazi u novi red, razmaci, tabovi i slično). A ako staviš razmak onda se takve stvari ignoriraju i ne stavljaju u taj ulazni buffer. (kojeg da isprazniš trebaš koristiti neke od flush funkcija)
Evo sad barem znaš na šta trebaš paziti.


Sorry ljudi za offtopic ali zna li netko šta se desilo sa siteom programiranje.net?

[Ovu poruku je menjao Iljo dana 24.10.2005. u 00:09 GMT+1]
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Jednostavan zadatak,ali ipak problem23.10.2005. u 23:51 - pre 224 meseci
Citat:
Sorry ljudi za offtopic ali zna li netko šta se desilo sa siteom programiranje.net?

tvrtka koja je registrirala domenu je otisla u aut.
Ovdje nas ima par sa prog.net , ali nemoj gajiti prevelike nade.
http://www.code-it.net/news.php
 
Odgovor na temu

Iljo
Marko Ilić
Varazdin-Zagreb

Član broj: 65402
Poruke: 35
*.math.hr.



Profil

icon Re: Jednostavan zadatak,ali ipak problem24.10.2005. u 12:13 - pre 224 meseci
Šteta šta se raspala ekipa sa p.net.
A ovaj forum "Code it" me čak izgledom malo podsječa na p.net.
No ima vidim i ovdje ljudi sa p.net-a...

Pozdrav
 
Odgovor na temu

unknown-3

Član broj: 64850
Poruke: 145
*.suonline.net.



+1 Profil

icon Re: Jednostavan zadatak,ali ipak problem24.10.2005. u 20:38 - pre 224 meseci
e...u koju skoluuuu ides?!!!!
 
Odgovor na temu

[es] :: C/C++ programiranje :: Jednostavan zadatak,ali ipak problem

[ Pregleda: 3208 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.