Προγραμματισμός ΗΥ: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas Γλώσσα Προγραμματισμού C Εισήγηση #2 Είσοδος/Έξοδος (Input/Output), Αριθμητική με την C, Εισαγωγή στις εντολές (προτάσεις) ελέγχου (conditional statements). Ηλίας Κ. Σάββας Εισήγηση #2 2 Αριθμητικοί Τελεστές Πρόσθεση + Αφαίρεση Πολ/μός * Διαίρεση / Ακέραιο υπόλοιπο % 5+3 12-5 3*5 6/3, 3/2, 3.0/2.0 3%2 (=1) Ηλίας Κ. Σάββας Εισήγηση #2 3 1
Ακέραιη Διαίρεση και Υπόλοιπο int a=10, b=4, c; c = a / b; c=2 Ακέραιο Υπόλοιπο: Η τιμή του αποτελέσματος της πράξης a ακέραιο υπόλοιπο b βρίσκεται αν πάρουμε το υπόλοιπο μετά την διαίρεση του a με το b; c = a % b; c = 2 Προσοχή όμως: Εάν ισχύει float a=10.0, b = 4.0, c; c = a / b; c = 2.5! Ηλίας Κ. Σάββας Εισήγηση #2 4 Αριθμητική Επιτρέπεται η χρήση ΜΟΝΟ παρενθέσεων, Προτεραιότητα Πράξεων: Παρενθέσεις, Πολλαπλασιασμοί και Διαιρέσεις, Προσθέσεις και Αφαιρέσεις. Ισοδύναμες Πράξεις??? Από Αριστερά προς τα Δεξιά Ηλίας Κ. Σάββας Εισήγηση #2 5 Παραδείγματα x+y 2a a a b 2 ( x y) b 4 Ηλίας Κ. Σάββας Εισήγηση #2 6 2
Παραδείγματα x +y 2a (x+y)/(2*a) a a b 2 ( x y) b 4 2+a/b-((a+b)/4)*(x+y) ή 2+a/b-(a+b)*(x+y)/4 Ηλίας Κ. Σάββας Εισήγηση #2 7 Προσδιοριστές Οι προσδιοριστές (identifiers) είναι μία οντότητα στο πρόγραμμα η οποία αποτελείται από ένα σύνολο γραμμάτων, αριθμών και τον ειδικό χαρακτήρα _ (κάτω παύλα - underscore), Ένα γράμμα ή η κάτω παύλα πρέπει να είναι ο πρώτος χαρακτήρας ενός προσδιοριστή, Υπάρχει διαφοροποίηση των πεζών και κεφαλαίων γραμμάτων (a A), Επιλέξτε προσδιοριστές οι οποίοι να έχουν κάποια μνημονική αξία έτσι ώστε να συμβάλλουν στην εύκολη κατανόηση των προγραμμάτων!!! Ηλίας Κ. Σάββας Εισήγηση #2 8 Προσδιοριστές Μεταβλητές: da, b, sum, sum1, velocity, vat, force, b12, a1b Αλλά όχι 1a, 2@, s& Case sensitive a A Δήλωση μεταβλητών: Ακέραιες (int, short, long), Πραγματικοί Αριθμοί (float, double) Ηλίας Κ. Σάββας Εισήγηση #2 9 3
Λέξεις Κλειδιά (Keywords - reserved words) 1) auto, 2) break;, 3) case, 4) char, 5) const, 6) continue, 7) default, 8) do, 9) double, 10) else, 11) enum, 12) extern, 13) float, 14) for, 15) goto, 16) if, 17) int, 18) long, 19) register, 20) return, 21) short, 22) signed, 23) sizeof, 24) static, 25) struct, 26) switch, 27) typedef, 28) union, 29) unsigned, 30) void, 32) volatile, 32) while. Ηλίας Κ. Σάββας Εισήγηση #2 10 Έξοδος (Output): printf Εκτύπωση (και μορφοποίηση) μεταβλητών: Ακέραιοι %d, %nd printf( %10d, a); Πραγματικοί %f, %.mf, %n.mf (%10.2f) Παράδειγμα: printf( %5.1f, x); n: Σύνολο χαρακτήρων (προαιρετικό) m: Πλήθος επιθυμητών δεκαδικών ψηφίων Επομένως: n-m-1 πλήθος ακεραίων ψηφίων (1 θέση για την υποδιαστολή) Ηλίας Κ. Σάββας Εισήγηση #2 11 printf Εάν υποθέσουμε: x=3, y=3.14159 printf( %5d, %10.4f, x,y) ----3----3.1415 printf( %.2f, y) 3.14 Ηλίας Κ. Σάββας Εισήγηση #2 12 4
Αθροίζοντας Δύο Ακεραίους int main() { } int a=3, b=7, sum; sum = a+b; printf( \n Άθροισμα=%d\n,sum); return 0; Πρόβλημα? ΝΑΙ!!! Προσθέτει πάντα τους ίδιους αριθμούς. Ηλίας Κ. Σάββας Εισήγηση #2 13 Βελτιώνοντας το Πρόγραμμα int main() { int a, b, sum; /* και όχι a=3, b=7 */ printf( \n Εισαγωγή 2 ακεραίων: ); scanf( %d%d,&a,&b); sum = a+b; printf( \n Άθροισμα=%d\n, sum); return 0; } Ηλίας Κ. Σάββας Εισήγηση #2 14 Βελτιώθηκε? ΝΑΙ: Τώρα είναι ένα πιο γενικό πρόγραμμα γιατί: Προσθέτει 2 οποιουσδήποτε ακεραίους και όχι πάντα τους προκαθορισμένους ίδιους, Είσοδος από τον χρήστη (πληκτρολόγιο): scanf Ηλίας Κ. Σάββας Εισήγηση #2 15 5
Είσοδος: scanf Εισαγωγή δεδομένων από τον χρήστη (πληκτρολόγιο) όταν το πρόγραμμα εκτελείται: scanf Μορφοποίηση μεταβλητών εισόδου: %d για ακεραίους (int), %f για πραγματικούς (float). scanf( %d%f%d, &a, &b, &c); Μα τι είναι πάλι αυτό το σύμβολο & (σύμβολο διεύθυνσης μεταβλητής)? Ηλίας Κ. Σάββας Εισήγηση #2 16 Παράδειγμα Δεδομένης μιας απόστασης σε μέτρα, γράψτε ένα πρόγραμμα να την μετατρέπει σε ίντσες (1 μέτρο = 39.37 ίντσες) Ανάλυση: 1) Δεδομένα εισόδου: Μέτρα (m) 2) Επεξεργασία: Υπολογισμός της μετατροπής σε ίντσες, i = m * 39.37 (προσοχή: να μην ξεχάσουμε να δηλώσουμε τις μεταβλητές i και m) 3) Έξοδος: ίντσες (i) Ηλίας Κ. Σάββας Εισήγηση #2 17 Πρόγραμμα /* Μετατροπή μέτρων σε ίντσες */ int main() { float m; /* Μέτρα */ float i; /* Ίντσες */ printf( \nαπόσταση σε μέτρα : ); scanf( %f,&m); i = m * 39.37; /* τύπος μετατροπής */ printf( \nη ίδια απόσταση σε ίντσες είναι %.2f\n,i); return 0; } Ηλίας Κ. Σάββας Εισήγηση #2 18 6
Σχόλια /* */ Τα σχόλια σε ένα πρόγραμμα είναι χρήσιμα και ΑΠΑΡΑΙΤΗΤΑ γιατί: Κάνουν το πρόγραμμα κατανοητό και από άλλους (και όχι μόνο ), Περιγράφουν το νόημα των μεταβλητών, Εξηγούν τύπους, Περιγράφουν αλγόριθμους, ΓΕΝΙΚΑ ΠΕΡΙΓΡΑΦΟΥΝ ΚΑΙ ΕΞΗΓΟΥΝ ΟΛΟ ΤΟ ΠΡΟΓΡΑΜΜΑ! Ηλίας Κ. Σάββας Εισήγηση #2 19 Άλλο Ένα Πρόγραμμα.. Δεδομένων (από τον χρήστη πληκτρολόγιο) το μήκος των δύο πλευρών ενός ορθογωνίου, γράψτε ένα πρόγραμμα που να υπολογίζει (και εκτυπώνει) την περίμετρο και το εμβαδόν του. a Area=a x b Perimeter=2 x (a + b) b Ηλίας Κ. Σάββας Εισήγηση #2 20 Ανάλυση 1) Δεδομένα Εισόδου: Το μήκος των δύο πλευρών του ορθογωνίου (ας τις ονομάσουμε a και b) 2) Επεξεργασία: 1) Υπολογισμός: Εμβαδόν (Area=a*b) 2) Υπολογισμός: Περίμετρος (Perimeter=2*(a+b)). Προσοχή: Πρέπει να δηλώσουμε ΚΑΙ τις μεταβλητές Area και Perimeter 3) Έξοδος: Area και Perimeter Ηλίας Κ. Σάββας Εισήγηση #2 21 7
Και το Πρόγραμμα int main() { } int a, b, Area, Perimeter; printf( \nεισαγωγή των 2 πλευρών: ); scanf( %d%d,&a, &b); Area = a * b; Perimeter = 2 * (a + b); printf( \nεμβαδόν = %10d, Area); printf( \nπερίμετρος = %10d, Perimeter); return 0; Ηλίας Κ. Σάββας Εισήγηση #2 22 Δομή Ενός Προγράμματος int main() { int a, b, Area, Perimeter; printf( \nεισαγωγή των 2 πλευρών: ); scanf( %d%d,&a, &b); Area = a * b; Perimeter = 2 * (a + b); printf( \nεμβαδόν = %10d, Area); printf( \nπερίμετρος = %10d, Perimeter); return 0; } 1. #include 2. int main() 3. { 4. } 1. Δηλώσεις; 2. Δεδομένα Εισόδου; 3. Επεξεργασία; 4. Έξοδος; 5. return 0; Ηλίας Κ. Σάββας Εισήγηση #2 23 Ασκήσεις Δεδομένης (από τον χρήστη) της ακτίνας R ενός κύκλου, γράψτε ένα πρόγραμμα που να υπολογίζει και εκτυπώνει το εμβαδόν και την περίμετρό του (Perimeter=2πR, Area=πR 2, π=3.14159). Δεδομένου ενός τριψήφιου ακεραίου (x) μπορούμε να διαχωρίσουμε τα ψηφία του εφαρμόζοντας αριθμητική ακεραίων (διαιρέσεις και υπόλοιπα) ως εξής: h=x/100 εκατοντάδες, d=(x-h*100)/10 δεκάδες, u=(x-h*100)%10 μονάδες. Ηλίας Κ. Σάββας Εισήγηση #2 24 8
Αριθμητικό Παράδειγμα 263 263 / 100 = 2 263 2 * 100 = 63 63 / 10 = 6 63 % 10 = 3 Γράψτε ένα πρόγραμμα το οποίο να διαχωρίζει και εκτυπώνει τα ψηφία ενός δεδομένου τριψήφιου ακέραιου. Ηλίας Κ. Σάββας Εισήγηση #2 25 Ασκήσεις Γράψτε ένα πρόγραμμα το οποίο εφαρμόζοντας αριθμητική ακεραίων (διαιρέσεις και υπόλοιπα) να μετατρέπει δεδομένα δευτερόλεπτα σε λεπτά και δευτερόλεπτα. Εάν για παράδειγμα εισαχθούν 123 δευτερόλεπτα, το πρόγραμμα να εκτυπώσει: 123 δευτερόλεπτα ισοδυναμούν με 2 λεπτά και 3 δευτερόλεπτα. Τροποποιήστε το προηγούμενο πρόγραμμα ώστε τα δευτερόλεπτα να μετατρέπονται σε ώρες, λεπτά και δευτερόλεπτα: 7384 δευτερόλεπτα ισοδυναμούν με 2 ώρες, 3 λεπτά και 4 δευτερόλεπτα. Ηλίας Κ. Σάββας Εισήγηση #2 26 Άλλο Ένα Πρόγραμμα... Αλλά με Πρόβλημα... Γράψτε ένα πρόγραμμα που να διαιρεί 2 πραγματικούς αριθμούς. Τι είναι Λάθος? Τι γίνεται αν b=0? Το πρόγραμμα θα σπάσει! int main() { float a, b, c; printf( \nεισαγωγή 2 αριθμών: ); scanf( %f%f, &a, &b); c = a / b; printf( \nαποτέλεσμα = %.2f, c); return 0; } Ηλίας Κ. Σάββας Εισήγηση #2 27 9
Σπάζοντας την Σειρά... Γράψτε ένα πρόγραμμα που να διαιρεί 2 πραγματικούς αριθμούς. Οι εντολές έλεγχου μπορούν να βοηθήσουν!!= σημαίνει ΔΙΑΦΟΡΟ (όχι ίδιο) int main() { float a, b, c; printf( \n Εισαγωγή 2 αριθμών : ); scanf( %f%f, &a, &b); } If (b!= 0 ) { c = a / b; printf( \nαποτέλεσμα=%.2f, c); } else printf( \n Διαίρεση με 0 ); return 0; Ηλίας Κ. Σάββας Εισήγηση #2 28 Οι Προτάσεις if και if-else if ( λογική έκφραση - expression) Πρόταση ή σύνολο προτάσεων (block) {..} if (λογική έκφραση - expression) Πρόταση ή σύνολο προτάσεων (block) {..} else Πρόταση ή σύνολο προτάσεων (block) {..} Ηλίας Κ. Σάββας Εισήγηση #2 29 Λογικοί Τελεστές Μικρότερο : Μεγαλύτερο: Μικρότερο ή ίσο: Μεγαλύτερο ή ίσο: Ίσο: Όχι ίσο (διάφορο): < > <= >= ==!= Ηλίας Κ. Σάββας Εισήγηση #2 30 10
Συσχέτιση Λογικών Εκφράσεων ΚΑΙ (σύζευξη) Η (διάζευξη) ΔΕΝ (άρνηση) &&! Ηλίας Κ. Σάββας Εισήγηση #2 31 Παραδείγματα... Εκτύπωση μεγαλύτερου αριθμού: if (a>b) printf( %d, a); else print( %d, b) Ηλίας Κ. Σάββας Εισήγηση #2 32... Παραδείγματα... Σωστή σειρά αριθμών (φθίνουσα): if (a>b && b>c) printf( \nσωστή σειρά... ); else printf( \nόχι σωστή σειρά... ); Ηλίας Κ. Σάββας Εισήγηση #2 33 11
Παραδείγματα Λύνοντας την Εξίσωση ax+b=0 if (a==0 && b==0) printf( \nάπειρες Λύσεις ); else if (a==0 && b!=0) printf( \n Καμία Λύση ); else { x = -b / a; printf( \n Η Λύση είναι, x=%.2f, x); } Ηλίας Κ. Σάββας Εισήγηση #2 34 Σημαντική Τεχνική Δεδομένων τριών αριθμών να βρεθεί και εκτυπωθεί ο μεγαλύτερος (μικρότερος) Δύο μέθοδοι: Ηλίας Κ. Σάββας Εισήγηση #2 35 Σημαντική Τεχνική <A> if (a>b && a>c) max=a; else If (b>c && b>a) max = b; else max = c; <B> max = a; if (b>max) max = b; If (c>max) max = c; <B>:Απλό και καθαρό! <A>: Περίπλοκο? Και αν είχαμε πάνω από 3 αριθμούς? Ηλίας Κ. Σάββας Εισήγηση #2 36 12
Το Header File <math.h> pow(x,y): x υψωμένο στο y x y sqrt(x): τετραγωνική ρίζα του x fabs(x): απόλυτη τιμή sin(x): ημίτονο cos(x): συνημίτονο tan(x): εφαπτομένη. #include <math.h>... x = sqrt(9); x= 9 y=sqrt(a*b+2); y= (a*b+2) a = pow(2,3); a=2 3 b = sin( 7*z); Ηλίας Κ. Σάββας Εισήγηση #2 37 Ασκήσεις... Ένα έτος είναι δίσεκτο όταν ισχύει μία από τις ακόλουθες δύο συνθήκες: 1) εάν διαιρείται ακριβώς με το 4, αλλά όχι με το100, ή 2) διαιρείται ακριβώς με το 400. Γράψτε ένα πρόγραμμα το οποίο να προσδιορίζει εάν ένα δεδομένο έτος είναι ή όχι δίσεκτο. Γράψτε ένα πρόγραμμα το οποίο να επιλύει την εξίσωση δευτέρου βαθμού (ax 2 +bx+c=0). Ηλίας Κ. Σάββας Εισήγηση #2 38... Ασκήσεις Η απόσταση δύο σημείων (x1,y1) και (x2,y2) σε ένα Καρτεσιανό επίπεδο δίνεται από τον τύπο d= (x1-x2) 2 +(y1-y2) 2. Γράψτε ένα πρόγραμμα το οποίο να υπολογίζει και εκτυπώνει την απόσταση δύο σημείων που εισάγονται από τον χρήστη (πληκτρολόγιο). Ηλίας Κ. Σάββας Εισήγηση #2 39 13
Τέλος της #2 Εισήγησης Ερωτήσεις??? Χρησιμοποιήστε το email εάν θέλετε να με ρωτήσετε οτιδήποτε: savvas@teilar.gr Σημειώσεις Μαθήματος (και όχι μόνο): http://e-class.teilar.gr/ Ηλίας Κ. Σάββας Εισήγηση #2 40 14