VagosM Δημοσ. 4 Νοεμβρίου 2010 Δημοσ. 4 Νοεμβρίου 2010 Για σας είμαι νέος στο site και θα ήθελα την πολύτιμη βοήθεια σας έχω να κάνω μια άσκηση , είναι η 3 που κάνω.. Πρέπει να κάνω ένα παιχνίδι μεταξύ ενός χρήστη και του υπολογιστή το γνωστό πετρά ψαλίδι χαρτί...και κολλάω στην παραγωγή τυχαίου αριθμού για τον υπολογιστή που θα αντιστηρίζει 0,1,2 στο χαρτί πετρά ψαλίδι.... ο κώδικας που έκανα είναι...αν κάποιος μπορεί να βοηθήσει...
bnvdarklord Δημοσ. 4 Νοεμβρίου 2010 Δημοσ. 4 Νοεμβρίου 2010 Ελεγξε το do while που εχεις να μετράει τις νίκες, πέφτει σε ατέρμον βρόγχο.
MitsakosGR Δημοσ. 4 Νοεμβρίου 2010 Δημοσ. 4 Νοεμβρίου 2010 Ποιά η χρησιμότητα του παρακάτω κώδικα; >do{ .... }while (random_number!=option); Αν η επιλογή του αριθμού είναι διαφορετική θα πέσει σε αέναο βρόγχο μιας και καμία από τις δύο τιμές δεν αλλάζει μέσα στον βρόγχο. Μάλλον κάτι άλλο θα ήθελες να κάνεις...
VagosM Δημοσ. 4 Νοεμβρίου 2010 Μέλος Δημοσ. 4 Νοεμβρίου 2010 θέλω αν έρχεται ισοπαλία να επαναλαμβάνει την επανάληψη αλλά να μην μετρά για γύρος..
MitsakosGR Δημοσ. 4 Νοεμβρίου 2010 Δημοσ. 4 Νοεμβρίου 2010 θέλω αν έρχεται ισοπαλία να επαναλαμβάνει την επανάληψη αλλά να μην μετρά για γύρος.. Τότε αντί για το do...while κάνε το ακόλουθο: >if( random_number == option ){ --i; continue; } Έτσι ελέγχεις αν είναι ίδια και αν είναι γυρνάς μία θέση πίσω το i kai συνεχίζεις από το for() ξανά.
strat92man Δημοσ. 4 Νοεμβρίου 2010 Δημοσ. 4 Νοεμβρίου 2010 σπουδάζεις πληροφορική ;; αν ναι σε ποιο τμημα εισαι και τι έτος..;;
VagosM Δημοσ. 5 Νοεμβρίου 2010 Μέλος Δημοσ. 5 Νοεμβρίου 2010 Την διόρθωσα αλλά πάλη δεν δουλεύει σωστά..
MitsakosGR Δημοσ. 5 Νοεμβρίου 2010 Δημοσ. 5 Νοεμβρίου 2010 Την διόρθωσα αλλά πάλη δεν δουλεύει σωστά.. Δεν φαίνεται διορθωμένο... Εγώ ακόμα αυτό βλέπω: >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);} }
fotis4u Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 Γιατί δεν το κάνεις με μία εξωτερική συνάρτηση, όπου κάθε φορά που θα καλείτε θα πέρνει ως παραμέτρους τις δυο επιλογές και να επιστρέφει είτε 0=(PCwins) είτε 1= (Human wins). Την τρέχεις τόσες φορές όσες έχει επιλέξει ο χρήστης και μετά στο τέλος τσεκάρεις εάν είναι ισοπαλία, εάν ναι, τότε τρέχεις την συνάρτηση αλλα με μία σημαία(flag){έλεγχος για το ποιος κάνει 2 νίκες} σε συνθήκη while, διαφορετικά συγκρίνεις τουσ μετρητές και εξάγεις κατάλληλα μηνύματα.
MitsakosGR Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 Διορθωμένο και με χρήση της μεθόδου του 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; }
VagosM Δημοσ. 6 Νοεμβρίου 2010 Μέλος Δημοσ. 6 Νοεμβρίου 2010 ευχαριστώ πάρα πολύ....τελικά την κατάφερα και εγώ μου πήρε όλο το βράδυ αλλά δεν πειράζει.
virxen75 Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 > 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?
Timonkaipumpa Δημοσ. 6 Νοεμβρίου 2010 Δημοσ. 6 Νοεμβρίου 2010 πότε ισχύει η πιο πάνω συνθηκη ,δηλαδή το option να είναι την ίδια στιγμή <0 και μεγαλύτερο του 2? ήθελε ένα || αντί για αυτό που είχε... while ( (option < 0) || (option > 2) ) klein... το βρίσκεις εύκολα στο πρώτο run που θα κάνεις..
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.