Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές Δρ. Γιώργος Λαμπρινίδης amprinidis@pharm.uoa.gr 1
Αριθμητικοί Τελεστές + πρόσθεση - αφαίρεση * πολλαπλασιασμός / διαίρεση Προσοχή! Διαίρεση μεταξύ ακεραίων (int) δίνει σαν αποτέλεσμα το ακέραιο πηλίκο της διαίρεσης, π.χ. 5/2=2 και όχι 2.5! % υπόλοιπο διαίρεσης (moduo) π.χ. 7%3 = 7mod3 =1 15%5 = 15mod5 =0 20%6 = 20mod6 =2 ++ εξηγείται παρακάτω -- εξηγείται παρακάτω 2
Εντολές Ανάθεσης (1) Βασικό είδος εντολής που είναι της μορφής <μεταβλητή> = <παράσταση> Μία εντολή ανάθεσης έχει σαν αποτέλεσμα τον υπολογισμό της τιμής της παράστασης στο δεξί μέλος του = και την ανάθεση της τιμής αυτής στη μεταβλητή στο αριστερό μέλος του = 3
Εντολές Ανάθεσης (2) Πολύ συχνές είναι οι αριθμητικές παραστάσεις που περιγράφουν πράξεις μεταξύ ακέραιων ή πραγματικών μεταβλητών και σταθερών, μέσω των αριθμητικών τελεστών π.χ. i=5; i=i+1; Αποτέλεσμα i=5+1=6 4
Εντολές Ανάθεσης (3) Παραστάσεις που εμπλέκουν μεταβλητές και σταθερές διαφορετικών τύπων δίνουν σαν αποτέλεσμα τιμή του «ευρύτερου» τύπου. Για παράδειγμα, κάποια αριθμητική πράξη μεταξύ int και doube δίνει αποτέλεσμα doube 5
Εντολές Ανάθεσης (4) Ανάθεση μίας τιμής ενός τύπου σε μεταβλητή άλλου τύπου έχει σαν αποτέλεσμα τη μετατροπή της τιμής στον τύπο της μεταβλητής, είτε χωρίς απώλεια πληροφορίας, είτε με απώλεια πληροφορίας, ανάλογα με το αν ο τύπος της μεταβλητής έχει τη δυνατότητα να αναπαραστήσει πλήρως την ανατιθέμενη τιμή π.χ. η ανάθεση int a = 2.5 θέτει στο a την τιμή 2, καθώς υπάρχει απώλεια πληροφορίας, αφού ο int αποθηκεύει μόνο το ακέραιο μέρος και όχι το δεκαδικό 6
Εντολές Ανάθεσης (5) Ρητή μετατροπή τύπου μπορεί να γίνει μέσω προσαρμογής (cast), για παράδειγμα, αν η μεταβλητή i είναι ακέραιου τύπου (int), η έκφραση (doube) i αναφέρεται στην τιμή της i σαν πραγματικό αριθμό (doube) 7
Αριθμητικές Παραστάσεις Συχνά, καλούμαστε να υπολογίσουμε μέσα από ένα πρόγραμμα την τιμή μίας αριθμητικής παράστασης π.χ. A = 56*3 + (7+45)/2 66 8
Προτεραιότητα Πράξεων H προτεραιότητα των πράξεων είναι όμοια με αυτή που ισχύει στα απλά μαθηματικά: Πρώτα υπολογίζονται οι παραστάσεις εντός των παρενθέσεων από τα αριστερά προς τα δεξιά Μετά οι πολλαπλασιασμοί και οι διαιρέσεις από τα αριστερά προς τα δεξιά Τέλος οι προσθέσεις και οι αφαιρέσεις από τα αριστερά προς τα δεξιά 9
Παράδειγμα 1 Η αριθµητική παράσταση y * y / 2 * z 1 / x υπολογίζεται ως εξής: 10
Παράδειγμα 1 y * y / 2 * z 1 / x 1. y * y 2. y * y / 2 3. y * y / 2 * z 4. 1 / x 5. y * y / 2 * z 1 / x 11
Παράδειγμα 2 Η αριθµητική παράσταση z (a + b / 2) + w * y υπολογίζεται ως εξής: 12
Παράδειγμα 2 z (a + b / 2) + w * y 1. b / 2 2. a + b / 2 3. w * y 4. z (a + b / 2) 5. z (a + b / 2) + w * y 13
Οι τελεστές ++ και -- Είναι τελεστές μοναδιαίας αύξησης, δηλαδή όταν εφαρμόζονται επάνω σε μία μεταβλητή, είτε στα αριστερά είτε στα δεξιά της, έχουν σαν αποτέλεσμα την αύξηση, ή μείωση αντίστοιχα, της τιμής της μεταβλητής κατά 1. i++ είναι ισοδύναμο με i = i + 1 ++ i είναι ισοδύναμο με i = i + 1 i-- είναι ισοδύναμο με i = i - 1 --i είναι ισοδύναμο με i = i - 1 14
Παράδειγμα 1 στους τελεστές ++ και -- Έστω η ακολουθία εντολών x = 2; y = 9; x++; --y; Ποιες τιμές θα έχουν τα x και y αντίστοιχα; 15
Παράδειγμα 1 στους τελεστές ++ και Απάντηση Έστω η ακολουθία εντολών x = 2; y = 9; x++; --y; Ποιες τιμές θα έχουν τα x και y αντίστοιχα; x = 3 y = 8 16
Παράδειγμα 2 στους τελεστές ++ και -- Έστω η ακολουθία εντολών x = 2; y = 9; x++; --y; ++x; x--; y--; ++y; Ποιες τιμές θα έχουν τα x και y αντίστοιχα; 17
Παράδειγμα 2 στους τελεστές ++ και Απάντηση Έστω η ακολουθία εντολών x = 2; y = 9; x++; // x=x+1=2+1=3 --y; // y=y-1=9-1=8 ++x; // x=x+1=3+1=4 x--; // x=x-1=4-1=3 y--; // y=y-1=8-1=7 ++y;// y=y+1=7+1=8 Ποιες τιμές θα έχουν τα x και y αντίστοιχα; x =3 y=8 Σημείωση: Στο παράδειγμα αυτό, δεν είχε κάποια σημασία η τοποθέτηση των τελεστών αριστερά ή δεξιά της μεταβλητής. 18
Διαφορά μεταξύ (++i, i++) και (--i, i--) Εκτός από αυτόνομη εντολή, η εϕαρμογή των τελεστών μοναδιαίας αύξησης σε μία μεταβλητή, μπορεί να παίξει και το ρόλο παράστασης (ή τμήματος παράστασης). Στην περίπτωση αυτή, έχει σημασία αν ο μοναδιαίος τελεστής είναι προθεματικός (αριστερά της μεταβλητής,π.χ. ++i) ή μεταθεματικός (δεξιά της μεταβλητής, π.χ. i++). 19
Διαφορά μεταξύ (++i, i++) και (--i, i--) Ένας προθεματικός τελεστής μοναδιαίας αύξησης ή μείωσης σε μία παράσταση υπονοεί ότι πρώτα πρέπει να γίνει η τροποποίηση της τιμής της μεταβλητής (αύξηση ή μείωση, ανάλογα) και μετά να χρησιμοποιηθεί η τροποποιημένη τιμή για τον υπολογισμό της τιμής της παράστασης. Ένας μεταθεματικός τελεστής μοναδιαίας αύξησης ή μείωσης σε μία παράσταση υπονοεί ότι πρώτα πρέπει να χρησιμοποιηθεί η τρέχουσα τιμή της μεταβλητής για τον υπολογισμό της τιμής της παράστασης και μετά να γίνει η τροποποίηση της τιμής της μεταβλητής (αύξηση ή μείωση, ανάλογα). 20
Παράδειγμα στους τελεστές ++ και εντός αριθμητικών παραστάσεων Έστω η ακολουθία εντολών x = 4; y = 7; z = ++y; y = z - (x++); z = x - (--y); Τι τιμή θα έχουν οι μεταβλητές x, y και z μετά από αυτές τις εντολές; 21
Παράδειγμα στους τελεστές ++ και εντός αριθμητικών παραστάσεων Απάντηση Έστω η ακολουθία εντολών x = 4; y = 7; z = ++y; // z= 8 και y=8 y = z - (x++); // y=8-4=4 και x=5 z = x - (--y); // z=5-3=2 και y=3 Τι τιμή θα έχουν οι μεταβλητές x, y και z μετά από αυτές τις εντολές; x=5 y=3 z=2 22
Τελεστές σύγκρισης Πολύ συχνά, στην C, θέλουμε να ελέγξουμε κάποια συνθήκη και ανάλογα με το αποτέλεσμα του ελέγχου (αληθές ή ψευδές) να προβούμε σε κάποια ενέργεια. Οι συνθήκες συνήθως είναι συγκρίσεις τιμών αριθμητικών παραστάσεων, μέσω των τελεστών σύγκρισης, που είναι οι εξής: <= (μικρότερο ή ίσο) >= (μεγαλύτερο ή ίσο) == (ίσο)!= (διάφορο) > (μεγαλύτερο) < (μικρότερο) 23
Λογικοί Τελεστές Πιο σύνθετες συνθήκες μπορούν να κατασκευασθούν από απλούστερες μέσω των λογικών τελεστών οι οποίοι είναι οι εξής: && Λογικό ΚΑΙ Λογικό Η! Λογικό ΟΧΙ Οι συνθήκες δεν είναι κάτι διαφορετικό από τις παραστάσεις. Μία αληθής συνθήκη είναι μία παράσταση με τιμή ίση με 1, ενώ μία ψευδής συνθήκη θεωρείται ότι έχει τιμή 0. 24
Λογικές Παραστάσεις Παράδειγμα 1 Η τιµή µιας λογικής παράστασης είναι : 1 (αληθής) ή 0 (ψευδής). π.χ. Αποτιμήστε τις παρακάτω λογικές παραστάσεις: 3 > 0 2 > 10 7 >= 6 7 >= 7 4 < 5 5 < 5 6 <= 9 9 <= 3 1 == 1 3 == 2 8!= 7 9!= 9 25
Λογικές Παραστάσεις Παράδειγμα 1 Απάντηση Η τιµή µιας λογικής παράστασης είναι : 1 (αληθής) ή 0 (ψευδής). π.χ. Αποτιμήστε τις παρακάτω λογικές παραστάσεις: 3 > 0 // αληθής 2 > 10 // ψευδής 7 >= 6 // αληθής 7 >= 7 // αληθής 4 < 5 // ψευδής 5 < 5 // ψευδής 6 <= 9 // αληθής 9 <= 3 // ψευδής 1 == 1 // αληθής 3 == 2 // ψευδής 8!= 7 // αληθής 9!= 9 // ψευδής 26
Λογικές Παραστάσεις Παράδειγμα 2 π.χ. Αποτιμήστε τις παρακάτω λογικές παραστάσεις, δεδομένου ότι x=3, y=4, z=2 x > y y!= z x > z && y > 2 (για να είναι αληθής πρέπει η παράσταση στα δεξιά να είναι αληθής ΚΑΙ η παράσταση στα αριστερά να είναι επίσης αληθής) z > x y > z (για να είναι αληθής πρέπει η παράσταση στα δεξιά να είναι αληθής Ή η παράσταση στα αριστερά να είναι αληθής)!(z > x y > z) (για να είναι αληθής πρέπει η παράσταση μέσα στην παρένθεση να είναι ψευδής) 27
Λογικές Παραστάσεις Παράδειγμα 2 Απαντηση π.χ. Αποτιμήστε τις παρακάτω λογικές παραστάσεις, δεδομένου ότι x=3, y=4, z=2 x > y // ψευδής y!= z // αληθής x > z && y > 2 // αληθής z > x y > z // αληθής!(z > x y > z) // ψευδής 28
Βασικές συναρτήσεις Εσόδου - Εξόδου (1) Η εντολή εισόδου scanf. scanf (συµβολοσειρά ελέγχου µορφής, λίστα εισόδου); int %d doube %f foat %f char %c 29
Παραδείγματα int akeraios; scanf( %d, &akeraios); char xar; scanf( %c, &xar); 30
Βασικές συναρτήσεις Εσόδου - Εξόδου (1) Η εντολή εξόδου prin. prin ( συµβολοσειρά ελέγχου µορφής, λίστα εξόδου); int %d doube %f foat %f char %c 31
Παραδείγματα int akeraios = 15; prin ( %d, akeraios); char xar = n ; prin ( %c, xar); 32
Πρόγραμμα στη C Γράψτε ένα πρόγραµµα σε C που να διαβάζει από το πληκτρολόγιο τρεις πραγματικούς αριθμούς και να υπολογίζει και να τυπώνει το άθροισµα και τη µέση τιµή αυτών των αριθµών. 33
ΑΛΓΟΡΙΘΜΟΣ 1) Διάβασε x1, x2, x3 2) Υπολογισµός του αθροίσματος ως x1 + x2 + x3 ; 1) Υπολογισµός του μέσου όρου ως άθροισμα/ 3.0 ; 1) Εκτύπωση του μέσου όρου 34
Πρόγραμμα στη C Απάντηση (1) \* Υπολογίζει τη µέση τιµή τριών αριθµών*\ #incude <stdio.h> main () { } /* Τµήµα δηλώσεων*/ doube x1, x2, x3, sum, average; prin ( \nδώστε τις τιµές των τριών αριθµών : ); scanf( %f, &x1); scanf( %f, &x2); scanf( %f, &x3); /* Υπολογισµός του αθροίσµατος*/ sum = x1 + x2 + x3; /*Υπολογισµός της µέσης τιµής*/ average = sum / 3.0; /*Eκτύπωση της µέσης τιµής*/ prin ( \nη µέση τιµή είναι: %f, average); getchar(); 35
Ασκήσεις 1) Να διαβαστούν οι δύο πλευρές, α και β ενός ορθογωνίου παραλληλογράμμου και να υπολογιστούν και να εμφανιστούν το εμβαδόν και η περίμετρος του. 2) Να διαβαστεί η τιμή ενός προϊόντος και το ποσοστό της έκπτωσης % (πχ 30, 40, 50) και να υπολογιστεί η τελική τιμή του προϊόντος αυτού. 3) Να διαβαστούν δύο αριθμοί σε δύο μεταβλητές α και β και να γίνει ανταλλαγή των τιμών τους. 4) Να διαβαστούν οι τιμές των στοιχείων C, H, O, N ενός Μοριακού Τύπου μιας Χημικής Ένωσης και να υπολογιστεί το Μοριακό Βάρος. 36