ΗΜΜΥ 101

Download Report

Transcript ΗΜΜΥ 101

ΦΡΟΝΤΙΣΤΗΡΙΟ 1-α
Φ1α-1
ΤΙ ΕΙΝΑΙ Ο ΥΠΟΛΟΓΙΣΤΗΣ
Ο όρος είναι συντομογραφία του όρου «Αυτόματος, Ηλεκτρονικός
Ψηφιακός Υπολογιστής Γενικού Σκοπού» [1].
Αυτόματος
– Μετά την έναρξη της λειτουργίας του εργάζεται μόνος του εκτελώντας
μια διαδικασία σειράς εντολών που λέγεται πρόγραμμα.
Ηλεκτρονικός
– Είναι κατασκευασμένος απο ηλεκτρονικά στοιχεία (κυρίως
ολοκληρωμενα κυκλωματα).
Ψηφιακός
– Επεξεργάζεται διακριτές πληροφορίες που μοντελοποιούνται με τη
μορφή δυαδικων ψηφίων.
Γενικού σκοπού
– Μπορεί να δεχθεί και να εκτελέσει διαφορετικά προγράμματα (σειρές
εντολών) και να διεκπεραιωσει πολλές διαφορετικές λειτουργίες.
[1] Ηλεκτρονικοί Υπολογιστές, Ν. Αλεξανδρίδη Καθηγητή ΕΜΠ.
Φ1α-2
ΤΙ ΔΕΝ ΕΙΝΑΙ Ο ΥΠΟΛΟΓΙΣΤΗΣ
Δεν είναι Ηλεκτρονικός Εγκέφαλος.
Δεν είναι αριθμομηχανή.
Δεν είναι αυτόνομη λογικά σκεπτόμενη μονάδα.
Δεν έχει ανεξάρτητη λειτουργία πέρα από το
πρόγραμμα πού έχει ορισθεί να εκτελέσει πιστά.
Δεν είναι σε θέση να εκτελέσει λειτουργίες οι
οποίες δεν έχουν ορισθεί καί μοντελοποιηθεί με
ακρίβεια.
Φ1α-3
ΟΙ Η/Υ ΜΠΟΡΟΥΝ
Να επεξεργασθούν τεράστιους όγκους μοντελοποιημένων
δεδομένων (data modelling and data representation).
Να εκτελέσουν πιστά επαναληπτικές, πολύπλοκες, και
μακρές διαδικασίες (algorithms and processes).
Να επιλύσουν παραμετρικά, μοντελοποιημένα προβλήματα
με υψηλή απόδοση, και αξιοπιστία (performance –
time/space, reliability/robustness).
Φ1α-4
ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ
Άβακας
Ραβδοι του Napier (Λογαριθμικός Κανόνας) – 1600
Αριθμητική Μηχανή του Pascal – 1642
Μηχανοποίηση του Πολ/σμού Leibnitz – 1694
Υφαντουργική Μηχανή με κάρτες Jacquard - 1745
Διαφορική Μηχανή Babbage – 1822
Αναλυτική Μηχανή (Μνήμη, ελεγχος ροής, αριθμητική υπολογιστική μονάδα, μονάδες
εισόδου/εξόδου Parmalee, Webb, Babbage – 1868
Ηλεκτομηχανική μηχανή με διάτρητα δελτία Hollerith – 1891
Πρώτη αυτόματη υπολογιστική μηχανή ΙΒΜ – 1929
Υπολογιστής με Ηλεκτονόμους από την Bell Telephone Labs - 1938
Ψηφιακός Η/Υ ENIAC – 1946
UNIVAC – 1951
Υπολογιστές με Μαγνητικό Τύμπανο – 1953
Υπολογιστές με δίσκους 1970’s – micro computers
Personal Computers 80’s
Super Computers 80’s – 90’s
Ubiquitous Computing and Devices – 1990 και μετά
Φ1α-5
ΟΡΓΑΝΩΣΗ ΚΑΙ ΔΟΜΗ ΤΟΥ Η/Υ
Ο Η/Υ είναι μια επαναπρογραμματιζόμενη
συσκευή επεξεργασίας πληροφοριών.
Ο τυπικός Η/Υ αποτελείται από:
– Τήν Μονάδα Εισόδου
– Τήν Κεντρική Μνήμη
– Τήν Αριθμητική/Λογική Μονάδα
– Τήν Μονάδα Ελέγχου
– Τήν Μονάδα Εξόδου
Φ1α-6
Τυπικό Διάγραμμα Οργάνωσης Η/Υ
Μονάδα
Εισόδου
Μονάδα
Εξόδου
Κεντρική Μνήμη
Μονάδα
Ελεγχου
Αριθμητική/Λογική
Μονάδα
Φ1α-7
ΔΙΑΓΡΑΜΜΑ Η/Υ (Συγκεκριμένο)
Κεντρική Μνήμη
Καταχωρητής
Διευθύνσεων
Μνήμης
Ι/Ο
.............
Αποκωδικοποιητής
Διευθύνσεων
Καταχωρητής Λέξεων
Μονάδα Ελέγχου
Κώδικας Λειτουργίας
Διεύθυνση
Αποκωδικοποιητής
Διευθύνσεων
Απαριθμητής
Εντολών
Α/Λ Μονάδα
Συσσωρευτής
Καταχωρητής
Κυκλώματα
Πράξεων
Φ1α-8
ΜΟΝΑΔΑ ΕΙΣΟΔΟΥ
Το υποσύστημα το οποίο κωδικοποιεί τις
πληροφορίες που προέρχονται από το εξωτερικό
περιβάλλον.
– Πληκτρολόγιο (keyboard)
– Ευαίσθητες επιφάνειες (smart panels)
– Συσκευές ανάγνωσης μαγνητικών καρτών (magnetic
card readers)
– Συσκευές ανάγνωσης ήχου και εικόνας (sound and
image acquisition)
– Συσκευές μετρήσεων (sensors)
– Κ.λ.π.
Φ1α-9
ΚΕΝΤΡΙΚΗ ΜΝΗΜΗ
Το υποσύστημα το οποίο είναι υπεύθυνο για την
προσωρινή αποθήκευση όλων των πληροφοριών
(εντολές καί δεδομένα) που είναι απαραίτητες για την
λειτουργία του Η/Υ και την εκτέλεση ενός προγράμματος.
Η Κεντρική Μνήμη επικοινωνεί με τις Μονάδες
Εισόδου/Εξόδου, την Α/Λ Μονάδα, καί την Μονάδα
Ελεγχου.
Τα τεχνικά χαρακτηριστικά της Κεντρικής Μνήμης είναι
– Χωρητικότητα
– Ταχύτητα
– Μονιμότητα αποθηκεύσεως
Φ1α-10
ΑΡΙΘΜΗΤΙΚΗ / ΛΟΓΙΚΗ ΜΟΝΑΔΑ
Το υποσύστημα το οποίο είναι υπεύθυνο για
τον μετασχηματισμό των κωδικοποιημένων
ψηφιακών πληροφοριών.
Οι μετασχηματισμοί είναι
– Αριθμητικές πράξεις (Πρόσθεση, Αφαίρεση,
Πολ/σμός, Διαίρεση)
– Λογικές πράξεις (AND, OR, NOT, XOR)
– Ολίσθηση (shift)
Φ1α-11
ΜΟΝΑΔΑ ΕΛΕΓΧΟΥ
Το υποσύστημα το οποίο είναι υπεύθυνο γιά τον
συντονισμό της διαδοχής των πράξεων στην Α/Λ
Μονάδα, και των υπολοίπων μονάδων του Η/Υ.
Κατά τη διάρκεια εκτέλεσης ενός προγράμματος
η Μονάδα Ελέγχου λαμβάνει εντολές (ηλεκτρικά
σήματα) και σε καθορισμένες χρονικές στιγμές
(περιοδικά) στέλνει σήματα ελέγχου πρός την
Κεντρική Μνήμη, την Α/Λ Μονάδα, τις Μονάδες
Εισόδου/Εξόδου.
Φ1α-12
ΜΟΝΑΔΑ ΕΞΟΔΟΥ
Το υποσύστημα το οποίο απο-κωδικοποιεί
τις πληροφορίες που προέρχονται από τον
Η/Υ και τις διανέμει πρός το εξωτερικό
περιβάλλον.
– Οθόνη (display)
– Εκτυπωτή (printer)
– Συσκευές ήχου (audio)
– Ηλεκτρομηχανικές συσκευές (actuators)
– Κ.λ.π.
Φ1α-13
ΔΙΑΓΡΑΜΜΑ Η/Υ (Συγκεκριμένο)
Κεντρική Μνήμη
Καταχωρητής
Διευθύνσεων
Μνήμης
Ι/Ο
.............
Αποκωδικοποιητής
Διευθύνσεων
Καταχωρητής Λέξεων
Μονάδα Ελέγχου
Κώδικας Λειτουργίας
Διεύθυνση
Αποκωδικοποιητής
Διευθύνσεων
Απαριθμητής
Εντολών
Α/Λ Μονάδα
Συσσωρευτής
Καταχωρητής
Κυκλώματα
Πράξεων
Φ1α-14
ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ Η/Υ (1)
Ο Η/Υ έχει κατασκευασθεί να εκτελεί μια
προκαθορισμένη αλληλουχία εντολών
(προγράμματα).
Υπάρχουν δύο βασικές κατηγορίες
προγραμμάτων:
– Τά προγράμματα που καθορίζουν την εσωτερική
λειτουργία του υπολογιστή (Λειτουργικό Σύστημα –
Operating System)
– Τα προγράμματα που ορίζει ο χρήστης (Προγράμματα
εφαρμογών, Application Software)
Φ1α-15
ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ Η/Υ (2)
Οι αλληλουχίες εντολών (προγράμματα) εκτελούνται σάν
μονάδες διαδικασιών (processes) σε συγκεκριμένες
περιοχές μνήμης του υπολογιστή.
Σε μια αλληλουχία εντολών (δηλαδή μέσα σ΄ένα
πρόγραμμα), ή μεταξύ διαφορετικών αλληλουχιών
(δηλαδή σε διαφορετικά προγράμματα οι περιπτώσεις
διαδοχής εντολών είναι
– Διαδοχική εκτέλεση (μία εντολή εκτελέιται μετά την άλλη) – Η
αλληλουχία Α διατηρεί τον έλεγχο
– Διακλάδωση – Η αλληλουχία Α μεταφέρει τον έλεγχο στη Β, με, ή
χωρίς κάποια συνθήκη)
– Διακοπή – Η Β αποσπά τον έλεγχο από την Α
– Δανεισμός ελέγχου – Η Α δανείζει τον έλεγχο στη Β
Φ1α-16
ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ Η/Υ (3)
Η εκτέλεση ενός προγράμματος επιτυγχάνεται με τήν
επαναληπτική χρησιμοποίηση βασικών διαδικασιών του
υπολογιστή. Οι πιο κύριες είναι
–
–
–
–
Ανάκληση απο τη μνήμη της επόμενης εντολής
Αποκωδικοποίηση – Ερμηνεία της εντολής
Ανάκληση των δεδομένων (όταν αυτό χρειάζεται)
Εκτέλεση της λειτουργίας της αποκωδικοποιημένης εντολής
σύμφωνα με τον ορισμό αυτής της εντολής
Κάθε μία από τις παραπάνω βασικές διαδικασίες
εκτελούνται σε σταθερά χρονικά διαστήματα, τα οποία
καθορίζονται από ηλεκτρικούς παλμούς (ρολόι)
Τα παραπάνω συμβαίνουν σε δύο βασικους κύκλους
– Κύκλο ανάκλυσης (fetch cycle)
– Κύκλο εκτέλεσης (execution cycle)
Φ1α-17
ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ Η/Υ (4)
Παράδειγμα: ADD 256
– Η θέση μνήμης στή παραπάνω εντολή ορίζεται να είναι 256. Η
διεύθυνση αυτή μεταφέρεται στόν καταχωρητή διευθύνσεων
μνήμης
– Ο καταχωρητής διευθύνσεων μνήμης καθορίζει την θέση μνήμης
256 καί το περιεχόμενό της (π.χ. Τον αριθμό 15)
– Το περιεχόμενο της θέσης μνήμης με διεύθυνση 256 το οποίο
είναι 15, τοποθετείται στον καταχωρητή λέξεων
– Επειδή το περιεχόμενο αντιπροσωπεύει δεδομένο μεταφέρεται
στόν καταχωρητή της Α/Λ μονάδας
– Η μονάδα ελέγχου εκπέμπει τα κατάλληλα ηλεκτρικά σήματα
ελέγχου για νά επιτύχει την πρόσθεση του περιεχομένου του
καταχωρητου Α/Λ και του περιεχομένου του συσσωρευτού Α/Λ με
την βοήθεια των κυκλωμάτων πράξεων της Α/Λ
– Το αποτέλεσμα μεταφέρεται στον συσσωρευτή της Α/Λ
αντικαθιστώντας το προηγούμενο περιεχόμενο του συσσωρευτή
Φ1α-18
ΠΡΟΓΡΑΜΜΑΤΑ /
ΣΥΜΒΟΛΟΜΕΤΑΦΡΑΣΗ
Όπως είπαμε, ένα πρόγραμμα δεν είναι τίποτε παραπάνω από μία
ακολουθία εντολών πού μπορούν να εκτελεσθούν από τα
ηλεκτρονικά κυκλώματα του Η/Υ
Όμως το τι μπορεί να εκτελεσθεί από τα ηλεκτρονικά κυκλώματα του
Η/Υ και το τι μπορεί εύκολα ένας άνθρωπος να προγραμματίσει είναι
τελείως διαφορέτικα.
Ο Η/Υ εκτελεί βασικές λειτουργίες στά κυκλώματά του
(001010110101 π.χ. S=C+D) – Γλωσσα Μηχανής (Machine
Language)
Ο προγραμματιστής όμως θέλει να ορίζει λειτουργίες σε πιο υψηλό
επίπεδο χρησιμοποιώντας μια πιο φυσική γλώσσα που να θυμιζει
π.χ. Αγγλικά – Ανώτερη Γλωσσα Προγραμματισμού (High Level
Language) ή Πηγαία Γλώσσα (Source Code)
Κάπου λοιπόν αυτές οι δυο απαιτήσεις πρέπει να συναντηθούν –
Συμβολική Γλώσσα (Assembly Language)
Χρειαζόμαστε λοιπόν καποιούς μεταφραστές από τη μία γλώσσα
στην αλλή – Συμβολομεταφραστες (assembler) και μεταγλωτιστές
(compiler)
Φ1α-19
Γενικά Περί Γλωσσών
Συντακτικό και Ερμηνεία
– Συντακτικό ορίζει τους γραμματικούς κανόνες για μία σωστά
δομημένη πρόταση
– Ερμηνεία ορίζει την σημασία της πρότασης
Γλώσσα Μηχανής
– Είναι σε δυαδική μορφή και κά9ε λέξη έχει τη δομη (πρόσημο) –
αριθμός
Συμβολική Γλώσσα
– Είναι σε συμβολική μορφή και κάθε εντολή έχει τη δομή εντολή διεύθυνση
Γλωσσα Προγραμματισμού Ανωτέρου Επιπέδου –
Πηγαία Γλώσσα
– Είναι σε συμβολική μορφή και καθε εντολή μοιάζει με Αγγλικά
(στις περισσότερες γλώσσες προγραμματισμού)
Φ1α-20
ΚΥΚΛΟΣ ΜΕΤΑΦΡΑΣΕΩΝ
Πηγάιο Πρόγραμμα
Μετάφραση
Πρόγραμμα σε
Συβολική Γλώσσα
Optimization
Εννοποιημένη
Συμβολική Γλώσσα
Linking
Optimized
Συμβολίκή Γλώσσα
Συμβολομετάφραση
Γλώσσα Μηχανής
Φόρτωση
Η/Υ
Φ1α-21
Ανασκόπηση
Γενικά Ιστορικά στοιχεία περί της εξέλιξης
των Η/Υ.
Γενική δομή και λειτουργία των Η/Υ.
Γενικές αρχές γιά τις Γλώσσες
Προγραμματισμού.
Εισαγωγικές έννοιες γιά τη μετάφραση και
συμβολομετάφραση προγραμμάτων.
Φ1α-22
ΠΡΟΓΡΑΜΜΑΤΑ /
ΣΥΜΒΟΛΟΜΕΤΑΦΡΑΣΗ
Όπως είπαμε, ένα πρόγραμμα δεν είναι τίποτε παραπάνω από μία
ακολουθία εντολών πού μπορούν να εκτελεσθούν από τα
ηλεκτρονικά κυκλώματα του Η/Υ
Όμως το τι μπορεί να εκτελεσθεί από τα ηλεκτρονικά κυκλώματα του
Η/Υ και το τι μπορεί εύκολα ένας άνθρωπος να προγραμματίσει είναι
τελείως διαφορέτικα.
Ο Η/Υ εκτελεί βασικές λειτουργίες στά κυκλώματά του
(001010110101 π.χ. S=C+D) – Γλωσσα Μηχανής (Machine
Language)
Ο προγραμματιστής όμως θέλει να ορίζει λειτουργίες σε πιο υψηλό
επίπεδο χρησιμοποιώντας μια πιο φυσική γλώσσα που να θυμιζει
π.χ. Αγγλικά – Ανώτερη Γλωσσα Προγραμματισμού (High Level
Language) ή Πηγαία Γλώσσα (Source Code)
Κάπου λοιπόν αυτές οι δυο απαιτήσεις πρέπει να συναντηθούν –
Συμβολική Γλώσσα (Assembly Language)
Χρειαζόμαστε λοιπόν καποιούς μεταφραστές από τη μία γλώσσα
στην αλλή – Συμβολομεταφραστες (assembler) και μεταγλωτιστές
(compiler)
Φ1α-23
Γενικά Περί Γλωσσών
Συντακτικό και Ερμηνεία
– Συντακτικό ορίζει τους γραμματικούς κανόνες για μία σωστά
δομημένη πρόταση
– Ερμηνεία ορίζει την σημασία της πρότασης
Γλώσσα Μηχανής
– Είναι σε δυαδική μορφή και κά9ε λέξη έχει τη δομη (πρόσημο) –
αριθμός
Συμβολική Γλώσσα
– Είναι σε συμβολική μορφή και κάθε εντολή έχει τη δομή εντολή διεύθυνση
Γλωσσα Προγραμματισμού Ανωτέρου Επιπέδου –
Πηγαία Γλώσσα
– Είναι σε συμβολική μορφή και καθε εντολή μοιάζει με Αγγλικά
(στις περισσότερες γλώσσες προγραμματισμού)
Φ1α-24
ΚΥΚΛΟΣ ΜΕΤΑΦΡΑΣΕΩΝ
Μετάφραση/
Compilation
Πηγάιο Πρόγραμμα
Εννοποιημένη
Συμβολική Γλώσσα
Ενοποίηση/
Linking
Πρόγραμμα σε
Συβολική Γλώσσα
Βελτιστοποίηση/
Optimization
Βελτιστοποιημένη
Συμβολίκή Γλώσσα
Συμβολομετάφραση/
Assembler
Γλώσσα Μηχανής
Φόρτωση/
Loading
Η/Υ
Φ1α-25
Η ΕΠΙΛΥΣΗ ΕΝΟΣ ΠΡΟΒΛΗΜΑΤΟΣ
Η επίλυση ενός προβλήματος (problem solving)
ορίζεται σαν το σύνολο των βημάτων που
χρειάζονται για την ανάλυση, μοντελοποίηση,
σχεδίαση, καί υλοποίηση μίας κατάλληλης λύσης
του προβλήματος.
Δύο βασικές μεθοδολογίες επίλυσης
προβλημάτων (περισσότερα σε λίγο)
– Αναλυτική (Top Down)
– Συνθετική (Bottom Up)
Φ1α-26
ΑΝΑΛΥΤΙΚΗ ΜΕΘΟΔΟΛΟΓΙΑ
ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ
Η Αναλυτική Μεθοδολογία για την επίλυση ενός
προβλήματος (top down problem solving)
βσίζεται στην εξής ιδέα:
–
Γιά να λύσω κάποιο σύνθετο πρόβλημα πρέπει:
1.
να ορίσω τα επι μέρους υπο-προβλήματα του (sub goals).
2.
να επιλύσω κάθε ένα από αυτά χρησιμοποιώντας την
αναλυτική μεθοδολογία. Εάν δεν υπάρχουν άλλα υποπροβλήματα, τότε προχωρώ στήν άμεση επίλυσή του.
3.
Όταν επιλύσω όλα τα υπο-προβλήματα τότε έχω επιλύσει
και το αρχικό σύνθετο πρόβλημα.
Φ1α-27
ΠΑΡΑΔΕΙΓΜΑ ΑΝΑΛΥΤΙΚΗΣ
ΜΕΘΟΔΟΛΟΓΙΑΣ
Σύνθετο
Πρόβλημα
ΥποΠρόβλημα 1
ΥποΠρόβλημα 1-1
ΥποΠρόβλημα 1-2
ΥποΠρόβλημα 2
ΥποΠρόβλημα 3
ΥποΥποΥποΠρόβλημα 2-1 Πρόβλημα 3-1 Πρόβλημα 3-2
Φ1α-28
ΣΥΝΘΕΤΙΚΗ ΜΕΘΟΔΟΛΟΓΙΑ
ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ
Η Συνθετική Μεθοδολογία για την επίλυση ενός
προβλήματος (bottom up problem solving)
βσίζεται στην εξής ιδέα:
– Η λύση ενός προβλήματος επιτυγχάνεται απο τη
σύνθεση στοιχείων και δεδομένων:
1. Αρχίζουμε απο αξιώματα τα οποία θεωρούμε ορθά, ή από
δεδομένα που μπορούν να αποδειχθούν.
2. Χρησιμοποιούμε θεωρήματα, και μια λογική διαδικασία
ώστε να παράγουμε νέα δεδομένα και αποτελέσματα
3. Όταν το ζητούμενο πρόβλημα μπορεί να αποδειχθεί τότε η
διαδικασία τερματίζει
Φ1α-29
ΠΑΡΑΔΕΙΓΜΑ ΣΥΝΘΕΤΙΚΗΣ
ΜΕΘΟΔΟΛΟΓΙΑΣ
Σύνθετο
Πρόβλημα
Αποτέλεσμα 1
Δεδομένα 1-1
Δεδομένα 1-2
Αποτέλεσμα 2
Δεδομένα 2-1
Αποτέλεσμα 3
Δεδομένα 3-1 Δεδομένα 3-2
Φ1α-30
ΜΕΙΚΤΗ ΜΕΘΟΔΟΛΟΓΙΑ
ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ
Η Μεικτή Μεθοδολογια (mixed problem
solving methodology) είναι μία μίξη από
αναλυτική και συνθετική μορφή.
Συγκεκριμένα, κάποια απο τα υποπροβλήματα/προβλήματα επιλύονται
αναλύτικα, και κάποια συνθετικά.
Φ1α-31
Η ΕΠΙΛΥΣΗ ΕΝΟΣ ΠΡΟΒΛΗΜΑΤΟΣ
Η επίλυση ενός προβλήματος εμπεριέχει
τα παρακάτω βήματα:
– Ορισμός του προβλήματος
– Σχεδίαση, ενός αλγόριθμου ο οποίος μπορεί
να επιλύσει το πρόβλημα, με ταχύτητα και
αποδοτικότητα
– Υλοποίηση του αλγόριθμου σε μία κατάλληλη
γλώσσα προγραμματισμου
Φ1α-32
ΤΙ ΕΙΝΑΙ ΟΜΩΣ ΕΝΑΣ ΑΛΓΟΡΙΘΜΟΣ;
Αλγόριθμος (Algorithm) είναι μία ακολυθία οδηγιών (εντολών) οι
οποίες επιλύουν ένα συγκεκριμένο πρόβλημα
Μπορούμε να έχουμε πολλούς διαφορετικούς αλγόριθμους για την
επίλυση ενός προβλήματος
Η επιλογή του πιό κατάλληλου αλγόριθμου μπορεί να γίνει με βάση
τήν πολυπλοκότητα του (time complexity), την χρήση της μνήμης
που απαιτεί (space complexity), τήν δυνατότητα παραμετροποίησής
του (parameterization), την αξιοπιστία του (reliability), την
δυνατότητα συνέχισης της λειτουργίας του σε ακραίες συνθήκες
(robustness) κλπ.
Ένας αλγόριθμος έχει ένα ή περισσότερα σημεία εισόδου (πρώτη
εντόλή να εκτελεσθεί στην ακολουθία – συνήθως όμως έχει ένα
σημείο εισόδου), και εμπεριέχει καποιές συνθήκες που εγκυόνται την
λήξη της λειτουργίας του (τελευταία εντολή)
Φ1α-33
Σχηματική Παρουσίαση της
Διαδικασίας Προγραμματισμού
Μεταφραστής και
Συμβολομεταφραστής/
Compiler/Assembler/Linker
Γνώση της περιοχής
Του Προβλήματος/
Domain Knowledge
Προγραμματιστής
Ορισμός του
Προβλήματος/
Problem Definition
Προγραμματιστής
Δεδομένα/Data
Η/Υ
Η/Υ
Γλώσσα
Μηχανής
Αλγόριθμος/
Algorithm
Πηγαίο πρόγραμμα (Source
Code) σε κάποια Γλώσσα
Προγραμματισμού π.χ. C
Αποτέλεσμα/
Result
Φ1α-34
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Προγραμματισμός δεν είναι μόνο η υλοποίηση ενός αλγόριθμου σε
μία κατάλληλη για το πρόβλημα γλώσσα (C, C++, Java, Pascal,
Fortran, Cobol κλπ.)
Ο Προγραμματισμός εμπεριέχει:
1. Την ανάλυση των απαιτήσεων του προβλήματος
α. Λειτουργικές απαιτήσεις (functional requirements analysis)
β. Μη-λειτουργικές απαιτήσεις (non-functional requirements
analysis)
..................Επιλυση Προβλήματος .............
2. Τη σχεδίαση τού προγράμματος (θεωρούμε ότι ήδη έχουμε
κάνει την επιλογή – σχεδίαση του κατάλληλου αλγόριθμου
όπως είπαμε στη διαφάνεια σχετικά με την επίλυση ενος
προβλήματος (design specifications)
3. Την υλοποίηση του προγράμματος σε μία κατάλληλη
γλώσσα γιά το πρόβλημα (implementation)
4. Τον έλεγχο του προγράμματος ώστε να πιστοποιηθεί η ορθή
λειτουργία του σε σχέση με τις λειτουργικές και μηλειτουργικες απαιτήσεις (testing)
5. Τη συντήρηση του για την διόρθωση λαθών, προσθήκη νέων
λειτουργιών, και την προσαρμογή του σε άλλα συστήματα
(maintenance)
Φ1α-35
ΑΣ ΑΡΧΙΣΟΥΜΕ ΑΠΛΑ (Με
Γλώσσα Μηχανής !!!)
Ας θεωρήσουμε ένα απλό πρόγραμμα:
– Φόρτωσε τη θέση μνήμης 6000 (σε κάποιο
καταχωρητή π.χ. Α)
– Αφαίρεσε 50 από τον καταχωρητή και
φόρτωσε το αποτέλεσμα πάλι στον
καταχωρητή Α
– Εάν το αποτέλεσμα είναι θετικό συνέχισε τη
λειτουργία του προγράμματος από την εντολή
που βρίσκεται στη θέση μνήμης 11200
Φ1α-36
ΓΛΩΣΣΑ ΜΗΧΑΝΗΣ
Τα προγράμματα είναι ακολουθίες από ψηφία 0
και 1 (για απλούστευση ας πούμε δεκαδικά
ψηφία για το παράδειγμά μας)
Ο κώδικας μηχανής για τον επεξεργαστή 80386
είναι:
–
–
–
–
–
–
161
6000
46
50
127
11200
Φ1α-37
ΣΥΜΒΟΛΙΚΗ ΓΛΩΣΣΑ
Είναι πολύ δύσκολο να γράψουμε προγράμματα σε γλώσσα μηχανής.
Η συμβολική γλώσσα είναι ένα βήμα ώστε να μπορούμε να
υλοποιήσουμε αλγόριθμους πιό εύκολα.
Η συμβολική γλώσσα αντικαθιστά τους αριθμούς που παρουσιάζουν
εντολές με συμβολικά ονόματα γιά εύκολη χρήση
Η μετάφραση από τη γλώσσα μηχανής στη συμβολική γλώσσα γίνεται
αυτόματα με τη βοήθεια του συμβολομεταφραστή (assembler)
Το απλό μας πρόγραμμα σε συμβολική γλώσσα είναι:
– MOV A, [6000]
– SUB A, 50
– JG 11200
Φ1α-38
ΟΜΩΣ ΤΙ ΚΑΝΕΙ ΑΥΤΟ ΤΟ
ΠΡΟΓΡΑΜΜΑ;
Ας υποθέσουμε ότι η θέση μνήμης 6000
αποθηκεύει το τελικό βαθμό ενός φοιτητή
Εάν ο βαθμός είναι μεγαλύτερος του 50 τότε
υπάρχει λάθος
Το πρόγραμμα ελέγχει εάν ο βαθμός είναι
μεγαλύτερος του 50, και εάν είναι τότε συνεχίζει
τη λειτουργία του από την εντολή στη θέση
μνήμης 11200 που υποθέτουμε ότι κάνει κάτι
χρήσιμο γιά να διορθώσει αυτό το λάθος
Φ1α-39
ΕΠΕΚΤΑΣΗ ΤΗΣ ΣΥΜΒΟΛΙΚΗΣ
ΓΛΩΣΣΑΣ
Γιά να βοηθηθει ο προγραμματιστής μπορούμε
να δώσουμε συμβολικά ονόματα (mnemonic
names) στις θέσεις μνήμης. Οπότε το
πρόγραμμα γίνεται:
MOV A, [FinalMark]
SUB A, 50
JG HandleFinalMarkError
Όμως καί με αυτή την επέκταση ο
προγραμματισμός είναι ακόμη δύσκολος
Φ1α-40
ΓΛΩΣΣΑ ΥΨΗΛΟΥ ΕΠΙΠΕΔΟΥ (C)
Οι γλώσσες υψηλού επιπέδου π.χ. η C
δίνουν στόν προγραμματιστή την
δυνατότητα να υλοποιήσει πιό εύκολα
κάποιο αλγόριθμο
Το απλό πρόγραμμα σε C είναι:
if (FinalMark > 50)
goto HandleFinalMarkError
Φ1α-41
ΚΑΤΗΓΟΡΙΟΠΟΙΗΣΗ ΓΛΩΣΩΝ
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
Οι διάφορες γλώσσες προγραμματισμου
κατηγοριοποιούνται με τα παρακάτω κριτήρια:
–
–
–
–
Επίπεδο (Level of Abstraction)
Προγραμματικό ιδίωμα (Programmatic paradigm)
Προγραμματική δομή (Programmatic structure)
Χαρακτηριστικά του τύπου τών μεταβλητών
(programmatic variable types)
Φ1α-42
ΕΠΙΠΕΔΑ ΓΛΩΣΣΩΝ
Γλώσσες υψηλού επιπέδου (C, Fortran, Cobol, Pascal,
Ada, Java …)
Συμβολικές Γλώσσες (8086, P3, Motorola 6000…) –
Ουσιαστικά είναι γλώσσες μηχανής γιά το συγκεκριμένο
επεξεργαστή αλλά σε συμβολική μορφή
Γλώσσες Μηχανής – Ακολουθίες απο ψηφία 0 και 1
Ενδιάμεσες Γλώσσες – Ουσιαστικά είναι γλώσσες
υψηλού επιπέδου που επιτρέπουν και εντολές από
γλώσσες χαμηλότερου επιπέδου (C, Modula-2 κλπ.)
Φ1α-43
ΠΟΓΡΑΜΜΑΤΙΚΟ ΙΔΙΩΜΑ
Διαδικαστικού Προγραμματισμού (imperative/algorithmic/procedure
oriented) – Είναι δομημένες γύρω από διαδικασίες – procedures
Λειτουργικού Προγραμματισμού (functional languages) – Οι
διαδικασίες θεωρούνται και αυτές δεδομένα
Οντοκεντρικού Προγραματισμού (object oriented languages) – Το
κύριο σημείο είναι τά δεδομένα τα οποία εμπεριέχουν (encapsulate)
διαδικασίες με τη μορφή μεθόδων (methods)
Λογικού Προγραμματισμού (logic programming languages) – Το
πρόγραμμα είναι ουσιαστικά η περιγραφή του προβλήματος, και η
χρήση του αλγόριθμου δέν είναι σημαντική
Φ1α-44
ΠΡΟΓΡΑΜΜΑΤΙΚΗ ΔΟΜΗ
Γλώσσες δομημένες σε Blocks – (Algol, Pascal,
Modula-2, Ada …). Κάθε μία προγραμματική
ενότητα είναι δομημένη σε blocks.
Δομημένες γλώσσες – (C, C++, Java..). Το
πρόγραμμα είναι δομημένο σε ενότητες αλλά δεν
υπάρχει άμεσος διαχωρισμός σε blocks
Μή δομημένες γλώσσες – (Assembly, Lisp,
Prolog…). Ένα πρόγραμμα σ’αυτές τις γλώσσες
δεν είναι χωρισμένο σε ενότητες
Φ1α-45
ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΥΠΟΥ
ΜΕΤΑΒΛΗΤΩΝ
Γλώσσες Ισχυρού Τύπου (Strongly Typed) – Algol,
Pascal, C++, Java. Οι μεταβλητές πρέπει να έχουν
συγκεκριμένο τύπο. Επείσης, αριθμητικές καί άλλες
πράξεις και λειτουργείες μεταξύ των μεταβλητών
συγκεκριμένων τύπων, παράγουν αποτελέσματα
συγλεκριμένου τύπου.
Γλώσσες Περιορισμένου Τύπου (Weakly Typed) – C.
Οπως και του ισχυρού τύπου, αλλά η γλώσσα δίνει τη
δυνατότητα οι τύποι των μεταβλητών να αλλάξουν καθώς
το πρόγραμμα τρέχει.
Γλώσσες χωρίς Τύπο (Untyped) – LISP. Οι μεταβλητές
δέν εχουν τύπο.
Φ1α-46
ΠΡΟΓΡΑΜΜΑΤΑ ΚΑΙ ΒΙΒΛΙΟΘΗΚΕΣ
Μία τυπική εφαρμογή αποτελείται:
– Από το πηγαίο κώδικα που κατά το πλήστον (ή καθ’ ολοκληρία)
υλοποιεί ένα αλγόριθμό της λύσης του προβλήματος
– Από κώδικα που υποσηρίζει γενικές λειτουργιές που ίσως
χρειάζεται ο πηγαίος κώδικας (π.χ. Εκτύπωση, τριγωνομετρικές
συναρτήσεις κλπ.)
– Αυτός ο κώδικας υποστήριξης ονομάζεται βιβλιοθήκη (library)
– Οι βιβλιοθήκες που χρειάζονται και ο πηγαίος κώδικας
μεταφράζονται (compiled) και ενοποιούνται (linked) σε ένα
συμβολικό πρόγραμμα, το οποίο με τη σειρά του
συμβολομεταφράζεται σε γλώσσα μηχανής
– Υπάρχουν ευτυχώς πολλές βιβλιοθήκες για διάφορες
λειτουργίες, οπότε δεν χρειάζεται να υλοποιήσουμε κώδικα
γι’αυτές τις λειτουργίες. Όποτε τις χρειαζόμαστε, απλά τις
εισάγουμε (include) στο πηγαίο κώδικά μας.
Φ1α-47
ΣΧΗΜΑΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ
LIB 1
LIB 2
LIB 3
Include
ΠΗΓΑΙΟΣ ΚΩΔΙΚΑΣ
ΕΦΑΡΜΟΓΗΣ
Μετάφραση &
Συμβολομεταφραση
ΓΛΩΣΣΑ ΜΗΧΑΝΗΣ
Φ1α-48
ΠΑΡΑΔΕΙΓΜΑ
Ένα απλό πρόγραμμα της C:
Εντολή
Προ-επεξεργασίας
Εντολή εισαγωγής βιβλιοθήκης για
χρήση συναρτήσεων είσοδου/έξοδου
Βιβλιοθήκη
#include <stdio.h>
Η αρχική συνάρτηση main
void main()
{
Τύπος
printf(“Hello World.\n”);
Επιστροφής
της main
}
Η συνάρτηση βιβλιοθήκης printf που
έχει ορισθεί στη βιβλιοθήκη stdio και
επιτρέπει την εκτύπωση στην οθόνη
(standard output)
Φ1α-49
AKOMH ENA ΠΑΡΑΔΕΙΓΜΑ
Κι’άλλο ένα απλό πρόγραμμα της C:
#include <stdio.h>
int main()
{
printf(“Hello World.\n”);
return(1);
}
Φ1α-50
ΜΕΤΑΦΡΑΣΗ ΚΑΙ ΕΝΟΠΟΙΗΣΗ
ΜΕ ΤΗ ΠΑΡΟΥΣΙΑ ΒΙΒΛΙΟΘΗΚΗΣ
Για να μεταφράσουμε πηγάιο κώδικα της C σε Γλώσσα Μηχανής
υπό τη παρουσία βιβλιοθηκών ο compiler εκτελεί τα παρακάτω
βήματα.
1.
Προ-επεξεργασία: Το πηγαίο πρόγραμμα πρώτα πηγαίνει σε μία
εφαρμογή (που έρχεται με τον compiler) και ονομάζεται προεπεξεργαστής (pre-processor). Ο προ-επεξεργαστής είναι κάτι σαν
επεξεργαστής κειμένου (προσθέτει,αφαιρεί, και μεταβάλει το
«κείμενο» του πηγαίου προγράμματος (source code). Όλες οι εντολές
που είναι να εκτελεσθούν απο τον προ-επεξεργαστή ξεκινούν με το
σύμβολο #. Συγκεκριμένα η #include<stdio.h> παίρνει το πηγάιο
κώδικα της stdio.h και τον εισάγει στη θέση της εντολής
#include<stdio.h> . Ουσιαστικά μετά την προεπεξεργασία δέν
υπάρχουν πλέον εντολές που ξεκινούν με #.
2.
Μετάφραση και Συμβολομετάφραση. Tα βήματα αυτά παράγουν
αντικειμενικό κώδικα – object code (σχεδόν γλώσσα μηχανής)
3.
Εννοποίηση (linking). Το βήμα αυτό εννοποιεί αντικειμενικό κώδικα
(πιθανόν απο διαφορετικά αρχεία πηγαίου κώδικα) σε ένα εκτελέσιμο
αρχείο (π.χ. .exe) σε καθαρή γλώσσα μηχανής.
Φ1α-51
ΓΕΝΙΚΗ ΜΟΡΦΗ
ΠΡΟΓΡΑΜΜΑΤΟΣ C
directives
main()
{
statements
}
Φ1α-52
ΕΠΙΣΚΟΠΗΣΗ
Τι είδαμε μεχρι τώρα:
– Γενικά περί γλωσσών προγραμματισμού
– Μετάφραση / Συμβολομετάφραση /
Εννοποίηση (Συννενωση)
– Επίλυση Προβλημάτων και Μεθοδολογίες
– Προεπεξεργασία
– Γενική δομή απλού προγράμματος C
Φ1α-53