1. Αλγοριθμική και Δομές Δεδομένων
Μαθησιακά Αποτελέσματα / Γνώσεις
• Βασικές έννοιες της ανάλυσης και της σύνθεσης ενός
προβλήματος
• Κατανοήση της έννοιας του αλγορίθμου και αποκτήση
αλγοριθμικής σκέψης.
• Σχεδιασμός αλγορίθμων και την συγγραφή αποδοτικών
προγραμμάτων σε γλώσσα προγραμματισμού C
• Επιλογή κατάλληλων αλγοριθμικών δομών ανάλογα με το
πρόβλημα προς επίλυση
2. Λογική Ανάλυση Προβλήματος
Ένας Η/Υ μπορεί να κάνει μόνο στοιχειώδεις πράξεις και να
παίρνει κάποιες μηχανικές αποφάσεις.
Η λογική ανάλυση ενός προβλήματος είναι συχνά δύσκολη και
απαιτεί γνώσεις και ανθρώπινη ευφυΐα.
Βήματα ανάλυσης ενός προβλήματος:
Φραστική ∆ιατύπωση του Προβλήματος.
Μαθηματική ∆ιατύπωση του Προβλήματος
Αρχική Επίλυση του Προβλήματος.
Αριθμητική Ανάλυση του Προβλήματος
Προγραμματισμός και Χρήση του Η/Υ
Λογικό ∆ιάγραμμα
Επιλογή Γλώσσας
Προγραμματισμός
Εκτέλεση του Προγράμματος και Έλεγχος
3. Αλγόριθμοι
Αλγόριθμος: Μέθοδος για την επίλυση ενός προβλήματος
Σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε
πεπερασμένο χρόνο, που στοχεύουν στην επίλυση ενός
προβλήματος.
Δεδομένα: Σύνολο από πληροφορίες που αποθηκεύονται στον
υπολογιστή για τη λύση ενός προβλήματος
Δομή Δεδομένων: Μέθοδος αποθήκευσης και επεξεργασίας δεδομένων
Προγράμματα = Αλγόριθμοι + Δομές Δεδομένων
Παράδειγμα: Εύρεση ταχύτερης διαδρομής
5. Κριτήρια αλγορίθμων
Οι αλγόριθμοι θα πρέπει να πληρούν κάποια πρότυπα και να
διατυπώνονται με συγκεκριμένο τρόπο:
• Καθοριστικότητα
• Κάθε κανόνας του ορίζεται επακριβώς και η αντίστοιχη διεργασία είναι συγκεκριμένη.
Κάθε εντολή πρέπει να καθορίζεται χωρίς καμία αμφιβολία για τον τρόπο εκτέλεσής
της
• Περατότητα - Finiteness
• Κάθε εκτέλεση είναι πεπερασμένη, δηλαδή τελειώνει ύστερα από έναν πεπερασμένο
αριθμό διεργασιών ή βημάτων
• Αποτελεσματικότητα - Effectiveness
• Είναι μηχανιστικά αποτελεσματικός, δηλαδή όλες οι διαδικασίες που περιλαμβάνει
μπορούν να πραγματοποιηθούν με ακρίβεια και σε πεπερασμένο χρόνο "με μολύβι και
χαρτί"
• Είσοδος δεδομένων - Input
• Δυνατότητα εισαγωγής δεδομένων
• Έξοδος αποτελεσμάτων - Output
• Ο αλγόριθμος πρέπει να δημιουργεί τουλάχιστον μία τιμή (δεδομένων) ωςαποτέλεσμα
προς το χρήστη ή προς ένα άλλο αλγόριθμο.
6. Περιγραφή και αναπαράσταση
Βασικοί τρόποι αναπαράστασης ενός αλγορίθμου:
• Ελεύθερο κείμενο
• Διάγραμμα ροής
• Ψευδογλώσσα ή γλώσσα προγραμματισμού
7. Λογικό Διάγραμμα
• Περιγράφει έναν αλγόριθμο βολικά και παραστατικά με απλά
γεωμετρικά σχήματα:
• Ορθογώνιο παραλληλόγραμμο
(ενδιάμεση πράξη)
• Ρόμβος (απόφαση)
• Έλλειψη(Αρχή/Τέλος)
• Πλάγιο Παραλληλόγραμμο
(Είσοδος/Έξοδος Δεδομένων)
9. Γλώσσα
προγραμματισμού C
• Dennis Ritchie, Bell Labs το 1972, για τις ανάγκες του UNIX
• Γλώσσα μέσου επιπέδου:
• Εμπεριέχει στοιχεία γλωσσών υψηλού επιπέδου (Cobol,
Pascal) και στοιχεία των γλωσσών χαμηλού επιπέδου
(Assembly)
• Έφερε τον προγραμματιστή πιο κοντά στο hardware σε σχέση
με τις υπόλοιπες γλώσσες υψηλου επιπέδου
• Ιδιαίτερα δημοφιλής
• Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος
συστημάτων και εφαρμογών
• Φιλοσοφία: Ο προγραμματιστής έχει τον πλήρη έλεγχο και
ευθύνεται για τα σφάλματά του
10. Μεταγλώττιση και εκτέλεση
προγραμμάτων
• Μεταγλωττιστής ή μεταφραστής (compiler): μετατρέπει/μεταφράζει
κείμενο γραμμένο σε μια γλώσσα προγραμματισμού σε μια άλλη
γλώσσα προγραμματισμού (τη γλώσσα στόχο)
• Πηγαίος κώδικας (source code): Κείμενο εισόδου
• Από γλώσσα υψηλού επιπέδου σε μια γλώσσα χαμηλότερου
επιπέδου
• Ο προγραμματιστής γράφει το προραμμα σε μία γλώσσα
προγραμματισμού (π.χ. C++) και στη συνέχεια μεταγλωτίζει (compile)
το πρόγραμμα
• Ο compiler μας ειδοποιεί για συντακτικά λάθη και αρνείται να
προχωρήσει εάν υπάρχουν.
• Κάποιες γλώσσες αντί για μεταγλωττιστή (compiler) έχουν διερμηνευτή
(interpreter). Εκτελείται εντολή-εντολή ο κώδικας σταματά σε λάθος
11. Μεταγλώττιση και εκτέλεση
προγραμμάτων
Είδη Λαθών Μεταγλώτισης
• Συντακτικά λάθη:
• Έχουμε γράψει με λάθος τρόπο κάποιες εντολές
• Λάθη χρόνου εκτέλεσης:
• Δίχως συντακτικά λάθη
• Το πρόγραμμα αυτό κολλάει ή δεν βγάζει αποτελέσμα, π.χ. εάν
γίνει διαίρεση με το μηδέν
• Λογικά λάθη:
• Δίχως συντακτικά λάθη
• Εμφανίζει αποτελέσματα
• Λανθασμένα αποτελέσματα
• Δύσκολο να ανακαλυφθούν και να διορθωθούν.
• Σχεδόν όλα τα προγράμματα έχουν λάθη (bugs), τα οποία τα
διορθώνουμε με επανέλεγχο και αποσφαλμάτωση του κώδικα
(debuging)