Εισαγωγή στον Προγραμματισμό



Σχετικά έγγραφα
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Μεθόδων Επίλυσης Προβλημάτων

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραμματισμό

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο. Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

12. Συναρτήσεις (Μέρος ΙI)

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός ΙI (Θ)

Εισαγωγή στον Προγραμματισμό

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στον Προγραμματισμό

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραμματισμό

Ανάπτυξη και Σχεδίαση Λογισμικού

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός II. Τυχαίοι αριθμοί Διεπαφές

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Οντοκεντρικός Προγραμματισμός

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσμία: Τετάρτη 23/11/2016, 21:00

Μεθόδων Επίλυσης Προβλημάτων

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ 8/9/2008

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Μεθόδων Επίλυσης Προβλημάτων

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ'

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

Ανάπτυξη και Σχεδίαση Λογισμικού

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διαδικασιακός Προγραμματισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Οντοκεντρικός Προγραμματισμός

Αλγόριθμοι Ταξινόμησης Μέρος 1

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Δομημένος Προγραμματισμός

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός ΙI (E)

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Δείκτες & Πίνακες Δείκτες, Πίνακες

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός ΙI (E)

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός Η/Y. Διάλεξη 6 η : Συναρτήσεις

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Ανάπτυξη και Σχεδίαση Λογισμικού

Μεθόδων Επίλυσης Προβλημάτων

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός I (Θ)

Δομημένος Προγραμματισμός

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Διάλεξη 22η: Επιπλέον στοιχεία της C

Διαδικασιακός Προγραμματισμός

Εργαστήριο 9: Αρχεία

Επανάληψη για τις Τελικές εξετάσεις

Προγραμματισμό για ΗΜΥ

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

Διαδικασιακός Προγραμματισμός

1 Ο ΣΕΤ ΑΣΚΗΣΕΩΝ (Ενδεικτικές Λύσεις)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Η άσκηση μπορεί να γίνει με συνεργασία το πολύ δυο φοιτητών, οι οποίοι θα λάβουν τον ίδιο βαθμό στην εργασία.

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Η γλώσσα προγραμματισμού C

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

ΕΝΟΤΗΤΑ 12 ΣΕΙΡΙΑΚΗ ΔΙΕΠΑΦΗ

Εργαστήριο 3 Εντολή for while, do while

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 4/3/2008

Transcript:

Εισαγωγή στον Προγραμματισμό Ψευδοτυχαίοι Αριθμοί Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013

Ψευδοτυχαίοι Αριθμοί Μια γεννήτρια ψευδοτυχαίων αριθμών είναι ένας αλγόριθμος παραγωγής μιας σειράς αριθμών που προσεγγίζουν τις ιδιότητες των τυχαίων αριθμών. Η C μας παρέχει στην βιβλιοθήκη της μια τέτοια γεννήτρια. Χαροκόπειο Πανεπιστήμιο 2/17

Η συνάρτηση rand() Η συνάρτηση rand() δηλώνεται στο αρχείο stdlib.h και μας παρέχει την δυνατότητα παραγωγής ψευδοτυχαίων αριθμών. Η συνάρτηση επιστρέφει έναν ακέραιο στο διάστημα [0, RAND_MAX] όπου RAND_MAX είναι μια σταθερά. Με βάση το πρότυπο της C η σταθερά RAND_MAX πρέπει να έχει τουλάχιστον την τιμή 32767. Συνήθως όμως έχει μεγαλύτερη τιμή. Στο σύστημα του ομιλητή η RAND_MAX έχει την τιμή 2147483647. Χαροκόπειο Πανεπιστήμιο 3/17

Η συνάρτηση rand() Εάν οι αριθμοί ήταν πραγματικά τυχαίοι τότε κάθε φορά που θα καλούσαμε την rand() θα περιμέναμε να πάρουμε κάποιον αριθμό με πιθανότητα 1 1 + RAND_MAX Επειδή όμως η γεννήτρια παράγει ψευδοτυχαίους αριθμούς η πιθανότητα δεν είναι η παραπάνω. Για να καταλάβουμε όμως διαφορά πρέπει να χρησιμοποιήσουμε την γεννήτρια πάρα πολλές φορές συνεχόμενα. Χαροκόπειο Πανεπιστήμιο 4/17

Παράδειγμα Η συνάρτηση rand() 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int i ; 6 for ( i = 0 ; i < 10; i++) 7 printf ( "%d ", rand ( ) ) ; 8 } Το παραπάνω πρόγραμμα στο σύστημα του ομιλητή εκτυπώνει: 1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 1649760492 596516649 1189641421 Χαροκόπειο Πανεπιστήμιο 5/17

Μετατροπή Διαστήματος Η συνάρτηση rand() Για να μετατρέψουμε το διάστημα από 0 έως RAND_MAX σε 0 έως N όπου N < RAND_MAX χρησιμοποιήσουμε τον τελεστή υπολοίπου διαίρεσης. Διαιρούμε δηλαδή τον αριθμό που μας δίνει η rand() με N + 1. π.χ int r = rand ( ) % 100; Χαροκόπειο Πανεπιστήμιο 6/17

Παραγωγή Ψευδοτυχαίων από 0 έως 99 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int i ; 6 for ( i = 0 ; i < 10; i++) 7 printf ( "%d ", rand()%100); 8 printf ( "\n" ) ; 9 } Το παραπάνω πρόγραμμα στο σύστημα του ομιλητή εκτυπώνει: 83 86 77 15 93 35 86 92 49 21 Χαροκόπειο Πανεπιστήμιο 7/17

Πολλαπλή Εκτέλεση Παραγωγή Ψευδοτυχαίων από 0 έως 99 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int i ; 6 for ( i = 0 ; i < 10; i++) 7 printf ( "%d ", rand()%100); 8 printf ( "\n" ) ; 9 } Άμα εκτελέσουμε το παραπάνω πρόγραμμα 2 φορές θα εκτυπώσει: 83 86 77 15 93 35 86 92 49 21 83 86 77 15 93 35 86 92 49 21 Χαροκόπειο Πανεπιστήμιο 8/17

Τρόπος Λειτουργίας Γεννήτριας Η γεννήτρια ξεκινάει πάντα από τον αριθμό 1 και κάνοντας διάφορους μετασχηματισμούς παράγει την σειρά των αριθμών. Ο αριθμός που ξεκινάει η γεννήτρια λέγεται σπόρος (seed) της γεννήτριας. Η αρχική τιμή του σπόρου είναι πάντα 1 και άρα όσες φορές και να εκτελέσουμε το πρόγραμμα μας θα εκτυπώνει τις ίδιες τιμές. Χαροκόπειο Πανεπιστήμιο 9/17

Αλλαγή του Σπόρου Η συνάρτηση srand() Η C μας παρέχει την συνάρτηση srand() ώστε να μπορούμε να αλλάξουμε τον σπόρο. Η συνάρτηση srand() πέρνει ως παράμετρο έναν unsigned int. Αφού καλέσουμε την srand() η γεννήτρια παράγει μια καινούρια σειρά ψευδοτυχαίων αριθμών. Χαροκόπειο Πανεπιστήμιο 10/17

Άλλη Σειρά 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int i ; 6 7 srand ( 2 ) ; 8 9 for ( i = 0 ; i < 10; i++) 10 printf ( "%d ", rand()%100); 11 printf ( "\n" ) ; 12 } Άμα εκτελέσουμε το παραπάνω πρόγραμμα θα εκτυπώσει: 90 19 88 75 61 98 64 77 45 27 Χαροκόπειο Πανεπιστήμιο 11/17

Πολλαπλή Αλλαγή Σπόρου 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int i ; 6 srand ( 2 ) ; 7 for ( i = 0 ; i < 10; i++) 8 printf ( "%d ", rand()%100); 9 printf ( "\n" ) ; 10 11 srand ( 1 ) ; 12 for ( i = 0 ; i < 10; i++) 13 printf ( "%d ", rand()%100); 14 printf ( "\n" ) ; 15 } Άμα εκτελέσουμε το παραπάνω πρόγραμμα θα εκτυπώσει: 90 19 88 75 61 98 64 77 45 27 83 86 77 15 93 35 86 92 49 21 Χαροκόπειο Πανεπιστήμιο 12/17

Κορώνα ή Γράμματα heads or tail 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 4 int flip ( ) { 5 return rand()% 2; 6 } 7 8 int main ( ) { 9 int i ; 10 for ( i = 0 ; i < 20; i++) 11 printf ( "%c ", flip ( )? 'H' : 'T' ) ; 12 } Στον υπολογιστή του ομιλητή το παραπάνω πρόγραμμα εκτυπώνει: H T H H H H T T H H T H T H H T T T T T Χαροκόπειο Πανεπιστήμιο 13/17

Σπόρος και Χρόνος Συστήματος Οι προγραμματιστές όταν χρησιμοποιούν την γεννήτρια ψευδοτυχαίων αριθμών χρησιμοποιούν πολλές φορές τον χρόνο του συστήματος ως σπόρο. Έτσι είναι σχεδόν απίθανο να χρησιμοποιούν τον ίδιο σπόρο συνέχεια. Η C μας παρέχει το αρχείο #include <time. h> που περιέχει συναρτήσεις και τύπους για να διαβάσουμε τον χρόνο του συστήματος. Χαροκόπειο Πανεπιστήμιο 14/17

Η συνάρτηση time() Η συνάρτηση time() μας επιστρέφει τον χρόνο που έχει περάσει από την χρονική στιγμή 00:00:00 UTC, January 1, 1970, σε δευτερόλεπτα. 1 #include < s t d i o. h> 2 #include <time. h> 3 4 int main ( ) 5 { 6 printf ( "%ld", time ( NULL ) ) ; 7 } To παραπάνω πρόγραμμα εκτυπώνει την ώρα που γράφονται οι διαφάνειες: 1259243300 Χαροκόπειο Πανεπιστήμιο 15/17

Χρόνος και Σπόρος Κορώνα ή Γράμματα 1 #include < s t d i o. h> 2 #include < s t d l i b. h> 3 #include <time. h> 4 5 int flip ( ) { 6 return rand()% 2; 7 } 8 9 int main ( ) { 10 int i ; 11 srand ( time ( NULL ) ) ; 12 for ( i = 0 ; i < 20; i++) 13 printf ( "%c ", flip ( )? 'H' : 'T' ) ; 14 } Πλέον είναι πολύ σπάνιο να εκτυπώσει την ίδια σειρά παραπάνω από μια φορά. Χαροκόπειο Πανεπιστήμιο 16/17

Μελέτη Κεφάλαιο 5.9, C Προγραμματισμός, Deitel & Deitel, 3η έκδοση Donald Knuth, Art Of Computer Programming, Seminumerical Algorithms, Third Edition, Addison-Wesley, 1997. Μία γρήγορη γεννήτρια παραγωγής ψευδοτυχαίων αριθμών (Mersenne Twister). http://www.math.sci.hiroshima-u.ac.jp/ ~m-mat/mt/emt.html http://www.gnu.org/s/gsl/manual/html_node/ Random-Number-Generation.html Χαροκόπειο Πανεπιστήμιο 17/17