Προς το περιεχόμενο

Άσκηση σε C


VagosM

Προτεινόμενες αναρτήσεις

Δημοσ.

Για σας είμαι νέος στο site και θα ήθελα την πολύτιμη βοήθεια σας έχω να κάνω μια άσκηση , είναι η 3 που κάνω..

Πρέπει να κάνω ένα παιχνίδι μεταξύ ενός χρήστη και του υπολογιστή το γνωστό πετρά ψαλίδι χαρτί...και κολλάω στην παραγωγή τυχαίου αριθμού για τον υπολογιστή που θα αντιστηρίζει 0,1,2 στο χαρτί πετρά ψαλίδι....

ο κώδικας που έκανα είναι...αν κάποιος μπορεί να βοηθήσει...

Δημοσ.

Ποιά η χρησιμότητα του παρακάτω κώδικα;

>do{
....
}while (random_number!=option);

 

Αν η επιλογή του αριθμού είναι διαφορετική θα πέσει σε αέναο βρόγχο μιας και καμία από τις δύο τιμές δεν αλλάζει μέσα στον βρόγχο. Μάλλον κάτι άλλο θα ήθελες να κάνεις...

Δημοσ.
θέλω αν έρχεται ισοπαλία να επαναλαμβάνει την επανάληψη αλλά να μην μετρά για γύρος..

 

Τότε αντί για το do...while κάνε το ακόλουθο:

>if( random_number == option ){
 --i;
 continue;
}

Έτσι ελέγχεις αν είναι ίδια και αν είναι γυρνάς μία θέση πίσω το i kai συνεχίζεις από το for() ξανά.

Δημοσ.
Την διόρθωσα αλλά πάλη δεν δουλεύει σωστά..

 

Δεν φαίνεται διορθωμένο...

 

Εγώ ακόμα αυτό βλέπω:

>do{ 
  /* me autin tin do kai tin if elenxoume poios apo tous dio nikai o xristis i o ipologistis kai vgoun isopalia i do den to metrai gia giro alla ksana zita apo tin arxi*/
  if((random_number==0)&&(option==1))
  {nikesPC=nikesPC+1;
  printf("Nikise o Ipologistis\n");
  printf("Oi nikeses PC einai:\t%d\n",nikesPC);}
                    else if ((random_number==0)&&(option==2))
                    {nikesUser=nikesUser+1;
                    printf("sinxaritiria nikisate\n");
                    printf("Oinikes sas einai:\t%d\n",nikesUser);}
                                          else if((random_number==1)&&(option==0))
                                          {nikesUser=nikesUser+1;
                                          printf("sinxaritiria nikisate\n",nikesUser);
                                          printf("Oinikes sas einai:\t%d\n",nikesUser);}
                                                                else if((random_number==1)&&(option==2))
                                                                {nikesPC=nikesPC+1;
                                                                 printf("Nikise o Ipologistis\n",nikesPC);
                                                                 printf("Oi nikeses PC einai:\t%d\n",nikesPC);}
                                                                                  else if((random_number==2)&&(option==1))
                                                                                 {nikesPC=nikesPC+1;
                                                                                 printf("Nikise o Ipologistis\n",nikesPC);
                                                                                 printf("Oi nikeses PC einai:\t%d\n",nikesPC);}
                                                                                                        else if((random_number==2)&&(option==1))
                                                                                                        {nikesUser=nikesUser+1;
                                                                                                        printf("sinxaritiria nikisate\n",nikesUser);
                                                                                                        printf("Oinikes sas einai:\t%d\n",nikesUser);}
                                                                                                        }
  while (random_number==option);

Δεν έβαλες το if και έχεις αφήσει ακόμα το αέναο βρόγχο...

Διορθωμένο:

>if(random_number==option){
 --i;
 continue;
}
  /* me autin tin do kai tin if elenxoume poios apo tous dio nikai o xristis i o ipologistis kai vgoun isopalia i do den to metrai gia giro alla ksana zita apo tin arxi*/
  if((random_number==0)&&(option==1))
  {nikesPC=nikesPC+1;
  printf("Nikise o Ipologistis\n");
  printf("Oi nikeses PC einai:\t%d\n",nikesPC);}
                    else if ((random_number==0)&&(option==2))
                    {nikesUser=nikesUser+1;
                    printf("sinxaritiria nikisate\n");
                    printf("Oinikes sas einai:\t%d\n",nikesUser);}
                                          else if((random_number==1)&&(option==0))
                                          {nikesUser=nikesUser+1;
                                          printf("sinxaritiria nikisate\n",nikesUser);
                                          printf("Oinikes sas einai:\t%d\n",nikesUser);}
                                                                else if((random_number==1)&&(option==2))
                                                                {nikesPC=nikesPC+1;
                                                                 printf("Nikise o Ipologistis\n",nikesPC);
                                                                 printf("Oi nikeses PC einai:\t%d\n",nikesPC);}
                                                                                  else if((random_number==2)&&(option==1))
                                                                                 {nikesPC=nikesPC+1;
                                                                                 printf("Nikise o Ipologistis\n",nikesPC);
                                                                                 printf("Oi nikeses PC einai:\t%d\n",nikesPC);}
                                                                                                        else if((random_number==2)&&(option==1))
                                                                                                        {nikesUser=nikesUser+1;
                                                                                                        printf("sinxaritiria nikisate\n",nikesUser);
                                                                                                        printf("Oinikes sas einai:\t%d\n",nikesUser);}
                                                                                                        }

 

Δημοσ.

Γιατί δεν το κάνεις με μία εξωτερική συνάρτηση, όπου κάθε φορά που θα καλείτε θα πέρνει ως παραμέτρους τις δυο επιλογές και να επιστρέφει είτε 0=(PCwins) είτε 1= (Human wins). Την τρέχεις τόσες φορές όσες έχει επιλέξει ο χρήστης και μετά στο τέλος τσεκάρεις εάν είναι ισοπαλία, εάν ναι, τότε τρέχεις την συνάρτηση αλλα με μία σημαία(flag){έλεγχος για το ποιος κάνει 2 νίκες} σε συνθήκη while, διαφορετικά συγκρίνεις τουσ μετρητές και εξάγεις κατάλληλα μηνύματα.

Δημοσ.

Διορθωμένο και με χρήση της μεθόδου του fotis4u

 

(εγώ έβαλα 0 νίκη χρήστη και 1 νίκη υπολογιστή)

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

int checkWinner(int user, int comp);

int main(){
int turns,random_number,nikesPC,nikesUser,i,option;
char name[20];
printf("Dwse onoma\n");
scanf("%s",name);
printf("dwse pita gyrous\n");
scanf("%d",&turns);
srand(time(NULL));
nikesPC=0;
nikesUser=0;
for(i=1; i<=turns; i++){
	random_number=rand()%3;
	printf("random_number = %d\n", random_number);
	/* i for einai gia tous girous tou paixnidiou*/
	do{
		printf("Dwse epilogi\n 0:Petra\n 1:Psalidi\n 2:Xarti\n");
		scanf("%d",&option);
	}while ( (option < 0) || (option > 2) );
	/* i proti do kani elenxo gia to an o xristis mas dosi diaforetiki epilogi apo autes pou tou zitame*/
	switch ( checkWinner( option, random_number ) ){
	case 0:
		++nikesUser;
		printf( "Se ayto ton gyro nikhse o xrhsths\n" );
		break;
	case 1:
		printf( "Se ayto ton gyro nikhse o ypologisths\n" );
		++nikesPC;
		break;
	default:
		printf( "den yparxei nikhths... O gyros den metraei\n" );
		--i;
	}
}
/* se autin tin if elenxoume poios exi tis perisoteres nikes kai vgeni o nikitis*/
if(nikesPC>nikesUser)
	printf("Nikitis o ypologistis\t%d",nikesPC);
else if(nikesUser>nikesPC)
	printf("Nikitis o xristis\t%d",nikesUser);
else{
	printf( "To paixnidi einai isopalia... O protos pou tha kanei 2 nikes kerdizei\n" );
	/* se autin tin else if se periptosi pou iparxoun isopalia stis
	nikes mas stelni se mia epanalipsi mexris otou kapoios na exi 2 sinexomenes nike o opoios einai kai o nikitis*/
	nikesPC = nikesUser = 0;
	do{
		random_number=rand()%3;
		printf("random_number = %d\n", random_number);
		do{
			printf("Dwse epilogi\n 0:Petra\n 1:Psalidi\n 2:Xarti\n");
			scanf("%d",&option);
		}while ( (option < 0) || (option > 2) );
		/* i proti do kani elenxo gia to an o xristis mas dosi diaforetiki epilogi apo autes pou tou zitame*/
		switch ( checkWinner( option, random_number ) ){
		case 0:
			++nikesUser;
			nikesPC = 0;
			printf( "Se ayto ton gyro nikhse o xrhsths\n" );
			break;
		case 1:
			printf( "Se ayto ton gyro nikhse o ypologisths\n" );
			++nikesPC;
			nikesUser = 0;
			break;
		default:
			printf( "den yparxei nikhths... O gyros den metraei\n" );
		}
	}while( (nikesPC != 2) && (nikesUser != 2) );

}
printf("O ipologistis exi:\t %d nikes \n",nikesPC);
printf("exete:\t %d nikes \n",nikesUser);

system("pause");
}


int checkWinner(int user, int comp){
switch ( user ){
case 0:
	if( comp == 1 ) return 0;
	else if ( comp == 2 ) return 1;
	break;
case 1:
	if( comp == 0 ) return 1;
	else if( comp == 2)	return 0;
	break;
case 2:
	if( comp == 0 ) return 0;
	else if( comp == 1 ) return 1;
	break;
}
return -1;
}

 

Δημοσ.
>
		do{
			printf("Dwse epilogi\n 0:Petra\n 1:Psalidi\n 2:Xarti\n");
			scanf("%d",&option);
		}[color="Red"]while ( (option < 0) && (option > 2) );[/color]

 

πότε ισχύει η πιο πάνω συνθηκη ,δηλαδή το option να είναι την ίδια στιγμή <0 και μεγαλύτερο του 2?

Δημοσ.
πότε ισχύει η πιο πάνω συνθηκη ,δηλαδή το option να είναι την ίδια στιγμή <0 και μεγαλύτερο του 2?

 

ήθελε ένα || αντί για αυτό που είχε...

 

while ( (option < 0) || (option > 2) )

 

klein...

 

το βρίσκεις εύκολα στο πρώτο run που θα κάνεις.. :)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...