Εισαγωγή στον Προγραμματισμό των Ηλεκτρονικών Υπολογιστών

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Εισαγωγή στον Προγραμματισμό των Ηλεκτρονικών Υπολογιστών"

Transcript

1 Μ Α Θ Η Μ Α Τ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ Εισαγωγή στον Προγραμματισμό των Ηλεκτρονικών Υπολογιστών Αλγόριθμοι Γλώσσες PASCAL και C ΚΩΝΣΤΑΝΤΙΝΟΥ ΛΙΒΑΔΑ Φυσικού M.Sc. Computer Science Univ. of Wisconsin Εκδόσεις IF-THEN-ELSE

2 Κ. ΛΙΒΑΔΑ M.Sc. Computer Science Univ.of Wisconsin-Madison Εισαγωγή στον Προγραμματισμό των Ηλεκτρονικών Υπολογιστών Αλγόριθμοι Γλώσσες Pascal και C Εκδοση A ΑΘΗΝΑ 2006

3 Κάθε γνήσιο αντίτυπο έχει την υπογραφή του συγγραφέα Κ. Λιβαδάς Κονδυλάκη Αθήνα τηλ Απαγορεύεται η ολική ή μερική ανατύπωση του παρόντος με οποιοδήποτε τρόπο χωρίς την έγγραφη άδεια του συγγραφέα. 2

4 ΠΡΟΛΟΓΟΣ Με τόσα πολλά σχετικά βιβλία που κυκλοφορούν ίσως κάποιος εύλογα να αναρωτηθεί : «Γιατί χρειάζεται ένα ακόμη βιβλίο Εισαγωγής στον Προγραμματισμό των Ηλεκτρονικών Υπολογιστών». Το ερώτημα με απασχόλησε και μένα αρκετά, αλλά αποφάσισα να προχωρήσω στην έκδοση του βιβλίου που κρατάτε, επειδή δεν μπόρεσα να βρώ κανένα, κατά την ταπεινή μου γνώμη, αρκετά καλό, σύμφωνα με τα κριτήρια που θεώρησα σημαντικά. Σήμερα ο προγραμματισμός διδάσκεται σε πολύ μεγάλη έκταση. Διδάσκεται στα Λύκεια με τη μορφή Ψευδοκώδικα (Μάθημα Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον), στα Τ.Ε.Ε., στα Ι.Ε.Κ. στα Τ.Ε.Ι. και στα Α.Ε.Ι. σε διάφορες γλώσσες. Παρ όλη την προσπάθεια που γίνεται, δυστυχώς, αν κρίνουμε από τη δυσκολία που συναντούν οι σπουδαστές, τα ποσοστά αποτυχίας στα σχετικά μαθήματα, αλλά και τις ελάχιστες προγραμματιστικές ικανότητες που αποκτούν όσοι περνούν με επιτυχία τα μαθήματα, θα πρέπει να συμπεράνουμε ότι ή το αντικείμενο είναι πολύ δύσκολο ή δεν διδάσκεται σωστά. Οι προγραμματιστές στην Ελλάδα σήμερα, είναι στο μεγαλύτερο βαθμό, όπως πάντα, αυτοδίδακτοι! Το γιατί συμβαίνει αυτό δεν είναι αντικείμενο που πρέπει να συζητηθεί εδώ. Αλλά, επειδή δεν προβλέπω να αλλάζει η κατάσταση στο ορατό μέλλον και επειδή δεν διαπίστωσα να υπάρχουν καλά βιβλία στο αντικείμενο αυτό, αποφάσισα να προχωρήσω στο γράψιμο του βιβλίου αυτού. Το βιβλίο αυτό προορίζεται για άτομα που έρχονται για πρώτη φορά σε επαφή με τον Προγραμματισμό Η/Υ. Επίσης προορίζεται για σπουδαστές νέους που δεν διαθέτουν σημαντικές εμπειρίες από τη δουλειά τους, πράγμα κρίσιμο για τον τρόπο που διδάσκεται ο προγραμματισμός. 3

5 Η διδακτική προσέγγιση στηρίζεται στις πολύ βασικές τεχνικές πάνω στις οποίες στηρίζεται όλος ο προγραμματισμός. Θεωρώ ότι, οι τεχνικές αυτές αποτελούν το υπόβαθρο για οποιαδήποτε άλλη γνώση προγραμματισμού με πιο εξελιγμένες γλώσσες και τεχνικές. Ο καθηγητής που διδάσκει με βάση αυτό το βιβλίο, αλλά και αυτός που το διαβάζει, πρέπει να δώσουν την έμφαση στην κατανόηση των τεχνικών! Το σημείο που οι περισσότεροι μαθητές δυσκολεύονται, είναι, όχι το γράψιμο του προγράμματος, αλλά η σωστή ανάλυση και επίλυση του προβλήματος! Γι αυτό, μετά από τις τεχνικές, η προσοχή πρέπει να δοθεί στην εφαρμογή τους για την ανάλυση και επίλυση προβλημάτων προγραμματισμού. Η επιλογή των γλωσσών, Ψευδοκώδικας, Pascal και C, έγινε για να εξυπηρετήσει τις ανάγκες των μαθημάτων όπου διδάσκεται η Εισαγωγή στον Προγραμματισμό, σε όλες σχεδόν τις Σχολές. Σκόπιμα όμως, δεν έχω επικεντρωθεί σε καμία συγκεκριμένη γλώσσα και σκόπιμα δεν αναφέρομαι στις επί μέρους δυνατότητες των γλωσσών. Ο λόγος είναι ότι το βιβλίο αυτό, δεν είναι βιβλίο για να μάθει κάποιος μια συγκεκριμένη γλώσσα αλλά για να μάθει πώς να προγραμματίζει γενικά! Το βιβλίο περιλαμβάνει και αρκετές λυμένες και άλυτες ασκήσεις. Οι ασκήσεις δεν είναι τυχαίες! Οι ασκήσεις έχουν επιλεγεί γιατί η κάθε μια δείχνει την εφαρμογή κάποιων από τις τεχνικές που αναφέρθηκαν προηγούμενα. Επίσης η επιλογή των ασκήσεων έγινε λαμβάνοντας υπόψη ότι οι περισσότεροι σπουδαστές, όλων των επιπέδων, δεν διαθέτουν μεγάλη μαθηματική ή εργασιακή εμπειρία. Με την ευκαιρία θα ήθελα να ευχαριστήσω όσους βοήθησαν στη συγγραφή και στην έκδοση αυτού του βιβλίου και να επαναλάβω ότι κάθε παρατήρηση, θετική ή αρνητική θα είναι ευπρόσδεκτη και θα συμπεριληφθεί σε επόμενη έκδοση. Κ. Λιβαδάς Αθήνα, Σεπτέμβριος

6 ΠΕΡΙΕΧΟΜΕΝΑ ΠΡΟΛΟΓΟΣ 1. Τα γιατί του Προγραμματισμού Που θα χρειαστεί Πως μαθαίνεται Γιατί προγραμματίζουμε Τι κάνει ο προγραμματιστής Τι κάνει ένα πρόγραμμα Από τι αποτελείται ένα πρόγραμμα (Δομή Δεδομένων, Αλγόριθμος) Γλώσσες Προγραμματισμού Πως γράφεται ένα πρόγραμμα 2. Εισαγωγή στον προγραμματισμό Η/Υ 2. 1 Πως χειρίζεται ο υπολογιστής τα δεδομένα Τι είναι δεδομένα και τι πληροφορίες Τύποι (Types) - Πως διαλέγουμε τύπους Αναπαράσταση και αποθήκευση δεδομένων Σταθερές - Μεταβλητές Τι κάνει στην ουσία ένα πρόγραμμα 2.2 Πως σχεδιάζουμε το πρόγραμμα που θα αντιμετωπίσει το πρόβλημα Τεχνικές Προγραμματισμού 2.3 Από τι αποτελείται ένα πρόγραμμα Oμάδα εντολών (block) Αρχές Δομής και Τεκμηρίωσης προγράμματος Σχόλια 2.4 Οι βασικές λειτουργίες της Εισόδου και της Εξόδου Το πρώτο πρόγραμμα - Καλημέρα Κόσμε (Hello World) Πως δίνει ο χρήστης δεδομένα στο πρόγραμμα Πως δίνει ο χρήστης στο πρόγραμμα εντολές (μενού χωρίς επανάληψη) Πως γράφουμε αποτελέσματα στο χρήστη 2.5 Οι βασικές λειτουργίες της Επεξεργασίας Aνάθεση ή εκχώρηση τιμής σε μεταβλητή Πως δύο μεταβλητές ανταλλάσσουν τιμές Πράξεις (Operations) και Τελεστές (Operators) 5

7 Αριθμητικές Πράξεις και Εκφράσεις Το πρώτο χρήσιμο πρόγραμμα- Μετατροπή Ευρώ σε Δραχμές Εφαρμογή Τύπου- Μετατροπή θερμοκρασίας από βαθμούς Fahrenheit σε Κελσίου Ακέραια Διαίρεση και Υπόλοιπο Διαίρεσης Πως βρίσκουμε αν ένας αριθμός είναι Μονός ή Ζυγός Στρογγυλοποίηση ακέραιου Μετατροπή ακέραιου σε δυαδικό Λογικές Πράξεις και Εκφράσεις Συγκρίσεις - Λογικές Εκφράσεις 2.6 Εντολές Απόφασης ΕΑΝ - if Ο μεγαλύτερος από δύο αριθμούς Ο μεγαλύτερος από τρείς αριθμούς Μετατροπή Ευρώ σε Δραχμές ή Δραχμών σε Ευρώ Υπολογιστής χειρός (Calculator) ΕΠΕΛΕΞΕ ΑΠΟ CASE - switch Πως φτιάχνουμε ένα μενού επιλογών O calculator με εντολή Πολλαπλής Επιλογής 2.7 Εντολές Επανάληψης Ανακυκλώσεις (Loops) ΓΙΑ ΕΩΣ ΕΠΑΝΑΛΑΒΕ FOR DO - for ΕΝΟΣΩ ΕΠΑΝΑΛΑΒΕ WHILE.. DO - while ΕΠΑΝΑΛΑΒΕ ΜΕΧΡΙ - REPEAT UNTIL - do while Μέτρηση πόσες φορές συνέβη κάτι σε Ν επαναλήψεις Υπολογισμός Αθροίσματος Ν αριθμών Υπολογισμός Γινομένου Ν αριθμών Μέσος Ορος Ν Αριθμών Μέγιστος και Ελάχιστος Ν Αριθμών Μέσος όρος άγνωστου πλήθους αριθμών Εύρεση του Μέγιστου Κοινού Διαιρέτη (ΜΚΔ) δύο αριθμών Επανάληψη μέχρι ο χρήστης δώσει τη σωστή τιμή 2.8 Πίνακες Πίνακες μιας διάστασης Μέσος Ορος Ν στοιχείων σε Πίνακα Πόσο συχνά εμφανίστηκε ο κάθε αριθμός Ταξινόμηση αριθμών σε πίνακα Αναζήτηση τιμής σε πίνακα Γραμμική (Σειριακή) Αναζήτηση Δυαδική Αναζήτηση Μετατροπή Αριθμού από το Δεκαδικό Σύστημα στο Δυαδικό Πίνακες δύο διαστάσεων 6

8 2.9 Υποπρογράμματα (Διαδικασίες & Συναρτήσεις) Σε τι χρησιμεύουν - Υποπρογράμματα και πραγματική ζωή Χρήση των υποπρογραμμάτων Δήλωση Συναρτήσεων και Διαδικασιών Κλήση Συναρτήσεων και Διαδικασιών Πως καταλαβαίνουν σε ποιά δεδομένα να ενεργήσουν Πως επιστρέφουν τα αποτελέσματά τους Αναδρομή ΠΑΡΑΡΤΗΜΑ 1 Διαγράμματα Ροής Προγράμματος ΠΑΡΑΡΤΗΜΑ 2 Λύνοντας Προβλήματα 7

9 1. Τα γιατί του Προγραμματισμού Που θα χρειαστεί ο προγραμματισμός στη συνέχεια των σπουδών αλλά και στην πραγματική ζωή Ο προγραμματισμός Η/Υ σήμερα διδάσκεται από τα Λύκεια και σε όλες τις Σχολές με τεχνική κατεύθυνση, όλων των επιπέδων, άρα είναι απαραίτητος και για να μπορέσει να ολοκληρώσει κάποιος τις σπουδές του στην Πληροφορική ή αλλού. Αν διαβάζετε αυτό το βιβλίο, τότε μάλλον έχετε ήδη «μπλέξει» με το αντικείμενο και πρέπει να το ξεπεράσετε για να πάτε και παρακάτω Αλλά, ο προγραμματισμός σήμερα αποτελεί και τη κύρια απασχόληση πολλών, αν όχι των περισσότερων, επαγγελματιών του κλάδου της πληροφορικής. Έτσι η καλή γνώση προγραμματισμού αποτελεί πολύ σημαντική επαγγελματική επένδυση επειδή εξασφαλίζει σε κάποιον και εργασία και σχετική μονιμότητα, πράγματα ιδιαίτερα σημαντικά στο δύσκολο σημερινό κόσμο. Ο σκοπός σας λοιπόν πρέπει να είναι, τελειώνοντας αυτό το βιβλίο, να μπορείτε να προγραμματίστε, αν είναι δυνατόν, σαν επαγγελματίες προγραμματιστές. Πως μαθαίνεται ο προγραμματισμός Ο προγραμματισμός Η/Υ δεν είναι κάτι που διαβάζεται μόνο, ο προγραμματισμός είναι τέχνη, τη τέχνη αυτή, τη μαθαίνεις μόνον επάνω στον υπολογιστή, μετά από πολλά και ευχάριστα, αξέχαστα, ξενύχτια Αυτό δεν σημαίνει ότι δεν χρειάζεται διάβασμα. Ο προγραμματισμός χρειάζεται πολύ διάβασμα για να μάθεις τις έννοιες, τα εργαλεία και τις τεχνικές, αλλά η ουσία του προγραμματισμού είναι το να μάθεις να εφαρμόζεις όλα όσα έμαθες και να λύνεις δικά σου προβλήματα. Ένα βιβλίο μπορεί να σου δείξει πως λύνονται διάφορα γνωστά προβλήματα για να μάθεις τις τεχνικές, αλλά μαθαίνεις πραγματικά προγραμματισμό, μόνον όταν μπορείς να λύσεις 8

10 νέα, άγνωστα προβλήματα. Το τελευταίο χρειάζεται πολλές μέρες, και νύχτες, εξάσκηση, μόνος σου, παρέα με τον υπολογιστή. Γι αυτό θα ήταν καλό να αρχίσεις από τώρα Δεν είναι όμως όλα τα νέα κακά. Ο προγραμματισμός είναι για πολλούς ανθρώπους ιδιαίτερα ευχάριστος. Η χαρά του να πειθαρχείς τη σκέψη σου, να λύνεις το πρόβλημα στις τρείς το πρωί και να δημιουργείς πράγματα με τη σκέψη σου, προκαλεί ρίγη πνευματικής συγκίνησης στους προγραμματιστές! Τόσο πολύ, που σε μερικούς γίνεται πάθος, τόσο που να είναι ικανοί να εγκαταλείψουν άλλες πλευρές της ζωής για να προγραμματίζουν Δεν λέω να κάνετε το ίδιο, αλλά, αξίζει να νοιώσετε και εσείς την ανεπανάληπτη χαρά του να είσαι προγραμματιστής! Γιατί προγραμματίζουμε Γιατί προγραμματίζουμε λοιπόν; Η απάντηση, λογικά, πρέπει να είναι "Για να λύνουμε πραγματικά προβλήματα". Δυστυχώς αυτό είναι σπάνιο. Πολλοί προγραμματιστές, ακόμα και επαγγελματίες, προγραμματίζουν για να προγραμματίζουν, δηλαδή, για να βρίσκονται σε δουλειά, ή επειδή τη βρίσκουν. Αν ανήκετε στους ερασιτέχνες, σε αυτούς δηλαδή που αγοράζουν ένα PC για να περνάνε την ώρα τους, μπορείτε να κάνετε ό,τι θέλετε, αν όμως είστε επαγγελματίες, πρέπει να θυμάστε ότι ο χρόνος σας κοστίζει, σε σας, ή σε κάποιους άλλους. Ετσι σκοπός του κάθε επαγγελματία, πρέπει να είναι να μάθει σωστό και αποτελεσματικό προγραμματισμό. Αν λοιπόν, έχουμε κάποιο σκοπό κατά νου, πώς πρέπει να προγραμματίζουμε; O προγραμματιστής, για να κάνει σωστή δουλειά, πρέπει να αναζητήσει τα προβλήματα του πελάτη (χρήστη) και να βρει που μπορεί να βοηθήσει ο υπολογιστής. Ποιά προβλήματα λοιπόν μπορεί να είναι αυτά; Ας εξετάσουμε το «τι σημαίνει πρόβλημα». Πρόβλημα ονομάζεται μια κατάσταση η οποία χρήζει αντιμετώπισης, απαιτεί λύση και η λύση της δεν είναι γνωστή, ούτε προφανής. Επιλύσιμα είναι εκείνα τα προβλήματα που η λύση τους είναι ήδη γνωστή και έχει διατυπωθεί. Επίσης προβλήματα 9

11 που η λύση τους δεν έχει διατυπωθεί αλλά η συνάφειά τους με άλλα λυμένα προβλήματα, μας επιτρέπει να θεωρούμε τη λύση τους βέβαιη. Ανοικτά είναι εκείνα τα προβλήματα που η λύση τους δεν είναι ακόμη γνωστή, αλλά παράλληλα δεν έχει αποδειχθεί ότι δεν επιδέχονται λύση. Αλυτα είναι εκείνα τα προβλήματα για τα οποία έχουμε φθάσει στην παραδοχή ότι δεν επιδέχονται λύση. Στη φάση που βρισκόμαστε, είναι προφανές ότι μας ενδιαφέρουν μόνον τα Επιλύσιμα προβλήματα, και μάλιστα, μόνον τα προβλήματα για τα οποία ο υπολογιστής μπορεί κάτι να κάνει. Θυμηθείτε ότι ο υπολογιστής διαθέτει : 1. Μεγάλη Ταχύτητα Υπολογισμών 2. Μεγάλη Ικανότητα Αποθήκευσης στοιχείων 3. Δυνατότητα επιλογής και παρουσίασης πληροφοριών Αυτά είναι τα προβλήματα που πρέπει να αναζητήσει κανείς για να προγραμματίσει. Αυτά ακριβώς είναι και τα προβλήματα που μπορούν να εκφραστούν σε μια γλώσσα προγραμματισμού. Ας βάλουμε λοιπόν τα πράγματα σε μια σειρά : Κατ'αρχήν έχουμε το χρήστη που έχει ένα πρόβλημα. Το πρόβλημα του χρήστη που μπορεί να μας ενδιαφέρει είναι : α. χάνει χρόνο κάνοντας υπολογισμούς β. χάνει χρόνο ψάχνοντας πληροφορίες γ. χάνει χρόνο στο να οργανώνει και να επεξεργάζεται τις πληροφορίες που έχει, ώστε να γίνουν χρήσιμες και κατανοητές Τι κάνει ο προγραμματιστής O αναλυτής (στο Ελλάντα, συνήθως το ίδιο πρόσωπο με τον προγραμματιστή), εκφράζει τα προβλήματα του χρήστη σε 10

12 διαδικασίες που μπορούν να προγραμματιστούν. Αυτές λέγονται απαιτήσεις. Ο προγραμματιστής γράφει το πρόγραμμα που καλύπτει τις παραπάνω απαιτήσεις, το διορθώνει, το ελέγχει και εξασφαλίζει ότι το πρόγραμμα δουλεύει πάντοτε σωστά. Aυτό το τελευταίο όλοι το πιστεύουμε για τα προγράμματά μας, αλλά σπάνια συμβαίνει. Μια και το βιβλίο αυτό απευθύ-νεται σε μελλοντικούς επαγγελματίες, θα σας πω, ότι είναι αδιανόητο να γράφετε προγράμματα και να μην τα ελέγχετε διεξοδικά μέχρι να βεβαιωθείτε ότι δουλεύουν σωστά, πάντα... Tι κάνει ένα πρόγραμμα Ο χρήστης ζητάει πληροφορίες, δηλαδή στοιχεία με νόημα, στοιχεία που του λένε κάτι για τον κόσμο. Οι πληροφορίες αυτές, βγαίνουν από κάποια στοιχεία, που είναι ήδη γνωστά και, κατά το δυνατόν,ελεγμένα και σωστά, αυτά τα στοιχεία τα λέμε δεδομένα. Δηλαδή σε κάθε Πληροφοριακό Σύστημα (κομπιουτερικό ή μη), έχουμε : Μη χρήσιμες Πληροφορίες Επεξεργασία Χρήσιμες Πληροφορίες Η Επεξεργασία είναι η διαδικασία που επιλέγει και συνθέτει τις Μη Χρήσιμες Πληροφορίες (Δεδομένα) σε Χρήσιμες (Αποτελέσματα). Η Επεξεργασία αυτή μπορεί να γίνεται με πολλούς τρόπους και ένας από αυτούς, είναι και με τη βοήθεια των υπολογιστών. Στην παραπάνω διαδικασία ο υπολογιστής παίρνει τη θέση της επεξεργα-σίας. Αυτό βέβαια που κάνει την επεξεργασία, είναι το υλικό του υπολογιστή καθοδηγούμενο από το πρόγραμμα που εκτελείται. Το πρόγραμμα λοιπόν εκφράζει την επεξεργασία των δεδομένων ώστε να παραχθούν αποτελέσματα. Το πρόγραμμα εισάγει κάποιες ανεπαρκείς, αλλά σωστές, πληροφορίες. Αυτές λέγονται Είσοδος ή Δεδομένα. Αν η ορθότητα των δεδομένων δεν είναι εξασφαλισμένη (όπως για παράδειγμα, όταν τα πληκτρολογούν 11

13 αφηρημένοι χρήστες), είναι καθήκον του προγράμματος να τα ελέγξει, όσο του επιτρέπουν οι δυνατότητές του, βέβαια. Στη συνέχεια το πρόγραμμα επεξεργάζεται τα δεδομένα, δηλαδή βρίσκει αυτά που το αφορούν, εκτελεί υπολογισμούς και επιλέγει τα σημαντικά. Οσα από τα στοιχεία που προέκυψαν είναι σημαντικά, δηλαδή έχουν νόημα για το χρήστη, το πρόγραμμα τα παρουσιάζει στο χρήστη, με όποιον τρόπο γίνονται πιο κατανοητά και εύχρηστα. Ετσι σχηματικά έχουμε την παρακάτω διαδικασία: Δεδομένα Πρόγραμμα Αποτελέσματα (Είσοδος) (Επεξεργασία) (Έξοδος) Πρόγραμμα λοιπόν, είναι ένα σύνολο εντολών που δίνουμε στον υπολογιστή με σκοπό να λύσουμε κάποιο πρόβλημα. Οι γλώσσες προγραμματισμού περιέχουν τρόπους για να μπορούμε να περιγράψουμε (να εκφράσουμε) τα "δεδομένα", τα αποτελέσματα και τις εντολές (πράξεις). Η επεξεργασία των δεδομένων γίνεται με πράξεις, επιλογές, εντολές ελέγχου, αποθηκεύσεις, ανευρέσεις κ.λπ. Η γλώσσα προγραμματισμού περιλαμβά-νει τρόπους (δυνατότητες) για να μπορεί να περιγραφεί κάθε δυνατή επεξεργασία. Από την άλλη μεριά η γλώσσα προγραμματισμού περιέχει και τρόπους για να μπορούμε να πούμε στη μηχανή, τι χειρισμούς να κάνει. Απο τι αποτελείται ένα πρόγραμμα Κάθε πρόγραμμα αποτελείται από δύο βασικά συστατικά : α) Δομές Δεδομένων, και β) Αλγορίθμους Τι είναι Δομή Δεδομένων Δομή Δεδομένων είναι ένας τρόπος οργάνωσης των δεδομένων ώστε να βοηθά στην λύση κάποιου προβλήματος. Τι είναι Αλγόριθμος Αλγόριθμος είναι μια αυστηρά καθορισμένη σειρά βημάτων (εργασιών) που οδηγούν στην λύση κάποιου προβλήματος. Ένας Αλγόριθμος πρέπει να καλύπτει τις παρακάτω προϋποθέσεις : 12

14 1. Πρέπει να κάνει πεπερασμένο αριθμό βημάτων, δηλαδή πρέπει οπωσδήποτε κάποτε να τερματίζει. 2. Πρέπει να εξασφαλίζει ότι ή θα βρεί λύση, ή να βεβαιώσει ότι δεν υπάρχει λύση. Τους Αλγορίθμους μπορούμε να τους εκφράσουμε με λόγια, οπότε έχουμε ένα Σχέδιο Δομής (Structure Plan), με Διάγραμμα Ροής (Flow Chart) ή με Ψευδοκώδικα (Pseudocode), μια γλώσσα δηλαδή, που μοιάζει κάπως με μια γενικευμένη γλώσσα προγραμματισμού, αλλά είναι αρκετά πιο ελεύθε-ρη στην έκφραση. Οπως και να έχει το θέμα, έναν Αλγόριθμο, δεν μπορεί να τον καταλάβει άμεσα ο υπολογιστής, επειδή η ανθρώπινη γλώσσα περιέχει μεγάλη ασάφεια και τα νοήματά της εξαρτώνται πολύ από τα συμφραζόμενα (context), πράγματα που δεν μπορεί να αντιμετωπίσει ο υπολογιστής. Έτσι τελικά χρησιμοποιούνται οι γλώσσες προγραμματισμού με τις οποίες μπορεί ο προγραμματιστής, μετά από αρκετή εκπαίδευση, να εκφράσει τον αλγόριθμο της λύσης ενός προβλήματος με την ακρίβεια που απαιτεί ο υπολογιστής. Γλώσσες Προγραμματισμού Γλώσσα Προγραμματισμού (Programming Language) είναι ένα σύνολο κανόνων που επιτρέπουν να γραφούν προγράμματα για Η/Υ. Μια Γλώσσα Προγραμματισμού έχει αυστηρά καθορισμένη Σύνταξη και Ορθογραφία. Αφού πρώτα έχουμε καταλάβει καλά τη γραμματική και τις δυνατότητες της γλώσσας, τότε μπορούμε να προχωρήσουμε στο να γράψουμε προγράμματα που λύνουν προβλήματα. Ανάλογα με τη χρήση για την οποία σχεδιάστηκε, κάθε γλώσσα είναι δυνατότερη στον Α ή στον Β τομέα. Ετσι ο Ψευδικώδικας είναι μια γλώσσα που βολεύει για να περιγράφουμε τρόπους επεξεργασίας (αλγορίθμους) αλλά δεν μπορεί να εκτελεστεί πραγματικά σε υπολογιστή. Η Pascal βολεύει για να διδαχθεί εύκολα ο προγραμματισμός και να γραφούν, ως ένα βαθμό, προγράμματα που τρέχουν. Η C όμως, 13

15 καλύπτει όλες τις παραπάνω ανάγκες, αλλά είναι ταυτόχρονα και μια πραγματική γλώσσα που σήμερα χρησιμοποιείται. Πως γράφεται ένα πρόγραμμα Τα προγράμματα, όπως είδαμε, γράφονται σε κάποια γλώσσα προγραμματισμού. Οταν λέμε γράφονται, εννοούμε ότι πληκτρολογούνται από τον προγραμματιστή και εισάγονται σε ένα αρχείο με τη βοήθεια ενός προγράμματος που λέγεται Editor. Το πρόγραμμα που γράφει ο προγραμματιστής, γραμμένο στη γλώσσα προγραμματισμού, λέγεται Πηγαίο πρόγραμμα (ή Source Program) και το αρχείο που το αποθηκεύει αρχείο Source (Source File). Σε αυτήν την κατάσταση το πρόγραμμα είναι γραμμένο με λατινικούς χαρακτήρες, μπορεί να το διαβάσει ο άνθρωπος, αλλά είναι εντελώς ακατανόητο για τον υπολογιστή. Ο υπολογιστής καταλαβαίνει μόνον 0 και 1. Πώς λοιπόν μετατρέπεται το source πρόγραμμα σε 0 και 1, που να μπορεί να τα καταλαβαίνει ο υπολογιστής; Αυτό γίνεται με μια διαδικασία που λέγεται μετάφραση ή μεταγλώττιση (compilation) και γίνεται από ένα άλλο πρόγραμμα που λέγεται μεταγλωττιστής (compiler). Ο προγραμματιστής καλεί τον compiler και του δίνει το source. Ο compiler διαβάζει το πρόγραμμα από το source αρχείο και το ελέγχει. Αν βρει λάθη, το απορρίπτει και δεν προχωράει αν πρώτα δεν το διορθώσουμε. Αν το βρει συντακτικά σωστό, τότε προχωράει και το μεταφράζει σε πρόγραμμα object. Ο compiler μπορεί να βρει μόνον τα συντακτικά λάθη του προγράμματος, δηλαδή να ελέγξει ότι το πρόγραμμα συμφωνεί απόλυτα με τις προδιαγραφές της γλώσσας προγραμματισμού. Το πρόγραμμα όμως, αν και συντακτικά σωστό, μπορεί να περιέχει λογικά λάθη, δηλαδή να μην μπορεί να κάνει την δουλειά που πρέπει, ή να μην την κάνει σωστά. Τα λάθη αυτά, που είναι και τα δυσκολότερα, πρέπει να τα βρει ο προγραμματιστής. Χάρη σε αυτά τα λάθη υπάρχουμε σαν επάγγελμα, και μόνον, αν ποτέ εφευρεθούν εργαλεία που θα αναπτύσσουν αυτόματα, σωστά προγράμματα, τότε μπορεί και να εκλείψουμε σαν επάγγελμα. 14

16 Source Compiler Object Η Διαδικασία μετάφρασης προγράμματος To object πρόγραμμα δεν είναι ακόμα έτοιμο για εκτέλεση, για να «τρέξει», όπως λέμε. Πρέπει πρώτα να συνδεθεί με τα άλλα αρχεία object του ίδιου προγράμματος ή της γλώσσας ή του λειτουργικού συστήματος. Συγκεκρι-μένα, τα object αρχεία που περιέχουν τις βασικές λειτουργίες (ρουτίνες) της γλώσσας ή του λειτουργικού συστήματος, λέγονται βιβλιοθήκες (libraries). H σύνδεση όλων των object σε ένα εκτελέσιμο (executable) πρόγραμμα, γίνεται από ένα άλλο πρόγραμμα που λέγεται linker. Συνήθως η διαδικασία compilation - linking γίνεται αυτόματα και δεν βλέπουμε τα βήματα (π.χ. με την εντολή cc στο UNIX ή gcc στο Linux), σε μερικά όμως συστήματα τα βήματα γίνονται ξεχωριστά (Turbo-Pascal, Turbo-C). Object Object Library Linker Εκτελέσιμο (.exe) Η Διαδικασία σύνθεσης εκτελέσιμου προγράμματος Οταν το πρόγραμμα είναι έτοιμο για εκτέλεση (εκτελέσιμο ή executable), το εκτελούμε, (το «τρέχουμε» ή το κάνουμε Run, όπως λέμε). Συνήθως δεν είναι σωστό και δεν κάνει τη δουλειά που θέλουμε. Τότε το διορθώνουμε, βρίσκουμε δηλαδή, τα λογικά λάθη και αλλάζουμε το πρόγραμμα με τον Editor ώστε να κάνει αυτό ακριβώς που θέλουμε. Επαναλαμβάνουμε αυτήν τη διαδικασία μέχρι το πρόγραμμα να ικανοποιεί πλήρως τις απαιτήσεις μας. Η διαδικασία αυτή λέγεται Εκσφαλμάτωση (Debugging) και μπορεί να 15

17 υποβοηθηθεί κάπως από ειδικά προγράμματα που λέγονται Debuggers. Τί σημαίνει λοιπόν, το πρόγραμμα να ικανοποιήσει τις απαιτήσεις μας; Σημαίνει να λύνει ικανοποιητικά τα προβλήματα του χρήστη. Για να γίνει αυτό, πρέπει να έχει καθοριστεί επακριβώς, το τι θέλει ο χρήστης, το πρόγραμμα να ικανοποιεί τις απαιτήσεις που τέθηκαν και να είναι ελεγμένο ότι δουλεύει πάντοτε σωστά. Πώς μπορούμε να εξασφαλίσουμε ότι το πρόγραμμα δουλεύει σωστά; Μόνον με τη διαδικασία Testing (Τεσταρίσματος), δηλαδή δοκιμάζοντας το πρόγραμμα για όλες τις πιθανές περιπτώσεις, μέχρι να βεβαιωθούμε (ή απλά να το πιστέψουμε) ότι δουλεύει πάντοτε σωστά. Μετά τις δοκιμές, το πρόγραμμα δίνεται στους χρήστες και αρχίζει η χρήση του και η μακριά διαδικασία της "Συντήρησης" (Maintenance), δηλαδή της διόρθωσης προβλημάτων και της προσαρμογής σε νέες απαιτήσεις. 16

18 Κοιμόμουν και ονειρευόμουν οτι η ζωή είναι χαρά. Ξύπνησα και είδα οτι η ζωή είναι χρέος. Πάλεψα και είδα οτι το χρέος είναι η χαρά! Ραμπιτρανάθ Ταγκόρ 2. Εισαγωγή στον Προγραμματισμό Η/Υ Στο παρακάτω κεφάλαιο,όπου δίνονται προγράμματα, δίνονται σε τρείς γλώσσες, σε ψευδοκώδικα, σε Pascal και σε C. Σε μερικές περιπτώσεις έχουν συμπεριληφθεί και μερικά Διαγράμματα Ροής (Flow Charts). Ο σκοπός τους είναι για να σας βοηθήσουν να κατανοήσετε καλύτερα την εσωτερική λειτουργία ορισμένων εντολών και αλγορίθμων. 2.1 Πως χειρίζεται ο υπολογιστής τα δεδομένα Ο όρος «δεδομένα» στην επιστήμη των υπολογιστών είναι στενά συνδεδεμένος με τα προγράμματα ηλεκτρονικών υπολογιστών. Όπως είναι γνωστό, ένα πρόγραμμα αποτελείται κατά βάση από μια ακολουθία εντολών, διατυπωμένων σε μια γλώσσα προγραμματισμού, για διαδοχική εκτέλεση από τον Η/Υ. Κατά την εκτέλεση ενός προγράμματος γίνεται επεξεργασία κάποιων αρχικών (ακατέργαστων) πληροφοριών σχετικών με κάποιο πρόβλημα, που ονομάζονται δεδομένα, και παράγονται τελικά πληροφορίες πιο χρήσιμες,που αποτελούν τη λύση για το συγκεκριμένο πρόβλημα και ονομάζονται αποτελέσματα. Κατά την εκτέλεση ενός προγράμματος παράγονται επίσης και κάποιες ενδιάμεσες πληροφορίες, που ονομάζονται ενδιάμεσα αποτελέσματα και χρειάζεται να αποθηκευθούν προσωρινά ώστε να χρησιμοποιηθούν για την παραγωγή των (τελικών) αποτελεσμάτων. Όλες αυτές οι «μορφές» πληροφορίας έχει επικρατήσει να αποδίδονται με τον όρο δεδομένα (data). Τι είναι δεδομένα και τι πληροφορίες Ο χρήστης ενός Η/Υ ζητάει πληροφορίες, δηλαδή στοιχεία με νόημα, στοιχεία που να του λένε κάτι για τον κόσμο. Οι πληροφορίες αυτές, βγαίνουν από κάποια στοιχεία, που είναι γνωστά και κατά το δυνατό ελεγμένα και σωστά. Αν τα στοιχεία αυτά κωδικοποιηθούν με κάποιον τρόπο έτσι ωστε 17

19 να μπορούν να γίνουν κατανοητά από ανθρώπους ή μηχανές, τα λέμε δεδομένα. Ετσι: Δεδομένα (Data) είναι μια αναπαράσταση στοιχείων (γνώσεων) σε κάποιο σύστημα (κώδικα) έτσι ωστε να μπορούν να γίνουν κατανοητά, να μεταδοθούν ή να επεξεργασθούν από ανθρώπους ή μηχανές. Πληροφορίες (Information) είναι γνώσεις (για αντικείμενα, γεγονότα, έννοιες, ιδέες, διαδικασίες κ.λπ.) που αποκτούν συγκεκριμένο νόημα μέσα σε κάποιο εννοιολογικό πλαίσιο ή περιβάλλον (context). Για παράδειγμα : Γνώση : Αντιλαμβάνομαι οτι κάνει ζέστη. Κωδικοποίηση : Μετράω τη θερμοκρασία.bρίσκω οτι είναι 39 βαθμοί Κελσίου. Δεδομένο : ΑΘΗΝΑ 39 C. Mπορεί να μεταδοθεί, να γίνει κατανοητό ή να το επεξεργασθεί υπολογιστής. Πληροφορία : Ενας άνθρωπος σε άλλη πόλη, διαβάζει το ΑΘΗΝΑ 39 C. Μπορεί να ερμηνεύσει το δεδομένο επειδή γνωρίζει τον ίδιο κώδικα και να καταλάβει οτι στην Αθήνα κάνει ζέστη. Τα δεδομένα αναπαρίστανται στα προγράμματα σαν Τιμές (values). Τα δεδομένα που μπορεί να χειριστεί ο υπολογιστής ανήκουν σε λίγους συγκεκριμένους Τύπους δεδομένων (data types): Τύπος Τιμές Ακέραιοι : 1, 0, -1, (Integer) Πραγματικοί : 1.2, -3.4, , , (Real) Χαρακτήρες : a, Z, $, *, (κενό), (Character) 1 (ο χαρακτήρας ένα) Ακολουθίες Χαρακτήρων : MHTSOS, ΑΘΗΝΑ (Strings) Λογικοί : TRUE (Αληθές), FALSE (Ψευδές) (Boolean) 18

20 Τύποι (Types) Οι βασικοί τύποι δεδομένων είναι οι παρακάτω : Ψευδοκώδικας - Pascal C Τύπος Μέγεθος Μέγεθος μικροί ακέραιοι short 2 bytes ακέραιοι Integer 4 bytes int 2 bytes (ή 4) μεγάλοι ακέραιοι long 4 bytes πραγματικοί Real 4 bytes float 4 bytes πραγματικοί double 8 bytes διπλής ακρίβειας χαρακτήρες Char 1 byte char 1 byte (7 ή 8 bits) απαριθμούμενοι enum 2 bytes λογικοί Boolean int Πως διαλέγουμε τύπους Για να διαλέξουμε τύπο για κάποιο δεδομένο, πρέπει να λάβουμε υπόψη τη φύση του δεδομένου που θα αποθηκεύσουμε (για παράδειγμα, χαρακτήρες, ακέραιοι αριθμοί, πραγματικοί αριθμοί) και το εύρος των τιμών που μπορεί να πάρει. Στον παρακάτω πίνακα μπορούμε να δούμε ενδεικτικές τιμές για το εύρος των τιμών και το χώρο που πιάνουν στη μνήμη, από μια συνηθισμένη υλοποίηση της γλώσσας C. char -128 ως ως (7 bits) 1 (8 bits) int ως ως long ως enum 0 ως μόνο Λατινικά και Ελληνικά float e Ακρίβεια 7 ψηφίων double e Ακρίβεια 15 ψηφίων 19

21 Παραδείγματα Οι Δραχμές είναι Ακέραιοι αλλά το μέγεθος της μεταβλητής πρέπει να επιλεγεί έτσι ώστε να μπορεί να χωρέσει όλα τα δυνατά ποσά. Τα Ευρώ είναι Πραγματικοί. Το μέγεθος των περισσότερων πραγματικών επαρκεί για τα συνηθισμένα ποσά. Ο Ταχυδρομικός Κωδικός, αν και περιλαμβάνει μόνο αριθμούς, θα πρέπει να αναπαρασταθεί σε κάποιο πρόγραμμα σαν ακολουθία χαρακτήρων (string) επειδή περιέχει και το κενό (π.χ ). Τα τηλέφωνα είναι ακολουθίες χαρακτήρων, όχι αριθμοί. Το ύψος είναι πραγματικός. Μια μεταβλητή που μετράει πόσες φορές έγινε κάτι πρέπει να είναι ακέραια. Οι Μέσοι Οροι πρέπει να είναι πραγματικοί. Τα ονόματα είναι ακολουθίες χαρακτήρων. Οι ημερομηνίες μπορούν να γίνουν ένα string (π.χ ) ή τρείς ακέραιοι ( π.χ. 13, 5, 1995 ). Αναπαράσταση και αποθήκευση δεδομένων Σε όλες τις σύγχρονες γλώσσες προγραμματισμού, τα προγράμματα απoτελούνται από δηλώσεις δεδομένων και δηλώσεις πράξεων πάνω σε αυτά τα δεδομένα. Αρα για να γράψουμε πρόγραμμα πρέπει πρώτα να δηλώσουμε τα δεδομένα του προβλήματος. Τα δεδομένα παριστάνονται με τρεις μορφές. Σαν Σταθερές (Constants), σαν Τύποι (Types) και σαν Μεταβλητές (Variables). Αν σε ένα πρόγραμμα μια ποσότητα δεν αλλάζει τιμή, τότε την παριστάνουμε σαν Σταθερά, ενώ αν αλλάζει τιμές, σαν Μεταβλητή. Σταθερές (Constants) 20

22 Δήλωση σταθερών Ψευδοκώδικας Pascal C ΣΤΑΘΕΡΕΣ Pi= ; Maxint=32767; Zero=0; Error=-1; Euro=340.75; Const Pi= ; Maxint=32767; Zero=0; Error=-1; Euro=340.75; Const double pi = ; ή #define PI #define MAXINT #define ZERO 0 #define ERROR -1 #define EURO #define TRUE 1 #define FALSE 0 #define NUL \0 Μεταβλητές (Variables) Δήλωση μεταβλητών Οι μεταβλητές αντιπροσωπεύουν θέσεις στη μνήμη του υπολογιστή που αποθηκεύουν τιμές. Έτσι δηλώνουμε μεταβλητές για όλα τα δεδομένα και τα αποτελέσματα του προβλήματος, καθώς και για ενδιάμεσες ή βοηθητικές τιμές. Ψευδοκώδικας - Pascal ΔΕΔΟΜΕΝΑ I,J,K : Integer; int i,j,k; L : Integer; long l; B : Real; float b; DF : Real; double df; X : Char; char x; S : Array[1..20] of Char; -- string NAME : Array[1..30] of Char; char s[20]; -- string char name[30]; OK : Boolean; int ok; C Όπως είπαμε, τα προγράμματα κάνουν δηλώσεις δεδομένων (μεταβλητές) και πράξεις επάνω σε αυτά τα δεδομένα. Για παράδειγμα, στην Pascal δηλώνουμε : var embadon, platos, mhkos : Real; -- δήλωση μεταβλητών embadon := platos * mhkos; -- πράξεις με τις μεταβλητές 21

23 Τι κάνει στην ουσία ένα πρόγραμμα Αυτό που κάνει τελικά ένα πρόγραμμα είναι : Διαβάζει δεδομένα (δηλαδή τιμές) από τον «έξω κόσμο». Συνήθως τις τιμές τις πληκτρολογεί ο χρήστης του προγράμματος ή τις επιλέγει με το ποντίκι. Καταχωρεί αυτά τα δεδομένα σε μεταβλητές. Κάνει κάποια επεξεργασία επάνω στις μεταβλητές. Σαν αποτέλεσμα της επεξεργασίας, κάποιες μεταβλητές αλλάζουν τιμή και περιέχουν τα ζητούμενα αποτελέσματα. Γράφει τα αποτελέσματα (δηλαδή τιμές) στον «έξω κόσμο». Συνήθως τα εμφανίζει στην οθόνη του υπολογιστή ή σε κάποια εκτύπωση. Από εκεί τα διαβάζει ο χρήστης. 22

24 Λυμένες Ασκήσεις 1. Δηλώστε μεταβλητές για τα στοιχεία που κρατάει μια Σχολή για έναν σπουδαστή : Αριθμό Μητρώου (1 ως 10000), Επώνυμο, Ονομα, Ειδικότητα (Κωδικός 100 ως 999), Εξάμηνο (Α ως Δ), Μέσο Ορο Βαθμολογίας, Πόσα μαθήματα έχει περάσει, Πόσα Μαθήματα χρωστάει, Ημερομηνία Γέννησης, Δίδακτρα που έχει πληρώσει, Ενεργός ή Όχι. Ψευδοκώδικας - Pascal ΔΕΔΟΜΕΝΑ (ή Var) AM, Eidikothta : Integer; MO_Bathm, Didaktra : Real; Examhno : Char; Onoma, Epwnymo : Array[1..30] of Char; Energos : Boolean; Mera, Mhnas, Etos : Integer; C int am, eidikothta; float mo_bathm, didaktra; char examhno; char onoma[30], epwnymo[30]; int energos; int mera, mhnas, etos; Ασκήσεις για λύση 1. Δηλώστε μεταβλητές για όλα τα στοιχεία της ταυτότητάς σας.πώς θα αναπαστήσετε τις ημερομηνίες; 2. Δηλώστε μεταβλητές για τα στοιχεία Αποστολέα και Παραλήπτη ενός γράμματος. 3. Ποιους τύπους θα χρησιμοποιούσατε για Ευρώ και Δραχμές.Πως θα χειριστείτε το πρόβλημα του ότι τα ευρώ πρέπει να έχουν δύο μόνον δεκαδικά ψηφία (λεπτά); 23

25 Δυό τρείς εβδομάδες προγραμματισμός, θα σας γλυτώσουν από δυό-τρεις ώρες σχεδιασμό! Ανώνυμου 2.2. Πως σχεδιάζουμε το πρόγραμμα που θα αντιμετωπίσει το πρόβλημα Στο σημείο αυτό μπαίνουμε στην ουσία του προγραμματισμού. Η παρακάτω μεθοδολογία θα σας βοηθήσει στο να μάθετε να σχεδιάζετε τα προγράμματα που λύνουν τα προβλήματα. Η μέθοδος αυτή είναι ένας πολύ καλός τρόπος για να μπεί ο προγραμματισμός σε μια συστηματική σειρά βημάτων. Γι αυτό, για όσο θα μαθαίνετε τουλάχιστον, θα πρέπει να ακολουθείτε πάντοτε αυτή τη σειρά. Τα κυριότερα βήματα για το σχεδιασμό του προγράμματος είναι τα εξής : I. Αναγνωρίζουμε τα δεδομένα του προβλήματος (εισόδους), αναγνωρίζουμε τον τύπο τους και δηλώνουμε μεταβλητές για αυτά. II. Διαβάζουμε τα δεδομένα και τα αποθηκεύουμε στις μεταβλητές. III. Αναγνωρίζουμε ποια θα είναι τα αποτελέσματα (έξοδοι), αναγνωρίζουμε τον τύπο τους και δηλώνουμε μεταβλητές για αυτά. IV. Μετά πρέπει να σχεδιάσουμε την επεξεργασία που από τα δεδομένα θα παράγει τα αποτελέσματα. Για να σχεδιάσουμε την επεξεργασία που θα εκτελεί το πρόγραμμα πρέπει να σκεφτούμε τα εξής : 1. Ποιές επιμέρους επεξεργασίες θα εκτελέσει το πρόγραμμα; Αναλύουμε το όλο πρόγραμμα σε στοιχειώδεις επεξεργασίες. 2. Για κάθε μια επιμέρους επεξεργασία πρέπει να σκεφτούμε : 24

26 Κάνει τα πράγματα αυστηρά με τη σειρά ή μπορεί και να μη τα κάνει με τη σειρά. Κάνει ένα πράγμα κάθε φορά ή περισσότερα (αν περισσότερα, θα χρειαστεί να πάρει απόφαση) Το κάθε πράγμα το κάνει μια φορά ή πολλές (αν πολλές θα χρειαστεί να κάνει επανάληψη) Αν κάνει επανάληψη, ο αριθμός των επαναλήψεων είναι γνωστός από την αρχή ή μπορεί να γίνουν οσεσδήποτε επαναλήψεις. Σε ποιο μοντέλο προβλήματος ταιριάζει; Οι περισσότερες επεξεργασίες ακολουθούν κάποιο γνωστό μοντέλο. Στη συνέχεια του βιβλίου θα παρουσιαστούν τα πιο συνηθισμένα μοντέλα προβλημάτων και οι λύσεις τους. Αν αναγνωρίσουμε σωστά το μοντέλο του προβλήματος θα έχουμε και μια αρκετά καλή προσέγγιση στη λύση. Ποιες βοηθητικές μεταβλητές θα χρειαστούν για να αποθηκευτούν τα ενδιάμεσα αποτελέσματα; Τι τύπου είναι; Τα αρχικά δεδομένα θα χρησιμοποιηθούν μια φορά ή πολλές; Αν μια οι απλές μεταβλητές συνήθως αρκούν, αν πολλές πιθανότατα χρειάζονται πίνακες. Αν χρειάζονται πίνακες, ποιες είναι οι διαστάσεις τους; V. Γράφουμε τα αποτελέσματα Τεχνικές προγραμματισμού Στο επόμενο μέρος του βιβλίου θα παρουσιάσουμε αρκετά γνωστά μοντέλα προβλημάτων με τις λύσεις τους σε Ψευδοκώδικα, Pascal και C. Είναι φυσικό ότι για να καταλάβετε τι κάνουν τα προγράμματα που αντιμετωπίζουν τα παρακάτω μοντέλα προβλημάτων θα πρέπει να έχετε ήδη καταλάβει τις λειτουργίες των στοιχείων της γλώσσας (σταθερές, μεταβλητές, εντολές κλπ.) Μερικά γνωστά μοντέλα προβλημάτων Απόφαση Πολλαπλή Απόφαση 25

27 Μέτρηση Αθροιση Γινόμενο Μέγιστο Ελάχιστο Γνωστός αριθμός επαναλήψεων Αγνωστος αριθμός επαναλήψεων Τα παραπάνω με χρήση πίνακα 1 διάστασης Τα παραπάνω με χρήση πίνακα 2 διαστάσεων Αναζήτηση Ταξινόμηση Τα μοντέλα αυτά δεν αντιμετωπίζουν βέβαια το σύνολο των προγραμματιστικών προβλημάτων, αν ήταν έτσι θα είχαμε προ πολλού εκλείψει σαν επάγγελμα, αντιμετωπίζουν όμως το 90% των προβλημάτων που συναντάμε σε ένα εισαγωγικό μάθημα προγραμματισμού και αποτελούν βέβαια και σημαντικό μέρος της καθημερινής δουλειάς ενός προγραμματιστή. Στο βιβλίο αυτό,τα προγράμματα που είναι βασικές τεχνικές προγραμματισμού θα σημαδεύονται με τον χαρακτηρισμό ΤΕΧΝΙΚΗ 2.3 Από τι αποτελείται ένα πρόγραμμα Ένα πρόγραμμα αποτελείται από Δηλώσεις δεδομένων και Εντολές. Ψευδοκώδικας Pascal C ΔΕΔΟΜΕΝΑ A, B, C : INTEGER; var A, B, C : INTEGER; int a,b,c; ΑΡΧΗ (έναρξη) (οδηγίες-εντολές) ΤΕΛΟΣ (ολοκλήρωση) BEGIN (οδηγίες-εντολές) END. main() { (οδηγίες-εντολές) } 26

28 Oμάδα εντολών (block) Όταν κάποιες εντολές εκτελούν μαζί μια συγκεκριμένη λειτουργία τότε τις κάνουμε ομάδα, περικλείοντάς τις με τις δηλώσεις αρχής και τέλους. Κάθε εντολή τελειώνει με ένα χαρακτήρα που ονομάζεται διαχωριστής εντολών ( ; ). Ψευδοκώδικας Pascal C Αρχή ομάδας οδηγιών ΑΡΧΗ BEGIN { Τέλος ομάδας οδηγιών ΤΕΛΟΣ END } Διαχωριστής εντολών ; ; ; Αρχές Δομής και Τεκμηρίωσης προγράμματος Σχόλια Η γλώσσα στην οποία γράφεται ένα πρόγραμμα απαιτεί, λιγότερο ή περισσότερο, οι εντολές να γραφούν με κάποια σειρά. Η σειρά αυτή δεν είναι πάντοτε υποχρεωτική ή απόλυτη, αλλά είναι πάντα καλό, τουλάχιστον σε γενικές γραμμές, να την ακολουθούμε για να είναι το πρόγραμμά μας οργανωμένο και κατανοητό. Στα προγράμματα που γράφουμε πρέπει να βάζουμε πάντοτε σχόλια για να θυμόμαστε τι ακριβώς κάνουν οι εντολές αλλά και για να μπορεί κάποιος άλλος να καταλάβει τι κάνει το πρόγραμμά μας. Στα παρακάτω παραδείγματα δείχνουμε, μεταξύ άλλων και που πρέπει να μπούν τα σχόλια και τι περίπου να αναφέρουν. Ψευδοκώδικας Επικεφαλίδα του Προγράμματος { program Το πρόγραμμα αυτό κάνει επίδειξη της γενικής δομής προγράμματος σε Ψευδοκώδικα } ΑΛΓΟΡΙΘΜΟΣ program Δεδομένα (Σταθερές Μεταβλητές) (Γενικά Σχόλια) 27

29 ΣΤΑΘΕΡΕΣ MaxInt = 32767; ΔΕΔΟΜΕΝΑ I : INTEGER; Υποπρογράμματα (Διαδικασίες Συναρτήσεις) { περιγραφή της συνάρτησης } ΣΥΝΑΡΤΗΣΗ F1 : INTEGER; ΑΡΧΗ... (εντολές) ΤΕΛΟΣ-ΣΥΝΑΡΤΗΣΗΣ Κύριο Πρόγραμμα { περιγραφή του κύριου προγράμματος } ΑΡΧΗ (κύριο πρόγραμμα)... (εντολές)... END { Κύριο Πρόγραμμα } Pascal Επικεφαλίδα του Προγράμματος (* program1 (Γενικά Σχόλια) Το πρόγραμμα αυτό κάνει επίδειξη της γενικής δομής προγράμματος σε Ψευδοκώδικα *) Program program1(input,output); Δεδομένα (Σταθερές Μεταβλητές) Const MaxInt = 32767; C /* program (Γενικά Σχόλια) Το πρόγραμμα αυτό κάνει επίδειξη της γενικής δομής προγράμματος σε γλώσσα C */ /* include files */ #include <stdio.h> (εισαγ. αρχεία) /* constants */ (σταθερές) #define MAXINT Var I : INTEGER; Υποπρογράμματα (Διαδικασίες Συναρτήσεις) /* variables */ (μεταβλητές) int i; /* τι παριστά η μεταβλητή */ (* functions procedures *) /* functions */ (* περιγραφή της συνάρτησης *) Function F1 : INTEGER; Begin... (εντολές) End; (* F1 *) Κύριο Πρόγραμμα (* περιγραφή του κύριου /* main */ 28 /* περιγραφή της συνάρτησης */ int f1() {... (εντολές) } /* f1 */

30 προγράμματος *) Main (κύριο πρόγραμμα)... (εντολές)... End. (* Κύριο Πρόγραμμα *) /* περιγραφή του main */ main() { (κύριο πρόγραμμα)... (εντολές)... } 29

31 Να θυμάστε το νόμο του G.I.G.O. (Garbage In Garbage Out) δηλαδή όταν μπαίνουν σκουπίδια (λάθος δεδομένα), βγαίνουν και σκουπίδια (λάθος αποτελέσματα). 2.4 Οι βασικές λειτουργίες της Εισόδου και της Εξόδου (Input Output) Όταν λέμε Είσοδος εννοούμε μεταφορά δεδομένων από κάποια μονάδα Εισόδου (π.χ. πληκτρολόγιο, ποντίκι) προς τη μνήμη του υπολογιστή όπου κατοικεί το πρόγραμμα. Το πρόγραμμα αποθηκεύει τις τιμές στη μνήμη με τη βοήθεια των μεταβλητών. Αρα κατά την είσοδο «διαβάζονται», όπως λέμε, τα δεδομένα από κάποια μονάδα εισόδου και αποθηκεύονται σε μεταβλητές του προγράμματος. Όταν λέμε Εξοδος εννοούμε μεταφορά δεδομένων από τη μνήμη (το πρόγραμμα) προς κάποια μονάδα εξόδου (π.χ. οθόνη, εκτυπωτή). Αρα κατά την έξοδο «γράφονται», όπως λέμε, τα αποτελέσματα, που είναι απoθηκευμένα σε μεταβλητές του προγράμματος, σε κάποια μονάδα εξόδου Ας δούμε λoιπόν με ποιούς τρόπους (δηλαδή με ποιες εντολές) δίνουμε τιμές σε μεταβλητές που έχουμε ορίσει σε ένα πρόγραμμα και με ποιο τρόπο μπορούμε να εμφανίζουμε στην οθόνη το αποτέλεσμα (την τιμή που έχουν μετά από κάποια πιθανή επεξεργασία). Από το πρόγραμμά μας, διαβάζουμε, δηλαδή παίρνουμε, κάποιο δεδομένο από το χρήστη, με τις εντολές : ΔΙΑΒΑΣΕ(Χ); -- Χ η μεταβλητή που θα πάρει το δεδομένο. ή READLN(X); ή scanf( %τύπος,&x); Με τις εντολές αυτές, το πρόγραμμα σταματάει και περιμένει το χρήστη να πληκτρολογήσει την τιμή του δεδομένου που ζητάμε. 30

32 Στην Pascal η εντολή READLN διαβάζει και μετά πηγαίνει στην αποκάτω γραμμή. Αν θέλουμε να μείνει στην ίδια γραμμή δίνουμε την εντολή READ. Γράφουμε, δηλαδή βγάζουμε κάποιο μήνυμα στην οθόνη του χρήστη με τις εντολές : ΤΥΠΩΣΕ( Μήνυμα,EOL); ή WRITELN( Μήνυμα ); ή printf( Μήνυμα ); Βγάζουμε κάποιο αποτέλεσμα (μεταβλητή) στην οθόνη του χρήστη με τις εντολές : ΤΥΠΩΣΕ(Χ, EOL); -- Χ η μεταβλητή που περιέχει το αποτέλεσμα. ή WRITELN(X); ή printf( %τύπος\n,x); Στην Pascal η εντολή WRITELN γράφει και μετά πηγαίνει στην αποκάτω γραμμή. Αν θέλουμε να μείνει στην ίδια γραμμή δίνουμε την εντολή WRITE. Εντολές Εισόδου - Εξόδου Είσοδος δεδομένων από συσκευή (π.χ. πληκτρολόγιο) Παραδείγματα Εξοδος δεδομένων στην οθόνη Παραδείγματα Ψευδοκώδικας ΔΙΑΒΑΣΕ (λίστα ονομάτων μεταβλητών εισόδου) [ΑΠΟ πηγή δεδομένων] ΔΙΑΒΑΣΕ(Ι); ΔΙΑΒΑΣΕ(Α); ΔΙΑΒΑΣΕ(C); ΔΙΑΒΑΣΕ(NAME); ΔΙΑΒΑΣΕ(Ι,Κ,Α); ΤΥΠΩΣΕ (μεταβλητές εξόδου, κείμενο ) ΤΥΠΩΣΕ(Ι); ΤΥΠΩΣΕ(Α); ΤΥΠΩΣΕ(C); ΤΥΠΩΣΕ(NAME); ΤΥΠΩΣΕ(Ι,ΝΑΜΕ, Κ,Α); ΤΥΠΩΣΕ(Α, EOL); 31

33 Εξοδος δεδομένων στον εκτυπωτή Εξοδος δεδομένων σε άλλη συσκευή ΕΚΤΥΠΩΣΕ (μεταβλητές, κείμενο ) ΓΡΑΨΕ (μεταβλητές, κείμενο ) ΣΕ συσκευή Είσοδος δεδομένων από συσκευή (π.χ. πληκτρολόγιο) Παραδείγματα Εξοδος δεδομένων στην οθόνη Παραδείγματα Pascal READ ( c ); READ(λίστα ονομάτων μεταβλητών εισόδου); READLN(Ι); READLN(Α); READLN(C); READLN(NAME); READLN(Ι,Κ,Α); WRITE( C ); WRITE(μεταβλητές εξόδου, κείμενο ); WRITE(Ι); WRITE(Α); WRITE(C); WRITE(NAME); WRITE(Ι,ΝΑΜΕ,Κ,Α); WRITELN(Α); C getchar(); -- διαβάζει 1 χαρακτήρα c = getchar(); scanf("...",&v); -- διαβάζει χαρακτήρες και μετατρέπει σε εσωτερικές τιμές scanf("%d", &i); -- διαβάζει τον ακέραιο i scanf("%f", &a); -- διαβάζει τον πραγματικό α scanf("%c", &c); -- διαβάζει τον χαρακτήρα c scanf("%s", name); -- διαβάζει το string name scanf("%d %d %f", &i, &k, &a); putchar( c ); -- γράφει 1 χαρακτήρα printf("...",v); -- μετατρέπει τις εσωτερικές τιμές σε χαρακτήρες και τις γράφει στην οθόνη printf("%d", i) -- γράφει τον ακέραιο i printf("%f", a) -- γράφει τον πραγματικό α printf("%c", c) -- γράφει τον χαρακτήρα c printf("%s", name) -- γράφει το string name printf("%d %s %d %f",i,name,k,a); -- γράφει ακέραιο, string, ακέραιο, πραγματικό printf( %f\n,a); --γράφει και αλλάζει γραμμή 32

34 Το πρώτο πρόγραμμα Σε κάθε γλώσσα προγραμματισμού, το πρώτο πρόγραμμα που μαθαίνουμε και γράφουμε για να δοκιμάσουμε αν δουλεύει ο μεταγλωττιστής μας, είναι όπως λέμε το Hello World. Το πρόγραμμα αυτό δεν κάνει τίποτα ουσιαστικό. Απλά εμφανίζει ένα μήνυμα στην οθόνη. Χρησιμεύει όμως στο να μας δείξει τα ελάχιστα και απαραίτητα στοιχεία ενός προγράμματος. Επίσης αν χρησιμοποιούμε κάποιον καινούριο μεταγλωττιστή, χρησιμεύει και για να ελέγξουμε αν έχει εγκατασταθεί σωστά και δουλεύει. Καλημέρα Κόσμε (Hello World) Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΤΟ-ΠΡΩΤΟ-ΠΡΟΓΡΑΜΜΑ ΑΡΧΗ ΤΥΠΩΣΕ( Γειά χαρά καημένε κόσμε ); ΤΕΛΟΣ Pascal (* Το πρώτο Πρόγραμμα *) PROGRAM program1(input,output); BEGIN WRITE( Γειά χαρά καημένε κόσμε ); END. C /* Το πρώτο Πρόγραμμα */ #include <stdio.h> main() { printf("γειά χαρά καημένε κόσμε"); } 33

35 Παρακάτω θα περιγράψουμε κάποιες στοιχειώδεις εργασίες που μπορεί κάποιος να κάνει με χρήση των εντολών εισόδου και εξόδου. Πως δίνει ο χρήστης τα δεδομένα στο πρόγραμμα ΤΕΧΝΙΚΗ Όταν το πρόγραμμα ζητάει τα δεδομένα από το χρήστη, πρέπει να τα ζητάει με ένα σαφές και ευγενικό μήνυμα που να εξηγεί στο χρήστη τι ακριβώς πρέπει να πληκτρολογήσει. Δηλώσεις μεταβλητών Ψευδοκώδικας ΔΕΔΟΜΕΝΑ code : Integer; a,b : Real; name : Array[0..19] of Char; Παραδείγματα ΤΥΠΩΣΕ( ΠΑΡΑΚΑΛΩ ΔΩΣΤΕ ΤΟΝ ΚΩΔΙΚΟ : ); ΔΙΑΒΑΣΕ(code); ΤΥΠΩΣΕ( ΔΩΣΤΕ ΔΥΟ ΑΡΙΘΜΟΥΣ : ); ΔΙΑΒΑΣΕ(a,b); ΤΥΠΩΣΕ( ΠΑΡΑΚΑΛΩ ΔΩΣΤΕ ΤΟ ΟΝΟΜΑ : ); ΔΙΑΒΑΣΕ(name); Δηλώσεις μεταβλητών Παραδείγματα Pascal ΔΕΔΟΜΕΝΑ code : Integer; a,b : Real; name : Array[0..19] of Char; WRITE( ΠΑΡΑΚΑΛΩ ΔΩΣΤΕ ΤΟΝ ΚΩΔΙΚΟ : ); READLN(code); WRITE( ΔΩΣΤΕ ΔΥΟ ΑΡΙΘΜΟΥΣ : ); READLN(a,b); WRITE( ΠΑΡΑΚΑΛΩ ΔΩΣΤΕ ΤΟ ΟΝΟΜΑ : ); READLN(name); C int code = 0; float a,b; char name[20]; printf("παρακαλω ΔΩΣΤΕ ΤΟΝ ΚΩΔΙΚΟ : "); scanf("%d", &code ); printf( ΔΩΣΤΕ ΔΥΟ ΑΡΙΘΜΟΥΣ : ); scanf( %f %f,&a,&b); printf("παρακαλω ΔΩΣΤΕ ΤΟ ΟΝΟΜΑ : "); scanf("%s", name ); 34

36 ΤΕΧΝΙΚΗ Πως δίνει ο χρήστης στο πρόγραμμα εντολές (μενού χωρίς επανάληψη) Όταν ο χρήστης πρέπει να δώσει μια εντολή ή να κάνει κάποια επιλογή, πρέπει να του εμφανίζονται οι επιλογές που έχει και τι να δώσει για κάθε περίπτωση. Ο πιο συνηθισμένος τρόπος σε αυτές τις περιπτώσεις είναι το «Μενού». Δηλώσεις μεταβλητών Παραδείγματα Ψευδοκώδικας ΔΕΔΟΜΕΝΑ epilogi : CHAR; ΤΥΠΩΣΕ( ΕΠΙΛΟΓΕΣ, EOL); ΤΥΠΩΣΕ( ,EOL); ΤΥΠΩΣΕ("A - ΑΝΕΥΡΕΣΗ",EOL); ΤΥΠΩΣΕ("Δ - ΔΙΑΓΡΑΦΗ",EOL); ΤΥΠΩΣΕ("E EΞΟΔΟΣ,EOL); ΤΥΠΩΣΕ(EOL); ΤΥΠΩΣΕ("ΔΩΣΤΕ ΕΝΤΟΛΗ :"); ΔΙΑΒΑΣΕ(epilogi); EOL = χαρακτήρας αλλαγής γραμμής (End Of Line). Δηλώσεις μεταβλητών Παραδείγματα Pascal Var epilogi : CHAR; char epilogi = 0; WRITELN( ΕΠΙΛΟΓΕΣ ); WRITELN( ); WRITELN("A - ΑΝΕΥΡΕΣΗ"); WRITELN("Δ - ΔΙΑΓΡΑΦΗ"); WRITELN("E EΞΟΔΟΣ ); WRITELN(); WRITE("ΔΩΣΤΕ ΕΝΤΟΛΗ :"); READLN(epilogi); C printf(" EΠIΛOΓΕΣ\n ); printf( \n"); printf("a - ΑΝΕΥΡΕΣΗ\n"); printf("δ - ΔΙΑΓΡΑΦΗ\n"); printf("e - EΞΟΔΟΣ\n"); printf("\n"); printf("δωστε ΕΝΤΟΛΗ :"); epilogi=getchar(); Το μενού εμφανίζει στο χρήστη τις επιλογές και του ζητάει να διαλέξει κάποια δίνοντας τον αριθμό ή το γράμμα της. Αφού διαβάσει την επιλογή, το πρόγραμμα θα πρέπει παρακάτω να περιλαμβάνει τις εντολές που υλοποιούν την επιθυμία του χρήστη. 35

37 ΤΕΧΝΙΚΗ Πως γράφουμε τα αποτελέσματα στο χρήστη Οταν το πρόγραμμα γράφει κάποια αποτελέσματα, ποτέ δεν γράφει μόνον ένα αποτέλεσμα. Το πρόγραμμα πρέπει να δώσει στο χρήστη και όλες τις πληροφορίες που απαιτούνται για να γίνουν τα αποτελέσματα εύκολα κατανοητά : Δηλώσεις μεταβλητών Παραδείγματα Ψευδοκώδικας ΔΕΔΟΜΕΝΑ CODE : INTEGER; NAME : ARRAY[0..19] OF CHAR; ΤΥΠΩΣΕ( Ο ΠΕΛΑΤΗΣ ΠΟΥ ΔΩΣΑΤΕ ΕΙΝΑΙ :,EOL); ΤΥΠΩΣΕ( ,EOL); ΤΥΠΩΣΕ( ΚΩΔΙΚΟΣ :, code,eol); ΤΥΠΩΣΕ( ΟΝΟΜΑ :, name,eol); ΤΥΠΩΣΕ( H EKTYΠΩΣH ΠΟΥ ΖΗΤΗΣΑΤΕ ΤΕΛΕΙΩΣΕ,EOL); Pascal Var CODE : INTEGER; NAME : ARRAY[0..19] OF CHAR; WRITELN( Ο ΠΕΛΑΤΗΣ ΠΟΥ ΔΩΣΑΤΕ ΕΙΝΑΙ : ); WRITELN( ); WRITELN( ΚΩΔΙΚΟΣ :, code); C int code; char name[20]; printf("ο ΠΕΛΑΤΗΣ ΠΟΥ ΔΩΣΑΤΕ ΕΙΝΑΙ :\n"); printf(" \n"); printf("κωδικοσ : %d\n", code); WRITELN( ΟΝΟΜΑ :, name); printf("ονομα : %s\n", name); WRITELN( H EKTYΠΩΣH ΠΟΥ ΖΗΤΗΣΑΤΕ ΤΕΛΕΙΩΣΕ ); printf("h EKTYΠΩΣH ΠΟΥ ΖΗΤΗΣΑΤΕ ΤΕΛΕΙΩΣΕ\n"); Aν πρόκειται τα αποτελέσματα να εμφανιστούν σε εκτύπωση ή είναι πολλά αποτελέσματα που εμφανίζονται σε οθόνη, το πρόγραμμα θα πρέπει να τυπώνει τίτλους και επικεφαλίδες, 36

38 ώστε να μπορεί ο χρήστης να καταλάβει αμέσως τι ακριβώς είναι το κάθε στοιχείο που βλέπει στην εκτύπωση ή στην οθόνη. 37

39 2.5 Οι βασικές λειτουργίες της Επεξεργασίας Aνάθεση ή εκχώρηση τιμής σε μεταβλητή ΤΕΧΝΙΚΗ Η Ανάθεση ή εκχώρηση ή καταχώρηση (Assignment) είναι μια πράξη που δίνει τιμή σε μια μεταβλητή. Αν η μεταβλητή είχε κάποια προηγούμενη τιμή, τότε σβήνει η παλιά και μένει η καινούρια. Όταν δηλαδή λέμε : A := B; ή A := 5; Η τιμή που βρίσκεται δεξιά πηγαίνει και αποθηκεύεται στην μεταβλητή Α. Δηλώσεις μεταβλητών Καταχώρηση σε μεταβλητή Παραδείγματα Α := 0; Β := Α; C := B; Ψευδοκώδικας Pascal C ΔΕΔΟΜΕΝΑ Var Α,Β,C : Integer; Α,Β,C : int a,b,c; Integer; Α := 1; Α := 1; a = 1; Α := 0; Β := Α; C := B; a = b = c = 0; ΤΕΧΝΙΚΗ Πως δύο μεταβλητές ανταλλάσσουν τιμές μεταξύ τους Ψευδοκώδικας Pascal C Δηλώσεις μεταβλητών ΔΕΔΟΜΕΝΑ Α,Β,Τ : Integer; Var Α,Β,Τ : Integer; int a,b,t; Παραδείγματα Τ := Α; Α := Β; Β := Τ; Τ := Α; Α := Β; Β := Τ; t = a; a = b; b = t; 38

40 Για να ανταλλάξουν δύο μεταβλητές τις τιμές τους, πρέπει οπωσδήποτε να χρησιμοποιήσουν μια Τρίτη βοηθητική μεταβλητή. Πράξεις (Operations) και Τελεστές (Operators) Οι πράξεις υπολογίζουν νέες τιμές από τις τιμές των μεταβλητών που συμμετέχουν στη πράξη. Κάθε πράξη ορίζεται από τον αντίστοιχο Τελεστή. Αριθμητικές Πράξεις και Εκφράσεις ΤΕΧΝΙΚΗ Οι αριθμητικές πράξεις εκτελούν υπολογισμούς (πράξεις) με τις τιμές μεταβλητών και σταθερών. Το αποτέλεσμα συνήθως αποθηκεύεται σε μια μεταβλητή. Πράξη - Τελεστής Ψευδοκώδικας - Pascal C Πρόσθεση + Αφαίρεση - Πολλαπλασιασμός * Διαίρεση / Div(ακέραια) Υπόλοιπο διαίρεσης (modulo) Mod % (σε C) A := B + C; A := A + 1; A := A + B + C; A := B - C; A := A - 1; A := A - B - C; A := B * C; A := A * 3; A := A * B * C; A := B / C; A := A / 3; A := A * B / C; Α := Α Div 2; (Pascal) A := B MOD C; A := A MOD 3; a = b + c; a = a + 1; a = a + b + c; a = b - c; a = a - 1; a = a - b - c; a = b * c; a = a * 1; a = a * b * c; a = b / c; a = a / 3; a = a * b / c; a = b % c; a = a % 3; 39

41 Το πρώτο χρήσιμο πρόγραμμα Μετατροπή Ευρώ σε Δραχμές Πρόβλημα Να γραφεί πρόγραμμα που να δέχεται ένα ποσό σε Ευρώ και να υπολογίζει το ίδιο ποσό σε Δραχμές. Να η πρώτη ευκαιρία για να εφαρμόσουμε τη μεθοδολογία που αναφέραμε προηγούμενα. Πως θα σκεφτούμε Ποια είναι τα δεδομένα; Ενα ποσό σε Ευρώ (που ο χρήστης μπορεί να δώσει οποιοδήποτε) Ο συντελεστής μετατροπής Ευρώ σε Δραχμές (που είναι σταθερός, ίσος με ) Τι τύπου είναι; Τα ευρώ έχουν δεκαδικά ψηφία, άρα είναι πραγματικοί (Real) Ποια είναι τα αποτελέσματα; Ενα ποσό σε Δραχμές (που μπορεί να προκύψει οποιοδήποτε). Τι τύπου είναι; Οι δραχμές είναι ακέραιες. Δεν πειράζει όμως, για ευκολία, εδώ να τις παραστήσουμε σαν πραγματικούς. Τι δηλώσεις θα κάνουμε; Αρα μπορούμε να δηλώσουμε μία σταθερά (τον συντελεστή) και δύο μεταβλητές (τα Ευρώ και τις Δραχμές): Const EURO = ; Var E, D : Real; 40

42 Πώς θα ζητήσουμε το δεδομένο; Με την τεχνική που μάθαμε : WRITE('DOSTE POSO SE EURO : '); READLN(E); Πώς θα γράψουμε το αποτέλεσμα; Με την τεχνική που μάθαμε : WRITELN('SE DRAXMES EINAI :',D); Και τέλος, πώς θα επεξεργαστούμε το δεδομένο για να υπολογίσουμε το αποτέλεσμα; Ξέρουμε τον πολλαπλασιασμό και την ανάθεση. D := E*EURO; Τώρα μπορούμε να γράψουμε το πρόγραμμα ολοκληρωμένα. Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΕΥΡΩ-ΣΕ-ΔΡΑΧΜΕΣ { ΜΕΤΑΤΡΟΠΗ EYRO SE DRAXMES } ΣΤΑΘΕΡΕΣ EURO = ; ΔΕΔΟΜΕΝΑ E,D : REAL; APXH ΤΥΠΩΣΕ('DOSTE POSO SE EURO : '); ΔΙΑΒΑΣΕ(E); D := E*EURO; ΤΥΠΩΣΕ('SE DRAXMES EINAI :',D); ΤΕΛΟΣ 41

43 Pascal PROGRAM EuroDrx (INPUT,OUTPUT); (* ΜΕΤΑΤΡΟΠΗ EYRO SE DRAXMES *) Const EURO = ; Var E,D : REAL; BEGIN WRITE('DOSTE POSO SE EYRO : '); READLN(E); D := E*EURO; WRITELN('SE DRAXMES EINAI :',D); END. C #include <stdio.h> /* ΜΕΤΑΤΡΟΠΗ eyro se draxmes */ const euro=340.75; float e,d; void main() { printf("doste POSO SE EYRO : "); scanf("%f",&e); d=e*euro; printf("se DRAXMES EINAI : %f",d); } ΤΕΧΝΙΚΗ Εφαρμογή Τύπου Πολλά προβλήματα απαιτούν τον υπολογισμό του αποτελέσματος με την εφαρμογή κάποιου γνωστού τύπου. Οι τύποι γράφονται με την εκχώρηση, τις αριθμητικές πράξεις και, αν χρειάζονται, και με τις παρενθέσεις. Οι παρενθέσεις χρησιμεύουν για να δείξουν τι πρέπει να υπολογιστεί πρώτα. Ο,τι βρίσκεται μέσα σε παρένθεση υπολογίζεται πριν από τα άλλα. Για παράδειγμα, το εμβαδόν του κύκλου δίνεται από τον τύπο Ε = π. ρ 2 Αυτό στη γλώσσα προγραμματισμού γράφεται : Ε := 3.14 * R * R; Το εμβαδόν του τριγώνου δίνεται από τον τύπο Ε = Βάση x Υψος δια 2 Αυτό στη γλώσσα προγραμματισμού γράφεται : Ε := ( B * Y ) / 2; 42

44 Μερικοί χρήσιμοι τύποι για ανάλογα προγράμματα είναι : Δηλώσεις ( σε C ) #define PI double a,b,c, /* Πλευρές */ y, /* Υψος */ r, pe; /* Ακτίνα, Περιφέρεια */ ep, og; /* Επιφάνεια, Ογκος */ Τύποι Σxήμα Επιφάνεια Περίμετρος/Περιφέρεια Τρίγωνο ep = b * y / 2.0; pe = a + b + c; Τετράγωνο ep = a * a; pe = 4.0 * a; Παραλ/γραμμο ep = a * b; pe = 2 * (a + b) Τραπέζιο ep = (a+b)/2.0*y; pe = a + b + 2 * c; Κύκλος ep = PI * r * r; pe = 2.0*PI*r; Ογκος Κύβος ep = 6.0 * a * a; og = a*a*a; Σφαίρα ep = 4.0*PI*r*r; og =4.0/3.0*PI*r*r*r; Υποτείνουσα Ορθογωνίου Τριγώνου : c = sqrt(a * a + b * b); 43

45 Ένα πολύ τυπικό (αλλά όχι και τόσο χρήσιμο) πρόγραμμα Μετατροπή θερμοκρασίας από βαθμούς Fahrenheit σε Κελσίου Πρόβλημα Να γραφεί πρόγραμμα που να δέχεται μια θερμοκρασία σε βαθμούς Fahrenheit και να υπολογίζει την ίδια θερμοκρασία σε βαθμούς Κελσίου. Εδώ οι τεχνικές είναι οι ίδιες με το προηγούμενο πρόγραμμα. Αλλάζει μόνον ο τύπος : C := 5 * (F 32) / 9 Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ FAHR-ΣΕ-ΚΕΛΣΙΟΥ { ΜΕΤΑΤΡΟΠΗ FAHRENHEΙT ΣΕ KEΛΣIOY } ΔΕΔΟΜΕΝΑ F,C : REAL; APXH ΤΥΠΩΣΕ('DOSTE THERMOKRASIA SE FAHR : '); READ(F); C := 5*(F-32)/9; ΤΥΠΩΣΕ('SE KELSIOY EINAI :',C); ΤΕΛΟΣ Pascal PROGRAM FC(INPUT,OUTPUT); (* ΜΕΤΑΤΡΟΠΗ FAHRENHEΙT ΣΕ KEΛΣIOY *) Var F,C : REAL; BEGIN WRITE('DOSTE THERMOKRASIA SE FAHR :'); READLN(F); C := 5*(F-32)/9; WRITELN('SE KELSIOY EINAI :',C); END. C #include <stdio.h> /* ΜΕΤΑΤΡΟΠΗ fahrenheit se kelsioy */ float f,c; void main() { printf("doste THERMOKRASIA SE FAHR :"); scanf("%f",&f); c=5*(f-32)/9; printf("se KELSIOY EINAI : %f",c); } 44

46 Ασκήσεις για λύση 1. Γράψτε πρόγραμμα που να διαβάζει έναν ακέραιο, έναν πραγματικό και ένα χαρακτήρα σε μια γραμμή, χωρισμένους με κενά και να τους γράφει στην οθόνη.(var) 2. Γράψτε πρόγραμμα που διαβάζει την ακτίνα κύκλου και να υπολογίζει το εμβαδόν και την περιφέρεια του κύκλου. 3. Γράψτε πρόγραμμα που διαβάζει τις δύο πλευρές ορθογωνίου τριγώνου και να υπολογίζει το εμβαδόν του. 4. Γράψτε πρόγραμμα που διαβάζει τις δύο πλευρές ορθογωνίου τριγώνου και να υπολογίζει την υποτείνουσα. 5. Γράψτε πρόγραμμα που να μετατρέπει ένα ποσό σε ευρώ σε δολάριa. 6. Να διαβάζει ένα ποσό και τον συντελεστή ΦΠΑ (4,8,18,36) και να γράφει το ποσό, τον ΦΠΑ που αναλογεί και το σύνολο. (fpa) 45

47 Ακέραια Διαίρεση και Υπόλοιπο Διαίρεσης Η Ακέραια Διαίρεση είναι μια διαίρεση που γίνεται μεταξύ δύο ακέραιων μεταβλητών. Το ιδιαίτερο χαρακτηριστικό της είναι ότι στην Ακέραια Διαίρεση το αποτέλεσμα είναι πάντοτε Ακέραιο, το δεκαδικό μέρος, όποιο και αν είναι αυτό, κόβεται. Ετσι : 5 div div div div div div div div div Το Υπόλοιπο Διαίρεσης (modulo ή Mod) δίνει το υπόλοιπο της διαίρεσης μεταξύ δύο ακεραίων. Προσοχή, δίνει το Υπόλοιπο και όχι το Πηλίκο! Ετσι : 5 mod mod mod mod mod mod mod mod Τις δύο αυτές πράξεις τις χρησιμοποιούμε για πολλές εφαρμογές όπως μετατροπή ακέραιου σε δυαδικό, στρογγυλοποίηση ακέραιων ποσών, εύρεση μονών-ζυγών, μεταβλητές που παίρνουν τιμές κυκλικά, μετατροπή ακέραιου σε δυαδικό κ.ά. 46

48 ΤΕΧΝΙΚΗ Πως βρίσκουμε αν ένας αριθμός είναι Μονός ή Ζυγός Βρίσκουμε αν ένας αριθμός είναι Μονός ή Ζυγός χρησιμοποιώντας το Υπόλοιπο Διαίρεσης. Το υπόλοιπο της διαίρεσης δια δύο μπορεί να είναι 0 ή 1. Ολοι οι μονοί διαιρούμενοι δια 2, δίνουν υπόλοιπο 1, ενώ όλοι οι ζυγοί δίνουν 0. Ψευδοκώδικας Pascal C ΕΑΝ Α MOD 2 = 0 ΤΟΤΕ ΤΥΠΩΣΕ(Α, ΖΥΓΟΣ ) ΑΛΛΙΩΣ ΤΥΠΩΣΕ(Α, ΜΟΝΟΣ ) ΕΑΝ-ΤΕΛΟΣ IF Α MOD 2 = 0 THEN WRITELN(Α, ΖΥΓΟΣ ) ELSE WRITELN(Α, ΜΟΝΟΣ ); if (a % 2 == 0) printf( %d ZYGOS\n,a); else printf( %d MONOS\n,a); Στρογγυλοποίηση ακέραιου ΤΕΧΝΙΚΗ Η στρογγυλοποίηση ακέραιου είναι η αύξηση ή μείωσή του, ώστε να γίνει ίσος με την κοντινότερη δεκάδα, εκατοντάδα, χιλιάδα κ.λπ. Ψευδοκώδικας - Pascal C P : Integer; int p; P := (P + 50) div 100 )* 100; p = (p + 50) / 100 ) * 100; Η παραπάνω πράξη στρογγυλοποιεί το ποσό P στο πλησιέστερο εκατοστάρικο. Το δια ( div ή / ) 100, επί ( * ) 100 φαίνεται παράξενο, αλλά στην πραγματικότητα η ακέραια διαίρεση προκαλεί την αποκοπή του μη ακέραιου μέρους, δηλαδή των δεκάδων και των μονάδων, ενώ ο πολλαπλασιασμός ξαναφέρνει το ακέραιο μέρος στην τάξη μεγέθους που ήταν πριν από τη διαίρεση (εκατοντάδες). Για παράδειγμα, αν P = 123, τότε : ενώ αν P = 159, τότε : 47

49 P div * P = 100 Κατέβηκε στο 100 P div * P = 200 Ανέβηκε στο 200 ΤΕΧΝΙΚΗ Μετατροπή ακέραιου σε δυαδικό αριθμό Η μετατροπή ακέραιου από το δεκαδικό σύστημα στο δυαδικό, γίνεται με την επαναληπτική εφαρμογή του mod και του div. Ζυγός 12 = 8+4 = 2^3 + 2^2 = 1 x 2^3 + 1 x 2^2 + 0 x 2^1 + 0 x 2^0 = 1100 Μονός 9 = 8+1 = 2^3 + 2^0 = 1 x 2^3 + 0 x 2^2 + 0 x 2^1 + 1 x 2^0 = Δεκαδικό σε 1100 Δυαδικό 9 Δεκαδικό σε 1001 Δυαδικό 12 mod mod div div mod mod div div mod mod div div mod mod div div

50 Ασκήσεις για λύση 1. Γράψτε πρόγραμμα που να διαβάζει ένα ακέραιο ποσό και να το γράφει στρογγυλοποιημένο στο 10άρικο. 2. Γράψτε πρόγραμμα που να διαβάζει ένα ακέραιο ποσό και να το αναλύει σε χαρτονομίσματα των 200, 100, 50, 20, 10 ευρώ και νομίσματα των 2 και 1 ευρώ. 3. Γράψτε ένα πρόγραμμα που να διαβάζει έναν οποιονδήποτε τυχαίο ακέραιο αριθμό και να τον μετατρέπει σε τυχαία ζαριά (1-6) 49

51 Λογικές Πράξεις και Εκφράσεις Οι λογικές πράξεις εκτελούν λογικούς συλλογισμούς με σκοπό να υπολογίσουν αν κάτι συμβαίνει (δηλαδή είναι Αληθές True) ή δεν συμβαίνει (δηλαδή είναι Ψευδές False). Το αποτέλεσμά τους είναι μια λογική (Boolean) τιμή που παίρνει μια από δύο τιμές (True ή False). Η χρησιμότητά τους θα φανεί παρακάτω, όταν θα χρησιμοποιήσουμε την εντολή ΕΑΝ. Συγκρίσεις Σύγκριση Ψευδοκώδικας Αποτέλεσμα Ισον A = B Αληθές, Αν a ίσο με το b, Αλλως Ψευδές Όχι Ισον A <> B Αληθές, Αν a όχι ίσο με το b, Αλλως Ψευδές Μικρότερο A < B Αληθές, Αν a μικρότερο από το b, Αλλως Ψευδές Μικρότερο ή Ισον A <= B Αληθές, Αν a μικρότερο ή ίσο με το b, Αλλως Ψευδές Μεγαλύτερο A > B Αληθές, Αν a μεγαλύτερο από το b, Μεγαλύτερο ή Ισον A >= B Σύγκριση Pascal C Ισον A = B a = = b Όχι Ισον A <> B a!= b Μικρότερο A < B a < b Μικρότερο ή Ισον A <= B a <= b Μεγαλύτερο A > B a > b Μεγαλύτερο ή Ισον A >= B a >= b Παραδείγματα Ψευδοκώδικας Pascal C ΔΕΔΟΜΕΝΑ ZYGOS, ARNHTIKOS : BOOLEAN; A : INTEGER; Αλλως Ψευδές Αληθές, Αν a μεγαλύτερο ή ίσο με το b, Αλλως Ψευδές Var zygos,arnhtikos : Boolean; a : Integer; int zygos, arnhtikos; int a; ZYGOS :=(A MOD 2 =0); zygos :=(a MOD 2 =0); zygos = (a % 2 == 0); ARNHTIKOS := a < 0; arnhtikos := a < 0; arnhtikos = a < 0; 50

52 Λογικές Εκφράσεις Οι Λογικές Εκφράσεις σχηματίζονται από συγκρίσεις που ενώνονται μεταξύ τους με λογικές πράξεις (Και, Η, Όχι And, Or, Not). Δηλώσεις Λογικό ΚΑΙ (AND) Λογικό H (OR) Λογικό OΧI (NOT) Δηλώσεις Ψευδοκώδικας Αποτέλεσμα ΔΕΔΟΜΕΝΑ Α,Β : BOOLEAN; Α AND B A OR B NOT A Αληθές αν και το Α αληθές και το Β αληθές Αληθές αν Α αληθές ή Β αληθές ή και τα δύο αληθή Αληθές αν Α ψευδές Ψευδές αν Α αληθές Pascal C Αποτέλεσμα Var Α,Β : BOOLEAN; int a,b; Λογικό ΚΑΙ (AND) Α AND B a && b Λογικό H (OR) A OR B a b Λογικό OΧI (NOT) NOT A!a Αληθές αν και το Α αληθές και το Β αληθές Αληθές αν Α αληθές ή Β αληθές ή και τα δύο αληθή Αληθές αν Α ψευδές Ψευδές αν Α αληθές Παραδείγματα Ψευδοκώδικας Pascal C ΔΕΔΟΜΕΝΑ X : CHAR; A : INTEGER; KEFALAIO, MONOS, OXI456: BOOLEAN; Var x : Char; a : Integer; kefalaio, monos, oxi456 : Boolean; char x; int a; int kefalaio, monos, oxi456; KEFALAIO:= X >= A KAI X <= Z ; kefalaio := (x >= A And x <= Z ); kefalaio = ((x >= A ) && (x <= Z )); OXI456:= A <= 3 H A >=7; oxi456:= (a<=3 Or a<=7); oxi456= ((a<=3) a<=7)); MONOS:= OXI ZYGOS; monos := NOT zygos ; monos =!zygos; 51

53 Ασκήσεις για λύση Γράψτε τις λογικές εκφράσεις για : Τους μικρούς λατινικούς χαρακτήρες ( a z ) Τους μικρούς ελληνικούς χαρακτήρες ( α ω ) Τους κεφαλαίους ελληνικούς χαρακτήρες ( Α Ω ) Τα ψηφία δηλαδή τους χαρακτήρες των αριθμών ( 0 9 ) Τους χαρακτήρες που μπορεί να περιλαμβάνονται σε έναν πραγματικό αριθμό (ψηφία, τελεία) Αριθμούς μέχρι και 5 ή μεγαλύτερους από 15. Ποσά κάτω από 1 ευρώ. 52

54 If you can fill the unforgiving minute, with sixty seconds worth of distance run R. Kipling ( If ) 2.6 Εντολές Απόφασης Συχνά η ροή των εντολών που πρέπει να εκτελεστούν για να λυθεί το πρόβλημα δεν είναι αυστηρά σειριακή, αλλά το πρόγραμμα πρέπει να ξεφύγει από τη σειρά των εντολών και να εκτελέσει κάποιες άλλες εντολές. Το πρόγραμμα πρέπει, όπως λέμε να «αποφασίσει» ποιες εντολές θα εκτελέσει και να αγνοήσει τις άλλες. Οι «αποφάσεις» αυτές παίρνονται με τις εντολές απόφασης ΕΑΝ - if ΝΑΙ ΝΑΙ ΟΧΙ I = Χ I = Χ ΟΧΙ Ομάδα-Α Ομάδα-Α Ομάδα-Β Στο IF υπολογίζεται πρώτα η λογική έκφραση (συνθήκη) και, αν βρεθεί αληθής εκτελείται η ομάδα εντολών που ακολουθεί, αν όχι, εκτελείται η εναλλακτική ομάδα, αν υπάρχει. 53

55 Ψευδοκώδικας ΕΑΝ συνθήκη ΤΟΤΕ. (εντολές) ΤΕΛΟΣ-ΕΑΝ ΕΑΝ συνθήκη ΤΟΤΕ. (εντολές) ΑΛΛΙΩΣ. (εντολές) ΤΕΛΟΣ-ΕΑΝ ΕΑΝ συνθήκη ΤΟΤΕ. (εντολές) ΑΛΛΙΩΣ ΕΑΝ συνθήκη ΤΟΤΕ. (εντολές) ΑΛΛΙΩΣ. (εντολές) ΤΕΛΟΣ-ΕΑΝ Παραδείγματα ΕΑΝ Α=1 ΤΟΤΕ ΤΥΠΩΣΕ( Α = 1 ); ΤΕΛΟΣ-ΕΑΝ EAN A=1 TOTE ΤΥΠΩΣΕ( Α ΙΣΟΝ ENA ); ΑΛΛΙΩΣ ΤΥΠΩΣΕ( Α ΟΧΙ ΙΣΟΝ ΕΝΑ ); ΤΕΛΟΣ-ΕΑΝ EAN A<0 TOTE ΤΥΠΩΣΕ( Α ΑΡΝΗΤΙΚΟ ); ΑΛΛΙΩΣ EAN A>0 ΤΥΠΩΣΕ( Α ΘΕΤΙΚΟ ); ΑΛΛΙΩΣ ΤΥΠΩΣΕ( Α ΙΣΟΝ ΜΗΔΕΝ ); ΤΕΛΟΣ-ΕΑΝ Pascal C Παραδείγματα IF συνθήκη THEN. (εντολές) IF συνθήκη THEN.(εντολές) ELSE.(εντολές) IF συνθήκη THEN.(εντολές) ELSE IF συνθήκη THEN.(εντολές) ELSE.(εντολές) if (συνθήκη ){. (εντολές) } if (συνθήκη) {. (εντολές) } else {. (εντολές) } if (συνθήκη){.(εντολές) } else if (συνθήκη) {.(εντολές) } else {.(εντολές) } IF Α=1 THEN WRITELN( Α = 1 ); if(a = = 1) printf( a=1 ); IF A=1 THEN WRITELN( Α ΙΣΟΝ ENA ) ELSE WRITELN( Α ΟΧΙ ΙΣΟΝ ΕΝΑ ); if(a == 1) printf( a ison ena ); else printf( a oxi ison ena ); IF A<0 THEN WRITELN( Α ΑΡΝΗΤΙΚΟ ) ELSE IF A>0 WRITELN( Α ΘΕΤΙΚΟ ) ELSE WRITELN( Α ΙΣΟΝ ΜΗΔΕΝ ); if(a < 0) printf( a arnhtiko ); else if( a > 0) printf( a thetiko ); else printf( a ison mhden ); 54

56 Στην Pascal, αν οι εντολές είναι περισσότερες από μία πρέπει να μπούν μέσα σε BEGIN END, ενώ στη C, μέσα σε { }. Ο μεγαλύτερος από δύο αριθμούς Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΜΑΧ-2-ΑΡΙΘΜΩΝ { MAX-XY } ΔΕΔΟΜΕΝΑ X,Y,MAX : REAL; APXH ΔΙΑΒΑΣΕ(X,Y); EAN (X>Y) TOTE MAX := X; ΑΛΛΙΩΣ MAX := Y; EAN-ΤΕΛΟΣ ΤΥΠΩΣΕ(MAX); ΤΕΛΟΣ ΤΕΧΝΙΚΗ Pascal PROGRAM ΜΑΧ2 (INPUT,OUTPUT); (* MAX-XY *) Var X,Y,MAX : REAL; BEGIN READLN(X,Y); IF (X>Y) THEN MAX := X ELSE MAX := Y; WRITELN(MAX); END. C #include <stdio.h> /* max - xy */ float x,y,max; void main() { scanf("%f %f",&x,&y); if (x>y) { max=x; } else { max=y; } /* if */ printf("%f",max); } 55

57 56

58 Ο μεγαλύτερος από τρείς αριθμούς Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΜΑΧ-3-ΑΡΙΘΜΩΝ { MAX-XYZ } ΔΕΔΟΜΕΝΑ X,Y,Z : REAL; APXH ΔΙΑΒΑΣΕ(X,Y,Z); EAN (X>Y) TOTE EAN (X>Z) TOTE ΤΥΠΩΣΕ(X); ΑΛΛΙΩΣ ΤΥΠΩΣΕ(Z); EAN-ΤΕΛΟΣ ΑΛΛΙΩΣ EAN (Y>Z) TOTE ΤΥΠΩΣΕ(Y); ΑΛΛΙΩΣ ΤΥΠΩΣΕ(Z); EAN-ΤΕΛΟΣ EAN-ΤΕΛΟΣ ΤΕΛΟΣ Pascal PROGRAM MAX3 (INPUT,OUTPUT); (* MAX-XYZ *) Var X,Y,Z : REAL; BEGIN READLN(X,Y,Z); IF (X>Y) THEN IF (X>Z) THEN WRITELN(X) ELSE WRITELN(Z) ELSE IF (Y>Z) THEN WRITELN(Y) ELSE WRITELN(Z); END. C #include <stdio.h> /* max - xyz */ float x,y,z; main() { scanf("%f %f %f",&x,&y,&z); if (x>y) { if (x>z) { printf("%f\n",x); } else { printf("%f\n",z); } /* if */ } else { if (y>z) { printf("%f\n",y); } else { printf("%f\n",z); } /* if */ } /* if */ } 57

59 Μετατροπή Ευρώ σε Δραχμές ή Δραχμών σε Ευρώ Το παρακάτω πρόγραμμα δίνει στο χρήστη δύο επιλογές, Ευρώ σε Δραχμές (1) και Δραχμές σε Ευρώ (2) από τις οποίες ο χρήστης επιλέγει δίνοντας σαν απάντηση έναν ακέραιο (AP). Μετά το πρόγραμμα εκτελεί τις εντολές που αντιστοιχούν στην επιλογή του χρήστη χρησιμοποιώντας ένα ΕΑΝ (if). Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΕΥΡΩ-ΔΡΑΧΜΕΣ-ΕΥΡΩ { ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΤΡΟΠΗΣ ΕΥΡΩ ΣΕ ΔΡΑΧΜΕΣ KAI ΔΡΑΧΜΩΝ ΣΕ ΕΥΡΩ } ΣΤΑΘΕΡΕΣ EURO = ; ΔΕΔΟΜΕΝΑ E, D : REAL; AP : INTEGER; (* ΑΠΑΝΤΗΣΗ: 1=ΕΥΡΩ ΣΕ ΔΡΑΧΜΕΣ, 2=ΔΡΑΧΜΕΣ ΣΕ ΕΥΡΩ *) APXH ΤΥΠΩΣΕ('DIALEXTE'); ΤΥΠΩΣΕ('EYRO SE DRAXMES (1)'); ΤΥΠΩΣΕ('DRAXMES SE EYRO (2)'); ΔΙΑΒΑΣΕ(AP); EAN AP = 1 TOTE ΤΥΠΩΣΕ('DOSTE POSO SE EURO: '); ΔΙΑΒΑΣΕ(E); D:=E*EURO; ΤΥΠΩΣΕ('SE DRAXMES EINAI : ',D); ΑΛΛΙΩΣ ΤΥΠΩΣΕ('DOSTE POSO SE DRAXMES:'); ΔΙΑΒΑΣΕ(D); E:=D/EURO; ΤΥΠΩΣΕ('SE EURO EINAI :',E); EAN-ΤΕΛΟΣ ΤΕΛΟΣ 58

60 Pascal PROGRAM EUR_DRX_EUR(INPUT,OUTPUT); (* PROGRAMMA ΜΕΤΑΤΡΟΠΗS EURO SE DRAXMES KAI DRAXMON SE EURO *) Const EURO = ; Var E, D : REAL; AP : INTEGER; (* 1=EYRO SE DRAXMES, 2=DRAXMES SE EYRO *) BEGIN WRITELN('DIALEXTE'); WRITELN('EYRO SE DRAXMES (1)'); WRITELN('DRAXMES SE EYRO (2)'); READLN(AP); IF AP = 1 THEN BEGIN WRITE('DOSTE POSO SE EURO: '); READLN(E); D:=E*EURO; WRITELN('SE DRAXMES EINAI : ',D); END ELSE BEGIN WRITE('DOSTE POSO SE DRAXMES:'); READLN(D); E:=D/EURO; WRITELN('SE EURO EINAI :',E); END; END. C #include <stdio.h> /* programma metatrophs euro se draxmes kai draxmon se euro */ const EURO=340.75; float e,d; int ap; /* 1=EYRO se draxmes, 2=DRAXMES se eyro */ void main() { printf("dialexte"); printf(" EYRO SE DRAXMES (1)"); printf(" DRAXMES SE EYRO (2)"); scanf("%d",&ap); if (ap==1) { printf("doste POSO SE EURO : "); scanf("%f",&e); d=e*euro; printf("se DRAXMES EINAI: %f",d); } else { printf("doste POSO SE DRAXMES:"); scanf("%f",&d); e=d/euro; printf("se EURO EINAI : %f",e); } /* if */ } 59

61 Υπολογιστής χειρός (Calculator) Το πρόγραμμα αυτό δέχεται από το χρήστη πράξεις της μορφής : Αριθμός Πράξη Αριθμός ( π.χ ), τις εκτελεί και βγάζει το αποτέλεσμα. Προσέξτε ότι χειρίζεται και τη περίπτωση της διαίρεσης δια μηδέν που είναι αδύνατη. Για να μην δώσει ένα οποιοδήποτε τυχαίο αποτέλεσμα, δίνει την τιμή που θα αναγνωρίσουμε εύκολα ότι είναι λάθος. Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ CALCULATOR ΔΕΔΟΜΕΝΑ A,B,APOT : Real; P : Char; ΑΡΧΗ ΤΥΠΩΣΕ( Dwste Arithmo kai simbolo:,eol); ΔΙΑΒΑΣΕ(A,P,B); EAN p = + TOTE APOT=a+b; ΑΛΛΙΩΣ ΕΑΝ p = '-' ΤΟΤΕ APOT=a-b; ΑΛΛΙΩΣ ΕΑΝ p = '*' ΤΟΤΕ APOT=a*b; ΑΛΛΙΩΣ ΕΑΝ p = '/' ΤΟΤΕ ΑΡΧΗ EAN B = 0.0 TOTE ΤΥΠΩΣΕ("adynati.."); APOT= ; ΑΛΛΙΩΣ APOT=a/b; ΕΑΝ-ΤΕΛΟΣ ΤΕΛΟΣ ΑΛΛΙΩΣ ΤΥΠΩΣΕ( lathos praxi... ); ΤΥΠΩΣΕ(APOT); ΤΕΛΟΣ 60

62 Pascal PROGRAM CALC (INPUT,OUTPUT); Var A,B,APOT : Real; P : Char; BEGIN WRITELN( Dwste Arithmo kai simbolo: ); READLN(A,P,B); IF p = + TOTE APOT=a+b; ELSE IF p = '-' THEN APOT=a-b; ELSE IF p = '*' THEN APOT=a*b; ELSE IF p = '/' THEN BEGIN IF B = 0.0 ΤΗΕΝ BEGIN WRITELN("adynati.."); APOT= ; END ELSE APOT=a/b; END ELSE WRITELN( lathos praxi... ); WRITELN(APOT); END. C #include <stdio.h> float a,b,apot; char p; main() { printf("dwste Arithmo kai simbolo:\n"); scanf("%f %c %f",&a,&p,&b); if (p=='+') apot=a+b; else if (p=='-') apot=a-b; else if (p=='*') apot=a*b; else if (p=='/') { if(b==0.0) { printf("adynati.."); apot= ; } else apot=a/b; } else printf("lathos praxi..."); printf("%f",apot); } Ο λόγος που διαλέξαμε Real για τύπο των αριθμών, είναι επειδή με τους ακέραιους, αν δώσει κανείς λίγο μεγαλύτερους αριθμούς θα προκαλέσει πολύ εύκολα Σφάλμα Υπερχείλισης (Overflow Error) και τα αποτελέσματα θα είναι λανθασμένα. 61

63 Ασκήσεις Λυμένες Λύση Δευτεροβάθμιας Εξίσωσης με υπολογιστή Οι εξισώσεις 2ου βαθμού έχουν τη μορφή : Α χ 2 + Β χ + Γ = 0, όπου Α <> 0 Οι ρίζες της εξίσωσης βρίσκονται ως εξής : Υπολογίζεται το : Δ = Β 2 4ΑΓ Αν Δ > 0 υπάρχουν 2 πραγματικές ρίζες : ( -B + Δ ) / 2Α και : ( -B - Δ ) / 2Α Αν Δ = 0 υπάρχουν 2 ίσες πραγματικές ρίζες : -Β / 2Α Αν Δ < 0 δεν υπάρχουν πραγματικές ρίζες Να κατασκευασθεί το Διάγραμμα Ροής και το πρόγραμμα που λύνει εξισώσεις 2ου βαθμού. Το πρόγραμμα θα πρέπει να διαβάζει τα Α,Β,Γ και να τυπώνει τις τιμές των 2 ριζών ή να απαντάει ότι δεν υπάρχουν πραγματικές ρίζες. Τα βήματα για τη λύση του προβλήματος με αλγοριθμικό τρόπο είναι : 1. διάβασε τους πραγματικούς συντελεστές A,B,C της δεδομένης εξίσωσης 2. υπολόγισε την ποσότητα (διακρίνουσα) D=B*B-4*A*C 3. Αν D>0, τότε υπολόγισε και τύπωσε τις δύο πραγματικές ρίζες και τέλος 4. Αν D =0, τότε υπολόγισε και τύπωσε τις δύο ίσες ρίζες και τέλος 5. Αν D<0, τότε τύπωσε το μήνυμα ΟΧΙ ΠΡΑΓΜΑΤΙΚΕΣ ΡΙΖΕΣ και τέλος 62

64 ΔΙΑΓΡΑΜΜΑ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΕΞΙΣΩΣΗΣ 2 ΟΥ ΒΑΘΜΟΥ ΑΡΧΗ ΔΙΑΒΑΣΕ Α,Β,Γ Δ=Β2-4ΑΓ Ε=2Α Δ<0 Δ>0 Δ Δ=0 Ρ1=Ρ2=-Β/Ε Ρ1=(-Β+ Δ) /Ε Ρ2=(-Β- Δ ) /Ε ΟΧΙ ΠΡΑΓΜΑΤ. ΡΙΖΕΣ ΤΥΠΩΣΕ Ρ1,Ρ2 ΤΕΛΟΣ 63

65 /* ΛΥΣΗ ΕΞΙΣΩΣΗΣ 2 ΟΥ */ ΒΑΘΜΟΥ #include <stdio.h> #include <math.h> main() { float A, B, C, Z; float X1, X2, X; float D; printf("δωστε A B C :"); scanf("%f %f %f",&a,&b,&c); if(a==0.0) if(b==0.0) printf("δεν ΕΙΝΑΙ ΕΞΙΣΩΣΗ"); else { X= -C/B; printf("μια ΠΡΑΓΜΑΤΙΚΗ ΡΙΖΑ Χ=%d",X); } if( (A!=0.0) && (B!=0.0) ) { D = (B*B) - (4*A*C); if( D < 0.0 ) printf("δεν ΕΧΕΙ ΠΡΑΓΜΑΤΙΚΕΣ ΡΙΖΕΣ\n"); else if( D == 0.0 ) { X1 = -B / 2*A; X2 = X1; printf("ισεσ ΠΡΑΓΜΑΤΙΚΕΣ ΡΙΖΕΣ=%f X2=%f",X1,X2); } else if( D > 0.0 ) { X1 = (-B + sqrt(d)) / 2*A; X2 = (-B - sqrt(d)) / 2*A; printf("διαφορετικεσ ΠΡΑΓΜΑΤΙΚΕΣ ΡΙΖΕΣ : X1=%f X2=%f", X1, X2); } } printf("\n"); } Ασκήσεις για λύση 1. Αν a = 1, b = 2, c = 1, πόσο είναι το max : if (a>=b && a>=c) max=a; else if (b>=c) max=b; else max=c; 64

66 3. Γράψτε ένα πρόγραμμα που με δεδομένο τη θερμοκρασία, να αποφασίζει ποιό σπορ είναι κατάλληλο για αυτόν τον καιρό. 4. Ο χρήστης να επιλέγει αν θέλει μετατροπή Δραχμών σε Ευρώ ή Ευρώ σε Δραχμές και να γίνεται η αντίστοιχη μετατροπή. (eurodrx) 5. Γράψτε ένα πρόγραμμα που να ελέγxει αν η απάντηση που έδωσε ο xρήστης είναι Ναι/Οxι αλλά με όλες τις δυνατές περιπτώσεις (Μικρά, Κεφαλαία, Ελληνικά, Αγγλικά κ.λπ.) 6. Να ζητάει ένα ποσό σε Ευρώ και να ελέγχει αν είναι μεγαλύτερο από 0, μικρότερο ή ίσο από μια σταθερά Χ και αν είναι ακέραιο πολλαπλάσιο του 50. Αν ο χρήστης δώσει και λεπτά να τα κόβει. Αν δεν είναι πολλαπλάσιο του 50 να το στρογγυλεύει στο πλησιέστερο πενηντάρικο. Σε κάθε περίπτωση να ρωτάει το χρήστη αν είναι αποδεκτό. Αν ο χρήστης απαντήσει Ν ή n ή Y ή y να το δέχεται, αλλιώς να το απορρίπτει και να το μηδενίζει. (elegxoi) 65

67 2.6.2 ΕΠΕΛΕΞΕ ΑΠΟ CASE - switch Αν οι δυνατές επιλογές γίνουν πολλές, τότε δεν συμφέρει να χρησιμοποιήσουμε πολλά ΕΑΝ ή if, αλλά την εντολή πολλαπλής επιλογής ΕΠΕΛΕΞΕ ή CASE ή switch. Στην εντολή αυτή, επιλέγεται για εκτέλεση μια από τις πολλές περιπτώσεις εντολών σύμφωνα με την τιμή μιας μεταβλητής : ΕΠΕΛΕΞΕ (μεταβλητή) ΑΠΟ ή CASE ( ) OF ή switch( ) Οι περιπτώσεις δίνονται μετά από τη φράση : ΠΕΡΙΠΤΩΣΗ (μεταβλητή=τιμή) ή case τιμή : -- στη C Αν δεν επιλεγεί καμία από τις περιπτώσεις, τότε εκτελείται η εντολή που ακολουθεί τη φράση ΕΞ ΟΡΙΣΜΟΥ ή default. Η Pascal δεν έχει την τελευταία δυνατότητα. Παράδειγμα CASE A OF 1 : WRITELN( ENA ); 2 : WRITELN( ΔΥΟ ); END: Πως φτιάχνουμε ένα μενού επιλογών για το χρήστη ΤΕΧΝΙΚΗ Τα περισσότερα προγράμματα δίνουν στο χρήστη ένα μενού επιλογών από τις οποίες ο χρήστης επιλέγει τι θέλει να κάνει. Η κατασκευή του μενού έχει τρείς φάσεις : 1. Εμφάνιση των επιλογών στο χρήστη 2. Διάβασμα της επιλογής του χρήστη 3. Εκτέλεση της επιλογής Ο χρήστης, για να επιλέξει, μπορεί να δίνει αριθούς ή χαρακτήρες. Αν κατά λάθος δώσει μια επιλογή που δεν βρίσκεται μέσα στις δυνατές επι-λογές, τότε, είναι καλό 66

68 το πρόγραμμα να του πεί ότι έδωσε επιλογή που δεν υπάρχει. Αν θέλουμε το μενού να επαναλαβάνεται, τότε το βάζουμε όλο μέσα σε μια ανακύκλωση. Η επιλογή ΕΞΟΔΟΣ, υπάρχει για να μπορέσει να βγεί, αν το μενού επαναλαμβάνεται. Ψευδοκώδικας ΔΕΔΟΜΕΝΑ EP : CHAR; ΤΥΠΩΣΕ( ΕΠΙΛΟΓΕΣ, EOL); ΤΥΠΩΣΕ( ,EOL); ΤΥΠΩΣΕ("A - ΑΝΕΥΡΕΣΗ",EOL); ΤΥΠΩΣΕ("Δ - ΔΙΑΓΡΑΦΗ",EOL); ΤΥΠΩΣΕ("E EΞΟΔΟΣ,EOL); ΤΥΠΩΣΕ(EOL); ΤΥΠΩΣΕ("ΔΩΣΤΕ ΕΝΤΟΛΗ :"); ΔΙΑΒΑΣΕ(epilogi); ΕΠΕΛΕΞΕ ( EP ) ΑΠΟ ΠΕΡΙΠΤΩΣΗ (ΕΠ= Α ) (Εντολές περίπωσης Α) ΠΕΡΙΠΤΩΣΗ (ΕΠ= Β ) (Εντολές περίπωσης Β) ΠΕΡΙΠΤΩΣΗ (ΕΠ= Ε ) ΤΥΠΩΣΕ( ΕΞΟΔΟΣ,EOL); ΕΞ ΟΡΙΣΜΟΥ ΤΥΠΩΣΕ( ΛΑΘΟΣ ΕΝΤΟΛΗ,EOL); ΕΠΙΛΟΓΗ-ΤΕΛΟΣ Pascal Var ep : CHAR; WRITELN( ΕΠΙΛΟΓΕΣ ); WRITELN( ); WRITELN("A - ΑΝΕΥΡΕΣΗ"); WRITELN("Δ - ΔΙΑΓΡΑΦΗ"); WRITELN("E EΞΟΔΟΣ ); WRITELN(); WRITE("ΔΩΣΤΕ ΕΝΤΟΛΗ :"); READLN(ep); CASE ep OF Α : BEGIN (Εντολές περίπωσης Α) END; B : BEGIN (Εντολές περίπωσης Β) END; E : WRITELN( ΕΞΟΔΟΣ ); END; (* CASE *) IF (ΕP <> Α ) AND (ΕP <> Β ) AND (ΕP <> Ε ) THEN WRITELN( lathos praxi... ); C char ep; printf("eπiλoγεσ\n ); printf( \n"); printf("a - ΑΝΕΥΡΕΣΗ\n"); printf("δ - ΔΙΑΓΡΑΦΗ\n"); printf("e - EΞΟΔΟΣ\n"); printf("\n"); printf("δωστε ΕΝΤΟΛΗ :"); ep=getchar(); switch(ep) { case A : (Εντολές περίπωσης Α) break; case B : (Εντολές περίπωσης Β) break; case E : printf( ΕΞΟΔΟΣ\n ); break; default : printf( ΛΑΘΟΣ ΕΝΤΟΛΗ\n ); } /* switch */ 67

69 O calculator με εντολή Πολλαπλής Επιλογής Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ CALCULATOR ΔΕΔΟΜΕΝΑ A,B,APOT : Real; P : Char; BEGIN ΤΥΠΩΣΕ( Dwste Arithmo_kai_simbolo:,EOL); ΔΙΑΒΑΣΕ(A,P,B); ΕΠΕΛΕΞΕ (P) ΑΠΟ ΠΕΡΙΠΤΩΣΗ (P= + ) APOT=a+b; ΠΕΡΙΠΤΩΣΗ (P= - ) APOT=a-b; ΠΕΡΙΠΤΩΣΗ (P= * ) APOT=a*b; ΠΕΡΙΠΤΩΣΗ (P= / ) EAN B = 0.0 TOTE ΤΥΠΩΣΕ("adynati.."); APOT= ; ΑΛΛΙΩΣ APOT=a/b; ΕΑΝ-ΤΕΛΟΣ ΕΞ ΟΡΙΣΜΟΥ ΤΥΠΩΣΕ( lathos praxi... ); ΕΠΙΛΟΓΗ-ΤΕΛΟΣ ΤΥΠΩΣΕ(APOT); ΤΕΛΟΣ Pascal PROGRAM CALCULATOR(INPUT,OUTPUT); Var A,B,APOT : Real; P : Char; BEGIN WRITE( Dwste Arithmo kai simbolo: ); READLN(A,P,B); CASE (P) OF + : APOT=a+b; - : APOT=a-b; * : APOT=a*b; / : BEGIN C #include <stdio.h> float a,b,apot; char p; main() { printf("dwste Arithmo_kai_simbolo:\n"); scanf("%f %c %f",&a,&p,&b); switch ( p ) { case '+' : apot=a+b; break; case '-' : apot=a-b; break; case '*' : apot=a*b; break; case '/' : if(b==0.0) { 68

70 IF B = 0.0 THEN BEGIN WRITELN("adynati.."); APOT= ; END ELSE APOT=a/b; END; (* case *) printf("adynati.."); apot= ; } else apot=a/b; break; default : printf("lathos praxi...\n"); } /* switch */ IF (P <> + ) AND (P <> - ) AND (P <> * ) AND (P <> / ) THEN WRITELN( lathos praxi... ); WRITELN(APOT); END. printf("%.f\n",apot); } 69

71 Ασκήσεις για λύση 1. Γράψτε ένα γενικό πρόγραμμα μετατροπής μονάδων (βάρους, μήκους, επιφάνειας, θερμοκρασίας κλπ.) 2. Γράψτε ενα πρόγραμμα που να ζητάει από το χρήστη αριθμούς μέχρι το 10 και να τους μετατρέπει σε Λατινική αρίθμηση ( 1=Ι, 2=ΙΙ, 3=ΙΙΙ, 4=ΙV, 5=V, 6=VI, 7=VII, 8=VIII, 9=IX, 10=Χ). 3. Γράψτε ένα γενικό πρόγραμμα μετατροπής νομισμάτων. 4. Φτιάξτε ένα μενού που να προτείνει στο χρήστη αν θέλει να δεί : 1. Την ημερομηνία (εντολή DATE) 2. Την Ωρα (εντολή TIME) 3. Τα περιεχόμενα του καταλόγου του (εντολή DIR) 4. Να καθαρίσει την οθόνη (εντολή CLS) 5. Να βγεί από το περιβάλλον DOS (εντολή EXIT) 5. Φτιάξτε το παρακάτω μενού με χρήση της ΕΠΕΛΕΞΕ ή CASE ή switch. Να χειρίζεται την περίπτωση που ο χρήστης δίνει λάθος εντολή. (menu) ΜΕΝΟΥ ΜΕΤΑΤΡΟΠΩΝ ==================== 1. Ευρώ σε Δραχμές 2. Δραχμές σε Ευρώ 3. Εξοδος 70

72 2.7 Εντολές Επανάληψης Ανακυκλώσεις (Loops) Τους υπολογιστές τους χρησιμοποιούμε πολύ συχνά για να κάνουν εργασίες επαναληπτικές, πράγμα στο οποίο είναι πολύ καλύτεροι από τους ανθρώπους γιατί δεν κουράζονται. Όταν λοιπόν κάποια εργασία πρέπει να γίνει πολλές φορές, επαναληπτικά, χρησιμοποιούνται οι εντολές ανακύκλωσης (loops). Αν ξέρουμε από την αρχή, πόσες φορές θα γίνει η ανακύκλωση (Μετρούμενη) χρησιμοποιούμε την εντολή : ΕΠΑΝΑΛΑΒΕ ή FOR DO (Pascal) ή for ( C ) Αν δεν ξέρουμε πόσες φορές θα γίνει αλλά η ανακύκλωση επαναλαμβάνεται για όσο ισχύει κάποια συνθήκη (Υπό συνθήκη) χρησιμοποιούμε τις εντολές : ΕΝΟΣΩ ΕΠΑΝΑΛΑΒΕ ή ΕΠΑΝΑΛΑΒΕ ΜΕΧΡΙ ή WHILE DO ή REPEAT UNTIL (Pascal) ή while ή do-while ( C ) Αν μπορεί να μη γίνει και καμία επανάληψη χρησιμοποιούμε την ΕΝΟΣΩ ΕΠΑΝΑΛΑΒΕ ή WHILE - DO στην Pascal ή while στη C. Αν πρέπει να γίνει οπωσδήποτε μια τουλάχιστον επανάληψη χρησιμοποιούμε την ΕΠΑΝΑΛΑΒΕ ΜΕΧΡΙ ή REPEAT UNTIL στην Pascal ή do-while στη C. 71

73 ΓΙΑ ΕΩΣ ΕΠΑΝΑΛΑΒΕ FOR DO - for ( ) I 1 I I + 1 Ομάδα Εντολών Σε κάθε ανακύκλωση πρώτα ελέγχεται αν έγινε ο προκαθορισμένος αριθμός ανακυκλώσεων (Ι<=Ν) και, Αν δεν έγινε, μετά εκτελείται η Ομάδα Εντολών I <=N NAI OXI Παραδείγματα Να τυπωθούν όλοι οι αριθμοί από το 1 ως το 10. Ψευδοκώδικας Pascal C ΔΕΔΟΜΕΝΑ Ι : INTEGER; ΓΙΑ Ι := 1 ΕΩΣ 10 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(Ι,EOL); ΓΙΑ-ΤΕΛΟΣ Var i : Integer; for i := 1 to 10 do writeln(i); int i; for(i=1;i<=10;i++) printf( %d\n,i); 72

74 ΕΝΟΣΩ ΕΠΑΝΑΛΑΒΕ WHILE DO while ( ) I 1 OXI I <=N I I + 1 Μετρούμενη Ανακύκλωση (κάνει ό,τι και το for) Σε κάθε ανακύκλωση πρώτα ελέγχεται η συνθήκη (Ι<=Ν) και, Αν ισχύει, μετά εκτελείται η Ομάδα Εντολών, Αν όχι (I>N) τότε δεν εκτελείται και η ανακύκλωση τερματίζει. NAI Oμάδα Eντολών Συνθήκη = Αληθής Ανακύκλωση υπό Συνθήκη Σε κάθε ανακύκλωση πρώτα ελέγχεται η συνθήκη και, Αν ισχύει (αληθής), μετά εκτελείται η Ομάδα Εντολών, Αν όχι (ψευδής) τότε δεν εκτελείται και η ανακύκλωση τερματίζει. Ψευδής Συνθήκη? Αληθής Oμάδα Eντολών 73

75 Παραδείγματα Να τυπωθούν όλοι οι αριθμοί από το 1 ως το 10 με while. Ψευδοκώδικας Pascal C ΔΕΔΟΜΕΝΑ Ι : INTEGER; I:=1; ΕΝΟΣΩ Ι <= 10 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(Ι,EOL); I := i + 1; ΕΝΟΣΩ-ΤΕΛΟΣ Var i : Integer; i:=1; while i<= 10 do begin writeln(i); i := i + 1; end; int i; i=1; while(i<=10) { printf( %d\n,i); i++; } Να τυπωθούν οι αριθμοί που το τετράγωνό τους δεν ξεπερνάει το Ψευδοκώδικας Pascal C ΔΕΔΟΜΕΝΑ Ι : INTEGER; I:=1; ΕΝΟΣΩ Ι*Ι <= 1000 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(Ι,EOL); I := I + 1; ΕΝΟΣΩ-ΤΕΛΟΣ Var i : Integer; i:=1; while i*i <= 1000 do begin writeln(i); i := i + 1; end; int i; i=1; while(i*i<=1000) { printf( %d\n,i); i++; } 74

76 ΕΠΑΝΑΛΑΒΕ ΜΕΧΡΙ - do while I 0 I I + 1 Ομάδα Eντολών Μετρούμενη Ανακύκλωση (κάνει ό,τι και το for) Σε κάθε ανακύκλωση πρώτα εκτελείται η Ομάδα Εντολών και μετά ελέγχεται η συνθήκη (Ι<Ν). Αν ισχύει, επαναλαμβάνει, αν όχι τερματίζει. I<Ν NAI OXI Παραδείγματα Να τυπωθούν όλοι οι αριθμοί από το 1 ως το 10 με do - while. Ψευδοκώδικας Pascal C ΔΕΔΟΜΕΝΑ Ι : INTEGER; I:=1; ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(Ι,EOL); I := Ι + 1; ΜΕΧΡΙ Ι > 10; Var i : Integer; int i; i:=1; i=1; repeat do { writeln(i); printf( %d\n,i); i := i + 1; i++; until i > 10; } while(i<=10) Ψευδοκώδικας Χρήσεις 75

77 ΓΙΑ ΓΙΑ μετρητής= από ΕΩΣ έως ΕΠΑΝΑΛΑΒΕ (εντολές) ΓΙΑ-ΤΕΛΟΣ Παραδείγματα ΣΤΑΘΕΡΕΣ Ν = 10; ΔΕΔΟΜΕΝΑ Ι : INTEGER; A,B : REAL; ΓΙΑ Ι = 1 ΕΩΣ 10 ΕΠΑΝΑΛΑΒΕ ΔΙΑΒΑΣΕ(A); B := A*2; ΤΥΠΩΣΕ(Β); ΓΙΑ-ΤΕΛΟΣ ΕΝΟΣΩ - ΕΠΑΝΑΛΑΒΕ ΕΝΟΣΩ συνθήκη ΕΠΑΝΑΛΑΒΕ (εντολές) ΕΝΟΣΩ-ΤΕΛΟΣ Παραδείγματα ΔΕΔΟΜΕΝΑ A : REAL; ΔΙΑΒΑΣΕ(Α); ΕΝΟΣΩ Α <> 0.0 ΕΠΑΝΑΛΑΒΕ ΔΙΑΒΑΣΕ(A); ΕΑΝ Α > 0.0 ΤΟΤΕ ΤΥΠΩΣΕ( ΘΕΤΙΚΟΣ ); ΑΛΛΙΩΣ EAN A < 0.0 TOTE ΤΥΠΩΣΕ( ΑΡΝΗΤΙΚΟΣ ); ΑΛΛΙΩΣ ΤΥΠΩΣΕ( ΜΗΔΕΝ ); ΕΑΝ-ΤΕΛΟΣ ΕΝΟΣΩ-ΤΕΛΟΣ Α := 1.0; ΕΝΟΣΩ Α <> 0 ΕΠΑΝΑΛΑΒΕ Α := Α + 1; ΤΥΠΩΣΕ(Α); ΕΝΟΣΩ-ΤΕΛΟΣ ΕΠΑΝΑΛΑΒΕ ΜΕΧΡΙ Οποτε χρειάζονται Ν επαναλήψεις. Διάβασμα, Εμφάνιση, Αθροισμα, Γινόμενο, Μέγιστο, Ελάχιστο, γνωστού πλήθους αριθμών. Μέτρηση πόσες φορές συμβαίνει κάτι. Δηλώνει τον αριθμό των επαναλήψεων Διαβάζει Ν αριθμούς και τυπώνει το διπλάσιό τους. Οποτε χρειάζονται επαναλήψεις χωρίς να ξέρουμε πόσες. Διάβασμα, Εμφάνιση, Αθροισμα, Γινόμενο, Μέγιστο, Ελάχιστο, άγνωστου πλήθους αριθμών. Μέτρηση πόσες φορές συμβαίνει κάτι. Διαβάζει αριθμούς και τυπώνει αν είναι θετικοί ή αρνητικοί. Σταματά με το μηδέν. Αν το πρώτο Α είναι μηδέν δεν θα μπεί ποτέ στις εντολές της ανακύκλωσης ΑΠΕΙΡΗ ΑΝΑΚΥΚΛΩΣΗ! Το πρόγραμμα δεν θα βγεί ποτέ από την ανακύκλωση. 76

78 ΕΠΑΝΑΛΑΒΕ (εντολές) ΜΕΧΡΙ συνθήκη Παραδείγματα ΔΕΔΟΜΕΝΑ A : REAL; ΕΠΑΝΑΛΑΒΕ ΔΙΑΒΑΣΕ(A); ΕΑΝ Α > 0.0 ΤΟΤΕ ΤΥΠΩΣΕ( ΘΕΤΙΚΟΣ ); ΑΛΛΙΩΣ EAN A < 0.0 TOTE ΤΥΠΩΣΕ( ΑΡΝΗΤΙΚΟΣ ); ΑΛΛΙΩΣ ΤΥΠΩΣΕ( ΜΗΔΕΝ ); ΕΑΝ-ΤΕΛΟΣ ΜΕΧΡΙ Α = 0.0; Ο,τι και στο ΕΝΟΣΩ, αλλά ο έλεγχος γίνεται στο τέλος οπότε γίνεται τουλάχιστον μια εκτέλεση των εντολών Εδώ θα μπεί στις εντολές της ανακύκλωσης ακόμη και αν το πρώτο Α είναι μηδέν. Pascal C Χρήσεις for for FOR μετρητής:= από TO έως DO (εντολές) Παραδείγματα Const Ν = 10; Var Ι : INTEGER; A,B : REAL; FOR Ι := 1 ΤΟ 10 DO BEGIN READLN(A); B := A*2; WRITELN(Β); END; WHILE - DO WHILE συνθήκη DO (εντολές) for(i=από;i<=έως;i++) { (εντολές) } #define N 10 int i; float a,b; for(i=0; i<10; i++){ scanf( %f,&a); b = a * 2; printf( %f\n,b); } while while ( συνθήκη ){ (εντολές) } Οποτε χρειάζονται Ν επαναλήψεις. Διάβασμα, Εμφάνιση, Αθροισμα, Γινόμενο, Μέγιστο, Ελάχιστο, γνωστού πλήθους αριθμών. Μέτρηση πόσες φορές συμβαίνει κάτι. Δηλώνει τον αριθμό των επαναλήψεων Διαβάζει Ν αριθμούς και τυπώνει το διπλάσιό τους. Οποτε χρειάζονται επαναλήψεις χωρίς να ξέρουμε πόσες. Διάβασμα, Εμφάνιση, Αθροισμα, Γινόμενο, Μέγιστο, Ελάχιστο, 77

79 Παραδείγματα Var A : REAL; READLN(Α); WHILE Α <> 0.0 DO BEGIN READLN(A); IF Α > 0.0 THEN WRITELN( ΘΕΤΙΚΟΣ ); ELSE IF A < 0.0 THEN WRITELN( ΑΡΝΗΤΙΚΟΣ ) ELSE WRITELN( ΜΗΔΕΝ ); END; Α := 1.0; WHILE Α <> 0 DO BEGIN Α := Α + 1; WRITELN(Α); END; ΕΠΑΝΑΛΑΒΕ ΜΕΧΡΙ REPEAT (εντολές) UNTIL συνθήκη Παραδείγματα Var A : REAL; REPEAT READLN(A); IF Α > 0.0 THEN WRITELN( ΘΕΤΙΚΟΣ ); ELSE IF A < 0.0 THEN WRITELN( ΑΡΝΗΤΙΚΟΣ ) ELSE WRITELN( ΜΗΔΕΝ ); UNTIL Α = 0.0; float a; scanf( %f,&a); while(a!= 0.0) { scanf( %f,&a); if (a > 0.0 ) printf( ΘΕΤΙΚΟΣ\n ); else if (a < 0.0 ) printf( ΑΡΝΗΤΙΚΟΣ\n ) ; else printf( MHDEN\n ); } a = 1.0; while ( a!= 0.0 ) { a++; printf( %f, a); } do while do (εντολές) while ( συνθήκη ); float a; do { scanf( %f,&a); if ( a > 0.0 ) printf( ΘΕΤΙΚΟΣ ); else if (a < 0.0 ) printf( ΑΡΝΗΤΙΚΟΣ ); else printf( MHDEN ); } while ( a!= 0.0 ); άγνωστου πλήθους αριθμών. Μέτρηση πόσες φορές συμβαίνει κάτι. Διαβάζει αριθμούς και τυπώνει αν είναι θετικοί ή αρνητικοί. Σταματά με το μηδέν. Αν το πρώτο Α είναι μηδέν δεν θα μπεί ποτέ στις εντολές της ανακύκλωσης ΑΠΕΙΡΗ ΑΝΑΚΥΚΛΩΣΗ! Το πρόγραμμα δεν θα βγεί ποτέ από την ανακύκλωση. Ο,τι και στο WHILE, αλλά ο έλεγχος γίνεται στο τέλος οπότε γίνεται τουλάχιστον μια εκτέλεση των εντολών Εδώ θα μπεί μέσα στις εντολές της ανακύκλωσης ακόμη και αν το πρώτο Α είναι μηδέν. 78

80 ΓΙΑ ΕΩΣ ΕΠΑΝΑΛΑΒΕ for ΤΕΧΝΙΚΗ Μέτρηση πόσες φορές συνέβη κάτι σε Ν επαναλήψεις Για να μετρήσουμε πόσες φορές συνέβη κάτι χρησιμοποιούμε μια ακέραια μεταβλητή που ονομάζεται μετρητής (counter). Η μεταβλητή αυτή αυξάνεται κατά ένα, κάθε φορά που συμβαίνει αυτό που θέλουμε να μετρήσουμε. Προσέξτε ότι στο μετρητή πρέπει να δοθεί αρχική τιμή Μηδέν, πριν αρχίσουν οι επαναλήψεις, αλλοιώς η μεταβλητή μπορεί να περιέχει μια τυχαία αρχική τιμή και οι αυξήσεις κατά ένα να γίνονται επάνω σε εκείνη την αρχική τυχαία τιμή, οπότε και το αποτέλεσμα θα είναι λάθος. COUNT 0 I 1 X ΣΥΝ ΘΗΚΗ NAI COUNT COUNT + 1 OXI I I + 1 I <N NAI OXI 79

81 Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΠΟΣΑ-ΘΕΤΙΚΑ ΔΕΔΟΜΕΝΑ I, COUNT : INTEGER; A : REAL; APΧH COUNT:= 0; ΓΙΑ I:=1 ΕΩΣ 10 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ('DOSTE ARITHMO :'); ΔΙΑΒΑΣΕ(A); EAN A > 0.0 TOTE COUNT := COUNT + 1; EAN-ΤΕΛΟΣ ΓΙΑ-ΤΕΛΟΣ ΤΥΠΩΣΕ('8ΕΤIΚA : ',COUNT); ΤΕΛΟΣ Pascal PROGRAM PosaThet (INPUT,OUTPUT); Var I, COUNT : INTEGER; A : REAL; BEGIN COUNT:= 0; FOR I:=1 TO 10 DO BEGIN WRITELN('DOSTE ARITHMO :'); READLN(A); IF A > 0.0 THEN COUNT := COUNT + 1; END; WRITELN('8ΕΤIΚA : ',COUNT); END. C #include <stdio.h> int i,count; float a; void main() { count=0; for (i=1;i<=10;i++) { printf("doste ARITHMO : "); scanf("%f",&a); if ( a > 0.0 ) count ++; } /* for */ printf("8etika : %d",count); } 80

82 Υπολογισμός Αθροίσματος Ν αριθμών ΤΕΧΝΙΚΗ Για να αθροίσουμε αριθμούς χρησιμοποιούμε μια μεταβλητή, ίδιου τύπου με τους αριθμούς που αθροίζονται, που ονομάζεται αθροιστής. Επάνω στη μεταβλητή αυτή αθροίζεται ο κάθε αριθμός. Προσέξτε ότι στον αθροιστή πρέπει να δοθεί αρχική τιμή Μηδέν, πριν αρχίσουν οι επαναλήψεις, αλλοιώς η μεταβλητή μπορεί να περιέχει μια τυχαία αρχική τιμή και οι αριθμοί να αθροίζονται επάνω σε εκείνη την αρχική τυχαία τιμή, οπότε και το αποτέλεσμα θα είναι λάθος. SUM=0 I 1 Α ΣΥΝ ΘΗΚΗ NAI SUM SUM + A OXI I I + 1 I <N NAI OXI 81

83 Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΑΘΡΟΙΣΜΑ-Ν-ΑΡΙΘΜΩΝ { YPOLOGISMOS ATHROISMATOS } ΔΕΔΟΜΕΝΑ I : INTEGER; A,SUM : REAL; APXH SUM:=0.0; ΓΙΑ I:=1 ΕΩΣ 10 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ('DOSTE ARITHMO :'); ΔΙΑΒΑΣΕ(A); SUM := SUM + A; ΓΙΑΤΕΛΟΣ ΤΥΠΩΣΕ('A8ROISMA =',SUM); ΤΕΛΟΣ Pascal PROGRAM SUMN (INPUT,OUTPUT); { YPOLOGISMOS ATHROISMATOS } VAR I : INTEGER; A,SUM : REAL; BEGIN SUM:=0.0; FOR I:=1 TO 10 DO BEGIN WRITELN('DOSTE ARITHMO :'); READLN(A); SUM := SUM + A; END; WRITELN('A8ROISMA =',SUM); END. C #include <stdio.h> /* ypologismos athroismatos */ int i; float a,sum; void main() { sum=0.0; for (i=1;i<=10;i++) { printf("doste ARITHMO : "); scanf("%f",&a); sum += a; } /* for */ printf("a8roisma = %f",sum); } 82

84 Υπολογισμός Γινομένου Ν αριθμών ΤΕΧΝΙΚΗ Το γινόμενο υπολογίζεται όπως και το άθροισμα. Προσέξτε όμως ότι στη μεταβλητή που συγκεντρώνει το γινόμενο πρέπει να δοθεί αρχική τιμή Ενα. Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΓΙΝΟΜΕΝΟ-Ν-ΑΡΙΘΜΩΝ { YPOLOGISMOS GINOMENOY } ΔΕΔΟΜΕΝΑ I : INTEGER; A,PROD : REAL; APXH PROD:= 1.0; ΓΙΑ I:=1 ΕΩΣ 10 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ('DOSTE ARITHMO :'); ΔΙΑΒΑΣΕ(A); PROD := PROD * A; ΓΙΑΤΕΛΟΣ ΤΥΠΩΣΕ('GINOMENO =',PROD); ΤΕΛΟΣ Pascal PROGRAM GINN (INPUT,OUTPUT); { YPOLOGISMOS GINOMENOY } VAR I : INTEGER; A,PROD : REAL; BEGIN PROD:= 1.0; FOR I:=1 TO 10 DO BEGIN WRITELN('DOSTE ARITHMO :'); READLN(A); PROD := PROD * A; END; WRITELN('GINOMENO =',PROD); END. C #include <stdio.h> /* ypologismos ginomenoy */ int i; float a,prod; void main() { prod=1.0; for (i=1;i<=10;i++) { printf("doste ARITHMO : "); scanf("%f",&a); prod *= a; } /* for */ printf("ginomeno = %f",prod); } 83

85 Μέσος Ορος Ν Αριθμών ΤΕΧΝΙΚΗ Για τον υπολογισμό του Μέσου Ορου αριθμών χρειάζονται μόνο το άθροισμα και το πλήθος τους. Αν το πλήθος είναι ήδη γνωστό, τότε υπολογίζουμε το άθροισμα με ένα ΓΙΑ ΕΩΣ ΕΠΑΝΑΛΑΒΕ (for). Προσέξτε ότι επειδή θα επακολουθήσει διαίρεση, αν η διαίρεση γίνει μεταξύ δύο ακεραίων, τότε θα έχουμε αποκοπή του δεκαδικού μέρους, οπότε και το αποτέλεσμα μπορεί να είναι λάθος. Γι αυτό, είναι καλή πρακτική, να δηλώνουμε τις μεταβλητές του αθροιστή και του μέσου όρου σαν πραγματικές, ανεξάρτητα από το είδος των αριθμών. Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΜΕΣΟΣ-ΟΡΟΣ-Ν-ΑΡΙΘΜΩΝ ΔΕΔΟΜΕΝΑ I : INTEGER; A,SUM,MO : REAL; APXH SUM:=0.0; ΓΙΑ I:=1 ΕΩΣ 10 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ('DOSTE ARITHMO :'); ΔΙΑΒΑΣΕ(A); SUM := SUM + A; ΓΙΑΤΕΛΟΣ MO := SUM/10; ΤΥΠΩΣΕ('MESOS OROS =',MO); ΤΕΛΟΣ Pascal PROGRAM MON (INPUT,OUTPUT); VAR I : INTEGER; A,SUM,MO : REAL; BEGIN SUM:=0.0; FOR I:=1 TO 10 DO BEGIN WRITELN('DOSTE ARITHMO :'); READLN(A); SUM := SUM + A; END; MO := SUM/10; C #include <stdio.h> int i; float a,sum,mo; void main() { sum=0.0; for (i=1;i<=10;i++) { printf("doste ARITHMO : "); scanf("%f",&a); sum += a; } /* for */ mo = sum/10; printf("mesos OROS = %f",mo); 84

86 WRITELN('MESOS OROS =',MO); END. Μέγιστος και Ελάχιστος Ν Αριθμών } ΤΕΧΝΙΚΗ Ένα πολύ συνηθισμένο πρόβλημα είναι η εύρεση του μέγιστου ή του ελάχιστου από μια ομάδα Ν αριθμών. Η τεχνική για να βρούμε για παράδειγμα τον μέγιστο, είναι να χρησιμοποιήσουμε μια μεταβλητή MAX η οποία θα παίρνει σε κάθε επανάληψη τον μεγαλύτερο από τους αριθμούς που πέρασαν. Για να δουλέψει σωστά, αρχικά δίνουμε στη MAX μια πολύ μικρή τιμή, η οποία στη συνέχεια θα αντικατασταθεί οπωσδήποτε από κάποιον από τους αριθμούς. Έτσι, εάν οι αριθμοί είναι θετικοί ως αρχική τιμή στον ΜΑΧ βάζουμε το 0. Εάν είναι ακέραιοι βάζουμε τον μικρότερο ακέραιο αριθμό που μπορεί να αναπαρασταθεί στον υπολογιστή δηλαδή το Σε κάθε επανάληψη συγκρίνεται ο αριθμός που διαβάστηκε με τη ΜΑΧ και αν είναι μεγαλύτερος, τότε την αντικαθιστά. Έτσι στο τέλος των επαναλήψεων, στη ΜΑΧ θα έχει μείνει ο μέγιστος. Για τον ελάχιστο, κάνουμε απλά τα αντίθετα, δηλαδή χρησιμοποιούμε μια μεταβλητή MIN, δίνουμε στη MIN μια αρκετά μεγάλη τιμή και στις επαναλήψεις αφήνουμε στη MIN τον κάθε φορά μικρότερο. 85

87 ΜΑΧ= Πολύ Μικρή Τιμή 0 I 1 Α Α > ΜΑΧ NAI ΜΑΧ A OXI I I + 1 I < N NAI OXI 86

88 Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΜΕΓ-ΕΛΑΧ-Ν-ΑΡΙΘΜΩΝ { ΕΥΡΕΣΗ ΜΕΓΙΣΤΟΥ-ΕΛΑΧΙΣΤΟΥ } ΔΕΔΟΜΕΝΑ I,ΜΙΝ,ΜΑΧ,Α : INTEGER; APXH ΜΙΝ:=32767; ΜΑΧ:=-32768; ΓΙΑ I:=1 ΕΩΣ 10 DO ΤΥΠΩΣΕ('DOSTE ARITHMO :'); ΔΙΑΒΑΣΕ(A); ΕΑΝ Α > ΜΑΧ ΤΟΤΕ ΜΑΧ := Α; ΕΑΝ Α < ΜΙΝ ΤΟΤΕ ΜΙΝ := Α; ΓΙΑΤΕΛΟΣ ΤΥΠΩΣΕ( O MEGALYTEROS,ΜΑΧ); ΤΥΠΩΣΕ( O MIKROTEROS,ΜΙΝ); ΤΕΛΟΣ Pascal PROGRAM MAXMIN (INPUT,OUTPUT); { ΕΥΡΕΣΗ ΜΕΓΙΣΤΟΥ-ΕΛΑΧΙΣΤΟΥ } VAR I,ΜΙΝ,ΜΑΧ,Α : INTEGER; BEGIN ΜΙΝ:=32767; ΜΑΧ:=-32768; FOR I:=1 TO 10 DO BEGIN WRITELN('DOSTE ARITHMO :'); READLN(A); IF Α > ΜΑΧ THEN ΜΑΧ := Α; IF Α < ΜΙΝ THEN ΜΙΝ := Α; END; WRITELN( O MEGALYTEROS,ΜΑΧ); WRITELN( O MIKROTEROS,ΜΙΝ); END. C #include <stdio.h> /* Eyresi megistoy-elaxistoy */ int min,max,a,i; main() { min=32767; max=-32768; for(i=1;i<10;i++) { printf("dose ARITHMO:"); scanf("%d",&a); if(a>max) max=a; if(a<min) min=a; } printf("o MEGALYTEROS %d\n",max); printf("o MIKROTEROS %d\n",min); } 87

89 ΕΝΟΣΩ ΕΠΑΝΑΛΑΒΕ Μέσος όρος άγνωστου πλήθους αριθμών ΤΕΧΝΙΚΗ Όταν δεν είναι γνωστό από πριν πόσες επαναλήψεις πρέπει να γίνουν, τότε συμφωνούμε ότι οι επαναλήψεις θα σταματήσουν όταν γίνει κάτι, για παράδειγμα όταν διαβαστεί κάποια συγκεκριμένη τιμή (π.χ. 1) που ονομάζεται «φρουρός» (sentinel). Εδώ το πλήθος των αριθμών (και των επαναλήψεων) δεν είναι γνωστό, αφού το γνωρίζει μόνον ο χρήστης που θα δώσει τη συμφωνημένη τιμή για να σταματήσει. Αρα δεν μπορούμε να χρησιμοποιήσουμε ΓΙΑ (for). Εδώ πρέπει να χρησιμοποιήσουμε ΕΝΟΣΩ (while). Επίσης, αφού το πλήθος δεν είναι γνωστό, εκτός από το άθροισμα πρέπει να μετρήσουμε και το πλήθος, οπότε χρησιμοποιούμε το μετρητή COUNT. Το ΕΑΝ υπάρχει για να μην συμπεριληφθεί και το 1 στους αριθμούς και χαλάσει το αποτέλεσμα. Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΜΕΣΟΣ-ΟΡΟΣ-ΑΡΙΘΜΩΝ ΔΕΔΟΜΕΝΑ A,SUM : REAL; COUNT : INTEGER; APXH SUM:=0.0; COUNT=0; ΕΝΟΣΩ Α <> -1.0 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ('DOSTE ARITHMO :'); ΔΙΑΒΑΣΕ(A); ΕΑΝ Α <> -1.0 ΤΟΤΕ COUNT := COUNT + 1; SUM := SUM + A; EAN-ΤΕΛΟΣ ΕΝΟΣΩ-ΤΕΛΟΣ ΤΥΠΩΣΕ('MESOS OROS =',SUM/COUNT); ΤΕΛΟΣ 88

90 Pascal PROGRAM MO (INPUT,OUTPUT); VAR A,SUM : REAL; COUNT : INTEGER; BEGIN SUM:=0.0; COUNT=0; WHILE Α <> -1.0 DO BEGIN WRITELN('DOSTE ARITHMO :'); READLN(A); IF Α <> -1.0 THEN BEGIN COUNT := COUNT + 1; SUM := SUM + A; END; END; WRITELN('MESOS OROS=',SUM/COUNT); END. C #include <stdio.h> float a,sum; int count; main() { sum=0.0; count=0; while (a!=-1) { printf ("dose arithmo:"); scanf ("%f",&a); if(a!=-1) { count++; sum+=a; } } /* while */ printf("mo=%f\n",sum/count); } 89

91 Εύρεση του Μέγιστου Κοινού Διαιρέτη (ΜΚΔ) δύο αριθμών Ο αλγόριθμος αυτός, είναι ο γνωστός αλγόριθμος του Ευκλείδη που βρίσκει τον μέγιστο κοινό διαιρέτη δύο ακέραιων αριθμών. Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΜΚΔ { PROGRAMMA MKD } ΔΕΔΟΜΕΝΑ X,Y,Z,MKD : INTEGER; APXH ΤΥΠΩΣΕ('DOSTE 2 ARI8MOYS '); ΔΙΑΒΑΣΕ(X,Y); Z := X MOD Y; ΕΝΟΣΩ (Z <> 0) ΕΠΑΝΑΛΑΒΕ X := Y; Y := Z; Z := X MOD Y; ΕΝΟΣΩΤΕΛΟΣ; MKD := Y; ΤΥΠΩΣΕ('M.K.D. = ',MKD); ΤΕΛΟΣ Pascal PROGRAM MKD (INPUT,OUTPUT); { PROGRAMMA MKD } VAR X,Y,Z,MKD : INTEGER; BEGIN WRITELN('DOSTE 2 ARI8MOYS '); READLN(X,Y); Z := X MOD Y; WHILE (Z <> 0) DO BEGIN X := Y; Y := Z; Z := X MOD Y; END; MKD := Y; WRITELN('M.K.D. = ',MKD); END. C #include <stdio.h> /* programma mkd */ int x,y,z,mkd; void main() { printf("doste 2 ARI8MOYS "); scanf("%d %d",&x,&y); z=x%y; while ((z!=0)) { x=y; y=z; z=x%y; } /* while */; mkd=y; printf("m.k.d. = %d\n",mkd); } 90

92 ΕΠΑΝΑΛΑΒΕ ΜΕΧΡΙ Επανάληψη μέχρι ο χρήστης δώσει τη σωστή τιμή ΤΕΧΝΙΚΗ Όταν ζητάμε δεδομένα από το χρήστη, είναι σκόπιμο να ελέγχουμε, όσο γίνεται, αν ο χρήστης έδωσε σωστά (αποδεκτά) δεδομένα. Αν τα δεδομένα που διαβάστηκαν δεν φαίνονται σωστά, το πρόγραμμα τα απορρίπτει και τα ξαναζητά μέχρι ο χρήστης να δώσει τα σωστά. Ο έλεγχος αυτός είναι μια πολύ καλή πρακτική γιατί προλαμβάνει περισσότερα προβλήματα αργότερα. Ο ευκολότερος τρόπος για να γίνει ο έλεγχος είναι με χρήση της ΕΠΑΝΑΛΑΒΕ-ΜΕΧΡΙ. Το πρόγραμμα ανακυκλώνει όσο δεν δίνεται τιμή μέσα στα αποδεκτά όρια. Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΠΟΣΟ-ΕΝΤΟΣ-ΟΡΙΩΝ { ZHTEITAI POSO APO 1 OS 999 } ΔΕΔΟΜΕΝΑ POSO : INTEGER ΑΡΧΗ ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ( ΔΩΣΤΕ ΠΟΣΟ : ); ΔΙΑΒΑΣΕ(POSO); ΜΕΧΡΙ POSO >=1 AND POSO <=999; ΤΥΠΩΣΕ( ΠΟΣΟ ΣΩΣΤΟ ); ΤΕΛΟΣ Pascal PROGRAM POSOIN (INPUT,OUTPUT); { ZHTEITAI POSO APO 1 OS 999 } VAR POSO : INTEGER BEGIN REPEAT WRITE( ΔΩΣΤΕ ΠΟΣΟ : ); READLN(POSO); UNTIL (POSO >=1 AND POSO <=999); WRITELN( ΠΟΣΟ ΣΩΣΤΟ ); C #include <stdio.h> /* zhteitai poso apo 1 os 999 */ int poso; main() { do { printf("doste poso:"); scanf ("%d",&poso); } while ((poso<1) (poso>999)); printf ("poso sosto"); 91

93 END. } Ασκήσεις για λύση Με ΓΙΑ 1. Να βρίσκει το άθροισμα των αριθμών από 1 ως 100. (sum1) 2. Να βρίσκει το άθροισμα των μονών και των ζυγών αριθμών από 1 ως 100. (sum2) 3. Ο χρήστης να πληκτρολογεί 10 αριθμούς και το πρόγραμμα να βρίσκει πόσοι είναι αρνητικοί, πόσοι πάνω από 5 και πόσοι κάτω από 100 (count1). 4. Υπολογίζει τον πίνακα της προπαίδειας (propaid) 5. Βρίσκει τον Μέσο Ορο Ν αριθμών που πληκτρολογεί ο χρήστης. (mo1) 6. Ο συνολικός αριθμών στηλών ΠΡΟΠΟ ( 3 13 ) με δύο τρόπους ( ). (propo) 7. Βρείτε πόσο θα έχει γίνει ένα κεφάλαιο μετά από Ν έτη. (tokoi) Τελικό Κεφάλαιο = Αρχικό Κεφάλαιο * (1 + ε) Ν 8. Υπολογίζει το Ν Παραγοντικό. (n! = 1 * 2 * 3 * n) (npar) 9. Υπολογίστε το για έως Ν=49. Δείξτε όλες τις τιμές του n! Δοκιμάστε να δηλώσετε τη μεταβλητή που περιέχει το n! σαν Integer και Real. 10. Να υπολογιστούν οι πιθανότητες του Λόττο και του Τζόκερ.( lotjok ) Συνδυασμοί n ανά m = n! / ((n-m)! m!) Πιθανότητες LOTTO : 49 ανά 6 ( ) Πιθανότητες ΤΖΟΚΕΡ : 45 ανά 5 επί 20 ( ) 11. Γράψτε ένα πρόγραμμα που να ζωγραφίζει ένα τετράγωνο (με - και με γραφικά). 12. Γράψτε ένα πρόγραμμα που να παρουσιάζει όλους τους χαρακτήρες που μπορεί να εμφανίσει η οθόνη σας. 92

94 13. Γράψτε πρόγραμμα που να υψώνει έναν ακέραιο αριθμό σε ακέραια δύναμη. Με ΕΝΟΣΩ 14. Μέσος Ορος αριθμών που πληκτρολογεί ο χρήστης μέχρι να δώσει -1. (mo2) 15. Μέγιστος και Ελάχιστος αριθμών που πληκτρολογεί ο χρήστης μέχρι να δώσει -1. (minmax) 16. Mετράει τους χαρακτήρες μιας φράσης που πληκτρολογεί ο χρήστης.(chrcount) 17. Mετατρέπει τους χαρακτήρες μιας φράσης στα κεφαλαία. (kefalaia) ( A = 65, a =97 ) 18. Γράψτε πρόγραμμα που να μετράει τους χαρακτήρες, γραμμές και λέξεις κειμένου. 19. Γράψτε ένα πρόγραμμα που να βρίσκει πόσες φορές εμφανίστηκε το κάθε κεφαλαίο λατινικό σε ένα κείμενο που διαβάζεται από την είσοδο. Με ΕΠΑΝΑΛΑΒΕ - ΕΝΟΣΩ 20. Δέχεται μια τιμή (σε Ευρώ) μόνο αν είναι μέσα σε δύο όρια, αλλοιώς επαναλαμβάνει. 21. Τη πρώτη φορά λέει ΔΩΣΤΕ :. Αν δοθεί τιμή εκτός ορίων, λέει : Η ΤΙΜΗ ΠΟΥ ΔΩΣΑΤΕ ΕΙΝΑΙ ΕΚΤΟΣ ΟΡΙΩΝ, ΔΩΣΤΕ ΑΛΛΗ : (oria) 22. Ζητάει από το χρήστη τον μυστικό κωδικό του (αριθμό PIN) που είναι τετραψήφιος ακέραιος ( ). Ο κωδικός του χρήστη δηλώνεται σαν σταθερά. Αν ο χρήστης δώσει τον σωστό, τον αφήνει να συνεχίσει, αν όχι, τον αφήνει να ξαναπροσπαθήσει μέχρι τρείς φορές. (atm) 23. Γράψτε ένα πρόγραμμα για να παίζετε ζάρια με τον υπολογιστή.να τελειώνει όταν ο χρήστης δηλώνει ότι δεν θέλει να παίξει άλλο. Με οποιαδήποτε εντολή Ανακύκλωσης 93

95 24. Γράψτε πρόγραμμα που να βρίσκει τον μέσο όρο αριθμών που διαβάζονται από το πληκτρολόγιο, όταν: a. α) το πλήθος τους είναι γνωστό από πριν b. β) το πλήθος τους δίνεται από το χρήστη c. γ) ο χρήστης για να σταματήσει δίνει κάποιον συγκεκριμένο αριθμό 25. Γράψτε ενα loop που να υπολογίζει το άθροισμα κάθε τρίτου ακέραιου, αρχίζοντας με i=2, για i<100. Χρησιμοποιήστε τρείς τρόπους : Με while, με do while και με for. 26. Η σελίδα ενός βιβλίου Εσόδων-Εξόδων έχει την εξής μορφή : Ημερ. Παραστ. Πράξη Αξία ΦΠΑ 0% 9% 19% Εκ Μεταφοράς: 23,45 12,50 5,00 16,26 11/2 TΠΔΑ 134 Κ. Λιβαδάς 40,00 2,70 13/2 ΑΠΥ 52 I.C.S. 15,00 0,00 18/2 TΠ 31 Μ.Μικρομεσαίος 45,00 7,20 Εις Μεταφορά: 123,45 12,50 7,70 23,86 Γράψτε το πρόγραμμα που διαβάζει τα δεδομένα (Ημερομηνία, Παραστατικό, Πράξη, Αξία, Συντελεστής ΦΠΑ), υπολογίζει τον ΦΠΑ και τα αθροίσματα και τυπώνει τη σελίδα, όπως εμφανίζεται και στο βιβλίο Εσόδων-Εξόδων. 27. Αν βάζετε στην Τράπεζα 50,00 ευρώ το μήνα, πόσα χρήματα θα έχετε μετά από 10 χρόνια; Πόσα μετά από 20; Οι καταθέσεις τοκίζονται με ετήσιο επιτόκιο (που δίνεται από το χρήστη) δύο φορές το χρόνο. 94

96 2.8 Πίνακες (Arrays) Πολλές φορές συμβαίνει να έχουμε πολλά όμοια δεδομένα που θέλουμε να τα αποθηκεύσουμε και να τα χειριστούμε κατά ομοιόμορφο τρόπο. Στην περίπτωση αυτή χρησιμοποιούμε Πίνακες. Οι Πίνακες (Arrays) είναι συλλογές από όμοιες μεταβλητές (δηλαδή μετα-βλητές του ίδιου τύπου, π.χ. όλοι ακέραιοι αριθμοί). Οι Πίνακες επιτρέπουν την αποθήκευση πολλών τιμών ίδιου τύπου και τον ομαδικό χειρισμό των στοιχείων του πίνακα (δηλαδή των όμοιων μεταβλητών) με έναν ενιαίο τρόπο. Οι πίνακες χρησιμεύουν όταν : Το πρόβλημα είναι από τη φύση του πίνακας, π.χ. ταξινόμηση αριθμών, βαθμολογία, μισθοδοσία, μαθηματικό πρόβλημα κ.λπ. Τα δεδομένα ή κάποια ενδιάμεσα αποτελέσματα, πρέπει να χρησιμοποιηθούν παραπάνω από μια φορές. Πρέπει να αποθηκευθούν πολλά, ίδιου τύπου, αποτελέσματα. Πρέπει να αποθηκευθεί ακολουθία χαρακτήρων (String). Το βασικό πλεονέκτημα της χρήσης πινάκων είναι η δυνατότητα που μας δίνουν για μαζικό χειρισμό πλήθους όμοιων μεταβλητών. 95

97 2.8.1 Πίνακες μιας διάστασης Στους πίνακες μιας διάστασης, τα στοιχεία αποθηκεύονται σαν μια σειρά μεταβλητών με ονόματα Π[0], Π[1], Π[2], Π[0] Π[1] Π[2] Π[3] Π[4] Π[5] Π[6] Π[7] Π[8] Π[9] Ενας πίνακας διάστασης Ν, περιέxει Ν μεταβλητές (στοιχεία του πίνακα), του τύπου της δήλωσης. Τα στοιχεία αριθμούνται σύμφωνα με τη δήλωση των δεικτών του πίνακα. Για παράδειγμα : Α : ARRAY[0..9] OF Integer; σημαίνει πίνακας με όνομα A, με 10 στοιχεία, αριθμημένα από 0 ως 9. Στη C τα στοιχεία αριθμούνται πάντοτε από 0 έως Ν-1. ΤΕΧΝΙΚΕΣ Ψευδοκώδικας Δήλωση Μονοδιάστατου Πίνακα Χρήση των στοιχείων του Πίνακα A : ARRAY[0..9] OF Integer; I,SUM : Integer; A[0] := 5; A[1] := A[0] + 2; Αποθήκευση τιμών σε μονοδιάστατο πίνακα Αθροιση τιμών σε μονοδιάστατο πίνακα Εμφάνιση (εκτύπωση) τιμών μονοδιάστατου πίνακα EAN ( A[I] = 0 ) TOTE ΕΑΝ-ΤΕΛΟΣ; ΓΙΑ Ι:= 0 ΕΩΣ 9 ΕΠΑΝΑΛΑΒΕ ΔΙΑΒΑΣΕ(Α[Ι]); ΓΙΑ-ΤΕΛΟΣ; SUM:=0; ΓΙΑ Ι:= 0 ΕΩΣ 9 ΕΠΑΝΑΛΑΒΕ SUM := SUM + Α[Ι]; ΓΙΑ-ΤΕΛΟΣ; ΓΙΑ Ι:= 0 ΕΩΣ 9 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(Α[Ι]); ΓΙΑ-ΤΕΛΟΣ; 96

98 Δήλωση Μονοδιάστατου Πίνακα Χρήση των στοιχείων του Πίνακα Αποθήκευση τιμών σε μονοδιάστατο πίνακα Αθροιση τιμών σε μονοδιάστατο πίνακα Εμφάνιση (εκτύπωση) τιμών μονοδιάστατου πίνακα Pascal A : ARRAY[0..9] OF Integer; I,SUM : Integer; A[0] := 5; A[1] := A[0] + 2; IF ( A[I] = 0 ) THEN FOR Ι:= 0 TO 9 DO READLN(Α[Ι]); SUM:=0; FOR Ι:= 0 TO 9 DO SUM := SUM + Α[Ι]; FOR Ι:= 0 TO 9 DO WRITELN(Α[Ι]); C int a[10]; int i, sum; a[0] = 5; a[1] = a[0] + 2; if ( a[i] == 0 ) { } for ( i=0; i<=9; i++ ) scanf("%d", &a[i] ); sum=0; for ( i=0; i<=9; i++ ) sum += a[i]; for ( i=0; i<=9; i++ ) printf("%d\n",a[i] ); Στις παραπάνω περιπτώσεις δηλώνεται ένας μονοδιάστατος πίνακας 10 ακεραίων αριθμών. Τα στοιχεία του πίνακα είναι τα Α[0], Α[1], Α[2],, Α[8], Α[9]. Στον ψευδοκώδικα δεν είναι υποχρεωτικό οι δείκτες των στοιχείων να αρχίζουν από 0. Θα μπορούσαν να αρχίζουν από οτιδήποτε. Στη C όμως αρχίζουν πάντοτε από 0, γι αυτό και διαλέξαμε το παραπάνω παράδειγμα, ώστε να είναι ισοδύναμα. Παραδείγματα Θέλουμε να αποθηκεύσουμε τις ώρες που εργάζεται ένας εργαζόμενος για κάθε μέρα του μήνα και να βρούμε πόσες ώρες εργάσθηκε συνολικά. Δήλωση μονοδιάστατου πίνακα Αρχικοποίηση (μηδενισμός) Ψευδοκώδικας ΣΤΑΘΕΡΕΣ Ν = 30; ΔΕΔΟΜΕΝΑ A : ARRAY[0..Ν] OF REAL; SUM : REAL; Ι : INTEGER; ΓΙΑ Ι := 0 ΕΩΣ Ν-1 ΕΠΑΝΑΛΑΒΕ Α[Ι] := 0.0; ΓΙΑ-ΤΕΛΟΣ 97

99 Αποθήκευση τιμών σε πίνακα Εμφάνιση στοιχείων Αθροιση στοιχείων ΓΙΑ Ι := 0 ΕΩΣ Ν-1 ΕΠΑΝΑΛΑΒΕ ΔΙΑΒΑΣΕ(Α[Ι]); ΓΙΑ-ΤΕΛΟΣ ΓΙΑ Ι := 0 ΕΩΣ Ν-1 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ( ΗΜΕΡΑ,Ι, ΩΡΕΣ,Α[Ι]); ΓΙΑ-ΤΕΛΟΣ SUM := 0.0; ΓΙΑ Ι := 0 ΕΩΣ Ν-1 ΕΠΑΝΑΛΑΒΕ SUM := SUM + Α[Ι]; ΓΙΑ-ΤΕΛΟΣ Δήλωση μονοδιάστατου πίνακα Αρχικοποίηση (μηδενισμός) Αποθήκευση τιμών σε πίνακα Εμφάνιση στοιχείων Αθροιση στοιχείων Pascal Const Ν = 30; VAR A : ARRAY[0..Ν] OF REAL; SUM : REAL; Ι : INTEGER; FOR Ι := 0 TO Ν-1 DO Α[Ι] := 0.0; FOR Ι := 0 TO Ν-1 DO READLN(Α[Ι]); FOR Ι := 0 TO Ν-1 DO WRITELN( ΗΜΕΡΑ,Ι, ΩΡΕΣ,Α[Ι]); SUM := 0.0; FOR Ι := 0 TO Ν-1 DO SUM := SUM + Α[Ι]; C #define N 31 float a[n],sum; int i; for ( i=0; i<n; i++ ) a[i] = 0.0; for ( i=0; i<n; i++ ) scanf("%f", &a[i] ); for ( i=0; i<n; i++ ) printf("ημερα %d ΩΡΕΣ %f\n", i, a[i] ); sum = 0.0; for ( i=0; i<n; i++ ) sum += a[i]; Μέσος Ορος συγκεκριμένου αριθμού στοιχείων σε Πίνακα Να βρεθεί ο Μέσος Ορος των Μ στοιχείων που είναι αποθηκευμένα σε πίνακα μιας διάστασης. Για να λύσουμε τα πρόβλημα, πρέπει να δηλώσουμε τον πίνακα, να διαβάσουμε τις τιμές από το πληκτορλόγιο, να τις αποθηκεύσουμε στον πίνακα και να εφαρμόσουμε την τεχνική της άθροισης που γνωρίζουμε. Επειδή ο αριθμός των στοιχείων είναι γνωστός, θα χρησιμοποιήσουμε το ΓΙΑ (for). Για τον Μέσο Ορο, θα διαιρέσουμε το άθροισμα δια Μ. 98

100 Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΜΟ-ΣΕ-ΠΙΝΑΚΑ { MO-PINAKA-1XΝ } ΣΤΑΘΕΡΕΣ M = 10; ΔΕΔΟΜΕΝΑ P : ARRAY[1..M] OF INTEGER; N,X,I : INTEGER; MO : REAL; APXH ΔΙΑΒΑΣΕ(N); ΓΙΑ I:= 1 ΕΩΣ N ΕΠΑΝΑΛΑΒΕ ΔΙΑΒΑΣΕ(P[I]); ΓΙΑ-ΤΕΛΟΣ X:=0; ΓΙΑ I:= 1 ΕΩΣ N ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(P[I]); X := X + P[I]; ΓΙΑ-ΤΕΛΟΣ MO := X/N; ΤΥΠΩΣΕ(MO); ΤΕΛΟΣ Pascal PROGRAM MOPIN (INPUT,OUTPUT); { MO-PINAKA-1XΝ } Const M = 10; VAR P : ARRAY[1..M] OF INTEGER; N,X,I : INTEGER; MO : REAL; BEGIN READLN(N); FOR I:= 1 TO N DO READLN(P[I]); X:=0; FOR I:= 1 TO N DO BEGIN WRITELN(P[I]); X := X + P[I]; END; MO := X/N; WRITELN(MO); END. C #include <stdio.h> /* mo - pinaka - 1XN */ #define M 11 int p[μ]; int n,x,i; float mo; main() { scanf("%d",&n); for (i=1;i<=n;i++) { scanf("%d",&p[i]); } /* for */ x=0; for (i=1;i<=n;i++) { printf("%d",p[i]); x += p[i]; } /* for */ mo= (float)x/n; printf("%f",mo); } 99

101 Πόσο συχνά εμφανίστηκε ο κάθε αριθμός To παρακάτω πρόγραμμα διαβάζει ΜΑΧ αριθμούς από 0 έως ΜΑΧ, και μετράει πόσες φορές πληκτρολογήθηκε ο κάθε αριθμός. Οι συχνότητες εμφάνισης κάθε αριθμού κρατιούνται σε έναν πίνακα Μ. Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΣΥΧΝΟΤΗΤΑ-ΧΑΡΑΚΤΗΡΩΝ { EYRESH THS SYXNOTHTAS EMFANISHS ARI8MON } ΣΤΑΘΕΡΕΣ MAX=10; ΔΕΔΟΜΕΝΑ K,N : INTEGER; M : ARRAY[0..MAX] OF INTEGER; APXH ΓΙΑ K := 1 ΕΩΣ MAX ΕΠΑΝΑΛΑΒΕ M[K] := 0; ΓΙΑ-ΤΕΛΟΣ ΤΥΠΩΣΕ('DOSTE ARI8MOYS'); ΤΥΠΩΣΕ(EOL); ΓΙΑ K:=1 ΕΩΣ MAX ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ('DOSTE ARI8MO : '); ΔΙΑΒΑΣΕ(N); M[Ν] := M[Ν]+1; ΓΙΑ-ΤΕΛΟΣ ΓΙΑ K := 1 ΕΩΣ MAX ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(' ',M[K]); ΓΙΑ-ΤΕΛΟΣ ΤΕΛΟΣ Pascal PROGRAM CHARSYXN (INPUT,OUTPUT); { EYRESH THS SYXNOTHTAS EMFANISHS ARI8MON } Const MAX=10; VAR K,N : INTEGER; M : ARRAY[0..MAX] OF INTEGER; C #include <stdio.h> /* eyresh ths syxnothtas emfanishs ari8mon */ const ΜΑΧ=10; int k,n; int m[μαχ]; 100

102 BEGIN FOR K := 1 TO MAX DO M[K] := 0; WRITELN('DOSTE ARI8MOYS'); FOR K:=1 TO MAX DO BEGIN WRITELN('DOSTE ARI8MO : '); READLN(N); Μ[Ν] := Μ[Ν] + 1; END; (* FOR *) FOR K := 1 TO MAX DO WRITELN(' ',M[K]); END. void main() { for (k=1;k<=max;k++) { m[k]=0; } /* for */ printf("doste ARI8MOYS\n"); for (k=1;k<=max;k++) { printf("doste ARI8MO : "); scanf("%d",&n); m[n]++; } /* for */ for (k=1;k<=max;k++) printf(" %d",m[k]); } 101

103 Ταξινόμηση αριθμών σε πίνακα ΤΕΧΝΙΚΗ Ο πιο απλός και γνωστός αλγόριθμος ταξινόμησης είναι το Bubble Sort. Δεν νοείται προγραμματιστής που να μην τον ξέρει! Πως λειτουργεί το Bubble Sort Κοιτάζει τους αριθμούς κατά ζευγάρια από τα αριστερά προς τα δεξιά, το 1 ο με το 2 ο, το 2 ο με το 3 ο κ.ο.κ. Αν βρεί ότι το ζευγάρι είναι τοποθετημένο σωστά (μικρότερο-μεγαλύτερο ή ίσο) δεν κάνει τίποτα και πηγαίνει στο επόμενο ζευγάρι. Αν βρεί ότι το ζευγάρι δεν είναι τοποθετημένο σωστά, τότε τα ανταλλάσει. Για να τους δεί όλους, χρειάζεται Ν-1 συγκρίσεις ζευγαριών. Σε κάθε πέρασμα, ένας αριθμός (ο μεγαλύτερος) έρχεται στη θέση του. Με Ν-1 περάσματα θα έχουν ταξινομηθεί όλοι οι αριθμοί. Για παράδειγμα, αν έχουμε τους αριθμούς : ο πέρασμα σύγκριση 3 με 1 αλλαγή σύγκριση 3 με 5 τίποτα σύγκριση 5 με 2 αλλαγή ο 5 (μεγαλύτερος) ήρθε στη θέση του 2 ο πέρασμα σύγκριση 1 με 3 τίποτα σύγκριση 3 με 2 αλλαγή (ταξινομήθηκε) 102

104 Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ BUBBLE-SORT ΣΤΑΘΕΡΕΣ Ν=9; ΔΕΔΟΜΕΝΑ Α : ARRAY[0..N] OF INTEGER; J,L,T : INTEGER; DONE : BOOLEAN; ΑΡΧΗ L:= N; ΕΠΑΝΑΛΑΒΕ DONE := TRUE; L:= L 1; ΓΙΑ J:= 0 ΕΩΣ L ΕΠΑΝΑΛΑΒΕ ΕΑΝ A[J] > A[J+1] TOTE DONE := FALSE; T := A[J]; A[J] := A[J+1]; A[J+1] := T; ΕΑΝ-ΤΕΛΟΣ ΓΙΑ-ΤΕΛΟΣ ΜΕΧΡΙ DONE ΤΕΛΟΣ Pascal PROGRAM BUBBLE(INPUT,OUTPUT); Const Ν=9; VAR Α : ARRAY[0..N] OF INTEGER; J,L,T : INTEGER; DONE : BOOLEAN; BEGIN L:= N; REPEAT DONE := TRUE; L:= L 1; FOR J:= 0 TO L DO IF A[J] > A[J+1] THEN BEGIN DONE := FALSE; T := A[J]; A[J] := A[J+1]; A[J+1] := T; END ; UNTIL DONE; END. C #include <stdio.h> #define N 10 #define TRUE 1 #define FALSE 0 int a[n]; int j, l, t, done; main() { l = N; do { done = TRUE; l--; for(j=0; j<l; j++) if(a[j] > a[j+1]) { done = FALSE; t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } while(!done); } 103

105 Αναζήτηση τιμής σε πίνακα Η αναζήτηση μιας τιμής μέσα σε έναν πίνακα είναι μια πολύ συνηθισμένη ανάγκη. Η αναζήτηση πρέπει να μας απαντήσει σε δύο ερωτήματα. Αν το στοιχείο που αναζητούμε υπάρχει στον πίνακα (ΝΑΙ ή ΟΧΙ) και, αν ναι, σε ποια θέση βρίσκεται. ΤΕΧΝΙΚΗ Γραμμική Αναζήτηση Ο πιο απλός τρόπος αναζήτησης είναι να ψάξουμε όλα τα στοιχεία ένα-ένα με τη σειρά. Ο τρόπος αυτός λέγεται Σειριακή ή Γραμμική Αναζήτηση (Linear Search), είναι ο πιο εύκολος, αλλά και ο πιο αργός και τον χρησιμοποιούμε μόνον όταν τα στοιχεία είναι λίγα (κάτω από 30). Ψευδοκώδικας Γραμμική (Σειριακή) Αναζήτηση 104

106 ΑΛΓΟΡΙΘΜΟΣ ΓΡΑΜΜΙΚΗ ΑΝΑΖΗΤΗΣΗ ΣΤΑΘΕΡΕΣ N=10; ΔΕΔΟΜΕΝΑ A : ARRAY[1..N] OF Integer; I, TIMH : Integer; FOUND : Boolean; ΑΡΧΗ FOUND := FALSE; ΔΙΑΒΑΣΕ(ΤΙΜΗ); I := 1; ΕΝΟΣΩ (NOT FOUND) AND (I<=N) ΕΠΑΝΑΛΑΒΕ ΕΑΝ A[I] = TIMH TOTE FOUND := TRUE; ΑΛΛΙΩΣ Ι:= I + 1; ΕΑΝ-ΤΕΛΟΣ ΕΝΟΣΩ-ΤΕΛΟΣ ΕΑΝ FOUND ΤΟΤΕ ΤΥΠΩΣΕ( BΡΕΘΗΚΕ ΤΟ,a[i], ΣΤΗ ΘΕΣΗ,I, EOL); ΑΛΛΙΩΣ ΤΥΠΩΣΕ( ΔΕΝ ΒΡΕΘΗΚΕ,EOL); ΕΑΝ-ΤΕΛΟΣ ΤΕΛΟΣ Pascal Γραμμική (Σειριακή) Αναζήτηση PROGRAM LINSEARCH (INPUT,OUTPUT); Const N=10; VAR A : ARRAY[1..N] OF Integer; I, TIMH : Integer; FOUND : Boolean; BEGIN FOUND := FALSE; READLN(ΤΙΜΗ); I := 1; WHILE (NOT FOUND) AND (I<=N) DO IF A[I] = TIMH THEN C #include <stdio.h> #define N 10 #define TRUE 1 #define FALSE 0 int a[n]; int i,found; int timi; main() { found=false; scanf("%d", &timi ); i = 0; while ( (!found) && (i < N) ) if ( a[i]==timi ) 105

107 FOUND := TRUE ELSE Ι:= I + 1; IF FOUND THEN WRITELN( BΡΕΘΗΚΕ ΤΟ,a[i], ΣΤΗ ΘΕΣΗ,I); ELSE WRITELN( ΔΕΝ ΒΡΕΘΗΚΕ,EOL); END. found = TRUE; else i++; if ( found ) printf("bρεθηκε ΤΟ %d ΣΤΗ ΘΕΣΗ %d\n", a[i],i); else printf("δεν ΒΡΕΘΗΚΕ\n"); } 106

108 Δυαδική Αναζήτηση ΤΕΧΝΙΚΗ Οταν ο πίνακας είναι ταξινομημένος, μπορεί να εφαρμοστεί η πολύ γρηγο-ρότερη μέθοδος της Δυαδικής Αναζήτησης (Binary Search). Η Δυαδική Αναζήτηση αξιοποιεί την πληροφορία ότι τα στοιχεία είναι ταξινομημένα με το να ελέγχει μόνο το μεσαίο στοιχείο του τμήματος όπου ψάχνει. Αν το στοιχείο που αναζητά είναι μικρότερο, απορρίπτει όλα τα στοιχεία από το μεσαίο και πάνω και επαναλαμβάνει την ίδια διαδικασία για το "κάτω" μισό, ενώ αν είναι μεγαλύτερο συνεχίζει για το "πάνω" μισό. Ετσι σε κάθε ανακύκλωση περιορίζει το τμήμα στο οποίο ψάχνει στο μισό. Το αποτέλεσμα είναι οτι έτσι συγκλίνει γρήγορα στο αναζητούμενο στοιχείο. Αν για παράδειγμα έχουμε εναν πίνακα 100 στοιχείων, θα κάνει μόνον 7 ελέγχους το πολύ (για 100, 50, 25, 12, 6, 3, 1 ). Αντίθετα η Σειριακή Αναζήτηση θα έκανε κατά μέσο όρο 50 ελέγχους για τον ίδιο πίνακα. Για παράδειγμα, αν έχουμε τους αριθμούς : και αναζητούμε τον 8, θα κάνει : 1+5=6, 6/2 = 3 8 > 5, άρα απορρίπτουμε τους 1 ως και 5 4+5=9, 9/2 = 4 8=8, βρέθηκε! 107

109 Ψευδοκώδικας Δυαδική Αναζήτηση ΑΛΓΟΡΙΘΜΟΣ ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ ΣΤΑΘΕΡΕΣ N=10; ΔΕΔΟΜΕΝΑ A : ARRAY[1..N] OF Integer; I, TIMH,TOP,MID,BOT : Integer; FOUND : Boolean; ΑΡΧΗ TOP:= 1; BOT := N; FOUND := FALSE; ΔΙΑΒΑΣΕ(ΤΙΜΗ); ΕΝΟΣΩ (NOT FOUND) AND (TOP<=BOT) ΕΠΑΝΑΛΑΒΕ MID := (TOP+BOT) DIV 2; EAN A[MID] = TIMH TOTE FOUND := TRUE; ΑΛΛΙΩΣ ΕΑΝ A[MID] > TIMH TOTE BOT := MID-1; ΑΛΛΙΩΣ TOP := MID+1; ΕΑΝ-ΤΕΛΟΣ ΕΝΟΣΩ-ΤΕΛΟΣ ΕΑΝ FOUND THEN ΤΥΠΩΣΕ( BΡΕΘΗΚΕ ΤΟ,A[i], ΣΤΗ ΘΕΣΗ,I, EOL); ΑΛΛΙΩΣ ΤΥΠΩΣΕ( ΔΕΝ ΒΡΕΘΗΚΕ,EOL); ΕΑΝ-ΤΕΛΟΣ ΤΕΛΟΣ Pascal Δυαδική Αναζήτηση PROGRAM BINSEARCH (INPUT,OUTPUT); Const N=10; VAR A : ARRAY[1..N] OF Integer; I, TIMH,TOP,MID,BOT : Integer; FOUND : Boolean; C #include <stdio.h> #define N 10 #define TRUE 1 #define FALSE 0 int a[n]; int i,found; int timi; int top,bot,mid; 108

110 BEGIN TOP:= 1; BOT := N; FOUND := FALSE; READLN(ΤΙΜΗ); WHILE (NOT FOUND) AND (TOP<=BOT) DO BEGIN MID := (TOP+BOT) DIV 2; IF A[MID] = TIMH THEN FOUND := TRUE; ELSE IF A[MID] > TIMH THEN BOT := MID-1 ELSE TOP := MID+1; END; (* WHILE *) IF FOUND THEN WRITELN( BΡΕΘΗΚΕ ΤΟ,a[i], ΣΤΗ ΘΕΣΗ,I, EOL) ELSE WRITELN( ΔΕΝ ΒΡΕΘΗΚΕ,EOL); END. main() { top = 0; bot = N-1; found = FALSE; scanf("%d", &timi ); while((!found) && (top <= bot)) { mid = (top+bot)/2; if(a[mid] == timi) found = TRUE; else if(a[mid] > timi) bot = mid-1; else top = mid+1; } if ( found ) printf("bρεθηκε ΤΟ %d ΣΤΗ ΘΕΣΗ %d\n", a[mid],mid); else printf("δεν ΒΡΕΘΗΚΕ\n"); } 109

111 Μετατροπή Αριθμού από το Δεκαδικό Σύστημα στο Δυαδικό Η μετατροπή ακέραιου αριθμού από το δεκαδικό σύστημα στο δυαδικό γίνεται με διαδοχική διαίρεση του δεκαδικού αριθμού δια δύο. Τα δυαδικά ψηφία προκύπτουν από τα υπόλοιπα των διαιρέσεων ( 0 ή 1 ). Επειδή όμως με τον τρόπο αυτό, τα ψηφία προκύπτουν με την αντίστροφη σειρά, δηλαδή πρώτα τα μικρά και μετά τα μεγάλα, πρέπει τα ψηφία να αποθηκεύονται σε ένα μονοδιάστατο πίνακα για να εμφανιστούν στο τέλος όλα μαζί με τη σωστή σειρά. Ψευδοκώδικας Με ΓΙΑ ΑΛΓΟΡΙΘΜΟΣ ΔΕΚΑΔΙΚΟ_ΣΕ_ΔΥΑΔΙΚΟ { DEKADIKOS SE DYADIKO } ΣΤΑΘΕΡΕΣ M = 15; ΔΕΔΟΜΕΝΑ K,N : INTEGER; DYADIKOS: ARRAY[0..M] OF INTEGER; APXH ΤΥΠΩΣΕ('DOSTE ENAN AKERAIO '); ΔΙΑΒΑΣΕ(K); ΓΙΑ N := 1 ΕΩΣ M ΕΠΑΝΑΛΑΒΕ DYADIKOS[N-1] := K MOD 2; K := K DIV 2; ΓΙΑ-ΤΕΛΟΣ ΓΙΑ N := 1 ΕΩΣ M ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(DYADIKOS[M-N]); ΓΙΑ-ΤΕΛΟΣ ΤΕΛΟΣ 110

112 Με ΕΠΑΝΑΛΑΒΕ-ΜΕΧΡΙ ΑΛΓΟΡΙΘΜΟΣ ΔΕΚΑΔΙΚΟ_ΣΕ_ΔΥΑΔΙΚΟ { DEKADIKOS SE DYADIKO } ΣΤΑΘΕΡΕΣ M = 15; ΔΕΔΟΜΕΝΑ K,N : INTEGER; DYADIKOS: ARRAY[0..M] OF INTEGER; APXH ΤΥΠΩΣΕ('DOSTE ENAN AKERAIO '); ΔΙΑΒΑΣΕ(K); N:=0; ΕΠΑΝΑΛΑΒΕ DYADIKOS[N] := K MOD 2; N := N + 1; K := K DIV 2; MEXΡI (K = 0); ΓΙΑ N := 1 ΕΩΣ M ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(DYADIKOS[M-N]); ΓΙΑ-ΤΕΛΟΣ ΤΕΛΟΣ Pascal Με FOR PROGRAM DTOB(INPUT,OUTPUT); { DEKADIKOS SE DYADIKO } Const M = 15; VAR K,N : INTEGER; DYADIKOS: ARRAY[0..M] OF INTEGER; BEGIN WRITELN('DOSTE ENAN AKERAIO '); READLN(K); FOR N := 1 TO M DO BEGIN DYADIKOS[N-1] := K MOD 2; K := K DIV 2; END; C Με for #include <stdio.h> /* dekadikos se dyadiko */ const Μ=16; int k,n; int dyadikos[μ]; void main() { printf("doste ENAN AKERAIO "); scanf("%d",&k); for (n=1;n<=μ;n++) { dyadikos[n-1]=k%2; k=k/2; } /* for */ 111

113 FOR N := 1 TO M DO WRITE(DYADIKOS[M-N]); END. Με REPEAT - UNTIL PROGRAM DTOB(INPUT,OUTPUT); { DEKADIKOS SE DYADIKO } Const M = 15; VAR K,N : INTEGER; DYADIKOS: ARRAY[0..M] OF INTEGER; BEGIN WRITELN('DOSTE ENAN AKERAIO '); READLN(K); N:=0; REPEAT DYADIKOS[N] := K MOD 2; N := N + 1; K := K DIV 2; UNTIL (K = 0); FOR N := 1 TO M DO WRITELN(DYADIKOS[M-N]); END. for (n=1;n<=μ;n++) { printf("%d",dyadikos[μ-n]); } /* for */ } Με do-while #include <stdio.h> /* dekadikos se dyadiko */ const Μ=16; int k,n; int dyadikos[μ]; void main() { printf("doste ENAN AKERAIO "); scanf("%d",&k); n=0; do { dyadikos[n]= k%2; n++; k=k/2; } while (!((k==0))); for (n=1;n<=μ;n++) printf("%d",dyadikos[μ-n]); } 112

114 ΑΣΚΗΣΕΙΣ 1.Να γραφεί πρόγραμμα που να αποθηκεύει Ν αριθμούς και να βρίσκει τον μέσο όρο τους, τον μικρότερο και πόσοι είναι ζυγοί. 2.Δίνονται ποσά σε Δρχ. που αποθηκεύονται σε πίνακα. Να δημιουργηθεί άλλος πίνακας με τα αντίστοιχα σε Ευρώ. (euro_pin) Τα αποτελέσματα να εμφανιστούν ως εξής: Δραχμές Ευρώ Διαβάζουμε 6 βαθμούς σε πίνακα. Να βρεθεί αν ο μαθητής περνάει, δηλαδή αν Μ.Ο. >= 10 και να μη μένει σε παραπάνω από 2 μαθήματα. (bathm) Να δοκιμαστεί για : Δίνεται ο πίνακας float ores[31] που περιέχει τις ώρες που εργάσθηκε ένας υπάλληλος μέσα σε κάποιον συγκεκριμένο μήνα και η μεταβλητή int meres που περιέχει τον αριθμό ημερών του μήνα (π.χ. 30,31,28 κλπ). Για τις μέρες που δεν εργάσθηκε, η αντίστοιχη μέρα περιέχει 0.0. Να γραφεί πρόγραμμα που να : Βρίσκει το σύνολο των ωρών που εργάστηκε υπερωριακά (δηλαδή πάνω από 8 ώρες τη μέρα). Γράφει τις μέρες που ο υπάλληλος εργάσθηκε υπερωριακά (δηλαδή περισσότερο από 8 ώρες την ημέρα). Πόσες μέρες εργάστηκε μέσα στο μήνα. Την ημέρα και τις ώρες που εργάσθηκε περισσότερο. 5.Γράψτε ένα πρόγραμμα που να προτείνει εξάδες για το LOTTO. Προσοxή, στις εξάδες δεν πρέπει να επαναλαμβάνεται ο ίδιος αριθμός. 6.Γράψτε ενα πρόγραμμα που να διαβάζει μία φράση από το πληκτρολόγιο, να την αποθηκεύει στον πίνακα char text[80]; και να την ξαναγράφει στην οθόνη όπως είναι και αντίστροφα. 7.Γράψτε ένα πρόγραμμα που να μετράει πόσες φορές εμφανίζεται το κάθε γράμμα μέσα σε ένα κείμενο. (Υπάρxουν 2 τρόποι, με switch και με δείκτη θέσης σε πίνακα). 113

115 8.Δίνονται 10 τιμές σε έναν πίνακα μιας διάστασης. Μετά ο χρήστης δίνει μία τιμή που μπορεί να υπάρχει ή όχι στον πίνακα. Το πρόγραμμα ψάχνει τη τιμή και ή τη βρίσκει και απαντάει σε ποια θέση τη βρήκε ή απαντάει ότι δεν υπάρχει στον πίνακα. (search) Με : Γραμμική Αναζήτηση (Linear Search), και με Ταξινόμηση Φυσσαλίδας (Bubble Sort) και Δυαδική Αναζήτηση (Binary Search). 9.Γράψτε ένα πρόγραμμα που να κρυπτογραφεί ένα μήνυμα με βάση έναν κώδικα αντιστοιxίας γραμμάτων. Γράψτε και το πρόγραμμα αποκωδικοποίησης. 114

116 2.8.2 Πίνακες δύο διαστάσεων All they want is just another brick in the wall... Pink Floyd Στους πίνακες δύο διαστάσεων, τα στοιχεία αποθηκεύονται σαν ένα παραλληλόγραμμο μεταβλητών με ονόματα Π[1,1], Π[1,2], Π[1,3], Αν για παράδειγμα έχουμε έναν πίνακα με 3 σειρές και 4 στήλες (Ν=3, Μ=4) τα στοιχεία θα αποθηκευτούν στις παρακάτω θέσεις : Π[1,1] Π[1,2] Π[1,3] Π[1,4] Π[2,1] Π[2,2] Π[2,3] Π[2,4] Π[3,1] Π[3,2] Π[3,3] Π[3,4] Πίνακες δύο διαστάσεων χρησιμοποιούμε όταν ταιριάζουν στο συγκεκρι-μένο πρόβλημα, για παράδειγμα κάποιο υπολογιστικό πρόβλημα με πίνα-κες (μήτρες), όπως η επίλυση συστημάτων εξισώσεων ή κάποιος πίνακας με στοιχεία (ίδιου τύπου), όπως για παράδειγμα τα οικονομικά στοιχεία της μισθοδοσίας. Η επιτυχία των προγραμμάτων Φύλλων Εργασίας (Spreadsheets), όπως για παράδειγμα του EXCEL, δείχνει πόσο χρήσιμη μπορεί να είναι η ιδέα των πινάκων αυτών. Από τους πίνακες δύο διαστάσεων, και μετά, μπορούμε να πούμε ότι γνω-ρίζουμε αρκετά ώστε να μπορούμε να αντιμετωπίσουμε τα πρώτα πραγμα-τικά, αν και μικρά, προβλήματα (π.χ. μισθοδοσία, κοινόχρηστα, βαθμολο-γίες κ.λπ.) Στο χειρισμό πινάκων δύο διαστάσεων, είναι πολύ χαρακτηριστική η χρήση του διπλού (εσωκλειόμενου nested) ΓΙΑ (for). Αν δηλαδή θέλουμε να περάσουμε ή να εξετάσουμε όλα τα στοιχεία ενός διδιάστατου πίνακα γραμμή-γραμμή, πρέπει να δημιουργήσουμε όλους τους συνδυασμούς δεικτών I,J. Αυτό γίνεται με το διπλό ΓΙΑ (for) ως εξής : 115

117 ΓΙΑ I:=1 ΕΩΣ Ν DO ΓΙΑ J:=1 ΕΩΣ M DO (γραμμές) (στήλες) Α[I,J] Οι δείκτες I,J θα παραχθούν από τα ΓΙΑ (for) ως εξής : I 1 J 1,2,3 M I 2 J 1,2,3 M κ.ο.κ. έως και I N Με τον τρόπο αυτό, περνάμε από τα στοιχεία κατά γραμμές (π.χ. 1 η γραμμή, όλες οι στήλες, κ.λπ.) Αν θέλουμε να περάσουμε από τα στοιχεία κατά στήλες πρέπει να αντιστρέψουμε τη σειρά των δύο ΓΙΑ (for). ΓΙΑ J:=1 ΕΩΣ M DO ΓΙΑ I:=1 ΕΩΣ N DO (στήλες) (γραμμές) Α[I,J] 116

118 ΤΕΧΝΙΚΕΣ Δήλωση διδιάστατου πίνακα (και βοηθητικών μεταβλητών) Ψευδοκώδικας ΣΤΑΘΕΡΕΣ Ν=3; M=10; ΔΕΔΟΜΕΝΑ F: ARRAY[1..N,1..M] OF Real; I,J : Integer; Αρχικοποίηση διδιάστατου πίνακα (μηδενισμός) Αποθήκευση μεμονωμένων στοιχείων σε θέσεις του πίνακα Επεξεργασία στοιχείων Αύξηση όλων των στοιχείων της 2 ης στήλης κατά 1 Αθροιση κατά γραμμές, 3 η = 1 η + 2 η Εκτύπωση των στοιχείων Αθροιση των στοιχείων των διαγωνίων σε τετραγωνικό πίνακα A: ARRAY[1..N,1..N] OF Real; SUM1,SUM2 : Real; ΓΙΑ I:=1 ΕΩΣ Ν ΕΠΑΝΑΛΑΒΕ ΓΙΑ J:=1 ΕΩΣ M ΕΠΑΝΑΛΑΒΕ F[I,J] := 0.0; ΓΙΑ-ΤΕΛΟΣ ΓΙΑ-ΤΕΛΟΣ F[1,2]:= 35.48; F[1,4]:= 56.98; F[1,6]:= 32.63; ΓΙΑ I:=1 ΕΩΣ Ν ΕΠΑΝΑΛΑΒΕ F[Ι,2]:= F[Ι,2]+1; ΓΙΑ-ΤΕΛΟΣ ΓΙΑ J:=1 ΕΩΣ M ΕΠΑΝΑΛΑΒΕ F[3,J]:=F[1,J]+F[2,J]; ΓΙΑ-ΤΕΛΟΣ ΓΙΑ I:=1 ΕΩΣ Ν ΕΠΑΝΑΛΑΒΕ ΓΙΑ J:=1 ΕΩΣ M ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(F[I,J]); ΓΙΑ-ΤΕΛΟΣ ΤΥΠΩΣΕ(EOL); ΓΙΑ-ΤΕΛΟΣ SUM1:=0.0; SUM2:=0.0; ΓΙΑ I:=1 ΕΩΣ Ν ΕΠΑΝΑΛΑΒΕ ΓΙΑ J:=1 ΕΩΣ M ΕΠΑΝΑΛΑΒΕ ΕΑΝ I = J ΤΟΤΕ SUM1:= SUM1+A[I,J]; ΕΑΝ-ΤΕΛΟΣ ΕΑΝ (I + J) = Ν ΤΟΤΕ SUM2:= SUM2+A[I,J]; ΕΑΝ-ΤΕΛΟΣ ΓΙΑ-ΤΕΛΟΣ ΓΙΑ-ΤΕΛΟΣ 117

119 Δήλωση διδιάστατου πίνακα (και βοηθητικών μεταβλητών) Αρχικοποίηση διδιάστατου πίνακα (μηδενισμός) Αποθήκευση μεμονωμένων στοιχείων σε θέσεις του πίνακα Επεξεργασία στοιχείων Αύξηση όλων των στοιχείων της 2 ης στήλης κατά 1 Αθροιση κατά γραμμές, 3 η =1 η + 2 η Εκτύπωση των στοιχείων Αθροιση των στοιχείων των διαγωνίων σε τετραγωνικό πίνακα Pascal Const Ν=3; M=10; VAR F: ARRAY[1..N,1..M] OF Real; I,J : Integer; A: ARRAY[1..N,1..N] OF Real; SUM1,SUM2 : Real; FOR I:=1 TO Ν DO FOR J:=1 TO M DO F[I,J] := 0.0; F[1,2]:= 35.48; F[1,4]:= 56.98; F[1,6]:= 32.63; FOR I:=1 TO Ν DO F[Ι,2]:= F[Ι,2]+1; FOR J:=1 TO M DO F[3,J]:=F[1,J]+F[2,J]; FOR I:=1 TO Ν DO BEGIN FOR J:=1 TO M DO WRITE(F[I,J]); WRITELN; END; SUM1:=0.0; SUM2:=0.0; FOR I:=1 TO Ν DO FOR J:=1 TO M DO BEGIN IF I = J THEN SUM1:= SUM1+A[I,J]; IF (I + J) = Ν THEN SUM2:= SUM2+A[I,J]; END; C #define N 3 #define M 10 double f[n][m]; int i,j; double a[n][n]; double sum1,sum2; for (i=0;i< N;i++) for (j=0;j< M;j++) f[i][j] = 0.0; f[0][1] = 35.48; f[0][3] = 56.98; f[0][5] = 32.63; for(i=0; i < N; i++) f[i][1] = f[i][1]+ 1; for(j=0; j < M; j++ ) f[2][j]=f[0][j]+f[1][j]; for ( i=0; i<n; i++ ) { for ( j=0; j<m; j++ ) printf("%lf",f[i][j]); printf("\n"); } sum1=0.0; sum2=0.0; for ( i=0; i < N; i++ ) for ( j=0; j < Ν; j++){ /*κύρια διαγώνιος*/ if (i == j) sum1 += a[i][j]; /*δευτερεύουσα διαγώνιος*/ if ((i + j) == N-1) sum2 += a[i][j]; } 118

120 Παράδειγμα Μισθοδοσία εταιρίας Για τα στοιχεία μισθοδοσίας μιας εταιρίας ορίστηκε ένας πίνακας δύο διαστάσεων με Ν (αριθμός υπαλλήλων) = 5 και Μ = 6 στήλες (Κωδικός Υπαλλήλου, Βασικός Μισθός, Ετος Πρόσληψης, Ετος Γέννησης, Επιδόματα, Αρ. Παιδιών) Κωδικός Β.Μ. Ετ. Προσ. Ετ.Γεν. Επιδ. Αρ.Παιδ , Δηλώσεις #define N 5 #define M 6 float m[n][m]; float sum, min; int i, poio; Να βρεθεί το σύνολο μισθών Πρέπει να αθροίσουμε τη στήλη του Βασικού Μισθού (1) sum=0.0; for ( i=0; i<n; i++) sum += m[i][1]; Να βρεθεί ο παλιότερος υπάλληλος Ο παλιότερος υπάλληλος θα έχει το ελάχιστο έτος πρόσληψης (2) min = m[0][2]; for ( i=0; i<n; i++) if( m[i][2] < min ) { min = m[i][2]; poio = i; } 119

121 ΑΣΚΗΣΕΙΣ 1. Δίνεται ο πίνακας : Να βρεθούν τα αθροίσματα των γραμμών, στηλών και διαγωνίων (diag). 2. Γράψτε ένα πρόγραμμα όπου να φορτώνετε αριθμούς σε έναν διδιάστατο πίνακα 10 x 20 και να βρίσκετε το μέγιστο, και το ελάχιστο στοιχείο, τα αθροίσματα των γραμμών και στηλών. 3. Δίνεται ο πίνακας float m[n][5] που περιέχει ΚΩΔ. ΥΠΑΛΛΗΛΟΥ, ΕΤΟΣ ΠΡΟΣΛΗΨΗΣ, ΜΙΣΘΟ, ΕΠΙΔΟΜΑΤΑ, ΕΤΟΣ ΓΕΝΝΗΣΗΣ. Να γραφεί πρόγραμμα που να βρίσκει τον μέσο όρο των μισθών, το άθροισμα μισθών και επιδομάτων και τον νεώτερο σε ηλικία υπάλληλο. 4. Θεωρήστε ότι υπάρχει πίνακας δύο διαστάσεων, για Ν υπαλλήλους με τα παρακάτω στοιχεία : ΚΩΔΙΚΟΣ ΒΑΣΙΚΟΣ ΜΙΣΘΟΣ ΑΣΦΑΛΙΣΤΙΚΕΣ ΕΙΣΦΟΡΕΣ ΑΡ.ΠΑΙΔΙΩΝ Να βρεθεί : Το σύνολο των δαπανών προσωπικού της εταιρίας (Βας.Μισθός + Εισφορές + 50 Ευρώ επίδομα για κάθε παιδί). 5. Δίνεται πίνακας με 5 υπαλλήλους με τα παρακάτω στοιχεία : ΚΩΔΙΚΟΣ ΜΙΣΘΟΣ ΕΤΟΣ_ΠΡΟΣΛΗΨΗΣ ΕΤΟΣ_ΓΕΝΝΗΣΗΣ ΑΡ_ΠΑΙΔΙΩΝ Να βρεθούν : Oι M.O. Ηλικίας, Παιδιών, Μισθού Ο παλιότερος υπάλληλος Οι υπάλληλοι με 3 ή περισσότερα παιδιά (misth) 120

122 6.Δίνονται 2 πίνακες 10 μαθητών με τα παρακάτω στοιχεία : Onomata : array[1..10,1..15] of char; -- εδώ μπαίνουν τα ονομάτα. Bathmoi : array[1..10,1..6] of Integer; -- εδώ μπαίνουν οι βαθμοί των 6 μαθημάτων. Να βρεθεί ποιοί μαθητές προάγονται και ο Μ.Ο. βαθμολογίας του καθενός. (bathm2) (Για να προαχθεί κάποιος πρέπει : όχι 2 βαθμοί < 10 και Μ.Ο. >=10) 121

123 Οχι όποιος ζεί πολύ, όποιος γυρνάει πολύ, είναι σοφός. Toύρκικη παροιμία 2.9 Υποπρογράμματα (Διαδικασίες & Συναρτήσεις) Οι διαδικασίες και οι συναρτήσεις χρησιμοποιούνται όταν θέλουμε να γρά-ψουμε για μια μόνον φορά, ένα μικρό κομμάτι προγράμματος που επανα-λαμβάνεται. Συνήθως περιέχουν λίγες εντολές που εκτελούν μικρές και συχνά επαναλαμβανόμενες εργασίες. Γι'αυτό ονομάζονται συχνά και "ρουτίνες" (routines) ή "υπορουτίνες" (subroutines). Στη γλώσσα C όλα τα υποπρογράμματα λέγονται συναρτήσεις (functions). Οι διαδικασίες και οι συναρτήσεις δηλώνονται μια φορά στο πρόγραμμα και χρησιμοποιούνται πολλές φορές, δηλαδή όποτε καλούνται, κατά τη διάρκεια της εκτέλεσης του προγράμματος. Οι διαδικασίες και οι συναρτήσεις είναι μικρά, αυτόνομα προγραμματάκια και δεν συμμετέχουν ενεργά και πλήρως στον «κόσμο» του προγράμματος όπου περιέχονται. Επικοινωνούν όμως με αυτό με πολύ συγκεκριμένους τρόπους. Συνήθως οι διαδικασίες και οι συναρτήσεις χρειάζονται ορισμένες τιμές από έξω για να λειτουργήσουν ή πρέπει και να μεταβάλλουν κάποιες από αυτές τις τιμές για να δώσουν τα αποτελέσματά τους. Η μεταφορά τιμών μέσα και έξω από υπορουτίνες λέγεται πέρασμα παραμέτρων (parameter passing) και χρησιμοποιεί ορισμένες ειδικές μεταβλητές που λέγονται παράμετροι. Για να εκτελέσουν τις εντολές τους, οι συναρτήσεις και οι διαδικασίες περιέχουν πολλές φορές και εσωτερικές μεταβλητές για ιδιωτική τους χρήση. Οι εσωτερικές αυτές μεταβλητές λέγονται "τοπικές" (local) και δεν καταλαμβάνουν μόνιμο χώρο στη μνήμη αλλά δημιουργούνται μόνον όταν κληθεί η υπορουτίνα, χρησιμοποιούνται, και καταστρέφονται μόλις η υπο-ρουτίνα τερματίσει την εκτέλεσή της. 122

124 Η διαφορά μεταξύ διαδικασιών και συναρτήσεων είναι ότι οι συναρτήσεις επιστρέφουν μόνον μια τιμή στο όνομά τους, για παράδειγμα : Ψευδοκώδικας Pascal C R := SQRT(5.0); R := SQRT(5.0); r = sqrt(5.0); ενώ οι διαδικασίες μπορεί να επιστρέφουν καμία, μία ή πολλές τιμές, όχι στο όνομα τους, αλλά στις παραμέτρους τους, για παράδειγμα : Ψευδοκώδικας Pascal C ΥΠΟΛΟΓΙΣΕ SQRT(5.0, %R); SQRT(5.0, r); sqrt(5.0, &r); Σε τι χρησιμεύουν τα υποπρογράμματα Τα υποπρογράμματα είναι πολύ χρήσιμα για τους παρακάτω λόγους : 1. Γλυτώνουμε γράψιμο προγράμματος, επομένως και λάθη. 2. Βλέπουμε το πρόγραμμα σε μικρά κομμάτια που μπορούμε να τα ελέγξουμε εύκολα. 3. Κερδίζουμε χώρο εκτελέσιμου κώδικα στη μνήμη γιατί δεν τον επαναλαμβάνουμε, πράγμα σημαντικό αν η μνήμη μας είναι λίγη. 4. Κερδίζουμε χώρο μεταβλητών κατά την εκτέλεση γιατί ο χώρος των τοπικών μεταβλητών ξαναχρησιμοποιείται. 5. Μπορούμε να ξαναχρησιμοποιήσουμε τις υπορουτίνεςπου έχουν γενικότερη χρησιμότητα και σε άλλα προγράμματα που θα γράψουμε. Το ιδανικό μέγεθος μιας υπορουτίνας είναι κάτω από 15 γραμμές προγράμματος και αυτό γιατί τόσο μπορεί να θυμάται το μυαλό του ανθρώπου και τόσο φαίνεται ολόκληρο σε μια συνηθισμένη οθόνη. Υποπρογράμματα και πραγματική ζωή Στον πραγματικό, επαγγελματικό προγραμματισμό, τα προγράμματα δεν μοιάζουν με τις ασκήσεις των βιβλίων. Τα πραγματικά προγράμματα αποτελούνται από χιλιάδες (

125 ) γραμμές προγράμματος. Οι γραμμές αυτές είναι οργανωμένες σε εκατοντάδες διαδικασίες και συναρτήσεις. Τα προγράμματα κατά 90% καλούν έτοιμες συναρτήσεις. Οσες από τις συναρτήσεις μπορούν να χρησιμοποιηθούν και σε άλλα προγράμματα οργανώνονται σε βιβλιοθήκες (Libraries). Γενικά προσπα-θούμε να μην ξαναεφευρίσκουμε τον τροχό. Για όλες τις συνηθισμένες δουλειές υπάρχουν έτοιμες και δοκιμασμένες βιβλιοθήκες που ή διατί-θενται δωρεάν, ή τις αγοράζουμε αρκετά φτηνά και τις χρησιμοποιούμε στα προγράμματά μας. Ετσι δεν χρειάζεται να γράψουμε τα πάντα από την αρχή. Το ηθικόν δίδαγμα είναι ότι στον επαγγελματικό προγραμματισμό, κατά 90% καλούμε συναρτήσεις, άρα αν δεν ξέρει κανείς να ορίζει και να καλεί συναρτήσεις, και το κυριότερο, να περνάει παραμέτρους, είναι σαν να μην ξέρει τίποτα. To λέω αυτό γιατί συνηθίζεται να μαθαίνουν όλοι τις εντολές και να παραλείπουν τις συναρτήσεις, γιατί είναι δύσκολες... Χρήση των Υποπρογραμμάτων (Συναρτήσεων και Διαδικασιών) Η χρησιμοποίηση μιας συνάρτησης έχει δύο φάσεις, τη Δήλωση (Function Declaration) και την Κλήση (Function Call). Με τη δήλωση της συνάρτησης ορίζουμε τις εντολές που θέλουμε να εκτελεστούν και τις βοηθητικές μεταβλητές που θα χρησιμοποιηθούν. Σ'αυτή τη φάση η δήλωση γίνεται "γενικά και αόριστα" γιατί δεν είναι ακόμα γνωστό ποιός θα τη χρησιμοποι-ήσει, πότε, για ποιά δεδομένα και πόσες φορές. Γι'αυτό σε αυτή τη φάση θέλει αρκετή προσοχή ώστε να φτιάξουμε μια συνάρτηση που να είναι χρήσιμη και να δουλεύει πάντοτε σωστά, όπως και να κληθεί. Οι εντολές της δήλωσης της συνάρτησης περιλαμβάνονται στο πρόγραμμα και μετα-γλωττίζονται από τον compiler σε εκτελέσιμο κώδικα μηχανής. Οταν κάποιος προγραμματιστής κρίνει ότι πρέπει να χρησιμοποιήσει μια συνάρτηση, τότε συμπεριλαμβάνει στο πρόγραμμα μια η περισσότερες κλήσεις της συνάρτησης. Οταν η εκτέλεση του προγράμματος φθάσει στη κλήση, σταματά η εκτέλεση των εντολών που εκτελούνται μέχρι εκείνη τη 124

126 στιγμή, δημιουργούνται οι μεταβλητές της συνάρτησης, εκτελούνται οι εντολές της, και, όταν τερματίσει, εξαφανίζονται οι "ιδιωτικές" μεταβλητές της και η εκτέλεση του προγράμματος συνεχίζεται με την εντολή που ακολουθεί την κλήση, στο μέρος απ'όπου κλήθηκε. Συνάρτηση που καλεί A := A + 10; J:=F1; (* Κλήση *) A:= A /J; Συνάρτηση που καλείται ΣΥΝΑΡΤΗΣΗ F1 : Integer; ΑΡΧΗ ΤΥΠΩΣΕ("ΚΛΗΣΗ f1"); F1 := 1; (* Επιστροφή *) ΤΕΛΟΣ-ΣΥΝΑΡΤΗΣΗΣ Αν η καλούμενη συνάρτηση καλέσει με τη σειρά της μιαν άλλη συνάρτηση, τότε θα παίξει αυτή το ρόλο της συνάρτησης που καλεί, η τρίτη συνάρτη-ση θα εκτελεστεί και η εκτέλεση θα επανέλθει στην εντολή που ακολουθεί τη δεύτερη κλήση. Συνάρτηση 1 (καλεί) A := A + 10; J:=F1; (* Κλήση *) ----> Συνάρτηση 2 (καλείται και καλεί) ΣΥΝΑΡΤΗΣΗ F1 : Integer; ΑΡΧΗ ΥΠΟΛΟΓΙΣΕ P2; (* Κλήση *) ----> Συνάρτηση 3 (καλείται) ΔΙΑΔΙΚΑΣΙΑ P2; ΑΡΧΗ ΤΥΠΩΣΕ("ΚΛΗΣΗ P2"); ΤΕΛΟΣ-ΔΙΑΔΙΚΑΣΙΑ A:= A /J; <---- F1 := 0; ΤΕΛΟΣ-ΣΥΝΑΡΤΗΣΗ <---- Δήλωση Συναρτήσεων και Διαδικασιών Για να κατασκευάσουμε μια συνάρτηση ή μια διαδικασία, η πρώτη φάση είναι να τη δηλώσουμε. Οι δηλώσεις υποπρογραμμάτων γίνονται μέσα στο πρόγραμμα, κάτω από τις σταθερές και τις παγκόσμιες μεταβλητές και επάνω από το κύριο πρόγραμμα. Οι Συναρτήσεις δηλώνονται ως εξής : 125

127 Ψευδοκώδικας ΣΥΝΑΡΤΗΣΗ όνομα ( ονόματα παραμέτρων ) : Τύπος αποτελέσματος; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ Δηλώσεις παραμέτρων ΕΞΟΔΟΣ Δηλώσεις παραμέτρων ΔΕΔΟΜΕΝΑ Τοπικές μεταβλητές ΑΡΧΗ εντολές όνομα := τιμή; ΤΕΛΟΣ-ΣΥΝΑΡΤΗΣΗ Pascal FUNCTION όνομα ( δηλώσεις παραμέτρων ) : Τύπος_αποτελέσματος; Δηλώσεις Τοπικών Μεταβλητών BEGIN εντολές όνομα := τιμή; END; C Τύπος_αποτελέσματος Ονομα (δηλώσεις παραμέτρων ) { Δηλώσεις Τοπικών Μεταβλητών εντολές return τιμή; } Παραδείγματα FUNCTION emb ( a : Real ) : Real; e : Real; BEGIN e := 3.14 * a * a; F1 := e; END; float emb ( float a ) { float e; e = 3.14 * a * a; return e; } Ενώ οι Διαδικασίες δηλώνονται ως εξής : Ψευδοκώδικας 126

128 ΔΙΑΔΙΚΑΣΙΑ όνομα ( ονόματα παραμέτρων ); ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ Δηλώσεις παραμέτρων ΕΞΟΔΟΣ Δηλώσεις παραμέτρων ΔΕΔΟΜΕΝΑ Τοπικές μεταβλητές ΑΡΧΗ εντολές ΤΕΛΟΣ-ΔΙΑΔΙΚΑΣΙΑ Pascal PROCEDURE Ονομα ( Δηλώσεις Παραμέτρων ); Δηλώσεις Τοπικών Μεταβλητών BEGIN εντολές END; C void Ονομα ( Δηλώσεις Παραμέτρων ) { Δηλώσεις Τοπικών Μεταβλητών } εντολές Παραδείγματα PROCEDURE MESSAGE ( M : Integer ); BEGIN IF M = 0 THEN WRITELN( ΣΩΣΤΟ ); ELSE WRITELN( ΛΑΘΟΣ ); END; void message ( int m ) { if (m==0) printf( ΣΩΣΤΟ ); else printf( ΛΑΘΟΣ ); } Κλήση Συναρτήσεων και Διαδικασιών Για να χρησιμοποιήσουμε μια συνάρτηση ή μια διαδικασία, πρέπει να την καλέσουμε. Η κλήση Συνάρτησης γίνεται ως εξής : μεταβλητή := Συνάρτηση ( παράμετροι ); Η κλήση Διαδικασίας ως εξής : 127

129 Διαδικασία ( παράμετροι ); Παράδειγμα Δήλωσης και Χρήσης Συνάρτησης Οι Συναρτήσεις (Functions) δηλώνονται επάνω από το κύριο πρόγραμμα. Επιστρέφουν πάντοτε μία τιμή του τύπου με τον οποίο είναι δηλωμένες. Επίσης μπορούν να επιδράσουν επάνω στις παγκόσμιες μεταβλητές και στις παραμέτρους τους. Στο παρακάτω παράδειγμα η FUNC1 δέχεται την παράμετρο Α και επιστρέφει σε μια μεταβλητή του κύριου προγράμματος την τιμή της. Η συνάρτηση εκτελείται όταν καλείται από το κύριο πρόγραμμα. Κατά την κλήση, το κύριο πρόγραμμα περνάει στη συνάρτηση την τιμή της παραμέτρου. Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΔΟΚΙΜΗ-ΣΥΝΑΡΤΗΣΗΣ ΔΕΔΟΜΕΝΑ N : INTEGER; ΣΥΝΑΡΤΗΣΗ FUNC1(Α) ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ Α : INTEGER; ΕΞΟΔΟΣ FUNC1 : INTEGER; APXH ΤΥΠΩΣΕ('KLHSH THS SYNARTHSHS',EOL); FUNC1 := Α + 1; ΤΕΛΟΣ-ΣΥΝΑΡΤΗΣΗΣ APXH ΤΥΠΩΣΕ('DOSTE ENAN ARI8MO:'); ΔΙΑΒΑΣΕ(N); N:=FUNC1(N); ΤΥΠΩΣΕ('O ARI8MOS TORA EINAI :',N); ΤΕΛΟΣ Pascal PROGRAM TESTFUNC(INPUT,OUTPUT); { DOKIMH SYNARTHSHS } VAR N : INTEGER; C #include <stdio.h> /* dokimh synartisis */ int n; 128

130 PROCEDURE FUNC1 ( Α : INTEGER ); BEGIN WRITELN('KLHSH THS SYNARTHSHS'); FUNC := A + 1; END ; (* FUNC1 *) BEGIN WRITE('DOSTE ENAN ARI8MO:'); READLN(N); N:=FUNC1(N); WRITELN('O ARI8MOS TORA EINAI:',N); END. void func1( int a ) { printf("klhsh THS SYNARTHSHS\n"); return a+1; } void main() { printf("doste ENAN ARI8MO :"); scanf("%d",&n); n=func1(n); printf("o ARI8MOS TORA EINAI : %d\n",n); } Παράδειγμα Δήλωσης και Χρήσης Διαδικασίας Οι Διαδικασίες (Procedures) δηλώνονται επάνω από το κύριο πρόγραμμα. Μπορούν να επιδράσουν επάνω στις παγκόσμιες μεταβλητές και στις παραμέτρους τους. Στο παρακάτω παράδειγμα η PROC1 επιδρά στη παγκόσμια μεταβλητή N. Η διαδικασία εκτελείται όταν καλείται από το κύριο πρόγραμμα.. 129

131 Ψευδοκώδικας ΑΛΓΟΡΙΘΜΟΣ ΔΟΚΙΜΗ-ΔΙΑΔΙΚΑΣΙΑΣ { DOKIMH DIADIKASIAS } ΔΕΔΟΜΕΝΑ N : INTEGER; ΔΙΑΔΙΚΑΣΙΑ PROC1; APXH ΤΥΠΩΣΕ('KLHSH THS DIADIKASIAS',EOL); N := N + 1; ΤΥΠΩΣΕ('EPISTROFH STO KYRIO PROGRAMMA', EOL); ΤΕΛΟΣ-ΔΙΑΔΙΚΑΣΙΑΣ APXH ΤΥΠΩΣΕ('DOSTE ENAN ARI8MO:'); ΔΙΑΒΑΣΕ(N); ΥΠΟΛΟΓΙΣΕ PROC1; ΤΥΠΩΣΕ('O ARI8MOS TORA EINAI :',N); ΤΕΛΟΣ -- Κλήση Pascal PROGRAM TESTPROC(INPUT,OUTPUT); { DOKIMH DIADIKASIAS } VAR N : INTEGER; PROCEDURE PROC1; BEGIN WRITELN('KLHSH THS DIADIKASIAS'); N := N + 1; WRITELN('EPISTROFH STO KYRIO PROGRAMMA'); END; (* PROC1 *) BEGIN WRITE('DOSTE ENAN ARI8MO:'); READLN(N); PROC1; WRITELN('O ARI8MOS TORA EINAI:',N); END. C #include <stdio.h> /* dokimh diadikasias */ int n; void proc1() { printf("klhsh THS DIADIKASIAS\n"); n=n+1; printf("epistrofh STO KYRIO PROGRAMMA\n"); } /* proc1 */ void main() { printf("doste ENAN ARI8MO :"); scanf("%d",&n); proc1(); printf("o ARI8MOS TORA EINAI : %d\n",n); } Αν θυμάστε, είπαμε πιο πάνω ότι όταν η συνάρτηση δηλώνεται, ορίζεται γενικά και αόριστα, γιατί δεν ξέρουμε ακόμα πότε θα κληθεί και για ποιά πραγματικά δεδομένα θα εκτελέσει τις εντολές της. Τη στιγμή της κλήσης, δίνονται 130

132 στη συνάρτηση τα πραγματικά δεδομένα πάνω στα οποία θα ενεργήσει. Τα δεδομένα αυτά είναι ή οι παράμετροι που της δίνονται, ή κάποιες μεταβλητές του προγράμματος που της επιτρέπεται να χρησιμο-ποιήσει. 131

133 Πως καταλαβαίνουν τα υποπρογράμματα σε ποιά δεδομένα να ενεργήσουν Από όλα τα δεδομένα που υπάρχουν μέσα στο πρόγραμμα, τα υποπρο-γράμματα καταλαβαίνουν μόνον δύο πράγματα: 1. Τις "Γενικές" μεταβλητές του προγράμματος (Παγκόσμιες) : Ψευδοκώδικας Α : Integer; ΔΙΑΔΙΚΑΣΙΑ p1; ΑΡΧΗ ΤΥΠΩΣΕ(Α); ΤΕΛΟΣ-ΔΙΑΔΙΚΑΣΙΑ Pascal Var Α : Integer; PROCEDURE p1; BEGIN WRITELN(Α); END; -- Η p1 χρησιμοποιεί την παγκόσμια Α C int a; void p1() { printf( %d\n,a); } 2. Τις τιμές των παραμέτρων που τους δίνονται από την συνάρτηση που τις καλεί : Ψευδοκώδικας A,B : Integer; Δήλωση ΣΥΝΑΡΤΗΣΗ F2 ( x, y ) ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ X,Y : Integer; ΑΡΧΗ F2 := x + y; ΤΕΛΟΣ-ΣΥΝΑΡΤΗΣΗ Κλήση B:=F2(A,3); -- Χρησιμοποιεί τις παραμέτρους x,y 132

134 Pascal Δήλωση FUNCTION F2 ( x, y : Integer ) BEGIN F2 := x + y; END; C void f2 ( int x, int y ) { return x+y ; } Κλήση B:=F2(A,3); b = f2( a, 3 ); Ψευδοκώδικας A,B : Integer; Δήλωση ΔΙΑΔΙΚΑΣΙΑ P3 ( %X ) ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ X : Integer ΑΡΧΗ B := X; -- Χρησιμοποιεί την παράμετρο Χ, ΤΕΛΟΣ-ΔΙΑΔΙΚΑΣΙΑ μπορεί και να της αλλάξει την τιμή Κλήση ΥΠΟΛΟΓΙΣΕ F3(%A); Pascal Δήλωση PROCEDURE P3 ( VAR X : Integer ) BEGIN B := X ; END; C void p3 ( int *x ) { b = *x; } Κλήση P3 ( A ); p3( &a ); 133

135 Πως επιστρέφουν οι συναρτήσεις τα αποτελέσματά τους Οι συναρτήσεις, πολλές φορές, παράγουν αποτελέσματα και τα επιστρέ-φουν στην συνάρτηση που τις κάλεσε για να τη βοηθήσουν να εκτελέσει τη δικιά της αποστολή. Τα αποτελέσματα αυτά μπορούν να τα επιστρέ-ψουν κατά τρεις τρόπους : 1. Επηρεάζουν κάποια παγκόσμια μεταβλητή : Ψευδοκώδικας A,B : Integer; Δήλωση ΔΙΑΔΙΚΑΣΙΑ P1; ΑΡΧΗ Α := 1000; ΤΕΛΟΣ-ΔΙΑΔΙΚΑΣΙΑ Κλήση ΥΠΟΛΟΓΙΣΕ P1; Pascal Δήλωση PROCEDURE P1; BEGIN A := 1000; END; Κλήση P1; p1(); C void p1 () { a = 1000; } 2. Επιστρέφουν μια τιμή στο όνομά τους : Ψευδοκώδικας Ι : Integer; Δήλωση ΣΥΝΑΡΤΗΣΗ F2: Integer; ΑΡΧΗ F2 := 100; ΤΕΛΟΣ-ΣΥΝΑΡΤΗΣΗ Κλήση I := F2; 134

136 Pascal Δήλωση FUNCTION F2 : Integer; BEGIN F2 := 100; END; Κλήση i:=f2; C int f2 () { return 100; } i=f2(); 3. Επιστρέφουν μια ή περισσότερες τιμές σαν παραμέτρους Ψευδοκώδικας Ι,J : Integer; Δήλωση ΔΙΑΔΙΚΑΣΙΑ P3( %x, %y ) ΔΙΕΠΑΦΗ ΕΞΟΔΟΣ Χ,Υ : Integer; ΑΡΧΗ x := 100; -- το i παίρνει 100 y := 200; -- το j παίρνει 200 ΤΕΛΟΣ-ΔΙΑΔΙΚΑΣΙΑ Κλήση ΥΠΟΛΟΓΙΣΕ P3( %i, %j ); Pascal Δήλωση PROCEDURE P3( VAR X, Y : Integer ); BEGIN x := 100; y := 200; END; C void p3 ( int *x, int *y ) { *x = 100; *y = 200; } Κλήση P3(i,j); p3 ( &i, &j ); 135

137 Παραδείγματα Ακέραια συνάρτηση Ακέραια συνάρτηση με όνομα iplus1 και μια ακέραια τυπική παράμετρο εισόδου I. Ψευδοκώδικας Ι,J : Integer; Δήλωση ΣΥΝΑΡΤΗΣΗ iplus1 ( Ι ) : Integer; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ Ι : Integer; ΑΡΧΗ iplus1 := i+1; --επιστρέφει i+1 (ακέραιο) ΤΕΛΟΣ-ΣΥΝΑΡΤΗΣΗΣ Κλήση J := iplus1(i); Pascal Δήλωση FUNCTION iplus1 ( Ι : Integer ) : Integer; BEGIN iplus1 := i+1; END; Κλήση J:=iplus1(I); C int iplus1 ( int i ) { return i+1; } j=iplus1(i); Πραγματική συνάρτηση Πραγματική συνάρτηση με όνομα d2 και μια πραγματική τυπική παράμετρο d. Ψευδοκώδικας R : Real; Δήλωση ΣΥΝΑΡΤΗΣΗ d2 ( d ) : Real; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ D : Real; ΔΕΔΟΜΕΝΑ F : Real; -- τοπική μεταβλητή f (πραγματική) ΑΡΧΗ F := D * D; -- πράξη ΤΕΛΟΣ-ΣΥΝΑΡΤΗΣΗΣ Κλήση R := d2 ( 12.0 ); 136

138 Pascal Δήλωση FUNCTION d2 ( d : Real ) : Real; VAR F : Real; BEGIN F := D * D; END; C float d2 ( float d ) { float f; f = d * d; return f; } Κλήση R := d2 ( 12.0 ); r := d2 ( 12.0 ); Διαδικασία Ψευδοκώδικας Δήλωση ΔΙΑΔΙΚΑΣΙΑ PERIMENE; ΔΕΔΟΜΕΝΑ Χ : CHAR; ΑΡΧΗ ΤΥΠΩΣΕ( ΠΑΤΗΣΤΕ ΕΝΑ ΠΛΗΚΤΡΟ ΓΙΑ ΝΑ ΣΥΝΕΧΙΣΕΤΕ ); ΔΙΑΒΑΣΕ(X); ΤΕΛΟΣ-ΔΙΑΔΙΚΑΣΙΑ Κλήση ΥΠΟΛΟΓΙΣΕ PERIMENE; Pascal Δήλωση PROCEDURE PERIMENE; Var X : Char; BEGIN WRITE( ΠΑΤΗΣΤΕ ΕΝΑ ΠΛΗΚΤΡΟ ΓΙΑ ΝΑ ΣΥΝΕΧΙΣΕΤΕ ); READLN(X); END; Κλήση PERIMENE; C void perimene () { char x ; printf( ΠΑΤΗΣΤΕ ΕΝΑ ΠΛΗΚΤΡΟ ΓΙΑ ΝΑ ΣΥΝΕΧΙΣΕΤΕ ); x=getchar(); } perimene(); 137

139 Αναδρομή (Recursion) Aναδρομή λέγεται η κλήση μιας συνάρτησης από τον εαυτό της. Η αναδρομή δεν χρησιμοποιείται συχνά και γι'αυτό πολλές γλώσσες δεν την επιτρέπουν, είναι όμως χρήσιμη γιατί μερικές ρουτίνες μπορούν να γραφούν πολύ πιο σύντομα κάνοντας κλήσεις στον εαυτό τους παρά επαναλαμβάνοντας τις εντολές που πρέπει να εκτελέσουν. Για να θεωρηθεί μια συνάρτηση Αναδρομική πρέπει να καλύπτει δύο απαραίτητες προϋποθέσεις : α) Να καλεί τον εαυτό της τουλάχιστον μία φορά (Αναδρομική Κλήση). β) Να έχει κάποια συνθήκη τερματισμού, άλλοιώτικα μπορεί να μην βγεί ποτέ από τις αναδρομικές κλήσεις μέχρι να γεμίσει όλη την μνήμη. Παραδείγματα Υπολογισμός του N παραγοντικού ( n! ) int factorial ( int n ) { if ( n == 1 ) return 1; else return n * factorial ( n-1 ); } -- Συνθήκη Τερματισμού -- Αναδρομική Κλήση Υψωση αριθμού σε ακέραια δύναμη double power ( double x, int n ) { if (n>0) return x*power(x,n-1); else return 1.0; } -- Συνθήκη Τερματισμού -- Αναδρομική Κλήση 138

140 ΑΣΚΗΣΕΙΣ Ασκήσεις Λυμένες 1.Γράψτε μια function που να δέχεται σαν παράμετρο το μήκος της πλευράς τετραγώνου (a) και να επιστρέφει το εμβαδόν (Ε=α 2 ). Δείξτε και πώς καλείται. PASCAL Δήλωση function embtetr ( a: real ) : real; begin embtetr := a * a; end; C float embtetr ( float a ) { return a*a; } Κλήση e := embtetr( 5.0 ); e = embtetr( 5.0 ); Ασκήσεις για λύση 2.Γράψτε μια function που να δέχεται σαν παραμέτρους Ωρες (h) και Λεπτά (m) και να επιστρέφει τα συνολικά Δευτερόλεπτα. Δείξτε και πώς καλείται. 3.Γράψτε μια function που να δέχεται σαν παραμέτρους Μέρες (d), Μήνες (m), Ετη (y) και να επιστρέφει τις συνολικές Μέρες.Επίσης γράψτε μια άλλη function που να δέχεται Μέρες (days), να τις μετατρέπει, και να επιστρέφει Μέρες (d), Μήνες (m), Ετη (y). Δείξτε και πως καλούνται οι δύο functions. 4.Γράψτε μια function που να δέχεται σαν παραμέτρους Εβδομάδες (w) και μέρες (d) και να επιστρέφει τις συνολικές μέρες.επίσης γράψτε μια άλλη function που να δέχεται μέρες (d) και να επιστρέφει εβδομάδες (w) και μήνες (m). Δείξτε και πως καλούνται οι δύο functions. 5.Γράψτε μια function που να δέχεται σαν παράμετρο έναν μονοδιάστατο πίνακα και το μέγεθός του και να επιστρέφει το πλήθος των στοιχείων του πίνακα που είναι μηδέν. Δείξτε και πως καλείται. 6. Υλοποιήστε τις συναρτήσεις : ΣΥΝΑΡΤΗΣΗ euro ( DRX ) : Real; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ DRX : Integer; Μετατρέπει δραχμές σε ευρώ. 139

141 ΣΥΝΑΡΤΗΣΗ draxmes ( EUROS ) : Integer; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ EUROS : Real; Μετατρέπει σε ευρώ δραχμές. 7.Υλοποιήστε τις συναρτήσεις : ΣΥΝΑΡΤΗΣΗ emb ( R ) : Real; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ R : Real; Βρίσκει το εμβαδόν του κύκλου με ακτίνα ρ. ( Ε=πρ 2 ) ΣΥΝΑΡΤΗΣΗ per ( R ) : Real; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ R : Real; Βρίσκει τη περιφέρεια του κύκλου με ακτίνα ρ. ( Π=2.π.ρ ) 8.Υλοποιήστε τις συναρτήσεις : ΣΥΝΑΡΤΗΣΗ sum2 ( X,Y ) : Integer; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ X,Y : Integer; Προσθέτει τους δύο αριθμούς (x,y) ΣΥΝΑΡΤΗΣΗ sqr ( X ) : Integer; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ X : Integer; Βρίσκει το τετράγωνο του x. ΣΥΝΑΡΤΗΣΗ sumsqr( X,Y ) : Integer; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ X,Y : Integer; Βρίσκει το άθροισμα των τετραγώνων των x και y. 9.Υλοποιήστε τη συνάρτηση : ΣΥΝΑΡΤΗΣΗ ypot ( A,B ) : Real; 140

142 ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ A,B : Real; Βρίσκει το μήκος της υποτείνουσας ορθογωνίου τριγώνου c με κάθετες πλευρές a,b. (c 2 = a 2 + b 2 ). Δοκιμάστε με τιμές a=3, b=4, οπότε c=5. Η τετραγωνική ρίζα δίνεται από τη συνάρτηση SQRT (x) : Real; 10.Υλοποιήστε τις συναρτήσεις : ΣΥΝΑΡΤΗΣΗ secs ( H,M,S ) : Integer; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ H,M,S : Integer; Βρίσκει πόσα συνολικά δευτερόλεπτα αντιστοιχούν σε h ώρες, m λεπτά και s δευτερόλεπτα. ΣΥΝΑΡΤΗΣΗ days ( YY,MM,DD ) : Integer; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ YY,MM,DD : Integer; Βρίσκει πόσες συνολικά μέρες αντιστοιχούν σε yy χρόνια, mm μήνες και dd μέρες. ΣΥΝΑΡΤΗΣΗ daysbetween ( Y1,M1,D1,Y2,M2,D2 ) : Integer; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ Y1,M1,D1,Y2,M2,D2 : Integer; Βρίσκει τη διαφορά ημερών μεταξύ των δύο ημερομηνιών. 11.Υλοποιήστε τη διαδικασία : ΔΙΑΔΙΚΑΣΙΑ box ( X1,Y1,N,M ) ; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ X1,Y1,N,M : Integer; Ζωγραφίζει στην οθόνη ένα τετράπλευρο με διαστάσεις n x m. Η επάνω αριστερή γωνία βρίσκεται στο x1, y1. 12.Υλοποιήστε τη συνάρτηση : ΣΥΝΑΡΤΗΣΗ mopin ( A,N ) : Real; ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ Α : ARRAY[1..N] of Integer; N : Integer; 141

143 Βρίσκει τον Μ.Ο. των στοιχείων του πίνακα a. Πέρασμα Παραμέτρων 13. Να δηλωθούν και να κληθούν οι παρακάτω Διαδικασίες : ΔΙΑΔΙΚΑΣΙΑ embper ( R, %EMB, %PER ) ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ R : Real; ΕΞΟΔΟΣ EMB,PER : Real; δέχεται σα δεδομένο την ακτίνα και επιστρέφει το εμβαδόν και την περιφέρεια του κύκλου ΔΙΑΔΙΚΑΣΙΑ tetr ( A, %EMB, %PER, %DIA ) ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ A : Real; ΕΞΟΔΟΣ EMB,PER,DIA : Real; δέχεται σα δεδομένο τη πλευρά ενός τετραγώνου και επιστρέφει το εμβαδόν, την περίμετρο και τη διαγώνιο του τετραγώνου ΔΙΑΔΙΚΑΣΙΑ fpa (POSO, SYNT, %FPA, %SYNOLO) ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ POSO,SYNT : Real; ΕΞΟΔΟΣ FPA,SYNOLO : Real; δέχεται σα δεδομένα ένα ποσό (σε Ευρώ) και ένα συντελεστή ΦΠΑ (π.χ. 4,8,18,36) και επιστρέφει το ποσό του ΦΠΑ και το σύνολο του αρχικού ποσού και ΦΠΑ ΔΙΑΔΙΚΑΣΙΑ misth (BM, %IKA, %PARFOR, %PLIROTEO) ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ BM : Real; ΕΞΟΔΟΣ IKA,PARFOR,PLIROTEO : Real; δέχεται το βασικό μισθό και επιστρέφει το ΙΚΑ (14%), παρακράτηση φόρου (10%) και υπόλοιπο πληρωτέο 142

144 ΔΙΑΔΙΚΑΣΙΑ koinoxr ( SYNEMB, EMBDIA, SYNPOSO, %POSOSTODIAM, %POSODIAM ); ΔΙΕΠΑΦΗ ΕΙΣΟΔΟΣ SYNEMB, EMBDIA, SYNPOSO : Real; ΕΞΟΔΟΣ POSOSTODIAM, POSODIAM : Real; δέχεται το συνολικό εμβαδό πολυκατοικίας, εμβαδό διαμερίσματος, ποσό για επιμερισμό, επιστρέφει ποσοστό διαμερίσματος, ποσό διαμερίσματος. ΔΙΑΔΙΚΑΣΙΑ swap ( %x, %y ) ; ΔΙΕΠΑΦΗ ΕΞΟΔΟΣ x,y : Integer; Ανταλλάσει τις τιμές των παραμέτρων της. 143

145 ΠΑΡΑΡΤΗΜΑ 1 Διαγράμματα Ροής Προγράμματος (ΔΡΠ) Τα Διαγράμματα Ροής Προγράμματος (ΔΡΠ) αποτελούν τη συμβολική (γραφική) αναπαράσταση των αλγορίθμων. Μερικά από τα βασικά κατά ANSI σύμβολα ενός ΔΡΠ είναι τα παρακάτω: ΕΙΣΟΔΟΣ/ ΕΞΟΔΟΣ 1 1 ΕΓΓΡΑΦΟ ΕΠΕΞΕΡΓΑΣΙΑ ΣΥΝΔΕΣΗ ΕΝΤΟΣ ΣΕΛΙΔΑΣ ΜΑΓΝΗΤΙΚΗ ΤΑΙΝΙΑ ΜΑΓΝΗΤΙΚΟΣ ΔΙΣΚΟΣ ΑΠΟΦΑΣΗ ΥΠΟΔΙΕΡΓΑΣΙΑ ΡΟΗ ΡΟΗ ΣΧΟΛΙΟ ΑΡΧΗ/ΤΕΛΟΣ ΟΝ LINE ΑΠΟΘΗΚΕΥΣΗ ΤΕΡΜΑΤΙΚΟΣ ΣΤΑΘΜΟΣ ΣΥΝΔΕΣΗ ΕΚΤΟΣ ΣΕΛΙΔΑΣ ΧΕΙΡΩΝΑΚΤΙΚΗ ΕΙΣΟΔΟΣ ΤΑΞΙΝΟΜΗΣΗ 144

146 ΠΑΡΑΡΤΗΜΑ 2 Λύνοντας Προβλήματα Το να λύνεις προβλήματα είναι μια πρακτική επιδεξιότητα, όπως, ας πούμε, το κολύμπι. Αποκτούμε πρακτική επιδεξιότητα με τη μίμηση και την πρακτική εξάσκηση Ο δάσκαλος που θέλει ν αναπτύξει την ικανότητα των μαθητών του να λύνουν προβλήματα, πρέπει, να τους εμπνεύσει κάποιο ενδιαφέρον για τα προβλήματα και να τους δώσει αρκετές ευκαιρίες για μίμηση και πρακτική εξάσκηση. 145 G. Polya ( Πώς να το λύσω») Αφού εξοικειωθεί κανείς με τις δυνατότητες της γλώσσας και τις στοιχειώδεις τεχνικές του προγραμματισμού, που παρουσιάστηκαν με τα μικρά, απλά προγραμματάκια που είδατε μέχρι τώρα, φτάνει η στιγμή που πρέπει κανείς να μάθει να προγραμματίζει μόνος του. Το σημαντικό και πιο δύσκολο σημείο του προγραμματισμού είναι η μετάβαση από το «Πρόβλημα» στο «Πρόγραμμα» που λύνει το Πρόβλημα. Δυστυχώς, η διαδικασία αυτή δεν μπορεί να τυποποιηθεί. Η λύση προβλη-μάτων με προγραμματισμό ήταν πάντοτε μια «τέχνη». Σε ένα βαθμό μπορούμε να τη μάθουμε παρατηρώντας πως έλυσαν κάποιο άλλοι, κάποια σχετικά προβλήματα, αλλά, ο προγραμματισμός, είναι ακόμα, ένα από τα πεδία που απαιτούν πρωτοτυπία και δημιουργική σκέψη. Αν καθίσουμε να προγραμματίσουμε πραγματικά προβλήματα, θα διαπιστώσουμε, ότι για κάθε πρόβλημα θα χρειαστεί να εφαρμόσουμε κάποιες γνωστές αλλά και να εφεύρουμε νέες λύσεις. Οι νέες αυτές λύσεις θα είναι το αποτέλεσμα της ικανότητας που πρέπει να αναπτύξουμε στο να λύνουμε προβλήματα, και προγραμματιστικά, αλλά και γενικότερα. Ο παρακάτω πίνακας, μπορεί να βοηθήσει πολύ στο να μάθετε να σκέφτεστε και να προσεγγίζετε τη λύση ενός προβλήματος. Ο πίνακας αυτός συντάχθηκε από τον G. Polya στο κλασσικό του βιβλίο «Πώς να το λύσω». Θα ήταν καλό να τον συμβουλεύεστε όταν μελετάτε και σχεδιάζετε ένα νέο πρόγραμμα. Θα βρείτε ότι οι οδηγίες του, βοηθούν πολύ στο να προσεγγίσετε συστηματικά τη λύση

147 146

148 ΚΑΤΑΝΟΗΣΗ ΤΟΥ ΠΡΟΒΛΗΜΑΤΟΣ Πρώτο Πρέπει να κατανοήσετε το πρόβλημα. Ποιο είναι το ζητούμενο; Ποια είναι τα δεδομένα; Ποια είναι η συνθήκη; Είναι δυνατόν να ικανοποιήσουμε τη συνθήκη; Είναι η συνθήκη επαρκής για να κατανοήσετε το ζητούμενο; Μήπως είναι ανεπαρκής; Μήπως είναι πλεοναστική; Μήπως είναι αντιφατική; Διαχωρίστε τα διάφορα μέρη της συνθήκης. Μπορείτε να τα καταγράψετε; Κάντε ένα σχήμα. Χρησιμοποιήστε κατάλληλο συμβολισμό. ΕΠΙΝΟΗΣΗ ΕΝΟΣ ΣΧΕΔΙΟΥ Δεύτερο Βρείτε τη σχέση ανάμεσα στα δεδομένα και το ζητούμενο. Αν δεν μπορεί να βρεθεί μια άμεση σχέση, ίσως χρειαστεί να θεωρήσετε ένα βοηθητικό πρόβλημα. Τελικά θα πρέπει να καταστρώσετε ένα Μήπως το έχετε ξαναδεί; Μήπως έχετε δεί το ίδιο πρόβλημα με μια λίγο διαφορετική μορφή; Γνωρίζετε ένα σχετικό πρόβλημα; Γνωρίζετε κάποιο θεώρημα που θα μπορούσε να είναι χρήσιμο; Παρατηρείστε το ζητούμενο! Προσπαθείστε να σκεφτείτε ένα γνωστό πρόβλημα που να έχει το ίδιο ή ένα παρόμοιο ζητούμενο. Να ένα πρόβλημα σχετικό με το δικό σας, που έχει ήδη λυθεί. Θα μπορούσατε να το χρησιμοποιήσετε; 147

149 σχέδιο επίλυσης. Θα μπορούσατε να χρησιμοποιήσετε το αποτέλεσμά του; Θα μπορούσατε να χρησιμοποιήσετε τη μέθοδό του; Μήπως θα πρέπει να εισαγάγετε μερικά βοηθητικά στοιχεία, ώστε να μπορέσετε να χρησιμοποιήσετε το παραπάνω σχετικό πρόβλημα; Θα μπορούσατε να ξαναδιατυπώσετε το πρόβλημα; Θα μπορούσατε να το διατυπώσετε ακόμη πιο διαφορετικά; Επιστρέψτε στους ορισμούς. Αν δεν μπορείτε να λύσετε το προτεινόμενο πρόβλημα, προσπαθείστε να λύσετε πρώτα κάποιο σχετικό πρόβλημα. Θα μπορούσατε να φανταστείτε ένα πιο προσιτό πρόβλημα; Ενα πιο γενικό πρόβλημα; Ενα πιο ειδικό πρόβλημα; Ένα ανάλογο πρόβλημα; Θα μπορούσατε να λύσετε ένα μέρος του προβλήματος; Κρατείστε μόνο ένα μέρος της συνθήκης, παραλείψτε τα υπόλοιπα. Σε ποιο βαθμό τώρα έχει προσδιοριστεί το ζητούμενο; Σε τι μπορεί να διαφέρει; Θα μπορούσατε να βγάλετε κάτι χρήσιμο από τα δεδομένα; Θα μπορούσατε να σκεφτείτε άλλα δεδομένα κατάλληλα να καθορίσουν το ζητούμενο; Θα μπορούσατε να αλλάξετε το ζητούμενο ή τα δεδομένα, ή και τα δύο, αν είναι απαραίτητο, ώστε το νέο ζητούμενο και τα νέα δεδομένα να συνδέονται περισσότερο μεταξύ τους; Χρησιμοποιήσατε όλα τα δεδομένα; Χρησιμοποιήσατε ολόκληρη τη συνθήκη; Λάβατε υπόψη σας όλες τις βασικές έννοιες που συμπεριλαμβάνονται στο πρόβλημα; 148

150 ΕΚΤΕΛΕΣΗ ΤΟΥ ΣΧΕΔΙΟΥ Τρίτο Εκτελέστε το σχέδιό σας. Εκτελώντας το σχέδιο της επίλυσης, ελέγξτε κάθε βήμα. Φαίνεται καθαρά ότι το κάθε βήμα είναι σωστό; Μπορείτε να αποδείξετε ότι είναι σωστό; ΚΟΙΤΑΖΟΝΤΑΣ ΠΡΟΣ ΤΑ ΠΙΣΩ Τέταρτο Εξετάστε τη λύση που βρήκατε. Μπορείτε να ελέγξετε το αποτέλεσμα; Μπορείτε να ελέγξετε τα επιχειρήματα; Μπορείτε να φτάσετε στο αποτέλεσμα με διαφορετικό τρόπο; Μπορείτε να το δείτε με μια ματιά; Μπορείτε να χρησιμοποιήσετε το αποτέλεσμα, ή τη μέθοδο για κάποιο άλλο πρόβλημα; 149

151 Εισαγωγή ΒΙΒΛΙΟΓΡΑΦΙΑ Εισαγωγή στους σκοπούς και στα μέσα της Πληροφορικής, Κ. Λιβαδά, If-Then-Else, 1999 Τεχνικές Προγραμματισμού Προγραμματισμός Υπολογιστών, Τ.Ε.Ε., Α. Σιδερίδη, Κ. Γιαλούρη, Σ. Μπακογιάννη, Κ. Σταθόπουλου, ΟΕΔΒ Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον, Γ Ενιαίου Λυκείου, Ν. Αντωνάκου, Ι. Βογιατζή, Ι. Κατωπόδη, Κ. Πατριαρχέα, ΟΕΔΒ Πως να το λύσω, G. Polya, Εκδόσεις Καρδαμίτσα, 1991 Problem Solving with Computers, G.W.Scragg,Jones & Bartlett, 1997 Γλώσσα Pascal PASCAL, Α. Σταμούλη, Learning Plan, 1991 Γλώσσα C Εισαγωγή στη γλώσσα C, Κ. Λιβαδά, If-Then-Else,

152 Το CD του βιβλίου Υπάρχει ένα CD που συνοδεύει το βιβλίο και περιέχει κείμενα και προγράμματα που μπορούν να βοηθήσουν στη κατανόηση της ύλης και στην πρακτική εξάσκηση του σπουδαστή στα θέματα αυτά. Για παράδειγμα : Παραδείγματα σε Ψευδοκώδικα Μεταφραστή Ψευδοκώδικα σε C Λύσεις των ασκήσεων του βιβλίου Παραδείγματα σε C Παραδείγματα σε PASCAL To CD αυτό ενημερώνεται συχνά και αναπαράγεται κατά παραγγελία, όταν ζητηθεί. Η τιμή του είναι 15 Ευρώ Αν ενδιαφέρεστε να το χρησιμοποιήσετε επικοινωνήστε με τον Κ. Λιβαδά στο ή στο 151

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δρ. Κόννης Γιώργος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος και του Προγράμματος/Αλγορίθμου

Διαβάστε περισσότερα

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Pascal, απλοί τύποι, τελεστές και εκφράσεις Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το

Διαβάστε περισσότερα

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ ) Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ. 25 48) Τι είναι αλγόριθμος; Γ ΛΥΚΕΙΟΥ Αλγόριθμος είναι μία πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρονικό διάστημα,

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β. ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β. Καβακλή Χειμερινό Εξάμηνο 2001 1 Σύνολο χαρακτήρων της Pascal Για

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Pascal- Εισαγωγή Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, όπως έχει ήδη αναφερθεί, τρία εξίσου

Διαβάστε περισσότερα

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Δυνατότητα ανάπτυξης, μεταγλώττισης και εκτέλεσης προγραμμάτων στη PASCAL. Κατανόηση της σύνταξης των προτάσεων της PASCAL. Κατανόηση της εντολής εξόδου για

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Η ΓΛΩΣΣΑ PASCAL ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Απλοί ή στοιχειώδης Τ.Δ. Ακέραιος τύπος Πραγματικός τύπος Λογικός τύπος Χαρακτήρας Σύνθετοι Τ.Δ. Αλφαριθμητικός 1. Ακέραιος (integer) Εύρος: -32768 έως 32767 Δήλωση

Διαβάστε περισσότερα

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΑ ΣΥΣΤΗΜΑΤΑ

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΑ ΣΥΣΤΗΜΑΤΑ ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΑ ΣΥΣΤΗΜΑΤΑ Δρ. Κουζαπάς Δημήτριος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

Διαβάστε περισσότερα

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης Εργαστήριο 6 Εντολές Επανάληψης Η δομή Επιλογής στη PASCAL H δομή Επανάληψης στη PASCAL. Ρεύμα Εισόδου / Εξόδου.. Ρεύμα Εισόδου / Εξόδου. To πρόγραμμα γραφικών gnuplot. Γραφικά στη PASCAL. Σκοπός 6.1 ΕΠΙΔΙΩΞΗ

Διαβάστε περισσότερα

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ. ΚΑΤΕΥΘΥΝΣΗ ΔΙΟΙΚΗΣΗΣ ΤΟΥΡΙΣΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΕΩΝ ΦΙΛΟΞΕΝΙΑΣ Πληροφορική I "Προγραμματισμός" B. Φερεντίνος

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Νέο Πρόγραμμα

Διαβάστε περισσότερα

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 26-01-2014

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 26-01-2014 ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 26-01-2014 ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις παρακάτω προτάσεις 1-5 και δίπλα τη λέξη Σωστό, αν είναι

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην

Διαβάστε περισσότερα

ΜΑΗΣ 2007 - ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

ΜΑΗΣ 2007 - ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ ΜΑΗΣ 2007 - ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ ΟΔΗΓΙΕΣ: ΝΑ ΑΠΑΝΤΗΣΕΤΕ ΣΕ ΟΛΕΣ ΤΙΣ ΕΡΩΤΗΣΕΙΣ. Το εξεταστικό δοκίμιο αποτελείται από δύο Ενότητες Α και Β. ΕΝΟΤΗΤΑ Α - Αποτελείται από δέκα (10) ερωτήσεις. Κάθε ορθή απάντηση

Διαβάστε περισσότερα

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΥΠΟΛΟΓΙΣΤΩΝ

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΥΠΟΛΟΓΙΣΤΩΝ Εισαγωγή ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΥΠΟΛΟΓΙΣΤΩΝ Όπως για όλες τις επιστήμες, έτσι και για την επιστήμη της Πληροφορικής, ο τελικός στόχος της είναι η επίλυση προβλημάτων. Λύνονται όμως όλα τα προβλήματα;

Διαβάστε περισσότερα

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΕΞΕΤΑΣΗΣ

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΕΞΕΤΑΣΗΣ Το αναλυτικό πρόγραμμα στο οποίο βασίζεται η εξέταση είναι το αναλυτικό πρόγραμμα του Μαθήματος Κατεύθυνσης Πληροφορική Επιστήμη Η.Υ της Γ Ενιαίου Λυκείου Γενικός Σκοπός Το μάθημα κατεύθυνσης της στη Γ'

Διαβάστε περισσότερα

ΕΠΛ 001: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Προγραμματισμός

ΕΠΛ 001: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Προγραμματισμός ΕΠΛ 001: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του υπολογιστικού προβλήματος και του αλγορίθμου. Να περιγράψουμε την πορεία από ένα υπολογιστικό πρόβλημα

Διαβάστε περισσότερα

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2 Εισαγωγή στον προγραμματισμό Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2 Δομή Προγράμματος Όλα τα προγράμματα που γράψαμε έχουν λίγο πολύ την ακόλουθη μορφή: Κάποιος κώδικας εδώ main( ) {

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) 1. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΣΤΑΘΕΡΕΣ είναι τα μεγέθη που δεν μεταβάλλονται κατά την εκτέλεση ενός αλγόριθμου. Εκτός από τις αριθμητικές σταθερές (7, 4, 3.5, 100 κλπ), τις λογικές σταθερές (αληθής και ψευδής)

Διαβάστε περισσότερα

ΑΠΑΝΤΗΣΕΙΣ. H διαδικασία ανεύρεσης λογικών λαθών περιλαμβάνει : β- Σωστό. Διαπίστωση του είδους του λάθους γ- Σωστό δ- Λάθος

ΑΠΑΝΤΗΣΕΙΣ. H διαδικασία ανεύρεσης λογικών λαθών περιλαμβάνει : β- Σωστό. Διαπίστωση του είδους του λάθους γ- Σωστό δ- Λάθος ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ ΕΠΑΛ (ΟΜΑΔΑ Α ) & ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΕΠΑΛ (ΟΜΑΔΑ Β ) ΤΕΤΑΡΤΗ 08/04/2015 - ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΟΚΤΩ (8) ΘΕΜΑ Α ΑΠΑΝΤΗΣΕΙΣ Α1. Α2. α-

Διαβάστε περισσότερα

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL )Βασικά στοιχεία Αναγνωριστικά (Identifiers) Τα αναγνωριστικά είναι ονόματα με τα οποία μπορούμε να αναφερόμαστε σε αποθηκευμένες

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΓΛΩΣΣΟΜΑΘΕΙΑ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΓΛΩΣΣΟΜΑΘΕΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΓΛΩΣΣΟΜΑΘΕΙΑ Καλλιόπη Μαγδαληνού ΕΠΙΚΕΦΑΛΙΔΑ ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΗΛΩΣΕΙΣ ΣΤΑΘΕΡΩΝ ΔΗΛΩΣΕΙΣ ΜΕΤΑΒΛΗΤΩΝ ΕΝΤΟΛΕΣ πρόγραμμα τεστ σταθερές π = 3.14 μεταβλητές πραγματικές : εμβαδό, ακτίνα αρχή

Διαβάστε περισσότερα

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ Κεφαλαία και μικρά γράμματα ελληνικού αλφαβήτου: Α Ω και α ω Κεφαλαία και μικρά γράμματα λατινικού αλφαβήτου: A Z και a z Αριθμητικά ψηφία: 0 9 Ειδικοί χαρακτήρες: + - * / =. ( ),! & κενός

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #2 2 Γενικά Στο Εργαστήριο αυτό θα αναλύσουμε τη χρήση της βασικής εντολής ελέγχου ροής

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας

Διαβάστε περισσότερα

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) 133 244 355 a= b= c= 3 read(d,e) 166 277 3888

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) 133 244 355 a= b= c= 3 read(d,e) 166 277 3888 ΕΡΩΤΗΣΕΙΣ 1. Να αναφέρετε μερικά από τα ιδιαίτερα χαρακτηριστικά της Pascal. 2. Ποιο είναι το αλφάβητο της Pascal; 3. Ποια είναι τα ονόματα-ταυτότητες και σε τι χρησιμεύουν; 4. Σε τι χρησιμεύει το συντακτικό

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

Διαβάστε περισσότερα

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Εισαγωγή στη C θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης ΚΕΦΑΛΑΙΟ 1ο 3ο 1. Συμπληρώστε τα κενά με τη λέξη που λείπει. α. Ένα πρόβλημα το χωρίζουμε σε άλλα απλούστερα, όταν είναι ή όταν έχει τρόπο επίλυσης. β. Η επίλυση ενός προβλήματος προϋποθέτει την του. γ.

Διαβάστε περισσότερα

Γλώσσα Προγραμματισμού C

Γλώσσα Προγραμματισμού C Προγραμματισμός HY: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών

Διαβάστε περισσότερα

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. Ερωτήσεις προόδου C Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. #include // δίνει οδηγία στον compiler να // συμπεριλάβει την βιβλιοθήκη stdio int

Διαβάστε περισσότερα

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ και ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ 2.1 Να δοθεί ο ορισμός

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE ΕΡΓΑΣΤΗΡΙΟ 7 Ο Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE Βασικές Έννοιες: Δομή Επανάληψης, Εντολές Επανάληψης (For, While do, Repeat until), Αλγόριθμος, Αθροιστής, Μετρητής, Παράσταση

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 4 η Τελεστές Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης

Διαβάστε περισσότερα

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ ΘΕΜΑ Α Α.1 Να χαρακτηρίσετε σωστή (Σ) ή λανθασμένη (Λ) καθεμία από τις παρακάτω προτάσεις (Μονάδες 10) 1. Ένας αλγόριθμος μπορεί να έχει άπειρα βήματα

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Συναρτήσεις εισόδου/εξόδου, τελεστές Η συνάρτηση scanf() είσοδος δεδομένων Διαβάζει από το πληκτρολόγιο (stdin) μορφοποιημένες τιμές μεταβλητών. scanf (ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, δείκτης_μεταβλητής-1,

Διαβάστε περισσότερα

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

Διαβάστε περισσότερα

Βασικές Έννοιες Αλγορίθμων Τι είναι αλγόριθμος

Βασικές Έννοιες Αλγορίθμων Τι είναι αλγόριθμος Βασικές Έννοιες Αλγορίθμων Τι είναι αλγόριθμος Παραδείγματα αλγορίθμων: Η παρασκευή ενός κέικ Η εύρεση του μέγιστου κοινού διαιρέτη δύο αριθμών Η εκκίνηση ενός αυτοκινήτου Η πρωινή προετοιμασία για το

Διαβάστε περισσότερα

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while) 5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while) 5.1 Ο βρόχος while Η εντολή while παρέχει έναν μηχανισμό επανάληψης των δηλώσεων όσο μια συνθήκη είναι αληθινή. Χρησιμοποιείται όταν ο αριθμός των επαναλήψεων

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 23 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 2ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος I/O 24 Βασική βιβλιοθήκη συναρτήσεων εισόδου/εξόδου #include Η συνάρτηση εξόδου printf printf("συμβολοσειρά

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές Μεταβλητές 2 Δήλωση μεταβλητών Η δήλωση (declaration) πληροφορεί το μεταγλωττιστή για το όνομα και

Διαβάστε περισσότερα

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός Δομές Ακολουθίας- Επιλογής - Επανάληψης Δομημένος Προγραμματισμός 1 Βασικές Έννοιες αλγορίθμων Σταθερές Μεταβλητές Εκφράσεις Πράξεις Εντολές 2 Βασικές Έννοιες Αλγορίθμων Σταθερά: Μια ποσότητα που έχει

Διαβάστε περισσότερα

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ Μάθημα 7 - Υποπρογράμματα Εργαστήριο 11 Ο TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ Βασικές Έννοιες: Υποπρόγραμμα, Ανάλυση προβλήματος, top down σχεδίαση, Συνάρτηση, Διαδικασία, Παράμετρος, Κλήση συνάρτησης, Μετάβαση

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Προγραμματισμός

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Προγραμματισμός ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του υπολογιστικού προβλήματος και του αλγορίθμου. Να περιγράψουμε την πορεία από ένα υπολογιστικό πρόβλημα

Διαβάστε περισσότερα

2. β. Συνθήκη ή επιλογή. 4. δ. Υποπρόγραμμα. 5. ε. ιαδικασία εισόδου ή εξόδου

2. β. Συνθήκη ή επιλογή. 4. δ. Υποπρόγραμμα. 5. ε. ιαδικασία εισόδου ή εξόδου ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΠΑΝΕΛΛHNIΕΣ ΕΞΕΤΑΣΕΙΣ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α A ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α Β ) ΣΑΒΒΑΤΟ 28 ΜΑΪΟΥ 2011 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΟΜΗΜΕΝΟΣ

Διαβάστε περισσότερα

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ ) Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ. 147 159) Για τις γλώσσες προγραμματισμού πρέπει να έχουμε υπόψη ότι: Κάθε γλώσσα προγραμματισμού σχεδιάζεται για συγκεκριμένο σκοπό, δίνοντας ιδιαίτερη

Διαβάστε περισσότερα

Ας δούμε λίγο την θεωρία με την οποία ασχοληθήκαμε μέχρι τώρα.

Ας δούμε λίγο την θεωρία με την οποία ασχοληθήκαμε μέχρι τώρα. Ας δούμε λίγο την θεωρία με την οποία ασχοληθήκαμε μέχρι τώρα. Είδαμε τι είναι πρόβλημα, τι είναι αλγόριθμος και τέλος τι είναι πρόγραμμα. Πρέπει να μπορείτε να ξεχωρίζετε αυτές τις έννοιες και να αντιλαμβάνεστε

Διαβάστε περισσότερα

8. Συνθήκες ελέγχου, λογικοί τελεστές

8. Συνθήκες ελέγχου, λογικοί τελεστές Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων 8. Συνθήκες ελέγχου, λογικοί τελεστές Ιωάννης Κατάκης Σήμερα o Λογικές παραστάσεις Σχεσιακοί τελεστές Λογικοί τελεστές o if -else o switch Λογικές παραστάσεις

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εντολές ελέγχου ροής προγράμματος (if-else & switch) Η εντολή if-else Η εντολή if-else υπάρχει σχεδόν σε όλες τις γλώσσες προγραμματισμού. Χρησιμοποιείται για τον έλεγχο της

Διαβάστε περισσότερα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Ενότητες βιβλίου: 6.4, 6.7 Ώρες διδασκαλίας: 1 Τεχνικές σχεδίασης προγραμμάτων Στο βιβλίο γίνεται αναφορά σε μία τεχνική για την ανάπτυξη

Διαβάστε περισσότερα

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL ΓΕΝΙΚΗ ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ Program Ονομα_προγραμματος; «πρόγραμμα» Πρόγραμμα 1 Program Lesson1_Program1; Write('Hello World!!!'); {σχόλια} Επεξήγηση Προγράμματος Program Lesson1_Program1;

Διαβάστε περισσότερα

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr 1 Πώς δημιουργούμε πρόγραμμα Η/Υ; 1. Ανάλυση του προβλήματος 2. Επινόηση & Σχεδιασμός

Διαβάστε περισσότερα

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

Διαβάστε περισσότερα

2. β. Συνθήκη ή επιλογή. 4. δ. Υποπρόγραμμα. 5. ε. ιαδικασία εισόδου ή εξόδου

2. β. Συνθήκη ή επιλογή. 4. δ. Υποπρόγραμμα. 5. ε. ιαδικασία εισόδου ή εξόδου ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΠΑΝΕΛΛHNIΕΣ ΕΞΕΤΑΣΕΙΣ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α A ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α Β ) ΣΑΒΒΑΤΟ 28 ΜΑΪΟΥ 2011 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΟΜΗΜΕΝΟΣ

Διαβάστε περισσότερα

Στην εντολή while η επανάληψη συνεχίζεται όσο η λογική έκφραση έχει τιμή false.

Στην εντολή while η επανάληψη συνεχίζεται όσο η λογική έκφραση έχει τιμή false. ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ ΕΠΑΛ (ΟΜΑΔΑ Α ) & ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΕΠΑΛ (ΟΜΑΔΑ Β ) ΤΕΤΑΡΤΗ 08/04/2015 - ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6) ΘΕΜΑ Α Α1. Να χαρακτηρίσετε τις

Διαβάστε περισσότερα

Γραπτές εξετάσεις στο μάθημα: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Θ) Εισηγητής: Γεωργίου Χρήστος ΘΕΜΑΤΑ & ΑΠΑΝΤΗΣΕΙΣ. Β. Χαρακτήρας(Αλφαριθμητικά)

Γραπτές εξετάσεις στο μάθημα: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Θ) Εισηγητής: Γεωργίου Χρήστος ΘΕΜΑΤΑ & ΑΠΑΝΤΗΣΕΙΣ. Β. Χαρακτήρας(Αλφαριθμητικά) Γραπτές εξετάσεις στο μάθημα: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Θ) Εισηγητής: Γεωργίου Χρήστος ΘΕΜΑΤΑ & ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α Α1. Να γράψετε στην κόλλα σας τους αριθμούς της στήλης Α που αντιστοιχούν με τα γράμματα

Διαβάστε περισσότερα

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

Διαβάστε περισσότερα

Προγραμματισμός PASCAL

Προγραμματισμός PASCAL Προγραμματισμός PASCAL 1 PASCAL Η PASCAL σχεδιάστηκε από τον Worth το 1968 στη Ζυρίχη, αρχικά σαν εργαλείο για τη διδασκαλία προγραμματισμού. Είναι γλώσσα για σειριακό προγραμματισμό. 2 Απλή και εύκολη

Διαβάστε περισσότερα

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

Διαβάστε περισσότερα

Θεωρία Προγραμματισμού

Θεωρία Προγραμματισμού Θεωρία Προγραμματισμού 1) Τι ονομάζουμε Αλγόριθμο; Ονομάζεται μια ακολουθία από πεπερασμένο αριθμό εντολών, που αν εκτελεστούν με ακρίβεια, οδηγούν στη πραγματοποίηση μιας εργασίας. 2) Τι ονομάζουμε ανάλυση

Διαβάστε περισσότερα

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης Στο εργαστήριο αυτό, θα εξοικειωθούμε με τους τύπους δεδομένων που μας παρέχει η γλώσσα C, θα χρησιμοποιήσουμε τις δομές επανάληψης (for, while, do...while),

Διαβάστε περισσότερα

Ο αλγόριθμος πρέπει να τηρεί κάποια κριτήρια

Ο αλγόριθμος πρέπει να τηρεί κάποια κριτήρια Αλγόριθμος είναι μια πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο, που στοχεύουν στην επίλυση ενός προβλήματος. Ο αλγόριθμος πρέπει να τηρεί κάποια κριτήρια Είσοδος:

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΩΤΗΣΕΙΣ 1. Τι καλείται ψευδοκώδικας; 2. Τι καλείται λογικό διάγραμμα; 3. Για ποιο λόγο είναι απαραίτητη η τυποποίηση του αλγόριθμου; 4. Ποιες είναι οι βασικές αλγοριθμικές δομές; 5. Να περιγράψετε τις

Διαβάστε περισσότερα

Αρχές Προγραμματισμού Η/Υ Μέθοδοι παρουσίασης του αλγόριθμου και Βασικές έννοιες

Αρχές Προγραμματισμού Η/Υ Μέθοδοι παρουσίασης του αλγόριθμου και Βασικές έννοιες Αρχές Προγραμματισμού Η/Υ Μέθοδοι παρουσίασης του αλγόριθμου και Βασικές έννοιες Βελώνης Γεώργιος Καθηγητής Πληροφορικής ΠΕ20 Περιεχόμενα Μέθοδοι Παρουσίασης του αλγόριθμου Εισαγωγή Φραστική μέθοδος Ψευδοκώδικας

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εντολές ελέγχου ροής προγράμματος (if-else & switch) Η εντολή if-else Η εντολή if-else υπάρχει σχεδόν σε όλες τις γλώσσες προγραμματισμού. Χρησιμοποιείται για τον έλεγχο της

Διαβάστε περισσότερα

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη. Εργαστήριο 4: 4.1 Η Δομή Ελέγχου if Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη. Γενική Μορφή: Παρατηρήσεις:

Διαβάστε περισσότερα

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΠΑΝΕΛΛΑ ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ ΚΑΙ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α A ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ ΟΜΑ Α Β ) ΣΑΒΒΑΤΟ 28 ΜΑΪΟΥ 2016 ΕΞΕΤΑΖΟΜΕΝΟ

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 2: Μεταβλητές και Σταθερές Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης

Διαβάστε περισσότερα

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Εισαγωγή στον Προγραµµατισµό Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Hello World /* Αρχείο hello.c * Εµφανίζει στην οθόνη το * µήνυµα hello world */ #include

Διαβάστε περισσότερα

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος 2012-13 Κων/νος Φλώρος Απλοί τύποι δεδομένων Οι τύποι δεδομένων προσδιορίζουν τον τρόπο παράστασης των

Διαβάστε περισσότερα

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. AeppAcademy.com facebook.com/aeppacademy Γεια. Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά. Καλή Ανάγνωση & Καλή Επιτυχία

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές: Προγραμματισμός HY: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas

Διαβάστε περισσότερα

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΚΕΦΑΛΑΙΟ 2 2.4 Βασικές συνιστώσες/εντολές ενός αλγορίθμου 2.4.1 Δομή ακολουθίας ΚΕΦΑΛΑΙΟ 7 7.1 7.9 Σταθερές (constants): Προκαθορισμένες τιμές που παραμένουν

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ 9.1 Εντολές Εισόδου/εξόδου Στην Pascal, 1. Tα δεδομένα των προγραμμάτων λαμβάνονται: είτε από το πληκτρολόγιο είτε από ένα αρχείο με τη χρήση των διαδικασιών read και readln,

Διαβάστε περισσότερα

Αλγόριθμος. Αλγόριθμο ονομάζουμε τη σαφή και ακριβή περιγραφή μιας σειράς ξεχωριστών οδηγιών βημάτων με σκοπό την επίλυση ενός προβλήματος.

Αλγόριθμος. Αλγόριθμο ονομάζουμε τη σαφή και ακριβή περιγραφή μιας σειράς ξεχωριστών οδηγιών βημάτων με σκοπό την επίλυση ενός προβλήματος. Αλγόριθμος Αλγόριθμο ονομάζουμε τη σαφή και ακριβή περιγραφή μιας σειράς ξεχωριστών οδηγιών βημάτων με σκοπό την επίλυση ενός προβλήματος. Εντολές ή οδηγίες ονομάζονται τα βήματα που αποτελούν έναν αλγόριθμο.

Διαβάστε περισσότερα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα

Διαβάστε περισσότερα

Μάριος Αγγελίδης Ενότητες βιβλίου: 2.1, 2.3, 6.1 (εκτός ύλης αλλά χρειάζεται για την συνέχεια) Ώρες διδασκαλίας: 1

Μάριος Αγγελίδης Ενότητες βιβλίου: 2.1, 2.3, 6.1 (εκτός ύλης αλλά χρειάζεται για την συνέχεια) Ώρες διδασκαλίας: 1 Ενότητα 1 Ενότητες βιβλίου: 2.1, 2.3, 6.1 (εκτός ύλης αλλά χρειάζεται για την συνέχεια) Ώρες διδασκαλίας: 1 Τι είναι αλγόριθμος Σύμφωνα με το σχολικό βιβλίο: Ορισμός: Μια πεπερασμένη σειρά ενεργειών, αυστηρά

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

Διαβάστε περισσότερα

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Εργαστήριο 3: 3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Η C++, όπως όλες οι γλώσσες προγραμματισμού, χρησιμοποιεί τελεστές για να εκτελέσει τις αριθμητικές και λογικές λειτουργίες.

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β Καβακλή Χειμερινό Εξάμηνο 2001 Στόχοι του Μαθήματος! Ανάπτυξη αναλυτικής

Διαβάστε περισσότερα

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD) Η Γλώσσα Pascal Χαρακτηριστικά Τύποι Δεδοµένων Δοµή προγράµµατος 1. Βασικές έννοιες Χαρακτηριστικά της γλώσσας Pascal Γλώσσα προγραµµατισµού Συντακτικό Σηµασιολογία Αλφάβητο της γλώσσας Pascal (Σύνολο

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΜΟ 1 o ΔΙΑΓΩΝΙΜΑ ΘΕΜΑ 1 ο Α) Για κάθε μία από τις παρακάτω προτάσεις να επιλέξετε αν τις θεωρείτε σωστές () ή άθος () 1. Ο αλγόριθμος χρησιμοποιείται για επίλυση προβλήματος μόνο από

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο) Προγραμματισμός Η/Υ Ενότητα 2β: Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών Σκοποί ενότητας Κατανόηση της έννοιας του Τελεστή

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Σκοπός του μαθήματος Σκοπός του παρόντος μαθήματος είναι να μάθετε να κάνετε εισαγωγή δεδομένων σε πίνακες και περαιτέρω επεξεργασία

Διαβάστε περισσότερα

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Κεφάλαιο 9.1-9.2 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Ένα string είναι μία ακολουθία αλφαριθμητικών χαρακτήρων, σημείων στίξης κτλ. Π.χ. Hello How are you? 121212 *Apple#123*%

Διαβάστε περισσότερα