ΕΠΛ 032.3: Προγραµµατισµός ΜεθόδωνΕπίλυσηςΠροβληµάτων Αχιλλέας Αχιλλέως, Τµήµα Πληροφορικής, Πανεπιστήµιο Κύπρου Email: achilleas@cs.ucy.ac.cy
Κεφάλαιο 4 Τύποι εδοµένων, Τελεστές καιαριθµητικέςεκφράσεις
Θέµατα ιάλεξης Τύποι εδοµένων int, float, double, char Τελεστές =,+,-,*,/,% Αριθµητικές εκφράσεις a+b.
Τύποι εδοµένων Ένας τύπος δεδοµένων είναι ένα σύνολο τιµών και ένα σύνολο λειτουργιών (πράξεων) που µπορούν να εφαρµοστούν σε αυτές τις τιµές βασικοί τύποι δεδοµένων: (int, float, double, char) σύνθετοιτύποιδεδοµένων: (arrays, structs)
Τύποιδεδοµένων - int Τύπος: int (ακέραιος integer) Αναπαριστά ακέραιους αριθµούς Μέγεθος: 4 bytes πεδίοτιµών: -2 31.. +(2 31-1) δηλαδή περίπου : από [-2G..+2G] [-(δυο δισεκατοµµύρια.. +δυο δισεκατοµµύρια] Πράξεις:πρόσθεση (+), αφαίρεση (-), πολλαπλασιασµός (*),διαίρεση (/), υπόλοιπο (%) Παραδείγµατακυριολεκτικώντιµών: -2189456 0 50 +24562 3245 13576313
Τύποιδεδοµένων - float Τύπος: float (κινητής υποδιαστολής απλής ακρίβειας floating point) Αναπαριστά τους πραγµατικούς αριθµούς Μέγεθος: 4 bytes Πράξεις: πρόσθεση (+), αφαίρεση (-), πολλαπλασιασµός (*),διαίρεση (/) Τιµές µιας µεταβλητής τύπου float µπορεί να είναι: π.χ. 3.01, 110.8, -0.01, κλπ.
Τύποιδεδοµένων - double Τύπος: double (κινητής υποδιαστολής διπλής ακρίβειας double precision) Ίδιος τύπος µε float αλλά µε µεγαλύτερη ακρίβεια (περιέχει δηλ. διπλό αριθµό δεκαδικών ψηφίων απ ότι ο τύπος float) Μέγεθος: 8 bytes Τιµή µιας µεταβλητής τύπου double µπορεί να είναι: π.χ 1.045623
Τύποιδεδοµένων - char Τύπος: char (χαρακτήρας character) Αναπαριστά ατοµικούς χαρακτήρες (Α-Ζ, a-z, 0-9,!@$%&#, ειδικάσύµβολα \n, κλπ.) Μέγεθος: 1 byte Κυριολεκτικές τιµές εσωκλείονται σε µονούς αποστρόφους, π.χ. Α, a, 9,,, *, \n, \, κτλ char xaraktiras; xaraktiras = A ; Οι απόστροφοι δε χρειάζονται όταν εισάγονται χαρακτήρες. Γιαπαράδειγµα: a είναι ο χαρακτήρας a b είναι ο χαρακτήρας b 9 είναι ο χαρακτήρας 9 * είναι ο χαρακτήρας *
Τύποιδεδοµένων char (συν.) κάθε χαρακτήρας αντιστοιχεί σ ένα µοναδικό κωδικό C βασίζεταιστο ASCII code (αριθµητική αντιπροσώπευση ενός χαρακτήρα στη µηχανή) Χαρακτήρεςαλφαβήτου, ψηφίων, ειδικοί ( \n, \t...), κλπ 0 ascii:48, 1 ascii:49,.., 9 ascii:57 A ascii:65,, Z ascii:90 a ascii:97,, z ascii:122
ΟΠίνακας ASCII
Τύποιδεδοµένων (Παράδειγµα) /*program example2.c this program adds three integer variables and displays the results*/ #include <stdio.h> /*use of pre-processor*/ int main ( ){ /*declaration of variables*/ int val1; int val2; int val3; int sum; /*assign values*/ val1=1; val2=2; val3=3; /*compute sum*/ sum=val1+val2+val3; /*display sum*/ printf ("The sum of %d and %d and %d is %d\n", val1, val2, val3, sum); return 0; }
Τύποιδεδοµένων (Παράδειγµα) /*program example3.c this program adds three integer variables and displays the results*/ #include <stdio.h> /*use of pre-processor*/ main ( ) { int val1=1, val2=2, val3=3, sum; /*compute sum*/ sum=val1+val2+val3; /*display sum*/ printf ("The sum of %d and %d and %d is %d\n", val1, val2, val3, sum); } The sum of 1 and 2 and 3 is 6
ΕπιλογήΤύπου εδοµένων Μαθητές σ ένα σχολείο => int Βάρος, Μάζα => float, double Εµβαδό, Όγκος => float, double Όνοµα => char, string Αριθµός Ταυτότητας => int
ΑριθµητικέςΕκφράσεις Σύνταξη: a τ b ή τ a τ είναι ο τελεστής (operator) a, bείναιτελεσταίοι (operands) τελεσταίοι µπορεί να είναι Σταθερές (π.χ. KMS_PER_MILE * miles) Μεταβλητές (π.χ. c = a + b) κλήση συνάρτησης που επιστρέφει αριθµό (π.χ c = sum(a,b) + sum(b,a) ) έκφραση (χρήση παρενθέσεων)
ΑριθµητικοίΤελεστές (arithmetic operators) Όνοµα Τελεστής Παράδειγµα Πρόσθεση + num1 + num2 Αφαίρεση - initial - spent Πολλ/σµός * age * 6 ιαίρεση / sum / count Υπόλοιπο % m % n
Υπόλοιπο % Η έκφραση m % n επιστρέφει το υπόλοιπο τηςδιαίρεσηςτου mµετο n. Το Modulus είναι ακέραιος τελεστής - και οι δύο τελεσταίοι πρέπει να είναι ακέραιοι (ή/και τύπου char). π.χ : 17 % 5 2 6 % 3 0 9 % 2 1 5 % 8 5
Ακέραιαδιαίρεση Εάνκαιοιδύοτελεσταίοιείναιακέραιοι τότεθαπάρετεακέραιοωςαπάντηση. Το δεκαδικό τµήµα απορρίπτεται. π.χ. : 17 / 5 3 4 / 3 1 35 / 9 3 Εάνέναςεκτωνδυοτελεσταίωνείναι float (ή double) θαπάρετε float (και αντίστοιχα double) ως αποτέλεσµα π.χ. 4.0 / 3 1.333333
ιαίρεσηµετο 0 εν ορίζεται διαίρεση µε 0 στα µαθηµατικά. Ανεπιτρέψετεδιαίρεσηµετο 0 σεένα πρόγραµµα θα προκληθεί σφάλµα. Η εκτέλεση του προγράµµατος θα τερµατιστείαπότοµα runtime error Θαµάθουµεαργότεραπώςνα αποφεύγουµε τη διαίρεση µε το 0
TελεστήςΑνάθεσης (=) (assignment operator) Σύνταξη: µεταβλητή = έκφραση; Παραδείγµατα: area = PI * radius * radius; count = count + 1; new_number = old_number; average = total / count; Η τιµή του αποτελέσµατος της έκφρασης στα δεξιά του τελεστή ανάθεσης αποθηκεύεται στη διεύθυνση της µεταβλητής
ΤύποςΈκφρασης Ορίζεται από τους τύπους των τελεστέων char, int, float, double Έκφραση Αποτέλεσµα π.χ. int τ int int 5/2 2 double τ double double 5.0/2.0 2.5 int τ double double 5/2.0 2.5 double τ int double 5.0/2 2.5 int τ char int 5+ a 102 Ascii:97
MετατροπήΤύπων Αυτόµατη µετατροπή Σε ανάθεση (αυτόµατα) η τιµή στα δεξιά του = µετατρέπεται στον τύπο της µεταβλητής στα αριστερά του = int x = 3.14; /* 3 */ float x = (2/3); /* 0.0 */ ΡητήΜετατροπή (Casting) float x = (float) 2/3; /* 2.0/3, 2.0/3.0, 0.66666 */ float x = (float) (2/3); /* 0.0 */
MετατροπήΤύπων (συν.) Παράδειγµα: double x=3.2; int y = 5; Αν x = x + y ; τότεητιµήτης x είναι 8.2 (double) Αν y = x + y ; τότε η τιµή της y είναι 8 (int)
ΜετατροπήΕκφράσεωνσε C m 2 - n 2 ax 2 + bx + c -b + 4ac 2ab c+d ((-a)b) + ((-c)d) => m*m - n*n ή (m*m)-(n*n) => a*x*x + b*x + c => -b + 4 * a* c => (2*a*b)/(c+d) => -a*b + -c*d
ΚανόναςΠροτεραιότηταςΤελεστών Τελεστές στην ίδια έκφραση αποτιµούνται σύµφωναµετιςπροτεραιότητέςτους. Οι προτεραιότητες των αριθµητικών τελεστών, σεφθίνουσασειρά, είναι:
Αριθµητικοίτελεστέςκαι προτεραιότητα Τελεστές Ψηλότερη Προτεραιότητα Προτεραιότητα ( ) Πρώτο στην αποτίµηση. Εάν είναι φωλιασµένο, τοεσώτατοπρώτα. Εάν είναι στο ίδιο επίπεδο, από αριστερά στα δεξιά + - (µοναδιαίοι) εύτεροστηναποτίµηση. Εάν υπάρχουν πολλά, από δεξιά στα αριστερά. * / % Τρίτο στην αποτίµηση. Εάν υπάρχουν πολλά, από αριστερά στα δεξιά + - (δυαδικοί) Τέταρτοστηναποτίµηση. Εάν υπάρχουν πολλά, από αριστερά στα δεξιά. = Αποτιµάται τελευταίο, από δεξιά στα αριστερά Χαµηλότερη Προτεραιότητα
ΚανόναςΠαρενθέσεων Κάθε έκφραση σε παρένθεση αποτιµείταιξεχωριστά. Φωλιασµένες παρενθετικέςεκφράσεις, ((..)), αποτιµώνταιαπόταµέσαπροςταέξω Όπου είσαστε αβέβαιοι χρησιµοποιείτε παρενθέσεις
ΠαράδειγµαΑποτίµησης x * y * z + a / b c * d (((x * y) * z) + (a / b)) (c * d) Και τα δυο είναι σωστά στην γλώσσα C. Ωστόσο η δεύτερη έκφραση εκφράζει πιο ξεκάθαρα τη σειρά εκτέλεσης.
ΠαράδειγµαΑποτίµησης (συν.) x = 5; y= 3; z = -4; Έκφραση (x-y)*z x- (y* z) x - y * z Τιµή -8 17 17 ψηλότερης προτεραιότητας
Εξάσκησηστηναποτίµηση εκφράσεων Έστωοιακέραιο a, b, c, d, & e, όπου a = 1, b = 2, c = 3, d = 4 Τι βγάζουν τα παρακάτω; 2%3 = 2 3/2 = 1 a + b - c + d a * b / c 1 + a * b % c a + d % b c d + c / b a 4 0 3-2 4 4%2 = 0
Εξάσκησηστηναποτίµηση εκφράσεων (συν.) Η αριθµητική παράσταση y * y / 2 * z 1 / x υπολογίζεται ως εξής (υπογραµµίζονται οι ήδη εκτελεσµένες πράξεις): a. y * y b. y * y / 2 c. y * y / 2 * z d. 1 / x e. y * y / 2 * z 1 / x
Έναολοκληρωµένοπαράδειγµα Μια εταιρεία σας εργοδοτεί για να γράψετε ένα νέο πρόγραµµα ταµειακής µηχανής το οποίο υπολογίζει µε ακρίβεια τα ρέστα τα οποία πρέπει να επιστρέψει ο ταµίας σε κάποιο πελάτη. Το πρόγραµµά σας πρέπειναυλοποιείτηνεξήςλειτουργία: 1. Ο ταµίας καταχωρεί στο πρόγραµµά σας το ποσό που οφείλει κάποιος πελάτης (bill) µαζί µε το ποσό (cash) που δίδει ο πελάτης για να αποπληρώσει τα προϊόντα τα οποία αγόρασε. 2. Η ταµειακή µηχανή υπολογίζει το ποσό που πρέπει να επιστραφεί στο χρήστη και το τυπώνει στην οθόνη. 3. Η ταµειακή µηχανή υπολογίζει επίσης τον αριθµό από κάθε είδους χαρτονόµισµα και κέρµα, που πρέπει να επιστραφεί στο χρήστη και τα τυπώνει στην οθόνη. Θέλετε να επιστρέψετε όσο το δυνατό λιγότερα κέρµατα και χαρτονοµίσµατα.
ΠαράδειγµαΕκτέλεσης Παράδειγµα Εκτέλεσης *************************** Cashier - Hello! *************************** Please enter the BILL (in cents): 1347 Please enter the client CASH (in cents): 1650 Please RETURN >> 303 cents Specifically please return: 0 x Twenty Pounds 0 x Ten Pounds 0 x Five Pounds 3 x One Pounds 0 x Fifty Cents 0 x Twenty Cents 0 x Ten Cents 0 x Five Cents 1 x Two Cents 1 x One Cents Thanks - Bye!
Ανάλυση Ποια είναι τα δεδοµένα εισόδου; Ποια είναι τα δεδοµένα εξόδου; Πώς συνδέονται τα δεδοµένα εισόδου µε τα δεδοµένα εξόδου;
Αλγόριθµος 1. Ποσόεπιστροφής (σεσεντς), ΠE = cash bill 2. Υπολόγισε πόσες φορές χωράει το 2000 στο ΠΕ (2000 cents 20 CYP) 3. To ποσό επιστροφής γίνεται το υπόλοιπο του βήµατος 2. 4. Επανέλαβεταβήµατα 2 και 3 για 1000, 500, 100, 50, 20, 10, 5, 2
Κοµµάτιυλοποίησης int main(){ /* declaration of variables */ int bill, cash, back; // Doing the calculation back = cash - bill; printf("please RETURN >> %d cents\n", back); printf("specifically please return:\n"); printf("%d x Twenty Pounds\n", back/2000); back = back % 2000; } printf("%d x Ten Pounds \n", back/1000); back = back % 1000;.
Τέλος 4 ου Κεφαλαίου