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

Μέγεθος: 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) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 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) ερωτήσεις. Κάθε ορθή απάντηση

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

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

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

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

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 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. Σε τι χρησιμεύει το συντακτικό

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ 1) Πότε χρησιμοποιείται η δομή επανάληψης

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

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

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

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

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ 1ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Α ΑΝΑΚΕΦΑΛΑΙΩΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ Γ' ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΠΕΜΠΤΗ 26 ΑΠΡΙΛΙΟΥ 2012 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ

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

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

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

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

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

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 Μάθημα: ΠΛΗΡΟΦΟΡΙΚΗ Ημερομηνία και ώρα εξέτασης: Τρίτη, 6 Ιουνίου 2006 07:30 10:30

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

1.5 ΔΡΑΣΤΗΡΙΟΤΗΤΕΣ μικρόκοσμου «Προγραμματισμός Η/Υ»

1.5 ΔΡΑΣΤΗΡΙΟΤΗΤΕΣ μικρόκοσμου «Προγραμματισμός Η/Υ» 1.5 ΔΡΑΣΤΗΡΙΟΤΗΤΕΣ μικρόκοσμου «Προγραμματισμός Η/Υ» 1. Πήγαινε στο μενού Αρχείο και επίλεξε Άνοιγμα. Άνοιξε το αρχείο sample.x. Ανοίγουν δυο παράθυρα. Παρατήρησε τα ονόματα τους: Πηγαίος κώδικας... και

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07 Ακαδ έτος 2007-2008 ΠΛΗΡΟΦΟΡΙΚΗ Ι Φερεντίνος 22/11/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με ΑΜ σε 3, 7, 8 & 9 22/11/07 Παράδειγμα με if/else if και user input: import javautil*; public class Grades public

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

Μονάδες 12 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Μονάδες 12 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑΔΑ A ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑΔΑ Β ) ΠΑΡΑΣΚΕΥΗ 5 ΙΟΥΝΙΟΥ 2015 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ:

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

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

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

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

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Είσοδος/Έξοδος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Είσοδος/Έξοδος Μέχρι τώρα όποτε θέλαμε να διαβάσουμε χρησιμοποιούσαμε πάντα

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

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της; 1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες (μορφές) της; Η δομή επανάληψης χρησιμοποιείται όταν μια σειρά εντολών πρέπει να εκτελεστεί σε ένα σύνολο περιπτώσεων, που έχουν κάτι

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

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

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013 ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013 ΘΕΜΑ Α Α1. Να χαρακτηρίσετε τις προτάσεις που ακολουθούν, γράφοντας δίπλα στο γράμμα που αντιστοιχεί σε κάθε πρόταση τη

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Ενότητα 5 Δομές Ελέγχου Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Δομές Ελέγχου Οι Boehm και Jacopini απέδειξαν ότι οποιοσδήποτε αλγόριθμος

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

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στην FORTRAN Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 Fortran FORmula TRANslation: (Μία από τις πρώτες γλώσσες τρίτης γενιάς) Εκδόσεις FORTRAN (1957) FORTRAN II (1958) FORTRAN III

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΠΑΝΕΛΛΑ ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α Β ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΠΑΝΕΛΛΑ ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α Β ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΠΑΝΕΛΛΑ ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α Β ) ΤΡΙΤΗ 2 ΙΟΥΝΙΟΥ 2009 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΟΜΗΜΕΝΟΣ

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

Περιληπτικά, τα βήματα που ακολουθούμε γενικά είναι τα εξής:

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

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

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Email: liliadis@fmenr.duth.gr 1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Τα προγράµµατα αποτελούνται από εντολές οι οποίες γράφονται σε έναν απλό επεξεργαστή που προσφέρει και το Περιβάλλον της Visual C++. Οι εντολές

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19) Κεφάλαιο 8.7 Πολυδιάστατοι Πίνακες (Διάλεξη 19) Πολυδιάστατοι πίνακες Μέχρι τώρα μιλούσαμε για Μονοδιάστατους Πίνακες. ή π.χ. int age[5]= {31,28,31,30,31; για Παράλληλους πίνακες, π.χ. int id[5] = {1029,1132,1031,9991,1513;

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

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα Η ΓΛΩΣΣΑ C Η C είναι μια γλώσσα προγραμματισμού υψηλού επιπέδου η οποία αναπτύχθηκε στις αρχές της δεκαετίας του 70 από τον Dennis Ritchie στα Bell Labs. Η σημερινή μορφή της γλώσσας ακολουθεί το πρότυπο

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

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33 ΠΕΡΙΕΧΟΜΕΝΑ Πρόλογος του συγγραφέα... 13 Πρόλογος του καθηγητή Τιμολέοντα Σελλή... 15 ΚΕΦΑΛΑΙΟ 1: Εργαλεία γλωσσών προγραμματισμού...17 1.1 Γλώσσες προγραμματισμού τρίτης γεννεάς... 18 τι είναι η γλώσσα

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

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

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

III. Πως μετατρέπεται το πηγαίο πρόγραμμα σε εκτελέσιμο πρόγραμμα;

III. Πως μετατρέπεται το πηγαίο πρόγραμμα σε εκτελέσιμο πρόγραμμα; ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΙΑΓΩΝΙΣΜΑ ΟΝΟΜΑΤΕΠΩΝΥΜΟ: Θέμα 1ο I. Τι πρέπει να ικανοποιεί ένα κομμάτι κώδικα ώστε να χαρακτηριστεί ως υποπρόγραμμα; Τα υποπρογράμματα πρέπει

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

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 1.3-1.4: Εισαγωγή Στον Προγραµµατισµό ( ιάλεξη 2) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Περιεχόµενα Εισαγωγικές Έννοιες - Ορισµοί Ο κύκλος ανάπτυξης προγράµµατος Παραδείγµατα Πότε χρησιµοποιούµε υπολογιστή?

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης Γλώσσες Προγραμματισμού Εργαστήριο 2ο Τύποι Δεδομένων - Είσοδος / Έξοδος Εργαστήριο 2ο Περίγραμμα Εργαστηριακής Άσκησης Εργαστήριο 2ο...1 Θεωρία εργαστηρίου...2 Τύποι δεδομένων...2 Η συνάρτηση printf()...3

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

ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / Γ ΛΥΚΕΙΟΥ-ΘΕΡΙΝΑ ΣΕΙΡΑ: 1 η ΗΜΕΡΟΜΗΝΙΑ: 09/09/2012

ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / Γ ΛΥΚΕΙΟΥ-ΘΕΡΙΝΑ ΣΕΙΡΑ: 1 η ΗΜΕΡΟΜΗΝΙΑ: 09/09/2012 ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / Γ ΛΥΚΕΙΟΥ-ΘΕΡΙΝΑ ΣΕΙΡΑ: 1 η ΗΜΕΡΟΜΗΝΙΑ: 09/09/2012 ΘΕΜΑ Α Α1. Δίνονται τα παρακάτω τμήματα αλγορίθμου σε φυσική γλώσσα. 1. Αν το ποσό των αγορών(ποσο_αγορων) ενός πελάτη είναι μεγαλύτερο

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

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διαμόρφωση Ελέγχου Ροής Προγράμματος Δομημένος Προγραμματισμός Ο πιο απλός και συνηθισμένος

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Αριθμητική Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Δεύτερο Πρόγραμμα 1 / * Second Simple Program : add 2 numbers * / 2

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

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στην γλώσσα προγραμματισμού C Εισαγωγή στην γλώσσα προγραμματισμού C Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο

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

Α3. Ποια είναι τα πλεονεκτήματα του Δομημένου προγραμματισμού; (Μονάδες 10)

Α3. Ποια είναι τα πλεονεκτήματα του Δομημένου προγραμματισμού; (Μονάδες 10) ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 08 / 02 / 2015 ΕΠΙΜΕΛΕΙΑ ΔΙΑΓΩΝΙΣΜΑΤΟΣ: Ι. ΜΙΧΑΛΕΑΚΟΣ Γ.ΝΙΤΟΔΑΣ ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 11/10/07 Τμήμα θεωρίας: Α.Μ. 8, 9 Κάθε Πέμπτη, 11πμ-2μμ, ΑΜΦ23. Διδάσκων: Ντίνος Φερεντίνος Γραφείο 118 email: kpf3@cornell.edu Μάθημα: Θεωρία + προαιρετικό

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

Εντολές της LOGO (MicroWorlds Pro)

Εντολές της LOGO (MicroWorlds Pro) Εντολές της LOGO (MicroWorlds Pro) Εντολές εμφάνισης (εξόδου) και αριθμητικές πράξεις δείξε Εμφανίζει στην οθόνη έναν αριθμό, το αποτέλεσμα πράξεων, μια λέξη ή μια λίστα (ομάδα) λέξεων. δείξε 200 200 δείξε

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα για τη γλώσσα C: τον gcc μεταγλωττιστή της C σε περιβάλλον

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

Μονάδες 4. β. x=20 και y=10

Μονάδες 4. β. x=20 και y=10 ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΠΑΝΕΛΛΗΝΙΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α A ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α Β ) ΤΡΙΤΗ 4 ΙΟΥΝΙΟΥ 2013 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΟΜΗΜΕΝΟΣ

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

ΚΕΦΑΛΑΙΟ 2 Παράδειγμα 3 Παράδειγμα 5 Παράδειγμα 6 ΔΤ3 ΔΤ4 151

ΚΕΦΑΛΑΙΟ 2 Παράδειγμα 3 Παράδειγμα 5 Παράδειγμα 6  ΔΤ3 ΔΤ4  151 ΚΕΦΑΛΑΙΟ 2 Παράδειγμα 3 Σε ένα μετεωρολογικό κέντρο χρειάζεται να βρεθεί η μέγιστη και η ελάχιστη θερμοκρασία από τις μέσες ημερήσιες θερμοκρασίες ενός μήνα. Να γραφεί ένας αλγόριθμος που θα διαβάζει τη

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

Πληρουορική Γ Γσμμασίοσ

Πληρουορική Γ Γσμμασίοσ Πληρουορική Γ Γσμμασίοσ Προγραμματισμός και Αλγόριθμοι Από το και τημ Χελώμα στημ Ευριπίδης Βραχνός http://evripides.mysch.gr/ 2014 2015 1 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Ενότητα:

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

ΕΠΛ 034: Εισαγωγήστον ΠρογραµµατισµόγιαΗΜΥ

ΕΠΛ 034: Εισαγωγήστον ΠρογραµµατισµόγιαΗΜΥ ΕΠΛ 034: Εισαγωγήστον ΠρογραµµατισµόγιαΗΜΥ Αχιλλέας Αχιλλέως, Τµήµα Πληροφορικής, Πανεπιστήµιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 2 ΠρογραµµατισµόςΗ/Υ Θέµατα ιάλεξης οµή Προγράµµατος C Μεθοδολογία

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

Εισαγωγή στην Πληροφορική Προγραμματισμός-Λειτουργικά

Εισαγωγή στην Πληροφορική Προγραμματισμός-Λειτουργικά Εισαγωγή στην Πληροφορική Προγραμματισμός-Λειτουργικά Ηλ. Γκρίνιας Τ. Ε. Ι. Σερρών Τμήμα Πληροφορικής και Επικοινωνιών Αλγόριθμοι Ορισμός: ο αλγόριθμος είναι μια σειρά από πεπερασμένα βήματα που καθορίζουν

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

ΛΥΚΕΙΟ ΣΟΛΕΑΣ Σχολική χρονιά 2008-2009

ΛΥΚΕΙΟ ΣΟΛΕΑΣ Σχολική χρονιά 2008-2009 ΛΥΚΕΙΟ ΣΟΛΕΑΣ Σχολική χρονιά 2008-2009 ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ 2009 ΜΑΘΗΜΑ: ΠΛΗΡΟΦΟΡΙΚΗ ΤΑΞΗ : Β ΗΜΕΡΟΜΗΝΙΑ: Τετάρτη, 3 Ιουνίου 2009 ΩΡΑ: 07:45 10:15 ΟΔΗΓΙΕΣ: Το εξεταστικό δοκίμιο αυτό αποτελείται

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή Στο εργαστήριο αυτό θα μάθουμε για τη χρήση συναρτήσεων με σκοπό την κατασκευή αυτόνομων τμημάτων προγραμμάτων που υλοποιούν μία συγκεκριμένη διαδικασία, τα οποία

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Γ ΛΥΚΕΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Γ ΛΥΚΕΙΟΥ ΘΕΜΑ 1 ο Α. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις παρακάτω προτάσεις 1-5 και δίπλα τη λέξη Σωστό,

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

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει;

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει; ΜΑΘΗΜΑ 7 Κλήση αλγορίθμου από αλγόριθμο Αναδρομή Σ χ ο λ ι κ ο Β ι β λ ι ο ΥΠΟΚΕΦΑΛΑΙΟ 2.2.7: ΕΝΤΟΛΕΣ ΚΑΙ ΔΟΜΕΣ ΑΛΓΟΡΙΘΜΟΥ ΠΑΡΑΓΡΑΦΟI 2.2.7.5: Κλήση αλγορίθμου από αλγόριθμο 2.2.7.6: Αναδρομή εισαγωγη

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Βιβλιογραφία "C Προγραμματισμός", Deitel & Deitel, Πέμπτη Έκδοση, Εκδόσεις

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

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή Δημιουργία Νέου αρχείου Από το μενού προγραμμάτων ανοίγετε το DEV C++ Επιλέγετε File-> New-> Source File (συντόμευση πληκτρολογίου Ctrl+N)

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΤΕΛΟΣ 1ΗΣ ΑΠΟ 6 ΣΕΛΙ ΕΣ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΤΕΛΟΣ 1ΗΣ ΑΠΟ 6 ΣΕΛΙ ΕΣ ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΠΑΝΕΛΛΑ ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α A ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α Β ) ΕΥΤΕΡΑ 16 ΙΟΥΝΙΟΥ 2014 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ:

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

Παράδειγμα 2. Λύση & Επεξηγήσεις. Τέλος_επανάληψης Εμφάνισε "Ναι" Τέλος Α2

Παράδειγμα 2. Λύση & Επεξηγήσεις. Τέλος_επανάληψης Εμφάνισε Ναι Τέλος Α2 Διδακτική πρόταση ΕΝΟΤΗΤΑ 2η, Θέματα Θεωρητικής Επιστήμης των Υπολογιστών Κεφάλαιο 2.2. Παράγραφος 2.2.7.4 Εντολές Όσο επανάλαβε και Μέχρις_ότου Η διαπραγμάτευση των εντολών επανάληψης είναι σημαντικό

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

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

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

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

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι Α λ γ ό ρ ι θ μ ο ι Αριθμητικοί τελεστές Οι αριθμητικοί τελεστές είναι: πρόσθεση, αφαίρεση, πολλαπλασιασμός και διαίρεση +,-,*,/ ύψωση σε δύναμη ^ πηλίκο ακέραιης διαίρεσης δύο ακεραίων αριθμών div υπόλοιπο

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

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι Εισαγωγή στην επιστήμη των υπολογιστών Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι 1 Έννοια Ανεπίσημα, ένας αλγόριθμος είναι μια βήμα προς βήμα μέθοδος για την επίλυση ενός προβλήματος ή την διεκπεραίωση

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

Προγραμματισμός Υπολογιστών

Προγραμματισμός Υπολογιστών Προγραμματισμός Υπολογιστών Βασικές γνώσεις Κ. Βασιλάκης, ΣΤΕΦ, ΤΕΙ Κρήτης Η Πληροφορική και τα εργαλεία της Παροχή έγκαιρης και έγκυρης πληροφόρησης. Καταχώριση στοιχείων Αποθήκευση Επεξεργασία ψηφιακών

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΧΗΜΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΙΚΟ ΚΕΝΤΡΟ Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού Μάθημα 2ο Aντώνης Σπυρόπουλος v2_061015 Οροι που

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Ενότητα 12 Δομές (Structures) Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Αφαιρετικότητα Με τις συναρτήσεις επιτυγχάνουμε αφαιρετικότητα

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

ΠΡΟΣ: Τηλέφωνο: 210-3443422 Ινστιτούτο Εκπαιδευτικής Πολιτικής ΚΟΙΝ.:

ΠΡΟΣ: Τηλέφωνο: 210-3443422 Ινστιτούτο Εκπαιδευτικής Πολιτικής ΚΟΙΝ.: ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ, ΕΡΕΥΝΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ----- Βαθμός Ασφαλείας: Να διατηρηθεί μέχρι: Βαθ. Προτεραιότητας: ΓΕΝΙΚΗ ΔΙΕΥΘΥΝΣΗ ΣΠΟΥΔΩΝ Π/ΘΜΙΑΣ ΚΑΙ Δ/ΘΜΙΑΣ ΕΚΠΑΙΔΕΥΣΗΣ ΔΙΕΥΘΥΝΣΗ ΣΠΟΥΔΩΝ,

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

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΑΝΑΚΕΦΑΛΑΙΩΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ Γ' ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΠΕΜΠΤΗ 26 ΑΠΡΙΛΙΟΥ 2012 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΛΥΣΕΙΣ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: 7 Α1. Κάθε σωστή απάντηση

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

Κεφάλαιο 2.1-2.4: Εισαγωγή στην C: (Διαλέξεις 3-4)

Κεφάλαιο 2.1-2.4: Εισαγωγή στην C: (Διαλέξεις 3-4) Κεφάλαιο 2.1-2.4: Εισαγωγή στην C (Διαλέξεις 3-4) Περιεχόμενα Εισαγωγή στην C: Σύνταξη και Σημασιολογία σχόλια μεταβλητές και σταθερές τύποι δεδομένων Μετά αυτές τις δυο διαλέξεις θα μπορείτε να γράψετε

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

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Προεπεξεργαστής Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Διαδικασία Μεταγλώττισης πρόγραµµα επεξεργασίας κειµένου if a

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

ΠαράδειγµαΠρογραµµατισµού

ΠαράδειγµαΠρογραµµατισµού Προγραµµατισµός Η/Υ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Μεθοδολογία Προγραµµατισµού Αφαιρετικότητα Ροή Ελέγχου/ εδοµένων Βιβλίο µαθήµατος: Chapter 1,, Sec. 4-54 ΕΠΛ 131 Αρχές Προγραµµατισµού

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

ΜΕΡΟΣ Α - Αποτελείται από δέκα (10) ερωτήσεις. Κάθε ερώτηση βαθμολογείται με έξι μονάδες.

ΜΕΡΟΣ Α - Αποτελείται από δέκα (10) ερωτήσεις. Κάθε ερώτηση βαθμολογείται με έξι μονάδες. ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2008 Μάθημα: ΠΛΗΡΟΦΟΡΙΚΗ Ημερομηνία και ώρα εξέτασης: Τετάρτη, 4 Ιουνίου 2008 07:30

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

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Βασικές Έννοιες Προγραμματισμού Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Αριθμητικά συστήματα Υπάρχουν 10 τύποι ανθρώπων: Αυτοί

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

Η Γλώσσα Προγραμματισμού C (Μέρος 2 - Οι Bασικές Εντολές της C) Οι Βασικοί Τελεστές της C

Η Γλώσσα Προγραμματισμού C (Μέρος 2 - Οι Bασικές Εντολές της C) Οι Βασικοί Τελεστές της C Η Γλώσσα Προγραμματισμού C (Μέρος 2 - Οι Bασικές Εντολές της C) Οι Βασικοί Τελεστές της C Η C, όπως όλες οι γλώσσες προγραμμστισμού, χρησιμοποιεί τελεστές για να εκτελέσει τις αριθμητικές λειτουργίες.

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝΩ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Γ ΛΥΚΕΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝΩ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Γ ΛΥΚΕΙΟΥ ΘΕΜΑ 1 ο : Α. Να αναφέρετε ονομαστικά τις βασικές λειτουργίες (πράξεις) επί των δομών δεδομένων. Μονάδες 8 Β. Στον

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

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

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή 1. Ηλεκτρονικός Υπολογιστής Ο Ηλεκτρονικός Υπολογιστής είναι μια συσκευή, μεγάλη ή μικρή, που επεξεργάζεται δεδομένα και εκτελεί την εργασία του σύμφωνα με τα παρακάτω

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

1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης

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

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

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ Η ΔΙΔΑΣΚΑΛΙΑ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΣΤΟ ΛΥΚΕΙΟ Εισαγωγή Η μεγάλη ανάπτυξη και ο ρόλος που

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

2.2.3 Η εντολή Εκτύπωσε

2.2.3 Η εντολή Εκτύπωσε 2.2.3 Η εντολή Εκτύπωσε Η εντολή Εκτύπωσε χρησιµοποιείται προκειµένου να εµφανίσουµε κάτι στην οθόνη του υπολογιστή. Για τον λόγο αυτό ονοµάζεται και εντολή εξόδου. Ισοδύναµα µπορεί να χρησιµοποιηθεί και

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

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Τμήμα Πληροφορικής & Επικοινωνιών Τομέας Υπολογιστικών Τεχνικών & Συστημάτων Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Ιωάννης Γεωργουδάκης - Πάρις Μαστοροκώστας Σεπτέμβριος 2011 ΠΕΡΙΕΧΟΜΕΝΑ

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

Πώς μπορούμε να δημιουργούμε γεωμετρικά σχέδια με τη Logo;

Πώς μπορούμε να δημιουργούμε γεωμετρικά σχέδια με τη Logo; Κεφάλαιο 2 Εισαγωγή Πώς μπορούμε να δημιουργούμε γεωμετρικά σχέδια με τη Logo; Η Logo είναι μία από τις πολλές γλώσσες προγραμματισμού. Κάθε γλώσσα προγραμματισμού έχει σκοπό τη δημιουργία προγραμμάτων

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

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ Μ. Γρηγοριάδου Ρ. Γόγουλου Ενότητα: Η Διδασκαλία του Προγραμματισμού Περιεχόμενα Παρουσίασης

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