CE 120 Φροντιστήριο 14/10/2011 1
Απολογισµός εργαστηρίου Βρείτε το τµήµα σας στη σελίδα του µαθήµατος. Να ξέρετε τον Α.Μ. σας πριν το επόµενο εργαστήριο. Φτιάξτε ένα καλογραµµένο αρχείο σαν το errors.txt στο οποίο θα σηµειώνετε µηνύµατα λάθους και τι σηµαίνουν. 2
Την επόµενη εβδοµάδα Topics: θα γράψετε προγράµµατα από την αρχή. Κάντε εξάσκηση το σαββατοκύριακο! formatted input & output µεταβλητές vs. σταθερές vs. literals τελεστές επίλυση προβληµάτων 3
Formatted input & output Γράψτε ένα πρόγραµµα το οποίο εκτυπώνει το µήνυµα "Enter date D/M/Y " διαβάζει από το πληκτρολόγιο τη σηµερινή ηµεροµηνία µε τη µορφή ηµέρα/µήνας/έτος, όπου ηµέρα, µήνας και έτος είναι ακέραιοι εκτυπώνει το µήνυµα: Day: D Month: M Year: Y όπου D, M, Y η ηµέρα, ο µήνας και το έτος αντίστοιχα. 4
printf format specifiers %c : char %d : int %x : hex %f : float %lf : double %s : συµβολοσειρά %p : διεύθυνση Πηγή: http://en.cppreference.com/w/cpp/io/c/printf 5
Επιπλέον λειτουργίες printf Εκτύπωση αριθµού κινητής υποδιαστολής µε 2 δεκαδικά ψηφία: double x = 1.2345; printf("%.2lf", x); Εκτυπώνει: 1.23 Εκτύπωση αριθµού κινητής υποδιαστολής µε 2 δεκαδικά ψηφία και συνολικό πλάτος 6 θέσεις: double x = 12.345; printf("%6.2lf", x); Εκτυπώνει: 12.34 1 κενό + 2 ακέραια ψηφία + τελεία + 2 δεκαδικά 6 θέσεις 6
Επιπλέον λειτουργίες printf Εκτύπωση ακέραιου αριθµού µε συνολικό πλάτος 4 θέσεις: int x = 12; printf("%4d", x); Εκτυπώνει: 12 2 κενά + 2 ακέραια ψηφία 4 θέσεις Εκτύπωση ακέραιου αριθµού µε συνολικό πλάτος 4 θέσεις και "γέµισµα" µε µηδενικά: int x = 12; printf("%04d", x); Εκτυπώνει: 0012 7
scanf format specifiers %c : char %d : int %x : hex %g : float %lf : double %s : συµβολοσειρά %p : διεύθυνση Πηγή: http://en.cppreference.com/w/cpp/io/c/scanf 8
scanf παραδείγµατα Ανάγνωση χαρακτήρα: char letter; scanf(" %c", &letter); βάζετε πάντα ένα κενό ανάµεσα στο " και στο % Ανάγνωση τιµών όταν η είσοδος έχει τη µορφή 10/2011: int month, year; scanf("%d/%d", &month, &year); Ανάγνωση τιµών όταν η είσοδος έχει τη µορφή PRICE: 3.75 euro double price; scanf("price: %lf euro", &price); 9
Μεταβλητές vs σταθερές Πότε δηλώνουµε µια ποσότητα ως σταθερά? Όταν η τιµή της δεν πρόκειται και δεν πρέπει να αλλάξει εντός του προγράµµατος παραδείγµατα: η τιµή του π, µια ποσότητα που εκφράζει επιτόκιο Γιατί χρησιµοποιούµε σταθερές? Δικλίδα ασφαλείας: Δε µας αφήνει ο compiler να αλλάξουµε την τιµή κατά λάθος. Δικλίδα ασφαλείας & ευκολία: Συνήθως η σταθερά εµφανίζεται σε πολλά σηµεία του προγράµµατος. Επιβάλουµε τη χρήση της ίδιας τιµής σε όλα τα σηµεία και κάνουµε πιο εύκολα αλλαγές Καλύτερος κώδικας: Δίνουµε την ευκαιρία στον compiler να κάνει βελτιστοποιήσεις 10
Ονοµασία µεταβλητών/σταθερών Μεταβλητές Περιγραφικό όνοµα, συνήθως ουσιαστικό. Το πρώτο γράµµα είναι µικρό Αν το όνοµα αποτελείται από δύο λέξεις, ή γράφουµε τη δεύτερη µε αρχικό κεφαλαίο ή τις χωρίζουµε µε κάτω παύλα (underscore) numstudents ή num_students 11
Ονοµασία µεταβλητών/σταθερών Σταθερές Περιγραφικό όνοµα, συνήθως ουσιαστικό. Όλα τα γράµµατα κεφαλαία Γιατί? Για να φαίνεται αµέσως ότι πρόκειται για σταθερά Αν το όνοµα αποτελείται από δύο λέξεις, τις χωρίζουµε µε κάτω παύλα (underscore) TAX_RATE, GOLDEN_RATIO 12
Παράδειγµα Γράψτε ένα πρόγραµµα το οποίο υπολογίζει τον τόκο για ένα δάνειο µε επιτόκιο 9.5% Το πρόγραµµα Εκτυπώνει το µήνυµα: "Enter principal amount: " Διαβάζει το κεφάλαιο (δεκαδικός) Εκτυπώνει το µήνυµα: "Enter time in years: " Διαβάζει τη χρονική διάρκεια Υπολογίζει τον τόκο και εκτυπώνει το µήνυµα "Interest: X" όπου X ο τόκος 13
Τελεστές & επίλυση προβληµάτων Γράψτε ένα πρόγραµµα το οποίο υπολογίζει πόσες ώρες, λεπτά και δευτερόλεπτα έχουν περάσει από 1/1/1970 έως τώρα Γράψτε ένα πρόγραµµα το οποίο διαβάζει ένα τριψήφιο ακέραιο και αποσπά κι εκτυπώνει το πρώτο ψηφίο του. 14
bit operations Γιατί και πού? Data compression Encryption Access control lists Graphics Checksums και πολλά άλλα 15
Ένα πολύ απλό calendar εβδοµάδας 7 ηµέρες την εβδοµάδα 8 bits σε ένα byte Ιδέα: κάθε bit = η διαθεσιµότητα µιας ηµέρας 0 : η µέρα δεν είναι διαθέσιµη 1 : η µέρα είναι διαθέσιµη bit στη θέση 0: δε χρησιµοποιείται bit στη θέση 1: Δευτέρα, στη θέση 2: Τρίτη, κτλ 16
Ένα πολύ απλό calendar εβδοµάδας Κάνε την i-οστή µέρα διαθέσιµη Κάνε την i-οστή µέρα µη-διαθέσιµη Έλεγξε αν η i-οστή µέρα είναι διαθέσιµη Αντέστρεψε τη διαθεσιµότητα της i-οστής µέρας 17
Ένα ακόµη ενδιαφέρον πρόβληµα Πώς µπορούµε να ανιχνεύσουµε αν ένας αριθµός είναι δύναµη του 2? 18