Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού ΙΙ

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

Download "Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού ΙΙ"

Transcript

1 Πανεπιστήµιο Αιγαίου Τµήµα Μηχανικών Σχεδίασης Προϊόντων & Συστηµάτων Σηµειώσεις για το µάθηµα Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού ΙΙ εξάµηνο Ιωάννης Γαβιώτης, Στόχοι του µαθήµατος Οι φοιτητές που θα ολοκληρώσουν αυτό το µάθηµα: θα αναπτύξουν δεξιότητα στην επίλυση προβληµάτων µε υπολογιστές, θα ασκηθούν στη σχεδίαση και υλοποίηση ευανάγνωστων, τεκ- µηριωµένων και αποδοτικών προγραµµάτων, θα ελέγχουν την ορθότητα των προγραµµάτων και την καταλληλότητά τους σε σχέση µε το πρόβληµα και το χρήστη, θα γνωρίσουν το συντακτικό και θα κατανοήσουν τη σηµασιολογία των τυπικών προγραµµατιστικών δοµών, όπως η ανάθεση, η επιλογή, η επανάληψη, θα γνωρίσουν τους βασικούς τύπους δεδοµένων και τη δυνατότητα ορισµού νέων, θα κατανοήσουν τη χρήση απλών δοµών δεδοµένων, όπως πίνακες, διανύσµατα, συλλογές, θα γνωρίζουν το µηχανισµό ορισµού, έγερσης και εξυπηρέτησης εξαιρέσεων, θα αναπτύσσουν γραφικές διεπαφές για κλασικές εφαρµογές και για εφαρµογίδια (applets) που εκτελούνται ενσωµατωµένα σε ι- στοσελίδες, θα εισαχθούν στον αντικειµενοστρεφή προγραµµατισµό µε τον ορισµό κλάσεων και των ιδιοτήτων τους, τη στιγµιοποίηση (instantiation) αντικειµένων και την ανταλλαγή µηνυµάτων, θα εφαρµόζουν τις αρχές της αντικειµενοστρεφούς σχεδίασης, όπως η ενθυλάκωση (encapsulation), ο πολυµορφισµός και η κληρονοµικότητα, και τέλος θα αποκτήσουν αίσθηση της πολυπλοκότητας των λειτουργιών ενός αλγορίθµου. Θα χρησιµοποιηθεί η γλώσσα προγραµµατισµού Java. Η συγκεκριµένη γλώσσα λειτουργεί ως όχηµα για την κατανόηση των αρχών, εννοιών, τεχνικών και µεθόδων που περιγράφονται στο µάθηµα. Ωστόσο, οι φοιτητές θα αποκτήσουν τη δυνατότητα να εφαρµόζουν όλα αυτά σε διάφορα περιβάλλοντα ανάπτυξης και γλώσσες. Περιεχόµενα 1 Εισαγωγή στη Java 2 Αντικειµενοστρεφής προγραµµατισµός 3 Προγραµµατισµός για το ιαδίκτυο 4 Σχεδίαση προγράµµατος 5 Ανάπτυξη διεπαφής χρήστη 6 Σύνταξη γλωσσών 7 Παραποµπές 8 Ευρετήριο ασκήσεων & πρακτικής (µε αριθµό σελίδας) 9 εσµευµένες λέξεις της Java Ύλη Φάσεις ανάπτυξης προγραµµάτων - Ενδιάµεση γλώσσα και ιδεατή µηχανή Περιβάλλοντα ανάπτυξης - Ασφάλεια κώδικα που εκτελείται αποµακρυσµένα - Σύγκριση µεταγλωττιστών και διερµηνευτών Αναγνωσιµότητα, σχόλια, οδόντωση κώδικα Συντάκτης κατευθυνόµενου συντακτικού Στρατηγικές επίλυσης προβληµάτων - Ο ρόλος των αλγορίθµων στη διαδικασία επίλυσης προβληµάτων - Στρατηγικές υλοποίησης για αλγόριθµους Εκσφαλµάτωση - Τεκµηρίωση Βασικό συντακτικό και σηµασιολογία γλωσσών υψηλού επιπέδου - Μεταβλητές, σταθερές, τύποι δεδοµένων, παραστάσεις, ανάθεση Απλή είσοδος / έξοδος - οµές ελέγχου επιλογής και επανάληψης - Πίνακες - Αντικείµενα Συµβολοσειρές, επεξεργασία συµβολοσειρών Μηχανισµοί αφαίρεσης - Βαθµιαία αποδόµηση - Μέθοδοι και πέρασµα παραµέτρων - Αντικειµενοστρεφής σχεδίαση - Κλάσεις, αντικείµενα, ιδιότητες, µέθοδοι - Ενθυλάκωση και απόκρυψη πληροφορίας - ιαχωρισµός συµπεριφοράς και υλοποίησης Κατασκευαστές, µέθοδοι ανάγνωσης, εγγραφής - Κληρονοµικότητα - Πολυµορφισµός Εκχώρηση µνήµης, συλλογή απορριµµάτων ιάρκεια ζωής, εµβέλεια ονοµάτων - Αναδροµή, αναδροµικές µαθηµατικές συναρτήσεις, στρατηγική «διαίρει και βασίλευε» Εφαρµογίδια Στοιχεία γραφικής διεπαφής χρήστη - Μέθοδοι χειρισµού συµβάντων - Μετάδοση συµβάντων Προαπαιτήσεις Οι φοιτητές πρέπει να έχουν τις βασικές γνώσεις για υπολογιστές, το ιαδίκτυο και προγραµµατισµό. Τα σχετικά µαθήµατα είναι «Πληροφορική Ι» (1151), «Πληροφορική ΙΙ» (2152) και «Τεχνολογίες Μεθοδολογίες Προγραµµατισµού Ι» (3150). Ειδικότερα, θα πρέπει να γνωρίζουν τις έννοιες µεταβλητών, σταθερών και τύπων δεδοµένων, τη σηµασιολογία των τυπικών δοµών ελέγχου (if-then-else, for, while, select) και τις αρχές του δοµηµένου προγραµµατισµού (ορισµός & κλήση υποπρογραµµάτων, πέρασµα παραµέτρων).

2 Σελίδα 2 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 3/3/ Εισαγωγή στη Java 1.1 Ιστορικό Η γλώσσα Java (= Ιάβα, το νησί 1 ) ξεκίνησε το 1991 µε την ονοµασία Oak από µια οµάδα της εταιρίας Sun µε υπεύθυνο τον James Gosling και µε σκοπό τον αυτοµατισµό οικιακών συσκευών. Το 1994 η οµάδα επαναπροσδιορίζει τη Java µε στόχο το ιαδίκτυο. Η Java αναγγέλθηκε επίσηµα την 23 η Μαΐου 1995, στο συνέδριο SunWorld. Τότε η οµάδα ανάπτυξης αποτελούνταν από 30 άτοµα, δείτε στο Το 1995 το πρόγραµµα επόπτευσης ιστοσελίδων Netscape Navigator 2.0 δίνει τη δυνατότητα της εκτέλεσης προγραµµάτων Java µέσα από ιστοσελίδες. Έτσι προσφέρει τη δυνατότητα δυναµικού περιεχοµένου και διαδραστικής συµπεριφοράς στις κατά τα άλλα στατι- Εικόνα 1 Το λογότυπο και η µασκότ κές ιστοσελίδες HTML. Αργότερα η Microsoft ενσωµατώνει στο δικό της πρόγραµµα πλοήγησης, τον Internet Explorer 4.0, µια ιδεατή µηχανή Java µέσω της οποίας µπορούν να εκτελεστούν εφαρµογίδια γραµµένα σε Java, αλλά µε παραλλαγές που ακυρώνουν την φιλοσοφία «run-anywhere». Η Sun µηνύει τη Microsoft και κερδίζει τη δίκη. Μέχρι το Φεβρουάριο του 2003 οι δύο εταιρίες βρίσκονται στα δικαστήρια για το αν τα Windows θα πρέπει να υποστηρίζουν την εκτέλεση προγραµµάτων Java ή αν αυτό το χαρακτηριστικό θα εγκαθίσταται κατ απαίτηση από το ιαδίκτυο. Πίσω από αυτή τη διένεξη βρίσκεται η βούληση της Microsoft να επιβάλλει τη δική της ενδιάµεση πλατφόρµα εκτέλεσης προγραµµάτων. Η Java σχεδιάστηκε µε στόχο να είναι (α) αντικειµενοστρεφής, (β) κατανεµηµένη (distributed), (γ) απλή, (δ) πολυνη- µατική (multi-threaded), (ε) ασφαλής, (στ) ανεξάρτητη υπολογιστικής πλατφόρµας. Η Java υποστηρίζει εγγενώς τις αρχές του αντικειµενοστρεφούς προγραµµατισµού που θα αναλύσουµε από το ε- πόµενο κεφάλαιο. Σε αντιδιαστολή, οι Basic και C είναι διαδικαστικές γλώσσες (procedural languages) βασισµένες στο µοντέλο του δοµηµένου προγραµµατισµού (structured programming). Η Java είναι µια πλήρης γλώσσα προγραµµατισµού. Υποστηρίζει εξαιρέσεις, νηµατική εκτέλεση (threaded execution), κά. Επίσης παρέχει τυποποιηµένες βιβλιοθήκες κλάσεων (Java class libraries) µέσω των οποίων υποστηρίζονται γραφικά και γραφικές διεπαφές (Graphical User Interface, GUI), πολυµέσα, επικοινωνία πάνω σε δίκτυα, επαναχρησιµοποιούµενα εξαρτήµατα (components), σύνδεση µε βάσεις δεδοµένων, κά. Το κύριο χαρακτηριστικό των προγραµµάτων Java είναι ότι εκτελούνται στο ιαδίκτυο σε περιβάλλον πλοηγητή ιστοσελίδων (web browser), καθώς και σε διάφορες (από πλευράς υλικού και λειτουργικού συστήµατος) υπολογιστικές πλατφόρµες στις οποίες περιλαµβάνονται υπολογιστές, ραδιόφωνα και κινητά τηλέφωνα. Αυτή η φιλοσοφία αποκαλείται Write Once Run Anywhere, WORA ή σε ελεύθερη απόδοση γράφεις-άπαξ-εκτελείται-παντού. Ακόµη κι όταν ένα πρόγραµµα Java λειτουργεί σε διαφορετικές υπολογιστικές πλατφόρµες, στην πραγµατικότητα εκτελείται πάνω στην ίδια «µηχανή» την ιδεατή µηχανή Java (Java Virtual Machine, JVM). Η ιδεατή µηχανή Java είναι ένα πρόγραµµα που διερµηνεύει τα εκτελέσιµα προγράµµατα Java σε εντολές που µπορεί να εκτελέσει η υπολογιστική πλατφόρµα - στόχος. Η Sun έχει παραχωρήσει σε αρκετές εταιρίες (Oracle, Novell, IBM, κά) την άδεια να κατασκευάσουν ιδεατές µηχανές Java για διάφορες υπολογιστικές πλατφόρµες. Καθώς η ιδεατή µηχανή Java έχει µεταφερθεί σε µεγάλη γκάµα από υπολογιστικές πλατφόρµες και είναι ευρέως εγκατεστηµένη, δηµιουργούνται συνεχώς νέες γλώσσες προγραµµατισµού ή παραλλαγές παλαιότερων γλωσσών προγραµµατισµού (Basic, Lisp, Prolog) που µεταγλωττίζονται ώστε το πρόγραµµα στόχος να εκτελείται στην ιδεατή µηχανή Java. Σύµφωνα µε µια πρόσφατη καταµέτρηση (http://www.robert-tolksdorf.de/vmlanguages.html), υπάρχουν 200 τέτοια εργαλεία που δίνουν τη δυνατότητα σε πηγαίο κώδικα που δεν είναι Java να µεταφράζεται και να εκτελείται στην ιδεατή µηχανή Java. Παρά τις διαφορές που έχουν όλες οι υπολογιστικές πλατφόρµες, εντάσσονται στο ίδιο ιδεατό υπολογιστικό µοντέλο: το εκτελέσιµο πρόγραµµα ανακαλείται από τη δευτερεύουσα µνήµη, που είναι συνήθως παραµένουσα (nonvolatile), πχ δίσκος ή µνήµη flash, στην πρωτεύουσα ευµετάβλητη (volatile) µνήµη τυχαίας προσπέλασης, πχ RAM, και από εκεί µεταφέρεται εντολή προς εντολή στην κεντρική µονάδα επεξεργασίας. Παρατηρήστε ότι λεπτοµέρειες, όπως το µέγεθος της µνήµης, η ύπαρξη καταχωρητών (registers), τα χαρακτηριστικά των µονάδων εισόδου / εξόδου, σκόπιµα δεν περιλαµβάνονται στις προδιαγραφές του αφαιρετικού µοντέλου. Πατρίδα της Java στο ιαδίκτυο είναι το Μπορείτε να το επισκεφθείτε για να ενηµερωθείτε για τις τρέχουσες εκδόσεις της γλώσσας, εκπαιδευτικό υλικό (tutorials), παραδείγµατα, κλπ. Για να αναπτύξετε προγράµµατα χρειάζεται το Java Development Kit, του οποίου η τρέχουσα έκδοση (JDK 5.0 Update 6, Φεβρουάριος ) είναι ~56Mb. Για να εκτελέσετε προγράµµατα, χρειάζεται το Java Runtime Environment, του οποίου η τρέχουσα έκδοση (JRE 5.0 Update 6) είναι ~16Mb, ανάλογα µε την πλατφόρµα. Το JRE αποτελείται από τη JVM και τις τυποποιηµένες βιβλιοθήκες κλάσεων. 1 Το όνοµα προέκυψε καθώς κάποια µέλη της οµάδας ανάπτυξης έπιναν καφέ σε µια καφετέρια. Έτσι εξηγείται και το λογότυπο που είναι µια κούπα αχνιστού καφέ (Εικόνα 1). Στην αρχική επίδειξη της Java προβαλλόταν µέσα σε µια ιστοσελίδα µια κινούµενη φιγούρα, ο Duke, που έγινε η µασκότ της γλώσσας. 2 Η αρίθµηση των εκδόσεων είναι λίγο ανώµαλη. Η προηγούµενη έκδοση ήταν η Όπου αναφέρεται έκδοση και µέγεθος, το πρόγραµµα είναι ε- λεύθερα διαθέσιµο (downloadable) από το ιαδίκτυο.

3 3/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 3 Υπάρχουν εκδόσεις του περιβάλλοντος Java για Windows, Linux, Solaris, MacOS, κά. Στο υπάρχει ένας οδηγός εκµάθησης µε πολλά παραδείγµατα κώδικα, τόσο για τη βασική χρήση της γλώσσας Java, όσο και για εξειδικευµένα θέµατα, πχ ανάπτυξη γραφικών διεπαφών χρήστη, γραφικά, ήχο, κά. Μια άλλη πηγή πληροφόρησης είναι το ενώ πολλά προγράµµατα µπορείτε να βρείτε στο 1.2 Φάσεις ανάπτυξης Για να εκτελεστούν τα προγράµ- µατα της Java περνούν από πέντε φάσεις: σύνταξη (edit), µεταγλώττιση (compile), φόρτωση (load), εξακρίβωση (verify), και εκτέλεση (execute). Στην πρώτη φάση ο προγραµµατιστής συγγράφει τον πηγαίο κώδικα (source code) ακολουθώντας τους κανόνες σύνταξης της γλώσσας. Ο πηγαίος κώδικας αποθηκεύεται ως αρχείο που έχει όνοµα το όνοµα της κλάσης που υλοποιεί και κατάληξη.java. Αρκεί ένας συντάκτης κειµένου (text editor), αλλά συνήθως χρησιµοποιείται συντάκτης κατευθυνόµενου συντακτικού (syntaxdirected editor), όπως ο jedit (www.jedit.org, έκδοση 4.2, ~2Mb) που είναι και ο ίδιος γραµµένος σε Java! Αυτές οι εφαρµογές έχουν «αντίληψη» του συντακτικού των εντολών και αναγνωρίζουν τις δεσµευµένες λέξεις της γλώσσας. Έτσι παρέχουν ευκολίες, όπως προκατασκευασµένους σκελετούς προγράµµατος, χρωµατισµό του κειµένου ώστε να διακρίνονται οι δεσµευµένες λέξεις από ονόµατα, αυτόµατη οδόντωση, ένδειξη ζευγαρώµατος για παρενθέσεις και αγκύλες. Εικόνα 3 Οι εντολές µεταγλώττισης και εκτέλεσης Ο συντάκτης µπορεί να είναι ενσωµατωµένος σε ένα ολοκληρωµένο περιβάλλον ανάπτυξης (Integrated Development Environment, IDE), όπως το netbeans (www.netbeans.org, έκδοση 5, ~60Mb) της Sun, το Eclipse (www.eclipse.org, έκδοση 3.1.2, ~103Mb), ή το JBuilder (www.borland.com/jbuilder, έκδοση 2005 Foundation, ~100Mb) της Borland. Τέτοια περιβάλλοντα παρέχουν εργαλεία για εύκολη ανάπτυξη γραφικών διεπαφών (GUI designer), επόπτες ιεραρχίας και τεκµηρίωσης κλάσεων, έλεγχο εκδόσεων (version control), δυνατότητα εκτέλεσης γραµµή-προς-γραµµή, εκσφαλµάτωση µε σηµεία διακοπής (breakpoints), κά. Το BlueJ (www.bluej.org, έκδοση 2.1.2, 3Mb) είναι ένα ολοκληρωµένο περιβάλλον ανάπτυξης σχεδιασµένο για εκπαιδευτικούς σκοπούς. Είναι εξαιρετικά απλό στη χρήση και οπτικοποιεί τη δοµή των κλάσεων µε διαγράµµατα προάγοντας την αντικειµενοστρεφή προσέγγιση. Απαιτεί να είναι εγκατεστηµένο το JDK. Όποιο περιβάλλον ανάπτυξης κι αν χρησιµοποιείται, το πηγαίο πρόγραµµα πρέπει να µετατραπεί σε κώδικα που να είναι κατανοητός και εκτελέσιµος από την ιδεατή µηχανή Java. Αυτή τη λειτουργία κάνει ο µεταγλωττιστής javac, δηλαδή παράγει το οµώνυµο αρχείο bytecode, µόνο που αυτό έχει κατάληξη.class. Το αρχείο αυτό περιέχει εντολές της ιδεατής µηχανής Java και µπορεί να είναι µια εφαρµογή ή ένα εφαρµογίδιο (applet). Όταν ο µεταγλωττιστής ανακοινώνει σφάλµα µετάφρασης, το πρόβληµα συνήθως είναι στην γραµµή που αναφέρεται, αλλά µπορεί να εκδηλώνεται εκεί εξαιτίας σφάλµατος σε προηγού- µενη γραµµή. Τα προγράµµατα που φορτώνονται από το δίκτυο ελέγχονται από τον εξακριβωτή (verifier) bytecode. Αυτό το βήµα είναι απαραίτητο για να ελεγχθεί ότι ο bytecode δεν παραβιάζει τις αρχές ασφαλείας της γλώσσας, πχ απαγορεύεται σε εφαρµογίδια να Εικόνα 2 Μετάφραση και εκτέλεση προγράµµατος C:\>type hello.java public class hello { public static void main(string[] args) { System.out.println("hello world"); C:\>javac hello.java C:\>dir hello.*... 25/02/ :14 µµ 415 hello.class 25/02/ :09 µµ 118 hello.java... C:\>java hello hello world Εικόνα 4 Ο ίδιος bytecode, χωρίς επαναµεταγλώττιση, εκτελείται σε όλες τις πλατφόρµες.

4 Σελίδα 4 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 3/3/2006 κάνουν ανάγνωση ή εγγραφή στον τοπικό σκληρό δίσκο. Κανονικά, ο µεταγλωττιστής ελέγχει τον πηγαίο κώδικα και παράγει ασφαλή bytecode. Είναι όµως δυνατόν να χρησιµοποιηθεί µεταγλωττιστής που δεν είναι πιστοποιηµένος από πλευράς ασφάλειας, ή κάποιος να «πειράξει» τον bytecode. Έτσι ένα πρόγραµµα bytecode δεν µπορεί να θεωρηθεί ασφαλές, γι αυτό και είναι απαραίτητη η εξακρίβωση του bytecode αµέσως πριν την εκτέλεσή του. Η ιδεατή µηχανή Java εκτελεί τα προγράµµατα Java, διερµηνεύοντας τον bytecode, δηλαδή µετατρέπει τις εντολές που περιέχονται στο.class αρχείο σε εντολές που της πλατφόρµας (πχ υπολογιστής Intel+Linux, ή κινητό SonyEricsson+Symbian) πάνω στην οποία λειτουργεί η ιδεατή µηχανή. Τα προγράµµατα Java τα διακρίνουµε σε εφαρµογές και εφαρµογίδια. Οι εφαρµογές (applications) που εκτελούνται κατευθείαν πάνω στην πλατφόρµα-στόχος. Τα εφαρµογίδια (applets) µπορούν να κληθούν από µια ιστοσελίδα και να εκτελεστούν από ή κάποιον επόπτη (browser) ιστοσελίδων που έχει εγκατεστηµένη την ιδεατή µηχανή Java ή για δοκιµαστικούς λόγους από το βοηθητικό πρόγραµµα appletviewer. Ένα µειονέκτηµα της Java είναι οι µειωµένες επιδόσεις εκτέλεσης των προγραµµάτων της. Τα εκτελέσιµα αρχεία που παράγουν οι µεταγλωττιστές άλλων γλωσσών προγραµµατισµού περιέχουν κώδικα σε γλώσσα µηχανής που ε- κτελείται εγγενώς στην υπολογιστική πλατφόρµα-στόχος (native machine language). Ένα πρόγραµµα Java είναι πιο αργό, επειδή ο Java bytecode διερµηνεύεται από την ιδεατή µηχανή για να µετατραπεί σε γλώσσα µηχανής. Η τεχνική της ιδεατής µηχανής έχει χρησιµοποιηθεί και παλιότερα: οι γλώσσες Pascal και Visual Basic µεταφράζονται σε έναν ενδιάµεσο κώδικα που ονοµάζεται p-code. Επίσης, η γλώσσα µηχανής των µικροεπεξεργαστών CISC (Complex Instruction Set Computer) δεν εκτελείται στην πραγµατικότητα από το hardware του µικροεπεξεργαστή, αλλά διερµηνεύεται σε µικροκώδικα (microcode) που τελικά εκτελείται στα υποσυστήµατα της CPU. Ένα πλεονέκτηµα της µεταγλώττισης σε bytecode είναι ότι το.class αρχείο είναι µικρότερο µε µέγεθος - τυπικά το µισό - από το αντίστοιχο αρχείο γλώσσας µηχανής που προκύπτει από τη µεταγλώττιση ενός C/C++ προγράµµατος (δείτε Εικόνα 3). 1.3 Το βασικό λεξιλόγιο Μια ενότητα κώδικα, ένα πρόγραµµα κατά την ορολογία των διαδικαστικών γλωσσών προγραµµατισµού, ονοµάζεται κλάση (class). Οι υπορουτίνες της ονοµάζονται µέθοδοι (methods). Μια κλάση µπορεί να ορίζει µεθόδους για δική της χρήση (ιδιωτικές µέθοδοι) ή για χρήση από άλλες κλάσεις (δηµόσιες µέθοδοι). Όταν καλούµε µια µέθοδο, στέλνουµε ένα µήνυµα (message) στο αντικείµενο του οποίου η κλάση υλοποιεί την οµώνυµη µέθοδο. Το πλήρες όνοµα της µεθόδου είναι ΌνοµαΚλάσης.ΌνοµαΜεθόδου και ακολουθεί η λίστα των παραµέτρων. Οι κλάσεις λειτουργούν και όπως οι εγγραφές (records) στις διαδικαστικές γλώσσες προγραµµατισµού. Μπορούµε να δηλώσουµε τις ιδιότητες (properties) που περιλαµβάνει µια κλάση, κατ αντιστοιχία µε τα πεδία (fields) των εγγραφών σαν να ορίζαµε ένα νέο τύπο δεδοµένων. Σε αυτή την περίπτωση οι κλάσεις λειτουργούν ως πρότυπα ή καλούπια δεδοµένων. Κατά την εκτέλεση δηµιουργούνται αντικείµενα (objects) που είναι στιγµιότυπα των κλάσεων. 1.4 Συµβάσεις για τα προγράµµατα Java Συχνά ο φοιτητής-προγραµµατιστής πέφτει στην παγίδα να φτιάχνει το πρόγραµµα µε σκοπό αυτό απλώς να τρέξει, ωστόσο αυτό είναι µια πέρα-για-πέρα λανθασµένη πρακτική. Το πρόγραµµα πρέπει να είναι φτιαγµένο έτσι ώστε: (α) να τρέχει σωστά, (β) να είναι εύκολο να συντηρηθεί και (γ) να τρέχει γρήγορα µε αυτή τη σειρά προτεραιότητας. 1. Ξεκινάµε να γράφουµε από το αριστερό περιθώριο Χρησιµοποιούµε συγκεκριµένες τεχνικές, όπως η οδόντωση του κώδικα και άλλες συµβάσεις, πχ στην ονοµασία των µεταβλητών, που βελτιώνουν την αναγνωσιµότητα, για να επιτύχουµε τους παραπάνω στόχους. Παρότι οι συµβάσεις αυτές δεν είναι υποχρεωτικές για τη συντακτική ορθότητα του προγράµµατος, αποτελούν καλές συνήθειες που µακροπρόθεσµα αποδίδουν στην παραγωγικότητα του προγραµµατιστή και στην αξιοπιστία του προγράµµατος. Εικόνα 5 Κανόνες οδόντωσης Οδόντωση (indentation) είναι η διαµόρφωση του αριστερού περιθωρίου των εντολών, έτσι ώστε εντολές που ανήκουν στην ίδια ενότητα (βάθος φωλιάσµατος), να είναι στοιχισµένες αριστερά. Για παράδειγµα, στην Εικόνα 6, οι δύο εντολές που ξεκινούν µε System είναι στην ίδια ενότητα, φωλιασµένες ως σώµα της µεθόδου main. Επίσης, η main είναι φωλιασµένη µέσα στην κλάση. Η Java διακρίνει τα πεζά και τα κεφαλαία γράµµατα, δηλαδή τα icounter, icounter, ICounter είναι διαφορετικά ονόµατα. Όλες οι δεσµευµένες λέξεις της γλώσσας, όπως οι εντολές, οι (πρωτογενείς) τύποι δεδοµένων, κλπ, γράφονται µε αµιγώς µε πεζά. Κάθε κλάση πρέπει να αποθηκεύεται σε οµώνυµο αρχείο µε την κατάληξη.java, διαφορετικά ο µεταγλωττιστής διαµαρτύρεται. Το πρόγραµµα στην Εικόνα 6 2. Αποφασίζουµε πόσο θα είναι το βήµα της οδόντωσης, πχ 2-4 χαρακτήρες 3. Κάθε φορά που ξεκινά ένα µπλοκ εντολών, γράφου- µε τις εντολές του σώµατός του ένα βήµα προς τα µέσα (δεξιά). 4. Όταν τελειώνει ένα µπλοκ εντολών, βγαίνουµε ένα βήµα οδόντωσης προς τα έξω (αριστερά). /* * Η κλάση HelloWorldApp υλοποιεί µια * εφαρµογή που προβάλλει "Hello World!" */ class HelloWorldApp { public static void main(string[] args) { System.out.println("Hello World!"); System.exit(0); // end main // end class Εικόνα 6 Το πρώτο πρόγραµµα Java

5 3/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 5 πρέπει να αποθηκευτεί σε αρχείο που να έχει όνοµα HelloWorldApp.java προκειµένου να το µεταγλωττίσει ο javac στο αρχείο HelloWorldApp.class που περιέχει τον bytecode. Η εκτέλεση του προγράµµατος αρχίζει από µια µέθοδο που ονοµάζεται main και έχει επικεφαλίδα public static void main (String[] args). Κατά την επικρατούσα προγραµµατιστική σύµβαση, τα ονόµατα των κλάσεων ξεκινούν µε κεφαλαίο. Τα ονόµατα µεθόδων, αντικειµένων και µεταβλητών ξεκινούν µε πεζό. Κάθε λέξη µέσα στο όνοµα ξεκινάει µε κεφαλαίο, πχ sfirstdayofmonth, fmhkosgrammhs. Τα ονόµατα µεθόδων ακολουθούνται υποχρεωτικά από παρενθέσεις που περικλείουν τις παραµέτρους τους, πχ System.out.println("hello"). Υποστηρίζονται δύο τρόποι σύνταξης για σχόλια. Το σχόλιο ξεκινά µε // οπότε αγνοείται οτιδήποτε ακολουθεί µέχρι το τέλος της γραµµής (inline comments). Ο µεταγλωττιστής αγνοεί οτιδήποτε βρίσκεται ανάµεσα σε /* και */. Τέτοια σχόλια µπορούν να εκτείνονται σε πολλές γραµµές (δες Εικόνα 6). Σχόλια που ξεκινούν µε /** περιέχουν τεκµηρίωση (documentation) για την κλάση. Η τεκµηρίωση δηµιουργείται αυτόµατα από το εργαλείο javadoc (περισσότερα στην ενότητα 4.3 Σχολιασµός και τεκµηρίωση προγράµµατος). 1.5 Βιβλιοθήκες Οι βιβλιοθήκες επεκτείνουν τη βασική λειτουργικότητα της γλώσσας. Επειδή, µε την τυπική έννοια, οι βιβλιοθήκες δεν είναι κοµµάτι της προδιαγραφής της γλώσσας, δεν τροποποιούν τον πυρήνα της γλώσσας. Για παράδειγµα, οι βιβλιοθήκες δεν µπορούν να αλλάξουν τη σύνταξη ή τη σηµασιολογία των δεσµευµένων στοιχείων της γλώσσας, όπως τύπους δεδοµένων, εντολές, κλπ. Σταδιακά, προστίθενται και νέες βιβλιοθήκες µε βελτιωµένα χαρακτηριστικά που αντι- µετωπίζουν νέες απαιτήσεις των προγραµµατιστών ή υποστηρίζουν νέες αρχιτεκτονικές εξοπλισµού. Οι σχεδιαστές της Java επέλεξαν να διατηρήσουν µικρό τον πυρήνα της γλώσσας και να υλοποιούν τις πρόσθετες δυνατότητες σε βιβλιοθήκες. Με αυτόν τον τρόπο ο προγραµµατιστής αρκεί να γνωρίζει τις εντολές του πυρήνα - για όποια πρόσθετη λειτουργικότητα χρειαστεί, πχ δικτυακό προγραµµατισµό, κατασκευή γραφικών διεπαφών, κλπ, απαιτείται να µάθει µόνο την αντίστοιχη βιβλιοθήκη. Η Java περιλαµβάνει πολλές έτοιµες κλάσεις που οµαδοποιούνται σε υποκαταλόγους κατά κατηγορίες που ονοµάζονται πακέτα (packages). Αυτό το σύνολο πακέτων αναφέρεται και ως βιβλιοθήκη κλάσεων της Java ή Java API (Application Programmer s Interface). Το πλήρες όνοµα µιας κλάσης αποτελείται από τα ονόµατα των πακέτων στα οποία ανήκει διαχωρισµένα µε τελείες, πχ javax.swing.japplet. Εν γένει για να χρησιµοποιήσουµε στοιχεία µιας βιβλιοθήκης πρέπει να δηλώσουµε στην αρχή του προγράµµατος το όνοµα της κλάσης που τα περιέχει. Αυτό γίνεται µε την εντολή import και ακολουθεί το πλήρες όνοµα της κλάσης. Εναλλακτικά, µπορούµε να καλούµε µια µέθοδο µιας κλάσης µέσα στον κώδικα χρησιµοποιώντας το πλήρες της όνοµα, οπότε δεν χρειάζονται εντολές import. Εάν θέλουµε να χρησιµοποιήσουµε πολλές βιβλιοθήκες, για να µην εισάγουµε κάθε κλάση ξεχωριστά, χρησιµοποιούµε τον ειδικό χαρακτήρα πασπαρτού (wildcard) *. Για παράδειγµα, η εντολή import javax.swing.* επιτρέπει τη χρήση όλων των κλάσεων που ανήκουν στο πακέτο Swing 3. Οι βασικές βιβλιοθήκες είναι πάντοτε φορτωµένες και τα στοιχεία τους, πχ οι µέθοδοί τους είναι άµεσα διαθέσιµες. Το πακέτο java.lang εισάγεται αυτόµατα σε όλα τα προγράµµατα. Γι αυτό µπορούµε να καλέσουµε τη µέθοδο System.out.println() χωρίς κάποια εντολή import. Το πακέτο αυτό περιέχει την κλάση System που περιλαµβάνει την µέθοδο exit. Τα προγράµµατα σε γραφικό περιβάλλον για να τερµατίσουν κανονικά πρέπει να εκτελούν την System.exit(0) ως τελευταία τους εντολή. Σε περίπτωση µη κανονικού τερµατισµού, το σωστό είναι να χρησιµοποιείται ο µηχανισµός εξαιρέσεων (exceptions) και να εκτελείται µια System.exit που επιστρέφει µη µηδενική τιµή. Τυπικά επιστρέφεται -1, αλλά µπορούµε να χρησιµοποιήσουµε και άλλες τι- µές που θα υποδηλώνουν τον τύπο του σφάλµατος που προέκυψε. Όταν φτιάχνουµε προγράµµατα που αποτελούνται από πολλές κλάσεις, τις εντάσσουµε στο ίδιο πακέτο βάζοντας ως πρώτη εντολή του αρχείου την package όνοµαπακέτου. Μέσα στο αρχείο ακολουθούν οι δηλώσεις των πακέτων / κλάσεων που χρησιµοποιούνται από την κλάση µε τις εντολές import και έπειτα ξεκινά η ίδια η κλάση ή περισσότερες κλάσεις. Στην Εικόνα 8 φαίνεται η ακριβής σύνταξη ενός αρχείου που περιέχει κώδικα Java και εκφράζει µε τυπικό τρόπο αυτό που διατυπώθηκε πρωτύτερα. Οι τετράγωνες παρενθέσεις [] υποδηλώνουν προαιρετική παρουσία, ο αστερίσκος * 3 Ο µεταγλωττιστής δεν φορτώνει κάθε κλάση του πακέτου όταν βρίσκει µια import µε *. Φορτώνει µόνο τις κλάσεις που πραγµατικά χρησιµοποιούνται στο πρόγραµµα. Εικόνα 7 Επεκτάσεις Java [ package όνοµαπακέτου; ] [ import όνοµαβιβλιοθήκης; ] * [ class ΌνοµαΚλάσης { σώµακλάσης ] + Εικόνα 8 Σειρά δηλώσεων σε ένα αρχείο

6 Σελίδα 6 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 3/3/2006 ότι µπορεί να υπάρχουν καµιά, µία ή περισσότερες import, και ο σταυρός + ότι πρέπει να υπάρχει τουλάχιστον µια κλάση. Ακολουθώντας αυτές τις συµβάσεις, ορίζουµε µια γραµµατική. Η γραµµατική είναι µια µετα-γλώσσα, δηλαδή µια γλώσσα που περιγράφει τη σύνταξη για άλλες γλώσσες στη συγκεκριµένη περίπτωση τη Java. Παρατήρηση: οι χαρακτήρες [ ] * + είναι σύµβολα της γραµµατικής µε συγκεκριµένη σηµασία, όπως εξηγήσαµε παραπάνω δεν εµφανίζονται στο αρχείο της Java. Σύµφωνα µε τη φιλοσοφία της Java, καθήκον του προγραµµατιστή είναι να επεκτείνει το προγραµµατιστικό περιβάλλον της Java µε τρόπο που να υλοποιεί την επιθυµητή λειτουργικότητα, σε αντιδιαστολή µε τις διαδικαστικές γλώσσες προγραµµατισµού όπου το πρόγραµµα είναι µια αυτόνοµη οντότητα που απλώς χρησιµοποιεί τη λειτουργικότητα κάποιων βιβλιοθηκών. 1.6 Βασικοί τύποι δεδοµένων Όλες οι µεταβλητές πρέπει να δηλώνονται πριν να χρησιµοποιηθούν. Τοπικές (local) ονοµάζονται οι µεταβλητές που δηλώνονται µέσα στην µέθοδο στην οποία χρησιµοποιούνται και ισχύουν. Η σύνταξη της δήλωσης περιγράφεται από τη γραµµατική: τύπος εδοµένων όνοµαμεταβλητής [ = τιµή ] ; Αυτό σηµαίνει ότι κάθε δήλωση στην αρχή έχει έναν τύπο δεδοµένων και ακολουθεί το όνοµα της µεταβλητής που δηλώνεται. Κατά τη δήλωση ο προγραµµατιστής µπορεί να αρχικοποιεί τη µεταβλητή σε µια τιµή. Η φράση = τιµή ε- γκλείεται σε τετράγωνες παρενθέσεις επειδή είναι προαιρετική. char cepilogh; //χωρίς αρχικοποίηση int i = 0; //µε αρχικοποίηση προσοχή δεν βάζουµε [ ] στην αρχική τιµή εν επιτρέπεται το διάβασµα της τιµής µιας µεταβλητής, πριν να της ανατεθεί κάποια τιµή. Μπορούµε να δηλώσουµε πολλές µεταβλητές του ίδιου τύπου χωρίζοντας τα ονόµατά τους µε κόµµα, πχ int i, j = 10, k = 100; float r, s = 1.5, t; Η συµπληρωµένη γραµµατική που περιγράφει το συντακτικό της εντολής δήλωσης είναι: τύπος εδοµένων όνοµαμεταβλητής [ = τιµή ] [, όνοµαμεταβλητής[ = τιµή ] ] * ; Προσθέσαµε τη φράση που είναι κλεισµένη µέσα σε [ ] και ακολουθείται από *. Ο αστερίσκος σηµαίνει 0, µία ή περισσότερες επαναλήψεις. Παρατηρήστε ότι η γραµµατική επιβάλλει ότι µια δήλωση θα έχει κατ ελάχιστον έναν τύπο δεδοµένων και ένα όνοµα µεταβλητής. Αν υπάρχουν κι άλλες δηλώσεις µεταβλητών στην ίδια εντολή δήλωσης θα είναι χωρισµένες µε κόµµατα. Προαιρετικά, µπορεί κάποιες από τις µεταβλητές που δηλώνονται να αρχικοποιούνται κιόλας. Μια καλή προγραµµατιστική συνήθεια είναι να δηλώνουµε µία-µία τις µεταβλητές σε κάθε γραµµή και να εξηγούµε µε ένα σχόλιο για τι χρησιµοποιούνται. Οι επαγγελµατίες προγραµµατιστές χρησιµοποιούν προθέµατα στα ονόµατα των µεταβλητών που υποδηλώνουν τον τύπο τους. Οι ακέραιες µεταβλητές έχουν το πρόθεµα i, οι πραγµατικές το f και οι συµβολοσειρές το s. int iplithos = 0; //µετράει πόσοι πελάτες εξυπηρετήθηκαν float fplatosportas = 0.92; //το πλάτος της πόρτας σε µέτρα String sonomaxrhsth; //το όνοµα µε το οποίο έχει κάνει login ο χρήστης Μέγεθος Τύπος Ελάχιστη τιµή Μέγιστη τιµή byte 8 bit short 16 bit int 32 bit long 64 bit float 32 bit ±3,4x10 38 µε ακρίβεια 7 δεκαδικών ψηφίων double 64 bit ±1,7x µε ακρίβεια 15 δεκαδικών ψηφίων Εικόνα 9 Μέγεθος και εύρος τιµών αριθµητικών τύπων Οι βασικοί τύποι δεδοµένων (primitive data types) της Java είναι οι εξής: boolean, που παίρνει τιµές true και false, char, που καταλαµβάνει 16 bit για να αποθηκεύει Unicode χαρακτήρες, πχ char ch = 't'; char call = 'u00f2'; (Το παραπάνω σηµαίνει να αποδοθεί στη µεταβλητή ca η δεκαεξαδική τιµή 00F2.) Οι τιµές πρέπει να περικλείονται σε µονά εισαγωγικά τα διπλά εισαγωγικά χρησιµοποιούνται στις συµβολοσειρές που θα δούµε αργότερα. Για τους ακεραίους υπάρχουν οι παραλλαγές byte, short, int και long που όλες αποθηκεύουν προσηµασµένους ακέραιους σε αναπαράσταση συ- µπληρώµατος ως προς δύο (Θυµόσαστε πώς αναπαριστάνονται οι αρνητικοί αριθµοί;). Μια ακέραια τιµή εκλαµβάνεται ως int. Ο κωδικός L επιβάλλει στην τιµή να εκληφθεί ως long. Πx int icount = 7; long lbignum = L; Για τους πραγµατικούς υπάρχουν οι παραλλαγές float και double που αποθηκεύουν αριθµούς χρησιµοποιώντας αναπαράσταση κινητής υποδιαστολής. Μια πραγµατική τιµή εκλαµβάνεται ως double. Οι κωδικοί F και D επιβάλλουν στην τιµή να εκληφθεί ως float και double, αντίστοιχα. Πχ float finch = 2.54F; float fdrxpereuro = F;

7 3/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 7 double davogadro = 6.022E23D; Παρατηρήστε ότι εκτός από την µορφή ακέραιο µέρος - υποδιαστολή - δεκαδικό µέρος, µπορούµε να χρησιµοποιούµε την εκθετική µορφή για τους πολύ µεγάλους ή µικρούς αριθµούς. Μετά το E ακολουθεί θετικός ή αρνητικός α- κέραιος για τον εκθέτη. Εάν προθέσουµε τη δεσµευµένη λέξη final σε µια δήλωση µεταβλητής, τότε αυτή µετατρέπεται σε σταθερά. Συνηθίζεται τα ονόµατα των σταθερών να έχουν µόνο κεφαλαίους χαρακτήρες για να είναι ευδιάκριτα, πχ final int SIZE = 10; Χρησιµοποιούµε τον χαρακτήρα της υπογράµµισης για να χωρίσουµε τις λέξεις που απαρτίζουν το όνοµα της σταθεράς, πχ final double CM_PER_INCH = 2.54; //τόσα εκατοστά έχει µια ίντσα Για κάθε βασικό τύπο δεδοµένων υπάρχει οµώνυµη κλάση «περιτυλίγµατος» (wrapper class) πχ Integer, Float, Double, κλπ, που προσφέρει χρήσιµες µεθόδους και σταθερές για τον τύπο, όπως Integer.toString(), Double.MAX_VALUE ερευνήστε τι κάνει η µέθοδος και η σταθερά (πώς καταλαβαίνετε τι είναι;). Είναι σηµαντικό να ανατρέχετε στην τεκµηρίωση των βιβλιοθηκών της γλώσσας για να βρίσκετε κλάσεις, σταθερές, µεθόδους και τον τρόπο χρήσης τους, πχ τις παραµέτρους τους, κά. Οι τύποι δεδοµένων της Java λειτουργούν το ίδιο σε όλες τις υπολογιστικές πλατφόρµες που υποστηρίζουν την ιδεατή µηχανή Java. Έτσι ο κώδικας που γράφεται και δοκιµάζεται σε ένα περιβάλλον ανάπτυξης πάνω σε συγκεκριµένη πλατφόρµα, πχ Wintel ή SPARC / Unix, θα έχει την ίδια συµπεριφορά παντού και θα υπάρχει συµβατότητα δεδοµένων σε δυαδικό επίπεδο. Αυτή είναι µια σηµαντική συνιστώσα για να επιτευχθεί µεταφερσιµότητα των προγραµµάτων Java. Σε άλλες γλώσσες προγραµµατισµού, η αναπαράσταση των δεδοµένων εξαρτάται από τα χαρακτηριστικά της υ- πολογιστικής πλατφόρµας για την οποία µεταγλωττίζονται, όπως το µήκος λέξης (word), η αναπαράσταση big endian / little endian, κά. 1.7 Είσοδος / έξοδος Ακολουθώντας το µοντέλο της C, η είσοδος / έξοδος στη Java δεν είναι κοµµάτι της γλώσσας, όπως σε παλιότερες γλώσσες. Υλοποιείται µε βιβλιοθήκες. Θα γνωρίσουµε τη βιβλιοθήκη System που χρησιµοποιεί τα ρεύµατα in και out για είσοδο και έξοδο αντίστοιχα από και προς τη γραµµή διαταγών (command line). Επίσης, θα δούµε τη βιβλιοθήκη Swing που παρέχει πολλά στοιχεία για την υλοποίηση γραφικών διεπαφών χρήστη. Η µέθοδος System.out.println τυπώνει στην προκαθορισµένη έξοδο. Η println (και η παραλλαγή της, print που δεν αλλάζει γραµµή όταν τυπώνει), ανήκει στην κλάση System που περιλαµβάνεται στο πακέτο java.lang. Για να τυπώσουµε αυτούσιο κείµενο πρέπει να το εγκλείουµε σε διπλά όχι απλά- εισαγωγικά, πχ "abc". Για να τυπώσουµε την τιµή ενός ονόµατος, πχ µεταβλητής, το γράφουµε κατευθείαν, χωρίς εισαγωγικά. Συνδέουµε συµβολοσειρές / ονόµατα µε τον τελεστή +. Για να τυπώσουµε ειδικούς χαρακτήρες ή σύµβολα χρησιµοποιούµε ακολουθίες διαφυγής (escape sequences) που στη Java γράφονται ως µια ανάποδη µπάρα (backslash) \ και ακολουθεί ένα γράµµα. Η αλλαγή γραµµής δίνεται µέσω της ακολουθίας διαφυγής \n (συµβολίζει το newline). Άλλες ακολουθίες διαφυγής είναι \\, \, \, \t για την ανάποδη µπάρα, τα διπλά και τα µονά εισαγωγικά και τον στηλοθέτη (tab), αντίστοιχα. Εισάγοντας (import) την κλάση javax.swing.joptionpane µπορούµε να χρησιµοποιήσουµε τις µεθόδους showmessagedialog και showinputdialog που προσφέρονται για εκτύπωση σε αναδυό- µενο παράθυρο και είσοδο από προτρεπτικό, αντίστοιχα. Αργότερα θα δούµε µεθόδους για να εµφανίζουµε στοιχεία σε παράθυρο είτε σε ρυθµό χαρακτήρων (δες κλάση JTextArea), είτε σε ρυθµό γραφικών (java.awt.graphics). Επίσης θα δούµε πώς να δηµιουργούµε διεπαφές χρήστη που ενσωµατώνουν αντικείµενα όπως πλαίσια κειµένου, πλήκτρα εντολών, κτλ. import javax.swing.joptionpane; public class swingio { public static void main(string[] args) { String sfirst, ssecond; sfirst = JOptionPane.showInputDialog("First number:"); ssecond = JOptionPane.showInputDialog("Second number:"); float ffirst, fsecond, fresult; ffirst = Float.parseFloat(sFirst); fsecond = Float.parseFloat(sSecond); fresult = ffirst + fsecond; JOptionPane.showMessageDialog(null, "First number is " + ffirst + "\n" + "Second number is " + fsecond + "\n" + "Result is " + fresult + "\n" ); System.exit(0); Εικόνα 10 Είσοδος / έξοδος µε πακέτο Swing

8 Σελίδα 8 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 3/3/2006 Επειδή η συνάρτηση εισόδου επιστρέφει πάντα String, πρέπει να το µετατρέψουµε στον κατάλληλο τύπο µε τις Integer.parseInt, Float.parseFloat, Double.parseDouble, κοκ (δείτε την Εικόνα 10). Παρατηρήστε ότι η µέθοδος parsefloat ανήκει στην κλάση Float δεν έχει σχέση µε τη δήλωση του τύπου δεδοµένων float. Η Java χειρίζεται την είσοδο / έξοδο ως ροή (stream). Τυποποιηµένες ροές είναι οι System.in και System.out που ορίζονται στο πακέτο java.io. Το διάβασµα από την τυποποιηµένη είσοδο (πληκτρολόγιο), δεν είναι και τόσο απλό να εξηγηθεί τώρα, καθώς απαιτεί έννοιες που θα καλυφθούν αργότερα (για ένα απλό παράδειγµα δείτε στην ενότητα 1.14 Είσοδος / Έξοδος στην τυπική ροή). 1.8 Παραστάσεις, τελεστές και µετατροπές Οι τελεστές (operators) έχουν τις συνηθισµένες προτεραιότητες που συναντούµε σε όλες τις γλώσσες προγραµµατισµού απλώς αλλάζει ο συµβολισµός των τελεστών µερικών πράξεων, όπως οι λογικές. Γενικά, πρώτα εκτελούνται οι πράξεις µέσα σε παρενθέσεις, έπειτα οι αριθµητικοί τελεστές (πρώτα οι πολλαπλασιαστικοί, µετά οι προσθετικοί) και ακολουθούν οι τελεστές σύγκρισης και οι λογικοί τελεστές (δείτε Εικόνα 11). Σε περίπτωση που σε µια παράσταση συµµετέχουν τελεστές ίδιας προτεραιότητας, εφαρµόζεται ο κανόνας της προσεταιριστικότητας, πχ αριστερή προσεταιριστικότητα και δεξιά προσεταιριστικότητα Μοναδιαίοι (unary) ονοµάζονται οι τελεστές που δέχονται ένα όρισµα. Οι µοναδιαίοι τελεστές έχουν πάντα υψηλότερη προτεραιότητα από τους δυαδικούς τελεστές που δέχονται δύο ορίσµατα. Ο τελεστής της διαίρεσης / όταν έχει ως ορίσµατα ακεραίους, δίνει το αποτέλεσµα της ακέραιας διαίρεσης, πχ 10/4 2, ενώ 10.0/ Το υπόλοιπο της ακέραιας διαίρεσης συµβολίζεται µε %, πχ 10 % 4 2. Η ισότητα συµβολίζεται µε == για να διαχωρίζεται από την ανάθεση =, µια και τα δύο είναι τελεστές. Η ανισότητα είναι!=, και η άρνηση είναι!. Οι υπόλοιποι λογικοί τελεστές είναι && για τη σύζευξη (και), για τη διάζευξη (ή) 4, ^ για την αποκλειστική διάζευξη (είτε) 5. Πέρα από τον βασικό τελεστή ανάθεσης =, υπάρχουν και οι τελεστές πράξη=, που εκτελούν την πράξη και αναθέτουν το αποτέλεσµα στον αριστερό όρο. Για παράδειγµα, currentsum += newvalue ισοδυναµεί µε currentsum = currentsum + newvalue. Η παράσταση (a > b > c) δεν είναι έγκυρη στις γλώσσες προγραµµατισµού. Για να µετατρέψουµε µια παράσταση σε άλλο τύπο δεδοµένων, προθέτουµε ένα εκµαγείο (cast), δηλαδή τον τύπο στον οποίο θέλουµε να µετατραπεί το αποτέλεσµα της έκφρασης µέσα σε παρενθέσεις. Πχ (float) 3/4 επιστρέφει 0.75, ενώ αν ήταν απλώς 3/4 θα επέστρεφε 0 εκλαµβάνοντας το / ως ακέραια διαίρεση, αφού εφαρµόζεται πάνω σε δύο ακεραίους. Σε παραστάσεις µε µεικτούς τύπους δεδοµένων ή κατά την αντιστοίχιση πραγµατικών παραµέτρων µε τις τυπικές, η γλώσσα, εφόσον είναι δυνατό, µετατρέπει τα δεδοµένα στον κατάλληλο τύπο, ακόµη κι αν ο προγραµµατιστής δεν χρησιµοποιήσει εκµαγείο. Αυτό ονοµάζεται καταναγκασµός (coercion). Για παράδειγµα, Math.sqrt(4) θα µετατρέψει τον ακέραιο 4 σε πραγµατικό διπλής ακρίβειας Οι µετατροπές αυτές ακολουθούν τον κανόνα της προαγωγής (promotion, widening). Κατά σειρά, η προαγωγή µετατρέπει από τον πιο περιοριστικό τύπο προς τον πιο εκτεταµένο, κατά τη σειρά byte short char int long float double. Ο τύπος boolean δεν µετατρέπεται. Εάν σε µια µεικτή παράσταση υπάρχουν τµήµατα που δεν έχουν συµβατούς τύπους και δεν µπορούν να υποστούν καταναγκασµό, ο µεταγλωττιστής επιστρέφει µήνυµα λάθους. Παρότι η Java χρησιµοποιώντας τον κανόνα της προαγωγής µετατρέπει µεικτές παραστάσεις σε αµιγείς, µια ασφαλής πρακτική είναι ο προγραµµατιστής να χρησιµοποιεί εκµαγεία και να κάνει ο ίδιος τις απαραίτητες µετατροπές. Ο τελεστής + είναι υπερφορτωµένος (overloaded), καθώς εκτελεί πρόσθεση όταν ε- φαρµόζεται σε αριθµητικά δεδοµένα και συνένωση (concatenation) όταν εφαρµόζεται σε αλφαριθµητικά. Ο κώδικας στην Εικόνα 12 στην πρώτη println θα τυπώσει 10.5 ε- Τελεστές Προσεταιριστικότητα Τύπος τελεστών () !(τύπος) * / % + - < <= > >= ==!= &&?: = += -= */ /= %= Αριστερά προς δεξιά εξιά προς αριστερά Αριστερά προς δεξιά Αριστερά προς δεξιά Αριστερά προς δεξιά Αριστερά προς δεξιά Αριστερά προς δεξιά Αριστερά προς δεξιά εξιά προς αριστερά εξιά προς αριστερά Παρενθέσεις Μοναδιαίοι Πολλαπλασιαστικοί Προσθετικοί Σύγκρισης (Αν)Ισότητας Λογικό Και Λογικό Ή Επιλογής Ανάθεσης Εικόνα 11 Σειρά προτεραιότητας τελεστών (υψηλή προς χαµηλή) int i = 7; double d = 3.5; System.out.println(i + d); //10.5 System.out.println("Λάθος:" + i + d); //73.5 System.out.println("Αθροισµα:" + (i + d)); //10.5 Εικόνα 12 Μια συνέπεια της υπερφόρτωσης 4 Οι δύο αυτοί τελεστές λειτουργούν µε υπολογισµό περιορισµένης έκτασης (short circuit evaluation). Υπάρχει και µια παραλλαγή τους, ο & για την σύζευξη και ο για τη διάζευξη που υπολογίζουν όλα τα ορίσµατά τους πάντοτε. 5 Υπενθυµίζεται ότι α && β είναι αληθές µόνον αν και το α και το β είναι αληθή. α β είναι ψευδές µόνον αν και το α και το β είναι ψευδή. α ^ β είναι αληθές αν είτε το α, είτε το β είναι αληθές, αλλά όχι και τα δύο µαζί.

9 3/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 9 κτελώντας το + ως πρόσθεση, στη δεύτερη Λάθος: 73.5 εκτελώντας συνένωση Για την ακρίβεια, όλοι οι αριθµητικοί τελεστές είναι υπερφορτωµένοι, ακόµα και αυτοί που εφαρµόζονται πάνω σε αµιγώς αριθµητικά δεδοµένα. Ανάλογα µε τον τύπο των δεδοµένων επί των οποίων εφαρµόζονται, µεταφράζονται σε διαφορετικό bytecode, πχ για την αφαίρεση int, long, float, double, κλπ. 23L f εκτελεί float πρόσθεση 6 / 3L 2.0 εκτελεί long διαίρεση και double αφαίρεση Οι περισσότεροι τελεστές είναι δυαδικοί µε την έννοια ότι δέχονται δύο ορίσµατα, πχ ή x > y. Υπάρχει ο µοναδιαίος τελεστής που επιστρέφει τον αντίθετο ενός αριθµού, πχ αν a = 7, τότε a + (- a) 0. Μοναδιαίος είναι και ο τελεστής! της λογικής άρνησης. Υπάρχει ένας και µοναδικός τριαδικός τελεστής που ονοµάζεται τελεστής υπόθεσης και συντάσσεται µε τρία ορίσµατα, εκ των οποίων το πρώτο πρέπει να είναι λογικό. Η σύνταξη του τελεστή υπόθεσης είναι b?s:t και επιστρέφει s αν το b είναι αληθές, t διαφορετικά. Για παράδειγµα bok = Math.abs(a - b) < 0.1E-7? true : false; System.out.println("Τερµατισµός µε " + (bok? "επιτυχία" : "αποτυχία")); Η παράσταση x = y εκτός από την ανάθεση της τιµής του y στο x, επιστρέφει ως τιµή της παράστασης την τιµή του y. Επειδή ως τελεστής το = είναι δεξιά προσεταιριστικός, η παράσταση x = y = z ισοδυναµεί µε x=(y=z) που αναθέτει την τιµή του z διαδοχικά στα y και x. Σε µια ανάθεση αριστερά του = πρέπει να έχουµε ένα όνοµα (µεταβλητής), και δεξιά µια παράσταση. Κανονικά η παράσταση πρέπει να επιστρέφει µια τιµή τύπου όµοιου µε τον τύπο του ονόµατος που βρίσκεται στο αριστερό µέρος, αλλιώς γίνεται προαγωγή. Πx int i=3; long h=3*(i-2); η παράσταση δεξιά του = έχει τύπο int και προάγεται σε long για να ανατεθεί στη µεταβλητή h. Η Java έχει κληρονοµήσει από τη γλώσσα C τους τελεστές αύξησης / µείωσης 6. Η παράσταση x += 4 ισοδυναµεί µε x = x + 4. Ανάλογα δουλεύουν οι τελεστές -=, *=, /=, %/. Οι µοναδιαίοι (unary) τελεστές ++ και -- αυξάνουν και µειώνουν κατά 1 αντίστοιχα την τιµή της µεταβλητής. Μια κακή προγραµµατιστική πρακτική είναι να ανακατεύονται σε µια παράσταση τελεστές που προκαλούν παρενέργειες (side-effects), πχ αν x = 3, τότε η ανάθεση y = x ++ * 2; δίνει στο y την τιµή 6 και έπειτα αυξάνει το x κατά 1. Αν πάλι x = 3, η ανάθεση y = ++ x * 2; αυξάνει το x κατά 1 και έπειτα αναθέτει στο y την τιµή 8. Με τέτοιου είδους παραστάσεις µπορεί να εξοικονοµήσουµε λίγο χώρο στη µνήµη ή λίγο χρόνο εκτέλεσης, αλλά παίρνουµε το ρίσκο να εισάγουµε στο πρόγραµµα ένα λογικό σφάλµα που είναι δύσκολο να εντοπιστεί και κάνουµε τον κώδικα πιο δυσνόητο. 1.9 Μαθηµατικές µέθοδοι Στην κλάση Math υλοποιούνται πολλές χρήσιµες µαθηµατικές µέθοδοι, όπως τετραγωνική ρίζα sqrt, νεπέρειο εκθετικό και λογάριθµος exp και log, ύψωση σε δύναµη pow, απόλυτη τιµή abs, οροφή ceil, πάτωµα floor, οι τριγωνοµετρικές cos, sin, tan, κά. Ανατρέξτε στην τεκµηρίωση της Java για να εξοικειωθείτε µε τη δόµηση σε πακέτα και κλάσεις. Η µέθοδος random επιστρέφει πραγµατικούς αριθµούς διπλής ακρίβειας (double) τυχαίους αριθµούς στο διάστηµα [0.0, 1.0). Εάν χρειαζόµαστε τυχαίους ακέραιους αριθµούς στο διάστηµα [x, y], τότε απλώνουµε το εύρος πολλαπλασιάζοντας και µεταθέτουµε προσθέτοντας ως εξής: x + (int) ((y-x+1) * Math.random()). Για παράδειγµα αν θέλουµε τυχαίους αριθµούς από το 1 ως το 6 (ζάρι), η παράσταση διαµορφώνεται 1 + (int) ((6-1+1) * Math.random()) ή 1 + (int) (6 * Math.random()) 1.10 οµές ελέγχου Σε ένα απλό πρόγραµµα οι εντολές εκτελούνται ακολουθιακά µε τη σειρά που είναι γραµµένες στο κείµενο του πηγαίου κώδικα. οµές ελέγχου (control structures) ονοµάζονται οι γλωσσικές κατασκευές που αλλάζουν την φυσιολογική ροή εκτέλεσης του προγράµµατος. Οι δοµές ελέγχου ορίζουν περιοχές κώδικα που εκτελούνται, επαναλαµβάνονται ή παραλείπονται ανάλογα µε µια συνθήκη. Για να είναι ευδιάκριτα τα όρια του σώµατος µιας τέτοιας εντολής, είναι απαραίτητο να χρησιµοποιούµε οδόντωση. 6 Παλαιότερα, η χρήση των τελεστών αυτών µέσα σε πολύπλοκες παραστάσεις οδηγούσε τον µεταγλωττιστή να παράγει πιο γρήγορο κώδικα. Πλέον µε τη χρήση µεταγλωττιστών βελτιστοποίησης (optimizing compilers), αυτή η πρακτική δεν χρειάζεται, τουναντίον αποθαρρύνεται γιατί οδηγεί σε κώδικα δυσανάγνωστο και επιδεκτικό σφαλµάτων.

10 Σελίδα 10 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 3/3/2006 Η εντολή επιλογής έχει σύνταξη: if ( συνθήκη ) εντολήα [else εντολήβ] Οι τετράγωνες παρενθέσεις υποδηλώνουν ότι η πρόταση else είναι προαιρετική. Οι παρενθέσεις γύρω από την συνθήκη είναι υποχρεωτικές. Κατά την εκτέλεση, εκτιµάται η συνθήκη και αν είναι αληθής ο έλεγχος µεταβιβάζεται στην εντολήα. Αν είναι ψευδής, εκτελείται η εντολήβ, αν υ- πάρχει πρόταση else. Σηµειώστε ότι δεν χρησιµοποιείται δεσµευµένη λέξη Εικόνα 13 ιαγράµµατα ροής για δοµές ελέγχου της Java then. Η συνθήκη πρέπει να είναι µια λογική παράσταση, δηλαδή µια παράσταση που όταν εκτιµηθεί δίνει αληθές ή ψευδές. Για να τοποθετήσουµε πολλές εντολές στη θέση της εντολήα, τις περικλείουµε µε αγκύλες δηµιουργώντας έτσι ένα µπλοκ εντολών. Παράδειγµα: if ( a == b ) { y = 0; System.out.println("Ισότητα"); else y = 1; Στο παραπάνω παράδειγµα, παρατηρήστε την οδόντωση του κώδικα. Πάντοτε οδοντώνουµε τις if. Μπλοκ εντολών χρησιµοποιούµε όπου χρειάζεται να οµαδοποιήσουµε εντολές για να τις κάνουµε να λειτουργούν ως σύνολο. Για παράδειγµα, το σώµα κάθε µεθόδου είναι ένα µπλοκ εντολών. Είναι ατυχές ότι οι σχεδιαστές της Java προκειµένου να διατηρήσουν την οµοιότητα µε την C / C++ υιοθέτησαν τη σύνταξη του µπλοκ εντολών µε τις αγκύλες {, αντί να χρησιµοποιήσουν οριοθετηµένες εντολές, όπως κάνει για παράδειγµα η Basic µε τις Sub...End Sub, For...Next, While...Wend, If...Then...Else...Endif. Αν και ο µεταγλωττιστής ελέγχει τα ζεύγη από αγκύλες που οριοθετούν ένα µπλοκ, κάποιος άνθρωπος που διαβάζει τον πηγαίο κώδικα δεν έχει µια σαφή ένδειξη ποιες εντολές ανήκουν σε ποιο µπλοκ εκτός κι αν ο κώδικας είναι γραµµένος µε ο- δόντωση. Επιπρόσθετα, είναι χρήσιµο να χρησιµοποιούµε σχόλια που να εξηγούν ποια εντολή κλείνει µια αγκύλη δείτε ως παράδειγµα το πρόγραµµα στην ενότητα 1.15 Γεννήτρια τυχαίων αριθµών. Προσοχή, ο µεταγλωττιστής αγνοεί τόσο την οδόντωση, όσο και τα σχόλια και ταιριάζει τις αγκύλες σύµφωνα µε την σειρά τους στο κείµενο. Ένα κοινό λογικό σφάλµα είναι να βάζουµε ; µετά τη συνθήκη της if, όπως φαίνεται στην Εικόνα 14. Ο µεταγλωττιστής δεν βρίσκει συντακτικό σφάλµα γιατί θεωρεί ως σώµα της if την κενή εντολή ; και ακολουθεί ένα µπλοκ τριών εντολών που είναι άσχετες µε την if. Κατά την εκτέλεση, το µπλοκ που περικλείει τις τρεις αναθέσεις θα εκτελείται πάντα, είτε a > b, είτε όχι. Για την περίπτωση που θέλουµε να ελέγχουµε για πολλές (περισσότερες από δύο) περιπτώσεις, υπάρχει η εντολή πολλαπλής επιλογής που συντάσσεται ως εξής: switch ( παράσταση ) { case τιµή1: εντολή1 case τιµή2: εντολή2 case τιµή3: εντολή3 if (a > b); { temp = a; a = b; b = temp; //end if Εικόνα 14 Λογικό σφάλµα σε if

11 3/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 11 Στην αρχή της εντολής αυτής εκτιµάται η παράσταση. Έπειτα ελέγχονται µε τη σειρά οι επιλογές (φράσεις case) που ακολουθούν όταν η τιµή της παράστασης ταιριάζει µε κάποια σταθερά, ε- κτελείται η εντολή που ακολουθεί. Κάθε επιλογή συνήθως τελειώνει µε την εντολή break διαφορετικά η ροή εκτέλεσης ελέγχει και τις υπόλοιπες επιλογές και αν κάποια ή κάποιες ισχύουν, τις ε- κτελεί όλες µε τη σειρά που τις συναντάει. Αντί για µια σταθερά στη φράση case, µπορούµε να έχουµε την ετικέτα default:. Το αντίστοιχο σώµα εκτελείται switch (c){ case '1': case '3': case '5': case '7': case '9': System.out.println("περιττός αριθµός"); break; case '0': case '2': case '4': case '6': case '8': System.out.println("άρτιος αριθµός"); break; case ' ': System.out.println("κενός χαρακτήρας"); break; default : System.out.println("ούτε ψηφίο, ούτε κενό"); Εικόνα 15 Παράδειγµα εντολής case για όποια τιµή της παράσταση - φτάνει να µην έχει προηγηθεί κάποια break που θα τερµατίσει τη switch προτού να φτάσει στη default. Η λειτουργία της εντολής πολλαπλής επιλογής είναι ίδια µε πολλαπλές if-else (φωλιασµένες, αν υπάρχουν break). Προτιµούµε όµως την switch όταν έχουµε πολλές επιλογές, γιατί είναι πιο ευανάγνωστη. Η case είναι πιο περιορισµένων δυνατοτήτων από την if, γιατί µπορεί να ελέγχει αν η παράσταση ισούται µε µια (πεπερασµένη) γκάµα τιµών, ενώ δεν µπορεί να ελέγχει εκφράσεις όπως (a>b) ή (x==0.0 && y==1.0). Επίσης, δεν µπορεί να χρησιµοποιηθεί για να επιλέξει ανάµεσα σε τιµές για συµβολοσειρές, πχ s.equals("γεια"). Οι εντολές επανάληψης είναι οι while, και do while και for. Παρακάτω περιγράφεται το συντακτικό και εξηγείται η σηµασιολογία τους. Η εντολή while ( παράσταση ) σώµαεπανάληψης υπολογίζει την παράσταση και όσο είναι αληθής εκτελεί τις εντολές στο σώµαεπανάληψης. Προφανώς, µέσα στο σώµα της επανάληψης πρέπει να συµβαίνει κάτι που να τροποποιεί κάποιον από τους όρους που συµµετέχουν στην παράσταση, έτσι ώστε κάποτε αυτή να γίνει ψευδής και να τερµατιστεί η επανάληψη. Αλλιώς έχουµε έναν α- τέρµονα βρόχο. Αν στο σώµα της επανάληψης χρειάζεται να συµπεριλάβουµε πολλές εντολές (σχεδόν πάντα έτσι είναι γιατί;), τις εγκλείουµε σε ένα µπλοκ εντολών µε {. Η εντολή do σώµαεπανάληψης while ( παράσταση ); έχει την ίδια συµπεριφορά µε την while µόνο που η παράσταση υπολογίζεται µετά το σώµα της επανάληψης, άρα ο βρόχος θα εκτελεστεί τουλάχιστον µια φορά. Η εντολή for ( αρχικοποίησηβρόχου; έλεγχοςεπανάληψης; ενηµέρωσημεταβλητών ) σώµαεπανάληψης είναι πιο πολύπλοκη. Αρχικά εκτελείται άπαξ η παράσταση αρχικοποίησηβρόχου. Υπολογίζεται η δυαδική παράσταση έλεγχοςεπανάληψης και αν είναι αληθής, εκτελείται το σώµαεπανάληψης, και έπειτα η ενηµέρωσημεταβλητών. Έπειτα επαναλαµβάνεται ο υπολογισµός του ελέγχου, κοκ. Η for καλό είναι να χρησι- Εικόνα 17 Η χρησιµότητα της for if (x > y) ab = x y; else { z = x * y; ab = y x; //end if switch (r) { case 1: s = 100; break; case 2: s = 200; break; default: s = 0; //end switch int i = 1; long sum = 0; while (i <= 10) { sum += i; i++; //end while Εικόνα 16 Παραδείγµατα χρήσης εντολών επιλογής και επανάληψης int i = 1; long sum = 0; do { sum += i; i++; while (i <= 10); long sum = 0; for (int i = 1; i <= 10; i++) sum += i;

12 Σελίδα 12 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 3/3/2006 µοποιείται σε επαναλήψεις που ελέγχονται µε µετρητές. Με την εντολή break η ροή εκτέλεσης αµέσως εξέρχεται της επανάληψης. Με την εντολή continue παραλείπεται η εκτέλεση των υπόλοιπων εντολών του σώµατος της επανάληψης και εκτελείται ο επόµενος βρόχος. Ωστόσο χρησιµοποιήστε τις µε προσοχή γιατί προκαλούν µη δοµηµένο κώδικα, καθώς αντιστοιχούν σε goto. Η Java δεν έχει εντολή goto Πίνακες και συµβολοσειρές Ο πίνακας (array) είναι ένα σύνολο από συνεχείς θέσεις µνήµης που έχουν το ίδιο όνοµα και τον ίδιο τύπο. Για να α- ναφερθούµε σε ένα στοιχείο του πίνακα προσδιορίζουµε τον αριθµό της θέσης του στον πίνακα που λέγεται υποδείκτης (subscript). Οι πίνακες είναι στατικές δοµές δεδοµένων το µέγεθος τους δεν µπορεί να αλλάξει µετά τη δηµιουργία τους. Με τη δήλωση int[] x δηλώνεται το όνοµα για ένα πίνακα µε στοιχεία ακέραιους. Υποστηρίζεται και το εναλλακτικό συντακτικό int x[]. Με την εντολή x = new int[10] κατασκευάζεται πίνακας µε υποδείκτες (τότε δεσµεύεται η απαραίτητη µνήµη). Η ιδιότητα length ενός πίνακα δίνει τον αριθµό των κελιών που έχει, πχ x.length 10. Η δήλωση µιας µεταβλητής πίνακα και η δηµιουργία του πίνακα µπορούν να συνδυαστούν σε µια εντολή: int[] x = new int[10]; Μπορούµε να κατασκευάσουµε και να αρχικοποιήσουµε έναν πίνακα µε τη σύνταξη int[] y = {4, -2, 7. Από το πλήθος των στοιχείων στις αγκύλες προκύπτει το µέγεθος του πίνακα. Έτσι η παραπάνω εντολή φτιάχνει πίνακα τριών θέσεων y[0]=4, y[1]=-2, y[2]=7. Ο πίνακας float[][] p = new float[10][10]; αναπαριστά µια µήτρα δύο διαστάσεων. Τα στοιχεία του προσπελαύνονται ως p[0][0] ή p[6][3]. Κατ αντίστοιχο τρόπο µπορούµε να ορίσουµε πολυδιάστατους πίνακες. Ένας έµµεσος τρόπος για να ορίσουµε πολυδιάστατους πίνακες είναι να τους δηλώσουµε ως πίνακες που έ- χουν ως στοιχεία τους άλλους πίνακες. Όλοι οι πίνακες είναι αντικείµενα, όχι απλές µεταβλητές ακόµη και αυτοί που έχουν ως στοιχεία τους απλούς τύπους. Γι αυτό δηµιουργούνται µε τη δεσµευµένη λέξη new. Περισσότερα γι αυτό στο επόµενο κεφάλαιο. Οι τιµές των συµβολοσειρών περικλείονται σε διπλά εισαγωγικά (ενώ οι χαρακτήρες σε µονά εισαγωγικά). Οι συµβολοσειρές που είναι αντικείµενα της κλάσης String δεν µπορούν να αλλάξουν περιεχόµενο. Τώρα που γνωρίζουµε πίνακες και συµβολοσειρές, γίνεται κατανοητό ότι το String[] args στην επικεφαλίδα της µεθόδου main είναι η δήλωση ενός πίνακα συµβολοσειρών. Όταν εκτελούµε το πρόγραµµα από τη γραµµή διαταγών (command prompt), µετά το όνοµά του µπορούµε να έχουµε µια λίστα παραµέτρων χωρισµένες µε κενά. Μέσα στο σώµα της main τις προσπελαύνουµε ως args[0], args[1],, args[args.length-1] (δείτε Εικόνα 21). Χρησιµοποιείτε τη µέθοδο s.equals(t) για να συγκρίνετε δύο συµβολοσειρές s, t. Αν συγκρίνουµε συµβολοσειρές µε τον τελεστή == θα είναι πάντα άνισες, διότι είναι στιγµιότυπα διαφορετικών αντικειµένων περισσότερα γι αυτό στο επόµενο κεφάλαιο. Επειδή οι συµβολοσειρές είναι πίνακες, ο υποδείκτης για τους χαρακτήρες τους αρχίζει από 0 και φτάνει ως length()-1. Παρατηρήστε ότι length ενός String είναι µέθοδος (όπως δηλώνεται από τις παρενθέσεις που ακολουθούν), ενώ length ενός πίνακα είναι ιδιότητα. Κατά τη χρήση διαφόρων µεθόδων συµβολοσειρών πρέπει να θυµόµαστε ότι η µέτρηση για το πρώτο γράµµα της συµβολοσειράς ξεκινάει από το 0 για παραδείγµατα δείτε στην Εικόνα 19. Η µέθοδος String.valueOf µετατρέπει άλλους τύπους δεδοµένων σε συµβολοσειρές. Η κλάση String χειρίζεται αµετάβλητα αντικείµενα συµβολοσειρών, δηλαδή κάθε φορά που κάτι αλλάζουµε πάνω σε ένα String δηµιουργείται άλλο String για να αποθηκεύσει το αποτέλεσµα. int[] x = new int[10]; int ilen = x.length; //έξω από loop for (int i = 0; i < ilen; i ++) { x[i] = 1 + (int) (6 * Math.random()) Εικόνα 18 ιαπέραση πίνακα String s = "καληµερα"; boolean b = s.equals("καλημερα"); // false int i = s.length(); // 8 String t = s.substring(0, 4); // "καλη" char c = t.charat(2); // 'λ' String u = t.replace('λ', 'κ'); // "κακη" int j = s.indexof('µ'); // 4 String v = String.valueOf(Math.PI); Εικόνα 19 Μέθοδοι συµβολοσειρών Για συµβολοσειρές που µεταβάλλονται χρησιµοποιούµε την κλάση StringBuffer. Με τέτοια αντικείµενα µπορούµε να προσθέσουµε χαρακτήρα στο τέλος append (char c), να εισάγουµε ένα χαρακτήρα σε συγκεκριµένη θέση insert(int index, char c), να αλλάξουµε χαρακτήρα σε συγκεκριµένη θέση setchar(int index, char c), κά. Τα αποτελέσµατα των ενεργειών αυτών τοποθετούνται (µεταβάλλουν) το αρχικό αντικείµενο. Έτσι εξοικονοµούµε χώρο µνήµης και χρόνο εκτέλεσης, αφού δεν δηµιουργούνται νέα αντικείµενα. 7 Έχει κάτι λιγότερο κακό, τις εντολές break και continue µε ετικέτες, που σκόπιµα δεν παρουσιάζουµε.

13 3/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα Ορισµός µεθόδων Στο εσωτερικό µιας κλάσης µπορούµε να ορίσουµε µια ή περισσότερες µεθόδους. Κάθε µέθοδος ξεκινάει µε την επικεφαλίδα της και ακολουθεί το σώµα της που περιέχει τις εντολές της. Στην επικεφαλίδα δηλώνουµε τουλάχιστον (α) τον τύπο του αποτελέσµατος που επιστρέφεται, (β) το όνοµά της και (γ) τη λίστα των τυπικών παραµέτρων που δέχεται µε τύπο και όνοµα, όπως ακριβώς και οι συναρτήσεις όλων των γλωσσών προγραµµατισµού. Η σύνταξη είναι: [εµβέλεια] [τροποποιητής] τύποςαποτελέσµατος όνοµαμεθόδου ( λίσταπαραµέτρων ) { σώµαεντολώνμεθόδου Η εµβέλεια καθορίζει από πού είναι ορατή η µέθοδος (περισσότερα στην ενότητα 2.4). τροποποιητής µπορεί να είναι η δεσµευµένη λέξη static. Προς το παρόν, όλες οι µέθοδοι που θα ορίζουµε θα είναι static στο επόµενο κεφάλαιο θα δούµε ποιες µέθοδοι δεν δηλώνονται ως static. Κατά σύµβαση, τα ονόµατα των µεθόδων αρχίζουν µε πεζό γράµµα και αν περιλαµβάνουν πολλές λέξεις τις χωρίζουµε γράφοντας µε κεφαλαίο το πρώτο γράµµα της καθεµιάς. Η λίσταπαραµέτρων αποτελείται από 0, 1 ή περισσότερα ονόµατα παραµέτρων χωρισµένα µε κόµµατα. Τυπικά η σύνταξή της είναι της µορφής: [τύπος όνοµατυπικήςπαραµέτρου] [, τύπος όνοµατυπικήςπαραµέτρου ]* Στην περίπτωση που επιστρέφεται κάτι, χρησιµοποιούµε τη δεσµευµένη λέξη return για να τερµατίσουµε την ε- κτέλεση της µεθόδου και να επιστρέψουµε την τιµή. Μια από τις συµβάσεις του δοµηµένου προγραµµατισµού προτρέπει να υπάρχει µόνον µια return (ένα σηµείο επιστροφής) και να βρίσκεται στο τέλος του κειµένου της µεθόδυο. Παραδείγµατα: static float mesosoros (float x, float y) { return (x + y) / 2 static void printmessage(string somemessage) { System.out.println("> " + somemessage); Αν η µέθοδος δηλωθεί ως void, όπως η γνωστή main, δεν επιστρέφει κάποια τιµή. Αντιστοιχεί στις υπορουτίνες - subroutines (σε αντιπαράθεση µε τις συναρτήσεις - functions) των δοµηµένων γλωσσών προγραµµατισµού. Στο σώµα της µεθόδου, εάν υπάρχει εντολή return, συντάσσεται χωρίς τιµή. Γενικά, η return τερµατίζει την εκτέλεση της µεθόδου προκαλώντας επιστροφή µετά το σηµείο στο οποίο κλήθηκε. Η Java επιτρέπει σε µια µέθοδο να καλεί τον εαυτό της. Με την αναδροµή µπορούµε να επαναλαµβάνουµε κώδικα, χωρίς να χρησιµοποιήσουµε εντολές επανάληψης. static int anadrom(int n) { //αθροισµα (n - 1) + n if (n == 0) return(0); else return (n + anadrom(n - 1)); 1.13 Ασκήσεις Α1. Μια φράση ονοµάζεται καρκινική εάν διαβάζεται το ίδιο κανονικά και ανάποδα 8. Φτιάξτε πρόγραµµα που θα διαβάζει µια φράση και θα προσδιορίζει αν είναι καρκινική. Υλοποιήστε δύο αλγορίθµους που λύνουν το πρόβληµα. Α2. (α) Φτιάξτε πρόγραµµα που να υπολογίζει εάν ένα έτος είναι δίσεκτο. Υπενθυ- µίζεται ότι τα έτη που διαιρούνται µε το 100 δεν είναι δίσεκτα, ενώ αυτά που διαιρούνται µε το 400 είναι. (β) Ενσωµατώστε τη λογική του προγράµµατος σε µια στατική µέθοδο και καλείτε την για να υπολογίσετε πόσες ηµέρες µεσολαβούν ανάµεσα σε δύο έτη. Α3. Υπολογίστε την ηλικία ενός ανθρώπου εάν γνωρίζετε τα γενέθλιά του. Ανάλογα µε µια παράµετρο, θα επιστρέφεται η ηλικία σε έτη, ή σε µήνες ή σε έτη και µήνες. Α4. Γράψτε ένα πρόγραµµα που προσεγγίζει σταδιακά την τιµή του e = (βάση νεπέρειων λογαρίθµων) χρησιµοποιώντας τον τύπο e = ! 2! 3!. Τυπώστε το πλήθος των όρων του αθροίσµατος που συνυπολογίσατε και σε ποιο δεκαδικό ψηφίο διαφέρει η προσέγγισή σας σε σχέση µε το Math.E. import javax.swing.joptionpane; public class LeapYear { public static void main(string[] args) { String syear = JOptionPane.showInputDialog( " ώσε το έτος:"); int iyear = Integer.parseInt(sYear); boolean bleap = false; if (iyear % 4 == 0) bleap = true; if (iyear % 100 == 0) bleap = false; if (iyear % 400 == 0) bleap = true; JOptionPane.showMessageDialog(null, "Το " + iyear + (bleap?" ":" δεν ") + "είναι δίσεκτο."); Εικόνα 20 ίσεκτα έτη (α) 8 «νιψονανοµηµαταµηµονανοψιν».

14 Σελίδα 14 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 3/3/2006 Α5. ιαβάστε ένα χαρακτήρα από τους T, P, K που υποδηλώνουν ορθογώνιο τρίγωνο, ορθογώνιο παραλληλόγραµµο και κύκλο και ανάλογα µε το σχήµα διάβασε τις κατάλληλες διαστάσεις και υπολόγισε εµβαδόν και περίµετρό του. Επεκτείνετε το πρόγραµµα να επαναλαµβάνεται από την αρχή µέχρι να διαβάσει τον χαρακτήρα Ε (Έξοδος), οπότε θα τερµατίζει. Κατασκευάστε το πρόγραµµα µε τέτοιο τρόπο που να είναι εύκολο να προσθέσετε υπολογισµούς και για άλλα γεω- µετρικά σχήµατα. Α6. Γράψτε ένα πρόγραµµα που θα χρησιµοποιεί ένα βρόχο για να τυπώνει τα πολλαπλάσια του 2. Ανάλογα µε τον ακέραιο τύπο µεταβλητής που χρησιµοποιείται (byte, short, int, long), σε ποια τι- µή εκθέτη το πρόγραµµα σταµατά να τυπώνει σωστά αποτελέσµατα; Γιατί; Α7. ιαβάστε τις ώρες που έχει δουλέψει ένας εργαζόµενος και το ωροµίσθιό του. Τυπώστε τις µεικτές αποδοχές του (=ώρες Χ ωροµίσθιο) και τις καθαρές αποδοχές του (=µεικτές κρατήσεις). Μέχρι 800 δεν γίνονται κρατήσεις, ενώ από εκεί και πάνω οι κρατήσεις είναι 20% του υπερβάλλοντος ποσού). Επεκτείνετε το πρόγραµµα να διαβάζει στοιχεία για πολλούς εργαζόµενους και να τερµατίζει όταν του δοθεί ότι κάποιος δούλεψε (-1) ώρες. Τότε θα τυπώνει: πλήθος εργαζοµένων, σύνολο ωρών που δούλεψαν, συνολικό κόστος µισθοδοσίας, πόσο κρατήσεων και µέσο καθαρό ηµεροµίσθιο. Α8. Ο αλγόριθµος του Ευκλείδη χρησιµοποιεί α- φαιρέσεις για την εύρεση του µέγιστου κοινού διαιρέτη. Ένας άλλος αλγόριθµος που λύνει το ίδιο πρόβληµα χρησιµοποιώντας διαιρέσεις, λέει: ΜΚ ( x, y) =, όπου % είναι ο τελεστής της Java για το υπόλοιπο της x, y = 0 ΜΚ ( y, x% y), y 0 ακέραιας διαίρεσης. Α9. Γράψτε πρόγραµµα που να τυπώνει τον πίνακα αληθείας της δυαδικής παράστασης p και q ή r. Α10. Ρίξτε ένα «ζάρι» 6000 φορές και ελέγξτε την συχνότητα εµφάνισης του αποτελέσµατος φτιάχνοντας ένα ραβδόγραµ- µα. Για µια υλοποίηση, δείτε την ενότητα 1.15 Γεννήτρια τυχαίων αριθµών. Α11. Τα σωστά αποτελέσµατα ενός διαγωνίσµατος µε 10 ερωτήσεις διπλής επιλογής δίνονται µε µια ακολουθία L και S, πχ LSSLLLSSLS. Γράψτε πρόγραµµα που να διαβάζει τις απαντήσεις των φοιτητών κωδικοποιηµένες όπως πρωτύτερα και να υπολογίζει τον βαθµό τους. Το πρόγραµµα θα τερµατίζει όταν δοθεί η ακολουθία XXX και θα τυπώνει το πλήθος και τον µέσο όρο των βαθµολογιών. Α12. Γράψτε πρόγραµµα που να µετατρέπει αριθµό δευτερολέπτων σε µορφή ηµέρες, ώρες, λεπτά, δευτερόλεπτα και το αντίστροφο. Α13. Το 1820 ο Charles Babbage ζήτησε οικονοµική υποστήριξη για να κατασκευάσει έναν υπολογιστή που θα υπολόγιζε τη συνάρτηση 2 f ( n) = n + n + 41, η οποία φαίνεται να παράγει πρώτους α- ριθµούς όταν εκτιµηθεί για ακέραια n. Αληθεύει αυτό; Α14. ιαβάστε µια γραµµατοσειρά και τυπώστε το µήκος της χωρίς τα κενά. Επίσης µετρήστε τα διπλά γράµµατα που έχει. Α15. Γράψτε ένα πρόγραµµα που public class ExpoClass { public static void main(string[] args) { int n = 30; if (args.length == 1) n = Integer.parseInt(args[0]); for (int i = 0; i <= n; i++) System.out.println(i + " " + power2(i)); // υψώνει το 2 εις την δύναµη k, όπου k>=0 static long power2(int k) { long l = 1L; // 2 εις την 0 κανει 1 for (long i = 1; i <= k; i++) l *= 2L; return l; Εικόνα 21 υνάµεις του 2 import javax.swing.joptionpane; public class Ora { public static void main(string[] args) { String sinput = JOptionPane.showInputDialog(null, " ώσε δευτερόλεπτα: "); long linput = Long.parseLong(sInput); long ldays = linput / 86400; linput = linput % 86400; long lores = linput / 3600; linput=linput % 3600; long llepta = linput / 60; linput = linput % 60; long ldeftera = linput / 60; linput = linput % 60; JOptionPane.showMessageDialog(null, " ευτερόλεπτα: " + sinput + "\nμέρες: " + ldays + "\nώρες: " + lores + "\nλεπτά: " + llepta + "\n ευτερόλεπτα: " + ldeftera); System.exit(0); //end main Εικόνα 22 Μετατροπή δευτερολέπτων x x x x υπολογίζει την τιµή του e χρησιµοποιώντας τον τύπο e x = Συγκρίνετε την τιµή που υπολογίσατε 1! 2! 3! µε την τιµή που επιστρέφει η Math.exp(x). Τυπώστε πόσους όρους του αθροίσµατος πρέπει να πάρετε για να πετύχετε ακρίβεια 1, 2,, D δεκαδικών ψηφίων. Α16. Οι πυθαγόρειοι αριθµοί είναι ακέραιοι που αντιστοιχούν σε πλευρές ορθογώνιων τριγώνων. Για παράδειγµα, οι 3, 4,

15 3/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 15 5 είναι πυθαγόρειοι, επειδή =5 2. Βρείτε όλες τις τριάδες πυθαγόρειων µε αριθµούς µικρότερους του 500. Χρησιµοποιήστε φωλιασµένους βρόχους για να ελέγχετε για όλες τις πιθανότητες. Αυτό είναι ένα παράδειγµα αλγορίθµου εξαντλητικής αναζήτησης (brute force). είτε στην ενότητα 1.16 Πυθαγόρειοι αριθµοί. Α17. Μέχρι ποιο n η VB και η Java µπορούν να υπολογίσουν το n παραγοντικό (factorial, n!), που ορίζεται ως fac(n) = n * fac(n-1), µε εκκίνηση fac(0) = 1, αν το n είναι απλός ακέραιος (int); Αν είναι µεγάλος (long) ακέραιος; Κάντε το ίδιο για τους αριθµούς Fibonacci 9, που ορίζονται fib(n) = fib(n-1) + fib(n-2), µε εκκίνηση fib(0)=0, fib(1)=1. Α18. ( ιεθνής ιαγωνισµός Προγραµµατισµού ACM 1995, alproblems.html) Γράψτε πρόγραµµα που αποφασίζει αν ένα συγκεκριµένο ευθύγραµµο τµήµα τέµνει συγκεκριµένο ορθογώνιο. Παράδειγµα στην Εικόνα 23: αρχή γραµµής: (4,9) τέλος γραµµής: (11,2) πάνω αριστερά ορθογώνιου: (1,5) κάτω δεξιά ορθογώνιου: (7,1) Η γραµµή τέµνει το ορθογώνιο αν η γραµµή και το ορθογώνιο έχουν τουλάχιστον ένα κοινό σηµείο. Το ορθογώνιο αποτελείται από τέσσερεις ευθείες γραµµές και την περικλειόµενη περιοχή. Αν και οι τιµές εισόδου είναι ακέραιοι αριθµοί, τα νόµιµα σηµεία τοµής µπορεί να µην συµπίπτουν µε το πλέγµα των ακέραιων συντεταγµένων. Α19. Γράψτε πρόγραµµα που δέχεται ως είσοδο το όνοµα ενός ατόµου στη µορφή Μικρό Μεσαίο Επώνυµο και στη συνέχεια το τυπώνει στη µορφή Επώνυµο, Μικρό, Μ., όπου "Μ." είναι το αρχικό γράµµα του µεσαίου ονόµατος. Για παράδειγµα, η είσοδος Αναστάσιος Γεωργίου Μυλωνάς θα πρέπει να παράγει την έξοδο Μυλωνάς, Αναστάσιος Γ. Α20. Το τελευταίο ψηφίο κάθε αριθµού ISBN (International Standard Book Number) που συνοδεύει κάθε βιβλίο είναι ψηφίο ελέγχου.που υπολογίζεται από τα υπόλοιπα 9 ψηφία του αριθµού. Ένας ISBN είναι έγκυρος αν η παράσταση d 1 + 2d 2 + K + 10d10 είναι πολλαπλάσιο του 11. Φτιάξτε πρόγραµµα που να ελέγχει την εγκυρότητα ISBN. Φτιάξτε πρόγραµµα που δοθέντων των 9 πρώτων ψηφίων θα υπολογίζει το δέκατο. Α21. Γράψτε πρόγραµµα που κάνει τα αρχικά γράµµατα κάθε λέξης κεφαλαία και τα υπόλοιπα πεζά. Για παράδειγµα, η είσοδος ερμουπολη Συρου θα πρέπει να δίνει την εξοδο Ερµουπολη Συρου. Α22. Ο Ιούλιος Καίσαρας χρησιµοποιούσε την εξής µέθοδο για την κρυπτογράφηση των µηνυµάτων που έστελνε: ωθούσε τα γράµµατα n θέσεις προς τα πίσω στο αλφάβητο και όταν εξαντλούνταν τα γράµµατα ξεκινούσε από την αρχή του αλφαβήτου, πχ για n=6, η λέξη ave γίνεται gbk. Φτιάξτε ένα πρόγραµµα που θα δέχεται ως είσοδο τον ακέραιο n και µια συµβολοσειρά και θα την τυπώνει κρυπτογραφηµένη. Πώς µπορείτε να χρησιµοποιήσετε το πρόγραµµα που φτιάξατε για να αποκρυπτογραφήσετε; είτε στην ενότητα 1.17 Κρυπτογράφηση. Α23. (Ως Α18) Συχνά χρειάζεται να υπολογίζουµε τη γωνία ενός διανύσµατος, όπως στην Εικόνα 24. Ο συνηθισµένος τρόπος είναι να χρησιµοποιήσουµε τη µέθοδο atan του πακέτου Math. υστυχώς αυτό δεν λειτουργεί όπως θα περιµέναµε. Η atan επιστρέφει τιµές στο διάστηµα (-π/2, π/2). Πιο συγκεκριµένα, επιστρέφει ίδια τιµή για τα διανύσµατα (x, y) και (-x, -y). Θα προτιµούσαµε µια βελτιωµένη έκδοση που επιστρέφει τη γωνία στο διάστηµα [0, 2*π) και διακρίνει τη διαφορά ανάµεσα στα (x, y) και (-x, -y). Α24. (Ως Α18) Γράψτε πρόγραµµα που παράγει όλες τις δυνατές "λέξεις" (αναγράµµατα) από δοθέν σύνολο γραµµάτων. Για παράδειγµα µε είσοδο "abc" θα παράγει όλους τους πιθανούς συνδυασµούς τριών γραµµάτων, "abc", "acb", "bac", "bca", "cab" και "cba". Στην είσοδο κάποια γράµµατα επιτρέπεται να εµφανίζονται περισσότερες από µία φορές, πχ αν είσοδος είναι "acba", έξοδο δίνει "aabc", "aacb", "abac", "abca", "acab", "acba", "baac", "baca", "bcaa", "caab", "caba" και "cbaa". Στην έξοδο κάθε λέξη θα εµφανίζεται µόνο µια φορά Είσοδος / Έξοδος στην τυπική ροή package stdio; import java.io.*; /* είσοδος από την τυπική είσοδο System.in (πληκτρολόγιο) και * έξοδος στην τυπική έξοδο System.out */ public class StandardIO { Εικόνα 23 Γραµµή δεν τέµνει ορθογώνιο Εικόνα 24 Η γωνία κλίσης ενός διανύσµατος 9 Εάν σας ενδιαφέρει να υπολογίσετε ακόµη µεγαλύτερα παραγοντικά ή αριθµούς Fibonacci, ερευνήστε τις κλάσεις BigInteger και BigDecimal για αριθµητική ακεραίων οσοδήποτε µεγάλου µεγέθους.

16 Σελίδα 16 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 3/3/2006 public static void main(string[] args) throws IOException { BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in)); String sname; System.out.print("Πώς σε λένε; "); // δεν αλλάζει γραµµή System.out.flush(); // για να εµφανιστει ο δροµέας sname = stdin.readline(); // διαβάζει µια γραµµή System.out.println("Γεια σου " + sname + "!"); System.exit(0); 1.15 Γεννήτρια τυχαίων αριθµών public class Zari { public static void main(string[] args) { System.out.println("ΖΑΡΙ : Έλεγχος γεννήτριας τυχαίων αριθµών"); if (args.length!= 1) System.out.println(" ώστε αριθµό επαναλήψεων."); else { //Τµήµα 1 : είσοδος, αρχικοποίηση int iepanal = Integer.parseInt(args[0]); int iapotel[] = new int[7]; //θα χρησιµοποιήσουµε τις θέσεις 1..6 for (int i = 0; i < iapotel.length; i++) iapotel[i] = 0; //αρχικοποίηση int itemp; //αποτέλεσµα ζαριού //Τµήµα 2 : υπολογισµός for (int i = 1; i <= iepanal; i++) { itemp = 1 + (int) (6 * Math.random()); //ρίξιµο του ζαριού //System.out.println(iTemp); //εµφάνιση του αποτελέσµατος iapotel[itemp]++; //αύξηση του µετρητή κατά 1 //end for i //Τµήµα 3 : εκτύπωση αποτελεσµάτων System.out.println("Αριθµός επαναλήψεων: " + iepanal); String sline = ""; for (int i = 1; i <= 6; i++) { sline = i + " "; for (int j = 1; j <= iapotel[i]; j++) sline += "*"; sline += " " + iapotel[i]; System.out.println(sLine); //end for i //end else if System.exit(0); //end main //end class 1.16 Πυθαγόρειοι αριθµοί package pythag; public class Pythag { public static void main(string[] args) { // παράδειγµα για χρήση παραµέτρων if (args.length!= 1) // από την γραµµή διαταγών System.out.println(" εν δώσατε το όριο της αναζήτησης."); else { //έδωσες σωστά την παράµετρο int n = Integer.parseInt(args[0]); System.out.println("Έναρξη αναζήτησης πυθαγορείων αριθµών µέχρι " + n); System.out.println("Πρώτη λύση"); findpythag1(n); System.out.println(" εύτερη λύση"); findpythag2(n); System.out.println("Τρίτη λύση"); findpythag3(n); System.out.println("Τέταρτη λύση"); findpythag4(n); System.exit(0); //end main // οι µεταβλητές a, b αντιστοιχούν πάντα στις δύο κάθετες πλευρές. // η µεταβλητή c αντιστοιχεί στην υποτείνουσα private static void findpythag1(int n) { //a, b, c <= n

17 3/3/2006 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II Σελίδα 17 // η πιο χαζή (εξαντλητική) λύση for (int a=1; a<n; a++) { // η µια κάθετη πλευρά for (int b=1; b<n; b++) { // η άλλη κάθετη πλευρά for (int c=1; c<=n; c++) { // η υποτείνουσα if (a*a+b*b == c*c) { System.out.println(a + ", " + b + ", " + c); //end if //end for c //end for b //end for a //end findpythag1 private static void findpythag2(int n) { //a, b <= n /* πιο έξυπνη λύση: δεν έχει τριπλό φώλιασµα βρόχων. * Απλώς ελέγχει αν κάθε ζευγάρι καθέτων δίνει ακέραια υποτείνουσα. * Επίσης θεωρεί οτι η κάθετη b είναι µεγαλύτερη από την a, * οπότε αποφεύγει τις διπλές λύσεις 3, 4, 5 και 4, 3, 5 * Παρατήρηση: η υποτείνουσα µπορεί να είναι µεγαλύτερη του n */ double dtemp; int c; for (int a=1; a<n; a++) { // η µια κάθετη πλευρά for (int b=a; b<n; b++) { // η άλλη κάθετη πλευρά dtemp = Math.sqrt(a*a+b*b); c = (int) dtemp; if (dtemp == c) { System.out.println(a + ", " + b + ", " + c); //end if //end for b //end for a //end findpythag2 private static void findpythag3(int n) { //a, b <= n /* βελτίωση της δεύτερης λύσης: όταν βρει λύση για ένα ζευγάρι i, j * σταµατάει τον βρόχο του b και συνεχίζει µε το επόµενο a */ double dtemp; int c; for (int a=1; a<n; a++) { // η µια κάθετη πλευρά for (int b=a; b<n; b++) { // η άλλη κάθετη πλευρά dtemp = Math.sqrt(a*a+b*b); c = (int) dtemp; if (dtemp == c) { System.out.println(a + ", " + b + ", " + c); break; //βγες έξω από το εσωτερικό βρόχο b //end if //end for b //end for a //end findpythag3 private static void findpythag4(int n) { // a, b, c <=n /* Μια εναλλακτική προσέγγιση (όχι καλύτερη). * Βρίσκει τις υποτείνουσες µε ακέραια τετραγωνική ρίζα. * Έπειτα ψάχνει για κάθετες */ double dtemp; int b; for (int c=1; c<=n; c++) { // η υποτείνουσα for (int a=1; a<n; a++) { dtemp=math.sqrt(c*c-a*a); b = (int) dtemp; if (dtemp == b) { System.out.println(a + ", " + b + ", " + c); //end if //end for a //end for c //end findpythag4 /* Συγκριτικά απόδοσης µε βάση των αριθµό των επαναλήψεων * n * findpythag * findpythag * findpythag <- ο αποδοτικότερος * findpythag */ //end class 1.17 Κρυπτογράφηση package julius;

18 Σελίδα 18 Ι. Γαβιώτης - Τεχνολογίες & Μεθοδολογίες Προγραµµατισµού II 3/3/2006 public class Julius { public static void main(string[] args) { System.out.println(encrypt(Integer.parseInt(args[0]), // µετατροπή σε ακέραιο args[1].touppercase())); // µετατροπή σε κεφαλαία System.exit(0); //end main public static String encrypt(int encryptionkey, String plaintext) { // κρυπτογραφεί κεφαλαία αγγλικά κατά τον αλγόριθµο του Καίσαρα // µεταθέτοντας τα ψηφία τόσες θέσεις, όσες λέει το encryptionkey char cplain; // ο χαρακτήρας που πρόκειται να κωδικοποιηθεί int iplain; // και ο κώδικάς του int icipher; // ο κωδικοποιηµένος χαρακτήρας char ccipher; // και ο κώδικάς του String ciphertext = ""; //εδώ σωρεύονται χαρακτήρες του κωδικοποιηµένου κειµένου // εάν το κλειδί είναι εκτός των , φέρε το µέσα στο εύρος encryptionkey = encryptionkey % 26; // 26 γράµµατα έχει το αγγλικό αλφάβητο // εάν το κλειδί είναι αρνητικό , γίνεται θετικό if (encryptionkey < 0) encryptionkey += 26; System.out.println("Κλειδί: " + encryptionkey); for (int i=0; i<plaintext.length(); i++) { // για κάθε χαρακτήρα της λέξης cplain = plaintext.charat(i); if ((cplain >= 'A') && (cplain <= 'Z')) { // νόµιµος χαρακτήρας, εντός ορίων iplain = (int) cplain; icipher = iplain + encryptionkey; if (icipher > (int) 'Z') { // αν έχεις βγει µετά το Ζ (τελευταίο γράµµα) icipher = icipher - 26; // κατέβα από την αρχή του αλφαβήτου //endif ccipher = (char) icipher; // νόµιµος χαρακτήρας else { // εάν βρεθεί κάποιος χαρακτήρας εκτός των Α..Z ccipher = '?'; // τύπωσε στο κωδικοποιηµένο κείµενο? icipher = (int) ccipher; // end else // για έλεγχο και αποσφαλµάτωση //System.out.println(cPlain + " " + iplain + " " + icipher + " " + ccipher); ciphertext += ccipher; // end for i return ciphertext; // end encrypt // end class

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

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

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

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

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

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

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

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07 Ακαδ έτος 2007-2008 ΠΛΗΡΟΦΟΡΙΚΗ Ι Φερεντίνος 22/11/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με ΑΜ σε 3, 7, 8 & 9 22/11/07 Παράδειγμα με if/else if και user input: import javautil*; public class Grades public

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 27 Μαρτίου 2013 Περίληψη Σκοπός της παρούσας εργασίας είναι η εξοικείωσή σας με τις θεμελιώδεις θεωρητικές και πρακτικές πτυχές

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Εκφράσεις και Λίγες Εντολές Οι εκφράσεις της C Τελεστές Απλές και σύνθετες εντολές Εντολές ελέγχου (επιλογής) Εισαγωγή σε

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

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ και ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ 2.1 Να δοθεί ο ορισμός

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

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

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

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

ΔΟΜΗΜΕΝΟΣ ΟΠΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΠAΡΑΘΥΡΙΚΟ ΠΕΡΙΒΑΛΛΟΝ με τη Γλώσσα Προγραμματισμού VISUAL BASIC (1 ο ΕΠΙΠΕΔΟ)

ΔΟΜΗΜΕΝΟΣ ΟΠΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΠAΡΑΘΥΡΙΚΟ ΠΕΡΙΒΑΛΛΟΝ με τη Γλώσσα Προγραμματισμού VISUAL BASIC (1 ο ΕΠΙΠΕΔΟ) Γενικός Σκοπός Το αναλυτικό πρόγραμμα έχει ως γενικό σκοπό να δώσει στους μαθητές τις απαιτούμενες γνωστικές, κριτικές και αναλυτικές δεξιότητες ώστε να είναι ικανοί να χρησιμοποιούν τους υπολογιστές για

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

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Κεφάλαιο 6ο Εισαγωγή στον Προγραµµατισµό Μέρος Πρώτο (6.1, 6.2 και 6.3) Α. Ερωτήσεις Σωστού Λάθους 1. Η γλώσσα µηχανής είναι µία γλώσσα υψηλού επιπέδου.

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

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

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

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

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

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΣΚΗΣΕΙΣ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΡΩΤΗΣΕΙΣ ΣΩΣΤΟ ΛΑΘΟΣ Σημειώστε αν είναι σωστή ή

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

Κεφάλαιο 5ο: Εντολές Επανάληψης

Κεφάλαιο 5ο: Εντολές Επανάληψης Χρήστος Τσαγγάρης ΕΕ ΙΠ Τµήµατος Μαθηµατικών, Πανεπιστηµίου Αιγαίου Κεφάλαιο 5ο: Εντολές Επανάληψης Η διαδικασία της επανάληψης είναι ιδιαίτερη συχνή, αφού πλήθος προβληµάτων µπορούν να επιλυθούν µε κατάλληλες

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

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

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

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

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

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

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

Visual Basic Βασικές Έννοιες

Visual Basic Βασικές Έννοιες Visual Basi Βασικές Έννοιες «Είδα στον ύπνο µου ότι η ζωή είναι χαρά. Ξύπνησα και είδα ότι είναι χρέος. Αγωνίστηκα και είδα ότι τo χρέος είναι χαρά.» Ραµπριτανάθ Ταγκόρ Κουλλάς Χρίστος www.oullas.om oullas

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

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

Μ Ε Ρ Ο Σ Γ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Μ Ε Ρ Ο Σ Γ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Γλώσσες Προγραμματισμού 6.1.1 Γλώσσες μηχανής (1 η γενιά) Η γλώσσα στην οποία ένας ηλεκτρονικός υπολογιστής καταλαβαίνει

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

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές Μορφές Εντολών Είδη εντολών Απλές εντολές Εκτελούν κάποια ενέργεια Εντολές ελέγχου Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές Εντολές και παραστάσεις Μιαεντολήείναιμιαπαράστασηπου ακολουθείται

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

Διάλεξη 1: Αντικειμενοστρεφής Προγραμματισμός -Εισαγωγή. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Βιβλιογραφία "C Προγραμματισμός", Deitel & Deitel, Πέμπτη Έκδοση, Εκδόσεις

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

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Βασικές Έννοιες Προγραμματισμού Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Αριθμητικά συστήματα Υπάρχουν 10 τύποι ανθρώπων: Αυτοί

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

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της; 1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες (μορφές) της; Η δομή επανάληψης χρησιμοποιείται όταν μια σειρά εντολών πρέπει να εκτελεστεί σε ένα σύνολο περιπτώσεων, που έχουν κάτι

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες -

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

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 6 ο

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 6 ο Με τι ασχολείται ο προγραμματισμός; Ο προγραμματισμός ασχολείται με την διατύπωση του αλγορίθμου σε κατανοητή μορφή από τον Η/Υ, δηλ. τη δημιουργία του προγράμματος, του συνόλου των εντολών που πρέπει

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις. 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος 2 http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα

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

Τύποι, Σταθερές και Μεταβλητές

Τύποι, Σταθερές και Μεταβλητές ΚΕΦΑΛΑΙΟ 3 Τύποι, Σταθερές και Μεταβλητές Η έννοια της μεταβλητής Γενικά μπορούμε να πούμε ότι η έννοια της μεταβλητής στον προγραμματισμό είναι άμεσα συνδεδεμένη με την έννοια που αυτή έχει σε μαθηματικό

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

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23 Περιεχόμενα Λίγα λόγια για αυτή την έκδοση...... 23 Κεφάλαιο 1 Εισαγωγή... 25 O στόχος του βιβλίου και σε ποιους απευθύνεται... 27 Πώς να διαβάσετε αυτό το βιβλίο... 27 Εκπαίδευση από απόσταση... 29 Ιστορική

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

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

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

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

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή 1. Ηλεκτρονικός Υπολογιστής Ο Ηλεκτρονικός Υπολογιστής είναι μια συσκευή, μεγάλη ή μικρή, που επεξεργάζεται δεδομένα και εκτελεί την εργασία του σύμφωνα με τα παρακάτω

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

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

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

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

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 1.3-1.4: Εισαγωγή Στον Προγραµµατισµό ( ιάλεξη 2) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Περιεχόµενα Εισαγωγικές Έννοιες - Ορισµοί Ο κύκλος ανάπτυξης προγράµµατος Παραδείγµατα Πότε χρησιµοποιούµε υπολογιστή?

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΠΕΜΠΤΟ Triggers, Stored procedures Γιώργος Μαρκοµανώλης Περιεχόµενα Triggers-Ενηµέρωση δεδοµένων άλλων πινάκων... 1 Ασφάλεια...

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

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA 2 «Μονάδα Μετάφρασης» 2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit)

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

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στην FORTRAN Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 Fortran FORmula TRANslation: (Μία από τις πρώτες γλώσσες τρίτης γενιάς) Εκδόσεις FORTRAN (1957) FORTRAN II (1958) FORTRAN III

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

Περιεχόµενα. I Βασικές Γνώσεις 1

Περιεχόµενα. I Βασικές Γνώσεις 1 Περιεχόµενα I Βασικές Γνώσεις 1 1 Μοντελοποίηση Προγραµµάτων 3 1.1 Ψευδογλώσσα....................... 6 1.2 Διαγράµµατα Ροής..................... 6 1.3 Παραδείγµατα σε Ψευδογλώσσα και Διαγράµµατα Ροής.

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

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1) Αντικείμενα (Objects) στην Java Αντικείμενα στη Java Παύλος Εφραιμίδης Ένα πρόγραμμα Java κατά την εκτέλεσή του δημιουργεί αντικείμενα τα αντικείμενα αλληλεπιδρούν, στέλνοντας μηνύματα το ένα στο άλλο

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

Δυαδικό Σύστημα Αρίθμησης

Δυαδικό Σύστημα Αρίθμησης Δυαδικό Σύστημα Αρίθμησης Το δυαδικό σύστημα αρίθμησης χρησιμοποιεί δύο ψηφία. Το 0 και το 1. Τα ψηφία ενός αριθμού στο δυαδικό σύστημα αρίθμησης αντιστοιχίζονται σε δυνάμεις του 2. Μονάδες, δυάδες, τετράδες,

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

ΜΑΘΗΜΑ: Εργαλεία Ανάπτυξης εφαρμογών internet.

ΜΑΘΗΜΑ: Εργαλεία Ανάπτυξης εφαρμογών internet. ΜΑΘΗΜΑ: Εργαλεία Ανάπτυξης εφαρμογών internet. ΩΡΕΣ ΔΙΔΑΣΚΑΛΙΑΣ: ΕΙΔΟΣ ΜΑΘΗΜΑΤΟΣ: Μικτό Γενικός σκοπός είναι να αποκτήσει ο καταρτιζόμενος τις αναγκαίες γνώσεις σχετικά με εργαλεία και τις τεχνικές για

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

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Email: liliadis@fmenr.duth.gr 1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Τα προγράµµατα αποτελούνται από εντολές οι οποίες γράφονται σε έναν απλό επεξεργαστή που προσφέρει και το Περιβάλλον της Visual C++. Οι εντολές

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

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

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 Μάθημα: ΠΛΗΡΟΦΟΡΙΚΗ Ημερομηνία και ώρα εξέτασης: Τρίτη, 6 Ιουνίου 2006 07:30 10:30

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

ΑΛΓΟΡΙΘΜΟΙ. Τι είναι αλγόριθμος

ΑΛΓΟΡΙΘΜΟΙ. Τι είναι αλγόριθμος ΑΛΓΟΡΙΘΜΟΙ Στο σηµείωµα αυτό αρχικά εξηγείται η έννοια αλγόριθµος και παραθέτονται τα σπουδαιότερα κριτήρια που πρέπει να πληρεί κάθε αλγόριθµος. Στη συνέχεια, η σπουδαιότητα των αλγορίθµων συνδυάζεται

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

ΠΕΡΙΕΧΟΜΕΝΑ ΕΙΣΑΓΩΓΗ...4 εδοµένα, µεταβλητές, τύποι δεδοµένων...21 Τελεστές, εκχωρήσεις, µετατροπές δεδοµένων...23 οµές διακλάδωσης...

ΠΕΡΙΕΧΟΜΕΝΑ ΕΙΣΑΓΩΓΗ...4 εδοµένα, µεταβλητές, τύποι δεδοµένων...21 Τελεστές, εκχωρήσεις, µετατροπές δεδοµένων...23 οµές διακλάδωσης... ΠΕΡΙΕΧΟΜΕΝΑ ΕΙΣΑΓΩΓΗ...4 Η Γλώσσα προγραµµατισµού JAVA...4 ιαδικασία εκκίνησης της Java και το NetBeans IDE...5 ηµιουργία µιας εφαρµογής Java...11 Μεταγλώττιση ενός προγράµµατος...14 Εκτέλεση ενός προγράµµατος...17

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

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

Άσκηση 1 (α) Να διατυπώσετε την πιο κάτω λογική έκφραση στη Visual Basic κάνοντας χρήση μεταβλητών:

Άσκηση 1 (α) Να διατυπώσετε την πιο κάτω λογική έκφραση στη Visual Basic κάνοντας χρήση μεταβλητών: Άσκηση 1 (α) Να διατυπώσετε την πιο κάτω λογική έκφραση στη Visual Basic κάνοντας χρήση μεταβλητών: (Μον.2) Η ηλικία είναι μεταξύ των 15 και 18 συμπεριλαμβανομένων (β) Αν Χ= 4, Υ=2, Κ=2 να βρείτε το αποτέλεσμα

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

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD Σε ορισµένες περιπτώσεις είναι ιδιαίτερα χρήσιµη η δηµιουργία ιστοσελίδων ενηµερωτικού περιεχοµένου οι οποίες στη συνέχεια µπορούν να δηµοσιευθούν σε κάποιο τόπο

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

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

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

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

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Φροντιστήριο: MIPS assembly

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Φροντιστήριο: MIPS assembly ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Φροντιστήριο: MIPS assembly Αρης Ευθυμίου Το σημερινό μάθημα! Σύνταξη εντολών! Θέματα σχετικά με τη προσπέλαση, οργάνωση μνήμης διευθύνση για κάθε byte διευθύνσεις λέξεων

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

ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ

ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ ΜΑΘΗΜΑ : Πληροφορική Κατεύθυνσης ΤΑΞΗ : Β Αρ. σελίδων : 11 Ηµεροµηνία : 10/6/2008 Ώρα Έναρξης : 7:45 π.µ ιάρκεια : 2 ώρες Ονοµατεπώνυµο :...Τµήµα : Αριθµός :...Βαθµός

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

Ειδικά Θέµατα Μουσικού Προγραµµατισµού

Ειδικά Θέµατα Μουσικού Προγραµµατισµού Τµήµα Μουσικής Τεχνολογίας & Ακουστικής Παράρτηµα Ρεθύµνου Τ.Ε.Ι. Κρήτης Σηµειώσεις Μαθήµατος Ειδικά Θέµατα Μουσικού Προγραµµατισµού Χρυσούλα Αλεξανδράκη - Ρέθυµνο 2009 Πρόλογος Οι σηµειώσεις αυτές αποτελούν

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

C# (Sharp) ΤΕΙ Λάρισας. Τμήμα Τεχνολογίας Πληροφορικής & Τηλεπικοινωνιών. βιβλίο μελέτης εργαστηρίου. προγραμματισμός ΙΙ. έκδοση 1.0.

C# (Sharp) ΤΕΙ Λάρισας. Τμήμα Τεχνολογίας Πληροφορικής & Τηλεπικοινωνιών. βιβλίο μελέτης εργαστηρίου. προγραμματισμός ΙΙ. έκδοση 1.0. ΤΕΙ Λάρισας Τμήμα Τεχνολογίας Πληροφορικής & Τηλεπικοινωνιών προγραμματισμός ΙΙ C# (Sharp) βιβλίο μελέτης εργαστηρίου έκδοση 1.0.1 Νεβράντζας Βάιος-Γερμανός Λάρισα Φεβρουάριος 2011 σελίδα 2 από 39 Ευρετήριο

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εισαγωγή Κώστας Στεργίου Τι είναι ο Η/Υ; Ένας ηλεκτρονικός υπολογιστής (Η/Υ) είναι

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

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης ΚΕΦΑΛΑΙΟ 1ο 3ο 1. Συμπληρώστε τα κενά με τη λέξη που λείπει. α. Ένα πρόβλημα το χωρίζουμε σε άλλα απλούστερα, όταν είναι ή όταν έχει τρόπο επίλυσης. β. Η επίλυση ενός προβλήματος προϋποθέτει την του. γ.

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

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No 05 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και

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

1ο. Η αριθµητική του υπολογιστή

1ο. Η αριθµητική του υπολογιστή 1ο. Η αριθµητική του υπολογιστή 1.1 Τί είναι Αριθµητική Ανάλυση Υπάρχουν πολλά προβλήµατα στη µαθηµατική επιστήµη για τα οποία δεν υπάρχουν αναλυτικές εκφράσεις λύσεων. Στις περιπτώσεις αυτές έχουν αναπτυχθεί

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

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα 1. Ποια είναι η σχέση της έννοιας του μικροεπεξεργαστή με αυτή του μικροελεγκτή; Α. Ο μικροεπεξεργαστής εμπεριέχει τουλάχιστο έναν μικροελεγκτή. Β. Ο

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

ιαφάνειες παρουσίασης #1

ιαφάνειες παρουσίασης #1 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ http://www.corelab.ece.ntua.gr/courses/programming/ ιδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

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

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία Λειτουργικά Συστήματα Ι Καθηγήτρια Παπαδάκη Αναστασία 2013 1 Ηλεκτρονικός Υπολογιστής αποτελείται: 1. Από Υλικό Hardware (CPUs, RAM, Δίσκοι), & 2. Λογισμικό - Software Και μπορεί να εκτελέσει διάφορες

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

ΚΕΦΑΛΑΙΟ VI. Εισαγωγή στον προγραμματισμό

ΚΕΦΑΛΑΙΟ VI. Εισαγωγή στον προγραμματισμό ΚΕΦΑΛΑΙΟ VI Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, όπως έχει ήδη αναφερθεί, τρία εξίσου σημαντικά στάδια. Τον ακριβή προσδιορισμό του προβλήματος. Την ανάπτυξη του αντίστοιχου αλγορίθμου.

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

ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΜΑΪΟΥ-ΙΟΥΝΙΟΥ 2015

ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΜΑΪΟΥ-ΙΟΥΝΙΟΥ 2015 ΛΥΚΕΙΟ ΑΡΧ. ΜΑΚΑΡΙΟΥ Γ - ΔΑΣΟΥΠΟΛΗ ΣΧΟΛΙΚΟ ΕΤΟΣ 2014-2015 ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΜΑΪΟΥ-ΙΟΥΝΙΟΥ 2015 ΜΑΘΗΜΑ: ΠΛΗΡΟΦΟΡΙΚΗ ΗΜΕΡΟΜΗΝΙΑ: 10 /6 / 2015 ΒΑΘΜΟΣ:... ΤΑΞΗ: Β ΧΡΟΝΟΣ: 2 ώρες ΥΠ. ΚΑΘΗΓΗΤΗ:...

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Βασικές αλγοριθμικές δομές

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Βασικές αλγοριθμικές δομές Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Βασικές αλγοριθμικές δομές Βασικές Αλγοριθμικές Δομές 2 Εισαγωγή Οι αλγοριθμικές δομές εκφράζουν διαφορετικούς τρόπους γραφής ενός αλγορίθμου.

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

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ Python & NLTK: Εισαγωγή Εισαγωγή Γιατί Python? Παρουσίαση NLTK Πηγές και χρήσιμα εργαλεία Φροντιστήριο σε Python Στο φροντιστήριο: Εισαγωγή στην Python Ζητήματα προγραμματισμού για

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

ΙΑΓΩΝΙΣΜΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΘΕΜΑ 1 Α.

ΙΑΓΩΝΙΣΜΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΘΕΜΑ 1 Α. ΙΑΓΩΝΙΣΜΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΘΕΜΑ 1 Α. 1. Αν το Α έχει την τιµή 10 και το Β την τιµή 20 τότε η έκφραση (Α > 8 ΚΑΙ Β < 20) Ή (Α > 10 Ή Β = 10) είναι αληθής 2. Σε περίπτωση εµφωλευµένων βρόχων, ο εσωτερικός

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

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ ΒΑΙΚΕ ΕΝΝΟΙΕ ΑΓΟΡΙΘΜΩΝ ΕΡΩΤΗΕΙ ΑΞΙΟΟΓΗΗ ΕΡΩΤΗΕΙ ΩΤΟΥ ΑΘΟΥ 1. ηµειώστε το γράµµα αν η πρόταση είναι σωστή και το γράµµα αν είναι λάθος. 1. Ο αλγόριθµος πρέπει να τερµατίζεται µετά από εκτέλεση πεπερασµένου

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

Το mic1 διανέμεται με τους όρους της GNU General Public License. Ο πηγαίος κώδικας περιέχεται στην έκδοση.

Το mic1 διανέμεται με τους όρους της GNU General Public License. Ο πηγαίος κώδικας περιέχεται στην έκδοση. MIC-1 Simulator Ο εξομοιωτής, βασισμένος στην JAVA, ονομάζεται mic1 και υλοποιεί την αρχιτεκτονική Mic-1 που περιγράφεται στο κεφάλαιο 4 του βιβλίου του A. S. Tanenbaum, Structured Computer Organization,

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

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

ΕΙΔΙΚΑ ΘΕΜΑΤΑ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΥΠΟΛΟΓΙΣΤΩΝ Γ ΤΑΞΗ ΕΠΑΛ ΤΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΤΗ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ, ΕΡΕΥΝΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ΙΝΣΤΙΤΟΥΤΟ ΕΚΠΑΙΔΕΥΤΙΚΗΣ ΠΟΛΙΤΙΚΗΣ Βραχνός Ε., Κουρέτας Ι., Μακρυγιάννης Π., Παραδείση Α. ΕΙΔΙΚΑ ΘΕΜΑΤΑ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΥΠΟΛΟΓΙΣΤΩΝ Γ ΤΑΞΗ ΕΠΑΛ ΤΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

3. Σηµειώσεις Access. # Εισαγωγή ψηφίου ή κενού διαστήµατος. Επιτρέπονται τα ση-

3. Σηµειώσεις Access. # Εισαγωγή ψηφίου ή κενού διαστήµατος. Επιτρέπονται τα ση- Μάθηµα 3 Προχωρηµένες ιδιότητες πεδίων Μάσκες εισαγωγής Οι ιδιότητες Μορφή και Μάσκα εισαγωγής περιγράφονται µαζί γιατί έχουν κοινά χαρακτηριστικά που αφορούν την εµφάνιση. Με την ιδιότητα Μορφή καθορίζουµε

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

ΜΑΘΗΜΑ 3 ΛΟΓΙΣΜΙΚΟ (SOFTWARE)

ΜΑΘΗΜΑ 3 ΛΟΓΙΣΜΙΚΟ (SOFTWARE) ΜΑΘΗΜΑ 3 ΛΟΓΙΣΜΙΚΟ (SOFTWARE) ΣΤΟΧΟΙ: 1. Λογισμικό 2. Λογισμικό Λειτουργικού Συστήματος 3. Προσαρμοστικό Γραφικών Χρήστη 4. Λογισμικών Εφαρμογών 5. Διαφορά Μεταξύ Λογισμικού Λειτουργικού Συστήματος Και

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

7. Βασικά στοιχεία προγραμματισμού

7. Βασικά στοιχεία προγραμματισμού 7. Βασικά στοιχεία προγραμματισμού 146 Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον Εισαγωγή Κάθε γλώσσα προγραμματισμού, όπως αναφέρθηκε, έχει το δικό της λεξιλόγιο και τα προγράμματα της ακολουθούν

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2010 Ι ΑΣΚΩΝ: ΑΝΤΩΝΙΟΣ ΣΑΒΒΙ ΗΣ ΒΑΣΙΚΗ ΕΡΓΑΣΙΑ ΦΑΣΗ 2η από 5 Ανάθεση: Πέµπτη 15 Απριλίου 2010, 11:00 (πρωί)

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

Σενάριο 15: Ενεργός Μετεωρολογικός Χάρτης

Σενάριο 15: Ενεργός Μετεωρολογικός Χάρτης Σενάριο 15: Ενεργός Μετεωρολογικός Χάρτης Ταυτότητα Σεναρίου Τίτλος : Ενεργός Μετεωρολογικός Χάρτης Γνωστικό Αντικείμενο: Εφαρμογές Πληροφορικής-Υπολογιστών Διδακτική Ενότητα: Διερευνώ - Δημιουργώ Ανακαλύπτω,

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

Εντολές γλώσσας μηχανής

Εντολές γλώσσας μηχανής Εντολές γλώσσας μηχανής Στον υπολογιστή MIPS η εντολή πρόσθεσε τα περιεχόμενα των καταχωρητών 17 και 20 και τοποθέτησε το αποτέλεσμα στον καταχωρητή 9 έχει την μορφή: 00000010001101000100100000100000 Πεδία

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

7.5 ΑΡΑΙΕΣ ΜΗΤΡΕΣ 290 7.5.1 Κατασκευή αραιών µητρών... 290 7.5.2 Πράξεις και συναρτήσεις αραιών µητρών... 294 7.5.3 Συναρτήσεις για γραφήµατα...

7.5 ΑΡΑΙΕΣ ΜΗΤΡΕΣ 290 7.5.1 Κατασκευή αραιών µητρών... 290 7.5.2 Πράξεις και συναρτήσεις αραιών µητρών... 294 7.5.3 Συναρτήσεις για γραφήµατα... Κ. Π Α Π Α Ρ Ρ Ι Ζ Ο Σ M A T L A B 6. 5 Π Ε Ρ Ι Ε Χ Ο Μ Ε Ν Α Π Ρ Ο Λ Ο Γ Ο Σ............. v Κ Ε Φ Α Λ Α Ι Ο 1 Β Α Σ Ι Κ Ε Σ Λ Ε Ι Τ Ο Υ Ρ Γ Ι Ε Σ Τ Ο Υ M A T L A B 1 1.1 ΠΡΑΞΕΙΣ ΚΑΙ ΑΡΙΘΜΗΤΙΚΕΣ ΠΑΡΑΣΤΑΣΕΙΣ

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

ΚΕΦΑΛΑΙΑ. 2.5.1 attributes 2.5.2 parameters

ΚΕΦΑΛΑΙΑ. 2.5.1 attributes 2.5.2 parameters Vellum Object Oriented Programming - Java Certificate Πιστοποιητικό ανάπτυξης εφαρµογών αντικειµενοστραφούς προγραµµατισµού µε την γλώσσα Java Vellum Global Educational Services Σελίδα 1 από 1 Vellum Object

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

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

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

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

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

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΑΠΑΝΤΗΣΕΙΣ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 Μάθημα : Μικροϋπολογιστές Τεχνολογία Τ.Σ. Ι, Θεωρητικής κατεύθυνσης Ημερομηνία

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

Αναπαράσταση Μη Αριθμητικών Δεδομένων

Αναπαράσταση Μη Αριθμητικών Δεδομένων Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2014-15 Αναπαράσταση Μη Αριθμητικών Δεδομένων (κείμενο, ήχος και εικόνα στον υπολογιστή) http://di.ionio.gr/~mistral/tp/csintro/

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

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

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

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Καθηγητής. Γουνόπουλος Άσκηση 1 Σκοπός της εργασίας αυτής είναι η κατανόηση της εσωτερικής λειτουργίας

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

Παιχνίδια σε Javascript

Παιχνίδια σε Javascript Παιχνίδια σε Javascript Μάθημα 1ο Μια Γρήγορη Εισαγωγή στη Γλώσσα Τα Εργαλεία Την Javascript μπορούμε (όπως και την HTML) να τη γράψουμε σε ένα απλό συντάκτη κειμένου, ή σε ένα περιβάλλον όπως το Bluefish

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015. Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Δρ. Ιωάννης Λυχναρόπουλος 2014-2015. Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Δρ. Ιωάννης Λυχναρόπουλος 2014-2015 Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας Τι είναι τα υποπρογράμματα Αυτόνομες μονάδες κώδικα Γραμμένα από τον χρήστη Η δομή

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

Διάλεξη 6: Δείκτες και Πίνακες

Διάλεξη 6: Δείκτες και Πίνακες Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 6: Δείκτες και Πίνακες (Κεφάλαιο 12, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 6-1 Περιεχόμενο

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

1. Οργάνωση της CPU 2. Εκτέλεση εντολών 3. Παραλληλία στο επίπεδο των εντολών 4. Γραμμές διοχέτευσης 5. Παραλληλία στο επίπεδο των επεξεργαστών

1. Οργάνωση της CPU 2. Εκτέλεση εντολών 3. Παραλληλία στο επίπεδο των εντολών 4. Γραμμές διοχέτευσης 5. Παραλληλία στο επίπεδο των επεξεργαστών ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ ΟΡΓΑΝΩΣΗ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Ι Γ. Τσιατούχας 2 ο Κεφάλαιο ιάρθρωση 1. Οργάνωση της 2. εντολών 3. Παραλληλία στο επίπεδο των εντολών 4. Γραμμές διοχέτευσης 5. Παραλληλία στο

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1 Είσοδος/ Έξοδος Σε σχεδόν όλα τα προγράµµατα πρέπει να πάρουµε κάποια δεδοµένα και να δώσουµε

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

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 26-01-2014

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 26-01-2014 ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 26-01-2014 ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις παρακάτω προτάσεις 1-5 και δίπλα τη λέξη Σωστό, αν είναι

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εξαιρέσεις Εξαιρέσεις Στα προγράμματα μας θα πρέπει να μπορούμε να χειριστούμε περιπτώσεις που το πρόγραμμα δεν εξελίσσεται όπως το είχαμε προβλέψει Π.χ., κάνουμε

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

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

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

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

Το «κλειστό» σύστημα. Ανοικτές επικοινωνίες... Εισαγωγή στην Τεχνολογία της Πληροφορικής. Εισαγωγή στην τεχνολογία της πληροφορικής

Το «κλειστό» σύστημα. Ανοικτές επικοινωνίες... Εισαγωγή στην Τεχνολογία της Πληροφορικής. Εισαγωγή στην τεχνολογία της πληροφορικής ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Εισαγωγή στην Τεχνολογία της Πληροφορικής ΓΙΩΡΓΟΣ Ν. ΓΙΑΝΝΟΠΟΥΛΟΣ Λέκτορας στο Πανεπιστήμιο Αθηνών gyannop@law.uoa.gr Το «κλειστό» σύστημα ΕΙΣΟΔΟΣ ΕΠΕΞΕΡΓΑΣΙΑ

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

Εισαγωγή στο προγραμματισμό Η/Υ

Εισαγωγή στο προγραμματισμό Η/Υ Εισαγωγή στο προγραμματισμό Η/Υ Fortran 90/95/2003 Silverfrost FTN95: Fortran for Windows http://www.silverfrost.com/default.aspx http://users.auth.gr/~ppi/fortran/ Ηλεκτρονικός Υπολογιστής Hardware Software

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

Κεφάλαιο 2.1-2.4: Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 2.1-2.4: Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 2.1-2.4: Εισαγωγή στην C ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Περιεχόµενα Εισαγωγή στην C: Σύνταξη και Σηµασιολογία σχόλια µεταβλητές και σταθερές τύποι δεδοµένων Μετά αυτές τις δυο διαλέξεις

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

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

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

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

ΔΙΑΔΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑ Ρ Μ Α ΜΑΤΙ Τ ΣΜΟΣ

ΔΙΑΔΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑ Ρ Μ Α ΜΑΤΙ Τ ΣΜΟΣ Τμήμα Εφαρμοσμένης Πληροφορικής ΔΙΑΔΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εξάμηνο Α' Φύλλο Ασκήσεων 3 ΔΟΜΕΣ ΕΠAΝΑΛΗΨΗΣ Διδάσκοντες: Μάγια Σατρατζέμη, Αλέξανδρος Χατζηγεωργίου, Ηλίας Σακελλαρίου, Στέλιος Ξυνόγαλος

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

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Εργαλεία ανάπτυξης εφαρμογών internet Ι IEK ΟΑΕΔ ΚΑΛΑΜΑΤΑΣ ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΟΦΟΡΙΚΗΣ Εργαλεία ανάπτυξης εφαρμογών internet Ι Διδάσκουσα: Κανελλοπούλου Χριστίνα ΠΕ19 Πληροφορικής Εργαλεία και τεχνικές από την πλευρά του πελάτη Java Applet

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