Πτυχιακή εργασία. Τίτλος: Η Εργονομική Διαδρομή του Ίππου σε Σκακιέρα NxN. Σεραφειμίδης Ιωσήφ (ΑΜ: 1803)

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

Download "Πτυχιακή εργασία. Τίτλος: Η Εργονομική Διαδρομή του Ίππου σε Σκακιέρα NxN. Σεραφειμίδης Ιωσήφ (ΑΜ: 1803)"

Transcript

1 Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Τεχνολογικών Εφαρμογών Τμήμα Εφαρμοσμένης Πληροφορικής & Πολυμέσων Πτυχιακή εργασία Τίτλος: Η Εργονομική Διαδρομή του Ίππου σε Σκακιέρα NxN. Σεραφειμίδης Ιωσήφ (ΑΜ: 1803) Επιβλέπων καθηγητής : Καραγιαννάκης Δημήτριος

2 ii

3 SUMMARY We apply and also investigate the use of the heuristic algorithm proposed by H. C. Warnsdorff in the early 19th century on the problem of finding the knights path and we examine its possible extension for a more efficient solution in the case of "ties". We describe and review the procedure for discovering knight paths on all chessboards NxN with N 5. Highlight of differences when N is even and when it is odd. Examples of the application of the rule of Warnsdorff are provided on boards of various sizes and of various solutions of the "ties" with the use of C++. Finally, various visual mapping of knight paths are presented along with a results analysis by use of Matlab. iii

4 iv

5 ΣΥΝΟΨΗ Υλοποιούμε και διερευνούμε την χρήση του ευριστικού αλγορίθμου που προτάθηκε από τον H. C. Warnsdorff στις αρχές του 19 ου αιώνα για το πρόβλημα της εύρεσης της διαδρομής του ίππου και εξετάζουμε την δυνατότητα επέκτασης αυτού για την αποδοτικότερη λύση σε περιπτώσεις «ισοπαλίας». Περιγραφή και εξέταση της διαδικασίας εύρεσης των διαδρομών του ίππου σε σκακιέρες NxN με N 5.Δίνεται μία καταγραφή των διαφορών για N άρτιο και περιττό καθώς και παραδείγματα με την εφαρμογή του κανόνα του Warnsdorff σε σκακιέρες διάφορων διαστάσεων και με διάφορες λύσεις «ισοπαλίας» με την χρήση της C++. Τέλος, δίνεται η οπτική αποτύπωση διαφόρων διαδρομών και ανάλυση αποτελεσμάτων πολλαπλών διαδρομών με χρήση Matlab. v

6 vi

7 Περιεχόµενα 1.ΕΙΣΑΓΩΓΗ Σύντομη αναφορά στην ιστορία του προβλήματος Κίνητρο εργασίας Σκοπός εργασίας Δομή της εργασίας Έννοιες Ονομασία θέσεων Παρακείμενες θέσεις Ελεύθερη θέση και βαθμός θέσης Διαδρομή του ίππου Συμμετρία της σκακιέρας Ευριστικοί αλγόριθμοι Πολυπλοκότητα αλγορίθμου Χαμιλτόνια διαδρομή και κύκλωμα Όρια στις διαστάσεις των σκακιέρων και σκακιέρες με περιττό αριθμό τετραγώνων Σκακιέρες NxN από 5x5 μέχρι 300x Μονός αριθμός τετραγώνων Περιγραφή αλγορίθμου εφαρμογής του κανόνα του Warnsdorff Ο κανόνας του Warnsdorff Προετοιμασία της σκακιέρας Υπολογισμός επόμενης κίνησης Βαθύς υπολογισμός βαθμού Τυχαία επιλογή Εξωτερική θέση Προκαθορισμένη σειρά επίλυσης ισοπαλιών Εργαλεία C MATLAB Υλοποίηση του κανόνα του Warnsdorff με την γλώσσα προγραμματισμού C Includes and declarations Συνάρτηση problemknight01_ Συνάρτηση problemknight01_ Συνάρτηση problemknight01_ Συνάρτηση problemknight02_ Συνάρτηση problemknight02_ Συνάρτηση problemknight02_ vii

8 6.8. Συνάρτηση problemknight03_ Συνάρτηση problemknight03_ Συνάρτηση problemknight03_ Συνάρτηση problemknight03_ Συνάρτηση order_sequence Συνάρτηση problemknight Συνάρτηση board_setup Συνάρτηση move_check Συνάρτηση board_respec Ανάλυση κώδικα Matlab για την οπτικοποίηση διαδρομών και στατιστικών Οπτικοποίηση διαδρομής Διάγραμμα ανολοκλήρωτων διαδρομών Εισαγωγή και μορφοποίηση στατιστικών στοιχείων σειρών επίλυσης ισοπαλιών Σχεδίαση γραφήματος αποτελεσμάτων σειρών επίλυσης ισοπαλιών Αποτελέσματα της υλοποίησης και παρατηρήσεις Αρχικά αποτελέσματα Εξασφάλιση ολοκληρωμένων διαδρομών Κυκλικές διαδρομές Συμμετρίες στις σειρές επίλυσης ισοπαλιών Εύρεση των συμμετριών Η ερμηνεία και οι χρησιμότητα των συμμετριών των σειρών πάνω στις σκακιέρες Κατάληξη της διαδρομής του ίππου ανάλογα με την επιλογή σειράς επίλυσης ισοβαθμιών Πέρα του NxN και του 6 Ν Μη τετράγωνες σκακιέρες Μεγαλύτερες διαστάσεις Δημοσίευση Ελληνικά English Βιβλιογραφία viii

9 Πίνακες Πίνακας 1 Παρακείμενες θέσεις 16 Πίνακας 2 - Συμμετρία της σκακιέρας 17 Πίνακας 3 - Υπολογισμός βαθμού θέσης 23 Πίνακας 4 - Παράδειγμα προγράμματος C++ 25 Πίνακας 5 - Βασικοί τελεστές της C++ 26 Πίνακας 6 - Βασικοί τύποι μεταβλητών στην C++ 27 Πίνακας 7 - Εντολές και τα αποτελέσματα τους στο παράθυρο εντολών του Matalb 28 Πίνακας 8 - Δημιουργία πινάκων 29 Πίνακας 9 - Βιβλιοθήκες που χρησιμοποιεί το πρόγραμμα. 30 Πίνακας 10 - Δηλώσεις συναρτήσεων 31 Πίνακας 11 - Ορίσματα της συνάρτησης 31 Πίνακας 12 - Δήλωση μεταβλητών και αρχικοποίηση τιμών 31 Πίνακας 13 - Κλήση συνάρτησης board_setup() 32 Πίνακας 14 - Επανάληψη που διατρέχει όλες τις θέσεις της σκακιέρας και αρχικοποιήσεις για κάθε επανάληψη 32 Πίνακας 15 - Εξέταση όλων των θέσεων που είναι προσκείμενες στην θέση που βρίσκετε ο ίππος και εύρεση επόμενης η τερματισμός της επανάληψης 32 Πίνακας 16 - Έξοδος από την επανάληψη 33 Πίνακας 17 - Επαναϋπολογισμός θέσεων σκακιέρας 33 Πίνακας 18 - Εκτύπωση διαδρομής στο command window 33 Πίνακας 19 - Εκτύπωση στατιστικών αποτελεσμάτων 34 Πίνακας 20 - Αποθήκευση διαδρομής σε αρχείο κειμένου 34 Πίνακας 21 - Κλήση και αρχικοποίηση αρχείων συστήματος 34 Πίνακας 22 - Χρωματισμός στιγμιότυπου 35 Πίνακας 23 - Επισήμανση αρχικής και τελικής θέσης 36 Πίνακας 24 - Δημιουργία τυχαίας σειράς 36 Πίνακας 25 - Επανάληψη εύρεσης διαδρομής με καινούργια τυχαία σειρά 37 Πίνακας 26 - Εκτύπωση δεδομένων 37 Πίνακας 27 - Επανάληψη για πολλαπλές σκακιέρες 38 Πίνακας 28 - Διατρέχουμε μόνο το ένα τέταρτο της σκακιέρας 38 Πίνακας 29 - Εκτύπωση δεδομένων 39 Πίνακας 30 - Προετοιμασία μεταβλητών για την αποθήκευση αποτελεσμάτων 40 Πίνακας 31 - Αποθήκευση αποτελεσμάτων 40 Πίνακας 32 - Επαναϋπολογισμός διαδρομής 41 Πίνακας 33 - Προετοιμασία μεταβλητών και δημιουργία διαδρομής αρχείου 41 Πίνακας 34 - Αποθήκευση αποτελεσμάτων 41 Πίνακας 35 - Αρχικοποίηση μεταβλητών και ξεκίνημα ρολογιού 42 Πίνακας 36 - Διακοπή ρολογιού και αποθήκευση στατιστικών στοιχείων 42 Πίνακας 37 - Υπολογισμοί διαδρομών με τυχαία σειρά επίλυσης ισοπαλιών και αποθήκευση στατιστικών στοιχείων. 43 Πίνακας 38 - Ορίσματα συνάρτησης order_sequence 43 Πίνακας 39 - Δηλώσεις μεταβλητών 43 Πίνακας 40 - Εύρεση ενός αριθμού της σειράς επίλυσης ισοπαλιών 44 Πίνακας 41 - Κλήση της problemknight04() από την order_sequence() 44 Πίνακας 42 - Ορίσματα συνάρτησης problemknight04 44 Πίνακας 43 - Αποθήκευση αποτελεσμάτων της συνάρτησης problemknight04 45 Πίνακας 44 - Ορίσματα και μεταβλητές συνάρτησης 45 Πίνακας 45 - Υπολογισµός και γράψιµο βαθµών στον πίνακα 46 Πίνακας 46 - Ορίσματα και αρχικοποιήσεις μεταβλητών 46 Πίνακας 47 - Σύγκριση για επιλογή επόμενης κίνησης 46 ix

10 Πίνακας 48 - Επιλογή επόμενης θέσης με βάση την απόσταση από τις γωνίες της σκακιέρας 47 Πίνακας 49 - Ορίσματα της board_respec 48 Πίνακας 50 - Επαναϋπολογισμός βαθμών σκακιέρας 48 Πίνακας 51 - εισαγωγή διαδρομής από αρχείο 49 Πίνακας 52 - δημιουργία της σκακιέρας και αποτύπωση στην οθόνη 49 Πίνακας 53 - σχεδίαση γραμμών και σημείων της διαδρομής 50 Πίνακας 54 σχεδίαση διαγράμματος ανολοκλήρωτων διαδρομών 50 Πίνακας 55 - Εισαγωγή και μορφοποίηση στατιστικών στοιχείων σειρών επίλυσης ισοπαλιών. 51 Πίνακας 56 - Σχεδίαση γραφήματος αποτελεσμάτων σειρών επίλυσης ισοπαλιών. 52 Πίνακας 57 - Κυκλικές διαδρομές για σκακιέρες με 6 Ν 300 ζυγό. 58 Πίνακας 58 Σειρές επίλυσης ισοπαλιών που δίνουν ολοκληρωμένες διαδρομές από όλα τα τετράγωνα στην σκακιέρα 8x8 59 Πίνακας 59 - Αριθμός των σειρών επίλυσης ισοπαλιών από όλες (8!) που αποτυγχάνουν από κάθε τετράγωνο της 8x8 σκακιέρας. 61 x

11 Εικόνες Εικόνα 1 - Κίνηση του ίππου 13 Εικόνα 2 - Κλειστή διαδρομή ίππου σε σκακιέρα. Επίλύση με χρήση νευρωνικού δίκτυου 14 Εικόνα 3 - Κινήσεις ίππων από διάφορες θέσεις στην σκακιέρα 16 Εικόνα 4 - Παράδειγμα αποτύπωσης μιας κλειστής διαδρομής του ίππου 17 Εικόνα 5 - Μέγιστη επιτυχία του αλγορίθμου σε σκακιέρα με μονό αριθμό τετραγώνων 21 Εικόνα 6 - Στιγμιότυπο υπολογισμού διαδρομής του ίππου. 22 Εικόνα 7 - Οι βαθμοί όλων των θέσεων σε μια σκακιέρα 8*8 πριν αρχίσει η διαδικασία για την εύρεση μιας διαδρομής του ίππου 23 Εικόνα 8 - Προκαθορισμένη σειρά επίλυσης ισοπαλιών. 24 Εικόνα 9 - Παράδειγμα τυχαίας αλλαγής σειράς 37 Εικόνα 10 - Συμμετρίες σειράς λύσεις ισοπαλιών 39 Εικόνα 11 - Σκακιέρα 8x8 Εικόνα 12 - Σκακιέρα 10x10 53 Εικόνα 13 - Σκακιέρα 20x20 53 Εικόνα 14 - Σκακιέρα 50*50 54 Εικόνα 15 - Σκακιέρες 8x8, σειρά (αριστερά) και σειρά (δεξιά) _ 54 Εικόνα 16 - Σκακιέρα 10x10, σειρά Εικόνα 17 - Σκακιέρα 8x8, σειρά , πλήρης επιτυχία 55 Εικόνα 18 - Τυπικός χρόνος περαίωσης υπολογισμών για 6 Ν 100 ζυγό. 55 Εικόνα 19 Χρόνος ολοκλήρωσης υπολογισμού διαδρομών με διαστάσεις σκακιέρας NxN για 56 Εικόνα 20- Πλήθος ανολοκλήρωτων διαδρομών μετά από τους επαναϋπολογισμούς για την σειρά Εικόνα 21 Άξονες συμμετρίας κινήσεων ίππου 59 Εικόνα 22 - Σειρά επίλυσης και οι συμμετρικές της 60 Εικόνα 23 - Τα αποτελέσματα της σειράς και των συμμετρικών της στην σκακιέρα 8x8 60 Εικόνα 24 - Αριθμός ολοκληρωμένων διαδρομών που καταλήγουν σε κάθε τετράγωνο της σκακιέρας 8x8 με σειρά επίλυσης ισοπαλιών (αριστερά) και (δεξιά). 61 Εικόνα 25 - Αριθμός ολοκληρωμένων διαδρομών που καταλήγουν σε κάθε τετράγωνο της σκακιέρας 20x20 με σειρά επίλυσης ισοπαλιών Εικόνα 26 - Αριθμός ολοκληρωμένων διαδρομών που καταλήγουν σε κάθε τετράγωνο της σκακιέρας 20x20 με σειρά επίλυσης ισοπαλιών Εικόνα 27 Τερματισμοί όλων των ολοκληρωμένων διαδρομών στις σκακιέρες NxN με 6 n Εικόνα 28 - Αφετηρίες των κυκλικών διαδρομών στις σκακιέρες NxN με 6 n xi

12 xii

13 1.ΕΙΣΑΓΩΓΗ Το κλασικό σκάκι ως γνωστόν παίζεται πάνω σε ένα τετράγωνο διάγραμμα, την σκακιέρα, χωριζόμενο σε 8 γραμμές και 8 στήλες. Για τις ανάγκες της παρούσας εργασίας θα δανειστούμε τον έναν ίππο καθώς και την σκακιέρα αλλά όχι μόνο στις 8x8 8 διαστάσεις της αλλά θα εργαστούμε και στην γενικότερη περίπτωση της NxN σκακιέρας με N 5. Ο ίππος αν και δεν είναι το πιο δυνατό κομμάτι στην σκακιέρα είναι πιθανόν, το πιο ενδιαφέρον λόγο του τρόπου με τον οποίο κινείται. Για να κινηθεί σχηματίζει μια γωνία, σαν ένα κεφαλαίο Γ, και αυτό μπορεί να το κάνει προς κάθε κατεύθυνση κινούμενο είτε δυο θέσεις και άλλη μία σε κάθετη κατεύθυνση προς την πρώτη κίνηση, είτε μία θέση και άλλες δυο πάλη σε κάθετη κατεύθυνση προς την πρώτη κίνηση. Εικόνα 1 - Κίνηση του ίππου Το πρόβλημα του ίππου είναι το ερώτημα εάν υπάρχει μία διαδρομή που μπορεί να ακολουθήσει ο ίππος περνώντας από όλα τα τετράγωνα της σκακιέρας χωρίς να πατήσει δεύτερη φορά σε ένα από αυτά. 1.1.Σύντοµη αναφορά στην ιστορία του προβλήµατος Τα παλιότερα παραδείγματα διαδρομών του ίππου βρίσκονται σε ένα αραβικό χειρόγραφο του 840μ.χ. (History of Chess (1913) H.J.R.Murray). Ακολουθούν κάποια Ινδικά χειρόγραφα που χρονολογούνται γύρο στο 900μ.χ. τα οποία περιλαμβάνουν, εκτός της διαδρομής του ίππου και διαδρομές άλλον ειδικευμένων κομματιών όπως αυτό του άρματος και του ελέφαντα. Από τότε μέχρι τώρα εμφανίζονται αρκετές αναφορές σε αυτό το πρόβλημα με τις σύγχρονες μελέτες να αρχίζουν με την επανανακάλυψη του στις αρχές του 18 ου αιώνα ( G. P. Jelliss). Η πρώτη μαθηματική ανάλυση του προβλήματος έγινε το 1759 από τον παραγωγικότερο μαθηματικό της εποχής του, τον Leonhard Euler στην Ακαδημία Επιστημών στο Βερολίνο, αλλά δεν δημοσιεύτηκε μέχρι το1766. Η δημοσίευση αυτή είναι το σημείο εκκίνησης πολλών μετέπειτα αναλύσεων του θέματος όπως αυτή του Vandermonde ο οποίος στο έργο του Remarques sur des problèmes de situation το 1771 μελέτησε και αυτός την βόλτα του ίππου. Στην διάρκεια της ιστορίας του προβλήματος, πολλοί προσπάθησαν να επινοήσουν κάποιο απλό κανόνα της κίνησης του ιππότη που θα οδηγήσει στην ολοκλήρωση της περιοδείας του στην σκακιέρα. Οι περισσότεροι, ωστόσο κανόνες αυτοί είναι μόνο οδηγοί μιας λύσης και αν εφαρμοστούν αυστηρά δεν οδηγούν σε εντελώς σωστές διαδρομές, ενώ εκείνοι που το κάνουν τείνουν να είναι δύσκολοι να εφαρμοστούν και λειτουργούν μόνο σε πολύ περιορισμένες περιπτώσεις. Η ποιο γνωστή ίσως μέθοδος είναι αυτή του Warnsdorff την οποία πραγματεύεται η παρούσα εργασία. 13

14 Εικόνα 2 - Κλειστή διαδρομή ίππου σε σκακιέρα. Επίλύση με χρήση νευρωνικού δίκτυου Οι ποιο σύγχρονες μελέτες αναδεικνύουν το πόσο ενδιαφέρον είναι το πρόβλημα του ίππου αφού έχει υπολογιστεί ότι στην 8x8 σκακιέρα υπάρχουν 13,267,364,410,532 (Martin Loebbing; Ingo Wegener (1996). "The Number of Knight's Tours Equals 13,267,364,410,532 Counting with Binary Decision Diagrams") διατεταγμένες κλειστές διαδρομές (υπό την έννοια ότι αν έχουν αντίθετους προσανατολισμούς ή αν είναι στροφές ή ανακλάσεις μετρώνται ξεχωριστά) ενώ οι ανοιχτές είναι της τάξης 4*10^51 ή για την ακρίβεια ξεχωριστές διαδρομές οι οποίες βεβαίως δεν έχουν υπολογιστεί επιδή αυτό το εγχείρημα προϋποθέτει ανυπολόγιστη υπολογιστική ισχύ και χρόνο περισσότερο από αυτόν που έχουν στην διάθεση τους τα άστρα μέχρι να σβήσει και το τελευταίο από αυτά. 1.2.Κίνητρο εργασίας Η γεωμετρία της κίνησης του ίππου είναι πολύ ενδιαφέρουσα και φαίνεται φυσικό να θέλουμε να λύσουμε το πρόβλημα της εύρεσης της διαδρομής του ίππου. Το πρόβλημα αυτό έχει αναβιώσει στις μέρες μας με την αξιοποίηση ηλεκτρονικών υπολογιστών και την χρήση άπληστων ή ευριστικών και αναδρομικών ή μη αλγορίθμων για την μελέτη και επίλυσή του. Χρειάζεται εται καλή γνώση μιας γλώσσας προγραμματισμού και ικανότητας επίλυσης προβλημάτων με αλγορίθμους για την υλοποίηση ενός τέτοιου αλγορίθμου, άρα προσφέρεται για την αξιολόγηση γνώσεων σε αυτούς τους τομείς Σκοπός εργασίας Στην παρούσα εργασία θα χρησιμοποιήσουμε τον ευριστικό αλγόριθμο του Warnsdorff, χωρίς αναδρομές μέσα στις διαδρομές, για να μπορέσουμε να συγκεντρώσουμε τις διαδρομές που βρίσκει απευθείας και να προσπαθήσουμε να βγάλουμε κάποια συμπεράσματα από αυτές εφαρμόζοντας διάφορες μεθόδους επίλυσης προβλημάτων που αναδύουν. Επίσης θα επισημάνουμε κάποια ενδιαφέροντα χαρακτηριστικά των αποτελεσμάτων τα οποία με περεταίρω διεργασία μπορεί να οδηγήσουν σε μια ποιο ολοκληρωμένη κατανόηση του προβλήματος του ίππου. 14

15 1.4. οµή της εργασίας Η δομή της εργασίας είναι η εξής: Στο πρώτο εισαγωγικό κεφάλαιο γίνεται μια σύντομη ιστορική αναδρομή στο αντικείμενο της εργασίας και μια αρχική περιγραφή, αναφέροντας τους σκοπούς και τους στόχους της. Στο κεφάλαιο 2 περιγράφονται οι έννοιες και στοιχεία που χρησιμοποιούνται. Στο κεφάλαιο 3 δίνονται κάποιες εξηγήσεις για τους περιορισμούς στην υλοποίηση του αλγορίθμου που εφαρμόζονται στην εργασία αυτή για πρακτικούς λόγους. Στο κεφάλαιο 4 περιγράφεται ο αλγόριθμος της εφαρμογής του κανόνα του Warnsdorff και η λογική με την οποία πάρθηκαν κάποιες αποφάσεις για την υλοποίηση του. Στο κεφάλαιο 5 υπάρχει μία μικρή περιγραφή για τα προγράμματα που χρησιμοποιήθηκαν. Στο κεφάλαιο 6 περιγράφεται ο κώδικας της υλοποίησης στην γλώσσα C++ ανά συνάρτηση. Στο κεφάλαιο 7 περιγράφονται οι συναρτήσεις στο Matlab που χρησιμοποιήθηκαν για την γραφική απεικόνιση των διαδρομών και άλλων στατιστικών δεδομένων. Στο κεφάλαιο 8 αναλύονται τα αποτελέσματα της εφαρμογής και επισημαίνονται κάποιες ενδιαφέρουσες παρατηρήσεις από αυτά. Στο κεφάλαιο 9 προτείνονται κάποιες επεκτάσεις του αλγορίθμου και περιγράφεται πολύ σύντομα πως θα μπορούσε να επεκταθεί σε σκακιέρες μεγαλύτερου μεγέθους. Το κεφάλαιο 10 είναι μια περίληψη της εργασίας και τον κυριότερων χαρακτηριστικών της σε μορφή δημοσίευσης. Τέλος στο παράστημα δίνεται όλος ο κώδικας της εργασίας και περεταίρω εικόνες και γραφήματα. 15

16 2. Έννοιες 2.1. Ονοµασία θέσεων Όταν θα θέλουμε να αναφερθούμε σε ένα τετράγωνο της σκακιέρας δεν θα το κάνουμε με κάποιου είδους σκακιστικής γραφής (π.χ.f3-d2, g5) αλλά ξεκινώντας με ένα μαύρο τετράγωνο πάνω αριστερά, μετράμε γραμμές και στήλες για να βρούμε την θέση, π.χ. για μια θέση στην 3 η γραμμή και 4 η στήλη, γράφουμε (3, 4) Παρακείµενες θέσεις Θα λέμε ότι δύο θέσεις είναι παρακείμενες ή γειτονικές εάν μπορούμε να πάμε από την μία στην άλλη με μία κίνηση του ίππου. Γενικότερα: Για κάθε σκακιέρα NxN δύο θέσεις p 1 (α,β) και p 2 (γ,δ) γ δ θα είναι παρακείµενες εάν και µόνο εάν 1 α,β,γ,δ Ν και (α, β) {(γ+2, γ δ+1), (γ+2, δ-1), (γ-2, δ+1), (γ-2, δ-1), (γ+1, δ+2), (γ+1, δ-2), (γ-1, δ+2), (γ-1, δ-2). Πίνακας 1 Παρακείμενες θέσεις Το πόσες παρακείμενες θέσεις έχει μια δεδομένη θέση εξαρτάτε από το που αυτή βρίσκετε μέσα στην σκακιέρα. Οι θέσεις στα άκρα ή κοντά στα άκρα έχουν λιγότερες παρακείμενες, με τις γωνίες να έχουν μόνο 2 και τα τετράγωνα κοντά στο κέντρο να έχουν 8. Εικόνα 3 - Κινήσεις ίππων από διάφορες θέσεις στην σκακιέρα 2.3. Ελεύθερη θέση και βαθµός θέσης Θα λέμε ότι μία θέση είναι ελεύθερη εάν δεν την έχουμε επισκεφτεί προηγουμένως και θα λέμε βαθμό μιας θέσης τον αριθμό των ελεύθερων παρακείμενων 16

17 θέσεων σε αυτή. Επίσης ονομάζουμε περίπτωση ισοβαθμίας ή ισοπαλίας την κατάσταση κατά την οποία μία θέση έχει δύο η παραπάνω παρακείμενες με τον ίδιο μικρότερο βαθμό ιαδροµή του ίππου Η διαδρομή του ίππου είναι μία αλληλουχία κινήσεων κατά την οποία επισκεπτόμαστε τα τετράγωνα της σκακιέρας κινούμενοι σύμφωνα με τους κανόνες της κίνησης του ίππου και χωρίς να επισκεφτούμε ένα τετράγωνο δύο φορές. Εάν επισκεφτούμε ένα τετράγωνο δεύτερη φορά και δεν υπάρχει άλλο γειτονικό τετράγωνο ελεύθερο τότε τελειώνει η συγκεκριμένη διαδρομή του ίππου. Υπάρχουν τριών ειδών διαδρομών του ίππου: Η ανολοκλήρωτη. Η διαδρομή η οποία έχει τελειώσει πριν επισκεφτούμε όλα τα τετράγωνα. Η ανοιχτή. Μία ολοκληρωμένη διαδρομή της οποίας η πρώτη και η τελευταία θέση δεν είναι παρακείμενες. Η κλειστή ή κυκλική. Μία ολοκληρωμένη διαδρομή της οποίας η πρώτη και η τελευταία θέση είναι παρακείμενες. Εικόνα 4 - Παράδειγμα αποτύπωσης μιας κλειστής διαδρομής του ίππου Ένας λειτουργικός τρόπος αποτύπωσης μιας διαδρομής είναι με χρήση αριθμών οι οποίοι αντιπροσωπεύουν την σειρά με την οποία επισκεπτόμαστε τα τετράγωνα. Στην εικόνα 4 βλέπουμε την αποτύπωση μιας διαδρομή σε μια σκακιέρα 8x8 με εκκίνηση στο τετράγωνο (5,5) και τέλος στο τετράγωνο (6,3) Συµµετρία της σκακιέρας Πίνακας 2 - Συμμετρία της σκακιέρας

18 Σε κάποιες υλοποιήσεις του αλγορίθμου θα εκμεταλλευτούμε την συμμετρία της σκακιέρας προς όφελος μας για να μην υπολογίζουμε τις διαδρομές από όλα τα τετράγωνα, αλλά περιορίζουμε τον αλγόριθμο σε αυτές που ξεκινούν από το πρώτο τέταρτο της σκακιέρας και έπειτα ανάγουμε την λύση στις υπόλοιπες. Αυτό γίνεται ιδιαιτέρα εύκολα στην περίπτωση μας, γιατί εξετάζουμε κυρίως ζυγές σκακιέρες στο κλασσικό τετράγωνο σχήμα Ευριστικοί αλγόριθµοι Ο όρος χρησιμοποιείται για τους αλγόριθμους που βρίσκουν μια λύση από το πεδίο λύσεων ενός προβλήματος χωρίς να εγγυώνται ότι αυτή είναι η καλύτερη, ως εκ τούτου μπορούν να χαρακτηριστούν και ως κατά προσέγγιση λύσεις. Συνήθως ένας τέτοιος αλγόριθμος βρίσκει μια ικανοποιητική λύση πολύ ποιο γρήγορα από ότι θα έκανε να βρει την ιδανική λύση. Κάποιες φορές βέβαια μπορούν να είναι ακριβείς, δηλαδή βρίσκουν την καλύτερη λύση, αλλά εξακολουθούμε να αναφερόμαστε σε αυτούς τους αλγόριθμους ως ευριστικούς μέχρι να αποδειχτεί ότι πράγματι δίνουν την καλύτερη λύση. Χρησιμοποιούνται για την εύρεση λύσεων σε άλυτα ή πολύ δύσκολα προβλήματα, όπως προβλήματα χρονοπρογραμματισμού εργασιών, χρωματισμού χάρτη κ.α Πολυπλοκότητα αλγορίθµου Η έννοια της πολυπλοκότητας ενός αλγόριθμου αντιπροσωπεύει το κόστος χρήσης του αλγόριθμου για την επίλυση ενός προβλήματος, άρα είναι θέμα απόδοσης του αλγορίθμου με βάση την χρήση υπολογιστικών πόρων που απαιτούνται για την επίλυση ενός προβλήματος. Οι υπολογιστικοί πόροι - ανάλογα και με την φύση του αλγόριθμου - μπορεί να είναι η CPU, η μνήμη ή ακόμη και πιθανοί δικτυακοί πόροι (πχ bandwidth) που χρησιμοποιούνται. Ουσιαστικά όμως, στα περισσότερα προβλήματα αυτό που εξετάζεται είναι η χρήση της CPU, δηλαδή πόσος χρόνος απαιτείται για την εκτέλεση του αλγόριθμου. Το πρόβλημα χαρακτηρίζεται από τα δεδομένα εισόδου ενώ η συνάρτηση της πολυπλοκότητας f(n) εκφράζει την απαίτηση του αλγόριθμου σε χρόνο εκτέλεσης σε σχέση με το μέγεθος των δεδομένων εισόδου N. Επειδή είναι ιδιαίτερα δύσκολο ή και δυνατό σε πάρα πολλές περιπτώσεις να βρεθεί μία ακριβής συνάρτηση, συνήθως σ αυτήν την περίπτωση ενδιαφέρει η εύρεση της τιμής της f(n) στις εξής περιπτώσεις: Καλύτερη Περίπτωση, δηλ. η ελάχιστη τιμή της f(n) Χειρότερη Περίπτωση, δηλ. η μέγιστη τιμή της f(n) Μέση Περίπτωση, δηλ. η αναμενόμενη τιμή της f(n) με πλέον χρήσιμη την χειρότερη περίπτωση Χαµιλτόνια διαδροµή και κύκλωµα Η διαδρομή του ίππου είναι, ουσιαστικά, μία Χαμιλτόνια διαδρομή. Εάν αντικαταστήσουμε τα τετράγωνα με κόμβους και ενώσουμε τους κόμβους οι οποίοι είναι παρακείμενοι τότε δημιουργούμε έναν γράφο. Εάν ο γράφος αυτός έχει μια Χαμιλτόνια διαδρομή τότε η σκακιέρα την οποία αντιπροσωπεύει έχει μια ολοκληρωμένη διαδρομή του ίππου. 18

19 Στην θεωρία των γράφων μία Χαμιλτόνια διαδρομή είναι μια πορεία σε ένα μηκατευθυνόμενο γράφο που επισκέπτεται κάθε κορυφή ακριβώς μία φορά. Μια Χαμιλτόνια διαδρομή είναι ένα κύκλωμα όταν η πρώτη κορυφή και η τελευταία είναι απευθείας ενωμένες. Μπορεί να υπάρχουν πολλές Χαμιλτόνιες διαδρομές για ένα γράφημα, και συχνά το ζήτημα είναι να βρούμε την συντομότερη από αυτές. Αναφερόμαστε στα Χαμιλτόνια προβλήματα γράφων και ως προβλήματα του περιπλανώμενου πωλητή. Κάθε πλήρες γράφημα (n> 2) έχει ένα κύκλωμα Χάμιλτον. Οι διαδρομές και κυκλώματα Hamilton πήραν το όνομα τους από τον William Rowan Hamilton ο οποίος εφηύρε το παιχνίδι Icosian, επίσης γνωστό και ως παζλ του Hamilton, το οποίο προϋποθέτει την εύρεση ενός κυκλώματος Hamilton, σε ένα γράφημα - αναπαράσταση ενός δωδεκάεδρου. Ο Hamilton έλυσε αυτό το πρόβλημα χρησιμοποιώντας Icosian Calculus, μια αλγεβρική δομή βασισμένη στις ρίζες της μονάδος με πολλές ομοιότητες με τα κουαρτένια, επίσης μια εφεύρεση του Hamilton. 19

20 3. Όρια στις διαστάσεις των σκακιέρων και σκακιέρες µε περιττό αριθµό τετραγώνων Η υλοποίηση του κανόνα του Warnsdorff στην παρούσα εργασία είναι ικανή να δώσει αποτελέσματα για οποιαδήποτε NxN σκακιέρα αλλά θεωρούμε σκόπιμο - και απαραίτητο λόγο περιορισμών του συστήματος - να βάλουμε κάποια όρια στις διαστάσεις των σκακιέρων που θα μελετήσουμε. Επίσης θα επισημάνουμε την διαφορά στα αποτελέσματα μεταξύ σκακιέρων με μονό και ζυγό αριθμό τετραγώνων και γιατί θα επικεντρωθούμε κυρίως στα αποτελέσματα των δεύτερων Σκακιέρες NxN από 5x5 µέχρι 300x300 Για τις σκακιέρες 1x1 και 2x2 είναι προφανές ότι δεν υπάρχει διαδρομή του ίππου γιατί δεν υπάρχει χώρος για τον ίππο να κινηθεί. Η σκακιέρα 3x3 είναι ενδιαφέρουσα περίπτωση γιατί εάν τοποθετήσουμε τον ίππο σε κάποια θέση εκτός της κεντρικής και εφαρμόσουμε τον κανόνα του Warnsdorff δημιουργείτε μία κυκλική διαδρομή που περνάει από όλα τα τετράγωνα εκτός του κεντρικού. Αυτή η ημιτελής διαδρομή είναι και μοναδική για την σκακιέρα αυτή αφού από όποιο εξωτερικό τετράγωνο και να ξεκινήσουμε ο ίππος θα διαγράψει την ίδια πορεία. Από το κεντρικό τετράγωνο ο ίππος δεν μπορεί να κάνει καμία κίνηση. Η σκακιέρα 4x4 δεν έχει ολοκληρωμένες διαδρομές γιατί πάντα περισσεύουν 2 ή παραπάνω τετράγωνα που δεν είναι γειτονικά και δεν μπορούν να γίνουν μέρος της διαδρομής. Στην βιβλιογραφία έχει αποδειχτεί ότι όλες οι σκακιέρες 4xN έχουν ανοιχτές ολοκληρωμένες διαδρομές εκτός από την 4x4. Από το μέγεθος 5x5 και πάνω υπάρχουν ολοκληρωμένες διαδρομές τις οποίες μπορούμε να δημιουργήσουμε και να επεξεργαστούμε. Ιστορικά αξίζει να αναφέρουμε ότι πρώτος ο Euler αποτύπωσε διαδρομές σε σκακιέρες 5x5. Το όριο στις διαστάσεις της μεγαλύτερης σκακιέρας στα 300x300 μπήκε για δύο λόγους. Ο ένας είναι οι τεχνικοί περιορισμοί του συστήματος και του περιβάλλοντος στο οποίο δημιουργήθηκε και έτρεξε ο κώδικας του προγράμματος και ο άλλος είναι ο χρόνος που χρειάζεται για να ολοκληρωθούν οι υπολογισμοί σε σχετικά μεγάλες σκακιέρες με Ν>150 για πολλές αφετηρίες και πολλές σκακιέρες. Οι περιορισμοί του συστήματος προέρχονται από το όριο της μνήμης που παρέχει το προγραμματιστικό περιβάλλον που χρησιμοποιήθηκε (Microsoft Visual C++) το οποίο είναι περίπου bytes. Ο περιορισμός αυτός θα μπορούσε να ξεπεραστεί αλλά δεν κρίθηκε αναγκαίο γιατί τα αποτελέσματα είναι αρκετά για να βγουν τα συμπεράσματα που θέλουμε αλλά και γιατί ο χρόνος που χρειάζεται για να βγουν αυτά τα συμπεράσματα ανεβαίνει εκθετικά όσο μεγαλώνουν οι διαστάσεις των σκακιέρων Μονός αριθµός τετραγώνων Για να έχει μία NxN σκακιέρα περιττό αριθμό τετραγώνων θα πρέπει το N να είναι περιττό. Σε μια τέτοια σκακιέρα ένα από τα δύο χρώματα θα έχει ένα τετράγωνο παραπάνω από το άλλο. Εάν τα μαύρα τετράγωνα είναι τα περισσότερα τότε εάν αρχίσουμε από μαύρο τετράγωνο μπορεί να βρεθεί ολοκληρωμένη διαδρομή του ίππου ενώ εάν αρχίσουμε από άσπρο τότε δεν θα μπορέσει να περάσει ο ίππος από όλες τις θέσεις γιατί στο τέλος θα μείνουν δύο μαύρα τετράγωνα και ο ίππος κινείτε μόνο από τετράγωνο του ενός χρώματος σε τετράγωνο του άλλου. Για να μειωθεί η πολυπλοκότητα των μετέπειτα υπολογισμών και για να μην παίρνουμε συνέχεια ιδικές περιπτώσεις από δω και πέρα δεν θα λαβαίνουμε υπόψη μας τις μονές σκακιέρες. Όταν θα λέμε ότι υπολογίζουμε τις διαδρομές για τις σκακιέρες από 6 έως 100 θα είναι μόνο για τα ζυγά νούμερα. 20

21 Εικόνα 5 - Μέγιστη επιτυχία του αλγορίθμου σε σκακιέρα με μονό αριθμό τετραγώνων Από τα παραπάνω βγαίνει επίσης το συμπέρασμα ότι ακόμα και αν υπάρχουν ολοκληρωμένες διαδρομές, δεν υπάρχει καμία κλειστή διαδρομή διότι κάποια στιγμή, λόγο του μονού αριθμού τετραγώνων, θα υπάρχουν δυο τετράγωνα ίδιου χρώματος που θα πρέπει να περάσει ο ίππος συνεχόμενα για να ολοκληρωθεί η διαδρομή, πράγμα που είναι άτοπο. 21

22 4. Περιγραφή αλγορίθµου εφαρµογής του κανόνα του Warnsdorff 4.1. Ο κανόνας του Warnsdorff Το 1823 ο H. C. Warnsdorff πρότεινε στο "Des Rösselsprungs einfachste und allgemeinste Lösung" (Η διαδρομή του ιππότη, μια απλή και γενική λύση) Schmalkalden (1823) έναν ευριστικό αλγόριθμο για την εύρεση της διαδρομής του ίππου. Ο αλγόριθμος είναι ο εξής: «Από την παρούσα θέση κινούμαστε στην παρακείμενη της με τον μικρότερο βαθμό». Όταν επισκεπτόμαστε κάποια θέση αυτή δεν υπολογίζεται πια ως πιθανός προορισμός για τον ίππο. Από αυτό είναι εμφανές ότι μετά από μία κίνηση ο βαθμός όλων των ελεύθερων παρακείμενων θέσεων του προορισμού μειώνετε κατά ένα. Εικόνα 6 - Στιγμιότυπο υπολογισμού διαδρομής του ίππου. Ο στόχος του αλγορίθμου είναι να αποφεύγονται τα αδιέξοδα. Να μην φτάνει δηλαδή ο ίππος σε κάποιο τετράγωνο το οποίο δεν έχει ελεύθερες παρακείμενες θέσεις χωρίς πρώτα να έχει περάσει από όλα τα τετράγωνα της σκακιέρας ακριβώς μία φορά. Ο ίππος κινείτε στην παρακείμενη ελεύθερη θέση με τον μικρότερο βαθμό για να αποφευχθεί η δημιουργία μεμονωμένων θέσεων στις οποίες ο ίππος δεν θα έχει τρόπο να φτάσει. Όπως θα δείξουμε παρακάτω, η απλή και διαισθητική αυτή η λογική λειτουργεί αρκετά καλά, αλλά αφήνει στην κρίση αυτού που εφαρμόζει τον αλγόριθμο την λύση των ισοβαθμιών. Θα δούμε πως αυτή η φαινομενική λεπτομέρεια, προσδιορίζει αν θα ολοκληρωθεί με επιτυχία μια διαδρομή του ίππου, ή ακόμα και αν αυτή θα είναι κλειστή ή ανοιχτή. Εξαιτίας της απλότητας του, ο κανόνας του Warnsdorff μπορεί να υλοποιηθεί αλγοριθμικά με διάφορους τρόπους. Παρακάτω περιγράφονται κάποιοι τρόποι υλοποίησης και παρατίθενται λόγοι για την επιλογή αυτών που θα χρησιμοποιηθούν σε αυτή την εργασία Προετοιµασία της σκακιέρας Το πιο σημαντικό στοιχείο του αλγορίθμου, αν και δεν είναι άμεσα αντιληπτό, είναι ο υπολογισμός του βαθμού των θέσεων. Ο ευθείς τρόπος να συμπεράνουμε τον βαθμό μιας θέσης είναι να υπολογίσουμε ποιες άλλες θέσεις είναι παρακείμενες σε αυτή και πόσες από αυτές είναι ελεύθερες. Σε σκακιέρα NxN ο ακόλουθος ψευδοκώδικας υπολογίζει τον βαθμό μιας θέσης: 22

23 Η p 0 (α,β) είναι µια θέση της οποίας θέλουµε να βρούµε τον βαθµό. Θέτουµε την αρχική τιµή του βαθµού της θέσης p 0 ίση µε 0. Για κάθε p ι (χ, ψ) για το οποίο ισχύει: 1 χ, ψ N και (χ, ψ) {(α+2, β+1), (α+2, β-1), (α-2, β+1), (α-2, β-1), (α+1, β+2), (α+1, β-2), (α-1, β+2), (α-1, β-2) αυξάνουµε στον βαθµό της p 0 κατά 1. Πίνακας 3 - Υπολογισμός βαθμού θέσης Ο παραπάνω αλγόριθμος πρέπει να χρησιμοποιείτε πολλαπλές φορές σε κάθε περίπτωση που χρειάζεται να βρούμε την μικρότερου βαθμού θέση από αυτές που «απειλεί» ο ίππος. Εάν όμως σκεφτούμε ότι ο χώρος στον οποίο εργαζόμαστε είναι πάντα μια NxN σκακιέρα και ο τρόπος με τον οποίο υπολογίζονται οι παρακείμενες θέσεις είναι πάντα ίδιος, γίνετε φανερό ότι μπορούμε να προετοιμάσουμε τον βαθμό κάθε θέσης πριν καν τοποθετήσουμε τον ίππο στην σκακιέρα. Ο ίππος κινείτε κάθε φορά 1 και μετά 2 ή 2 και μετά 1 τετράγωνο προς οποιαδήποτε κατεύθυνση. Με μία απλή παρατήρηση της σκακιέρας συμπεραίνουμε τα παρακάτω για τις θέσεις της: Όποιες θέσεις απέχουν 2 ή περισσότερα τετράγωνα από τις άκρες της σκακιέρας έχουν 8 γειτονικές θέσεις. Όποιες απέχουν 1 τετράγωνο από μία άκρη και 2 ή περισσότερα τετράγωνα από τις άλλες άκρες της σκακιέρας έχουν 6 γειτονικές θέσεις. Όποιες είναι στην μία άκρη και απέχουν 2 ή περισσότερα τετράγωνα από τις άλλες άκρες της σκακιέρας έχουν 4 γειτονικές θέσεις. Όποιες απέχουν ακριβώς 1 τετράγωνο από δύο άκρες της σκακιέρας έχουν 4 γειτονικές θέσεις. Όποιες είναι στην μία άκρη και απέχουν ακριβώς 1 τετράγωνο από μια άλλη άκρη της σκακιέρας έχουν 3 γειτονικές θέσεις. Όποιες είναι στις γωνίες της σκακιέρας έχουν 2 γειτονικές θέσεις. Εάν γράψουμε σε μορφή πίνακα τους βαθμούς των θέσεων που δημιουργούνται από τους παραπάνω κανόνες τότε παίρνουμε τον πίνακα της εικόνας 7. Με την δημιουργία ενός τέτοιου πίνακα δεν χρειάζεται να υπολογίζουμε κάθε φορά τον βαθμό των θέσεων, αλλά πρέπει να προσέχουμε να μειώνουμε τον βαθμό μιας θέσης όταν παρακείμενή της προστίθεται στην διαδρομή του ίππου. Εικόνα 7 - Οι βαθμοί όλων των θέσεων σε μια σκακιέρα 8*8 πριν αρχίσει η διαδικασία για την εύρεση μιας διαδρομής του ίππου 23

24 4.3. Υπολογισµός επόµενης κίνησης Το που θα κινηθεί ο ίππος ορίζεται, σύμφωνα με τον κανόνα του Warnsdorff, από τον βαθμό των θέσεων που απειλεί. Η θέση με τον μικρότερο βαθμό γίνεται ο προορισμός του ίππου. Σε κάποιες περιπτώσεις δύο η περισσότερες θέσεις μοιράζονται τον ίδιο μικρότερο βαθμό αλλά ο κανόνας του Warnsdorff δεν αναφέρεται σε τέτοιες καταστάσεις και έτσι χρειάζεται να προσθέσουμε έναν δικό μας κανόνα για να δώσει τη λύση. Στην βιβλιογραφία έχουν προταθεί διάφοροι τρόποι επίλυσης και παρακάτω θα περιγράψουμε κάποιους από αυτούς Βαθύς υπολογισµός βαθµού Σε περίπτωση ισοπαλίας παίρνουμε τις θέσεις που ισοβαθμούν, μετράμε πόσες γειτονικές θέσεις είναι διαθέσιμες για την κάθε μία και διαλέγουμε αυτήν που έχει τις λιγότερες. Αυτό γίνετε όσες φορές χρειάζεται μέχρι να σπάσει η ισοπαλία. Αυτή η διαδικασία ακολουθεί την ίδια λογική με τον κανόνα του Warnsdorff στο ότι προσπαθεί να περάσει τον ίππο πρώτα από τις θέσεις που είναι εύκολο να απομονωθούν. Οι υπολογισμοί που γίνονται με αυτήν την μέθοδο επιβαρύνουν τον υπολογισμό της διαδρομής του ίππου εκθετικά, γιατί μπορεί να χρειαστεί να φτάσει πολύ βαθιά για να βρεθεί λύση Τυχαία επιλογή Η μόνη «οδηγία» που φέρεται να έχει δώσει ο Warnsdorff για την επίλυση των ισοβαθμιών είναι η τυχαία επιλογή μεταξύ των πιθανών θέσεων. Αυτή η τακτική δεν εγγυάται πάντα κάποια ολοκληρωμένη διαδρομή ίππου αλλά είναι πιθανό να υπάρχουν για όλες τις σκακιέρες και όλες τις αφετηρίες εάν επιλεχθούν, τυχαία, οι σωστές θέσεις Εξωτερική θέση Από τις θέσεις που ισοβαθμούν επιλέγουμε αυτήν που βρίσκετε ποιο μακριά από το κέντρο, πράγμα το οποίο συνήθως σημαίνει την θέση που έχει τους γείτονες με τον μικρότερο βαθμό, αφού όπως έχουμε πει οι θέσεις κοντά στις άκρες της σκακιέρας έχουν λιγότερους γείτονες από τις άλλες. Αυτή η λογική αρχικά φαίνεται να είναι η καλύτερη αλλά με την εφαρμογή της βρίσκουμε εύκολα διαδρομές που καταλήγουν σε αδιέξοδο Προκαθορισµένη σειρά επίλυσης ισοπαλιών Οι περισσότερες κινήσεις που μπορεί να κάνει ο ίππος είναι 8. Αριθμούμε αυτές τις κινήσεις με νούμερα από το ένα μέχρι το οχτώ. Όταν δύο ή παραπάνω θέσεις ισοβαθμούν τότε επιλέγουμε ως επικρατούσα αυτήν που έρχεται πρώτη στην αρίθμηση. Εάν π.χ. ισοβαθμούν οι τότε παίρνουμε την 3 σαν επόμενη θέση. Αυτός είναι ο τρόπος επίλυσης ισοπαλιών στην υλοποίηση του αλγορίθμου σε αυτήν την εργασία. Η αρίθμηση ξεκινάει από την θέση «δύο κάτω, μία δεξιά» του ίππου και οι υπόλοιπες αριθμούνται σύμφωνα με την φορά του ρολογιού. Εικόνα 8 - Προκαθορισμένη σειρά επίλυσης ισοπαλιών. 24

25 5. Εργαλεία 5.1.C++ Η γλώσσα προγραμματισμού C ορίστηκε αρχικά στο κλασσικό σύγγραμμα των Kernigham και Ritchie "The C Programming Language", και ήταν το πρότυπο που χρησιμοποιούσαν όλοι οι προγραμματιστές στη C. Το πρότυπο ANSI για τη C τελικά εγκρίθηκε τον Δεκέμβριο του 1989 και έγινε το επίσημο πρότυπο για τον προγραμματισμό στη C. Το πρότυπο ANSI εισήγαγε αρκετά νέα στοιχεία, που δεν υπήρχαν στην αρχική έκδοση των Kernigham και Ritchie, και άλλαξε κάποια άλλα, έτσι ώστε τα δύο πρότυπα δεν είναι τελείως συμβατά. Η C++ είναι μια γενικού σκοπού γλώσσα προγραμματισμού Η/Υ. Θεωρείται μέσου επιπέδου γλώσσα, καθώς περιλαμβάνει έναν συνδυασμό χαρακτηριστικών από γλώσσες υψηλού και χαμηλού επιπέδου. Είναι μια μεταγλωττιζόμενη γλώσσα πολλαπλών παραδειγμάτων, με τύπους. Υποστηρίζει δομημένο, αντικειμενοστραφή και γενικό προγραμματισμό. Η γλώσσα αναπτύχθηκε από τον Bjarne Stroustrup το 1979 στα εργαστήρια Bell της AT&T, ως βελτίωση της ήδη υπάρχουσας γλώσσας προγραμματισμού C, και αρχικά ονομάστηκε "C with Classes", δηλαδή C με Κλάσεις. Μετονομάστηκε σε C++ το Οι βελτιώσεις ξεκίνησαν με την προσθήκη κλάσεων, και ακολούθησαν, μεταξύ άλλων, εικονικές συναρτήσεις, υπερφόρτωση τελεστών, πολλαπλή κληρονομικότητα, πρότυπα κ.α. Επειδή η αντικειμενοστραφής τεχνολογία ήταν καινούργια και όλες οι αντικειμενοστραφείς υλοποιήσεις που υπήρχαν ήταν αρκετά αργές και μη αποδοτικές, ένας δευτερεύων σκοπός της C++ ήταν να διατηρήσει την αποδοτικότητα της C. Η C++ μπορεί να θεωρηθεί μια διαδικαστική γλώσσα με κάποιες επιπλέον δομές, μερικές από τις οποίες προστέθηκαν για αντικειμενοστραφή προγραμματισμό, ενώ άλλες για την βελτίωση του συντακτικού της γλώσσας. Ένα καλογραμμένο πρόγραμμα πρέπει να έχει στοιχεία τόσο αντικειμενοστραφή όσο και κλασσικού διαδικαστικού προγραμματισμού. Η C++ είναι ουσιαστικά μια επεκτάσιμη γλώσσα αφού μπορούμε να ορίσουμε νέους τύπους με τέτοιο τρόπο ώστε να λειτουργούν σαν τους προκαθορισμένους τύπους, που είναι τμήμα της γλώσσας. Η C++ σχεδιάστηκε για την ανάπτυξη μεγάλων προγραμμάτων. #include <iostream> using namespace std; int main () { cout << "Hello World!"; return 0; Πίνακας 4 - Παράδειγμα προγράμματος C++ Στο βιβλίο του "The Design and Evolution of C++ (1994), ο Bjarne Stroustrup περιγράφει κάποιους κανόνες που χρησιμοποιεί για το σχεδιασμό της C++: η C++ είναι σχεδιασμένη ως μια γενικής χρήσης γλώσσα με στατικούς τύπους, που είναι όσο αποτελεσματική και φορητή, όσο η C η C++ είναι σχεδιασμένη να υποστηρίζει άμεσα και σφαιρικά πολλά είδη προγραμματισμού (δομημένος προγραμματισμός, αντικειμενοστραφής, γενικός προγραμματισμός) η C++ είναι σχεδιασμένη να δίνει επιλογές στον προγραμματιστή, ακόμα κι αν του επιτρέπει να επιλέξει λανθασμένα 25

26 η C++ είναι σχεδιασμένη να είναι όσο το δυνατόν συμβατή με τη C, ώστε να διευκολύνει τη μετάβαση από τη C η C++ αποφεύγει χαρακτηριστικά που αναφέρονται σε συγκεκριμένες πλατφόρμες ή δεν είναι γενικής χρήσης η C++ δεν έχει κόστος για χαρακτηριστικά της γλώσσας που δεν χρησιμοποιούνται η C++ είναι σχεδιασμένη να λειτουργεί χωρίς κάποιο εξελιγμένο προγραμματιστικό περιβάλλον Η C++ παρέχει περισσότερους από 30 τελεστές, που καλύπτουν τη βασική αριθμητική, το χειρισμό bit, αναφορά δεικτών, συγκρίσεις, λογικές πράξεις κ.α. Σχεδόν όλοι οι τελεστές μπορούν να υπερφορτωθούν για τύπους ορισμένους από το χρήστη, με λίγες εξαιρέσεις όπως πρόσβαση μέλους (. και.*). Το πλούσιο σύνολο από τελεστές που μπορούν να υπερφορτωθούν είναι βασικό για τη χρήση της C++ ως γλώσσα ειδικού πεδίου (domain specific language). Οι υπερφορτώσιμοι τελεστές είναι ακόμα βασικό μέρος πολλών προχωρημένων τεχνικών προγραμματισμού της C++, όπως οι έξυπνοι δείκτες. Η υπερφόρτωση ενός τελεστή δεν αλλάζει την προτεραιότητα των υπολογισμών όπου χρησιμοποιείται, ούτε τον αριθμό των τελεστέων που χρησιμοποιεί ο τελεστής (αν και οποιοσδήποτε τελεστέος μπορεί απλά να αγνοείται). + addition - subtraction * multiplication / division % Modulo == Equal to!= Not equal to > Greater than < Less than >= Greater than or equal to <= Less than or equal to && AND OR & Bitwise AND Bitwise Inclusive OR ^ Bitwise Exclusive OR ~ Unary complement (bit inversion) << Shift Left >> Shift Right Πίνακας 5 - Βασικοί τελεστές της C++ Κατά τον προγραμματισμό με την C++, αποθηκεύονται οι μεταβλητές στη μνήμη του υπολογιστή με διαφορετικό τρόπο για κάθε τύπο. Αυτό γίνετε διότι δεν πρόκειται να καταλάβει το ίδιο ποσό της μνήμης για να αποθηκεύσει έναν απλό αριθμό από ότι για ένα γράμμα ή ένα μεγάλο αριθμό. Η μνήμη στους υπολογιστές είναι οργανωμένη σε bytes. Ένα byte είναι το ελάχιστο ποσό της μνήμης που μπορεί να διαχειριστεί η C++. Ένα byte μπορεί να αποθηκεύσει ένα σχετικά μικρό ποσό των δεδομένων: έναν απλό χαρακτήρα ή ένα μικρό ακέραιο (συνήθως έναν ακέραιο αριθμό μεταξύ 0 και 255). Επιπλέον, ο υπολογιστής μπορεί να χειριστεί πιο σύνθετους τύπους δεδομένων που προέρχονται από συνένωση πολλών byte, όπως πολύ μεγάλους ή μη ακέραιους αριθμούς. 26

27 Name Description Size* Range* char Character or small integer. 1byte signed: -128 to 127 unsigned: 0 to 255 short signed: to Short Integer. 2bytes int(short) unsigned: 0 to int Integer. 4bytes long int (long) Long integer. 4bytes signed: to unsigned: 0 to signed: to unsigned: 0 to Boolean value. It can take one of bool 1byte true or false two values: true or false. float Floating point number. 4bytes +/- 3.4e +/- 38 (~7 digits) double long double wchar_t Double precision floating point 8bytes number. Long double precision floating point 8bytes number. Wide character. Πίνακας 6 - Βασικοί τύποι μεταβλητών στην C++ 2 or 4 bytes +/- 1.7e +/- 308 (~15 digits) +/- 1.7e +/- 308 (~15 digits) 1 wide character 5.2.MATLAB To Matlab (matrix laboratory) είναι ένα αριθμητικό υπολογιστικό περιβάλλον και γλώσσα προγραμματισμού τέταρτης γενιάς. Αναπτύχθηκε από την εταιρεία MathWorks και επιτρέπει χειρισμούς πινάκων, οπτική αναπαράσταση συναρτήσεων και δεδομένων, την εφαρμογή αλγορίθμων, δημιουργία φορμών διεπαφής με το χρήστη, και έχει δυνατότητες διασύνδεσης με προγράμματα που είναι γραμμένα σε άλλες γλώσσες προγραμματισμού, συμπεριλαμβανομένων των C, C + +, Java, και Fortran. Αν και τo Matlab προορίζεται κυρίως για αριθμητικούς υπολογισμούς, υπάρχει μια προαιρετική εργαλειοθήκη (toolbox) που χρησιμοποιεί μια συμβολική μηχανή την MuPAD - δίνοντας στους υπολογιστές την δυνατότητα για αλγεβρικούς υπολογισμούς. Ένα επιπλέον πακέτο, το Simulink, προσθέτει γραφική αναπαράσταση εργαλείων σε πολλούς επιστημονικούς τομείς και ένα μοντέλο προσομοίωσης για δυναμικά και ενσωματωμένα συστήματα. To Matlab είναι χτισμένο γύρω από τη γλώσσα Matlab, και η χρήση του περιλαμβάνει κυρίως πληκτρολόγηση του κώδικα Matlab στο παράθυρο εντολών (ως ένα διαδραστικό μαθηματικό πλαίσιο), ή για την εκτέλεση αρχείων κειμένου που περιέχουν συναρτήσεις και κώδικα Matlab. >> x = 17 x = 17 >> x = 'hat' x = hat >> y = x + 0 y = >> x = [3*4, pi/2] 27

28 x = >> y = 3*sin(x) y = Πίνακας 7 - Εντολές και τα αποτελέσματα τους στο παράθυρο εντολών του Matalb Όπως υποδηλώνει και το όνομά του (εργαστήριο πινάκων Matrix Laboratory - Matlab), το Matlab μπορεί να δημιουργήσει και να επεξεργαστεί συστοιχίες μιας (διανύσματα), δυο (πίνακες), ή περισσότερων διαστάσεων. Στην Matlab, αναφερόμαστε σε ένα διάνυσμα ως ένα μονοδιάστατο (1 Ν ή Ν 1) πίνακα. Ένας πίνακας αναφέρεται γενικά σε ένα δισδιάστατο πίνακα, δηλαδή ένα M N πίνακα όπου M και N είναι μεγαλύτερο από 1. Οι πίνακες με περισσότερες από δύο διαστάσεις αναφέρονται ως πολυδιάστατοι πίνακες. Οι πίνακες αυτοί αποτελούν θεμελιώδες στοιχείο του Matlab και πολλές βασικές λειτουργίες του υποστηρίζουν εγγενώς την επεξεργασία τους απευθείας χωρίς τη χρήση μαθηματικών πράξεων ή συναρτήσεων. Επομένως, η γλώσσα του Matlab είναι ένα παράδειγμα γλώσσας προγραμματισμού πινάκων. >> ari = 1:5 ari = >> array = 1:2:9 array = >> array = 1:3:9 array = >> A = [ ; ; ; ] A = >> A(2,3) ans = 11 >> A(2:4,3:4) ans = >> eye(3) ans = >> zeros(2,3) ans = >> ones(2,3) 28

29 ans = Πίνακας 8 - Δημιουργία πινάκων 29

30 6. Υλοποίηση του κανόνα του Warnsdorff µε την γλώσσα προγραµµατισµού C++ Ακολουθεί η περιγραφή του κώδικα που υλοποιεί τον κανόνα του Warnsdorff. Για την μελέτη του αλγορίθμου γράφτηκαν διάφορες συναρτήσεις με την καθεμία να προσφέρει διαφορετικά αποτελέσματα για την σφαιρικότερη μελέτη του. Παρακάτω θα τις περιγράψουμε ξεχωριστά. Το ανώτατο όριο 300x300 στο μέγεθος των σκακιέρων μπήκε για λόγους περιορισμών στο σύστημα που ήταν διαθέσιμο για τους υπολογισμούς των διαδρομών. Δεν υπάρχει λόγος να μας κάνει να πιστεύουμε ότι η υλοποίηση δεν δουλεύει για μεγαλύτερες σκακιέρες Includes and declarations #include "stdafx.h" #include <fstream> #include <time.h> #include <windows.h> #include <direct.h> #include <string> Πίνακας 9 - Βιβλιοθήκες που χρησιμοποιεί το πρόγραμμα. Οι βιβλιοθήκες της C++ είναι συλλογές από λειτουργίες, σταθερές, κλάσεις, αντικείμενα και πρότυπα που εκτείνουν την γλώσσα και παρέχουν τις βασικές λειτουργίες για να εκτελεστούν διάφορες εργασίες, όπως οδηγίες για να αλληλεπιδράσει με το λειτουργικό σύστημα, επεξεργασία δεδομένων και άλλους χρήσιμους αλγορίθμους. Τα διάφορα στοιχεία που παρέχονται από τις βιβλιοθήκες χωρίζονται σε διάφορες επιγραφές (headers) που πρέπει να περιλαμβάνονται στον κώδικα, προκειμένου να έχουμε πρόσβαση στα στοιχεία τους. Οι επιγραφές που χρησιμοποιούμε σε αυτό το πρόγραμμα είναι οι εξής: #include "stdafx.h": περιέχει ένα σύνολο από επιγραφές οι οποίες φορτώνονται στην αρχή του προγράμματος και έτσι εξοικονομούμε χρόνο κατά την διάρκεια των υπολογισμών. #include <fstream>: επιτρέπει την εγγραφή και το διάβασμα αρχείων. #include <time.h>: δίνει πρόσβαση στο ρολόι του συστήματος. #include <windows.h>: δίνει πρόσβαση στις λειτουργίες του συστήματος των Windows. #include <direct.h>: περιέχει διάφορες συναρτήσεις που έχουν να κάνουν με δημιουργία και την πρόσβαση σε φακέλους του μέσου αποθήκευσης. #include <string>: δίνει πρόσβαση σε συναρτήσεις που χρησιμοποιούνται για την επεξεργασία συμβολοσειρών. void problemknight01_1(int, int, int); //μία αφετηρία, μία σκακιέρα void problemknight01_2(int, int, int); //debug-demonstration void problemknight01_3(int, int, int); // μία αφετηρία, μία σκακιέρα, δεδομένη λύση με τυχαία αναδιάταξη void problemknight02_1(int); // όλες οι αφετηρίες, μία σκακιέρα void problemknight02_2(int); // όλες οι αφετηρίες, μία σκακιέρα, συγκεκριμένη αναδιάταξη void problemknight02_3(int); //m σκακιέρες, όλες οι αφετηρίες, ένα τέταρτο, συγκεκριμένη αναδιάταξη, σώσιμο έγκυρων και άκυρων θέσεων void problemknight03_1(int); // όλες οι αφετηρίες, μία σκακιέρα, όλες οι λύσεις void problemknight03_2(int); // m σκακιέρες, όλες οι αφετηρίες, όλες οι λύσεις, σώσιμο αποτελεσμάτων void problemknight03_3(int); // m σκακιέρες, όλες οι αφετηρίες, όλες οι λύσεις 30

31 void problemknight03_4(int); // m σκακιέρες, όλες οι αφετηρίες, τυχαία διάταξη void problemknight04(int, int*, int); // όλες οι αφετηρίες, μία σκακιέρα, σειριακή αναδιάταξη από την order_sequence(), ένα τέταρτο void order_sequence(int, int, int); // σειριακή αναδιάταξη για το problemknight04() void board_setup(int, int*); //αρχικοποίηση πίνακα με όλες τις πιθανές κινήσεις από κάθε θέση void move_check(int, int, int, int*, int*, int*, int*, int*); //εύρεση επόμενης κίνησης void board_respec(); //επαναϋπολογισμός πιθανών κινήσεων από κάθε θέση μετά από κίνηση του ίππου Πίνακας 10 - Δηλώσεις συναρτήσεων Στην C++ χρειάζεται να δηλώσουμε τις συναρτήσεις, έξω από την βασική συνάρτηση, μαζί με τον τύπο τους και τον τύπο των ορισμάτων που χρησιμοποιεί η κάθε μία Συνάρτηση problemknight01_1 Αυτή είναι η βασική συνάρτηση που περιέχει την υλοποίηση του αλγορίθμου. Θα την αναλύσουμε ολόκληρη γιατί πάνω σε αυτήν στηρίζονται οι υπόλοιπες, για τις οποίες θα επισημάνουμε μόνο τις διαφορές τους. Υπολογίζει την διαδρομή του ίππου για μια σκακιέρα και από την θέση που θα της δώσουμε. Επίσης γράφει σε αρχείο, με όνομα που της δίνουμε, την διαδρομή. void problemknight01_1(int m,int startx, int starty) { Πίνακας 11 - Ορίσματα της συνάρτησης m = μέγεθος σκακιέρας startx = γραμμή θέσης εκκίνησης starty = στήλη θέσης εκκίνησης. int n=m; int x,y,xmax,ymax,xtemp,ytemp,moves,check=0,invalidmove; int pin[300][300], xmove[8]={2,2,1,-1,-2,-2,-1,1, ymove[8]={1,-1,-2,-2,- 1,1,2,2, order[8]={1,2,3,4,5,6,7,8; char fname[30] = "F:\output.txt"; x = --startx; y = --starty; pin[x][y]=100; Πίνακας 12 - Δήλωση μεταβλητών και αρχικοποίηση τιμών n: μέγεθος σκακιέρας x,y,xmax,ymax,xtemp,ytemp: μεταβλητές που περιέχουν την θέση του ίππου σε διάφορα στάδια του αλγορίθμου. Check=0: αριθμός ανολοκλήρωτων. invalidmove: πόσες θέσεις γύρω από αυτή που βρίσκετε ο ίππος είναι άκυρες είτε διότι είναι έξω από την σκακιέρα είτε διότι είναι κατειλημμένες. pin[300][300]: πίνακας ο οποίος περιέχει την σκακιέρα. xmove[8]={2,2,1,-1,-2,-2,-1,1, ymove[8]={1,-1,-2,-2,-1,1,2,2:τα περιεχόμενα των πινάκων αυτών ανά ζευγάρι για κάθε θέση {(xmove[0],ymove[0]), (xmove[1],ymove[1]), κτλ. μας δίνουν την κίνηση του ίπου. order[8]={1,2,3,4,5,6,7,8: πίνακας ο οποίος δείχνει την σειρά με την οποία λύνονται οι ισοπαλίες. 31

32 fname[30] = "F:\output.txt": πίνακας χαρακτήρων με το όνομα του αρχείου που θα αποθηκευθεί η διαδρομή του ίππου. x = --startx, y = --starty: αρχικοποίηση των x και y από τα δεδομένα που έστειλε η main. pin[x][y]=100: στην θέση από την οποία ξεκινάει ο ίππος δίνουμε το νούμερο 100. board_setup(n, *pin); Πίνακας 13 - Κλήση συνάρτησης board_setup() Εδώ η συνάρτηση board_setup() παίρνει ως ορίσματα το μέγεθος της σκακιέρας και τον δείκτη που δείχνει στον πίνακα pin και υπολογίζει τους βαθμούς των θέσεων της σκακιέρας πριν αρχίσει ο υπολογισμός της διαδρομής. Λεπτομέρειες για το πώς ακριβώς λειτουργεί δίνονται παρακάτω. for(int i=0;i<m*n-1;i++) { xtemp=0; ytemp=0; xmax=0; ymax=0; invalidmove=0; moves=9; Πίνακας 14 - Επανάληψη που διατρέχει όλες τις θέσεις της σκακιέρας και αρχικοποιήσεις για κάθε επανάληψη Η επανάληψη αυτή τρέχει τόσες φορές όσα είναι και τα τετράγωνα της σκακιέρας. Εδώ μέσα γίνονται οι απαραίτητοι υπολογισμοί για να βρεθεί η επόμενη θέση που θα πάει ο ίππος. Εάν η διαδρομή είναι ολοκληρωμένη τότε η επανάληψη θα τελειώσει κανονικά, εάν ο ίππος βρεθεί σε κάποια θέση από την οποία δεν μπορεί να πάει σε κάποιο τετράγωνο το οποίο δεν έχει επισκεφτεί τότε η επανάληψη τελειώνει πρόωρα. Οι μεταβλητές xtemp, ytemp, xmax, ymax και invalidmove μηδενίζονται για να αρχίσει η εύρεση της επόμενης θέσης του ίππου χωρίς να επηρεαστεί από την προηγούμενη. Η moves γίνετε 9 γιατί οι περισσότερες προσκείμενες θέσεις που μπορεί να έχει διαθέσιμές ένα τετράγωνο είναι 8 και παρακάτω στον κώδικα η μεταβλητή αυτή χρησιμοποιείτε για να κρίνουμε εάν μια θέση είναι έγκυρη για να πάει ο ίππος εάν το πλήθος των θέσεων που είναι προσκείμενες σε αυτή είναι μικρότερο από τον αριθμό της moves. for(int e=0;e<8;e++) { xtemp=x+xmove[order[e]-1]; ytemp=y+ymove[order[e]-1]; move_check(n, xtemp, ytemp, &xmax, &ymax, &moves, &invalidmove,*pin); Πίνακας 15 - Εξέταση όλων των θέσεων που είναι προσκείμενες στην θέση που βρίσκετε ο ίππος και εύρεση επόμενης η τερματισμός της επανάληψης Εδώ έχουμε μία επανάληψη που τρέχει πάντα ακριβώς οχτώ φορές, μια φορά για κάθε κίνηση που μπορεί να κάνει ο ίππος. Οι μεταβλητές xtemp και ytemp περιέχουν την θέση που θα περάσει στην συνάρτηση move_check() για να συγκριθεί με την καλύτερη θέση που έχει βρεθεί μέχρι εκείνη την στιγμή. Ο πίνακας order[] περιέχει την σειρά με την οποία λύνονται οι ισοπαλίες. Αλλάζοντας την σειρά στον order[] αλάζει ο τρόπος που λύνονται οι ισοπαλίες και κατά συνέπια αλλάζουν και οι διαδρομές που 32

33 βρίσκουμε. Η σύγκριση μεταξύ των παρακείμενων της θέση του ίππου γίνεται στην συνάρτηση move_check() που θα περιγραφεί παρακάτω. if(invalidmove==8) break; x=xmax; y=ymax; pin[x][y]=101+i; Πίνακας 16 - Έξοδος από την επανάληψη Εάν η invalidmove γίνει 8 σημαίνει ότι ενώ υπάρχουν ελεύθερες θέσεις στην σκακιέρα εάν δεν υπήρχαν θα είχε τελειώσει η εξωτερική επανάληψη δεν υπάρχουν παρακείμενες θέσεις για να συνεχίσει ο ίππος την διαδρομή και έτσι τελειώνει πρόωρα η εξωτερική επανάληψη. Τα xmax και ymax δείχνουν την θέση στην οποία θα κινηθεί ο ίππος και καταχωρούνται στα x και y αντίστοιχα τα οποία μπαίνουν στο πίνακα pin[x][y] για να αλλάξει τον νούμερο του πίνακα σε αυτή τη θέση. Μέχρι να «πατήσει» ο ίππος σε μία θέση, αυτή περιέχει τον αριθμό των ελεύθερων παρακείμενων θέσεων της, ενώ μετά περιέχει έναν αριθμό που δείχνει την σειρά κατά την οποία ο ίππος πέρασε από εκεί συν 100 για να μην μπερδεύονται οι πρώτες 8 θέσεις της διαδρομής με τις παρακείμενες των υπολοίπων θέσεων. for(int e=0;e<8;e++) { xtemp=x+xmove[e]; ytemp=y+ymove[e]; board_respec(n,xtemp, ytemp, *pin); Πίνακας 17 - Επαναϋπολογισμός θέσεων σκακιέρας Άλλη μία επανάληψη που τρέχει πάντα 8 φορές, η οποία αυτή τη φορά περνάει στην συνάρτηση board_respec() τις παρακείμενες της θέσης που βρήκε ο αλγόριθμος ως επόμενη για τον ίππο, έτσι ώστε να μειώσει τα νούμερα του πίνακα pin[][] που υποδεικνύουν τον βαθμό τους. for(int d=0;d<n;d++) { for(int f=0;f<m;f++) { pin[d][f]=pin[d][f]-99; if(pin[d][f]<0) { check++; pin[d][f]=0; printf("%3d ",pin[d][f]); printf("\n"); Πίνακας 18 - Εκτύπωση διαδρομής στο command window Μετά τον υπολογισμό της διαδρομής ο πίνακας pin[][] περιέχει κάποια νούμερα πάνω από το 100 και, εάν η διαδρομή δεν είναι ολοκληρωμένη, κάποια νούμερα μονοψήφια. Εδώ έχουμε δυο επαναλήψεις, μια εξωτερική και μία εμφωλευμένη, οι οποίες διατρέχουν τον pin και αφαιρούν από όλα τα νούμερα 99. Έτσι η διαδρομή του ίππου αντιπροσωπεύεται από νούμερα με το 1 να είναι η αρχική θέση του ίππου και να φτάνει στο NxN ή, εάν είναι ανολοκλήρωτη, να φτάνει μέχρι εκεί που ο ίππος βρέθηκε σε αδιέξοδο με τα υπόλοιπα νούμερα να είναι αρνητικά. Μετά, αφού έχει κάνει τα αρνητικά νούμερα 0, εκτυπώνει τον πίνακα στο command window όπως θα φαίνονταν πάνω σε μία σκακιέρα. 33

34 printf("\nboard size = %dx%d\nstart square %d,%d\nend square %d,%d\nunvisited squares = %d",m,n,startx+1,starty+1,xmax+1, ymax+1,check); if ((abs(startx-xmax) == 1 && abs(starty-ymax) == 2) (abs(startx-xmax) == 2 && abs(starty-ymax) == 1)) { printf("\npath is closed."); else { printf("\npath is open."); Πίνακας 19 - Εκτύπωση στατιστικών αποτελεσμάτων Στο τέλος της συνάρτησης εκτυπώνονται κάποια στατιστικά στοιχεία για την διαδρομή. Μέγεθος σκακιέρας. Αρχική θέση ίππου. Τελική θέση ίππου. Πλήθος θέσεων που δεν τα επισπεύτηκε ο ίππος. Μήνυμα για το εάν η διαδρομή είναι κλειστή ή ανοιχτή αφού υπολογιστεί εάν το πρώτο και το τελευταίο τετράγωνο βρίσκονται σε παρακείμενες θέσεις. std::ofstream os(fname); for(int d=0;d<n;d++) { for(int f=0;f<m;f++) { os << pin[d][f]<<" "; os <<"\n"; Πίνακας 20 - Αποθήκευση διαδρομής σε αρχείο κειμένου Για περεταίρω επεξεργασία της διαδρομής την αποθηκεύουμε σε ένα αρχείο κειμένου, εδώ έχει όνομα «F:\output.txt», με την ίδια μορφή που τυπώνεται στο command window όπως φαίνεται ποιο πάνω στην συνάρτηση. Παρακάτω ακολουθεί περιγραφή των υπολοίπων συναρτήσεων. Λόγο της ομοιότητας τους με την problemknight01_1 θα περιγράφονται μόνο οι διαφορές και οι πρόσθετες λειτουργίες τους Συνάρτηση problemknight01_2 Η συνάρτηση αυτή χρησιμοποιείτε για την οπτικοποίηση των βημάτων του υπολογισμού της διαδρομής του ίππου. Καλούνται κάποια αρχεία του συστήματος για να μπορέσουμε να χρωματίσουμε συγκεκριμένα στοιχεία μέσα στο command window. HANDLE h = GetStdHandle ( STD_OUTPUT_HANDLE ); WORD woldcolorattrs; CONSOLE_SCREEN_BUFFER_INFO csbiinfo; GetConsoleScreenBufferInfo(h, &csbiinfo); woldcolorattrs = csbiinfo.wattributes; Πίνακας 21 - Κλήση και αρχικοποίηση αρχείων συστήματος Μετά τον υπολογισμό κάθε βήματος στην διαδρομή καθαρίζεται το command window και τυπώνεται το εκάστοτε στιγμιότυπο της διαδρομής. Η τρέχουσα θέση του 34

35 ίππου αντιπροσωπεύεται από το νούμερο που δείχνει την σειρά της θέσης αυτής στην διαδρομή χρωματισμένο γαλάζιο σε πράσινο πλαίσιο. Οι παρακείμενες θέσεις έχουν πράσινο χρώμα. for(d=0;d<n;d++) { for(f=0;f<m;f++) { if (((abs(x-d) == 1 && abs(y-f) == 2) (abs(x-d) == 2 && abs(yf) == 1)) && pin[d][f]<9) { SetConsoleTextAttribute ( h, FOREGROUND_GREEN FOREGROUND_INTENSITY ); printf("%3d ",pin[d][f]); SetConsoleTextAttribute ( h, woldcolorattrs); else if (x == d && y == f) { SetConsoleTextAttribute ( h, 0x00023 FOREGROUND_INTENSITY ); printf("%3d ",pin[d][f]); SetConsoleTextAttribute ( h, woldcolorattrs); else { printf("%3d ",pin[d][f]); printf("\n\n"); Πίνακας 22 - Χρωματισμός στιγμιότυπου Στο τέλος του υπολογισμού τυπώνεται η διαδρομή του ίππου, με το 1 που δηλώνει την αρχική θέση με πράσινο χρώμα και το NxN νούμερο που δηλώνει την τελευταία θέση με μπλε χρώμα. Εάν υπάρχουν θέσεις που δεν έχει επισκεφτεί ο ίππος τότε αυτές οι θέσεις γίνονται μηδέν και χρωματίζονται κόκκινες. system( "cls" ); for(d=0;d<n;d++) { for(f=0;f<m;f++) { pin[d][f]=pin[d][f]-100; if(pin[d][f]<0) { ++check; pin[d][f]=0; if (pin[d][f] == 1) { SetConsoleTextAttribute ( h, FOREGROUND_GREEN FOREGROUND_INTENSITY ); printf("%3d ",pin[d][f]); SetConsoleTextAttribute ( h, woldcolorattrs); else if(pin[d][f] == 0) { SetConsoleTextAttribute ( h, FOREGROUND_RED FOREGROUND_INTENSITY ); printf("%3d ",pin[d][f]); SetConsoleTextAttribute ( h, woldcolorattrs); else if(pin[d][f] == m*n) { SetConsoleTextAttribute ( h, FOREGROUND_BLUE FOREGROUND_INTENSITY ); printf("%3d ",pin[d][f]); SetConsoleTextAttribute ( h, woldcolorattrs); else { printf("%3d ",pin[d][f]); //debug line 35

36 printf("\n"); //debug line Πίνακας 23 - Επισήμανση αρχικής και τελικής θέσης 6.4. Συνάρτηση problemknight01_3 Αυτή η συνάρτηση είναι η πρώτη που χρησιμοποιεί και άλλες σειρές επιλογής σε περίπτωση ισοπαλιών εκτός της προεπιλεγόμενης. Η συγκεκριμένη δημιουργεί μια καινούργια τυχαία σειρά κάθε φορά που μία διαδρομή καταλήγει σε αδιέξοδο. time_t srand ( time(null) ); ch=0; reo=0; do { if (ch>0) { for(int b=0;b<8;b++) { order[b]=0; for(int b=0;b<8;b++) { do { ok=0; r=rand() % 8 + 1; for(int c=0;c<8;c++) if (order[c]==r) ok=1; while (ok==1); order[b]=r; for(int b=0;b<8;b++) { printf("%d",order[b]); printf("\n"); reo++; Πίνακας 24 - Δημιουργία τυχαίας σειράς Ο πίνακας order[] περιέχει την σειρά που λύνονται οι ισοπαλίες. Για να υπολογιστεί μία τυχαία, πρώτα μηδενίζουμε τον πίνακα και μετά τοποθετούμε σε κάθε θέση του ένα τυχαίο νούμερο από 1 έως το 8. Σε κάθε θέση μετά την πρώτη τσεκάρουμε εάν το νούμερο που θέλουμε να τοποθετήσουμε υπάρχει σε κάποια προηγούμενη θέση, εάν υπάρχει τότε παίρνουμε έναν άλλο τυχαίο αριθμό και επαναλαμβάνουμε την διαδικασία μέχρι να βρούμε κάποιον που δεν έχει χρησιμοποιηθεί ήδη. if (check==0) { ch=10; else { ch++; while (ch<10); if(check==0) { valids++; else { nonvalids++; 36

37 Πίνακας 25 - Επανάληψη εύρεσης διαδρομής με καινούργια τυχαία σειρά Η μεταβλητή check μηδενίζεται στην αρχή της συνάρτησης και εάν παραμείνει μηδέν τότε έχει βρεθεί μία ολοκληρωμένη διαδρομή του ίππου και κάνει την ch ίση με 10 για να βγει το πρόγραμμα από την do while επανάληψη. Εάν δεν είναι μηδέν τότε ανεβάζει την ch κατά ένα και επαναλαμβάνει την εύρεση διαδρομής. Αυτό γίνεται το πολύ δέκα φορές στην συγκεκριμένη περίπτωση αλλά μπορούμε να το κάνουμε όσες φορές θέλουμε. Εάν βρεθεί ολοκληρωμένη διαδρομή τότε η valids ανεβαίνει κατά ένα αλλιώς ανεβαίνει η nonvalids, για να έχουμε στο τέλος στατιστικά στοιχεία για τις διαδρομές που βρέθηκαν. printf("\nboard size = %dx%d\nstart square %d,%d\nend square %d,%d\nunvisited squares = %d\nreordered %d times",m,n,startx,starty,xmax+1, ymax+1,check,reo); if ((abs(startx-1-xmax) == 1 && abs(starty-1-ymax) == 2) (abs(startx- 1-xmax) == 2 && abs(starty-1-ymax) == 1)) { printf("\npath is closed."); else { printf("\npath is open."); Πίνακας 26 - Εκτύπωση δεδομένων Στο τέλος τυπώνεται στο command window το μέγεθος της σκακιέρας, η αρχική και τελική θέση, πόσα τετράγωνα δεν επισπεύτηκε ο ίππος, πόσες φορές υπολογίστηκε άλλη σειρά επίλυσης ισοπαλιών και το εάν η διαδρομή είναι κλειστή η όχι. Εικόνα 9 - Παράδειγμα τυχαίας αλλαγής σειράς 37

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

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

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

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

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

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

Δομές Δεδομένων & Αλγόριθμοι - Πίνακες 1 Πίνακες Οι πίνακες έχουν σταθερό μέγεθος και τύπο δεδομένων. Βασικά πλεονεκτήματά τους είναι η απλότητα προγραμματισμού τους και η ταχύτητα. Ωστόσο δεν παρέχουν την ευελιξία η οποία απαιτείται

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

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

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

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

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

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

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

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

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

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

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

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

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

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

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

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

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

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

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

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη. Εργαστήριο 4: 4.1 Η Δομή Ελέγχου if Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη. Γενική Μορφή: Παρατηρήσεις:

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

Υπολογισμός - Εντολές Επανάληψης

Υπολογισμός - Εντολές Επανάληψης Προγραμματισμός Η/Υ Ι Υπολογισμός - Εντολές Επανάληψης ΕΛΕΥΘΕΡΙΟΣ ΚΟΣΜΑΣ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2018-2019 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. 1 Περίληψη Σήμερα... θα συνεχίσουμε τη συζήτησή μας για τα βασικά στοιχεία

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

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

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

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

Επίλυση Προβλημάτων με Χρωματισμό. Αλέξανδρος Γ. Συγκελάκης asygelakis@gmail.com

Επίλυση Προβλημάτων με Χρωματισμό. Αλέξανδρος Γ. Συγκελάκης asygelakis@gmail.com Επίλυση Προβλημάτων με Χρωματισμό Αλέξανδρος Γ. Συγκελάκης asygelakis@gmail.com 1 Η αφορμή συγγραφής της εργασίας Το παρακάτω πρόβλημα που τέθηκε στο Μεταπτυχιακό μάθημα «Θεωρία Αριθμών» το ακαδημαϊκό

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

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

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

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

Συστήματα Αναμονής (Queuing Systems)

Συστήματα Αναμονής (Queuing Systems) ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ - ΕΜΠ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧ. ΥΠΟΛΟΓΙΣΤΩΝ Τομέας Επικοινωνιών, Ηλεκτρονικής & Συστημάτων Πληροφορικής Εργαστήριο Διαχείρισης & Βέλτιστου Σχεδιασμού Δικτύων Τηλεματικής

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

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

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

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

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

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

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

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό 5 ο Εργαστήριο Λογικοί Τελεστές, Δομές Ελέγχου Λογικοί Τελεστές > μεγαλύτερο = μεγαλύτερο ή ίσο!= διαφορετικό Οι λογικοί τελεστές χρησιμοποιούνται για να ελέγξουμε

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

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C Master Mind εφαρμογή στη γλώσσα προγραμματισμού C Φεβρουάριος/Μάρτιος 2013 v. 0.1 Master-mind: κανόνες παιχνιδιού Στο master mind χρειάζεται να παράγονται κάθε φορά 4 τυχαία σύμβολα από ένα πλήθος 6 διαφορετικών

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

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

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Τμήμα Πληροφορικής & Επικοινωνιών Τομέας Υπολογιστικών Τεχνικών & Συστημάτων Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Ιωάννης Γεωργουδάκης - Πάρις Μαστοροκώστας Σεπτέμβριος 2011 ΠΕΡΙΕΧΟΜΕΝΑ

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:

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

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 2η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Βασικοί αριθμητικοί τύποι, μετατροπές τύπων και σταθερές. Πίνακες. Πίνακες

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών

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

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

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

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

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

1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB)

1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB) ΣΧΟΛΗ ΠΟΛΙΤΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΕΜΠ ΜΕΘΟΔΟΙ ΕΠΙΛΥΣΗΣ ΜΕ Η/Υ 1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB) Ν.Δ. Λαγαρός Μ. Φραγκιαδάκης Α. Στάμος Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

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

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

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

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

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

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

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

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

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

Λύσεις για τις ασκήσεις του lab5

Λύσεις για τις ασκήσεις του lab5 Εισαγωγή Λύσεις για τις ασκήσεις του lab5 Επειδή φάνηκε να υπάρχουν αρκετά προβλήματα σχετικά με τον τρόπο σκέψης για την επίλυση των προβλημάτων του lab5, θα συνοδεύσουμε τις λύσεις με αρκετές επεξηγήσεις,

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

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

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

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

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

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

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

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

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

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

Πληρουορική Γ Γσμμασίοσ

Πληρουορική Γ Γσμμασίοσ Πληρουορική Γ Γσμμασίοσ Προγραμματισμός και Αλγόριθμοι Από το και τημ Χελώμα στημ Ευριπίδης Βραχνός http://evripides.mysch.gr/ 2014 2015 1 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Ενότητα:

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5 ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5 Σημειώσεις βασισμένες στο βιβλίο Το MATLAB στην Υπολογιστική Επιστήμη και Τεχνολογία Μια Εισαγωγή Πίνακες (Arrays) [1/2] Δομές δεδομένων για την αποθήκευση δεδομένων υπό

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

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

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

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

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΗΠΕΙΡΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Τ.Ε. Εργαστήριο Επεξεργασία Εικόνας & Βίντεο 1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή Νικόλαος Γιαννακέας Άρτα 2018 1 Εισαγωγή Το Matlab

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. Ερωτήσεις προόδου C Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. #include // δίνει οδηγία στον compiler να // συμπεριλάβει την βιβλιοθήκη stdio int

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

Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB

Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB Εαρινό εξάμηνο 2018-2019 Τμήμα Μαθηματικών ΑΠΘ Διδάσκουσα: Αγγελική Παπάνα Μεταδιδακτορική Ερευνήτρια Πολυτεχνική σχολή, Α.Π.Θ. & Οικονομικό Τμήμα, Πανεπιστήμιο

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 2: Μεταβλητές και Σταθερές Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java

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

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

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

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

Βασικές Αρχές Προγραμματισμού

Βασικές Αρχές Προγραμματισμού Βασικές Αρχές Προγραμματισμού Κεφάλαιο 2 ΗγλώσσαC Ιστορική Αναδρομή ΗανάπτυξητηςC ξεκίνησε το 1972 στα εργαστήρια Bell από τον Dennis Ritchie με σκοπό την ανάπτυξη ενός λειτουργικού συστήματος για τον

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

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

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

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

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

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

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

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

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

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

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να αναπτύξουν ένα πρόγραμμα όπου θα επαναλάβουν τα βήματα ανάπτυξης μιας παραθυρικής εφαρμογής.

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

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1 Γλώσσα Προγραμματισμού C++ ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1 Τα δεδομένα Οι σταθερές Τα δεδομένα (πληροφορίες-data) είναι απαραίτητα στοιχεία ενός προγράμματος, καθώς οι βασικές λειτουργίες ενός προγράμματος είναι

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

Εργαστήριο Μαθηματικής Ανάλυσης Ι. Εισαγωγή στη Matlab Βασικές Συναρτήσεις-Γραφικές παραστάσεις. Πανεπιστήμιο Θεσσαλίας. Σχολή Θετικών Επιστημών

Εργαστήριο Μαθηματικής Ανάλυσης Ι. Εισαγωγή στη Matlab Βασικές Συναρτήσεις-Γραφικές παραστάσεις. Πανεπιστήμιο Θεσσαλίας. Σχολή Θετικών Επιστημών Πανεπιστήμιο Θεσσαλίας Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής με εφαρμογές στη Βιοϊατρική Εργαστήριο Μαθηματικής Ανάλυσης Ι Εισαγωγή στη Matlab Βασικές Συναρτήσεις-Γραφικές παραστάσεις Εισαγωγή στη

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

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;.. Επιλογή - Επανάληψη Η εντολή if-else Ο τελεστής παράστασης συνθήκης H εντολή switch Η εντολές for και while Η εντολή do-while Η εντολές break - continue - goto Μαθηματικές συναρτήσεις Λέξεις κλειδιά στη

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

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ C Προγραμματιστικές Ασκήσεις, Φυλλάδιο Εκφώνηση: 9/3/0 Παράδοση: 5/4/0,.59 Άσκηση 0 η : Το πρόβλημα της βελόνας του Buffon Θέμα της εργασίας

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

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript Β.1 Τύποι Δεδομένων Όλες οι γλώσσες προγραμματισμού (πρέπει να) υποστηρίζουν πέντε (5) πρωταρχικούς τύπους δεδομένων: char (character) int (integer)

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

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις 2 Ανατομία ενός προγράμματος

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργία Κλάσεων και Αντικειμένων Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων με κοινά χαρακτηριστικά και κοινή συμπεριφορά. Ένα καλούπι/πρότυπο

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός

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

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

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

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

Εισαγωγή στο MATLAB. Κολοβού Αθανασία, ΕΔΙΠ,

Εισαγωγή στο MATLAB. Κολοβού Αθανασία, ΕΔΙΠ, Εισαγωγή στο MATLAB Κολοβού Αθανασία, ΕΔΙΠ, akolovou@di.uoa.gr Εγκατάσταση του Matlab Διανέμεται ελεύθερα στα μέλη του ΕΚΠΑ το λογισμικό MATLAB με 75 ταυτόχρονες (concurrent) άδειες χρήσης. Μπορείτε να

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

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

Κεφάλαιο 1: Κίνηση και γεωμετρικά σχήματα

Κεφάλαιο 1: Κίνηση και γεωμετρικά σχήματα Ασκήσεις της Ενότητας 2 : Ζωγραφίζοντας με το ΒΥΟΒ -1- α. Η χρήση της πένας Κεφάλαιο 1: Κίνηση και γεωμετρικά σχήματα Υπάρχουν εντολές που μας επιτρέπουν να επιλέξουμε το χρώμα της πένας, καθώς και το

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

Κεφάλαιο 5. Το Συμπτωτικό Πολυώνυμο

Κεφάλαιο 5. Το Συμπτωτικό Πολυώνυμο Κεφάλαιο 5. Το Συμπτωτικό Πολυώνυμο Σύνοψη Στο κεφάλαιο αυτό παρουσιάζεται η ιδέα του συμπτωτικού πολυωνύμου, του πολυωνύμου, δηλαδή, που είναι του μικρότερου δυνατού βαθμού και που, για συγκεκριμένες,

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

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

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

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

Προγραμματισμός 2 Σημειώσεις εργαστηρίου Προγραμματισμός 2 Σημειώσεις εργαστηρίου 02-Java, Τύποι Δεδομένων ως Αντικείμενα Νεβράντζας Βάιος-Γερμανός Λάρισα, Μάρτιος 2013 02-iProgramminginJava, Τυ ποι δεδομε νων ως Αντικει μενα, σελίδα 1 Περίληψη

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

Τυπικές χρήσεις της Matlab

Τυπικές χρήσεις της Matlab Matlab Μάθημα 1 Τι είναι η Matlab Ολοκληρωμένο Περιβάλλον Περιβάλλον ανάπτυξης Διερμηνευμένη γλώσσα Υψηλή επίδοση Ευρύτητα εφαρμογών Ευκολία διατύπωσης Cross platform (Wintel, Unix, Mac) Τυπικές χρήσεις

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

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

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

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

5ο σετ σημειώσεων - Δείκτες

5ο σετ σημειώσεων - Δείκτες 5ο σετ σημειώσεων - Δείκτες 11 Ιουνίου 01 1 Γενικά Σύμφωνα με το γενικό μοντέλο υπολογιστή, ένας υπολογιστής είναι μία μηχανή που διαθέτει μία κεντρική μονάδα επεξεργασίας η οποία μπορεί μεταξύ άλλων να

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

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

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή ονάδα Δικτύων και Επικοινωνιών ΗΥ Τομέας Πληροφορικής, αθηματικών και Στατιστικής ΓΕΩΠΟΙΚΟ ΠΑΕΠΙΣΤΗΙΟ ΑΘΗΩ Εισαγωγή στην Επιστήμη των ΗΥ άθημα-4 url: http://openeclass.aua.gr (AOA0) Λογισμικό Υπολογιστή

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

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

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

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

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 ❶ Προετοιµασία για το 1 ο Εργαστήριο

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

Εισαγωγή στο Περιβάλλον Επιστημονικού Προγραμματισμού MATLAB-Simulink. Δημήτριος Τζεράνης Λεωνίδας Αλεξόπουλος

Εισαγωγή στο Περιβάλλον Επιστημονικού Προγραμματισμού MATLAB-Simulink. Δημήτριος Τζεράνης Λεωνίδας Αλεξόπουλος Εισαγωγή στο Περιβάλλον Επιστημονικού Προγραμματισμού MATLAB-Simulink Δημήτριος Τζεράνης Λεωνίδας Αλεξόπουλος 1 Τι είναι τα Matlab και Simulink? Το Matlab (MATrix LABoratory) είναι ένα περιβάλλον επιστημονικού

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

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα Αλφαριθμητικά Πίνακες: μια σύντομη εισαγωγή Πίνακες χαρακτήρων: τα "Αλφαριθμητικά" Πίνακες(Arrays): έννοιες και ορισμοί Ορισμός: Πίνακας (array) = σύνολο μεταβλητών του ιδίου τύπου (int, float, char,...) με ένα κοινό

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

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

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

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

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

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

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

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης Τα Εργαστηριακά Προγράμματα. Η δομή Επιλογής στη PASCAL. H δομή Επανάληψης στη PASCAL. Η εντολή επανάληψης for

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης Τα Εργαστηριακά Προγράμματα. Η δομή Επιλογής στη PASCAL. H δομή Επανάληψης στη PASCAL. Η εντολή επανάληψης for Εργαστήριο 6 Εντολές Επανάληψης Τα Εργαστηριακά Προγράμματα Η δομή Επιλογής στη PASCAL H δομή Επανάληψης στη PASCAL Η εντολή επανάληψης for Σκοπός Η εντολή επανάληψης while. 1 ΕΡΓΑΣΤΗΡΙΟ 6 Εισαγωγή στο

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

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες Προγραμματισμός Η/Υ Ι Υπολογισμός - - Πίνακες ΕΛΕΥΘΕΡΙΟΣ ΚΟΣΜΑΣ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2018-2019 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. 1 Περίληψη Σήμερα... θα συζητήσουμε τη χρήση του πίνακα (array) για τη συλλογή

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

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

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες. Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες. Η C, όπως έχουμε αναφέρει, είναι μια γλώσσα προγραμματισμού υψηλού επιπέδου η οποία αναπτύχθηκε για πρώτη φορά το 1972 από τον Dennis Ritchie στα AT&T Bell

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

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

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

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

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

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

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1 Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave Περιεχόμενο εργαστηρίου: - Το περιβάλλον ανάπτυξης προγραμμάτων Octave - Διαδικασία ανάπτυξης προγραμμάτων MATLAB - Απλά

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

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

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

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19) Κεφάλαιο 8.7 Πολυδιάστατοι Πίνακες (Διάλεξη 19) Πολυδιάστατοι πίνακες Μέχρι τώρα μιλούσαμε για Μονοδιάστατους Πίνακες. ή π.χ. int age[5]= {31,28,31,30,31; για Παράλληλους πίνακες, π.χ. int id[5] = {1029,1132,1031,9991,1513;

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

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

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

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

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης Γλώσσες Προγραμματισμού Εργαστήριο 2ο Τύποι Δεδομένων - Είσοδος / Έξοδος Εργαστήριο 2ο Περίγραμμα Εργαστηριακής Άσκησης Εργαστήριο 2ο...1 Θεωρία εργαστηρίου...2 Τύποι δεδομένων...2 Η συνάρτηση printf()...3

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