Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 11 odgovora
  • 4.297 pregleda

Najnovija ↓

Jednostavan zadatak,ali ipak problem 20.10.2005. u 17:10 · pre 256 meseci #1
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;)
Re: Jednostavan zadatak,ali ipak problem 20.10.2005. u 18:42 · pre 256 meseci #2
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;

}
Potpis
... sve se moze kad se hoce ...
Re: Jednostavan zadatak,ali ipak problem 20.10.2005. u 19:00 · pre 256 meseci #3
Ne moze.Javlja sledecu gresku:
[Linker error] undefined reference to `flushall'

A profesor nam nije spominjao nikakvu funkciju flushall.
Moze li kako bez toga;)?
Re: Jednostavan zadatak,ali ipak problem 20.10.2005. u 21:01 · pre 256 meseci #5
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)
Re: Jednostavan zadatak,ali ipak problem 20.10.2005. u 21:22 · pre 256 meseci #7
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;)
Re: Jednostavan zadatak,ali ipak problem 24.10.2005. u 00:06 · pre 255 meseci
izmenjeno 1 put, poslednji put Iljo 24.10.2005. u 00:09
  1. Iljo24.10.2005. u 00:09zapis iz teksta poruke
#9
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?
Re: Jednostavan zadatak,ali ipak problem 24.10.2005. u 13:13 · pre 255 meseci #11
Š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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme