vagman2 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 καλησπερα θέλω μια βοήθεια για πρόγραμμα σε εργαστηριο που έχω!! το πρόγραμμα θα δημιουργεί ένα τυχαίο αριθμό από 0 έως 100 πρέπει να γίνει με τη συνάρτηση rand(),πρέπει να πάρει τον πρώτο αριθμό με την srand() Αφού παραχθεί ο τυχαίος αυτός αριθμος (π.χ ο num) , να διαβάζονται ακέραιοι από το πληκτρολόγιο μέχρι να βρεθεί ο num .Οσο ο αριθμός που διαβάζεται δεν είναι ο num το πρόγραμμα να κάνει τα εξής: να αυξάνει ένα μετρητή εάν είναι μικρότερος απο το num να λέει "δώσε μεγαλύτερο" εάν είναι μεγαλύτερος να λέει"¨δώσε μικρότερο" διαβάζεται νέος ακέραιος από το πλκτρολόγιο αφού βρθεί ο num ,να γραφεί στην οθόνη το πλήθος των προσπαθειών που έγιναν για να βρεθεί ο num ,και να τυπώνετε και ο num. Παρακαλώ αν μπορεί κάποιος να βοηθήσει!! Μηπως υπάρχουν κάποιες σημειώσεις για τη χρήση της rand() και της srand()? Ευχαριστώ!!
migf1 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 rand() & srand() srand() rand() Οπότε ξεκίνα να γράφεις κώδικα, κι όπου κολλήσεις παρουσίασε τι έχεις κάνει μέχρι εκείνη τη στιγμή και ρώτα μας συγκεκριμένα για το σημείο που κόλλησες.
jsiskos Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Στα ελληνικά - Συνοπτικός οδηγός αναφοράς συναρτήσεων της C (έχει και παραδείγματα) Στα αγγλικά - rand() Στα αγγλικά - rand example
vagman2 Δημοσ. 6 Απριλίου 2013 Μέλος Δημοσ. 6 Απριλίου 2013 Ευχαριστώ πολυ για τη βοήθεια!!! Παιδια είμαι καινουριος στο forum οπότε ειμαι σε περίοδο προσαρμογης !! migf1:θα το προσπαθήσω και θα ανεβάσω τον κώδικα να τον δεις!!
migf1 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Ευχαριστώ πολυ για τη βοήθεια!!! Παιδια είμαι καινουριος στο forum οπότε ειμαι σε περίοδο προσαρμογης !! migf1:θα το προσπαθήσω και θα ανεβάσω τον κώδικα να τον δεις!! Καλώς όρισες και καλή διαμονή Βασικά η προτροπή μου στο προηγούμενο μήνυμα αποτελεί κοινό τόπο σε όλα τα δημοφιλή φόρουμ προγραμματισμού, ελληνικά και ξένα. Δηλαδή, κανείς δεν δίνει έτοιμη λύση γιατί έτσι δεν βοηθάει ουσιαστικά εκείνον που ρώτησε. Αντίθετα, όταν ξέρουμε και μπορούμε, του δίνουμε κατευθύνσεις πάνω σε αυτό που ρωτάει ώστε να μπορέσει να το ξεκινήσει, και μετά όπου κολλάει τον ξανά βοηθάμε με τον ίδιο τρόπο. Η κοινή πρακτική υπαγορεύει να μας παραθέτει τι έχει γράψει μέχρι εκείνη τη στιγμή. Υπάρχει δηλαδή μια εποικοδομητική και διαρκής αλληλεπίδραση. Καλή συνέχεια, κι όπου κολλήσεις εδώ είμαστε
migf1 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Επειδή μαλλον δεν έχεις χρησιμοποιήσει ξανά την srand() (και rand()) οπότε η τεκμηρίωσή της είναι πολύ πιθανό να σε μπερδέψει χειρότερα από ότι να σε βοηθήσει, να σου πω συνοπτικά πως... α) κατά κανόνα την καλείς μονάχα μια φορά στην αρχή του προγράμματός σου. β) για να μην παιδεύεσαι με βελτιστοποιημένα seed initializer values, μπορείς να της περάσεις ως όρισμα την τιμή επιστροφής της έτοιμης συνάρτησης: time() με όρισμα NULL ... αυτό το τελευταίο ουσιαστικά σου επιστρέφει την ώρα από το ρολόι του συστήματός σου, που κατόπιν την περνάς σαν όρισμα στην srand(), έτσι ώστε κάθε φορά που τρέχει το πρόγραμμά σου να μην σου βγάζει τους ίδιους ψευδο-τυχαίους (δες και το δ) ). γ) Για να την χρησιμοποιήσεις πρέπει να κάνεις #include <stdlib.h> ενώ για χρήση της time() πρέπει να κάνεις #include <time.h> δ) Ο λόγος ύπαρξής της είναι να αρχικοποιήσει μια γεννήτρια ψευδο-τυχαίων αριθμών, από την οποία "τραβάς" κατόπιν διαδοχικές τιμές με αντίστοιχες κλήσεις της συνάρτησης rand(). Όλο μαζί... #include <stdio.h> #include <stdlib.h> #include <time.h> ... int main( void ) { srand( time(NULL) ); ... printf( "%d\n", rand() ); ... exit( EXIT_SUCCESS); }
vagman2 Δημοσ. 6 Απριλίου 2013 Μέλος Δημοσ. 6 Απριλίου 2013 Έκανα μια προσπαθεια ,αλλα μήπως θέλει κατι παραπάνω? Ο κώδικας ειναι: #include <stdio.h>#include <stdlib.h>#include <time.h>main(){ int num=0,gs,i,cnt=0;printf ("First number: %d\n", rand());num=rand();srand ( time(NULL) );for(i=0;i<100;i++){printf(" %d\n", rand());gs=rand();cnt++;if(gs>num)printf("dwse mikrotero arithmo");else if (gs<num)printf("dwse megalytero arithmo");else if(gs==num)break;}printf("o aritmos einai :%d\n",num);printf("h prospatheies htan :%d\n",cnt); //printf("Another Random number: %d\n", rand());//srand ( 1 );//printf ("Again the first number: %d\n", rand());system("pause");} Μόλις είδα την απάντηση σου!!! μάλλον είναι λίγο άκυρο αυτό που έχω κάνει!!
migf1 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Ε ναι, είναι λίγο Σχετικά με την rand(), να σου δώσω ένα ακόμα hint: για να περιορίσεις το εύρος του τυχαίου που θα σου επιστρέψει θα πρέπει να χρησιμοποιήσεις πάνω της τον τελεστή mod (modulus, υπόλοιπο διαίρεσης στα Ελληνικά)... δηλαδή το σύμβολο % Άσχετα τώρα με την rand(), όταν θέλεις να διαβάσεις κάτι από τον χρήστη, δεν πρέπει να χρησιμοποιείς την printf() αλλά την scanf() ... αν κι εγώ είμαι αντίθετος με τη χρήση της scanf(), αλλά δεν είναι τώρα αυτό το θέμα μας (γιατί θα σε μπλέξω χειρότερα). Τέλος, για να βγαίνει ο κώδικάς σου όμορφος εδώ στο φόρουμ, αντέγραφέ τον από τον editor/IDE σου και κατόπιν βάζε τον μέσα στα λεγόμενα code-tags... υπάρχει ειδικό εικονίδιο εδώ στον editor του forum... το <> στην toolbar. Επειδή όμως είναι λίγο περίεργη η λειτουργία του, μπορείς να πατήσεις εκείνον το εικονίδιο του διακόπτη πάνω αριστερά, για να σου γυρίζει τον editor του φόρουμ σε κατάσταση απλού κειμένου, να αντιγράψεις τον κώδικά σου και μετά να τον εσωκλείσεις μέσα σε... [ code] κώδικας [ /code] (χωρίς τα κενά πριν τα code και /code μέσα στις αγκύλες)
vagman2 Δημοσ. 6 Απριλίου 2013 Μέλος Δημοσ. 6 Απριλίου 2013 Μήπως είναι κάπως έτσι? #include <stdio.h> #include <stdlib.h> #include <time.h> main() { int num=0,gs,i,cnt=0; gs=rand()%80; num=gs; srand ( time(NULL) ); for(i=0;i<1000;i++){ //printf(" %d\n", rand()); gs=rand()%80; printf("%d\n",gs); cnt++; if(gs>num) printf("dwse mikrotero arithmo"); else if (gs<num) printf("dwse megalytero arithmo"); else if(gs==num) break; } printf("o aritmos einai :%d\n",num); printf("h prospatheies htan :%d\n",cnt); system("pause"); }
migf1 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Αν δεν έχει προλάβει άλλος, θα το κοιτάξω άλλη στιγμή και θα σου πω, γιατί τώρα πάω να ξαπλώσω για να είμαι φρέσκος στη βραδινή μου έξοδο
bird Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Καλησπέρα. 2-3 παρατηρήσεις με μία πολύ γρήγορη ματιά που έριξα: 1. Την srand() πρέπει να την καλέσεις πριν από οποιαδήποτε κληση της rand() έτσι ώστε να αρχικοποιηθεί. 2. Δεν ζητάς από το χρήστη πουθενά να δώσει αριθμό.Αυτό που κάνει είναι να παράγεις τυχαίους αριθμούς και να συγκρίνεις αυτούς με τον αρχικό αριθμό. (δες την scanf για το πως να διαβάζεις από το πληκτρολόγιο) 3. Αντικατέστησε το for loop με ένα while γιατί έτσι περιορίζεις τις προσπάθειες του χρήστη (τώρα θα μου πεις σιγα μη χρειαστεί 1000 προσπάθειες αλλα για λόγους γενικότητας το λέω) 4. Αν αφήσεις το for loop τότε δε χρειάζεσαι τον cnt αφού μετά το break το i του loop θα είναι οι προσπάθειες του χρήστη. Αυτά σε πρώτη φάση... Καλή συνέχεια.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα