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

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

Δημοσ.

Φίλε Directx, σε ευχαριστώ για την απάντηση, αλλά δεν είναι αυτό που θέλω. Το "CSharp Language Specification" (που έκανες λινκ) είναι οι σχεδόν πλήρεις οδηγίες για όλη τη γλώσσα C#. Σου εξηγεί και τι μπορείς να κάνεις και πώς να το κάνεις.

Εγώ αυτό που θέλω, είναι κάτι απλά σαν μια λίστα με δυο στήλες ας πούμε. Η μια στήλη να έχει τις εντολές, και η άλλη να λέει συνοπτικά, σε μια φράση, τι κάνει η εντολή.

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

 

Υ.Γ. πολύ καλό βέβαια κατά τα άλλα το αρχείο που έκανες λίνκ. Θα μου χρειαστεί αλλού.

Αυτό που περιγράφεις ομοιάζει με αυτό που λέμε γενικά "Pocket Guide" (σύντομος οδηγός αναφοράς). Το μόνο "πρόγραμμα" που μπορώ να πω ότι μοιάζει με το περιγραφόμενο είναι το ίδιο το Help Reference του Visual Studio (άμεση πρόσβαση σε αυτό μέσο F1) το οποίο παρουσιάζει λεπτομερείς πληροφορίες για κάθε εντολή τόσο της γλώσσας όσο και του ίδιου του .NET framework γράφοντας απλά την ονομασία της εντολής που σε ενδιαφέρει. Τώρα αν υπάρχει κάποιο άλλο λογισμικό τεκμηρίωσης σε αυτή την μορφή (*κάποιο EBOOK σε μορφή WinHelp ή CHM πράγματι θα έμοιαζε με "πρόγραμμα" στα μάτια του φίλου σου, αλλά ουσιαστικά πρόκειται για ένα "Pocket Guide" της C# σε μορφή αρχείου Βοήθειας ;)) δεν το γνωρίζω.

 

* Πάω στοίχημα ότι μάλλον κάτι τέτοιο εννοούσε ο φίλος σου - είμαι σίγουρος ότι μπορείς να βρεις άφθονο παρόμοιο υλικό στο Δίκτυο.. ;)

  • Απαντ. 1,6k
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

Φίλε 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();

δεν εκτελείται ποτέ.

Δημοσ.

@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 φορες το ιδιο αποτελεσμα και να σταματαει... λογικο και βολικο :P

Δημοσ.

Γενικα σε τετοιου ειδους παιγνια κανεις:

 

>
while( gameState != OVER )
{
input();
gameLogic();
printResults();

}

 

δηλαδη, παιρνεις τις επιλογες του χρηστη , τις επεξεργαζεσαι συμφωνα με τους κανονες και δινεις τα αποτελεσματα

 

Edit: Οπως λεει και ο παπι απο πανω, γιατι την srand την καλεις συνεχεια μεσα στην roll_dice ?

Δημοσ.

Πέρα από αυτό που έγραψαν τα παιδιά για την srand() εγώ δεν πολυκατάλαβα τι ακριβώς θες να κάνει ο κώδικας. Π.χ αν φέρει 8 τι πρέπει να κάνει ο κώδικας;

Δημοσ.

Πέρα από αυτό που έγραψαν τα παιδιά για την srand() εγώ δεν πολυκατάλαβα τι ακριβώς θες να κάνει ο κώδικας. Π.χ αν φέρει 8 τι πρέπει να κάνει ο κώδικας;

 

Τιποτα... απλα το εμφανιζει... You rolled: 8

θα μπορουσα απλα να τα αγνοω και να κερδιζει ο αλλος

με αυτα που ηδη εχω γραψει + αμα φερει 2 φορες τον ιδιο συνδυασμο ζαριων

αλλα ακομη δεν εχω σκεφτει πως θα το κανω αυτο το τελευταιο.

Δημοσ.

Τιποτα... απλα το εμφανιζει... 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 );
}

 

 

Δημοσ.

 

 

Αυτό που περιγράφεις ομοιάζει με αυτό που λέμε γενικά "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). Αλλά έχεις δίκιο, χωρίς την εκμάθηση της γλώσσας θα τρώω σκαλώματα.

Απλά ήθελα τώρα μια γρήγορη λύση λόγω ιδιαίτερων συνθηκών.

Δεν πειράζει, αν είναι κάτι συγκεκριμένο μπορεί να ξαναρωτήσω εδώ. :mrgreen:

τι είναι το MSDN;

Δημοσ.

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.

Δημοσ.

Λαθος. Βαλε παλι την srand :-D

 

edit:

Γενικα η διαδικασια των ψευδοτυχαιων αριθμων βασιζεται σε εναν αρχικο αριθμο/κατασταση, συνηθως ονομαζεται και seed. Με βαση αυτην την κατασταση η rand επιστρεφει τυχαιους αριθμους. Για αυτο και πρεπει το seed να ειναι διαφορετικο σε καθε εκτελεση , ωστε να μην βγαζουμε "τυχαιους αριθμους" απο το ιδιο seed , γιατι μπορει τελικα να μην ειναι και τοσο "τυχαιοι".

 

Ετσι , πρεπει να βρεις κατι που να αλλαζει σε καθε εκτελεση του προγραμματος σου. Κατι που αλλαζει με μεγαλη πιθανοτητα ειναι η χρονικη στιγμη εκτελεσης του προγραμματος.Αρα, περνας την χρονικη στιγμη που τρεχει το προγραμμα σου , ωστε οι ψευδοτυχαιοι αριθμοι σου να ειναι ανεξαρτητοι με μεγαλη πιθανοτητα

Δημοσ.

Λαθος. Βαλε παλι την srand :-D

 

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% γιατι μπαινει εκει.

Δημοσ.

 

 

Τι εκανε τη ζημια ακριβως? :S

 

 

 

Για αρχη, για καθε seed εχεις την ιδια ακολουθια.

 

Το προβλημα ποιο ηταν. Ειχες μεσα σε μια for

seed(time)

χ = rand()

 

Δηλαδη ουσιαστικα ο "τυχαιος" αριθμος σου ειναι το x = time * const y, επειδη ομως το time μετραει seconds, και επειδη το y ειναι const (μεσσα στην rand) για νααλλαξει ο "τυχαιος" αριθμος θα πρεπει να αλλαξει το time κατα ενα second.

Δημοσ.

Για αρχη, για καθε 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 ενος παικτη

τα περναει στο ετσι και συνεχιζει να ριχνει χωρις να σε ρωτησει αν θες να συνεχισεις , δεν ξερω γιατι γινεται αυτο

και δεν ξερω και αν θα φαω αλλο χρονο ή αν αξιζει να το ψαξω :P

Δημοσ.

ΜΟυ κανει εντυπωση ομως σε λιγοτερο απο 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 το αποτέλεσμα ήταν το εξής:

2he965j.gif

 

!!!!!!!!!!

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

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