ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΨΗ ΘΕΩΡΙΑΣ ΚΕΦΑΛΑΙΟ 1 Ορισµοί: Με τον όρο πρόβληµα εννοείται µια κατάσταση η οποία χρήζει αντιµετώπισης, απαιτεί λύση, η δε λύση της δεν είναι γνωστή, ούτε προφανής. Με τον όρο δοµή ενός προβλήµατος αναφερόµαστε στα συστατικά του µέρη, στα επιµέρους τµήµατα που το αποτελούν καθώς επίσης και στον τρόπο που αυτά συνδέονται µεταξύ τους. Τα απλούστερα προβλήµατα στα οποία αναλύεται ένα πρόβληµα καλούνται υποπροβλήµατα του αρχικού προβλήµατος. εδοµένο είναι οποιοδήποτε στοιχείο µπορεί να γίνει αντιληπτό από ένα τουλάχιστον παρατηρητή µε µια από τις πέντε αισθήσεις του. Πληροφορία είναι οποιοδήποτε γνωσιακό στοιχείο προέρχεται από την επεξεργασία δεδοµένων. Επεξεργασία δεδοµένων είναι η διαδικασία κατά την οποία ένας µηχανισµός δέχεται τα δεδοµένα, τα επεξεργάζεται σύµφωνα µε ένα προκαθορισµένο τρόπο και αποδίδει πληροφορίες. Για την γραφική απεικόνιση της δοµής ενός προβλήµατος χρησιµοποιείται η διαγραµµατική αναπαράσταση Η διαγραµµατική αναπαράσταση βοηθάει στη δηµιουργία µιας πληρέστερης εικόνας του προβλήµατος. Για την υλοποίηση της διαγραµµατικής αναπαράστασης : 1. Το αρχικό πρόβληµα αναπαρίσταται από ένα ορθογώνιο παραλληλόγραµµο. 2. Κάθε ένα από τα απλούστερα προβλήµατα στα οποία αναλύεται ένα οποιοδήποτε πρόβληµα, αναπαρίσταται επίσης από ένα ορθογώνιο παραλληλόγραµµο. 3. Τα παραλληλόγραµµα που αντιστοιχούν στα απλούστερα προβλήµατα σχεδιάζονται ένα επίπεδο χαµηλότερα. Τα στάδια αντιµετώπισης ενός προβλήµατος: 1. Κατανόηση, όπου απαιτείται η σωστή και πλήρης αποσαφήνιση των δεδοµένων και των ζητουµένων του προβλήµατος 2. Ανάλυση, όπου το αρχικό πρόβληµα διασπάται σε άλλα επί µέρους απλούστερα προβλήµατα 3. Επίλυση, όπου υλοποιείται η λύση του προβλήµατος µέσω της λύσης των επιµέρους προβληµάτων Λειτουργίες που εκτελεί ένας υπολογιστής: 1. Πρόσθεση, η οποία αποτελεί τη βασική αριθµητική πράξη, µε το σκεπτικό ότι και οι άλλες αριθµητικές πράξεις µπορούν να αντιµετωπιστούν σαν διαδικασίες πρόσθεσης. 2. Σύγκριση, για την εκτέλεση των λογικών πράξεων. 3. Μεταφορά δεδοµένων, λειτουργία που προηγείται και έπεται της επεξεργασίας δεδοµένων. ΚΑΤΗΓΟΡΙΕΣ ΠΡΟΒΛΗΜΑΤΩΝ Τα προβλήµατα διακρίνονται σε κατηγορίες ανάλογα: Με τη δυνατότητα επίλυσης τους. Με το βαθµό δόµησης των λύσεων των επιλύσιµων προβληµάτων. Με το είδος επίλυσης που επιζητούν. Σύµφωνα µε την επιλυσιµότητα διακρίνονται σε τρεις κατηγορίες: 1. Επιλύσιµα είναι εκείνα τα προβλήµατα για τα οποία η λύση τους είναι ήδη γνωστή και έχει διατυπωθεί. 2. Ανοικτά ονοµάζονται εκείνα για τα οποία η λύση τους δεν έχει µεν βρεθεί, αλλά παράλληλα δεν έχει αποδειχθεί ότι δεν επιδέχονται λύση. 3. Άλυτα χαρακτηρίζονται εκείνα για τα οποία έχουµε φτάσει στην παραδοχή ότι δεν επιδέχονται λύση.
Σύµφωνα µε το βαθµό δόµησης διακρίνονται σε τρεις κατηγορίες: 1. οµηµένα χαρακτηρίζονται εκείνα τα προβλήµατα των οποίων η επίλυση προέρχεται από µια αυτοµατοποιηµένη διαδικασία. 2. Ηµιδοµηµένα ονοµάζονται εκείνα,των οποίων η λύση επιδιώκεται στα πλαίσια ενός εύρους πιθανών λύσεων, αφήνοντας στον ανθρώπινο παράγοντα περιθώρια επιλογής. 3. Αδόµητα χαρακτηρίζονται εκείνα,των οποίων οι λύσεις δεν µπορούν να δοµηθούν ή δεν έχει διερευνηθεί σε βάθος η δυνατότητα δόµησης τους. Πρωτεύοντα ρόλο στην επίλυση αυτού του τύπου προβληµάτων κατέχει η ανθρώπινη διαίσθηση. Σύµφωνα µε το είδος επίλυσης που επιζητούν διακρίνονται σε τρεις κατηγορίες: 1. Απόφασης όπου η απόφαση που πρόκειται να ληφθεί σαν λύση του προβλήµατος που τίθεται, απαντά σε ένα ερώτηµα και πιθανόν αυτή η απάντηση να είναι ένα ναι ή ένα όχι. 2. Υπολογιστικά όπου το πρόβληµα που τίθεται απαιτεί τη διενέργεια υπολογισµών για να µπορέσει να δοθεί µια απάντηση στο πρόβληµα. 3. Βελτιστοποίησης όπου το πρόβληµα που τίθεται επιζητά το βέλτιστο αποτέλεσµα για τα συγκεκριµένα δεδοµένα που διαθέτει. Λόγοι για τους οποίους αναθέτουµε την επίλυση ενός προβλήµατος σε υπολογιστή: Την πολυπλοκότητα των υπολογισµών, Την επαναληπτικότητα των διαδικασιών, Την ταχύτητα εκτέλεσης των πράξεων, Το µεγάλο πλήθος δεδοµένων. ΚΕΦΑΛΑΙΟ 2 Ορισµοί: Αλγόριθμος είναι μια πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασµένο χρόνο, που στοχεύουν στην επίλυση ενός προβλήµατος. Ολίσθηση προς τα αριστερά ισοδυναµεί µε πολλαπλασιασµό επί δύο, ενώ η ολίσθηση προς τα δεξιά ισοδυναµεί µε την ακέραια διαίρεση δια δύο. Κριτήρια που πρεπει να ικανοποιεί ο αλγόριθµος: ΕΙΣΟ ΟΣ: Καµία, µια ή περισσότερες τιµές δεδοµένων πρέπει να δίνονται ως είσοδοι στον αλγόριθµο. ΕΞΟ ΟΣ: Κάθε αλγόριθµος πρέπει να δηµιουργεί τουλάχιστον µια τιµή δεδοµένων ως αποτέλεσµα ΚΑΘΟΡΙΣΤΙΚΟΤΗΤΑ : Κάθε εντολή του αλγόριθµου πρέπει να καθορίζεται χωρίς καµιά αµφιβολία για τον τρόπο εκτέλεσης της ΠΕΡΑΤΟΤΗΤΑ: Κάθε αλγόριθµος πρέπει να τελειώνει µετά από πεπερασµένο αριθµό βηµάτων σε πεπερασµένο χρόνο. ΑΠΟΤΕΛΕΣΜΑΤΙΚΟΤΗΤΑ: Κάθε εντολή του αλγορίθµου πρέπει να είναι απλή, εκτελέσιµη και να µην είναι περιττή. Τρόποι αναπαράστασης αλγόριθµων: Ελεύθερο κείµενο: Ο πιο ανεπεξέργαστος και αδόµητος τρόπος παρουσίασης ενός αλγορίθµου. Κίνδυνος να παραβιαστεί το κριτήριο της αποτελεσµατικότητας.! ιαγραµµατικές τεχνικές: Γραφικός τρόπος παρουσίασης της αλγορίθµου µε πιο γνωστά τα διαγράµµατα ροής. Φυσική γλώσσα µε βήµατα: Κίνδυνος να παραβιαστεί το κριτήριο της καθοριστικότητας.! Κωδικοποίηση: ηλαδή µε ένα πρόγραµµα που όταν εκτελεσθεί θα δώσει τα ίδια αποτελέσµατα µε τον αλγόριθµο.
Βασικές έννοιες αλγορίθµου: Σταθερές: Με τον όρο σταθερές αναφερόµαστε σε προκαθορισµένες τιµές που παραµένουν αµετάβλητες σε όλη την διάρκεια της εκτέλεσης του αλγόριθµου. Τις διακρίνουµε ως εξής: αριθµητικές, αλφαριθµητικές, λογικές Μεταβλητές: Μια µεταβλητή είναι ένα γλωσσικό αντικείµενο που χρησιµοποιείται για να παραστήσει ένα στοιχείο δεδοµένου. Η τιµή της µεταβλητής είναι η τιµή που βρίσκεται στην αντίστοιχη θέση µνήµης και µπορεί να µεταβάλλεται κατά την διάρκεια της εκτέλεσης του αλγορίθµου. Ανάλογα µε το είδος της τιµής που µπορούν να λάβουν οι µεταβλητές, τις διακρίνουµε ως εξής: αριθµητικές (περιέχουν µόνο αριθµούς), αλφαριθµητικές (περιέχουν οποιαδήποτε γράµµατα, αριθµούς, κενά ή σύµβολα και περικλείονται σε διπλά ή µονά εισαγωγικά), λογικές (παίρνουν µια από δύο προκαθορισµένες τιµές, αληθές ή ψευδές) Τελεστές: Ονοµάζονται τα γνωστά σύµβολα που χρησιµοποιούνται για τις πράξεις. ιακρίνονται σε: αριθµητικούς ( +, -, *, /, ^, div, mod ), λογικούς ( και, ή, όχι ) και συγκριτικούς ( <, >, >=, =<, =, <> ). Εκφράσεις: Οι εκφράσεις διαµορφώνονται από τους τελεστέους (σταθερές και µεταβλητές) και τους τελεστές. Η διεργασία αποτίµησης µιας έκφρασης συνίσταται στην απόδοση τιµών στις µεταβλητές και στην εκτέλεση πράξεων. Η τελική τιµή µιας έκφρασης εξαρτάται από την ιεραρχία των πράξεων και την χρήση των παρενθέσεων. Μια έκφραση µπορεί να αποτελείται από µια µόνο µεταβλητή ή σταθερά µέχρι µια πολύπλοκη µαθηµατική έκφραση. ΚΕΦΑΛΑΙΟ 3 Ορισμοί: οµή δεδοµένων είναι ένα σύνολο αποθηκευµένων δεδοµένων που υφίσταται επεξεργασία από ένα σύνολο λειτουργιών. Κάθε µορφή δοµής δεδοµένων αποτελείται από ένα σύνολο κόµβων. Σκοπιές από τις οποίες µελετάει η πληροφορική τα δεδοµένα: Υλικού: ηλαδή η µηχανή επιτρέπει στα δεδοµένα ενός προγράµµατος να αποθηκεύονται στην κύρια µνήµη και στις περιφερειακές συσκευές µε διάφορες αναπαραστάσεις. Γλωσσών προγραµµατισµού: Οι γλώσσες προγραµµατισµού υψηλού επιπέδου επιτρέπουν τη χρήση διαφόρων τύπων µεταβλητών για να περιγράψουν ένα δεδοµένο. οµών δεδοµένων: οµή δεδοµένων είναι ένα σύνολο δεδοµένων µαζί µε ένα σύνολο επιτρεπτών λειτουργιών επί αυτών. Ανάλυσης δεδοµένων: Τρόποι καταγραφής και αλληλοσυσχέτισης των δεδοµένων µελετώνται έτσι ώστε να αναπαρασταθεί η γνώση για πραγµατικά γεγονότα Το πρόγραµµα πρέπει να θεωρεί τη δοµή δεδοµένων και τον αλγόριθµο ως µια αδιάσπαστη ενότητα. Εξίσωση Wirth (1976): αλγόριθµος + δοµές δεδοµένων=πρόγραµµα Βασικές πράξεις επί των δοµών δεδοµένων: Προσπέλαση, πρόσβαση σε ένα κόµβο µε σκοπό να εξετασθεί ή να τροποποιηθεί το περιεχόµενο του Εισαγωγή, δηλαδή η προσθήκη νέων κόµβων σε µια ήδη υπάρχουσα δοµή ιαγραφή, είναι το αντίστροφο της εισαγωγής Αναζήτηση, όπου προσπελαύνονται οι κόµβοι µιας δοµής προκειµένου να εντοπιστούν ένας ή περισσότεροι που έχουν µια δεδοµένη ιδιότητα Ταξινόµηση, όπου οι κόµβοι µιας δοµής διατάσσονται κατά αύξουσα ή φθίνουσα σειρά Αντιγραφή, κατά την οποία όλοι οι κόµβοι ή µερικοί από τους κόµβους µιας δοµής αντιγράφονται σε µια άλλη δοµή Συγχώνευση, κατά την οποία δύο ή περισσότερες δοµές συνενώνονται σε µια άλλη δοµή ιαχωρισµός, που αποτελεί την αντίστροφη πράξη της συγχώνευσης
Οι δοµές δεδοµένων διακρίνονται σε: 1)Στατικές: Στις στατικές δοµές το ακριβές µέγεθος της απαιτούµενης κύριας µνήµης καθορίζεται κατά την στιγµή του προγραµµατισµού και της µετάφρασης τους και όχι κατά την στιγµή εκτέλεσης του προγράµµατος. ηλαδή το πλήθος των κόµβων µιας στατικής δοµής καθορίζεται κατά τη φάση του προγραµµατισµού (και συγκεκριµένα των δηλώσεων) και δεν µπορεί να αλλάζει κατά την εκτέλεση του αλγορίθµου ή του προγράµµατος. Επίσης στις στατικές δοµές τα στοιχεία τους αποθηκεύονται σε συνεχόµενες θέσεις µνήµης. 2) υναµικές: Οι δυναµικές δοµές δεν έχουν σταθερό µέγεθος, αλλά ο αριθµός των κόµβων αυξάνει ή µικραίνει ανάλογα µε το αν εισάγονται ή διαγράφονται δεδοµένα κατά την εκτέλεση του προγράµµατος. Οι δυναµικές δοµές δεν αποθηκεύονται σε συνεχόµενες θέσεις µνήµης αλλά σε περιοχές µνήµης µεταβλητού µεγέθους. Στην πράξη, οι στατικές δοµές υλοποιούνται συχνά µε πίνακες που µας είναι γνωστοί από άλλα µαθήµατα και υποστηρίζονται από κάθε γλώσσα προγραµµατισµού. Στοίβα: Αυτή χρησιμοποιεί την μεθοδο επεξεργασίας που ονοµάζεται τελευταίο µέσα,πρώτο έξω ή αλλιώς µε την αγγλική συντοµογραφία LIFO(Last In First Out). υο είναι οι κύριες λειτουργίες σε µια στοίβα: Η ώθηση (push) στοιχείου στην κορυφή της στοίβας. Η απώθηση (pop) στοιχείου από τη στοίβα. Η διαδικασία της ώθησης πρέπει να ελέγχει αν η στοίβα είναι γεµάτη, οπότε συµβαίνει υπερχείλιση και αντίστοιχα η διαδικασία της απώθησης ελέγχει αν υπάρχει τουλάχιστον ένα στοιχείο στην στοίβα, δηλαδή ελέγχει αν γίνεται υποχείλιση. Μια στοίβα µπορεί να υλοποιηθεί µε τη βοήθεια µονοδιάστατου πίνακα. Μια βοηθητική µεταβλητή (top) χρησιµοποιείται για να δείχνει το στοιχείο που τοποθετήθηκε τελευταίο στην κορυφή της στοίβας. Για την εισαγωγή ενός νέου στοιχείου στη στοίβα (ώθηση) αρκεί να αυξηθεί η µεταβλητή top κατά ένα και στη θέση αυτή να εισέλθει το στοιχείο. Αντίθετα για την εξαγωγή ενόςστοιχείου (απώθηση) εξέρχεται πρώτα το στοιχείο και στη συνέχεια η top µειώνεται κατά ένα για να δείχνει την νέα κορυφή. Ουρά: Η ουρά είναι µια δοµή δεδοµένων µε δύο άκρα στην οποία το πρώτο στοιχείο που εισάγεται είναι και το πρώτο στοιχείο που µπορεί να εξαχθεί, γι αυτό έχει και την αγγλική συντοµογραφία FIFO (First In First Out). ύο είναι οι βασικές λειτουργίες που γίνονται σε µια ουρά: Η εισαγωγή (enqueue) στοιχείου στο πίσω άκρο της ουράς Η εξαγωγή (dequeue) στοιχείου από το εµπρός άκρο της ουράς Στην περίπτωση της ουράς απαιτούνται δύο δείκτες: ο εµπρός (front) και ο πίσω (rear). Μια ουρά µπορεί να υλοποιηθεί µε τη βοήθεια µονοδιάστατου πίνακα. Για την εισαγωγή ενός νέου στοιχείου στην ουρά αυξάνεται ο δείκτης rear κατά ένα και στη θέση αυτή αποθηκεύεται το στοιχείο. Αντίστοιχα για την λειτουργία της εξαγωγής, εξέρχεται το στοιχείο που δείχνει ο δείκτης front, ο οποίος στη συνέχεια αυξάνεται κατά ένα για να δείχνει το επόµενο στοιχείο που πρόκειται να εξαχθεί.
Η χρήση των πινάκων παρουσιάζει τα παρακάτω πλεονεκτήµατα και µειονεκτήµατα: Πλεονεκτήµατα Ταχεία προσπέλαση στοιχείων Άµεση πρόσβαση των στοιχείων µε τη χρήση δεικτών Μειονεκτήµατα Οι πίνακες απαιτούν µνήµη. Ένας πίνακας δεσµεύει πολλές θέσεις µνήµης µε αποτέλεσµα η αλόγιστη χρήση πινάκων να οδηγεί ακόµη και σε αδυναµία εκτέλεσης του προγράµµατος. Οι πίνακες περιορίζουν την ελευθερία του προγραµµατιστή. Οι πίνακες είναι στατικές δοµές και το πλήθος των στοιχείων τους είναι σταθερό και προκαθορισµένο. Κατά συνέπεια πρέπει να προσδιοριστεί στο τµήµα δηλώσεων και δεν µπορεί να αλλάξει αν αυτό χρειαστεί. Η χρήση της σειριακής αναζήτησης δικαιολογείται στις περιπτώσεις: 1. Ο πίνακας είναι µη ταξινοµηµένος 2. Ο πίνακας είναι µικρού µεγέθους(ν<=20) 3. Η αναζήτηση σε ένα συγκεκριµένο πίνακα γίνεται σπάνια ΚΕΦΑΛΑΙΟ 6 Η επίλυση ενός προβλήµατος µε τον υπολογιστή περιλαµβάνει, τρία εξίσου σηµαντικά στάδια: Τον ακριβή προσδιορισµό του προβλήµατος. Την ανάπτυξη του αντίστοιχου αλγόριθµου. Τη διατύπωση του αλγόριθµου σε κατανοητή µορφή από τον υπολογιστή. Γλώσσες πρώτης γενιάς(γλώσσες µηχανής): Ένα πρόγραµµα σε γλώσσα µηχανής είναι γραµµένη στο δυαδικό σύστηµα. Είναι η µόνη γλώσσα που καταλαβαίνει ο µικροεπεξεργαστής για στοιχειώδης λειτουργίες. Αποτελεί κώδικα άµεσα εκτελέσιµο και οι εντολές παριστάνονται µε ακολουθίες από 0 και 1 (δυαδικό σύστηµα). ίνει προγράµµατα πολύ µεγάλα, είναι δύσκολος o προγραµµατισµός, η εκτέλεση όµως αυτών των προγραµµάτων είναι πολύ γρήγορη διότι εκτελείται άµεσα από τον µικροεπεξεργαστή. Οι εντολές ενός προγράµµατος και σήµερα µετατρέπονται σε γλώσσα µηχανής για να εκτελεστούν. Γλώσσες δεύτερης γενιάς(γλώσσες χαµηλού επιπέδου ή συµβολικές γλώσσες): Είναι αποτέλεσµα της προσπάθειας δηµιουργία ς µιας συµβολικής γλώσσας που θα έχει νόηµα για τον άνθρωπο και θα µετατρέπεται εσωτερικά σε γλώσσα µηχανής µε ένα ειδικό πρόγραµµα, τον συµβολοµεταφραστή (Assembler). Αποτελείται συνήθως από µικρές λέξεις και αριθµούς στο δεκαδικό σύστηµα(0,1,,9). Τα χαρακτηριστικά τους είναι: Είναι στενά συνδεδεµένες µε την αρχιτεκτονική του υπολογιστή Τα προγράµµατα µεταφέρονται δύσκολα από την µια µηχανή στην άλλη ακόµη και να είναι του ίδιου κατασκευαστή εν διαθέτουν εντολές πιο σύνθετων λειτουργιών και οδηγούν σε µακροσκελή προγράµµατα,που είναι δύσκολο να γραφούν και να συντηρηθούν. Γλώσσες τρίτης γενιάς(γλώσσες υψηλού επιπέδου):(+σελ.119-126,παρ.6.2.3.) Οι δυσκολίες στον προγραµµατισµό µε τις προηγούµενες γλώσσες οδήγησε στην δηµιουργία των γλωσσών υψηλού επιπέδου. Αποτελούνται από απλές λέξεις(στα Αγγλικά) και έχουν ορισµένη γραµµατική και σηµασιολογία. Μεταφράζονται σε γλώσσα μηχανής με τη χρήση μετταγλωτιστών (compilers). Επίσης µεταφέρονται εύκολα από έναν τύπο υπολογιστή σε ένα άλλο. Τα βασικά τους χαρακτηριστικά(πλεονεκτήµατα) είναι: Η ανεξαρτησία από τον τύπο του υπολογιστή. Μεταφέρονται εύκολα από την µια µηχανή σε άλλη, µε τυχόν µικρές µετατροπές που είναι η δυνατότητα της µεταφερσιµότητας των προγραµµάτων. Είναι κυρίως προσανατολισµένες στο πρόγραµµα, την διαδικασία, και παρέχουν ευκολίες για τον σκοπό που έχουν δηµιουργηθεί. Είναι πιο κοντά στα προβλήµατα που επιλύουν.