ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ Κεφάλαιο 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Γιώργος Γιαγλής
Το σημερινό μάθημα Ταξινόμηση γλωσσών προγραμματισμού Γλώσσες Προγραμματισμού Γλώσσες μηχανής (1η γενιά) Συμβολικές γλώσσες (2η γενιά) Γλώσσες υψηλού επιπέδου (3η γενιά) Γλώσσες πολύ υψηλού επιπέδου (4η γενιά) Μεταφραστές Γλωσσών Προγραμματισμού Aλγόριθμοι Η έννοια του αλγόριθμου Παράσταση αλγόριθμων Παράσταση αλγόριθμων με ψευδοκώδικα Παράσταση αλγόριθμων με διαγράμματα ροής Βασικές δομές διαδικασιακού προγραμματισμού ακολουθία, επιλογή, επανάληψη
Ταξινόμηση γλωσσών ανάλογα με το επίπεδο προγραμματισμού Πολύ χαμηλού επιπέδου ή 1ης γενιάς είναι οι γλώσσες μηχανής Χαμηλού επιπέδου ή 2ης γενιάς είναι οι συμβολικές γλώσσες (assembly) Υψηλού επιπέδου ή 3ης γενιάς είναι οι FORTRAN, COBOL, BASIC, PASCAL, C, C++, JAVA, κλπ Πολύ υψηλού επιπέδου ή 4ης γενιάς είναι οι SQL, PROLOG, κλπ
Γλώσσα Μηχανής (1ης γενιάς) Γλώσσα πολύ χαμηλού επιπέδου, άμεσα εκτελέσιμη που αποτελείται από μία ακολουθία 0 και 1 (δυαδικών ψηφίων) Είναι διαφορετική για κάθε κατηγορία υπολογιστή Είναι δυσνόητη αφού απαιτεί βαθιά γνώση του υλικού του συγκεκριμένου υπολογιστή (low-level language) Χρησιμοποιήθηκε στους πρώτους υπολογιστές, ενώ σήμερα παράγεται αυτόματα από τις γλώσσες προγραμματισμού υψηλού επιπέδου
Οι διευθύνσεις μνήμης κωδικοποιούνται σε τέσσερα δυαδικά ψηφία Παράδειγμα Πρόγραμμα πρόσθεσης δυο αριθμών σε γλώσσα μηχανής (το πρόγραμμα του παραδείγματος του κεφ. 5) Γλώσσα μηχανής Επεξήγηση 0010 0010 0110 0010 0110 0111 0010 1000 1010 1111 1111 0000 Οι εντολές κωδικοποιούνται σε οκτώ δυαδικά ψηφία (π.χ. η LOAD είναι 0010 0010) Οι διευθύνσεις μνήμης κωδικοποιούνται σε τέσσερα δυαδικά ψηφία Η πρώτη εντολή φορτώνει στο συσσωρευτή (LOAD) τα περιεχόμενα της θέσης μνήμης 0110 Η δεύτερη εντολή προσθέτει στο συσσωρευτή (ADD) τα περιεχόμενα της θέσης μνήμης 0111 Η τρίτη εντολή αποθηκεύει τα περιεχόμενα του συσσωρευτή (STORE) στη μνήμη στη θέση 1010 Η τέταρτη εντολή τερματίζει το πρόγραμμα (STOP) και δεν έχει μέρος διεύθυνσης (0000)
Συμβολική Γλώσσα (2ης γενιάς) Γλώσσα χαμηλού επιπέδου που αποτελείται από συντομογραφίες εντολών στην αγγλική γλώσσα (π.χ. ADD, LDA, κλπ) Είναι διαφορετική για κάθε κατηγορία υπολογιστή Είναι λιγότερο δύσκολη στη χρήση αλλά εξακολουθεί να απαιτεί βαθιά γνώση του υλικού του υπολογιστή (medium-level language) Παράγει αυτόματα γλώσσα μηχανής αφού διαθέτει συμβολομεταφραστή (assembler)
Παράδειγμα Πρόγραμμα πρόσθεσης δυο αριθμών σε συμβολική γλώσσα (το πρόγραμμα του παραδείγματος του κεφ. 5) Συμβολική Γλώσσα Επεξήγηση LOAD 0110 ADD 0111 STORE 1010 STOP Η πρώτη εντολή φορτώνει στο συσσωρευτή (LOAD) τα περιεχόμενα της θέσης μνήμης 0110 Η δεύτερη εντολή προσθέτει στο συσσωρευτή (ADD) τα περιεχόμενα της θέσης μνήμης 0111 Η τρίτη εντολή αποθηκεύει τα περιεχόμενα του συσσωρευτή (STORE) στη μνήμη στη θέση 1010 Η τέταρτη εντολή τερματίζει το πρόγραμμα (STOP) και δεν έχει μέρος διεύθυνσης
Γλώσσες Υψηλού επιπέδου (3ης γενιάς) Αποτελούνται από κατανοητές εντολές συνήθως στην αγγλική γλώσσα (π.χ.PRINT, INPUT κλπ) Είναι ίδιες για κάθε υπολογιστή που διαθέτει μεταγλωττιστή ή διερμηνευτή της συγκεκριμένης γλώσσας (FORTRAN, COBOL, BASIC, PASCAL, κλπ) Είναι εύκολες στη χρήση (high-level languages) Παράγουν αυτόματα γλώσσα μηχανής (machine-language) μέσω μετάφρασης από τον κατάλληλο μεταφραστή (μεταγλωττιστή ή διερμηνευτή)
FORTRAN Θεωρείται η πρώτη γλώσσα υψηλού επιπέδου (δεκαετία 1960) Χρησιμοποιήθηκε ευρύτατα για έρευνα και ανάπτυξη επιστημονικών εφαρμογών Είναι αποδοτική για μαθηματικούς υπολογισμούς αλλά υστερεί στη διαχείριση αρχείων Παράγει αυτόματα γλώσσα μηχανής αφού διαθέτει μεταγλωττιστή (compiler) Σήμερα έχει σχεδόν εγκαταλειφθεί, παρόλο που γνώρισε πολλές βελτιώσεις μέχρι και πρόσφατα
COBOL Αναπτύχθηκε τη δεκαετία του 1960 για να καλύψει τις αδυναμίες της FORTRAN στο χειρισμό αρχείων Έγινε η πρώτη γλώσσα προγραμματισμού που χρησιμοποιήθηκε ευρύτατα για ανάπτυξη εμπορικών - λογιστικών - τραπεζικών εφαρμογών Είναι αποδοτική στη διαχείριση αρχείων αλλά υστερεί στους υπολογισμούς Παράγει αυτόματα γλώσσα μηχανής αφού διαθέτει μεταγλωττιστή Χρησιμοποιείται ακόμα και σήμερα σε κάποιες περιπτώσεις παλιότερων εφαρμογών (legacy systems), έχοντας γνωρίσει πολλές βελτιώσεις
ALGOL Αναπτύχθηκε τη δεκαετία του 1960 ως αλγοριθμική γλώσσα γενικής χρήσης Είχε στόχο να ενσωματώσει τις αρετές της FORTRAN και της COBOL σε μία γλώσσα, αλλά απέτυχε πρακτικά (εμπορικά) Καθιέρωσε όμως το δομημένο προγραμματισμό Επηρέασε αρκετές μεταγενέστερες γλώσσες (π.χ. PASCAL) Αποτελεί θεμέλιο λίθο των αλγοριθμικών ή διαδικασιακών (procedural) γλωσσών
PASCAL Αναπτύχθηκε τη δεκαετία του 1970 με βάση την ALGOL Χρησιμοποιήθηκε αρκετά για ανάπτυξη εφαρμογών γενικής χρήσης Είναι πολύ καλή για εκπαίδευση (εισαγωγή στον προγραμματισμό) και θεωρείται ακόμα πρότυπο εύχρηστης αλγοριθμικής γλώσσας Παράγει αυτόματα γλώσσα μηχανής αφού διαθέτει μεταγλωττιστή (compiler) Αποτέλεσε βάση για ανάπτυξη άλλων δομημένων γλωσσών όπως οι ADA, DELPHI, κλπ
BASIC Αποτέλεσε την πρώτη σχετικά διαδεδομένη σε μη προγραμματιστές αλγοριθμική γλώσσα και χρησιμοποιήθηκε αρχικά σε μικροϋπολογιστές (PC) τη δεκαετία του 1980 Χρησιμοποιήθηκε για ανάπτυξη εφαρμογών γενικής χρήσης Είναι ιδανική για αρχάριους και εύκολη στην εκμάθηση Παράγει αυτόματα γλώσσα μηχανής αφού διαθέτει διερμηνευτή (interpreter) Σήμερα χρησιμοποιούνται ευρέως αρκετοί ‘κλώνοι’ της, όπως η Visual Basic
C Η C είναι μία πολύ ισχυρή αλγοριθμική γλώσσα υψηλού επιπέδου που ενσωματώνει όμως και αρετές γλωσσών χαμηλού επιπέδου. Χρησιμοποιείται ευρύτατα για προγραμματισμό συστημάτων και ανάπτυξη επιστημονικών εφαρμογών Το λειτουργικό σύστημα Unix έχει γραφτεί σε γλώσσα C Σήμερα η C συνεχίζει να εξαπλώνεται και ιδιαίτερα η αντικειμενοστραφής εξέλιξή της, η C++, έχει πολλές εφαρμογές Το ίδιο ισχύει και για γλώσσες ανάπτυξης εφαρμογών σε κινητά τηλέφωνα και tablets, όπως η γλώσσα Objective C (για κινητά τηλέφωνα Apple με λειτουργικό iOS) και η γλώσσα C# (για λειτουργικό Windows Phone)
JAVA Είναι αντικειμενοστραφής γλώσσα υψηλού επιπέδου Χρησιμοποιείται ευρύτατα για ανάπτυξη εφαρμογών στο διαδίκτυο (internet) Είναι αποδοτική σε κατανεμημένα περιβάλλοντα Σήμερα εξαπλώνεται με ιδιαίτερα ταχείς ρυθμούς
Γλώσσες Πολύ υψηλού επιπέδου (4ης γενιάς) Γλώσσες Πολύ υψηλού επιπέδου (4ης γενιάς) Απευθύνονται όχι μόνο σε προγραμματιστές αλλά και σε απλούς χρήστες Μία εντολή γλώσσας 4ης γενιάς αντιστοιχεί τυπικά σε πολλές εντολές γλώσσας 3ης γενιάς Δίνουν έμφαση στο τι (αποτέλεσμα) και όχι στο πως (αλγόριθμος), γι᾽ αυτό και θεωρούνται ευκολότερες στην εκμάθηση. Χρησιμοποιούνται για ειδικές εφαρμογές ή ως γλώσσες ερωτήσεων σε βάσεις δεδομένων (π.χ. SQL)
Ταξινόμηση γλωσσών ανάλογα με το τρόπο προγραμματισμού Αλγοριθμικές ή διαδικασιακές (procedural) όπως FORTRAN, COBOL, ALGOL, PASCAL, BASIC κλπ Μη διαδικαστικές (non procedural) ή λογικές όπως η PROLOG Αντικειμενοστραφείς (object – oriented) όπως SMALLTALK, C++, JAVA, κλπ Οπτικές (visual) όπως VISUAL BASIC, VISUAL C++, κλπ Συναρτησιακές (functional) όπως η LISP Ερωταπαντήσεων (query languages) όπως η SQL
Ταξινόμηση γλωσσών ανάλογα με τη χρήση Γενικής χρήσης όπως PASCAL, BASIC κλπ Επιστημονικής κατεύθυνσης (science oriented languages) π.χ. FORTRAN Εμπορικής κατεύθυνσης (business-oriented language) π.χ. COBOL Προγραμματισμού συστημάτων (system programming languages) όπως η C Τεχνητής νοημοσύνης όπως LISP, PROLOG κλπ Ειδικών (εξειδικευμένων) χρήσεων (π.χ. γραφικά, ρομποτική, εκπαίδευση, βάσεις δεδομένων, κλπ)
Μεταφραστές Γλωσσών Προγραμματισμού Οι μεταφραστές (translators) μεταφράζουν ένα πρόγραμμα που έχει γραφτεί σε κάποια γλώσσα προγραμματισμού σε αντίστοιχο πρόγραμμα σε γλώσσα μηχανής Διακρίνονται σε: Μεταγλωττιστές (compiler) Σύνταξη προγράμματος πηγαίο πρόγραμμα Μεταγλώττιση αντικείμενο πρόγραμμα Σύνδεση (φόρτωση) εκτελέσιμο πρόγραμμα Εκτέλεση Διερμηνευτές (interpreter) Διερμήνευση
Βασικές έννοιες Προγραμματισμού Ένα πρόγραμμα είναι ένα σύνολο από οδηγίες που μπορούν να εκτελεστούν σε προγραμματιστικά περιβάλλοντα. Στην περίπτωση του διαδικασιακού προγραμματισμού (procedural programming) οποιοδήποτε πρόγραμμα μπορεί να γραφτεί με συνδυασμό τριών βασικών δομών: της ακολουθίας, της επιλογής και της επανάληψης. Ακολουθία: Κάθε αλγόριθμος είναι μια ακολουθία εντολών, οι οποίες εκτελούνται σειριακά. Επιλογή: Μια εντολή μπορεί να ελέγξει κατά πόσο ισχύει μια συνθήκη και να επιλέξει την εκτέλεση ενός τμήματος προγράμματος αν η συνθήκη είναι αληθής ή ενός άλλου τμήματος προγράμματος αν η συνθήκη είναι ψευδής. Επανάληψη: Η εκτέλεση ενός τμήματος προγράμματος μπορεί να επαναλαμβάνεται για όσο διάστημα ισχύει μια συνθήκη.
Ακολουθία-Επιλογή-Επανάληψη Υλοποίηση ακολουθίας, επιλογής και επανάληψης με ψευδοκώδικα (πάνω) και διάγραμμα ροής (κάτω)
Αλγόριθμοι Αλγόριθμος (algorithm) είναι μια σειρά από πεπερασμένα βήματα που καθορίζουν ένα τρόπο επίλυσης ενός προβλήματος Η αναπαράσταση ενός αλγόριθμου σε γλώσσα κατανοητή από τον υπολογιστή ονομάζεται πρόγραμμα (program) Η αναπαράσταση ενός αλγορίθμου μπορεί να γίνει: Σε αυστηρά δομημένη φυσική γλώσσα (ψευδοκώδικας) Σε αυστηρά ορισμένο διάγραμμα (Διάγραμμα Ροής)
Αλγόριθμοι ... Πρόβλημα Λύση 1 Λύση 2 Λύση ν Αλγόριθμος 1 Αλγόριθμος 2 Αλγόριθμος ν Πρόγραμμα 1.1 Πρόγραμμα 1.2 Πρόγραμμα 1... Πρόγραμμα 2.1 Πρόγραμμα 2.2 Πρόγραμμα ν... Πρόγραμμα v.1 Πρόγραμμα v.2
Παράδειγμα Πρόβλημα: Να ταξινομηθούν σε αύξουσα σειρά τρεις ακέραιοι αριθμοί, έστω αρ1-αρ2-αρ3 Λύση 1: να συγκρίνουμε συνεχώς τους αριθμούς ανά δυο και να τους αντιμεταθέτουμε αν δεν είναι σε αύξουσα σειρά μέχρι να τελειώσουμε. Λύση 2: να βρίσκουμε κάθε φορά το μικρότερο αριθμό και να τον βάζουμε πρώτο στη σειρά των αριθμών που δεν έχουμε ακόμα δει μέχρι να τελειώσουμε.
Παράδειγμα Αλγόριθμος για τη Λύση 1. Σύγκρινε τον αρ1 με τον αρ2 και αν δεν είναι σε αύξουσα σειρά αντιμετάθεσε τους. Έπειτα, σύγκρινε τον αρ2 με τον αρ3 και αν δεν είναι σε αύξουσα σειρά αντιμετάθεσε τους. Τέλος, σύγκρινε τον αρ1 με τον αρ2 και αν δεν είναι σε αύξουσα σειρά αντιμετάθεσε τους. Αλγόριθμος για τη Λύση 2. Βρες το μικρότερο από τους {αρ1, αρ2, αρ3} και βάλε τον στη θέση του αρ1, αλλάζοντας του θέση με αυτόν. Έπειτα, βρες το μικρότερο από τους {αρ2, αρ3} και βάλε τον στη θέση του αρ2, αλλάζοντας του θέση με αυτόν.
Χαρακτηριστικά αλγόριθμων Ένας αλγόριθμος πρέπει να έχει πεπερασμένο αριθμό βημάτων, πρέπει δηλαδή να έχει ορισμένη αρχή και τέλος. Είναι απαραίτητο η εκτέλεση του αλγορίθμου κάποια στιγμή να τερματίζεται. Ένας αλγόριθμος αντιστοιχεί σε μια πιθανή λύση ενός προβλήματος. Η ορθότητα του αλγόριθμου εξαρτάται από το πόσο είναι αυτός σε θέση να βρίσκει τη λύση σε κάθε περίπτωση Η πολυπλοκότητα του κάθε αλγόριθμου ορίζει το βαθμό απλότητας της λύσης που αυτός υλοποιεί.
Παράσταση αλγόριθμων: ψευδοκώδικας Ο ψευδοκώδικας (pseudocode) επιτρέπει την περιγραφή των αλγορίθμων σε φυσική γλώσσα χωρίς την χρήση συντακτικού γλώσσας προγραμματισμού. O ψευδοκώδικας: Δεν μπορεί να εκτελεστεί ή και να μεταγλωττιστεί Δεν απαιτεί γνώση κάποιας γλώσσας προγραμματισμού
Βασική Δομή Προγράμματος Εντολή Σημασία ΑΡΧΗ - ΤΕΛΟΣ Συμβολίζουν την αρχή και το τέλος ενός τμήματος κώδικα. Είναι πάντα σε ζεύγη (κάθε ΤΕΛΟΣ αντιστοιχίζεται στην κοντινότερη του ΑΡΧΗ, η οποία δεν έχει ακόμα αντιστοιχιστεί) ΑΛΓΟΡΙΘΜΟΣ Αποτελεί την επικεφαλίδα ενός προγράμματος και ακολουθείται από το όνομα του προγράμματος αυτού ΔΕΔΟΜΕΝΑ Συμβολίζουν την αρχή του τμήματος ενός προγράμματος στο οποίο ορίζονται τα δεδομένα που χρησιμοποιεί το πρόγραμμα αυτό. Στο τμήμα δεδομένων ορίζονται ονόματα μεταβλητών και οι τύποι τους. μετ1, μετ2, ... : τύπος Ορίζει λίστες από ονόματα μεταβλητών που χωρίζονται μεταξύ τους με κόμματα. Στο τέλος της λίστας και μετά το σύμβολο : ορίζεται ο τύπος των μεταβλητών αυτών. Οι συνηθέστεροι τύποι είναι ΑΚΕΡΑΙΟΣ (INTEGER), ΠΡΑΓΜΑΤΙΚΟΣ (REAL) και ΧΑΡΑΚΤΗΡΑΣ (CHAR). := Εντολή εκχώρησης. Συμβολίζει την απόδοση τιμής σε μια μεταβλητή, π.χ. a:=1 ; Συμβολίζει το τέλος μιας εντολής
Βασική Δομή Προγράμματος Εντολή Σημασία ΔΙΑΒΑΣΕ () Εντολή ανάγνωσης τιμών που θα δώσει ο χρήστης (τα ονόματα των μεταβλητών στις οποίες θα καταχωρηθούν οι τιμές αυτές περιλαμβάνονται μέσα σε παρένθεση, διαχωρισμένα με κόμματα) ΤΥΠΩΣΕ () Εντολή εμφάνισης τιμών στην οθόνη (τα που θα τυπωθούν περιλαμβάνονται μέσα σε παρένθεση, διαχωρισμένα με κόμματα, και ανάμεσα σε “ ” αν πρόκειται για κυριολεκτικά λεκτικά)
Βασική Δομή Προγράμματος Εντολή Σημασία ΕΑΝ συνθήκη ΤΟΤΕ εντολές1 ΑΛΛΙΩΣ εντολές2 ΕΑΝ-ΤΕΛΟΣ Εντολή επιλογής. Αν ισχύει η συνθήκη, τότε εκτελούνται οι εντολές1. Αν δεν ισχύει η συνθήκη, τότε εκτελούνται οι εντολές2 (οι οποίες είναι προαιρετικές). ΟΣΟ συνθήκη εντολές ΟΣΟ-ΤΕΛΟΣ Εντολή επανάληψης. Ελέγχεται η συνθήκη και, αν ισχύει, τότε εκτελούνται οι εντολές. Στη συνέχεια ελέγχεται η συνθήκη και πάλι και, αν ισχύει, τότε εκτελούνται οι εντολές ξανά. Η διαδικασία αυτή επαναλαμβάνεται συνεχώς μέχρι να μην ισχύει πια η συνθήκη, οπότε η εντολή τερματίζεται (αν η συνθήκη δεν ισχύει από την αρχή, οι εντολές δεν εκτελούνται καμία φορά). ΕΠΑΝΕΛΑΒΕ ΜΕΧΡΙ συνθήκη Εντολή επανάληψης. Εκτελούνται οι εντολές και στη συνέχεια ελέγχεται η συνθήκη. Αν δεν ισχύει, τότε οι εντολές εκτελούνται ξανά και στη συνέχεια ελέγχεται η συνθήκη και πάλι. Η διαδικασία αυτή επαναλαμβάνεται συνεχώς μέχρι να ισχύει η συνθήκη, οπότε η εντολή τερματίζεται (οι εντολές εκτελούνται τουλάχιστον καμία φορά, έστω και αν η συνθήκη ισχύει από την αρχή). ΓΙΑ μετρητής:=τιμή1 ΕΩΣ τιμή2 ΓΙΑ-ΤΕΛΟΣ Εντολή επανάληψης. Ο μετρητής παίρνει αρχικά την τιμή1. Ελέγχεται αν η τιμή αυτή είναι μικρότερη ή ίση με την τιμή2 και, αν είναι, εκτελούνται οι εντολές. Στη συνέχεια, ο μετρητής αυξάνεται κατά 1 και ελέγχεται πάλι αν η τιμή του είναι μικρότερη ή ίση με την τιμή2 και, αν είναι, εκτελούνται οι εντολές. Η διαδικασία αυτή επαναλαμβάνεται μέχρι η τιμή του μετρητή να γίνει μεγαλύτερη από την τιμή2, οπότε η εντολή τερματίζεται.
Ψευδοκώδικας για τον αλγόριθμο 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ΑΛΓΟΡΙΘΜΟΣ Taksinomisi; ΔΕΔΟΜΕΝΑ ar1,ar2,ar3,temp : INTEGER; ΑΡΧΗ ΤΥΠΩΣΕ(”Δώσε 3 ακέραιους:“); ΔΙΑΒΑΣΕ(ar1, ar2, ar3); ΕΑΝ ar1>ar2 ΤΟΤΕ temp:=ar2; ar2:=ar1; ar1:=temp; ΕΑΝ-ΤΕΛΟΣ; ΕΑΝ ar2>ar3 ΤΟΤΕ ar2:=ar3; ar3:=temp; ΤΥΠΩΣΕ(”Σε αύξουσα σειρά:”); ΤΥΠΩΣΕ(ar1,ar2, ar3); ΤΕΛΟΣ
Ψευδοκώδικας για τον αλγόριθμο 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ΑΛΓΟΡΙΘΜΟΣ Taksinomisi; ΔΕΔΟΜΕΝΑ ar1,ar2,ar3,temp : INTEGER; ΑΡΧΗ ΤΥΠΩΣΕ(”Δώσε 3 ακέραιους:“); ΔΙΑΒΑΣΕ(ar1, ar2, ar3); ΕΑΝ ar1>ar2 ΤΟΤΕ temp:=ar2; ar2:=ar1; ar1:=temp; ΕΑΝ-ΤΕΛΟΣ; ΕΑΝ ar2>ar3 ΤΟΤΕ ar2:=ar3; ar3:=temp; ΤΥΠΩΣΕ(”Σε αύξουσα σειρά:”); ΤΥΠΩΣΕ(ar1,ar2, ar3); ΤΕΛΟΣ
Ψευδοκώδικας για τον αλγόριθμο 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ΑΛΓΟΡΙΘΜΟΣ Taksinomisi; ΔΕΔΟΜΕΝΑ ar1,ar2,ar3,temp : INTEGER; ΑΡΧΗ ΤΥΠΩΣΕ(”Δώσε 3 ακέραιους:“); ΔΙΑΒΑΣΕ(ar1, ar2, ar3); ΕΑΝ ar1>ar2 ΤΟΤΕ temp:=ar2; ar2:=ar1; ar1:=temp; ΕΑΝ-ΤΕΛΟΣ; ΕΑΝ ar2>ar3 ΤΟΤΕ ar2:=ar3; ar3:=temp; ΤΥΠΩΣΕ(”Σε αύξουσα σειρά:”); ΤΥΠΩΣΕ(ar1,ar2, ar3); ΤΕΛΟΣ
Ψευδοκώδικας για τον αλγόριθμο 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ΑΛΓΟΡΙΘΜΟΣ Taksinomisi; ΔΕΔΟΜΕΝΑ ar1,ar2,ar3,temp : INTEGER; ΑΡΧΗ ΤΥΠΩΣΕ(”Δώσε 3 ακέραιους:“); ΔΙΑΒΑΣΕ(ar1, ar2, ar3); ΕΑΝ ar1>ar2 ΤΟΤΕ temp:=ar2; ar2:=ar1; ar1:=temp; ΕΑΝ-ΤΕΛΟΣ; ΕΑΝ ar2>ar3 ΤΟΤΕ ar2:=ar3; ar3:=temp; ΤΥΠΩΣΕ(”Σε αύξουσα σειρά:”); ΤΥΠΩΣΕ(ar1,ar2, ar3); ΤΕΛΟΣ
Ψευδοκώδικας για τον αλγόριθμο 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ΑΛΓΟΡΙΘΜΟΣ Taksinomisi; ΔΕΔΟΜΕΝΑ ar1,ar2,ar3,temp : INTEGER; ΑΡΧΗ ΤΥΠΩΣΕ(”Δώσε 3 ακέραιους:“); ΔΙΑΒΑΣΕ(ar1, ar2, ar3); ΕΑΝ ar1>ar2 ΤΟΤΕ temp:=ar2; ar2:=ar1; ar1:=temp; ΕΑΝ-ΤΕΛΟΣ; ΕΑΝ ar2>ar3 ΤΟΤΕ ar2:=ar3; ar3:=temp; ΤΥΠΩΣΕ(”Σε αύξουσα σειρά:”); ΤΥΠΩΣΕ(ar1,ar2, ar3); ΤΕΛΟΣ
Ψευδοκώδικας για τον αλγόριθμο 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ΑΛΓΟΡΙΘΜΟΣ Taksinomisi; ΔΕΔΟΜΕΝΑ ar1,ar2,ar3,temp : INTEGER; ΑΡΧΗ ΤΥΠΩΣΕ(”Δώσε 3 ακέραιους:“); ΔΙΑΒΑΣΕ(ar1, ar2, ar3); ΕΑΝ ar1>ar2 ΤΟΤΕ temp:=ar2; ar2:=ar1; ar1:=temp; ΕΑΝ-ΤΕΛΟΣ; ΕΑΝ ar2>ar3 ΤΟΤΕ ar2:=ar3; ar3:=temp; ΤΥΠΩΣΕ(”Σε αύξουσα σειρά:”); ΤΥΠΩΣΕ(ar1,ar2, ar3); ΤΕΛΟΣ
Ψευδοκώδικας για τον αλγόριθμο 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ΑΛΓΟΡΙΘΜΟΣ Taksinomisi; ΔΕΔΟΜΕΝΑ ar1,ar2,ar3,temp : INTEGER; ΑΡΧΗ ΤΥΠΩΣΕ(”Δώσε 3 ακέραιους:“); ΔΙΑΒΑΣΕ(ar1, ar2, ar3); ΕΑΝ ar1>ar2 ΤΟΤΕ temp:=ar2; ar2:=ar1; ar1:=temp; ΕΑΝ-ΤΕΛΟΣ; ΕΑΝ ar2>ar3 ΤΟΤΕ ar2:=ar3; ar3:=temp; ΤΥΠΩΣΕ(”Σε αύξουσα σειρά:”); ΤΥΠΩΣΕ(ar1,ar2, ar3); ΤΕΛΟΣ
Ψευδοκώδικας για τον αλγόριθμο 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ΑΛΓΟΡΙΘΜΟΣ Taksinomisi2; ΔΕΔΟΜΕΝΑ ar1,ar2,ar3,min,temp : INTEGER; ΑΡΧΗ ΤΥΠΩΣΕ(”Δώσε 3 ακέραιους: “); ΔΙΑΒΑΣΕ(ar1, ar2, ar3); ΕΑΝ ar1<ar2 ΤΟΤΕ EAN ar1<ar3 TOTE min:=ar1 ΑΛΛΙΩΣ min:=ar3; ΕΑΝ-ΤΕΛΟΣ ΕΑΝ ar2<ar3 TOTE min:=ar2 ΕΑΝ-ΤΕΛΟΣ; EAN min=ar2 TOTE temp:=ar2; ar2:=ar1; ar1:=temp; ΑΛΛΙΩΣ ΕΑΝ min=ar3 ΤΟΤΕ temp:=ar3; ar3:=ar1; ΤΥΠΩΣΕ(”Σε αύξουσα σειρά:”); ΤΥΠΩΣΕ(ar1,ar2, ar3); ΤΕΛΟΣ
Παράσταση αλγόριθμων: Διαγράμματα Ροής Το διάγραμμα ροής επιτρέπει την περιγραφή των αλγόριθμων σχηματικά. Βασικοί συμβολισμοί διαγραμμάτων ροής
Παράδειγμα Υλοποίηση του αλγόριθμου για την ταξινόμηση τριών ακεραίων σε διάγραμμα ροής
Παράσταση αλγόριθμων: PASCAL program Taksinomisi; var ar1, ar2, ar3, temp : integer; begin write(”Δώσε τρεις ακέραιους: “); readln(ar1, ar2, ar3); if ar1>ar2 then temp:=ar2; ar2:=ar1; ar1:=temp; end; if ar2>ar3 then ar2:=ar3; ar3:=temp; write(”Σε αύξουσα σειρά:”); writeln(ar1,ar2, ar3); end.
Παράσταση αλγόριθμων: C void main (void) { int ar1, ar2, ar3, temp; printf(“Δώσε τρεις ακέραιους: “); scanf(“%d%d%d”, &ar1, &ar2, &ar3); if (ar1>ar2) { temp=ar2; ar2=ar1; ar1=temp; } if (ar2>ar3) ar2=ar3; ar3=temp; printf(”Σε αύξουσα σειρά:”); printf(“%d %d %d\n”,ar1,ar2,ar3);
Ασκηση: Έστω ότι μας ζητείται να υπολογίσουμε το άθροισμα όλων των άρτιων (ζυγών) αριθμών από το 1 έως το 1.000.000, δηλαδή το άθροισμα 2+4+6+...+999.998+1.000.000.
Μια λύση ΑΛΓΟΡΙΘΜΟΣ Athroisma_Zygwn; ΔΕΔΟΜΕΝΑ athroisma, orisma: INTEGER; ΑΡΧΗ athroisma := 0; orisma := 1; ΟΣΟ orisma <= 1000000 ΕΑΝ orisma mod 2 = 0 athroisma := athroisma + orisma; ΤΕΛΟΣ-ΕΑΝ; orisma := orisma + 1; ΟΣΟ-ΤΕΛΟΣ; ΤΥΠΩΣΕ(“Το άθροισμα είναι: “, athroisma); ΤΕΛΟΣ
Άλλη λύση ΑΛΓΟΡΙΘΜΟΣ Athroisma_Zygwn2; ΔΕΔΟΜΕΝΑ athroisma, orisma: INTEGER; ΑΡΧΗ athroisma := 0; orisma := 2; ΟΣΟ orisma <= 1000000 athroisma := athroisma + orisma; orisma := orisma + 2; ΟΣΟ-ΤΕΛΟΣ; ΤΥΠΩΣΕ(“Το άθροισμα είναι: “, athroisma); ΤΕΛΟΣ
Και άλλη λύση... ΑΛΓΟΡΙΘΜΟΣ Athroisma_Zygwn3; ΔΕΔΟΜΕΝΑ athroisma,orisma: INTEGER; ΑΡΧΗ athroisma := 0; ΓΙΑ orisma:=2 ΕΩΣ 1000000 ΜΕ ΒΗΜΑ 2 ΕΠΑΝΕΛΑΒΕ athroisma := athroisma + orisma; ΓΙΑ-ΤΕΛΟΣ; ΤΥΠΩΣΕ(“Το άθροισμα είναι: “, athroisma); ΤΕΛΟΣ