Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Βήματα προς τη δημιουργία εκτελέσιμου κώδικα Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD
Βήματα προς τη δημιουργία εκτελέσιμου κώδικα Ανάλυση προβλήματος Επίλυση συγκεκριμένων περιπτώσεων «στο χέρι» Εύρεση κατάλληλου αλγορίθμου Αναπαράσταση αλγορίθμου (Λογικό Διάγραμμα Ψευδοκώδικας) Συγγραφή πηγαίου κώδικα (Kωδικοποίηση αλγορίθμου) Διόρθωση συντακτικών λαθών Εκτέλεση προγράμματος Αποσφαλμάτωση και Έλεγχος αποτελεσμάτων (Προσοχή σε «ειδικές περιπτώσεις») Βελτίωση πηγαίου κώδικα
Ανάλυση Προβλήματος Τι ξέρουμε; Τι ΔΕΝ ξέρουμε; (Δεδομένα εισόδου) (Δεδομένα εξόδου) Τι είδους είναι; (λέξεις, αριθμοί,...) Σταθερές ή μεταβλητές; Τι μονάδες έχουν; Ποια είναι η επιθυμητή ακρίβεια; Ποια είναι τα πεδία ορισμού; Ποιες οι σχέσεις αλληλεξάρτησής τους; (φυσική έννοια)
Παράδειγμα Ένας κύλινδρος όγκου 100lt περιέχει ιδανικό αέριο θερμοκρασίας 20 ο C και πίεσης 15 atm. Ποιά θα είναι η πίεση αν μειώσουμε σταδιακά τον όγκο στα 80, 60, 40, 20lt υπό σταθερή θερμοκρασία; Παράμετρος Είδος Όνομα Μονάδες Ακρίβεια Τιμές Σχέσεις Θερμοκρασία Σταθερά T K 0.1 298 Πίεση Μεταβλητή P atm 0.1 Πίνακας τιμών Όγκος Μεταβλητή V lt 1 Πίνακας τιμών R Σταθερά R atm/(mol.k) 10-8 0.0820556 PV=nRT
Αλγόριθμος Ως αλγόριθμος ορίζεται μια πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο, που στοχεύουν στην επίλυση ενός προβλήματος. Η ονομασία «αλγόριθμος» προέρχεται από το όνομα του Πέρση μαθηματικού Abu Ja'far Mohammed ibn Musa Αl-Khowarismi Κριτήρια που πρέπει να ικανοποιεί ένας Αλγόριθμος Είσοδος Έξοδος Περατότητα Καθοριστικότητα Αποτελεσματικότητα
Πολυπλοκότητα Αλγορίθμων Αποτελεί αντικείμενο της λεγόμενης «Ανάλυσης Αλγορίθμων» Παρέχει εκτίμηση των απαιτήσεων του Αλγορίθμου σε υπολογιστικούς πόρους Συνήθως ως υπολογιστικούς πόρους θεωρούμε τις απαιτήσεις σε υπολογιστική ισχύ (έννοια που συνδέεται άμεσα με τον χρόνο εκτέλεσης) και τις απαιτήσεις σε μνήμη RAM Χρησιμοποιείται κυρίως ο συμβολισμός O() (καλείται «όμικρον κεφαλαίο») που δίνει μία εκτίμηση της τάξης μεγέθους για σύγκριση των αλγορίθμων π.χ. Ένας αλγόριθμος της τάξης Ο(logΝ) είναι προτιμότερος από έναν αλγόριθμο που επιλύει το ίδιο πρόβλημα αλλά είναι της τάξης Ο(Ν) Η απόδοση ενός ηλεκτρονικού υπολογιστή μετριέται συνήθως σε MIPS δηλ, πόσα εκατομμύρια εντολών το δευτερόλεπτο μπορεί να εκτελέσει. Πολλές φορές σε επιστημονικούς υπολογισμούς χρησιμοποιείται μία άλλη μονάδα μέτρησης, τα FLOPS. Δηλ, πόσες πράξεις μεταξύ αριθμών κινητής υποδιαστολής μπορεί να εκτελέσει το δευτερόλεπτο. π.χ. Ο εξαπύρηνος i7-980 φτάνει τα 109 GigaFLOPS
Διαγράμματα ροής και ψευδοκώδικας Είναι δύο τρόποι αναπαράστασης των αλγορίθμων Μειώνουν κατά πολύ την πιθανότητα λογικών σφαλμάτων στο πρόγραμμα Βοηθούν στην κατανόηση των δομών και των διαδικασιών και την καλύτερη οργάνωση του κώδικα Διευκολύνουν την βελτίωση του αλγορίθμου Είναι ανεξάρτητα από την οποιαδήποτε γλώσσα ή μέθοδο προγραμματισμού
Συμβολισμοί Διαγραμμάτων Ροής Είσοδος/Έξοδος Επεξεργασία Απόφαση Προετοιμασία Αρχή/Τέλος Σύνδεση Διαδικασία Γραμμή ροής Εισαγωγή και εξαγωγή δεδομένων Εκφράσεις που εκτελούνται διαδοχικά Κατεύθυνση της ροής εκτέλεσης με βάση την τιμή μιας συνθήκης Επικεφαλίδα επανάληψης Επικεφαλίδα αρχής και τέλους Σύνδεση πολλών γραμμών ροής Προκαθορισμένη διαδικασία με στοιχειώδη βήματα εκτέλεσης
Αναπαράσταση Αλγορίθμου με Λογικό Διάγραμμα
Καλές Πρακτικές Προγραμματισμού Γράφουμε κώδικα με αρχικό στόχο περισσότερο την σαφήνεια και έπειτα την βελτιστοποίηση της απόδοσης (σε σύγχρονους Η/Υ) Ο κώδικάς μας πρέπει να είναι όσο πιο γενικός γίνεται Τεκμηριώνουμε επαρκώς τον κώδικά μας Βελτιώνουμε την εμφάνιση του κώδικά μας χρησιμοποιώντας κατάλληλα εσοχές, κενές γραμμές κτλ Χρησιμοποιούμε αρθρωτό προγραμματισμό χωρίζοντας το πρόγραμμά μας σε υποπρογράμματα Προγραμματίζουμε «αμυντικά» ελέγχοντας την εγκυρότητα όλων των δεδομένων εισόδου από τον χρήστη Χρησιμοποιούμε κατάλληλους αλγορίθμους