2 Εκμάθηση με παραδείγματα 53. Σχόλια 55, Συμπεριλήψεις βιβλιοθηκών 56, Το κυρίως πρόγραμμα Ένα πρόγραμμα άθροισης δύο αριθμών...

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "2 Εκμάθηση με παραδείγματα 53. Σχόλια 55, Συμπεριλήψεις βιβλιοθηκών 56, Το κυρίως πρόγραμμα 57 2.2 Ένα πρόγραμμα άθροισης δύο αριθμών..."

Transcript

1 Περιεχόμενα 1 Εισαγωγή Μια σύντομη ιστορική αναδρομή των υπολογιστών Τι είναι η επιστήμη των υπολογιστών; Μια σύντομη περιήγηση στο υλικό των υπολογιστών Κεντρική μονάδα επεξεργασίας (CPU) 39, Μνήμη 39, Δευτερεύουσα αποθήκευση 39, Συσκευές εισόδου/εξόδου (I/O) Αλγόριθμοι Γλώσσες προγραμματισμού και μεταγλώττιση Λάθη προγραμματισμού και αποσφαλμάτωση Συντήρηση λογισμικού Η σημασία της τεχνολογίας λογισμικού Μερικές σκέψεις για τη γλώσσα προγραμματισμού C Σύνοψη...49 ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ...50 ΜΕΡΟΣ ΠΡΩΤΟ Βασικές έννοιες της γλώσσας προγραμματισμού C Εκμάθηση με παραδείγματα Το πρόγραμμα "Hello world" Σχόλια 55, Συμπεριλήψεις βιβλιοθηκών 56, Το κυρίως πρόγραμμα Ένα πρόγραμμα άθροισης δύο αριθμών Η φάση εισόδου 61, Η φάση υπολογισμού 63, Η φάση εξόδου Απόψεις σχετικές με τη διαδικασία του προγραμματισμού Τύποι δεδομένων Δεδομένα κινητής υποδιαστολής 67, Αλφαριθμητικά δεδομένα Παραστάσεις Σταθερές 71, Μεταβλητές 72, Εντολές ανάθεσης 75, Τελεστές και τελεστέοι 77, Συνδυασμός ακεραίων και αριθμών κινητής υποδιαστολής 78, Διαίρεση ακεραίων και ο τελεστής υπολοίπου 79, Προτεραιότητα 80, Εφαρμογή των κανόνων προτεραιότητας 82, Μετατροπή τύπων 83 Σύνοψη...86 ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ...87 ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

2 22 Περιεχόμενα 3 Επίλυση προβλημάτων Ιδιωματισμοί και υποδείγματα προγραμματισμού Ιδιωματισμοί σύντομης ανάθεσης 95, Τελεστές αύξησης και μείωσης Επίλυση προβλημάτων σε μεγαλύτερη κλίμακα Εντολές ελέγχου Ο ιδιωματισμός επανάληψης Ν φορές 100, Επανάληψη και βρόχοι 101, Μεταβλητές αριθμοδείκτη 102, Η σπουδαιότητα της ανάθεσης αρχικών τιμών 104, Ο ιδιωματισμός ανάγνωσης έως φρουρό 105, Δόμηση μιας πρακτικότερης εφαρμογής 107, Εκτέλεση υπό συνθήκη και η εντολή if Μια άσκηση αποσφαλμάτωσης Μορφοποιημένη έξοδος Κωδικοί μορφοποίησης για τη συνάρτηση printf 119, Ρύθμιση διαστημάτων, στοίχισης, και ακρίβειας Δόμηση ενός προγράμματος Στυλ προγραμματισμού 124, Πρόβλεψη για αλλαγές 126, Ο μηχανισμός #define 127 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Μορφές εντολών Απλές εντολές Ενσωματωμένες αναθέσεις τιμών 140, Πολλαπλές αναθέσεις 140, Μπλοκ κώδικα Εντολές ελέγχου Λογικά δεδομένα Σχεσιακοί τελεστές 144, Λογικοί τελεστές 146, Πρόωρη αποτίμηση 148, Σημαίες 149, Αποφυγή πλεονασμού στις λογικές παραστάσεις 150, Ένα παράδειγμα υπολογισμού λογικής τιμής Οι εντολές if Εντολές if μίας γραμμής 154, Εντολές if πολλών γραμμών 154, Η εντολή ifelse 155, Εντολές if σε μορφή στοίβας 155, Ο τελεστής?: (προαιρετικό) Η εντολή switch Η εντολή while Χρήση του βρόχου while 162, Ατέρμονες βρόχοι 164, Επίλυση του προβλήματος του "μισού βρόχου" Η εντολή for Ένθετοι βρόχοι for 169, Η σχέση μεταξύ των εντολών for και while 171, Χρήση της εντολής for με δεδομένα κινητής υποδιαστολής 172 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ...176

3 Περιεχόμενα 23 5 Συναρτήσεις Χρήση συναρτήσεων βιβλιοθήκης Δήλωση συναρτήσεων Συγγραφή δικών σας συναρτήσεων H εντολή return 187, Συνδυασμός συναρτήσεων με κύρια προγράμματα 188, Συναρτήσεις με εσωτερικές δομές ελέγχου 190, Συναρτήσεις που επιστρέφουν μη αριθμητικές τιμές 192, Κατηγορηματικές συναρτήσεις 193, Μια κατηγορηματική συνάρτηση που ελέγχει δύο αλφαριθμητικά για ισότητα Ο μηχανισμός της διεργασίας κλήσης συναρτήσεων Μεταβίβαση παραμέτρων 198, Κλήση συναρτήσεων μέσα από άλλες συναρτήσεις Διαδικασίες Βελτίωση βήμα προς βήμα (βηματική εκλέπτυνση) Ξεκίνημα από "επάνω" 212, Υλοποίηση της PrintCalendar 213, Υλοποίηση της PrintCalendarMonth 214, Συμπλήρωση των τελευταίων κενών 218 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αλγόριθμοι Έλεγχος για το αν ένας αριθμός είναι πρώτος Μια απλή εκδοχή της συνάρτησης ΙsPrime 233, Επαλήθευση του ότι μια στρατηγική αναπαριστά έναν αλγόριθμο 233, Απόδειξη της ορθότητας του αλγορίθμου ΙsPrime 234, Βελτίωση της αποδοτικότητας ενός αλγορίθμου 236, Επιλογή μεταξύ εναλλακτικών υλοποιήσεων Υπολογισμός του μέγιστου κοινού διαιρέτη "Πρωτόγονοι" αλγόριθμοι 241, Ο αλγόριθμος του Ευκλείδη 242, Υπεράσπιση της ορθότητας του αλγορίθμου του Ευκλείδη (προαιρετικό) 243, Σύγκριση της αποδοτικότητας των αλγορίθμων GCD Αριθμητικοί αλγόριθμοι Διαδοχικές προσεγγίσεις 245, Αναφορά σφαλμάτων Ανάπτυγμα σειράς Το παράδοξο του Ζήνωνα 249, Χρήση του αναπτύγματος σειράς στη συνάρτηση της τετραγωνικής ρίζας 252, Ανάπτυγμα της σειράς Taylor για την προσέγγιση τετραγωνικής ρίζας (προαιρετικό) 252, Υλοποίηση της προσέγγισης με σειρά Taylor 254, Περιοχή σύγκλισης Καθορισμός του μεγέθους των αριθμητικών τύπων Τύποι ακεραίων 260, Μη προσημασμένοι τύποι 261, Τύποι κινητής υποδιαστολής 261 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ...264

4 24 Περιεχόμενα ΜΕΡΟΣ ΔΕΥΤΕΡΟ Βιβλιοθήκες και ανάπτυξη σε λειτουργικές μονάδες Βιβλιοθήκες και διασυνδέσεις: Μια απλή βιβλιοθήκη γραφικών Η έννοια μιας διασύνδεσης Διασυνδέσεις και αρχεία κεφαλίδας Μια εισαγωγή στη βιβλιοθήκη γραφικών To μοντέλο στο οποίο βασίζεται η διασύνδεση graphics.h 276, Οι συναρτήσεις της διασύνδεσης graphics.h 278, Ανάθεση αρχικών τιμών του πακέτου 282, Σχεδίαση ευθειών 282, Σχεδίαση κύκλων και τόξων 284, Λήψη πληροφοριών για το παράθυρο γραφικών Δημιουργία δικών σας εργαλείων Ορισμός της διαδικασίας DrawBox 287, Ορισμός της συνάρτησης DrawCenteredCircle 290, Εναλλαγή μεταξύ απόλυτων και σχετικών συντεταγμένων 290, Τα πλεονεκτήματα του ορισμού διαδικασιών Επίλυση ενός μεγαλύτερου προβλήματος Χρήση βηματικής εκλέπτυνσης 293, Υλοποίηση της διαδικασίας DrawHouse 295, Αναζήτηση κοινών προτύπων 295, Ολοκλήρωση της αποσύνθεσης 297 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σχεδίαση διασυνδέσεων: Μια βιβλιοθήκη τυχαίων αριθμών Σχεδίαση διασύνδεσης Η σημασία ενός ενοποιητικού θέματος 313, Απλότητα και η αρχή της απόκρυψης πληροφοριών 314, Ικανοποίηση των αναγκών των πελατών σας 315, Τα πλεονεκτήματα των γενικών εργαλείων 316, Η αξία της σταθερότητας Παραγωγή τυχαίων αριθμών με υπολογιστή Ντετερμινιστική και μη ντετερμινιστική συμπεριφορά 318, Τυχαίοι και ψευδοτυχαίοι αριθμοί 318, Παραγωγή ψευδοτυχαίων αριθμών στην ANSI C 319, Αλλαγή του διαστήματος τιμών των τυχαίων αριθμών 321, Γενίκευση του προβλήματος Αποθήκευση εργαλείων σε βιβλιοθήκες Τα περιεχόμενα μιας διασύνδεσης 329, Συγγραφή της διασύνδεσης random.h 331, Η υλοποίηση random.c 331, Δόμηση ενός προγράμματοςπελάτη 333, Ανάθεση αρχικής τιμής στη γεννήτρια τυχαίων αριθμών Αποτίμηση της σχεδίασης της διασύνδεσης random.h Δημιουργία τυχαίων πραγματικών αριθμών 340, Προσομοίωση ενός πιθανοτικού ενδεχομένου 340, Συμπερίληψη αρχείων κεφαλίδας σε μια διασύνδεση 341, Ολοκλήρωση της υλοποίησης του πακέτου παραγωγής τυχαίων αριθμών Χρήση του πακέτου παραγωγής τυχαίων αριθμών Σύνοψη...346

5 Περιεχόμενα 25 ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αλφαριθμητικά και χαρακτήρες Η αρχή της απαρίθμησης Αναπαράσταση απαριθμητών τύπων στο εσωτερικό του μηχανήματος 362, Αναπαράσταση απαριθμητών τύπων ως ακεραίων 362, Ορισμός νέων απαριθμητών τύπων 363, Πράξεις με απαριθμητούς τύπους 366, Βαθμωτοί τύποι Χαρακτήρες Ο τύπος δεδομένων char 367, Ο κώδικας ASCII 368, Σταθερές χαρακτήρων 370, Σημαντικές ιδιότητες της κωδικοποίησης ASCII 370, Ειδικοί χαρακτήρες 371, Αριθμητική χαρακτήρων 373, Η διασύνδεση ctype.h 374, Εντολές ελέγχου που περιλαμβάνουν χαρακτήρες 376, Είσοδος και έξοδος χαρακτήρων Τα αλφαριθμητικά ως αφηρημένα δεδομένα Στρωματοποιημένες αφαιρέσεις 378, Η έννοια ενός αφηρημένου τύπου Η διασύνδεση strlib.h Προσδιορισμός του μήκους ενός αλφαριθμητικού 381, Επιλογή χαρακτήρων από ένα αλφαριθμητικό 382, Συνένωση αλφαριθμητικών 383, Μετατροπή χαρακτήρων σε αλφαριθμητικά 384, Εξαγωγή τμημάτων ενός αλφαριθμητικού 385, Σύγκριση ενός αλφαριθμητικού με ένα άλλο 386, Αναζήτηση στο εσωτερικό ενός αλφαριθμητικού 388, Μετατροπή πεζών/κεφαλαίων 391, Αριθμητική μετατροπή 392, Αποδοτικότητα της βιβλιοθήκης strlib.h 393 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αρθρωτή ανάπτυξη προγραμμάτων Pig Latin μια περίπτωση αρθρωτής ανάπτυξης προγράμματος Εφαρμογή αναλυτικής σχεδίασης (σχεδίασης "από επάνω προς τα κάτω") 407, Χρήση ψευδοκώδικα 408, Υλοποίηση της συνάρτησης TranslateLine 409, Αναζήτηση κενών διαστημάτων και σημείων στίξης 410, Εκλέπτυνση του ορισμού της λέξης 412, Σχεδίαση του σαρωτή γλωσσικών σημείων 413, Ολοκλήρωση της υλοποίησης της συνάρτησης TranslateLine 415, Καθορισμός της διασύνδεσης της λειτουργικής μονάδας σάρωσης Διατήρηση της εσωτερικής κατάστασης μέσα σε μια λειτουργική μονάδα 418 Καθολικές μεταβλητές 421, Οι κίνδυνοι από τη χρήση καθολικών μεταβλητών 422, Μεταβλητές που είναι ιδιωτικές για μια λειτουργική μονάδα 423, Ανάθεση αρχικών τιμών σε καθολικές μεταβλητές 423, Ιδιωτικές συναρτήσεις Υλοποίηση της αφαίρεσης σαρωτή Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ...435

6 26 Περιεχόμενα ΜΕΡΟΣ ΤΡΙΤΟ Σύνθετοι τύποι δεδομένων Πίνακες Εισαγωγή στους πίνακες Δήλωση πίνακα 445, Επιλογή στοιχείων πίνακα 447, Παράδειγμα απλού πίνακα 448, Αλλαγή του διαστήματος τιμών των αριθμοδεικτών Εσωτερική αναπαράσταση δεδομένων Μπιτ, μπάιτ, και λέξεις 451, Διευθύνσεις μνήμης 452, Ο τελεστής sizeof 454, Κατανομή μνήμης σε μεταβλητές 455, Αναφορές σε στοιχεία έξω από τα όρια ενός πίνακα Μεταβίβαση πινάκων ως παραμέτρων Γενίκευση του πλήθους των στοιχείων 460, Ο μηχανισμός μεταβίβασης πίνακα ως παραμέτρου 462, Υλοποίηση των συναρτήσεων PrintIntegerArray και GetIntegerArray 465, Υλοποίηση της συνάρτησης ReverseIntegerArray 467, Υλοποίηση της συνάρτησης SwapIntegerElements Χρήση πινάκων για διάταξη δεδομένων Στατική ανάθεση αρχικών τιμών σε πίνακες Αυτόματος προσδιορισμός του μεγέθους ενός πίνακα 480, Προσδιορισμός του μεγέθους ενός πίνακα στον οποίο έχουν ανατεθεί αρχικές τιμές 481, Πίνακες στους οποίους έχουν ανατεθεί αρχικές τιμές και βαθμωτοί τύποι Πολυδιάστατοι πίνακες Μεταβίβαση πολυδιάστατων πινάκων σε συναρτήσεις 484, Ανάθεση αρχικών τιμών σε πολυδιάστατους πίνακες 485 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναζήτηση και ταξινόμηση Αναζήτηση Αναζήτηση σε πίνακα ακεραίων 501, Ένα πιο εξεζητημένο παράδειγμα αναζήτησης 503, Γραμμική αναζήτηση 505, Δυαδική αναζήτηση 507, Σχετική αποδοτικότητα των αλγορίθμων αναζήτησης Ταξινόμηση Ταξινόμηση πίνακα ακεραίων 512, Ο αλγόριθμος ταξινόμησης με επιλογή 513, Αξιολόγηση της αποδοτικότητας του αλγορίθμου ταξινόμησης με επιλογή 516, Μέτρηση του χρόνου εκτέλεσης ενός προγράμματος 519, Ανάλυση του αλγορίθμου ταξινόμησης με επιλογή 520 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ...522

7 Περιεχόμενα Δείκτες Χρήση διευθύνσεων ως τιμών δεδομένων Χειρισμός δεικτών στη C Δήλωση μεταβλητών δεικτών στη C 534, Βασικές πράξεις δεικτών 535, Ο ειδικός δείκτης NULL Μεταβίβαση παραμέτρων κατ' αναφορά Σχεδίαση μιας συνάρτησης SwapInteger 542, Χρήση κλήσης κατ' αναφορά για την επιστροφή πολλών αποτελεσμάτων 543, Ο κίνδυνος της κατάχρησης των κλήσεων κατ' αναφορά Δείκτες και πίνακες Αριθμητική δεικτών 547, Νέες δυνατότητες των τελεστών ++ και , Αύξηση και μείωση δεικτών 554, Σχέση μεταξύ δεικτών και πινάκων Δυναμική κατανομή μνήμης Ο τύπος void * 558, Δυναμικοί πίνακες 559, Εντοπισμός λαθών στη συνάρτηση malloc 560, Αποδέσμευση μνήμης 561 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αλφαριθμητικά και πάλι Εννοιολογικές αναπαραστάσεις του τύπου string Τα αλφαριθμητικά ως πίνακες 572, Τα αλφαριθμητικά ως δείκτες 576, Τα αλφαριθμητικά ως αφηρημένος τύπος 577, Αλφαριθμητικές παράμετροι 577, Αλφαριθμητικές μεταβλητές 578, Διαφορές μεταξύ δεικτών και μεταβλητών πίνακα 580, Επιλογή στρατηγικής για την αναπαράσταση των αλφαριθμητικών Η βιβλιοθήκη αλφαριθμητικών ANSI H συνάρτηση strcpy 585, H συνάρτηση strncpy 589, Οι συναρτήσεις strcat και strncat 590, Οι συναρτήσεις strlen, strcmp, και strncmp 591, Οι συναρτήσεις strchr, strrchr, και strstr 592, Μια εφαρμογή των συναρτήσεων αλφαριθμητικών ANSI Υλοποίηση της βιβλιοθήκης strlib Υλοποίηση των μεταφερόμενων συναρτήσεων 596, Υλοποίηση των συναρτήσεων κατανομής μνήμης της strlib 597 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αρχεία Αρχεία κειμένου Χρήση αρχείων στη C Δήλωση μιας μεταβλητής FILE * 608, Άνοιγμα αρχείου 609, Εκτέλεση λειτουργιών εισόδου/εξόδου 610, Κλείσιμο αρχείων 610, Καθιερωμένα αρχεία 611

8 28 Περιεχόμενα 15.3 Είσοδος και έξοδος χαρακτήρων Ενημέρωση αρχείου 614, Επανάληψη ανάγνωσης χαρακτήρων του αρχείου εισόδου Είσοδος και έξοδος γραμμών κειμένου Μορφοποιημένη είσοδος και έξοδος Οι τρεις μορφές της συνάρτησης printf 623, Οι συναρτήσεις scanf 623, Ανάγνωση αλφαριθμητικών με τη συνάρτηση scanf 625, Ένα παράδειγμα μορφοποιημένων δεδομένων εισόδου/εξόδου 628, Περιορισμοί στη χρήση της συνάρτησης scanf 631 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εγγραφές Η έννοια της εγγραφής δεδομένων Χρήση εγγραφών στη C Ορισμός νέου τύπου δομής 646, Δήλωση μεταβλητών δομών 647, Επιλογή εγγραφών 648, Ανάθεση αρχικών τιμών σε εγγραφές 648, Απλές εγγραφές Συνδυασμός εγγραφών και πινάκων Δείκτες προς εγγραφές Ορισμός ενός τύπου "δείκτη προς εγγραφή" 653, Κατανομή χώρου μνήμης για δεδομένα εγγραφών 655, Χειρισμός δεικτών προς εγγραφές Δημιουργία μιας βάσης δεδομένων με εγγραφές Δημιουργία της βάσης δεδομένων των υπαλλήλων 658, Χρήση της βάσης δεδομένων Σχεδίαση μιας εφαρμογής που βασίζεται σε εγγραφές Η σημασία της χρήσης μιας βάσης δεδομένων 662, Διατύπωση του προβλήματος 663, Σχεδίαση της εσωτερικής αναπαράστασης 664, Σχεδιασμός της εξωτερικής δομής 668, Κωδικοποίηση του προγράμματος 670, Η αξία της καθοδηγούμενης από δεδομένα σχεδίασης 677 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Με το βλέμμα στο μέλλον Αναδρομή Ένα απλό παράδειγμα αναδρομής 693, Η συνάρτηση Factorial 694, Το αναδρομικό άλμα της πίστης 700, Το αναδρομικό υπόδειγμα 701, Παραγωγή μεταθέσεων 702, Αναδρομική σκέψη Αφηρημένοι τύποι δεδομένων Η αφαίρεση ουράς 707, Αναπαράσταση τύπων στην αφαίρεση ουράς 708, Η διασύνδεση queue.h 710, Υλοποίηση της αφαίρεσης ουράς 712, Εναλλακτικές υλοποιήσεις της αφαίρεσης ουράς 717

9 Περιεχόμενα Ανάλυση αλγορίθμων Αξιολόγηση της αποδοτικότητας αλγορίθμων 721, Συμβολισμός του μεγάλου όμικρον 722, Επανεξέταση του αλγορίθμου ταξινόμησης με επιλογή 723, Στρατηγικές τύπου "διαίρει και βασίλευε" 725, Συγχώνευση δύο πινάκων 726, Ο αλγόριθμος ταξινόμησης με συγχώνευση 727, Η υπολογιστική πολυπλοκότητα του αλγορίθμου ταξινόμησης με συγχώνευση 729, Σύγκριση των επιδόσεων Ν 2 και N log N 731 Σύνοψη ΕΡΩΤΗΣΕΙΣ ΑΝΑΣΚΟΠΗΣΗΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΠΑΡΑΡΤΗΜΑ Α. Σύνοψη της σύνταξης και της δομής της C 741 Α.1 Ανασκόπηση της διεργασίας μεταγλώττισης Α.2 Ο προεπεξεργαστής της C Α.3 Η λεξικογραφική δομή των προγραμμάτων C Α.4 Παραστάσεις Α.5 Εντολές Α.6 Συναρτήσεις Α.7 Δηλώσεις Α.8 Τύποι δεδομένων Α.9 Βιβλιοθήκες ANSI ΠΑΡΑΡΤΗΜΑ Β. Βιβλιοθήκες 767 Ευρετήριο 793

10 Λίγα λόγια για το συγγραφέα Άρχισα να διδάσκω εισαγωγή στην επιστήμη των υπολογιστών πριν από περισσότερα από 20 χρόνια, ενώ ήμουν ακόμα φοιτητής στο Πανεπιστήμιο Harvard. Αφότου τελείωσα το διδακτορικό μου, το 1980, έχω διδάξει επιστήμη των υπολογιστών στα πανεπιστήμια Harvard, Wellesley, και Stanford, όπου και έχω τη θέση του Αναπληρωτή Προέδρου στο Τμήμα Επιστήμης των Υπολογιστών. Σε αυτή τη θέση, είμαι υπεύθυνος για το προπτυχιακό πρόγραμμα της επιστήμης των υπολογιστών. Παρά το γεγονός ότι έχω διδάξει πιο προχωρημένα τμήματα της επιστήμης των υπολογιστών και έχω εργαστεί στον τομέα της έρευνας, έχω διαπιστώσει ότι μεγαλύτερη χαρά μού προσφέρει η πρώτη παρουσίαση της τεράστιας ισχύος των υπολογιστών στους σπουδαστές που μόλις έχουν αρχίσει να μαθαίνουν γι' αυτούς. Η έξαψή τους ανανεώνει διαρκώς την αγάπη μου για την επιστήμη των υπολογιστών. Εκτός από τη διδασκαλία μου στο Πανεπιστήμιο Stanford, διατελώ από το 1990 πρόεδρος των Επαγγελματιών Υπολογιστών με Κοινωνική Ευθύνη, ενός συλλόγου επαγγελματιών των υπολογιστών ο οποίος έχει στόχο το δημόσιο συμφέρον και περιλαμβάνει 2000 μέλη σε 22 συμβούλια διασκορπισμένα σε πολλές πολιτείες των Η.Π.Α. Οι υπολογιστές επηρεάζουν την κοινωνία μας με πολλούς και διάφορους τρόπους. Όσο σημαντικό είναι να μαθαίνουμε για την τεχνολογία, εξίσου σημαντικό αν όχι σημαντικότερο είναι να προσπαθούμε να εξασφαλίσουμε ότι οι υπολογιστές θα χρησιμοποιούνται για το κοινό συμφέρον. Αν έχετε υποδείξεις για το πώς θα μπορούσε να γίνει η παρουσίαση του υλικού αυτού του βιβλίου πιο ξεκάθαρη, ή αν εντοπίσετε λάθη στο κείμενο, μη διστάσετε να επικοινωνήσετε μαζί μου μέσω ηλεκτρονικού ταχυδρομείου, στη διεύθυνση Eric S. Roberts Τμήμα Επιστήμης των Υπολογιστών Πανεπιστήμιο Stanford Για το σπουδαστή Καλώς ορίσατε! Επιλέγοντας αυτό το βιβλίο κάνατε το πρώτο βήμα στον κόσμο της επιστήμης των υπολογιστών έναν τομέα σπουδών ο οποίος, σχεδόν από το μηδέν όπου βρισκόταν πριν από μισό αιώνα, έχει φτάσει να αποτελεί έναν από τους πλέον ζωντανούς και ενεργούς επιστημονικούς κλάδους της εποχής μας. 6

11 Στην πάροδο αυτών των ετών, ο υπολογιστής άνοιξε εντυπωσιακές δυνατότητες σχεδόν σε κάθε πεδίο ενασχόλησης των ανθρώπων. Τα σημερινά στελέχη των επιχειρήσεων είναι σε θέση να διοικούν πολυεθνικές εταιρείες σε πρωτοφανή κλίμακα επειδή οι υπολογιστές τούς δίνουν τη δυνατότητα να μεταφέρουν πληροφορίες σε οποιοδήποτε σημείο του κόσμου μέσα σε κλάσματα του δευτερολέπτου. Οι επιστήμονες μπορούν πλέον να λύνουν προβλήματα τα οποία ξεπερνούσαν τις ανθρώπινες δυνατότητες μέχρι τη στιγμή που οι υπολογιστές έκαναν εφικτούς τους απαραίτητους υπολογισμούς. Οι παραγωγοί κινηματογραφικών ταινιών χρησιμοποιούν υπολογιστές για να δημιουργούν εντυπωσιακά οπτικά εφέ τα οποία θα ήταν αδύνατο να επιτύχουν χωρίς αυτούς. Οι γιατροί μπορούν να κάνουν πολύ πιο ακριβείς διαγνώσεις για τις παθήσεις των ασθενών τους επειδή οι υπολογιστές έδωσαν το έναυσμα για ένα μαζικό μετασχηματισμό της ιατρικής επιστήμης. Οι υπολογιστές είναι μια τεχνολογία που προσφέρει αληθινή δύναμη. Τα βήματα προόδου των οποίων ήμασταν μάρτυρες μέχρι τώρα είναι πολύ μικρά σε σύγκριση με αυτά που θα δούμε τις επόμενες δεκαετίες. Οι υπολογιστές θα έχουν πρωταγωνιστικό ρόλο στη διαμόρφωση του 21ου αιώνα, όπως ακριβώς είχαν και τα τελευταία πενήντα χρόνια. Εσείς που είστε σπουδαστές σήμερα, σύντομα θα κληρονομήσετε την ευθύνη να ηγηθείτε αυτής της προόδου και, σε αυτή σας την προσπάθεια, η γνώση της χρήσης των υπολογιστών θα σας προσφέρει λίγη μόνο βοήθεια. Όπως συμβαίνει με τα περισσότερα πράγματα που αξίζει να γνωρίζει κανείς, η εκμάθηση του τρόπου λειτουργίας των υπολογιστών και του ελέγχου της τεράστιας ισχύος τους απαιτεί χρόνο. Δεν πρόκειται να τα καταλάβετε όλα μονομιάς, αλλά από κάπου πρέπει να ξεκινήσετε. Πριν από διόμισυ χιλιάδες χρόνια, ο Κινέζος φιλόσοφος Λάο Τσου εξέφρασε την άποψη ότι ακόμα και το μεγαλύτερο ταξίδι αρχίζει με ένα μόνο βήμα. Αυτό το βιβλίο μπορεί να αποτελέσει το δικό σας πρώτο βήμα. Για πολλούς από εσάς, το πρώτο βήμα ενδέχεται να αποδειχθεί και το δυσκολότερο. Πολλοί σπουδαστές βλέπουν τους υπολογιστές σαν "βουνό" και θεωρούν ότι η επιστήμη των υπολογιστών είναι κάτι πέρα από τις δυνάμεις τους. Ωστόσο, η εκμάθηση των βασικών εννοιών του προγραμματισμού δεν απαιτεί ούτε προηγμένα μαθηματικά ούτε βαθειά γνώση των ηλεκτρονικών. Αυτό που έχει σημασία στον προγραμματισμό είναι να μπορεί κανείς να προχωρήσει από τη διατύπωση ενός προβλήματος στη λύση του. Για να το κάνετε αυτό, θα πρέπει να μπορείτε να σκέφτεστε λογικά. Θα πρέπει να έχετε την απαραίτητη πειθαρχία ώστε να εκφράζετε τη λογική σας σκέψη σε μια μορφή κατανοητή από τον υπολογιστή. Ακόμα σημαντικότερο, όμως, είναι ότι θα πρέπει να μπορείτε να μένετε σταθεροί στο στόχο σας μέχρι την ολοκλήρωσή του, χωρίς να αποθαρρύνεστε από τις δυσκολίες και τις αναποδιές. Αν παραμείνετε προσηλωμένοι στη διαδικασία, θα ανακαλύψετε ότι η εξεύρεση της λύσης προσφέρει τόση απόλαυση ώστε σας αποζημιώνει και με το παραπάνω για τα εμπόδια και τις απογοητεύσεις που θα έχετε συναντήσει στην πορεία. Αυτό το βιβλίο έχει σχεδιαστεί με τέτοιον τρόπο ώστε να σας διδάξει τις βασικές αρχές του προγραμματισμού και τις βασικές έννοιες της C, η οποία αποτελεί σήμερα την κυρίαρχη γλώσσα προγραμματισμού στον κλάδο των υπολογιστών. Το βιβλίο αντιμετωπίζει τόσο τα γιατί όσο και τα πώς του προγραμματισμού, με στόχο να σας δώσει μια αίσθηση της διαδικασίας του προγραμματισμού ως συνόλου. Περιλαμβάνει επίσης αρκετά χαρακτηριστικά που θα σας βοηθήσουν να ε- στιάσετε την προσοχή σας στα ουσιώδη και να αποφύγετε τυχόν λάθη που θα σας καθυστερήσουν. Αυτά τα χαρακτηριστικά συνοψίζονται στις επόμενες σελίδες, όπου και εξηγείται ο τρόπος με τον οποίο θα πρέπει να χρησιμοποιήσετε το βιβλίο αποδοτικά καθώς θα ξεκινάτε το ταξίδι σας στο συναρπαστικό κόσμο της επιστήμης των υπολογιστών. 7

12 Για τον καθηγητή Το ακαδημαϊκό έτος , το Πανεπιστήμιο Stanford αποφάσισε να αναδομήσει το πρόγραμμα σπουδών της εισαγωγής στην επιστήμη των υπολογιστών έτσι ώστε να χρησιμοποιείται η γλώσσα ANSI C αντί για την Pascal. Επιλέξαμε να υιοθετήσουμε τη χρήση της ANSI C στα εισαγωγικά μας τμήματα σπουδών για τους ακόλουθους λόγους: Οι σπουδαστές επιθυμούσαν τη χρήση μιας πιο πρακτικής γλώσσας. Οι μελλοντικοί εργοδότες θέλουν να έχουν οι σπουδαστές περισσότερη πρακτική εμπειρία στα εργαλεία που χρησιμοποιούνται στον πραγματικό κόσμο των επιχειρήσεων, ανάμεσα στα οποία ξεχωρίζουν σήμερα η C και η C++. Βλέποντας στις εφημερίδες ελάχιστες αγγελίες για προγραμματιστές Pascal, οι σπουδαστές μας άρχισαν να αμφισβητούν τη σχέση της εκπαίδευσής τους με τις πραγματικές συνθήκες της αγοράς εργασίας. Το πρόγραμμα σπουδών μας που βασιζόταν στην Pascal δίδασκε τους σπουδαστές προγραμματισμό σε μια γλώσσα που δεν επρόκειτο να χρησιμοποιήσουν ξανά στο μέλλον. Ανακαλύψαμε ότι πολλοί από αυτούς τους σπουδαστές, όταν εγκατέλειπαν την Pascal για πιο σύγχρονες γλώσσες, συχνά ξεχνούσαν όλα όσα είχαν μάθει για το στυλ προγραμματισμού και τις τεχνικές ανάπτυξης λογισμικού. Τώρα που διδάσκονται αυτές τις δεξιότητες στα πλαίσια μιας γλώσσας την οποία θα συνεχίσουν να χρησιμοποιούν, διαπιστώσαμε ότι γράφουν πολύ καλύτερα προγράμματα. Πολλά από τα πιο προχωρημένα μαθήματα επιστήμης των υπολογιστών, κυρίως στο πεδίο των συστημάτων, απαιτούσαν από τους σπουδαστές να προγραμματίζουν σε C. Η ενασχόληση με τη C από την αρχή εφοδιάζει τους σπουδαστές με πολύ μεγαλύτερη εμπειρία, την οποία μπορούν να αξιοποιήσουν όταν φτάσουν σε αυτά τα πιο προχωρημένα μαθήματα. Η εκμάθηση της C από την αρχή "στρώνει το δρόμο" για την εκμάθηση της C++ και του αντικειμενοστρεφούς προγραμματισμού (object-oriented programming). Επειδή οι σπουδαστές μας έχουν στο τέλος του πρώτου έτους των σπουδών τους στέρεες βάσεις στον προγραμματισμό με τη C, μας δόθηκε η δυνατότητα να μεταφέρουμε το μάθημα της αντικειμενοστρεφούς ανάπτυξης συστημάτων αρκετά νωρίτερα στο πρόγραμμα σπουδών. Η C προσφέρει τη δυνατότητα κάλυψης αρκετών σημαντικών θεμάτων, όπως η ανάπτυξη λογισμικού σε λειτουργικές μονάδες (modular programming) και οι αφηρημένοι τύποι δεδομένων (abstract data types), τα οποία δεν είναι εύκολο να διδάξει κανείς στο περιβάλλον της Pascal. Τα πέντε τελευταία χρόνια, η C έχει αντικαταστήσει σχεδόν πλήρως τη Fortran ως "κοινή γλώσσα" για τον προγραμματισμό επιστημονικών και τεχνικών εφαρμογών. Με δεδομένη την εμπειρία που αποκόμισα τα τρία τελευταία χρόνια, είμαι πλέον πεπεισμένος ότι η επιλογή μας ήταν σωστή και ότι το πρόγραμμα σπουδών μας ενισχύθηκε από αυτή την αλλαγή. 14

13 Από την άλλη μεριά, οφείλω να παραδεχθώ ότι η διδασκαλία της C στο πρώτο εξάμηνο σπουδών δεν είναι πάντα εύκολη. Η C έχει σχεδιαστεί για προγραμματιστές και όχι για πρωτοετείς σπουδαστές. Πολλά από τα χαρακτηριστικά της αποκτούν νόημα μόνο όταν τα κατανοήσει κανείς βασιζόμενος σε ένα ευρύτερο εννοιολογικό πλαίσιο το οποίο είναι αδύνατο να αντιληφθούν οι νέοι σπουδαστές. Η C είναι μια πολύπλοκη γλώσσα από πολλές απόψεις και, προκειμένου να τη διδάξουμε σε εισαγωγικό επίπεδο σπουδών, πρέπει να βρούμε κάποιον τρόπο ώστε να περιορίσουμε την πολυπλοκότητά της. Η προσέγγιση της χρήσης βιβλιοθηκών Ένας από τους κεντρικούς στόχους αυτού του βιβλίου είναι να δώσει τη δυνατότητα στους καθηγητές να διαχειριστούν την εγγενή πολυπλοκότητα της C. Ωστόσο, αυτό ακριβώς είναι που κάνουμε και ως προγραμματιστές. Όταν αντιμετωπίζουμε ένα πρόβλημα το οποίο είναι υπερβολικά πολύπλοκο ώστε να μπορούμε να το λύσουμε απευθείας, το διαχωρίζουμε σε μικρότερα κομμάτια και εξετάζουμε καθένα από αυτά ανεξάρτητα από τα υπόλοιπα. Επιπλέον, όταν η πολυπλοκότητα κάποιου από αυτά τα κομμάτια ξεπερνά ένα συγκεκριμένο όριο, συνήθως είναι σκόπιμο να απομονώσουμε αυτή την πολυπλοκότητα ορίζοντας μια χωριστή αφαίρεση (abstraction) την οποία θα εφοδιάσουμε με μια απλή διασύνδεση (interface). Η διασύνδεση προστατεύει τους πελάτες από τις υποκείμενες λεπτομέρειες της αφαίρεσης, α- πλοποιώντας με αυτόν τον τρόπο την εννοιολογική δομή. Η ίδια προσέγγιση μπορεί να χρησιμοποιηθεί και για τη διδασκαλία του προγραμματισμού. Προκειμένου να διευκολύνω τους σπουδαστές στην εκμάθηση του υλικού, υιοθέτησα σε αυτό το βιβλίο μια προσέγγιση που βασίζεται σε βιβλιοθήκες προγραμματισμού και δίνει έμφαση στις βασικές αρχές της αφαίρεσης. Το χαρακτηριστικό γνώρισμα αυτής της προσέγγισης αντικατοπτρίζεται στα δύο παρακάτω χαρακτηριστικά που κάνουν αυτό το βιβλίο να ξεχωρίζει από άλλα εισαγωγικά βιβλία: 1. Οι βιβλιοθήκες (libraries) και η ανάπτυξη λογισμικού σε λειτουργικές μονάδες (modular development) θεμελιώδεις έννοιες του σύγχρονου προγραμματισμού καλύπτονται με αρκετές λεπτομέρειες από τα πρώτα κεφάλαια του βιβλίου. Το Δεύτερο Μέρος του βιβλίου επικεντρώνεται εξολοκλήρου στα θέματα των βιβλιοθηκών, των διασυνδέσεων, των αφαιρέσεων, και της ανάπτυξης προγραμμάτων σε λειτουργικές μονάδες. Οι σπουδαστές μαθαίνουν να χρησιμοποιούν αυτές τις τεχνικές αποδοτικά πριν μάθουν για τους πίνακες (arrays). 2. Το βιβλίο επιδεικνύει την ισχύ των βιβλιοθηκών μέσω της χρήσης τους. Μπορεί να λες στους σπουδαστές σου ότι οι βιβλιοθήκες μάς επιτρέπουν να κρύβουμε την πολυπλοκότητα, αλλά είναι εντελώς διαφορετικό να τους δείχνεις αυτή την έννοια στην πράξη. Σε αυτό το βιβλίο παρουσιάζονται αρκετές νέες βιβλιοθήκες οι οποίες κρύβουν από τους σπουδαστές τις λεπτομέρειες μέχρι τη στιγμή που θα είναι έτοιμοι να τις αφομοιώσουν. Οι βιβλιοθήκες παρέχουν στους σπουδαστές τη δυνατότητα να γράψουν χρήσιμα προγράμματα τα οποία δεν θα μπορούσαν να αναπτύξουν από μόνοι τους. Η υλοποίηση αυτών των βιβλιοθηκών αποκαλύπτεται σε επόμενα κεφάλαια, επιτρέποντας με αυτόν τον τρόπο στους σπουδαστές να εκτιμήσουν τη δύναμη της αφαίρεσης. 15

14 Το 1992, επιχείρησα να διδάξω το εισαγωγικό μάθημα χρησιμοποιώντας μόνο τις βιβλιοθήκες ANSI. Τα αποτελέσματα δεν ήταν καθόλου ενθαρρυντικά. Σε κάθε νέο θέμα οι σπουδαστές έπρεπε να κατανοήσουν τόσα πολλά πράγματα για την υπόλοιπη C ώστε να μην υ- πάρχει κάποιος αποδοτικός τρόπος για να παρουσιάσω το υλικό. Για παράδειγμα, προκειμένου να χρησιμοποιήσουν αλφαριθμητικά δεδομένα με κάποιον ενδιαφέροντα τρόπο, οι σπουδαστές ήταν υποχρεωμένοι να κατανοήσουν τις τεχνικές λεπτομέρειες των πινάκων, των δεικτών (pointers), και της κατανομής μνήμης (memory allocation), παρά το γεγονός ότι ο χειρισμός των αλφαριθμητικών είναι πολύ πιο απλός από εννοιολογική άποψη. Οι καλύτεροι σπουδαστές μου κατόρθωσαν να καταλάβουν τι συνέβαινε μόνο στο τέλος του εξαμήνου αλλά οι περισσότεροι δεν το κατάφεραν ούτε τότε. Από τις αρχές του 1993, όταν και εφαρμόσαμε για πρώτη φορά την προσέγγιση που βασίζεται σε βιβλιοθήκες, οι σπουδαστές αφομοιώνουν το υλικό πολύ πιο εύκολα και μαθαίνουν πολύ περισσότερα πράγματα για την επιστήμη των υπολογιστών. Οι διασυνδέσεις των βιβλιοθηκών και οι σχετικές υλοποιήσεις που χρησιμοποιούνται σε αυτό το βιβλίο έχουν συγκεντρωθεί στο Παράρτημα Β, όπου και δίνονται οδηγίες για την απόκτηση του πηγαίου κώδικα μέσω ανώνυμης FTP (File Transfer Protocol, Πρωτόκολλο Μεταφοράς Αρχείων). Η σειρά παρουσίασης του υλικού Τα θέματα αυτού του βιβλίου παρουσιάζονται με την ίδια σειρά που διδάσκονται και στο πρώτο εξάμηνο του μαθήματος Επιστήμης των Υπολογιστών του Πανεπιστημίου Stanford, εκτός από το υλικό του Κεφαλαίου 17, το οποίο καλύπτεται στο δεύτερο εξάμηνο σπουδών. Ανάλογα με το επίπεδο των σπουδαστών σας και τους στόχους του μαθήματός σας, είναι πιθανό να θελήσετε να τροποποιήσετε τη σειρά παρουσίασης. Στις επόμενες παραγράφους γίνεται μια επισκόπηση των κεφαλαίων και επισημαίνονται ορισμένες από τις σημαντικότερες αλληλεξαρτήσεις τους. Στο Κεφάλαιο 1 γίνεται μια ανασκόπηση της ιστορίας των υπολογιστών και περιγράφεται η διαδικασία του προγραμματισμού. Το συγκεκριμένο κεφάλαιο δεν περιλαμβάνει καθόλου προγραμματισμό, αλλά παρέχει το υπόβαθρο για το υπόλοιπο βιβλίο. Σχεδίασα τα Κεφάλαια 2 και 3 με τέτοιον τρόπο ώστε να μπορούν να γίνουν κατανοητά από σπουδαστές με ελάχιστο ή και καθόλου υπόβαθρο στον προγραμματισμό. Η προσέγγιση των θεμάτων αυτών των κεφαλαίων γίνεται με εννοιολογικό τρόπο, και επίκεντρό τους είναι η επίλυση προβλημάτων και όχι οι λεπτομέρειες της γλώσσας C. Όταν οι νέοι σπουδαστές έρχονται αντιμέτωποι με αναλυτικούς κανόνες σύνταξης και δομής, εστιάζουν την προσοχή τους στην εκμάθηση των κανόνων και όχι των υποκείμενων εννοιών, οι οποίες είναι πολύ πιο σημαντικές σε αυτό το στάδιο. Αν οι σπουδαστές σας έχουν ήδη κάποιες γνώσεις προγραμματισμού, μπορείτε να προχωρήσετε πολύ πιο γρήγορα στην κάλυψη αυτού του υλικού. Η προσέγγιση των θεμάτων των Κεφαλαίων 2 και 3 είναι σχετικά "ανεπίσημη", μιας και στόχος είναι η ανάπτυξη των δεξιοτήτων των σπουδαστών στην επίλυση προβλημάτων. Στην πορεία, πάντως, παρουσιάζονται αρκετές βασικές μορφές εντολών και δομών ελέγχου, αλλά μόνο με τη μορφή ιδιωματισμών (idioms) για την εκτέλεση μιας συγκεκριμένης εργασίας. Στο Κεφάλαιο 4 προστίθεται και η επίσημη δομή, με τη διαδοχική περιγραφή κάθε μορφής 16

15 εντολής και τις λεπτομέρειες που αφορούν τη σύνταξη και τη σημασία της. Σε αυτό το κεφάλαιο καλύπτονται επίσης σε αρκετή έκταση τα λογικά (Boolean) δεδομένα. Στο Κεφάλαιο 5 παρουσιάζονται για πρώτη φορά οι συναρτήσεις (functions) και οι διαδικασίες (procedures). Το κεφάλαιο ξεκινά με απλά παραδείγματα συναρτήσεων και συνεχίζεται με ολοένα και πιο εξεζητημένα παραδείγματα. Οι τεχνικές λεπτομέρειες της μεταβίβασης παραμέτρων περιγράφονται σε μια χωριστή ενότητα, στην οποία περιλαμβάνονται πολλά διαγράμματα που επιτρέπουν στους σπουδαστές να παρακολουθήσουν τη ροή των δεδομένων από τη μια συνάρτηση στην άλλη. Το κεφάλαιο ολοκληρώνεται με ένα σημαντικό παράδειγμα προγραμματισμού, στο οποίο επιδεικνύεται η έννοια της βηματικής εκλέπτυνσης (stepwise refinement). Οι έννοιες αλγορίθμων που παρουσιάζονται στο Κεφάλαιο 6 είναι θεμελιώδεις για την επιστήμη των υπολογιστών, αλλά ενδέχεται να μην είναι απαραίτητες για όλους τους σπουδαστές. Αν το τμήμα σας αποτελείται από μηχανικούς ή μεταπτυχιακούς σπουδαστές, το υλικό αυτού του κεφαλαίου θα αποδειχθεί εξαιρετικά πολύτιμο. Αν όμως οι σπουδαστές σας δεν έχουν τέτοιο τεχνικό υπόβαθρο, μπορείτε να παραλείψετε ένα μεγάλο μέρος του υλικού χωρίς να επηρεάσετε τη ροή της παρουσίασης. Έχω διαπιστώσει ότι η προσθήκη θεμάτων που αφορούν τα γραφικά στο πρώτο εξάμηνο σπουδών είναι ένας θαυμάσιος τρόπος για να αυξήσω το ενδιαφέρον των σπουδαστών για το υλικό. Το Κεφάλαιο 7 υπάρχει γι' αυτόν ακριβώς το λόγο. Σε αυτό το στάδιο, οι σπουδαστές έχουν μάθει τις τεχνικές λεπτομέρειες των συναρτήσεων αλλά δεν έχουν κάποιο έναυσμα για να αρχίσουν να γράφουν συναρτήσεις. Το κίνητρο είναι να τους δώσετε τη δυνατότητα να σχεδιάσουν περίπλοκες εικόνες στην οθόνη. Η βιβλιοθήκη γραφικών έχει υλοποιηθεί για τα περισσότερα από τα κύρια περιβάλλοντα προγραμματισμού και, κατά συνέπεια, μπορεί να χρησιμοποιηθεί στις περισσότερες ακαδημαϊκές σχολές. Στο Κεφάλαιο 8 καλύπτονται δύο θέματα, τα οποία είναι ανεξάρτητα κατά μία έννοια. Το πρώτο μέρος του κεφαλαίου είναι αφιερωμένο στα κριτήρια σχεδίασης διασυνδέσεων και είναι ουσιώδες για κάθε σπουδαστή που θέλει να κατανοήσει τον τρόπο με τον οποίο λειτουργεί ο σύγχρονος προγραμματισμός. Στο δεύτερο μέρος του κεφαλαίου, αυτές οι βασικές αρχές εφαρμόζονται στη δημιουργία μιας βιβλιοθήκης τυχαίων αριθμών. Η ίδια η διασύνδεση random.h είναι λιγότερο σημαντική από τις γενικές αρχές, αν και η χρήση της είναι απαραίτητη σε κάποιες ασκήσεις που περιλαμβάνονται σε επόμενα κεφάλαια. Στο Κεφάλαιο 9 παρουσιάζονται τα αλφαριθμητικά ως αφηρημένος τύπος δεδομένων. Αυτό το κεφάλαιο αντιπροσωπεύει, ως ένα βαθμό, το θεμέλιο λίθο της προσέγγισης που βασίζεται σε βιβλιοθήκες. Χρησιμοποιώντας μια βιβλιοθήκη δυναμικών αλφαριθμητικών, οι σπουδαστές μπορούν εύκολα να γράψουν προγράμματα που εκτελούν εξεζητημένο χειρισμό αλφαριθμητικών, παρόλο που δεν καταλαβαίνουν ακόμα την υποκείμενη αναπαράσταση των αλφαριθμητικών, η οποία και καλύπτεται στο Κεφάλαιο 14. Η παρουσίαση των αλφαριθμητικών σε αυτό το στάδιο της διδασκαλίας δίνει στους σπουδαστές τη δυνατότητα να γράψουν προγράμματα πολύ πιο συναρπαστικά απ' ό,τι θα μπορούσαν να γράψουν σε διαφορετική περίπτωση. Με την πρώτη ανάγνωση μπορεί κάποιος να μην καταλάβει το σκοπό που εξυπηρετεί το Κεφάλαιο 10, το οποίο μοιάζει να αποτελεί συνέχεια της περιγραφής των αλφαριθμητικών που ξεκίνησε στο Κεφάλαιο 9. Η ουσιαστική αξία του Κεφαλαίου 10 δεν βρίσκεται ούτε στο πρόγραμμα των "χοιρινών λατινικών" (Pig Latin), το οποίο είναι περισσότερο διασκεδαστικό 17

16 παρά πρακτικό. Ο λόγος ύπαρξης αυτού του παραδείγματος είναι ότι παρέχει το κίνητρο για τη δημιουργία της διασύνδεσης σάρωσης, η οποία επιτρέπει το διαχωρισμό των λέξεων της γραμμής εισόδου δεδομένων. Η χρησιμότητα της λειτουργικής μονάδας σάρωσης αποδεικνύεται διαρκώς, όχι μόνο στο πρώτο εξάμηνο σπουδών, αλλά και στα επόμενα. Είναι το πρακτικότερο εργαλείο που δημιουργούν οι σπουδαστές σε αυτό το μάθημα και αποτελεί τρανό παράδειγμα της αξίας των λειτουργικών μονάδων. Στα Κεφάλαια 11 έως 16 καλύπτονται οι θεμελιώδεις σύνθετες δομές οι πίνακες (arrays), οι δείκτες (pointers), τα αρχεία (files), και οι εγγραφές (records) με μια σειρά που έχει αποδειχθεί σωστή στην πράξη. Επειδή ακριβώς γλώσσα βάσης της εισαγωγής στην επιστήμη των υπολογιστών είναι η C, είναι σημαντικό να περιγράψετε στους σπουδαστές σας τους δείκτες όσο το δυνατό συντομότερα μετά την παρουσίαση των πινάκων, έτσι ώστε να μπορείτε να τονίσετε τις σχέσεις που τους συνδέουν. Εξάλλου, μετά την αναλυτική κάλυψη αυτών των εννοιών, γίνεται εφικτή η λεπτομερέστερη εξέταση των αλφαριθμητικών δεδομένων στο Κεφάλαιο 14, με την αποκάλυψη της υποκείμενης αναπαράστασής τους η οποία είχε κρυφτεί από τον αφηρημένο ορισμό. Στο Κεφάλαιο 16 γίνεται μια σύνοψη των βασικών δομών δεδομένων με τη δημιουργία μιας "μηχανής" διδασκαλίας που καθοδηγείται από δεδομένα, η οποία αποτελεί και το πλέον "προηγμένο" παράδειγμα προγραμματισμού που παρουσιάζεται σε αυτό το βιβλίο. Στο Κεφάλαιο 17 καλύπτονται τρία σημαντικά θέματα τα οποία παρουσιάζονται συχνά στο πρώτο εξάμηνο σπουδών προγραμματισμού: η αναδρομή (recursion), οι αφηρημένοι τύποι δεδομένων (abstract data types), και η ανάλυση αλγορίθμων (analysis of algorithms). Στο Πανεπιστήμιο Stanford, στο οποίο εφαρμόζεται το σύστημα των τριμήνων, διδάσκουμε την αναδρομή στο δεύτερο τρίμηνο. Αν σκοπεύετε να διδάξετε την αναδρομή στο πρώτο εξάμηνο σπουδών, σας συνιστώ να το κάνετε αρκετά νωρίς ώστε να δώσετε χρόνο στους σπουδαστές σας να αφομοιώσουν το υλικό. Μπορείτε ενδεχομένως να καλύψετε τις αναδρομικές συναρτήσεις αμέσως μετά το Κεφάλαιο 5 και τους αναδρομικούς αλγορίθμους μετά το Κεφάλαιο 6. Μια άλλη προσέγγιση είναι να καλύψετε την αναδρομή μαζί με την ανάλυση αλγορίθμων μετά το τέλος του Κεφαλαίου 12. Εγχειρίδιο καθηγητή Το εγχειρίδιο του καθηγητή (Instructor's Manual) περιέχει συμπληρωματικό υλικό, στο οποίο περιλαμβάνεται ένα πρόγραμμα διδασκαλίας, υποδείξεις για τη διάρθρωση της παράδοσης κάθε μαθήματος, υποδείγματα εργασιών και εξετάσεων, και οι λύσεις όλων των ασκήσεων προγραμματισμού. Εκτός από το έντυπο υλικό, οι καθηγητές που θα χρησιμοποιήσουν στις παραδόσεις τους αυτό το βιβλίο έχουν τη δυνατότητα να αποκτήσουν και ηλεκτρονικά αντίγραφα των λύσεων των ασκήσεων και του σχετικού υλικού. Για λεπτομέρειες σχετικά με τους τρόπους απόκτησης αυτού του υλικού, μπορείτε να επικοινωνήσετε με τον εκδοτικό οίκο Addison-Wesley, στην ακόλουθη διεύθυνση: Addison-Wesley Publishing Company Computer Science Division One Jacob Way Reading, MA U.S.A. 18

17 292 ΚΕΦΑΛΑΙΟ 7: Βιβλιοθήκες και διασυνδέσεις: Μια απλή βιβλιοθήκη γραφικών box.c. Μπορείτε να καλέσετε την DrawBox πολλές φορές, ή ακόμα και να την τοποθετήσετε μέσα σε ένα βρόχο for ο οποίος θα σχεδιάζει ένα τετράγωνο σε κάθε κύκλο. 7.4 Επίλυση ενός μεγαλύτερου προβλήματος Για να διευρύνετε την κατανόησή σας σε ό,τι αφορά τις συναρτήσεις της βιβλιοθήκης γραφικών, θα πρέπει να επικεντρώσετε την προσοχή σας σε ένα μεγαλύτερο πρόβλημα. Υποθέστε ότι έχετε αποφασίσει να σχεδιάσετε μια εικόνα του ιδανικού σας σπιτιού με τόσες λεπτομέρειες όσες θα βλέπατε σε μια παιδική ζωγραφιά. Ένα τέτοιο σπίτι φαίνεται στο ακόλουθο διάγραμμα: Παρόλο που η εικόνα έχει πολλά ανεξάρτητα τμήματα, αποτελείται από δύο μόνο θεμελιώδη στοιχεία γραφικών: (1) την ευθεία γραμμή που χρησιμοποιείται στο πλαίσιο του σπιτιού, στην πόρτα, και στα τζάμια των παραθύρων και (2) τον κύκλο που χρησιμοποιείται μόνο για το πόμολο της πόρτας. Αν συνδυάσετε αυτές τις γραμμές και τον κύκλο στα κατάλληλα μεγέθη και τις κατάλληλες θέσεις, μπορείτε να δημιουργήσετε τη συνολική εικόνα. Επιπλέον, σχεδόν όλες οι ευθείες γραμμές είναι διατεταγμένες με τέτοιον τρόπο ώστε να σχηματίζουν ορθογώνια, και έτσι μπορείτε να εκμεταλλευτείτε πλήρως το νέο σύνολο εργαλείων σας. Πριν αρχίσετε να γράφετε το πρόγραμμα, όμως, προσέξτε ότι αυτό το συγκεκριμένο σπίτι έχει πολλές ιδιότητες που καθορίζουν το σχήμα του. Για παράδειγμα, το σπίτι έχει πλάτος 3.0 ίντσες. Η απόσταση από το έδαφος μέχρι τη σοφίτα είναι 2.0 ίντσες, με άλλες 0.7 ίντσες μέχρι την κορυφή της στέγης. Η πόρτα είναι ένα ορθογώνιο με διαστάσεις 0.4 επί 0.7 ίντσες, και κάθε τζάμι παραθύρου είναι επίσης ένα ορθογώνιο με διαστάσεις 0.2 επί 0.25 ίντσες. Αντί να γεμίσετε το πρόγραμμά σας με όλους αυτούς τους αριθμούς, είναι προτιμότερο να δώσετε σε αυτές τις τιμές ονόματα, τα οποία θα μπορείτε στη συνέχεια να χρησιμοποιήσετε στο πρό-

18 7.4 Επίλυση ενός μεγαλύτερου προβλήματος 293 γραμμα. Το διάγραμμα του σπιτιού που παρουσιάζεται στην παραπάνω εικόνα βασίζεται στις ακόλουθες σταθερές: #define HouseHeight 2.0 #define HouseWidth 3.0 #define AtticHeight 0.7 #define DoorWidth 0.4 #define DoorHeight 0.7 #define DoorknobRadius 0.03 #define DoorknobInset 0.07 #define PaneHeight 0.25 #define PaneWidth 0.2 #define FirstFloorWindows 0.3 #define SecondFloorWindows 1.25 Οι τιμές είναι πραγματικοί αριθμοί που αναπαριστούν ίντσες, και τα ονόματά τους περιγράφουν τη φυσική τους σημασία στα πλαίσια της εικόνας. Στο πρόγραμμα, το γεγονός ότι αυτές οι τιμές αναπαριστώνται με τη χρήση συμβολικών ονομάτων κάνει εύκολη την αλλαγή των διαστάσεων αν, για παράδειγμα, θέλατε το σπίτι να ήταν λίγο πλατύτερο ή να είχε μεγαλύτερα παράθυρα. Χρήση βηματικής εκλέπτυνσης Είστε πλέον έτοιμοι να ξεκινήσετε την υλοποίηση. Όπως εξηγήθηκε στο Κεφάλαιο 5, ο καλύτερος τρόπος για να προσεγγίσετε ένα μεγάλο προγραμματιστικό πρόβλημα είναι να χρησιμοποιήσετε τη στρατηγική της βηματικής εκλέπτυνσης προκειμένου να διαμερίσετε το πλήρες πρόβλημα σε ένα σύνολο απλούστερων προβλημάτων. Για να εφαρμόσετε αυτή τη στρατηγική στο πρόβλημα της σχεδίασης του σπιτιού, πρέπει να ξεκινήσετε από το γενικότερο επίπεδο λεπτομέρειας: θέλετε να σχεδιάσετε ένα σπίτι. Θα πρέπει να δώσετε σε αυτή τη λειτουργία ένα όνομα (για παράδειγμα, DrawHouse) και να την ορίσετε ως διαδικασία. Η υλοποίηση της διαδικασίας DrawHouse θα γίνει έτσι το πρώτο σας υπο-πρόβλημα. Για να ολοκληρώσετε την υλοποίηση, πρέπει στη συνέχεια να χωρίσετε το συνολικό πρόβλημα σε μικρότερα κομμάτια: σχεδίαση του περιγράμματος, της πόρτας, και των παραθύρων. Κάθε μια από αυτές τις λειτουργίες θα γίνει με τη σειρά της ένα υπο-πρόβλημα στο επόμενο επίπεδο λεπτομέρειας. Θα πρέπει να συνεχίσετε αυτή τη στρατηγική μέχρι τη στιγμή που όλα τα υποπροβλήματα θα έχουν αναχθεί σε απλές λειτουργίες οι οποίες θα μπορούν να υλοποιηθούν με τα εργαλεία που έχετε στη διάθεσή σας. Ωστόσο, όπως και στην περίπτωση της διαδικασίας DrawBox, θα πρέπει να προσδιορίσετε αν η διαδικασία DrawHouse απαιτεί κάποια ορίσματα. Οι διαστάσεις του σπιτιού ορίστηκαν ως σταθερές στην προηγούμενη ενότητα. Επειδή θα πρέπει επίσης να καθορίσετε πού θέλετε να τοποθετηθεί το σπίτι, φαίνεται λογικό για τη διαδικασία DrawHouse να δέχεται ως ορίσματα μια τετμημένη x και μια τεταγμένη y, που να καθορίζουν τη θέση στην οποία θέλετε να σχεδιαστεί το σπίτι μέσα στο παράθυρο γραφικών. Για λόγους συνέπειας με την DrawBox, είναι λογικό αυτές οι τιμές να καθορίζουν τις συντεταγμένες της κάτω αριστερής γωνίας του σπιτιού. Συνεπώς, το πρωτότυπο της διαδικασίας DrawHouse θα πρέπει να είναι το εξής:

19 294 ΚΕΦΑΛΑΙΟ 7: Βιβλιοθήκες και διασυνδέσεις: Μια απλή βιβλιοθήκη γραφικών void DrawHouse(double x, double y); Η κλήση αυτής της διαδικασίας δίνει εντολή στον υπολογιστή να σχεδιάσει ένα σπίτι του οποίου η κάτω αριστερή γωνία είναι το σημείο (x, y). Έχοντας ορίσει το πρωτότυπο, μπορείτε πλέον να επιστρέψετε και να ολοκληρώσετε το κυρίως πρόγραμμα. Το μόνο που χρειάζεται να κάνετε στην πραγματικότητα είναι να προσδιορίσετε το σημείο της οθόνης όπου πρέπει να εμφανιστεί η εικόνα του σπιτιού. Για παράδειγμα, υποθέστε ότι θέλετε το σπίτι να είναι κεντραρισμένο στο παράθυρο γραφικών. Όπως αναφέρθηκε στην ενότητα "Λήψη πληροφοριών για το παράθυρο γραφικών", νωρίτερα σε αυτό το κεφάλαιο, μπορείτε να χρησιμοποιήσετε τις συναρτήσεις GetWindowWidth και Get- WindowHeight για να βρείτε τις συντεταγμένες του κέντρου του παραθύρου. Για παράδειγμα, αν δηλώσετε τις μεταβλητές cx και cy, μπορείτε να τους αναθέσετε τις συντεταγμένες του κέντρου του παραθύρου με τις εντολές cx = GetWindowWidth() / 2; cy = GetWindowHeight() / 2; Έτσι όπως ορίσατε, όμως, την DrawHouse, το ίδιο το διάγραμμα σχεδιάζεται με βάση την κάτω αριστερή του γωνία και όχι το κέντρο του. Πώς μπορείτε να συσχετίσετε αυτές τις δύο θέσεις; Γνωρίζετε ότι το σπίτι έχει πλάτος HouseWidth ίντσες. Συνεπώς, η αριστερή πλευρά του σπιτιού πρέπει να βρίσκεται στο μισό αυτής της απόστασης από το κέντρο. Έτσι, αν τοποθετήσετε την αριστερή πλευρά του σπιτιού στην τετμημένη cx HouseWidth / 2 το κέντρο του σπιτιού θα συμπέσει με το κέντρο της οθόνης. Μπορείτε να επαναλάβετε την ίδια τεχνική και για την τεταγμένη y. Η μόνη διαφορά είναι ότι το συνολικό ύψος του σπιτιού είναι το άθροισμα των υψών της ορθογώνιας δομής και της σκεπής. Κατά συνέπεια, η κάτω αριστερή γωνία του σπιτιού πρέπει να έχει την τεταγμένη cy (HouseHeight + AtticHeight) / 2 Τώρα που έχετε τις συντεταγμένες της κάτω αριστερής γωνίας του σπιτιού, μπορείτε να ολοκληρώσετε την υλοποίηση της συνάρτησης main ως εξής: main() { double cx, cy; } InitGraphics(); cx = GetWindowWidth() / 2; cy = GetWindowHeight() / 2; DrawHouse(cx HouseWidth / 2, cy (HouseHeight + AtticHeight) / 2); Με αυτόν τον ορισμό ολοκληρώνεται το υψηλότερο επίπεδο της αποσύνθεσης του προβλήματος.

20 7.4 Επίλυση ενός μεγαλύτερου προβλήματος 295 Υλοποίηση της διαδικασίας DrawHouse Σε αυτό το σημείο, θα πρέπει να στρέψετε την προσοχή σας στην υλοποίηση της DrawHouse. Εξοικειωμένοι πλέον με την τεχνική της βηματικής εκλέπτυνσης, θα πρέπει να έχετε ήδη μια ιδέα των θεμελιωδών λειτουργιών. Ο "σκελετός" της διαδικασίας DrawHouse θα πρέπει να έχει αυτή τη μορφή: void DrawHouse(double x, double y) { DrawOutline(...); DrawDoor(...); DrawWindows(...); } Αυτό που απομένει να κάνετε είναι απλώς να συμπληρώσετε τα ορίσματα. Επειδή οι διαδικασίες DrawOutline, DrawDoor, και DrawWindows δεν έχουν πρόσβαση στις τιμές των τοπικών μεταβλητών x και y της DrawHouse, θα πρέπει να μεταβιβάσετε τις πληροφορίες των συντεταγμένων σε κάθε μια από αυτές. Η ακριβής επιλογή, όμως, των τιμών που θα πρέπει να τους μεταβιβάσετε απαιτεί κάποια σκέψη. Το περίγραμμα του σπιτιού ξεκινά στην ίδια γωνία με το σπίτι, οπότε οι τιμές x και y είναι προφανώς οι ίδιες. Σε ό,τι αφορά την πόρτα, μπορείτε να υπολογίσετε τις συντεταγμένες της και στη συνέχεια να τις μεταβιβάσετε στην DrawDoor. Επειδή υπάρχουν διάφορα παράθυρα που σχεδιάζονται σε σχέση με το πλαίσιο του σπιτιού, η συνάρτηση DrawWindows θα πρέπει λογικά να δέχεται ως ορίσματα τις συντεταγμένες του σπιτιού, παρόλο που στην υλοποίησή της θα πρέπει να υπολογιστούν πιο συγκεκριμένες συντεταγμένες για καθένα από τα παράθυρα. Αν υλοποιήσετε την DrawHouse όπως προτείνεται, θα καταλήξει σε μια μορφή παρόμοια με την ακόλουθη: void DrawHouse(double x, double y) { DrawOutline(x, y); DrawDoor(x + (HouseWidth DoorWidth) / 2, y); DrawWindows(x, y); } Αναζήτηση κοινών προτύπων Όταν προσεγγίζετε μεγάλα προβλήματα, η βηματική εκλέπτυνση είναι μία από τις πολλές στρατηγικές που μπορείτε να χρησιμοποιήσετε προς όφελός σας. Μια άλλη εξαιρετικά χρήσιμη στρατηγική είναι να προσπαθήσετε να εντοπίσετε κοινά στοιχεία μεταξύ των διαφορετικών τμημάτων ενός μεγάλου προβλήματος, έτσι ώστε να μπορείτε να εφαρμόσετε μια μοναδική τεχνική επίλυσης σε όλα. Ουσιαστικά, αυτή η προσέγγιση συνίσταται στον καθορισμό των εργαλείων που είναι καλύτερα για τη συγκεκριμένη δουλειά. Για παράδειγμα, αν μπορούσατε να επιλύσετε με ευκολία διάφορα τμήματα ενός προβλήματος χρησιμοποιώντας μια διαδικασία που να εκτελεί μια συγκεκριμένη λειτουργία, κατά πάσα πιθανότητα θα άξιζε τον κόπο να δημιουργήσετε αυτή τη διαδικασία. Αν σκεφτείτε το πρόβλημα της σχεδίασης του σπιτιού από αυτή την προοπτική, υπάρχουν διάφορα εργαλεία που θα χρειαζόσασταν, ορισμένα από τα οποία έχετε γράψει ήδη. Για παράδειγμα, αφού το περίγραμμα του σπιτιού είναι ορθογώνιο, όπως και το πλαίσιο της πόρτας και τα παράθυρα, θα μπορούσε να αποδειχθεί πολύ βολικό το εργαλείο DrawBox. Το πόμολο

21 296 ΚΕΦΑΛΑΙΟ 7: Βιβλιοθήκες και διασυνδέσεις: Μια απλή βιβλιοθήκη γραφικών είναι ένας κύκλος, γεγονός που κάνει λογική τη χρήση της DrawCenteredCircle. Θα πρέπει, όμως, να σκεφτείτε και άλλα εργαλεία που θα μπορούσαν να σας βοηθήσουν. Η σκεπή του σπιτιού είναι τριγωνική. Παρόλο που υπάρχει μόνο ένα τρίγωνο στην εικόνα, ίσως να άξιζε τον κόπο να γράψετε μια διαδικασία DrawTriangle, ιδιαίτερα γιατί έτσι θα την είχατε διαθέσιμη και για άλλα προγράμματα. Ακόμα σημαντικότερο, όμως, είναι να προσέξετε την κανονική δομή των παραθύρων και να εξετάσετε την πιθανότητα συγγραφής μιας γενικότερης διαδικασίας που να επιτρέπει τη σχεδίαση καθενός από τα διαφορετικά σετ παραθύρων. Στην προσπάθειά σας να σχεδιάσετε ένα εργαλείο κατάλληλο για τα παράθυρα, καλό θα ήταν να γενικεύσετε το πρόβλημα όσο περισσότερο μπορείτε. Όσο γενικότερα είναι τα εργαλεία σας, τόσο ευκολότερο θα είναι να τα εφαρμόσετε σε μια μεγάλη ποικιλία περιστάσεων. Ένα τρόπος για να εξασφαλίσετε ότι τα εργαλεία που δημιουργείτε θα είναι ευρέως εφαρμόσιμα είναι να "απομακρυνθείτε" λίγο από τα ειδικά χαρακτηριστικά του τρέχοντος προβλήματος και να προσπαθήσετε να φανταστείτε τις απαραίτητες λειτουργίες σε ένα υψηλότερο, πιο αφαιρετικό επίπεδο. Στα πλαίσια του σπιτιού, η εικόνα παριστάνει ένα παράθυρο με φατνώματα (τζαμάκια). Αν επικεντρώσετε, όμως, την προσοχή σας στην ίδια την εικόνα, θα διαπιστώσετε ότι αυτό που βλέπετε δεν είναι παρά ένα ορθογώνιο πλέγμα αποτελούμενο από δύο σειρές πλαισίων, κάθε μια από τις οποίες περιέχει τρία πλαίσια. Αν είχατε μια διαδικασία DrawGrid που να σχεδιάζει ένα ορθογώνιο πλέγμα, θα μπορούσατε να χρησιμοποιήσετε αυτή τη διαδικασία για να σχεδιάσετε κάθε σετ παραθύρου. Τι ορίσματα απαιτεί η DrawGrid; Για να επιτύχετε την απαιτούμενη γενικότητα, πρέπει να εξασφαλίσετε ότι η διαδικασία DrawGrid δεν θα αναφέρεται στο συγκεκριμένο πλαίσιο του σπιτιού. Επειδή η χρήση των σταθερών PaneWidth και PaneHeight θα εξειδίκευε τη διαδικασία για τη συγκεκριμένη εικόνα του σπιτιού, είναι προτιμότερο το πλάτος και το ύψος κάθε πλαισίου του πλέγματος να μεταβιβάζονται από τον καλούντα ως ορίσματα. Για τη συγκεκριμένη εφαρμογή, επειδή ο καλών θέλει να σχεδιάσει ένα παράθυρο, μπορεί να μεταβιβάσει τις σταθερές PaneWidth και PaneHeight. Η ίδια η διαδικασία απλώς σχεδιάζει πλαίσια. Εκτός από το πλάτος και το ύψος κάθε πλαισίου του πλέγματος, η DrawGrid χρειάζεται να γνωρίζει και τις συντεταγμένες του πλέγματος συνολικά. Για να είναι συνεπής με τα άλλα εργαλεία, η DrawGrid θα πρέπει και αυτή να θεωρεί ότι οι συγκεκριμένες συντεταγμένες αντιστοιχούν στην κάτω αριστερή γωνία του πλέγματος. Τέλος, η διαδικασία πρέπει να γνωρίζει το πλήθος των στηλών και των γραμμών του πλέγματος. Συνεπώς, το πρωτότυπο της DrawGrid θα πρέπει να έχει την εξής μορφή: void DrawGrid(double x, double y, double width, double height, int columns, int rows);

22 7.4 Επίλυση ενός μεγαλύτερου προβλήματος 297 Με δεδομένο ότι έχετε ήδη τη συνάρτηση DrawBox, η υλοποίηση της DrawGrid είναι σχετικά προφανής. Η υλοποίηση αποτελείται από ένα ζεύγος ένθετων βρόχων for με τους οποίους καλείται η DrawBox για κάθε στήλη κάθε γραμμής, όπως παρακάτω: /* * Συνάρτηση: DrawGrid * Χρήση: DrawGrid(x, y, width, height, columns, rows); * * Η DrawGrid σχεδιάζει ορθογώνια διατεταγμένα σε ένα πλέγμα * δύο διαστάσεων. Όπως πάντα, οι συντεταγμένες (x, y) * προσδιορίζουν την κάτω αριστερή γωνία της εικόνας. */ void DrawGrid(double x, double y, double width, double height, int columns, int rows) { } int i, j; for(i = 0; i < columns; i++) { for(j = 0; j < rows; j++) { DrawBox(x + i * width, y + j * height, width, height); } } Τώρα που έχετε την υλοποίηση της DrawGrid, μπορείτε να κατασκευάσετε καθένα από τα πρότυπα παραθύρων καλώντας απλώς την DrawGrid με τα κατάλληλα ορίσματα. Παρόλο που είναι συνήθως καλύτερο να σχεδιάζετε ένα πρόβλημα "από επάνω προς τα κάτω", συχνά είναι προτιμότερο να το υλοποιείτε "από κάτω προς τα επάνω". Η υλοποίηση πρώτα των εργαλείων χαμηλού επιπέδου διευκολύνει την αποσφαλμάτωση των μεμονωμένων τμημάτων του προγράμματός σας, πράγμα που είναι συνήθως ευκολότερο από το να προσπαθείτε να αποσφαλματώσετε ολόκληρο το πρόγραμμα με μιας. Αυτή η στρατηγική ονομάζεται συνθετική υλοποίηση ή υλοποίηση "από κάτω προς τα επάνω" (bottom-up implementation). Ολοκλήρωση της αποσύνθεσης Μετά τη δημιουργία του εργαλείου DrawGrid, το υπόλοιπο του προγράμματος σχεδίασης του σπιτιού αποτελεί ένα ξεκάθαρο παράδειγμα βηματικής εκλέπτυνσης. Το πλήρες πρόγραμμα, house.c, παρουσιάζεται στην Εικόνα 7-7.

2 Εκμάθηση με παραδείγματα 53. Σχόλια 55, Συμπεριλήψεις βιβλιοθηκών 56, Το κυρίως πρόγραμμα 57 2.2 Ένα πρόγραμμα άθροισης δύο αριθμών...

2 Εκμάθηση με παραδείγματα 53. Σχόλια 55, Συμπεριλήψεις βιβλιοθηκών 56, Το κυρίως πρόγραμμα 57 2.2 Ένα πρόγραμμα άθροισης δύο αριθμών... Περιεχόμενα 1 Εισαγωγή 31 1.1 Μια σύντομη ιστορική αναδρομή των υπολογιστών... 32 1.2 Τι είναι η επιστήμη των υπολογιστών;... 36 1.3 Μια σύντομη περιήγηση στο υλικό των υπολογιστών... 38 Κεντρική μονάδα

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ Επανάληψη για τις Τελικές εξετάσεις (Διάλεξη 24) Εισαγωγή Το μάθημα EPL032 έχει ως βασικό στόχο την επίλυση προβλημάτων πληροφορικής με την χρήση της γλώσσας προγραμματισμού C. Επομένως πρέπει: Nα κατανοήσετε

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

Περιεχόμενα. Πρόλογος... 21

Περιεχόμενα. Πρόλογος... 21 Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31

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

Διδακτική της Πληροφορικής ΙΙ

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

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

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

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

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

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

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

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

Υπολογιστικής Σκέψης

Υπολογιστικής Σκέψης Απόκτηση και καλλιέργεια Υπολογιστικής Σκέψης Διακριτά Μαθηματικά Εισαγωγή στους Αλγόριθμους Αλγοριθμικά Θέματα Ασύρματων Δικτύων Υπολογιστική Επιστήμη και Πολιτισμός Τι είναι η υπολογιστική σκέψη; Οι

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

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

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

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

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr 1 Μονοδιάστατοι Πίνακες (tables) Μια συλλογή μεταβλητών ίδιου τύπου οι οποίες είναι αποθηκευμένες

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

Περιεχόμενα. Πρόλογος... 17

Περιεχόμενα. Πρόλογος... 17 Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για

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

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

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

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

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

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

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δρ. Κόννης Γιώργος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος και του Προγράμματος/Αλγορίθμου

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

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

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

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

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

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

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

Σχέδια μαθημάτων για την δημιουργία συναρτήσεων υπολογισμού του ΜΚΔ και του ΕΚΠ στην MSWLogo

Σχέδια μαθημάτων για την δημιουργία συναρτήσεων υπολογισμού του ΜΚΔ και του ΕΚΠ στην MSWLogo Σχέδια μαθημάτων για την δημιουργία συναρτήσεων υπολογισμού του Μέγιστου Κοινού Διαιρέτη (ΜΚΔ) και του Ελάχιστου Κοινού Πολλαπλασίου (ΕΚΠ) δύο αριθμών, με την γλώσσα προγραμματισμού Logo Κογχυλάκης Σ.

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

Επανάληψη για τις Τελικές εξετάσεις

Επανάληψη για τις Τελικές εξετάσεις Επανάληψη για τις Τελικές εξετάσεις ( ιάλεξη 21) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Εισαγωγή Το µάθηµα EPL032 έχει ως βασικό στόχο την επίλυση προβληµάτων πληροφορικής µε την χρήση της γλώσσας προγραµµατισµού

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

xvi Προσέγγιση δομεσ δεδομενων και αλγοριθμοι

xvi Προσέγγιση δομεσ δεδομενων και αλγοριθμοι Πρόλογος Το εφαλτήριο για τη συγγραφή αυτού του βιβλίου ήταν η πολύχρονη εμπειρία μου στη διδασκαλία του μαθήματος «Αλγόριθμοι και Δομές Δεδομένων» (κωδ. ECE 250) το οποίο εντάσσεται στο πρόγραμμα σπουδών

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

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

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

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0 ΤΙ ΕΙΝΑΙ ΤΟ ADVANCED Οι Advanced θεματικές ενότητες είναι κατάλληλες για άτομα που επιθυμούν να συνεχίσουν σπουδές στο χώρο

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 2:Αλφαριθμητικές Σειρές Χαρακτήρων (Strings)- Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγικές Έννοιες σε Strings(Αρχικοποίηση, Ανάγνωση & Εκτύπωση) Πίνακες από Strings

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες Στόχοι και αντικείμενο ενότητας Ο τύπος του Πίνακα (βλ. ενότητα #2α) Ορισμός και αρχικοποίηση Αποθήκευση πινάκων στη μνήμη Πολυδιάστατοι πίνακες #6. Πίνακες και Δείκτες Ο τύπος του Δείκτη Η έννοια του

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

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

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

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

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

Γ Τάξη Γυμνασίου Μ Α Θ Η Μ Α Τ Ι Κ Α. Ι. Διδακτέα ύλη

Γ Τάξη Γυμνασίου Μ Α Θ Η Μ Α Τ Ι Κ Α. Ι. Διδακτέα ύλη Γ Τάξη Γυμνασίου Μ Α Θ Η Μ Α Τ Ι Κ Α Ι. Διδακτέα ύλη Από το βιβλίο «Μαθηματικά Γ Γυμνασίου» των Δημητρίου Αργυράκη, Παναγιώτη Βουργάνα, Κωνσταντίνου Μεντή, Σταματούλας Τσικοπούλου, Μιχαήλ Χρυσοβέργη, έκδοση

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Αναφορά

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

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

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

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

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

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

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

Δομές Δεδομένων. Λουκάς Γεωργιάδης. http://www.cs.uoi.gr/~loukas/courses/data_structures/ email: loukas@cs.uoi.gr

Δομές Δεδομένων. Λουκάς Γεωργιάδης. http://www.cs.uoi.gr/~loukas/courses/data_structures/ email: loukas@cs.uoi.gr Δομές Δεδομένων http://www.cs.uoi.gr/~loukas/courses/data_structures/ Λουκάς Γεωργιάδης email: loukas@cs.uoi.gr Αλγόριθμος: Μέθοδος για την επίλυση ενός προβλήματος Δεδομένα: Σύνολο από πληροφορίες που

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

Εισαγωγή στην Αριθμητική Ανάλυση

Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στη MATLAB ΔΙΔΑΣΚΩΝ: ΓΕΩΡΓΙΟΣ ΑΚΡΙΒΗΣ ΒΟΗΘΟΙ: ΔΗΜΗΤΡΙΑΔΗΣ ΣΩΚΡΑΤΗΣ, ΣΚΟΡΔΑ ΕΛΕΝΗ E-MAIL: SDIMITRIADIS@CS.UOI.GR, ESKORDA@CS.UOI.GR Τι είναι Matlab Είναι ένα περιβάλλον

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

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

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

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

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

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel... 9

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel... 9 Περιεχόμενα Κεφάλαιο 1 Γνωριμία με το Excel... 9 Τα στοιχεία του παραθύρου του Excel... 10 Κελιά και διευθύνσεις... 13 Σε ποιο κελί θα τοποθετηθούν τα δεδομένα;... 14 Καταχώριση δεδομένων... 15 Τι καταλαβαίνει

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

Μεθόδων Επίλυσης Προβλημάτων

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 9 Συναρτήσεις Μέρος II Θέματα ιάλεξης Μη- ομημένος

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12) Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II (Διάλεξη 12) 12-1 Ανασκόπηση Δομής Προγράμματος με Συναρτήσεις 1 void PrintMessage (); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε

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

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

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

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

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420) Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420) Διάλεξη 8: Σχεδίαση Συστήματος Σχεδίαση Συστήματος 2 Διεργασία μετατροπής του προβλήματος σε λύση. Από το Τί στο Πώς. Σχέδιο: Λεπτομερής περιγραφή της λύσης. Λύση:

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

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

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

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

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

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

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

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

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

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

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel...9

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel...9 Περιεχόμενα Κεφάλαιο 1 Γνωριμία με το Excel...9 Τα στοιχεία του παραθύρου του Excel... 10 Κελιά και διευθύνσεις... 13 Σε ποιο κελί θα τοποθετηθούν τα δεδομένα;... 14 Καταχώριση δεδομένων... 15 Τι καταλαβαίνει

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

Εισαγωγή στη Σχεδίαση Λογισμικού

Εισαγωγή στη Σχεδίαση Λογισμικού Εισαγωγή στη Σχεδίαση Λογισμικού περιεχόμενα παρουσίασης Τι είναι η σχεδίαση λογισμικού Έννοιες σχεδίασης Δραστηριότητες σχεδίασης Σχεδίαση και υποδείγματα ανάπτυξης λογισμικού σχεδίαση Η σχεδίαση του

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

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

ΑΣΥΜΠΤΩΤΙΚΗ ΑΝΑΛΥΣΗ & ΠΡΟΣΘΕΣΗ ΑΣΥΜΠΤΩΤΙΚΗ ΑΝΑΛΥΣΗ & ΠΡΟΣΘΕΣΗ Θέματα μελέτης Ορθότητα και απόδοση αλγορίθμων Παρουσίαση και ανάλυση αλγορίθμου για πρόσθεση Al Khwarizmi Αλγόριθμοι Το δεκαδικό σύστημα εφευρέθηκε στην Ινδία περίπου το

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

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ 6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ 6.1 Η Έννοια του Πίνακα Συχνά είναι προτιμότερο να αντιμετωπίζουμε ένα σύνολο μεταβλητών σαν ενότητα για να απλοποιούμε το χειρισμό τους. Έτσι οργανώνουμε σύνθετα δεδομένα σε

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

Προγραμματισμός Η/Y. Διάλεξη 6 η : Συναρτήσεις

Προγραμματισμός Η/Y. Διάλεξη 6 η : Συναρτήσεις Προγραμματισμός Η/Y Διάλεξη 6 η : Συναρτήσεις Η C είναι συναρτησιακή γλώσσα προγραμματισμού Ως τώρα όλα τα προγράμματα που είδαμε ήταν γραμμένα μέσα στην main Τι θα κάνουμε όμως αν Το πρόγραμμα είναι τεράστιο

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

5.1. Προσδοκώμενα αποτελέσματα

5.1. Προσδοκώμενα αποτελέσματα 5.1. Προσδοκώμενα αποτελέσματα Όταν θα έχεις ολοκληρώσει τη μελέτη αυτού του κεφαλαίου θα έχεις κατανοήσει τις τεχνικές ανάλυσης των αλγορίθμων, θα μπορείς να μετράς την επίδοση των αλγορίθμων με βάση

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 Εισαγωγή Η τακτοποίηση των δεδομένων με ιδιαίτερη σειρά είναι πολύ σημαντική λειτουργία που ονομάζεται

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 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 στην

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

Πληροφορική 2. Γλώσσες Προγραμματισμού

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

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

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

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

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro Για να μπορέσουμε να εισάγουμε δεδομένα από το πληκτρολόγιο αλλά και για να εξάγουμε εμφανίσουμε αποτελέσματα στην οθόνη του υπολογιστή χρησιμοποιούμε τις εντολές Εισόδου και Εξόδου αντίστοιχα. Σύνταξη

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 3: Πίνακες, βρόχοι, συναρτήσεις 1 Ιουνίου 2017 Το σημερινό εργαστήριο

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

Οδηγίες Συγγραφής και Αξιολόγησης Εργασιών του μαθήματος

Οδηγίες Συγγραφής και Αξιολόγησης Εργασιών του μαθήματος ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Αντικειμενοστρεφής Προγραμματισμός Η/Υ Οδηγίες Συγγραφής και Αξιολόγησης Εργασιών του μαθήματος Το κείμενο αυτό γράφεται με σκοπό να βοηθήσει τους φοιτητές του μαθήματος

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

Ενδεικτική περιγραφή μαθήματος

Ενδεικτική περιγραφή μαθήματος ΜΑΘΗΜΑ: ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Προγραμματισμός Η/Υ Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) Ενδεικτική περιγραφή μαθήματος 1. Εισαγωγή: Εισαγωγή στον προγραμματισμό, γλώσσες προγραμματισμού, μεταγλωτιστές.

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

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

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

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

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΕΞΕΤΑΣΗΣ Το αναλυτικό πρόγραμμα στο οποίο βασίζεται η εξέταση είναι το αναλυτικό πρόγραμμα του Μαθήματος Κατεύθυνσης Πληροφορική Επιστήμη Η.Υ της Γ Ενιαίου Λυκείου Γενικός Σκοπός Το μάθημα κατεύθυνσης της στη Γ'

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

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

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

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

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

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Κεφάλαιο 9.1-9.2 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Ένα string είναι μία ακολουθία αλφαριθμητικών χαρακτήρων, σημείων στίξης κτλ. Π.χ. Hello How are you? 121212 *Apple#123*%

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

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ii ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ 1. Εισαγωγή - Βασικές έννοιες....1 1.1 Εσωτερική παράσταση δεδομένων....2 1.1.1 Παράσταση θέσης....3 1.1.2 Μετατροπές μεταξύ συστημάτων διαφορετικών βάσεων....5 1.1.3 Οι αριθμητικές

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

Πρόβλημα 29 / σελίδα 28

Πρόβλημα 29 / σελίδα 28 Πρόβλημα 29 / σελίδα 28 Πρόβλημα 30 / σελίδα 28 Αντιμετάθεση / σελίδα 10 Να γράψετε αλγόριθμο, οποίος θα διαβάζει τα περιεχόμενα δύο μεταβλητών Α και Β, στη συνέχεια να αντιμεταθέτει τα περιεχόμενά τους

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

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης Στο εργαστήριο αυτό, θα εξοικειωθούμε με τους τύπους δεδομένων που μας παρέχει η γλώσσα C, θα χρησιμοποιήσουμε τις δομές επανάληψης (for, while, do...while),

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

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 12-1 Ανασκόπηση οµής Προγράµµατος µε Συναρτήσεις #include 1 void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης (

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

FORTRAN και Αντικειμενοστραφής Προγραμματισμός FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών

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

1. ΠΕΡΙΓΡΑΦΗ ΚΑΙ ΑΝΑΛΥΣΗ ΦΥΛΛΩΝ ΕΡΓΑΣΙΑΣ (Ή ΚΑΙ ΑΛΛΟΥ ΔΙΔΑΚΤΙΚΟΥ ΥΛΙΚΟΥ) ΑΞΙΟΛΟΓΗΣΗ ΤΩΝ ΜΑΘΗΤΩΝ

1. ΠΕΡΙΓΡΑΦΗ ΚΑΙ ΑΝΑΛΥΣΗ ΦΥΛΛΩΝ ΕΡΓΑΣΙΑΣ (Ή ΚΑΙ ΑΛΛΟΥ ΔΙΔΑΚΤΙΚΟΥ ΥΛΙΚΟΥ) ΑΞΙΟΛΟΓΗΣΗ ΤΩΝ ΜΑΘΗΤΩΝ 1. ΠΕΡΙΓΡΑΦΗ ΚΑΙ ΑΝΑΛΥΣΗ ΦΥΛΛΩΝ ΕΡΓΑΣΙΑΣ (Ή ΚΑΙ ΑΛΛΟΥ ΔΙΔΑΚΤΙΚΟΥ ΥΛΙΚΟΥ) ΑΞΙΟΛΟΓΗΣΗ ΤΩΝ ΜΑΘΗΤΩΝ ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 1 «Μαθαίνω στη γάτα να σχεδιάζει» Δραστηριότητα 1 Παρατηρήστε τις εντολές στους παρακάτω πίνακες,

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

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access...9. Κεφάλαιο 2 Χειρισμός πινάκων... 25

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access...9. Κεφάλαιο 2 Χειρισμός πινάκων... 25 Περιεχόμενα Κεφάλαιο 1 Εισαγωγή στην Access...9 Γνωριμία με την Access... 12 Δημιουργία βάσης δεδομένων... 18 Άνοιγμα και κλείσιμο βάσης δεδομένων... 21 Ερωτήσεις ανακεφαλαίωσης... 22 Πρακτική εξάσκηση...

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

Διαδικαστικός Προγραμματισμός

Διαδικαστικός Προγραμματισμός Διαδικαστικός Προγραμματισμός Ενότητα 3: Εντολές ελέγχου επανάληψη Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό,

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

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης Εργαστήριο 6 Εντολές Επανάληψης Η δομή Επιλογής στη PASCAL H δομή Επανάληψης στη PASCAL. Ρεύμα Εισόδου / Εξόδου.. Ρεύμα Εισόδου / Εξόδου. To πρόγραμμα γραφικών gnuplot. Γραφικά στη PASCAL. Σκοπός 6.1 ΕΠΙΔΙΩΞΗ

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

Δομές Δεδομένων & Αλγόριθμοι

Δομές Δεδομένων & Αλγόριθμοι Θέματα Απόδοσης Αλγορίθμων 1 Η Ανάγκη για Δομές Δεδομένων Οι δομές δεδομένων οργανώνουν τα δεδομένα πιο αποδοτικά προγράμματα Πιο ισχυροί υπολογιστές πιο σύνθετες εφαρμογές Οι πιο σύνθετες εφαρμογές απαιτούν

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

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα.

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα. i Π Ρ Ο Λ Ο Γ Ο Σ Το βιβλίο αυτό αποτελεί μια εισαγωγή στα βασικά προβλήματα των αριθμητικών μεθόδων της υπολογιστικής γραμμικής άλγεβρας (computational linear algebra) και της αριθμητικής ανάλυσης (numerical

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ 1 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 3ο: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΜΕΡΟΣ 2 ο : ΣΤΟΙΒΑ & ΟΥΡΑ ΙΣΤΟΣΕΛΙΔΑ ΜΑΘΗΜΑΤΟΣ: http://eclass.sch.gr/courses/el594100/ ΣΤΟΙΒΑ 2 Μια στοίβα

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

Τίτλος Πακέτου Certified Computer Expert-ACTA

Τίτλος Πακέτου Certified Computer Expert-ACTA Κωδικός Πακέτου ACTA - CCE - 002 Τίτλος Πακέτου Certified Computer Expert-ACTA Εκπαιδευτικές Ενότητες Επεξεργασία Κειμένου - Word Δημιουργία Εγγράφου Προχωρημένες τεχνικές επεξεργασίας κειμένου & αρχείων

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

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Ενότητες βιβλίου: 6.4, 6.7 Ώρες διδασκαλίας: 1 Τεχνικές σχεδίασης προγραμμάτων Στο βιβλίο γίνεται αναφορά σε μία τεχνική για την ανάπτυξη

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

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ Πρόλογος... 11 Μέρος Α: Στοιχεία Αλγοριθμικής... 15 1 Επίλυση προβλημάτων με Η/Υ... 19 1.1 Εισαγωγή... 19 1.2 Αλγόριθμοι-αλγοριθμικά προβλήματα... 20 1.3 Το μαθηματικό μοντέλο... 26

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

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

ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ Α : ΘΕΜΑΤΑ ΒΑΣΗΣ 1. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ...11 2. ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ...30

ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ Α : ΘΕΜΑΤΑ ΒΑΣΗΣ 1. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ...11 2. ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ...30 ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ Α : ΘΕΜΑΤΑ ΒΑΣΗΣ 1. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ...11 1.1 Τι είναι Πληροφορική;...11 1.1.1 Τι είναι η Πληροφορική;...12 1.1.2 Τι είναι ο Υπολογιστής;...14 1.1.3 Τι είναι το Υλικό και το

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

Γλώσσες Προγραμματισμού

Γλώσσες Προγραμματισμού Γλώσσες Προγραμματισμού Πολυδιάστατοι πίνακες Στατικές μεταβλητές Στατική ανάθεση τιμών σε πίνακες 19/4/2007 Πολυδιάστατοι πίνακες Παράδειγμα: Sudoku Πώς αναπαριστάται η διπλανή εικόνα από έναν πίνακα;

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

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή Φτάσαμε σιγά σιγά στο τέλος του βιβλίου. Αντί για κάποιον επίλογο σκέφτηκα να συλλέξω κάποια πράγματα που θα ήθελα να πω σε κάποιον ο οποίος αρχίζει

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

Αναδρομή Ανάλυση Αλγορίθμων

Αναδρομή Ανάλυση Αλγορίθμων Αναδρομή Ανάλυση Αλγορίθμων Παράδειγμα: Υπολογισμός του παραγοντικού Ορισμός του n! n! = n x (n - 1) x x 2 x 1 Ο παραπάνω ορισμός μπορεί να γραφεί ως n! = 1 αν n = 0 n x (n -1)! αλλιώς Παράδειγμα (συνέχ).

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

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος 4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος Μεταβλητές Συστήματος Η Processing χρησιμοποιεί κάποιες μεταβλητές συστήματος, όπως τις ονομάζουμε, για να μπορούμε να παίρνουμε πληροφορίες από το

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

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΚΕΦΑΛΑΙΟ 10 Όπως είδαμε και σε προηγούμενο κεφάλαιο μια από τις βασικότερες τεχνικές στον Δομημένο Προγραμματισμό είναι ο Τμηματικός Προγραμματισμός. Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης

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

Cabri II Plus. Λογισμικό δυναμικής γεωμετρίας

Cabri II Plus. Λογισμικό δυναμικής γεωμετρίας Cabri II Plus Λογισμικό δυναμικής γεωμετρίας Cabri II Plus Ο Jean-Marie LABORDE ξεκίνησε το 1985 το πρόγραμμα με σκοπό να διευκολύνει τη διδασκαλία και την εκμάθηση της Γεωμετρίας Ο σχεδιασμός και η κατασκευή

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

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579 Ευρετήριο Η γλώσσα C σε βάθος # #define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579 A abs(), 625 AND, 64 ASCII πίνακας

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Εισαγωγή στον Προγραµµατισµό Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Hello World /* Αρχείο hello.c * Εµφανίζει στην οθόνη το * µήνυµα hello world */ #include

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

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στο PowerPoint 9. Κεφάλαιο 2 Εργασία με κείμενο 41

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στο PowerPoint 9. Κεφάλαιο 2 Εργασία με κείμενο 41 Περιεχόμενα Κεφάλαιο 1 Εισαγωγή στο PowerPoint 9 Βασικές έννοιες... 10 Το παράθυρο του PowerPoint... 13 Δημιουργία νέας παρουσίασης... 18 Βασικές εργασίες με διαφάνειες... 24 Προβολές παρουσίασης... 28

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

Μαλούτα Θεανώ Σελίδα 1

Μαλούτα Θεανώ Σελίδα 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Α. ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΦΥΛΛΑΔΙΟ 6 ο ( Ενότητες 2.3 ) 1.Τι είναι πρόγραμμα; 2. Ποια είναι τα πλεονεκτήματα των γλωσσών υψηλού επιπέδου σε σχέση με τις γλώσσες

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

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

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

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

Μοντελοποίηση Πεδίου

Μοντελοποίηση Πεδίου Μοντελοποίηση Πεδίου περιεχόμενα παρουσίασης Εννοιολογικές κλάσεις Συσχετίσεις εννοιολογικών κλάσεων Τύποι ιδιοτήτων Γενίκευση Συχνά σφάλματα μοντελοποίησης πεδίου Εννοιολογικές κλάσεις και κλάσεις λογισμικού

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

Εφαρμογές Προσομοίωσης

Εφαρμογές Προσομοίωσης Εφαρμογές Προσομοίωσης H προσομοίωση (simulation) ως τεχνική μίμησης της συμπεριφοράς ενός συστήματος από ένα άλλο σύστημα, καταλαμβάνει περίοπτη θέση στα πλαίσια των εκπαιδευτικών εφαρμογών των ΤΠΕ. Μπορούμε

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

Η προσεγγιση της. Αρχιτεκτονικης Συνθεσης. ΜΑΡΓΑΡΙΤΑ ΓΡΑΦΑΚΟΥ Καθηγητρια της Σχολης Αρχιτεκτονων Ε.Μ.Π.

Η προσεγγιση της. Αρχιτεκτονικης Συνθεσης. ΜΑΡΓΑΡΙΤΑ ΓΡΑΦΑΚΟΥ Καθηγητρια της Σχολης Αρχιτεκτονων Ε.Μ.Π. 1ο χειμ. Εξαμηνο, 2013-2014 Η προσεγγιση της Αρχιτεκτονικης Συνθεσης Εισαγωγη στην Αρχιτεκτονικη Συνθεση Θεμα 1ο ΜΑΡΓΑΡΙΤΑ ΓΡΑΦΑΚΟΥ Καθηγητρια της Σχολης Αρχιτεκτονων Ε.Μ.Π. Εικονογραφηση υπομνηση του

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Παρατηρήσεις

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