ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β. Καβακλή Χειμερινό Εξάμηνο 2001 1 Ο τύπος char Επιτρέπει να διαβάζουμε να επεξεργαζόμαστε και να εμφανίζουμε τους χαρακτήρες που μπορούν να αποθηκευτούν στον Η/Υ Ο κοινότερος κώδικας χαρακτήρων είναι ο κώδικας ASCII (ή ISO) που περιέχει 128 χαρακτήρες Ο τακτικός αριθμός (rdinal number) ενός χαρακτήρα παριστάνει την τιμή της δυαδικής ακολουθίας, που χρησιμοποιείται από τον Η/Υ για να παραστήσει τον αριθμό αυτό Σταθερές τύπου char cnst ken = ; thavmastik =! ; apstrfs = ; Μεταβλητές τύπου char var c, ch: char; Εντολές εκχώρησης ch:=ken; c:= J ; 2 1
Συγκρίσεις Δύο τιμές τύπου char μπορούν να συγκριθούν με τη συνθήκη των τελεστών σύγκρισης (=, <>, <=, >=, <, >) Η σειρά των χαρακτήρων δίνεται από τον τακτικό τους αριθμό Παραδείγματα: Α < B 2 < 3 z > a 3 Είσοδος και Έξοδος αντικειμένων τύπου char Οι τιμές τύπου char διαβάζονται με την εντολή read (ή readln). Για παράδειγμα: read (input, ch); διαβάζει τον επόμενο (1) χαρακτήρα που έχει πληκτρολογηθεί και τον εκχωρεί στη μεταβλητή τύπου char read (input, c1, ch, c); Διαβάζει τους επόμενους 3 χαρακτήρες και τις εκχωρεί στις μεταβλητές τύπου char c1, ch, c αντίστοιχα Δεν αγνοούνται κενά και αλλαγές γραμμών Η έξοδος αντικειμένων τύπου Char γίνεται με την εντολή write (writeln) write(utput, thavmastik) write(utput, c, ch); 4 2
Ο τύπος real Ο τύπος real επιτρέπει την επεξεργασία πραγματικών αριθμών (αποτελούνται από ένα ακέραιο κι ένα κλασματικό μέρος) -37.6 0.01-15.5 +41.8 H Επιστημονική παράσταση (scientific ntatin) επιτρέπει την έκφραση πολύ μεγάλων (ή πολύ μικρών) τιμών 5.5Ε+15 σημαίνει 5500000000000000.0-3.8Ε3 σημαίνει -3800.0 1.0Ε-4 σημαίνει 0.0001 1.23Ε-20 σημαίνει 0.0000000000000000000123 Σταθερές τύπου real cnst pi = 3.14159265358 taxhthta_fts = 3.0E5 Μεταβλητές τύπου real var x, y: real; aktina, perifereia, emvadn: real; 5 Παραστάσεις τύπου real Τελεστές + άθροισμα * γινόμενο - διαφορά / πηλίκο Προκαθορισμένες συναντήσεις abs(x) επιστρέφει την απόλυτη τιμή της παράστασης x sqr(x) επιστρέφει το τετράγωνο της παράστασης x sin(x) επιστρέφει το ημίτονο της γωνίας x cs(x) επιστρέφει το συνημίτονο της γωνίας x arctan(x) επιστρέφει το τόξο εφαπτομένης του x exp(x) επιστρέφει το e x ln(x) επιστρέφει τον φυσικό λογάριθμο του x sqrt(x) επιστρέφει την τετραγωνική ρίζα του x rund(x) επιστρέφει τον πλησιέστερο ακέραιο του x trunc(x) επιστρέφει το ακέραιο μέρος του x Συγκρίσεις =, <>, <, <=, >, >= Συμβατότητα εκχώρησης: μια παράσταση τύπου real μπορεί να περιέχει και τελεστέους τύπου integer. Οι τελευταίοι μετατρέπονται αυτόματα σε τελεστέους τύπου real πριν υπολογισθεί η παράσταση Το αντίθετο δεν ισχύει 6 3
Είσοδος και έξοδος αντικειμένων τύπου real Τιμές τύπου real μπορούν να διαβαστούν και να εκχωρηθούν σε μεταβλητές τύπου real με την εντολή read (readln) read(input, x) πληκτρολογούμε 3 ή 3.0 ή 3.0Ε+0 Η έξοδος αντικειμένων τύπου real γίνεται με την εντολή write (writeln) write(utput, x) Εμφανίζει την τιμή του x στην επιστημονική παράσταση (π.χ. 3.0Ε+0) Για να εμφανισθεί η τιμή μιας μεταβλητής τύπου real στην κανονική παράσταση, πρέπει να προσδιορίσουμε το πλάτος του πεδίου εκτύπωσης και το πλάτος του κλασματικού μέρους write(utput, x:10:3) τυπώνει _ 3.000 7 Τακτικοί τύποι Οι απλοί τύποι integer, blean και char είναι τακτικοί τύποι κάθε τιμή ενός τακτικού τύπου (εκτός της 1ης και της τελευταίας) έχει μια και μοναδική προηγούμενη τιμή και μια μοναδική επόμενη τιμή οι προκαθορισμένες συναρτήσεις pred(x) και succ(x) επιστρέφουν την προηγούμενη και επόμενη τιμή του x, αντίστοιχα pred(-8) = -9, succ(-7) = -6, pred( x ) = w, succ( k ) = l Σε κάθε τιμή ενός τακτικού τύπου αντιστοιχεί ένας μοναδικός ακέραιος, που ονομάζεται τακτικός αριθμός ή τάξη ο τακτικός αριθμός μιας τιμής τύπου integer είναι η ίδια η τιμή ο τακτικός αριθμός της τιμής false είναι το 0 και της true το 1 ο τακτικός αριθμός μιας τιμής τύπου char εξαρτάται από τον κώδικα χαρακτήρων που χρησιμοποιεί ο Η/Υ 8 4
Προκαθορισμένες συναρτήσεις τακτικών τύπων Η προκαθορισμένη συνάρτηση rd(x) επιστρέφει τον αντίστοιχο τακτικό της αριθμό rd(0) = 0 rd( 0 ) = 48 rd( A ) = 65 rd( ) = 32 rd(false) = 0 rd(true) = 1 Ειδικά για τον τύπο char η Pascal παρέχει την αντίστροφη συνάρτηση chr(x) chr(97) = a chr(103) = g chr(rd( A ) + N 1), όπου Ν <= 26 δίνει το Ν- οστό γράμμα του λατινικού αλφάβητου chr(128) δεν ορίζεται 9 Παράδειγμα: Κομπιουτεράκι τσέπης prgram Calculatr (input, utput); {Διαβάζει μια γραμμή όπου στην 1η θέση δίνεται το σύμβολο της πράξης (+,-,*,/) και στη συνέχεια 2 πραγματικοί αριθμοί} var x1, x2: real; {ορίσματα της πράξης} praxh: char; {το σύμβολο της πράξης} begin readln(input, praxh, x1, x2); if praxh = + then writeln(x1 + x2) else if praxh = - then writeln(x1 x2) else if praxh = * then writeln(x1*x2) else if praxh = / then if x2 <>0 then writeln(x1/x2) else writeln( Adynat ) else writeln( Laths eisagvgh dedmenvn (telesths x1 x2) ) end. 10 5
Η εντολή πολλαπλών επιλογών case Η εντολή if μας επιτρέπει να διαλέξουμε μεταξύ 2 διαφορετικών ροών ελέγχου την εντολή που ακολουθεί τη λέξη then ή την εντολή που ακολουθεί τη λέξη else Όταν χρειάζεται να επιλέξουμε μεταξύ πολλών ροών ελέγχου είναι προτιμότερο η χρήση της δομής ελέγχου case Συντακτικό της case case έκφραση f label, label, : εντολή-1; label, label, : εντολή-2; else εντολή-ν end; 11 Παράδειγμα-2: prgram Calculatr (input, utput); {Διαβάζει μια γραμμή όπου στην 1η θέση δίνεται το σύμβολο της πράξης (+,-,*,/) και στη συνέχεια 2 πραγματικοί αριθμοί} var x1, x2: real; {ορίσματα της πράξης} praxh: char; {το σύμβολο της πράξης} begin readln(input, praxh, x1, x2); case praxh f + : writeln(x1 + x2); - : writeln(x1 x2); * : writeln(x1*x2); / : if x2 <>0 then writeln(x1/x2) else writeln( Adynat ) else writeln( Laths eisagvgh dedmenvn (telesths x1 x2) ); end {case} end. 12 6
H επαναληπτική εντολή repeat Μερικές φορές όταν είμαστε σίγουροι ότι μια ανακύκλωση πρέπει να εκτελεστεί τουλάχιστον μια φορά τότε είναι προτιμότερο να χρησιμοποιηθεί η εντολή repeat αντί της εντολής while πολύ χρήσιμη για προγράμματα που περιέχουν ερωταποκρίσεις (πχ προγράμματα εκμάθησης) Συντακτικό της εντολής repeat repeat εντολή-1; εντολή-2; until παράσταση Η παράσταση τύπου blean (συνθήκη εξόδου), υπολογίζεται μετά από κάθε επανάληψη (αντίθετα με την εντολή while) όπου η παράσταση υπολογίζεται πριν από κάθε επανάληψη 13 Παράδειγμα: Επαναληπτικό κομπιουτεράκι repeat readln(input, praxh, x1, x2); case praxh f + : writeln(x1 + x2); - : writeln(x1 x2); * : writeln(x1*x2); / : if x2 <>0 then writeln(x1/x2) else writeln( Adynat ) else writeln( Laths eisagvgh dedmenvn (telesths x1 x2) ); end {case} writeln( Ua synexiseis? Dse N gia Nai kai O gia Oxi ); readln( apanthsh ); until (apanthsh = N ) r (apanthsh = n ); 14 7
Η επαναληπτική εντολή fr Πολύ συχνά το πλήθος των ανακυκλώσεων που χρειάζονται σε ένα πρόγραμμα είναι γνωστό εκ των προτέρων για 100 φορές κάνε άφησε 10 κενές γραμμές για κάθε έναν από τους χαρακτήρες για όλες τις μέρες της εβδομάδας Στις περιπτώσεις αυτές μπορούμε να χρησιμοποιήσουμε την εντολή fr fr μεταβλητή ελέγχου := αρχική τιμή t τελική τιμή d begin εντολή-1; εντολή- 2; εντολή-ν end 15 8