Directx Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Φίλε Directx, σε ευχαριστώ για την απάντηση, αλλά δεν είναι αυτό που θέλω. Το "CSharp Language Specification" (που έκανες λινκ) είναι οι σχεδόν πλήρεις οδηγίες για όλη τη γλώσσα C#. Σου εξηγεί και τι μπορείς να κάνεις και πώς να το κάνεις. Εγώ αυτό που θέλω, είναι κάτι απλά σαν μια λίστα με δυο στήλες ας πούμε. Η μια στήλη να έχει τις εντολές, και η άλλη να λέει συνοπτικά, σε μια φράση, τι κάνει η εντολή. Αυτό που είχα ακούσει ότι υπάρχει, είναι ένα πρόγραμμα, που όταν γράψεις την εντολή, την αναγνωρίζει και σου λέει τη γενική της μορφή και τι κάνει.. κάπως έτσι. Δε θυμόταν και καλά, το παιδί που μου το λεγε, πώς ακριβώς ήταν το πρόγραμμα εκείνο. Υ.Γ. πολύ καλό βέβαια κατά τα άλλα το αρχείο που έκανες λίνκ. Θα μου χρειαστεί αλλού. Αυτό που περιγράφεις ομοιάζει με αυτό που λέμε γενικά "Pocket Guide" (σύντομος οδηγός αναφοράς). Το μόνο "πρόγραμμα" που μπορώ να πω ότι μοιάζει με το περιγραφόμενο είναι το ίδιο το Help Reference του Visual Studio (άμεση πρόσβαση σε αυτό μέσο F1) το οποίο παρουσιάζει λεπτομερείς πληροφορίες για κάθε εντολή τόσο της γλώσσας όσο και του ίδιου του .NET framework γράφοντας απλά την ονομασία της εντολής που σε ενδιαφέρει. Τώρα αν υπάρχει κάποιο άλλο λογισμικό τεκμηρίωσης σε αυτή την μορφή (*κάποιο EBOOK σε μορφή WinHelp ή CHM πράγματι θα έμοιαζε με "πρόγραμμα" στα μάτια του φίλου σου, αλλά ουσιαστικά πρόκειται για ένα "Pocket Guide" της C# σε μορφή αρχείου Βοήθειας ) δεν το γνωρίζω. * Πάω στοίχημα ότι μάλλον κάτι τέτοιο εννοούσε ο φίλος σου - είμαι σίγουρος ότι μπορείς να βρεις άφθονο παρόμοιο υλικό στο Δίκτυο..
migf1 Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Φίλε Directx, σε ευχαριστώ για την απάντηση, αλλά δεν είναι αυτό που θέλω. Το "CSharp Language Specification" (που έκανες λινκ) είναι οι σχεδόν πλήρεις οδηγίες για όλη τη γλώσσα C#. Σου εξηγεί και τι μπορείς να κάνεις και πώς να το κάνεις. Εγώ αυτό που θέλω, είναι κάτι απλά σαν μια λίστα με δυο στήλες ας πούμε. Η μια στήλη να έχει τις εντολές, και η άλλη να λέει συνοπτικά, σε μια φράση, τι κάνει η εντολή. Αυτό που είχα ακούσει ότι υπάρχει, είναι ένα πρόγραμμα, που όταν γράψεις την εντολή, την αναγνωρίζει και σου λέει τη γενική της μορφή και τι κάνει.. κάπως έτσι. Δε θυμόταν και καλά, το παιδί που μου το λεγε, πώς ακριβώς ήταν το πρόγραμμα εκείνο. Υ.Γ. πολύ καλό βέβαια κατά τα άλλα το αρχείο που έκανες λίνκ. Θα μου χρειαστεί αλλού. Η κοντινότερη ερμηνεία του ελληνικού όρου "εντολές" στα αγγλικά είναι "keywords". Ένα πρόχειρο googling έδωσε αρκετά κι ενδιαφέροντα links, μεταξύ των οποίων και αυτό εδώ: http://www.devlist.com/CSharp.aspx , που έχει ακριβώς τη μορφή που ζήτησες. Το πως συνδυάζεις όμως διάφορα keywords για την παραγωγή statements/expressions/κλπ δεν μπορεί να περιγραφεί σε έναν πίνακα, μιας και οι παραγόμενοι συνδυασμοί τους είναι πάρα πολλοί. Πολύ συχνά μάλιστα είναι και ανομοιογενείς ως προς τον σκοπό χρήσης του κάθε keyword. Επίσης, σκέτα keywords χωρίς για παράδειγμα το συνδυασμό τους με στάνταρ (ή μη στάνταρ) συναρτήσεις είναι πρακτικώς άχρηστα. Όπως ανέλυσε ήδη και ο DirectX, αυτό που ζητάς αποτελεί αντικείμενο βιβλίων ή/και tutorials, και απαιτεί παράλληλα πρακτική εξάσκηση προκειμένου να αφομοιωθεί. Το MSDN που ήδη προτάθηκε, καθώς και διάφορες offline εκδόσεις ή παραλλαγές του, είναι το πιο κοντινό σε αυτό που ζητάς, αλλά και πάλι για να είναι χρήσιμο προϋποθέτει να έχεις αποκτήσει πρώτα βασικές γνώσεις της γλώσσας. Αυτές αποκτούνται κυρίως από βιβλία. > #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <time.h> int roll_dice(void); bool play_game(void); int main(void) { char ans = 'n' ; int mres; // main result for(; { mres= play_game(); if (mres != true && mres !=false) play_game(); if (mres == true || mres == false) { printf(" Play again?"); scanf(" %c" , &ans); if( 'y' == ans ) play_game(); else break; } } return 0; } //---------------------------------------------------------------------- int roll_dice(void) { int froll , sroll , sum; // first roll , second roll srand ( time(NULL) ); froll= rand() % 6 + 1; sroll= rand() % 6 + 1; sum= froll + sroll; return sum; } //---------------------------------------------------------------------- bool play_game(void) { int res; for(; { res= roll_dice(); if( 7 == res || 11 == res ) { printf(" You win with : %d score " , res); return true; } else if( 2 == res || 3 == res || 12 == res) { printf(" You lose with : %d score " , res); return false; } else printf(" You rolled: %d " , res); return 2; } } //---------------------------------------------------------------------- > kostas@kostas-SSL:~/PROGRAMS$ ./tests4 You rolled: 10 Play again?y You lose with : 12 score You lose with : 12 score Play again? Γιατι με ξαναβαζει να παιξω εφοσον δεν εχω κερδισει ή χασει??? ( 7 , 11 / 2 , 3 , 12 ) το res ειναι 10 αρα δεν επιστρεφω ουτε true ουτε false . Υ.Γ Ψιλο χαλια μου φαινεται ο κωδικας οπως εχει γραφτει. Δεν έχω κοιτάξει τον κώδικα, αλλά αυτό εδώ... > if (mres != true && mres !=false) play_game(); δεν εκτελείται ποτέ.
Star_Light Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 @MIGF1 γραψε λαθος. Με τις υπηρεσιες που βαραω εδω απο τις 5 το πρωι στο ποδι πρεπει να ειμαι δεν μου μενει και πολυς χρονος ή καθαρο μυαλο να δω τι φτιάχνω... Η ασκησουλα που θελω να κανω ειναι ο παικτης να ριχνει και μεχρι να κερδισει να του εμφανιζει απλα τι εριξε... "You rolled...." Κερδιζει αν το αθροισμα των 2 ζαριων ειναι 7 ή 11 ενω για αθροισμα 2,3,12 χάνει. > #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <time.h> int roll_dice(void); bool play_game(void); int main(void) { char ans = 'n' ; int mres ; // main result for(; { mres= play_game(); if (mres == 1 || mres == 0 ) { printf("\nPlay again?"); scanf(" %c", &ans); if( 'y' == ans ) play_game(); else break; } } puts("The End of Game"); return 0; } //---------------------------------------------------------------------- int roll_dice(void) { int froll , sroll , sum; // first roll , second roll srand ( time(NULL) ); froll= rand() % 6 + 1; sroll= rand() % 6 + 1; sum= froll + sroll; return sum; } //---------------------------------------------------------------------- bool play_game(void) { int res , count=0; for(; { res=roll_dice(); printf("%d You rolled: %d " , ++count , res); printf("\nYour point is: %d ", res); if( 7 == res || 11 == res ) { printf("\nYou win with : %d score " , res); return 1; } else if( 2 == res || 3 == res || 12 == res) { printf("\nYou lose with : %d score " , res); return 0; } } } ειναι λογικο ομως να θέλει πχ 60.000 φορες ωστε να σε ξαναφτασει να κερδισεις???? έβαλα εναν μετρητη μεσα στην printf για να το μετρησω... > Your point is: 10 70495 You rolled: 10 Your point is: 10 70496 You rolled: 10 Your point is: 10 70497 You rolled: 10 Your point is: 10 70498 You rolled: 10 Your point is: 10 70499 You rolled: 11 Your point is: 11 You win with : 11 score Play again? Ειναι λογικο αυτο???? υ.γ Άλλες φορες θελει και λιγοτερες... πχ 6.000 προ λιγου που το ξαναετρεξα. Μου φαινεται πρεπει να βαλω επιλογη να κερδιζει και οταν φερει 2 φορες το ιδιο αποτελεσμα και να σταματαει... λογικο και βολικο
ChRis6 Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Γενικα σε τετοιου ειδους παιγνια κανεις: > while( gameState != OVER ) { input(); gameLogic(); printResults(); } δηλαδη, παιρνεις τις επιλογες του χρηστη , τις επεξεργαζεσαι συμφωνα με τους κανονες και δινεις τα αποτελεσματα Edit: Οπως λεει και ο παπι απο πανω, γιατι την srand την καλεις συνεχεια μεσα στην roll_dice ?
migf1 Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Πέρα από αυτό που έγραψαν τα παιδιά για την srand() εγώ δεν πολυκατάλαβα τι ακριβώς θες να κάνει ο κώδικας. Π.χ αν φέρει 8 τι πρέπει να κάνει ο κώδικας;
Star_Light Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Πέρα από αυτό που έγραψαν τα παιδιά για την srand() εγώ δεν πολυκατάλαβα τι ακριβώς θες να κάνει ο κώδικας. Π.χ αν φέρει 8 τι πρέπει να κάνει ο κώδικας; Τιποτα... απλα το εμφανιζει... You rolled: 8 θα μπορουσα απλα να τα αγνοω και να κερδιζει ο αλλος με αυτα που ηδη εχω γραψει + αμα φερει 2 φορες τον ιδιο συνδυασμο ζαριων αλλα ακομη δεν εχω σκεφτει πως θα το κανω αυτο το τελευταιο.
migf1 Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Τιποτα... απλα το εμφανιζει... You rolled: 8 Οκ, οπότε εγώ θα το έγραφα κάπως έτσι (μπορεί να έχει bugs, γιατί το 'γραψα πολύ γρήγορα)... > #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <time.h> #include <ctype.h> #define WIN(x) ( 7 == (x) || 11 == (x) ) #define LOSE(x) ( 2 == (x) || 3 == (x) || 12 == (x) ) // --------------------------------------------------------- char askuser( const char *prompt ) { char input[256] = {'\0'}; if ( prompt ) printf( prompt ); fgets( input, 256, stdin ); return tolower(*input); } // --------------------------------------------------------- int roll( void ) { return (rand() % 6 + 1) + (rand() % 6 + 1); } // --------------------------------------------------------- int main( void ) { bool playmore = true; int rolled = 0; srand( time(NULL) ); while ( playmore ) { printf("You rolled %d...", (rolled = roll()) ); if ( LOSE(rolled) ) puts( "you loose! Roll again..." ); else if ( !WIN(rolled) ) puts( "it's a deuce! Roll again..." ); else { puts( "you win!" ); playmore = 'n' != askuser("play more (/n)? "); } } exit( 0 ); }
ennoeitai Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Αυτό που περιγράφεις ομοιάζει με αυτό που λέμε γενικά "Pocket Guide" (σύντομος οδηγός αναφοράς). Το μόνο "πρόγραμμα" που μπορώ να πω ότι μοιάζει με το περιγραφόμενο είναι το ίδιο το Help Reference του Visual Studio (άμεση πρόσβαση σε αυτό μέσο F1) το οποίο παρουσιάζει λεπτομερείς πληροφορίες για κάθε εντολή τόσο της γλώσσας όσο και του ίδιου του .NET framework γράφοντας απλά την ονομασία της εντολής που σε ενδιαφέρει. Τώρα αν υπάρχει κάποιο άλλο λογισμικό τεκμηρίωσης σε αυτή την μορφή (*κάποιο EBOOK σε μορφή WinHelp ή CHM πράγματι θα έμοιαζε με "πρόγραμμα" στα μάτια του φίλου σου, αλλά ουσιαστικά πρόκειται για ένα "Pocket Guide" της C# σε μορφή αρχείου Βοήθειας ) δεν το γνωρίζω. * Πάω στοίχημα ότι μάλλον κάτι τέτοιο εννοούσε ο φίλος σου - είμαι σίγουρος ότι μπορείς να βρεις άφθονο παρόμοιο υλικό στο Δίκτυο.. Ακριβώς όλα αυτά που λές. Αλλά δυστυχώς ο υπολογιστής μου είναι λίγο παλιός, τρέχει σε XP και δε σηκώνει την SP3, γιατί ζορίζεται. Το είχα δοκιμάσει σε προηγούμενες εγκαταστάσεις των windows. Αλλά το Visual Studio χρειάζεται την SP3 κι έτσι δεν μπορώ να το χρησιμοποιήσω. Γι'αυτό χρησιμοποιώ κάποια free compilers-editors για τη C#. Απλά έλεγα αν υπήρχε κάτι σαν αυτό που λές στο τέλος. Έψαξα αλλά δε βρήκα κάτι. Η κοντινότερη ερμηνεία του ελληνικού όρου "εντολές" στα αγγλικά είναι "keywords". Ένα πρόχειρο googling έδωσε αρκετά κι ενδιαφέροντα links, μεταξύ των οποίων και αυτό εδώ: http://www.devlist.com/CSharp.aspx , που έχει ακριβώς τη μορφή που ζήτησες. Το πως συνδυάζεις όμως διάφορα keywords για την παραγωγή statements/expressions/κλπ δεν μπορεί να περιγραφεί σε έναν πίνακα, μιας και οι παραγόμενοι συνδυασμοί τους είναι πάρα πολλοί. Πολύ συχνά μάλιστα είναι και ανομοιογενείς ως προς τον σκοπό χρήσης του κάθε keyword. Επίσης, σκέτα keywords χωρίς για παράδειγμα το συνδυασμό τους με στάνταρ (ή μη στάνταρ) συναρτήσεις είναι πρακτικώς άχρηστα. Όπως ανέλυσε ήδη και ο DirectX, αυτό που ζητάς αποτελεί αντικείμενο βιβλίων ή/και tutorials, και απαιτεί παράλληλα πρακτική εξάσκηση προκειμένου να αφομοιωθεί. Το MSDN που ήδη προτάθηκε, καθώς και διάφορες offline εκδόσεις ή παραλλαγές του, είναι το πιο κοντινό σε αυτό που ζητάς, αλλά και πάλι για να είναι χρήσιμο προϋποθέτει να έχεις αποκτήσει πρώτα βασικές γνώσεις της γλώσσας. Αυτές αποκτούνται κυρίως από βιβλία. migf1 ευχαριστώ που έριξες μια ματιά. Είχα βρεί κι εγώ αυτό το site, το οποίο είναι σχετικό, αλλά όχι ακριβώς αυτό που έψαχνα: http://en.wikibooks.org/wiki/C_Sharp_Programming/Keywords Διότι ναι μεν έχει αρκετές εντολές-kewords (ίσως όλες) όπως και το δικό σου, αλλά το πρόβλημά μου δημιουργήθηκε όταν πριν μερικές μέρες, χωρίς να ξέρω C# (με λίγες γνώσεις από C++) προσπαθούσα να διαβάσω κώδικα στη C#. Και κόλλησα στην εντολή που δημιουργεί πίνακα. Με τον τρόπο που ήταν γραμμένη (μεταβλητές, ονόματα κλπ.) δεν μπορούσες να καταλάβεις τι είναι αυτό το πράμα, ούτε με τη βοήθεια του ίντερνετ. Γι'αυτό έλεγα μήπως υπάρχει κάποιος τρόπος... Αλλά μάλλον έχεις δίκιο. Για τον ίδιο λόγο που δεν έβρισκα τίποτα στο ίντερνετ, δε θα μπορεί και κάποιο πόγραμμα να κάνει την ίδια δουλειά. Επειδή υπάρχουν όπως λές πάρα πολλοί συνδυασμοί. Χωρίς να αποκλείεται βέβαια. Ίσως το Help Reference του Visual Studio που είπε ο Directx, να κάνει ακριβώς αυτό που θέλω. Δε θα το μάθω ποτέ όμως. Ίσως να υπάρχει και κάποιο πιο ελαφρύ προγραμματάκι που να κάνει την ίδια δουλειά (κάποιο EBOOK σε μορφή WinHelp όπως πάλι είπε ο Directx). Αλλά έχεις δίκιο, χωρίς την εκμάθηση της γλώσσας θα τρώω σκαλώματα. Απλά ήθελα τώρα μια γρήγορη λύση λόγω ιδιαίτερων συνθηκών. Δεν πειράζει, αν είναι κάτι συγκεκριμένο μπορεί να ξαναρωτήσω εδώ. τι είναι το MSDN;
Star_Light Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Bσικα αντικατέστησα την δικη μου εκδοχη της roll_dice με την δικη σου και τωρα μου δουλευει πιο μαζεμενα... πχ > kostas@kostas-SSL:~/PROGRAMS$ ./tests4 You rolled: 7 Your point is: 7 You win with : 7 score Play again?y You rolled: 6 Your point is: 6 You rolled: 8 Your point is: 8 You rolled: 6 Your point is: 6 You rolled: 6 Your point is: 6 You rolled: 5 Your point is: 5 You rolled: 5 Your point is: 5 You rolled: 11 Your point is: 11 You win with : 11 score You rolled: 2 Your point is: 2 You lose with : 2 score Play again?y Τι εκανε τη ζημια ακριβως? :S > #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <time.h> int roll_dice(void); bool play_game(void); int main(void) { char ans = 'n' ; int mres ; // main result for(; { mres= play_game(); if (mres == 1 || mres == 0 ) { printf("\nPlay again?"); scanf(" %c", &ans); if( 'y' == ans ) play_game(); else break; } } puts("The End of Game"); return 0; } //---------------------------------------------------------------------- int roll_dice(void) { return (rand() % 6 + 1) + (rand() % 6 + 1); } //---------------------------------------------------------------------- bool play_game(void) { int res ; for(; { res=roll_dice(); printf("You rolled: %d " , res); printf("\nYour point is: %d ", res); if( 7 == res || 11 == res ) { printf("\nYou win with : %d score " , res); return 1; } else if( 2 == res || 3 == res || 12 == res) { printf("\nYou lose with : %d score " , res); return 0; } } } //---------------------------------------------------------------------- εβγαλα και τελειως την srand.
ChRis6 Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Λαθος. Βαλε παλι την srand edit: Γενικα η διαδικασια των ψευδοτυχαιων αριθμων βασιζεται σε εναν αρχικο αριθμο/κατασταση, συνηθως ονομαζεται και seed. Με βαση αυτην την κατασταση η rand επιστρεφει τυχαιους αριθμους. Για αυτο και πρεπει το seed να ειναι διαφορετικο σε καθε εκτελεση , ωστε να μην βγαζουμε "τυχαιους αριθμους" απο το ιδιο seed , γιατι μπορει τελικα να μην ειναι και τοσο "τυχαιοι". Ετσι , πρεπει να βρεις κατι που να αλλαζει σε καθε εκτελεση του προγραμματος σου. Κατι που αλλαζει με μεγαλη πιθανοτητα ειναι η χρονικη στιγμη εκτελεσης του προγραμματος.Αρα, περνας την χρονικη στιγμη που τρεχει το προγραμμα σου , ωστε οι ψευδοτυχαιοι αριθμοι σου να ειναι ανεξαρτητοι με μεγαλη πιθανοτητα
Star_Light Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Λαθος. Βαλε παλι την srand edit: Γενικα η διαδικασια των ψευδοτυχαιων αριθμων βασιζεται σε εναν αρχικο αριθμο/κατασταση, συνηθως ονομαζεται και seed. Με βαση αυτην την κατασταση η rand επιστρεφει τυχαιους αριθμους. Για αυτο και πρεπει το seed να ειναι διαφορετικο σε καθε εκτελεση , ωστε να μην βγαζουμε "τυχαιους αριθμους" απο το ιδιο seed , γιατι μπορει τελικα να μην ειναι και τοσο "τυχαιοι". Ετσι , πρεπει να βρεις κατι που να αλλαζει σε καθε εκτελεση του προγραμματος σου. Κατι που αλλαζει με μεγαλη πιθανοτητα ειναι η χρονικη στιγμη εκτελεσης του προγραμματος.Αρα, περνας την χρονικη στιγμη που τρεχει το προγραμμα σου , ωστε οι ψευδοτυχαιοι αριθμοι σου να ειναι ανεξαρτητοι με μεγαλη πιθανοτητα Ωραια. Βασικα χωρις srand θα παράγεται παντα η ιδια ακολουθια αριθμων. > #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { int r , i; srand(time(NULL)); for(i=0;i<3; i++) { r=rand()%6+1; printf("\n %d" , r); } return 0 ; } Πριν ειδα οτι ο migf1 την βάζει στην main() ενω εγω την ειχα μεσα στην roll dice μαζι με την rand... Αυτο ηταν προβλημα?Καθε φορα που γινοταν κληση της συναρτησης το seed δεν ανανεωνοταν? Τωρα την εχω βαλει στην main και εγω πριν την κληση της play game αλλα δεν εχω καταλαβει 100% γιατι μπαινει εκει.
παπι Δημοσ. 22 Ιουνίου 2012 Δημοσ. 22 Ιουνίου 2012 Τι εκανε τη ζημια ακριβως? :S Για αρχη, για καθε seed εχεις την ιδια ακολουθια. Το προβλημα ποιο ηταν. Ειχες μεσα σε μια for seed(time) χ = rand() Δηλαδη ουσιαστικα ο "τυχαιος" αριθμος σου ειναι το x = time * const y, επειδη ομως το time μετραει seconds, και επειδη το y ειναι const (μεσσα στην rand) για νααλλαξει ο "τυχαιος" αριθμος θα πρεπει να αλλαξει το time κατα ενα second.
Star_Light Δημοσ. 23 Ιουνίου 2012 Δημοσ. 23 Ιουνίου 2012 Για αρχη, για καθε seed εχεις την ιδια ακολουθια. Το προβλημα ποιο ηταν. Ειχες μεσα σε μια for seed(time) χ = rand() Δηλαδη ουσιαστικα ο "τυχαιος" αριθμος σου ειναι το x = time * const y, επειδη ομως το time μετραει seconds, και επειδη το y ειναι const (μεσσα στην rand) για νααλλαξει ο "τυχαιος" αριθμος θα πρεπει να αλλαξει το time κατα ενα second. Ωραια... οποτε για να αλλαξει ο "τυχαιος" θα επρεπε να περασει ενα second ενω το loop έτρεχε συνεχώς. Για αυτο έβλεπα τοσες πολλες εμφανισεις. Και αυτος ειναι και ο λογος που η srand πρεπει να μπει μεσα στην main εξω απο οποιοδηποτε loop και αρα εκτος roll_dice επειδη και αυτη καλειται απο το loop της play game. ΜΟυ κανει εντυπωση ομως σε λιγοτερο απο 1 δευτερολεπτο μπορει μια for(;; ) να τρεξει τοσες πολλες φορες? Μηπως κατι δεν καταλαβα καλα? :S αΝ δεν καταλαβαινετε ποιο ειναι το ερωτημα μου ειναι γιατι παει μονη της η srand στην main . Υ.Γ migf1 έχει bugs o κωδικας σου υπο την έννοια οτι οπως και ο δικος μου μερικα wins ή losses ενος παικτη τα περναει στο ετσι και συνεχιζει να ριχνει χωρις να σε ρωτησει αν θες να συνεχισεις , δεν ξερω γιατι γινεται αυτο και δεν ξερω και αν θα φαω αλλο χρονο ή αν αξιζει να το ψαξω
akisk Δημοσ. 23 Ιουνίου 2012 Δημοσ. 23 Ιουνίου 2012 ΜΟυ κανει εντυπωση ομως σε λιγοτερο απο 1 δευτερολεπτο μπορει μια for(;; ) να τρεξει τοσες πολλες φορες? Μηπως κατι δεν καταλαβα καλα? :S Εγώ θα περίμενα να τρέξει πολύ περισσότερες φορές!!! Για να έχουμε λίγο αίσθηση της ταχύτητας ενός επεξεργαστή, ένας P4 βγάζει περίπου 3000 MIPS ενώ οι καινούριες cpu τύπου amd fx, intel core i7 βρίσκονται στα 80000-150000 MIPS, ίσως και παραπάνω κάποιες. Ο μόνος λόγος που η for σου δεν τρέχει πολύ πιο γρήγορα απ' όσο θα "περίμενα", είναι οι printf που έχεις μέσα. Δοκίμασε αυτό το χαζό τεστ για να δεις πόσο "καθυστερούν" οι printf τους υπολογισμούς >#include <stdlib.h> #include <stdio.h> #include <time.h> int main() { time_t start, end; int i, loopsWithPrintf, loopsWithoutPrintf; double difference = 4.0; //τα seconds που θέλουμε να τρέξει το κάθε loop //loops without printf i = 0; time (&start); while(1) { i++; time (&end); if(difftime (end,start) == difference) { loopsWithoutPrintf = i; break; } } //loops with printf i = 0; time (&start); while(1) { i++; printf("%d\n", i); time (&end); if(difftime (end, start) == difference) { loopsWithPrintf = i; break; } } printf("---------------------------------------------------------\n"); printf("Number of loops with printf after %.1f seconds: %d\n", difference, loopsWithPrintf); printf("Number of loops without printf after %.1f seconds: %d\n", difference, loopsWithoutPrintf); return 0; } Στο δικό μου pc το αποτέλεσμα ήταν το εξής: !!!!!!!!!!
Προτεινόμενες αναρτήσεις