Month | Savings |
---|---|
January | $100 |
element to define a table data Use the HTML | element to define a table heading Use the HTML Use the CSS border property to define a border Use the CSS border-collapse property to collapse cell borders Use the CSS padding property to add padding to cells Use the CSS text-align property to align cell text Use the CSS border-spacing property to set the spacing between cells Use the colspan attribute to make a cell span many columns Use the rowspan attribute to make a cell span many rows Use the id attribute to uniquely define one table 102. Τί είναι οι σημάνσεις επικεφαλίδας; Ποιό είναι, ως προεπιλογή, το μεγαλύτερο μέγεθος επικεφαλίδας; Το Heading 1 ή το Heading 6; SDSDSDS Headings are defined with the to defines the most important heading. This is heading 1This is heading 2This is heading 3This is heading 4This is heading 5This is heading 6Search engines use the headings to index the structure and content of your web pages. Users skim your pages by its headings. It is important to use headings to show the document structure. headings should be used for main headings, followed by , and so on. Note: Use HTML headings for headings only. Don't use headings to make text BIG or bold. ορίζει ένα τμήμα στο HTML έγγραφο. Ένα τμήμα ομαδοποιεί τα περιεχόμενα που είναι μέσα στις ετικέτες
... ώστε να μπορούμε να ορίζουμε ένα ενιαίο στυλ (χρώμα, γραμματοσειρά, στοίχιση) με την ιδιότητα style. The tag defines a division or a section in an HTML document. The
tag is used to group block-elements to format them with CSS.
This is a headingThis is a paragraph. . Class :Με την ιδιότητα class ορίζουμε στυλ (Cascading Style Sheets - CSS) για τα στοιχεία της σελίδας μας. Με την βοήθεια της CSS ορίζουμε την εμφάνιση (το χρώμα, το μέγεθος, κτλ.) των στοιχείων της σελίδας.
id : Ο id selector χρησιμοποιείτε για να καθορίσει την μορφοποίηση ενος μοναδικού στοιχείου 108. Δώστε τις HTML εντολές που υλοποιούν τον παρακάτω πίνακα: SDSDSDSD 109. Τι είναι οι επώνυμες άγκυρες (Named Anchors), και σε ποιούς τύπους ιστοσελίδων χρησιμοποιούνται; Αναφέρατε ένα παράδειγμα. SDSDSDS Δημιουργία Άγκυρας (Anchor) Ο δεσμός άγκυρας (anchor) μάς μεταφέρει σ’ ένα άλλο σημείο της ίδιας ιστοσελίδας. Για να δημιουργήσουμε έναν τέτοιο δεσμό, πρώτα επιλέγουμε το σημείο στο οποίο θέλουμε να πάμε, που αποκαλείται επώνυμη άγκυρα (named anchor), και επιλέγουμε Named Anchorαπό το μενού Insert ή πατάμε τα πλήκτρα Control+Alt+A ή επιλέγουμε το εργαλείο Insert Named Anchor του πίνακα Invisibles της παλέτας αντικειμένων. Στο πλαίσιο διαλόγου Named Anchor και στο πλαίσιο κειμένου Anchor Name δίνουμε ένα όνομα στην επώνυμη άγκυρα. Οι επώνυμες άγκυρες ανήκουν στα αόρατα στοιχεία (invisible elements) του DreamWeaver, που για να τα δούμε, πρέπει να επιλέξουμε Invisible Elements από το μενού View ή να πατήσουμε τα πλήκτρα Control+Shift+I. Το εικονίδιο μιας επώνυμης άγκυρας είναι μια άγκυρα με χρυσό περίβλημα. Μπορούμε να επιλέξουμε το σύμβολο μιας επώνυμης άγκυρας και να αλλάξουμε το όνομά της από τον Property Inspector. Για να δημιουργήσουμε έναν δεσμό προς μια επώνυμη άγκυρα, επιλέγουμε το κείμενο που θα αποτελέσει τον δεσμό προς την επώνυμη άγκυρα και εισάγουμε το όνομα της επώνυμης άγκυρας με το σύμβολο # μπροστά του στο πλαίσιο κειμένου Link του Property Inspector. Μπορούμε να χρησιμοποιήσουμε επώνυμες άγκυρες και προς άλλες ιστοσελίδες ή URL που θέλουμε να συνδέσουμε. Απλά προσθέτουμε το σύμβολο # και το όνομα της επώνυμης άγκυρας στο τέλος της διεύθυνσης. Για να δημιουργήσουμε έναν δεσμό προς μια επώνυμη άγκυρα, μπορούμε αφού επιλέξουμε το κείμενο του δεσμού, να σύρουμε το εικονίδιο Point to File, που βρίσκεται δεξιά από το πλαίσιο κειμένου Link και έχει στρογγυλό σχήμα, πάνω σε μια επώνυμη άγκυρα. Το όνομα επώνυμης άγκυρας μαζί με το πρόθεμα # θα εμφανισθεί μέσα στο πλαίσιο κειμένου Link. 110. Με ποιόν τρόπο μπορούμε να τοποθετήσουμε κείμενο πάνω σε μια εικόνα; SDSDSDSD 111. Τι είναι το CSS (Cascading Style Sheet) και με ποιούς τρόπους μπορεί να ενσωματωθεί σε μια ιστοσελίδα; (αναφέρατε τουλάχιστον δύο τρόπους) SDSDSDS 112. Δώστε τον ορισμό του Hyperlink (Υπερσύνδεση) και εξηγήστε ποιό θα είναι το αποτέλεσμα του ορισμού των κάτωθι target: _self, _parent, _blank και _top όταν αυτά θα ενσωματωθούν σε ένα Hyperlink. SDSDSDSD 113. Αναφέρατε τον ορισμό του Χάρτη Εικόνας (Image Map). Ποιο εργαλείο χάρτη εικόνας σάς επιτρέπει να σχεδιάσετε ακανόνιστα σχήματα; SDSDSDSD 114. Ποια είναι η χρήση της παραμέτρου Cell Padding για έναν πίνακα μιας ιστοσελίδας και ποια της παραμέτρου Cell Spacing. SDSDSDSD 115. Οι περισσότερες ιστοσελίδες χρησιμοποιούν εικόνες και γραφικά για την αναπαράσταση πληροφοριών. Περιγράψτε τα τρία βασικότερα είδη εικόνων (GIF, JPEG, PNG) και εξηγήστε για το καθένα απ’ αυτά τα πλεονεκτήματα χρήσης του σε μια ιστοσελίδα. SDSDSDSD 116. Διατυπώστε τη συνάρτηση swap_image() σε Javascript που δέχεται ως ορίσματα α) το id του αντικειμένου που θέλουμε να διαχειριστούμε και β) το path της εικόνας "pic2.jpg" που θα χρησιμοποιήσουμε ως rollover image. Προσδιορίστε τι είναι το HTML αντικείμενο που καλεί τη συνάρτηση. <script type="text/javascript"> function changeImage(ImageID,ImageFileName) { ImageFileName = ImageFileName + '/pic2.jpg'; document.getElementById(ImageID).src = ImageFileName; } onmouseover="changeImage('TestID','images')" /> 117. Διατυπώστε τη συνάρτηση check_form() σε Javascript, που ελέγχει εάν τα πεδία username και password της HTML φόρμας "form1" δεν είναι κενά. Εάν κάποιo από αυτά είναι κενό, να ανοίγει ένα message box με την αντίστοιχη ειδοποίηση στον client. SDSDSDS reason += validateEmpty(theForm.username); reason += validateEmpty(theForm.pwd); if (reason != "") { alert("Some fields need correction:\n" + reason); return false; } return true; } function validateEmpty(fld) { var error = ""; if (fld.value.length == 0) { fld.style.background = 'Yellow'; error = "The required field has not been filled in.\n" } else { fld.style.background = 'White'; } return error; } WebCheatSheet - JavaScript Tutorial118. Διατυπώστε τον κώδικα για να διαβάσετε το cookie "user" και εάν αυτό υπάρχει, τυπώστε στο browser "Hello…" και ό,τι περιέχει το cookie, αλλιώς αποθηκεύσατε το cookie "user" με τιμή "Unknown visitor" και διάρκεια ζωής 1 ώρα. SDSDSDS <script> function setCookie(cname,cvalue,exmins) { var d = new Date(); d.setTime(d.getTime() + (exmins*60*1000)); var expires = "expires=" + d.toGMTString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for(var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function checkCookie() { var user=getCookie("user1"); if (user != "") { alert("Welcome again " + user); } else { setCookie("user1", "unknown user", 60); } } 119. Διατυπώστε τον κώδικα για ένα script που θα τυπώσει ένα HTML table με 7 σειρές και 6 στήλες. Σε κάθε κελί θα υπάρχει και ένας αριθμός σε αύξουσα σειρά από το 1 ως το 42. Ο πίνακας θα είναι κεντραρισμένος στην σελίδα, με border 1 και padding 4. Η στοίχιση μέσα στα κελιά θα είναι κεντρική και κάθε έβδομος αριθμός (7,14,21...) θα είναι έντονος (bold) και θα έχει χρώμα κόκκινο. SDSDSSDS 120. Στείλτε ένα email σε όλες τις εγγραφές του πίνακα subscribers χρησιμοποιώντας τη συνάρτηση mail (to, subject, body). Το email θα έχει θέμα "Login info" και περιεχόμενο "Your username is <το username χρήστη> and your password is <το password χρήστη> ". Δεν απαιτείται ο κώδικας σύνδεσης με τον (My)Sql server. Ο πίνακας subscribers έχει τα πεδία id, username, password, email. SDSDSDSDS 121. Ποιές είναι οι σημάνσεις HTML (<σήμανση>), όπως εμφανίζονται στον επιλογέα σήμανσης του Dreamweaver, α) για ένα πίνακα, β) για μια γραμμή πίνακα, γ) για ένα κελί πίνακα, και δ) για μια κεφαλίδα πίνακα; Αναφέρατε μόνο τον κώδικό σήμανσης για την κάθε μια από τις τέσσερις περιπτώσεις. SDSDSDSDS 122. Γιατί είναι προτιμότερο να ορίζω το στυλ των ιστοσελίδων μου (CSS) σε ένα εξωτερικό αρχείο παρά να εισάγω το στυλ εσωτερικά σε κάθε μια ιστοσελίδα; Ποιό είναι το πρόβλημα με την χρήση εσωτερικών (inline) στυλ; SDSDSDSD 123. Ποιοί είναι οι τύποι επιλογέων (Selector Types) που χρησιμοποιούνται για τον ορισμό στυλ ενός CSS (Cascading Style Sheet); Περιγράψτε ποιος είναι ο ρόλος του κάθε τύπου. Δώστε ένα παράδειγμα για κάθε τύπο. SDSDSDSD 124. Περιγράψτε πώς, με τη βοήθεια σχετικού εργαλείου, μπορείτε να εισάγετε σε μια ιστοσελίδα έναν πίνακα δύο στηλών (η πρώτη πλάτους 100 pixels και η δεύτερη πλάτους 300 pixels) και τριών γραμμών, στοιχισμένο στο κέντρο. SDSDSDSD 125. Περιγράψτε πώς με τη χρήση σχετικού εργαλείου, μπορείτε να δημιουργήσετε IMAGE HOTSPOTS, να εισάγετε ένα JAVA APPLET και πώς μπορείτε να εισάγετε μια αριθμημένη λίστα σε μια ιστοσελίδα. Ποιους άλλους τύπους λίστας μπορείτε να εισάγετε και με ποιο τρόπο; SDSDSDSD 126. Τι είναι τα «ερωτήματα» (queries) στο σχεσιακό μοντέλο Βάσεων δεδομένων; SDSDSDS 127. Τι είναι ένα σύστημα διαχείρισης βάσης δεδομένων; SDSDSDSD 128. Τι χρησιμοποιούμε προκειμένου να απεικονίσουμε τον πραγματικό κόσμο σ' ένα μοντέλο, το οποίο εύκολα μεταφράζεται σε Σύστημα Διαχείρισης Βάσης Δεδομένων (ΣΔΒΔ); SDSDSDSD 129. Εξηγήστε τι σημαίνει ότι «μία σχέση οντοτήτων είναι ένα προς πολλά». Δώστε ένα παράδειγμα. SDSDSDS 130. Τι είναι λειτουργικές εξαρτήσεις (functional dependecies); Ποιες μορφές λειτουργικών εξαρτήσεων γνωρίζετε; SDSDSDSDS 131. Ποια είναι τα στάδια ανάπτυξης μίας βάσης δεδομένων; SDSDSDS 132. Tί σημαίνει ο ορισμός Supertype και τι Subtype; Δώστε ένα παράδειγμα για τον κάθε ορισμό.(βασεις) σδσδσδσδσαδσ 133.Τι ονομάζουμε κανονικοποίηση μιας βάσης δεδομένων και πότε λέμε ότι μία σχέση ή πίνακας βρίσκεται σε πρώτη κανονική μορφή; DSDSDS 134. Εξηγήστε την οργάνωση αρχείων με δείκτη «index» σε ένα σύστημα διαχείρισης βάσεων δεδομένων. DSDSDSD 135. Τι είναι «πρωτεύον κλειδί» (primary key) και τί «εξωτερικό κλειδί» (foreign key) στο σχεσιακό μοντέλο βάσεων δεδομένων; SDSDSDSD 136. Ποιους τύπους δεδομένων υποστηρίζει η γλώσσα προγραμματισμού σχεσιακών βάσεων δεδομένων SQL; SDSDSDS 137. Εξηγήστε πότε λέμε ένα ότι ένα σύστημα βάσεων δεδομένων λειτουργεί σε περιβάλλον πολλαπλών χρηστών. SDSDSDS 138. Εξηγήστε τι είναι τα κατανεμημένα συστήματα βάσεων δεδομένων (distributed database systems). SDSDSDS 139. Εξηγήστε τι ονομάζουμε ανοικτά συστήματα διασύνδεσης βάσεων δεδομένων, όπως τα συστήματα που υποστηρίζουν το «Open Database Connectivity (ODBC)». SDSDSD 140. Τι σημαίνει «Ακεραιότης Αναφορών-Referential Integrity»; Δώστε ένα παράδειγμα. SDSDSDS 141. Να αναφέρετε τα μοντέλα βάσεων δεδομένων που γνωρίζετε και ποιες είναι οι διαφορές τους. SDSDSDS 142. Εξηγήστε τι είναι «γλώσσα χειρισμού δεδομένων» (Data Manipulation Language) και τι «γλώσσα ορισμού δεδομένων» (Data Definition Language), τα δυο βασικά τμήματα που χωρίζεται η γλώσσα διαχείρισης βάσεων δεδομένων SQL. SDSDSDS 143. Ποιοι είναι οι τρεις πρώτοι κανόνες κανονικοποίησης; Δώστε ένα παράδειγμα για τον κάθε ένα από αυτούς. SDSDSD 144. Τί είναι το Μοντέλο Οντοτήτων Συσχετίσεων(ΜΟΣ); Παρουσιάστε σχηματικά πώς απεικονίζονται στο ΜΟΣ οι οντότητες (entity), οι ιδιότητες των οντοτήτων (attributes), τα πρωτεύοντα κλειδιά (primary key) και οι σχέσεις (relation type και identifying relationship type). SDSDSDS 145.Έχουμε δύο οντότητες: Η μία είναι Πολίτης και η άλλη Πόλη. Για αυτές τις δύο οντότητες αναπαραστήστε σχηματικά, με τη βοήθεια της γλώσσας ERDish, τις ακόλουθες σχέσεις: 1. Κάθε Άτομο πρέπει να έχει γεννηθεί μόνο σε μία Πόλη / Κάθε Πόλη μπορεί να είναι γενέτειρα ενός ή περισσότερων Πολιτών 2. Κάθε Πολίτης πρέπει να έχει μόνιμη κατοικία σε μία μόνο Πόλη / Κάθε Πόλη μπορεί να είναι ο τόπος κατοικίας ενός ή περισσότερων Πολιτών 3. Κάθε Πολίτης μπορεί να είναι επισκέπτης μίας ή περισσοτέρων Πόλεων/ Κάθε Πόλη πρέπει να την έχει επισκεφθεί ένας ή περισσότεροι Πολίτες. SDSDSDSD 146. Αναλύστε τις βασικές διαφορές μεταξύ C και C++, όσον αφορά στα χαρακτηριστικά που προσθέτει η C++. FDSFDFDF 147. Ποια είναι η διαφορά μεταξύ του αντικειμένου και της κλάσης; Δώστε ένα παράδειγμα. DFDSFSDFDF Μία Κλάση (Class) είναι ένα σύνολο δηλώσεων που αφορούν στην περιγραφή μιας συγκεκριμένης κατηγορίας αντικειμένων (object). παράδειγμα: Δηλώνουμε μία Κλάση House ως εξής: class House { String owner; String address; int post_code; float sq_metres; } Στο παραπάνω παράδειγμα η Κλάση House ορίζει όλες τις παραμέτρους που χρειάζονται για να προσδιορίσουμε ένα αντικείμενο της συγκεκριμένης κλάσης. Δηλαδή: Τον ιδιοκτήτη του σπιτιού Τη διεύθυνση Τον ταχυδρομικό κώδικα Το εμβαδόν Ένα αντικείμενο (object) αποτελεί μία εκδοχή μιας συγκεκριμένης κλάσης (class instance). Έτσι σύμφωνα με το παραπάνω παράδειγμα θα μπορούσαμε να είχαμε τα παρακάτω αντικείμενα: Μία Κλάση στην ουσία αποτελεί τη μήτρα για να παραχθούν συγκεκριμένου τύπου αντικείμενα. 148. Ποιες είναι οι διαφορές μεταξύ του δομημένου προγραμματισμού και του προγραμματισμού οδηγούμενου από γεγονότα; DSFDSFDFD 149. Αναφέρετε τι καθορίζει η κλάση (class) ενός αντικειμένου και τι το στιγμιότυπο (instance) ενός αντικειμένου σε μια αντικειμενοστραφή γλώσσα προγραμματισμού. Μιά κλάση είναι μιά περιγραφή ενός τύπου αντικειμένου: περιγράφει τα χαρακτηριστικά καί τη συμπεριφορά του συγκεκριμένου τύπου αντικειμένου Όλα τα αντικείμενα είναι στιγμιότυπα μιάς κλάσης Η σχέση ενός αντικειμένου με μιά κλάση είναι παρόμοια με τη σχέση μιάς μεταβλητής με τον τύπο της μεταβλητής σε μιά γλώσσα προγραμματισμού Μία κλάση είναι ένα πρότυπο για τη δημιουργία παρόμοιων αντικειμένων. • Μία κλάση είναι όπως ένα αρχιτεκτονικό σχέδιο: περιγράφει τις ιδιότητες ενός αντικειμένου • Όλα τα αντικείμενα σε μία κλάση έχουν τα ίδια χαρακτηριστικά, τις ίδιες μεθόδους αλλά όχι τις ίδιες τιμές. • Από μία κλάση μπορούν να δημιουργηθούν πολλά στιγμιότυπα (αντικείμενα) 150. Τι είναι ο constructor και τι ο destructor σε μια κλάση; Ποιος είναι ο λόγος χρήσης τους; DSFDFDFDS Εκτός απ’τις μεθόδους και τις μεταβλητές που ορίζουμε εμείς, κάθε Κλάση περιλαμβάνει και μία ειδική μέθοδο που αφορά ένα σύνολο εντολών το οποίο εκτελείται κάθε φορά που ένα νέο αντικείμενο δημιουργείται. Η ειδική αυτή μέθοδος καλείται constructor και ξεχωρίζει από τις υπόλοιπες μεθόδους της Κλάσης, αφού η ονομασία που της δίνουμε είναι αυτή της Κλάσης: class Sphere { // Class variables static final double PI = 3.14; static int count = 0; // Instance variables double radius; double xCenter; double yCenter; double zCenter; //Class constructor Sphere(double theRadius, double x, double y, double z) { radius = theRadius; xCenter = x; yCenter = y; zCenter = z; ++count; } //static method static int getCount() { return count; } //instance method double volume() { return 4.0/3.0*PI*radius*radius*radius; } … } Η παραπάνω μέθοδος constructor κάθε φορά που θα καλείται για να δημιουργηθεί ένα αντικείμενο κλάσης Sphere, αφενός θα δίνει κάποιες τιμές στις μεταβλητές radius, xCenter, yCenter και zCenter για το κάθε αντικείμενο, αφετέρου θα αυξάνει την μεταβλητή κλάσης count κατά μία μονάδα. Επειδή όπως είδαμε και πριν μία μεταβλητή κλάσης μοιράζεται από όλα τα αντικείμενα της ίδιας Κλάσης, η μεταβλητή αυτή θα λειτουργεί σαν μετρητής: για κάθε νέο αντικείμενο που θα δημιουργείται θα προστίθεται σε αυτήν και μία μονάδα. Πώς δημιουργούνται αντικείμενα από μια Κλάση; Όταν δηλώνουμε: Sphere ball; στην ουσία δεν δημιουργούμε κάποιο αντικείμενο. Απλώς δηλώνουμε πως δημιουργούμε την μεταβλητή ball η οποία θα αναφέρεται σε ένα αντικείμενο Κλάσης Sphere, όταν και όποτε αυτό δημιουργηθεί. Προκειμένου να δημιουργήσουμε ένα αντικείμενο κάνουμε χρήση της δήλωσης new ακολουθούμενο από την μέθοδο constructor με τα επιθυμητά ορίσματα: ball = new Sphere(10.0, 1.0, 1.0, 1.0); Οι παραπάνω δύο δηλώσεις, μπορούν να συμπτυχθούν σε μία: Sphere ball = new Sphere(10.0, 1.0, 1.0, 1.0); Μία Κλάση μπορεί να έχει πολλαπλούς constructors, καθένας απ’τους οποίους διαφοροποιείται απ’τους υπόλοιπους με βάση τα ορίσματα που χρησιμοποιεί. Έτσι, εκτός απ’το παραπάνω παράδειγμα μπορούμε να φτιάξουμε δύο ακόμη constructors, ο πρώτος εκ των οποίων δημιουργεί αντικείμενα μοναδιαίας ακτίνας (radius = 1) και ο δεύτερος επίσης μοναδιαίας ακτίνας και στην αρχή των αξόνων (0, 0, 0): class Sphere { ... //Class constructor #1 Sphere(double theRadius, double x, double y, double z) { radius = theRadius; xCenter = x; yCenter = y; zCenter = z; ++count; } //Class constructor #2 Sphere(double x, double y, double z) { radius = 1.0; xCenter = x; yCenter = y; zCenter = z; ++count; } //Class constructor #3 Sphere() { radius = 1.0; xCenter = 0.0; yCenter = 0.0; zCenter = 0.0; ++count; } ... } με αντίστοιχες κλήσεις: Sphere unaryBall = new Sphere(3.0, 4.0, 5.0); Sphere originBall = new Sphere(); Όπου ανάλογα τα ορίσματα που δηλώνουμε καλείται ο αντίστοιχος constructor. Στη C++, ό,τι αντικείμενο δημιουργούμε δυναμικά πρέπει να το καταστρέφουμε (συνήθως με την εντολή delete) ελευθερώνοντας όλους τους πόρους που δεσμεύσαμε κατά την ύπαρξή του (κλείσιμο αρχείων, αποσύνδεση από βάσεις δεδομένων, τερματισμός threads, αποδέσμευση μνήμης, κλπ). Η καταστροφή του αντικειμένου γίνεται καλώντας μια μέθοδο που καλείται καταστροφέας (destructor). Το όνομα του destructor είναι το ίδιο με της κλάσης προπορευόμενο από τον τελεστή ~. Δηλαδή για την κλάση Car, το όνομα του καταστροφέα είναι ~Car(). Ενώ ο δημιουργός είναι απαραίτητο να οριστεί τις περισσότερες φορές, δεν είναι πάντα απαραίτητος ο ορισμός του καταστροφέα. Κάτι τέτοιο έχει νόημα μόνο όταν στον δημιουργό πραγματοποιούμε κάποια δυναμική λειτουργία (άνοιγμα δικτυακής σύνδεσης, αρχείου, κλπ), και την οποία πρέπει να τερματίσουμε κατά την καταστροφή του αντικειμένου (π.χ. κλείσιμο αρχείου, τερματισμός σύνδεσης, κλπ). 151. Δώστε τον ορισμό των πιο σημαντικών χαρακτηριστικών του αντικειμενοστραφούς προγραμματισμού: Ενθυλάκωση (Encapsulation), Πολυμορφισμός (Polymorphism), Κληρονομικότητα (Inheritance) SDFDFDFDF Encapsulation () Η διαδικασίες κρύβονται από το χρήστη και τα ίδια τα δεδομένα προσδιορίζουν τους τρόπους διαχείρισης τους. • Polymorphism (πολυμορφισμός) Αντικείμενα που ανήκουν σε παρόμοιες κλάσεις μπορούν να έχουν κοινό τρόπο προσπέλασης, με αποτέλεσμα ο χρήστης να μπορεί να τα χειριστεί με τον ίδιο τρόπο χωρίς να χρειάζεται να μάθει νέες διαδικασίες. • Inheritance (κληρονομικότητα) Μπορούμε να δημιουργήσουμε ένα νέο αντικείμενο παίρνοντας ως βάση ένα άλλο ήδη υπάρχον. Το νέο αντικείμενο θα έχει τα χαρακτηριστικά του παλιού ενώ θα μπορέι να τα τροποποιήσει, να τα επεκτείνει και να προσθέσει καινούρια για να καλύψει συγκεκριμένες ανάγκες. Ενθυλάκωση ή Κελυφοποίηση ή απόκρυψη πληροφοριών (encapsulation) Η απόκρυψη των λεπτομερειών υλοποίησης ενός αντικειμένου (ελεγχόμενη ορατότητα των πεδίων και μεθόδων του αντικειμένου). Δημόσια (public) πεδία/μέθοδοι: αυτά που μπορούν να χρησιμοποιηθούν (κληθούν/ προσπελαστούν) από τα άλλα αντικείμενα. Ιδιωτικά (private) πεδία/μέθοδοι: αυτά που χρησιμοποιούνται μόνο από το ίδιο το αντικείμενο. ΣΧΕΣΕΙΣ ΜΕΤΑΞΥ ΚΛΑΣΕΩΝ Κληρονομικότητα ή γενίκευση (inheritance - generalization) Όταν μία κλάση αποδίδει σε μία άλλη κλάση τα χαρακτηριστικά της. Η πρώτη κλάση λέγεται κλάση-γονέας η δε δεύτερη κλάση-παιδί, και μπορεί να διαθέτει επιπλέον χαρακτηριστικά (πεδία και μεθόδους) από αυτά που κληρονομεί. Σε μία σχέση κληρονομικότητας με ένα μόνο γονέα έχουμε την απλή κληρονομικότητα (single inheritance), ενώ στην αντίθετη περίπτωση πολλαπλή κληρονομικότητα (multiple inheritance). Αν δούμε την κληρονομικότητα από την κλάση-παιδί προς την κλάση-γονέα, τότε παρατηρούμε ότι η κλάση-γονέας έχει λιγότερα χαρακτηριστικά από την κλάση-παιδί, δηλαδή αποτελεί γενίκευσή (generalization) της. Με την κληρονομικότητα έχουμε και τον ορισμό της επαναχρησιμοποίησης (δεδομένων και λειτουργιών). Πολυμορφισμός (polymorphism) Πολυμορφισμός είναι η δυνατότητα εκτέλεσης διαφορετικών λειτουργιών μιας μεθόδου που είναι κοινή σε διαφορετικές κλάσεις (συνήθως κλάση-γονέα και κλάση-παιδί), ανάλογα με το αντικείμενο της κλάσης που την καλεί. Είναι μία σημαντική ιδιότητα του αντικειμενοστρεφούς προγραμματισμού που χρησιμοποιείται ευρέως στην επεκτασιμότητα των εφαρμογών. 152. Αναλύστε τις διαφορετικές τεχνικές προγραμματισμού procedural (διαδικαστικός), structured (δομημένος) και object-oriented (αντικειμενοστραφή). SDFDFDFDFDS 153. Αναλύστε ποιός είναι ο ρόλος της οδηγίας #include 154. Δώστε ένα παράδειγμα σε C++ που να εκτυπώνει τα παρακάτω μηνύματα το ένα κάτω από το άλλο: “Ένα απλό Πρόγραμμα”, “Είναι γραμμένο σε C++” , “Η C++ είναι αντικειμενοστραφής γλώσσα προγραμματισμού”. DSFDFDFDSF #include /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; int main(int argc, char** argv) { cout << "Ena aplo programma" << endl; cout << "Einai grammeno se C++" << endl; cout << "H C++ einai ...." << endl; return 0; } 155. Αναλύστε τι είναι το λάθος σε χρόνο εκτέλεσης και τι λάθος κατά την μεταγλώττιση. Να αναφέρετε από δύο αιτίες που προκαλούν αυτά τα λάθη. SDFDFDFD 156. Αναλύστε τις διαφορές μεταξύ if και else if όσον αφορά στον έλεγχο και στη χρήση τους. Δώστε παράδειγμα. SDFDFDFDS Το if ελέγχει παντα την συνθηκη ενώ το else if θα ελέγξει την συνθηκη μόνο αν ο προηγούμενος έλεγχος (If ή else if) έχει αποτέλεσμα ψευδές 157. Αναλύστε τη χρήση των πινάκων χαρακτήρων string στον προγραμματισμό με C++. DFDSFDSFD 158. Αναλύστε τις διαφορές μεταξύ for, while και do while, όσον αφορά στον έλεγχο των συνθηκών τους. Δώστε από ένα παράδειγμα σε C++. SDFDFDFS 159. Αναλύστε τη χρήση της υπερφόρτωσης σε συναρτήσεις και κατασκευαστές. SDFDFDSF 160. Τι είναι ένα string στην C++ και σε τι διαφέρει από ένα αλφαριθμητικό C-string; SDFDFDFDS C strings (a.k.a. null-terminated strings) Declaration A C string is usually declared as an array of char. However, an array of char is NOT by itself a C string. A valid C string requires the presence of a terminating "null character" (a character with ASCII value 0, usually represented by the character literal '\0'). Since char is a built-in data type, no header file is required to create a C string. The C library header file // Character array - can hold a C string, but is not yet a valid C string char s2[20] = { 'h', 'e', 'l', 'l', 'o', '\0' }; char s3[20] = "hello"; char s4[20] = ""; // Array initialization // Shortcut array initialization // Empty or null C string of length 0, equal to "" It is also possible to declare a C string as a pointer to a char: char* s3 = "hello"; This creates an unnamed character array just large enough to hold the string (including the null character) and places the address of the first element of the array in the char pointer s3. This is a somewhat advanced method of manipulating C strings that should probably be avoided by inexperienced programmers. If used improperly, it can easily result in corrupted program memory or runtime errors. Representation in Memory Here is another example of declaring a C string: char name[10] = "Karen"; The following diagram shows how the string name is represented in memory: The individual characters that make up the string are stored in the elements of the array. The string is terminated by a null character. Array elements after the null character are not part of the string, and their contents are irrelevant. A "null string" is a string with a null character as its first character: The length of a null string is 0. C++ string objects Declaration A C++ string is an object of the class string, which is defined in the header file // Default constructor - creates an empty or null C++ string of length 0, equal to "" string s2("hello"); // Explicit constructor call to initialize new object with C string string s3 = "hello"; // Implicit constructor call to initialize new object with C string string s4(s2); // Explicit constructor call to initialize new object with C++ string string s5 = s2; // Implicit constructor call to initialize new object with C++ string Representation in Memory Here is another example of declaring a C++ string: string name = "Karen"; name is a string object with several data members. The data member p is a pointer to (contains the address of) the first character in a dynamically-allocated array of characters. The data member lengthcontains the length of the string. The data member capacity contains the number of valid characters that may currently be stored in the array. A "null string" is a string with a length of 0: The length of a null string is 0. 161. Αναλύστε τη χρήση των πινάκων χαρακτήρων string στον προγραμματισμό με C++. DSFDFDS 162. Δημιουργήστε σε C++ ένα πρόγραμμα το οποίο θα δέχεται από τον χρήστη ένα αριθμό και θα επιστρέφει ως τιμή το παραγοντικό του αριθμού. Χρησιμοποιήστε συναρτήσεις αναδρομής. Παράδειγμα το παραγοντικό του 7! είναι:5040 (1*2*3*4*5*6*7). Γενικά:Ν!=(1*2*3...*Ν) και 0!=1 DFDFDFDF #include class parag{ int input; int output; public: int calc(int x) { if (x==1) return 1; else { return(x*calc(x-1)); } } parag(int a) { input = a; output = calc(a); } int get_output() { return output; } }; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; int main(int argc, char** argv) { int number; cin >> number; parag ask1(number); cout << ask1.get_output(); return 0; } 163. Δημιουργήστε το πρόγραμμα εύρεσης λέξης string σε C++. Το πρόγραμμα δημιουργεί δύο πίνακες string που ο πρώτος περιέχει την πρόταση «C++ is an object oriented Language and is a superset of C». Ο δεύτερος περιέχει την λέξη «is». Το πρόγραμμα πρέπει να ψάχνει στον πρώτο πίνακα να βρει εάν υπάρχει η λέξη που περιέχεται στο δεύτερο πίνακα και να επιστρέφει τη θέση στην οποία βρίσκεται καθώς και πόσες φορές επαναλαμβάνεται. SDSDSDSD #include /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; int main(int argc, char** argv) { string s1="C++ is an object oriented Language and is a superset of C"; string s2 = “is”; int ndx, cnt; cnt=0; ndx = s1.find("is"); while((0<=ndx) && (ndx < s1.length())) { cout << ndx << endl; cnt++; ndx = s1.find("is",ndx+1); } cout << cnt < 164.Γράψτε δυο συναρτήσεις που θα υπολογίζουν τον Μέγιστο Κοινό Διαιρέτη (ΜΚΔ) και το Ελάχιστο κοινό πολλαπλάσιο (ΕΚΠ) δυο ακέραιων αριθμών. ΜΚΔ είναι ο μεγαλύτερος από τους κοινούς διαιρέτες δηλαδή τους αριθμούς που τους διαιρούν ακριβώς. Κοινό πολλαπλάσιο (Κ.Π.) δύο ή περισσοτέρων αριθμών λέγεται κάθε ακέραιος, εκτός από το 0, που το συναντάμε κοινό στα πολλαπλάσια των δύο αριθμών. Ο μικρότερος από τα κοινά πολλαπλάσια κάποιων ακέραιων αριθμών λέγεται Ελάχιστο Κοινό Πολλαπλάσιο(Ε.Κ.Π.). ΜΕΓΣΙΤΟΣ ΚΟΙΝΟΣ ΔΙΑΙΡΕΤΗΣ #include } } cout<<"Greatest Common Divison (GCD):"< ΕΛΑΧΙΣΤΟ ΚΟΙΝΟ ΠΟΛΛΑΠΛΑΣΙΟ #include int main() { int first_number; cout<<"Enter First Number : ";cin>>first_number; int second_number; cout<<"Enter Second Number: ";cin>>second_number; int ekp, a,b; if(first_number < second_number) { a= first_number; b= second_number; } else { a= second_number; b=first_number; } for(int i=1;;i++) { ekp = a*i; if(ekp%b == 0) break; } cout<<"EL KO PO:"< 165.Αναλύστε τους όρους "κληρονομικότητα" και "πολυεπίπεδη κληρονομικότητα" (multi- level inheritance). Δώστε παραδείγματα σε C++ κώδικα. FGFGF 166. Ποια χρωματικά μοντέλα υπάρχουν; Δώστε μια σύντομη περιγραφή για τη λειτουργία τους και για τα χρώματα που χρησιμοποιούνται στο κάθε ένα. DFGFGFDG 167. Ποιο χρώμα ονομάζουμε πρωτεύον συμπληρωματικό και ποια δευτερεύοντα; Δώστε δύο (2) παραδείγματα, καθώς και αιτιολογία για το λόγο χρήσης τους. FDGFGDF 168. Ποια είναι τα χαρακτηριστικά μιας ψηφιογραφικής εικόνας (bitmap); DFGFGF 169. Ποιο είναι το μέγεθος μίας ασυμπίεστης εικόνας bitmap (σε bytes), διαστάσεων 100x100 pixels, αν είναι :α) true-color; β) grayscale; FDGFDGDF 170. Να αναφέρετε τέσσερις μορφές αρχείων ψηφιογραφικών εικόνων (bitmap) και πού χρησιμοποιούνται, συνήθως, αντίστοιχα. DFGFDGF 171. Ποια η χρησιμότητα μάσκας κατά την επεξεργασία εικόνας; DFGFDGDFG 172. Τι είναι πρότυπο συμπίεσης εικόνας JPEG; Ποια είναι τα μειονεκτήματα και τα πλεονεκτήματα του; DFGFGFD 173. Τι ονομάζουμε Bit Depth, τι ονομάζουμε Color Depth και ποιες κατηγορίες εικόνων γνωρίζετε με βάση το bit depth; DFGFDGF 174. Ποια είναι τα πλεονεκτήματα και τα μειονεκτήματα των ψηφιογραφικών εικόνων bitmap; DGFGFD 175. Αναφέρετε τους τρόπους λήψης και ψηφιοποίησης ψηφιογραφικής εικόνας. DFGFGFD 176. Με ποια εντολή δημιουργούμε, διαγράφουμε έναν πίνακα και με ποια εντολή διαγράφουμε τα δεδομένα ενός πίνακα; FDGFGFDG 177. Τί εννοούμε όταν αναφερόμαστε στις όψεις; Ορίστε την "όψη" στην SQL. DFGFGFDG 178. Τί είναι ένα ευρετήριο (index); Δώστε ένα παράδειγμα με χρήση κώδικα SQL. DFGFDGFD 179. Ποια είναι η χρήση των stored procedures; Δώστε δύο παραδείγματα για τη δομή τους. DFGFGD 180. Με τη χρήση κώδικα SQL δημιουργήστε ένα πίνακα ο οποίος στην πρώτη στήλη με τίτλο "Κωδικός" και τιμές 053, 109, 027, στη δεύτερη την ιδιότητα με τίτλο: "Όνομα" και τιμές: Παπαδόπουλου, Χατζηκώστα, Καρανίκα, στη τρίτη με τίτλο "Τηλέφωνο" και τιμές 21041111, 21033099, 21023322. Η κάθε στήλη θα έχει και τον αντίστοιχο τύπο δεδομένων. DFGFGFDGD 181. Τί είναι τα ψευδώνυμα και πού τα χρησιμοποιούμε; Εξηγήστε τον ακόλουθο κώδικα: SELECT E.NAME, S.NAME FROM EMPLOYEE E, EMPLOYEE S WHERE E.SUPERSN=S.SN DFGFGFDG 182. Αν στο αποτέλεσμα ενός ερωτήματος πάρουμε ως απάντηση πολλαπλές πλειάδες πώς τις εξαλείφουμε; Δώστε ένα παράδειγμα σε SQL. FDGFDGFDG 183. Πώς επιτυγχάνουμε τη διάταξη των αποτελεσμάτων του ερωτήματος; Δώστε ένα παράδειγμα όπου θα επιλέγεται από ένα πίνακα το ονοματεπώνυμο ενός σπουδαστή και θα εμφανίζονται τα αποτελέσματα ταξινομημένα κατά αύξουσα αλφαβητική σειρά στο όνομα και κατά φθίνουσα αλφαβητική σειρά στο επώνυμο. DFGFGFGFDG 184.Εξηγήστε τον ακόλουθο κώδικα: SELECT ΝΑΜΕ FROM WORKER W WHERE EXISTS (SELECT * FROM CONNECT C WHERE ID=C.CONNECT_ID AND W.Name=C.CONNECT_Name); GHJHGJGHJH 185. Δώστε 3 τύπους συνένωσης στην SQL (όχι το απλό JOIN) και για κάθε έναν από αυτούς δώστε ένα παράδειγμα με χρήση κώδικα SQL. HJHJHGJHGJ 186.Αναλύστε τη χρήση των συναρτήσεων στον αντικειμενοστραφή προγραμματισμό. Δώστε παράδειγμα πως οι συναρτήσεις καλούνται ως μηνύματα σύνδεσης μεταξύ τάξεων. HGJHJHGJ 187.Ποια από τα ακόλουθα είναι σωστά και ποια είναι λάθος; Αιτιολογήτε την απάντησή σας για κάθε περίπτωση. Person p1 = new Student(); Person p2 = new PhDStudent(); PhDStudent phd1 = new Student(); Prof t1 = new Person(); Student s1 = new PhDStudent(); Η πλήρης εκφώνηση της άσκησης ειναι ως εξής: Assume that we have four classes: Person, Teacher, Student, and PhDStudent. Teacher and Student are both subclasses of Person. PhDStudent is a subclass of Student. a. Which of the following assignments are legal, and why or why not? Person p1 = new Student(); //legal Person p2 = new PhDStudent(); //legal PhDStudent phd1 = new Student(); //illegal cannot store general (super class) in sub class PhDStudent Teacher t1 = new Person(); //illegal cannot store super class in type Teacher of sub class of Person Student s1 = new PhDStudent(); //legal 188. Γιατί δεν μπορούμε να αφαιρέσουμε πεδία από μια subclass ενώ μπορούμε να προσθέσουμε; Η αρχή της κληρονομικότητας αφορά στην δημιουργία μιας νέας κλάσης η οποία ονομάζεται παράγωγη (derived/subcalss) από μία υπάρχουσα (ονομάζεται βασική ή base class/superclass) και άρα με τον τρόπο αυτόν επιτυγχάνεται επαναχρησιμοποίηση κώδικα. Ως αποτέλεσμα του μηχανισμού της κληρονομικότητας υπάρχουν οι εξής δυνατότητες: Εξ’ ορισμού τα χαρακτηριστικά και η συμπεριφορά της αρχικής κλάσης κληροδοτούνται στην παράγωγη κλάση (ΑΡΑ ΔΕΝ ΜΠΟΡΟΥΝ ΝΑ ΑΦΑΙΡΕΘΟΥΝ) Μπορεί να γίνει επέκταση της αρχικής κλάσης προσθέτοντας νέες μεταβλητές-μέλη (χαρακτηριστικά) (ΑΡΑ ΜΠΟΡΟΥΝ ΝΑ ΠΡΟΣΤΕΘΟΥΝ) Μπορεί να εξειδικευτεί η συμπεριφορά του αντικειμένου προσθέτοντας νέες μεθόδους ή τροποποιώντας κάποιες από τις υπάρχουσες 189. Ποια είναι η διαφορά μεταξύ ενός Frame και ενός Dialog; GHGHJHGJHG 190.Ποια είναι η διαφορά μεταξύ ενός αντικείμενου Menu και ενός MenuBar (σε Java); To μενού ως τμήμα ενός γραφικού (παραθυρικού) περιβάλλοντος διασύνδεσης με τον χρήστη, αποτελείται από τρία βασικά μέρη: Τη γραμμή μενού που λειτουργεί ως υποδοχέας για τα μενού Τα ίδια τα μενού που ανοίγουν και κλείνουν Τα στοιχεία του κάθε μενού που εμφανίζονται όταν το μενού ανοίγει και αποκρύπτονται όταν κλείνει. Τα μενου στο Swing (Java Library) δημιουργούνται με τη βοήθεια των κλάσεων JmenuBar, JMenuItem και Jmenu. Η κλάση JMenuBar κληρονομεί από την JComponent και προσφέρει μεθόδους για τον χειρισμό της γραμμής μενού. Η κλάση JmenuItem προσφέρει μεθόδους για τον χειρισμό των στοιχείων που υπάρχουν στα μενού Η κλάση Jmenu προσφέρει μεθόδους για τον χειρισμό των μενού που περιέχουν στοιχεία μενού. Παράδειγμα import java.awt.*; import javax.swing.*; public class VAuthor extends JFrame { private JMenuBar menuBar = new JMenuBar(); private JMenuItem newItem, openItem, saveItem, public VAuthor (String title){ …….. //1 JMENUBAR menuBar = new JMenuBar(); …… //2 επιλογές JMENU JMenu fileMenu = new JMenu("Αρχείο"); JMenu helpMenu = new JMenu("Βοήθεια"); saveAsItem, exitItem, aboutItem; // 2 JMENUITEMS fileNew = new JmenuItem(“Νέο”); fileOpen = new JMenuItem(“Άνοιγμα”); //Σύνδεση των JMENUITEMS σε ένα JMENU fileMenu.add(fileNew); fileMenu.add(fileOpen); //Σύνδεση των JMENU στο JMENUBAR menuBar.add(fileMenu); menuBar.add(helpMenu); //Ενεργοποίηση του μενού MENUBAR στο παράθυρο setJMenuBar(menuBar); 191.Ποια είναι η διαφορά μεταξύ ενός Menu και ενός MenuItem (σε Java); Βέπε Ερώτηση190 192.Ποια είναι η διαφορά μεταξύ της επανεκκίνησης και της επαναφόρτωσης ενός Java applet; BVCBVCBVCB 193. Τι είναι οι constructors στην JAVA; Δώστε ένα παράδειγμα. Ένας δημιουργός (constructor) είναι μία ειδική μέθοδος η οποία είναι υπεύθυνη για τη δημιουργία των αντικειμένων μιας κλάσης και για τον λόγο αυτόν, κάθε κλάση θα πρέπει να περιέχει τουλάχιστον έναν. Οι constructors έχουν κάποια χαρακτηριστικά που τους κάνουν να ξεχωρίζουν και οπτικά από τις άλλες μεθόδους. Τα χαρακτηριστικά αυτά είναι: Έχουν το ίδιο ακριβώς όνομα με αυτό της κλάσης Δεν επιστρέφουν καμία τιμή (ούτε void) Επιπλέον, ένας constructor μπορεί όπως οι κοινές μέθοδοι να λαμβάνει παραμέτρους ή όχι, ενώ το γεγονός πως μπορούμε να έχουμε περισσότερους του ενός σε μία κλάση σημαίνει πως μπορούν να υπερφορτωθούν. Πράγματι, οι constructors αποτελούν χαρακτηριστικό παράδειγμα μεθόδων που υπερφορτώνονται, αφού συνήθως σε μία κλάση έχουμε τουλάχιστον δύο. Οι constructors είναι το μέρος που τοποθετούμε κώδικα αρχικοποίησης για το κάθε αντικείμενο, π.χ. για να αποδώσουμε αρχικές τιμές στο αντικείμενο (η πιο συνήθης χρήση), να κάνουμε δέσμευση πόρων, έλεγχο εγκυρότητας τιμών κλπ. Αν και οι constructors μπορούν να έχουν οποιονδήποτε προσδιοριστή ορατότητας, τους κάνουμε πάντοτε public όπως άλλωστε και τις άλλες μεθόδους της κλάσης. Δίνοντας προσδιοριστή ορατότητας private στους constructors μιας κλάσης, δε θα είναι δυνατόν να δημιουργηθούν αντικείμενα. Δεδομένου πως η ύπαρξη ενός τουλάχιστον constructor είναι υποχρεωτική και ζωτικής σημασίας για οποιαδήποτε κλάση ώστε να μπορεί να δημιουργήσει αντικείμενα, η Java χρησιμοποιεί έναν μηχανισμό που εξασφαλίζει πως σε κάθε κλάση θα υπάρχει σίγουρα ένας. Σύμφωνα με τον μηχανισμό αυτόν λοιπόν, αν σε μία κλάση δεν ορίσει ο προγραμματιστής κάποιον constructor, ο compiler θα δημιουργήσει έναν από μόνος του, ακόμη κι αν στον κώδικα δε βλέπουμε τις αντίστοιχες γραμμές ορισμού του. Αυτόματα δηλαδή κατά το compilation ο compiler θα προσθέσει τις γραμμές που πρέπει, ανεξάρτητα αν σε εμάς αυτή η διαδικασία δεν είναι ορατή. Ο constructor που δημιουργεί ο compiler ονομάζεται default constructor (προκαθορισμένος) και δε λαμβάνει καμία παράμετρο. Επιπλέον, δεν περιέχει καθόλου κώδικα στο σώμα του. Παρόλα αυτά, η λειτουργία του μηχανισμού αυτόματης παραγωγής του default constructor ακολουθεί και αυτή κάποιους κανόνες. Ποιο συγκεκριμένα, για να παράξει ο compiler από μόνος του τον default constructor θα πρέπει ο προγραμματιστής να μην έχει ορίσει κανέναν constructor στην κλάση του, είτε κάποιον που λαμβάνει παραμέτρους είτε όχι. Σε περίπτωση που έχει οριστεί από τον προγραμματιστή έστω και ένας, ο default constructor δε θα παραχθεί αυτόματα. Στα παρακάτω αποσπάσματα κλάσεων για παράδειγμα, στη μία περίπτωση ο compiler θα παράξει αυτόματα τον default constructor ενώ στην άλλη όχι. Ένας constructor καλείται πάντοτε έμμεσα κατά τη δημιουργία ενός αντικειμένου. Ο προγραμματιστής δε μπορεί να καλέσει άμεσα έναν constructor όπως μπορεί οποιαδήποτε άλλη απλή μέθοδο, είναι όμως αυτός που εκκινεί τη διαδικασία κλήσης κάποιου constructor γράφοντας μία εντολή στην οποία δημιουργείται κάποιο αντικείμενο. Όταν λοιπόν ο διερμηνέας συναντήσει μια τέτοια έκφραση, καλείται αυτόματα ο αντίστοιχος constructor, του οποίου η βασική λειτουργία είναι να δεσμεύσει την απαραίτητη μνήμη και να δημιουργήσει το αντικείμενο. Αν περιέχει επιπλέον κώδικα που για παράδειγμα αρχικοποιεί το αντικείμενο με τιμές, ο κώδικας αυτός θα εκτελεστεί αμέσως μετά τη δημιουργία του αντικειμένου. /* class to represent a * single point on the plane */ public class Point { // member variables private int x; // x coord private int y; // y coord // methods // default constructor public Point() { } // initialization constructor with ints public Point(int p_x, int p_y) { x = p_x; y = p_y; } } …….. Point p1 = new Point() //καλείται ο default constructor Point p2 = new Point(1,2); //καλείται ο υπερφορτωμένος constructor 194. Να αναφέρετε από ποια μέρη αποτελείται η Java Virtual Machine και ποιες μεθόδους τρέχει. Virtual Machine (JVM): Η εικονική μηχανή είναι ίσως το πιό σημαντικό συστατικό της αρχιτεκτονικής μιας και είναι υπεύθυνη για την εκτέλεση του ενδιάμεσου κώδικα (bytecode) και τη μετατροπή του στη γλώσσα που ‘καταλαβαίνει’ το λειτουργικό σύστημα και ο επεξεργαστής του συγκεκριμένου μηχανήματος. Ορισμένες από της πολλές λειτουργίες του JVM είναι το φόρτωμα των κλάσεων στη μνήμη από τον Class Loader, ο έλεγχος εγκυρότητας του ByteCode και η αποτροπή εκτέλεσης κακόβουλου κώδικα από τον ByteCode Verifie, η διαχείριση μνήμης, η λειτουργία του μεταγλωττιστή τελευταίας στιγμής (JIT compiler), ο αυτόματος χειρισμός εξαιρέσεων(automated exception handling), κλπ. Constant Pool: The constant pool is a pool of constants. In other words, it contains a list of all the constants contained in a class. Note that each class has its own constant pool in memory. The constants are literals that don't change over time. Post a comment Email Article Print Article Share Articles Class Loader: This is responsible for loading the class files or byte code files. The class loader is responsible for loading classes and interfaces residing in the byte code. The three basic functions of the class loader include: Loading byte code Linking (verification, memory allocation for byte code, and resolution or transformation of symbolic references to direct references) Initialization of variables to their default values Heap Area: This is the region of memory where objects are stored. Note that if the size of an object cannot be determined at compilation time, such objects are stored in the heap; in other words, instances of classes. On the contrary, if the compiler can determine the size of an object at compilation time, such objects are placed in the stack in memory. An example would be variables belonging to fundamental data types. The heap area also contains the Garbage Collected Heap. The garbage collected heap is an area of the memory within the context of the JVM where objects are stored. It de-allocates the memory occupied by these objects as and when they are no longer needed or referenced in the code. The GC works on the basis of two principles: reference counting and mark and sweep. Note that local object references reside in the stack whereas the actual objects are stored in the heap. The GC works in the background and releases memory when objects are no longer in use. Stack Area: The JVM stores local variables and intermediate results of execution of methods in the stack. Note that each thread inside the JVM contains its own private stack. Also, each method contains its own method frame: The frame is created at the time the method is called and is deleted when the execution of the method is over. Register Area: This contains the registers used by the JVM. The JVM contains four registers: pc, optop, frame, and vars. Here is what these registers are used for: pc: This is the program counter or the register that points to the address of the currently executing instruction. optop: This is the register that contains the address of the top of the operand stack. frame: This register points to the execution environment of the currently executing method. vars: This register points to the first local variable in the currently executing method. Execution Engine: This is responsible for execution of the compiled code or byte code. The execution engine comprises of the following: Just in Time Compiler (JIT): The JIT compiles the byte code to machine language instructions at run time, Virtual Processor: The virtual processor is responsible for processing the operation codes and executing them sequentially. Interpreter: The interpreter is responsible for reading the stream of byte code, interpreting the instructions, and then executing them through the virtual processor. Ένα σύνολο καταχωρητών Ένας σωρός Ένα περιβάλλον εκτέλεσης Ένας σωρός συλλογής απορρήτων Ένα σύνοιλο εντολών Ένας χώρος αποθήκευσης μεθόδων Μία συλλογή σταθερών Ποιές Μεθόδους τρέχει: One of the organizational units of JVM byte code is a class. A class loader implementation must be able to recognize and load anything that conforms to the Java class file format. Any implementation is free to recognize other binary forms besides class files, but it must recognize class files. 195. Ποιοι είναι οι τύποι μεταβλητών στην Java; asasasasaS 196. Τι κάνει το παρακάτω JAVA πρόγραμμα:int j=5; int k=10; long max=0; max=k>j?k:j; Εκχωρεί την τιμή 5 στην μεταβλητή j. Εκχωρεί την τιμή 10 στην μεταβλητή k. Εκχωρεί την τιμή 0 στην μεταβλητή max. Στη συνέχεια εξετάζει αν το k>j και αν αυτό ισχύει (ΝΑΙ) τότε εκχωρεί στην μεταβλητή max την τιμή της μεταβλητής k αλλιώς εκχωρεί στην μεταβλητή max την τιμή της μεταβλητής j. Άρα εκχωρεί στην μεταβλητή max την τιμή 10 197. Ποιος ο ρόλος των εξαιρέσεων στα προγράμματα εισόδου / εξόδου; Δώστε δύο παραδείγματα σε JAVA. SDSDSADS 198. Δημιουργήστε σε JAVA το παιχνίδι κρεμάλα (hangman). O χρήστης εισάγει γράμματα τα οποία και συγκρίνονται με λέξεις που επιλέγονται τυχαία από έναν πίνακα με λέξεις string. Μηνύματα επιτυχίας ή αποτυχίας εμφανίζονται στο χρήστη και τον καθοδηγούν για το αποτέλεσμα. Για διευκόλυνσή σας τοποθετήστε στον πίνακα 5 διαφορετικές λέξεις και το πρόγραμμά σας μην επεκταθείτε στη δημιουργία GUI. 199. Δημιουργήστε σε JAVA το παιχνίδι κρεμάλα (hangman). O χρήστης εισάγει γράμματα τα οποία και συγκρίνονται με λέξεις που επιλέγονται τυχαία από έναν πίνακα με λέξεις string. Μηνύματα επιτυχίας ή αποτυχίας εμφανίζονται στο χρήστη και τον καθοδηγούν για το αποτέλεσμα. Για διευκόλυνσή σας τοποθετήστε στον πίνακα 5 διαφορετικές λέξεις και το πρόγραμμά σας μην επεκταθείτε στη δημιουργία GUI. package Hangman; import java.util.Arrays; import java.util.Scanner; public class Hangman{ public static void main(String[] args) { String[] words = {"spoudastis", "texnikos", "pliroforiki","programmatismos","pistopoiisi"}; // Tyxaia epilogi lexis int randomWordNumber = (int) (Math.random() * words.length); // Dimiourgia pinaka gia tin lexi pou emfanizetai char[] enteredLetters = new char[words[randomWordNumber].length()]; int triesCount = 0; boolean wordIsGuessed = false; do { // infinitely iterate through cycle as long as enterLetter returns true // if enterLetter returns false that means user guessed all the letters // in the word e. g. no asterisks were printed by printWord switch (enterLetter(words[randomWordNumber], enteredLetters)) { case 0: triesCount++; break; case 1: triesCount++; break; case 2: break; case 3: wordIsGuessed = true; break; } } while (! wordIsGuessed); System.out.println("\nThe word is " + words[randomWordNumber] + " You missed " + (triesCount -findEmptyPosition(enteredLetters)) + " time(s)"); } /* Hint user to enter a guess letter, returns 0 if letter entered is not in the word (counts as try), returns 1 if letter were entered 1st time (counts as try), returns 2 if already guessed letter was REentered, returns 3 if all letters were guessed */ public static int enterLetter(String word, char[] enteredLetters) { System.out.print("(Guess) Enter a letter in word "); // If-clause is true if no asterisks were printed so // word is successfully guessed if (! printWord(word, enteredLetters)) return 3; System.out.print(" > "); Scanner input = new Scanner(System.in); int emptyPosition = findEmptyPosition(enteredLetters); char userInput = input.nextLine().charAt(0); if (inEnteredLetters(userInput, enteredLetters)) { System.out.println(userInput + " is already in the word"); return 2; } else if (word.contains(String.valueOf(userInput))) { enteredLetters[emptyPosition] = userInput; return 1; } else { System.out.println(userInput + " is not in the word"); return 0; } } /* Print word with asterisks for hidden letters, returns true if asterisks were printed, otherwise return false */ public static boolean printWord(String word, char[] enteredLetters) { // Iterate through all letters in word boolean asteriskPrinted = false; for (int i = 0; i < word.length(); i++) { char letter = word.charAt(i); // Check if letter already have been entered bu user before if (inEnteredLetters(letter, enteredLetters)) System.out.print(letter); // If yes - print it else { System.out.print('*'); asteriskPrinted = true; } } return asteriskPrinted; } /* Check if letter is in enteredLetters array */ public static boolean inEnteredLetters(char letter, char[] enteredLetters) { return new String(enteredLetters).contains(String.valueOf(letter)); } /* Find first empty position in array of entered letters (one with code \u0000) */ public static int findEmptyPosition(char[] enteredLetters) { int i = 0; while (enteredLetters[i] != '\u0000') i++; return i; } } 200.Να ορίσετε σε JAVA την κλάση Tires (Λάστιχα) με τις ακόλουθές ιδιότητες:width Πλάτος της επιφάνειας του ελαστικού (inches)radius Ακτίνα του ελαστικού (inches)rim Ζαντα (inches)type Τύπος ελαστικού0 – Παντός Καιρού1 – Ξηρό2 – Βροχή3 – Χιόνι brand Κατασκευαστής model Μοντέλο year έτος κατασκευής Να δημιουργήσετε constructor για την κλάση αυτή, ο ποιος να παίρνει παραμέτρους για όλα τα στοιχεία της κλάσης. public class Tires { double width; double radius; double rim; int cartype; String brand; String model; int year; public Tires(double wi, double ra, double ri,int ct, String br, String mo, int ye) { width=wi; radius=ra; rim=ri; cartype = ct; brand = br; model = mo; year = ye; } } 201. Τι είναι τα interfaces στην JAVA; Πώς δημιουργούμε ένα interface; Δώστε ένα παράδειγμα. τα interfaces ορίζουν ένα νέο τύπο που όμως δε μπορεί να παράξει αντικείμενα, δηλαδή δε μπορούν στο πρόγραμμά μας να υπάρξουν στιγμιότυπα ενός interface. Τυπικά, ένα interface περιέχει ένα σύνολο από αφηρημένες μεθόδους που ορίζουν μία συμπεριφορά, την οποία συμπεριφορά αποκτούν όσες κλάσεις υλοποιήσουν το συγκεκριμένο interface υλοποιώντας τις αφηρημένες μεθόδους αυτές. Εκτός από αφηρημένες μεθόδους, ένα interface μπορεί να περιέχει επίσης και static σταθερές. Ανεξάρτητα με το αν θα τις ορίσετε έτσι ρητά ή όχι, θα πρέπει να γνωρίζετε πως ο compiler θα προσθέσει από μόνος του τις λέξεις που λείπουν ώστε το interface που ορίζετε να περιέχει μόνο στατικές σταθερές και αφηρημένες μεθόδους. Για να δηλώσουμε ένα interface χρησιμοποιούμε τη δεσμευμένη λέξη interface, όπως φαίνεται στο απόσπασμα που ακολουθεί. public interface Doable { public void doThis(); // αφηρηµένη µέθοδος public static final int K = 5; // στατική σταθερά } Στο παραπάνω απόσπασμα έχουμε δηλώσει ένα interface με όνομα Doable και ορατότητα public. Ένα interface μπορεί να λάβει μόνο το public και το default επίπεδο ορατότητας και γενικά, μοναδικός προσδιοριστής που μπορεί να χρησιμοποιηθεί στον ορισμό ενός interface είναι ο public. Μέσα στο interface έχει δηλωθεί η μέθοδος doThis() και η σταθερά Κ. Παρατηρήστε πως η μέθοδος δεν έχει δηλωθεί ρητά ως abstract, παρόλα αυτά ο compiler θα εισάγει τη λέξη που λείπει κατά τη μεταγλώττιση (δε θα φαίνεται στον κώδικα). Για να υλοποιήσει μία κλάση ένα interface, θα πρέπει στον ορισμό της να αναφέρει ρητά το interface που υλοποιεί, όπως φαίνεται στο απόσπασμα. public class MyClass implements Doable { ... } Στον παραπάνω κώδικα, η κλάση MyClass υιοθετεί τη συμπεριφορά που ορίζεται στο interface Doable και αναλαμβάνει την ευθύνη να υλοποιήσει τις αφηρημένες μεθόδους που ορίζονται σε αυτό, στην περίπτωσή μας την doThis(). Όπως στην περίπτωση των αφηρημένων κλάσεων, έτσι και εδώ αν έστω και μία από αυτές τις μεθόδους δεν υλοποιηθεί από την κλάση που κάνει implement το interface, θα πρέπει να δηλωθεί ως abstract αλλιώς θα έχουμε σφάλμα κατά τη μεταγλώττιση. Η ευθύνη για την υλοποίηση των μη υλοποιημένων μεθόδων μεταβιβάζεται στις υποκλάσεις της και καταλήγουμε να έχουμε συμπαγή κλάση όταν όλες οι αφηρημένες μέθοδοι του interface έχουν στην πορεία υλοποιηθεί. 202.Γράψτε σε Java ένα πρόγραμμα που θα μετατρέπει την θερμοκρασία από βαθμούς Fahrenheit σε Celcius σημείωση: C = 5 (F – 32) / 9" import java.util.*; class FahrenheitToCelsius { public static void main(String[] args) { float F_temperature,C_temperature; Scanner in = new Scanner(System.in); System.out.println("Enter temperature in Fahrenheit"); F_temperature = in.nextInt(); C_temperature = ((F_temperatue - 32)*5)/9; System.out.println("Temperature in Celsius = " + C_temperatue); } } 203.Γράψτε πρόγραμμα σε Java, το οποίο θα ζητάει από το χρήστη να εισάγει μία λίστα με 6 ονόματα στην αρχική του σειρά, θα ταξινομεί τα ονόματα με αύξουσα αλφαβητική σειρά και κατόπιν θα εμφανίζει ξανά τη λίστα. Φγηγηγφηγφηγφη 204. Τι είναι το Method Overloading; Δώστε ένα παράδειγμα με χρήση κώδικα Java. Μπορούμε να έχουμε μεθόδους στην ίδια κλάση (ή σε υποκλάσεις της) που έχουν το ίδιο όνομα και διαφοροποιούνται μεταξύ τους ως προς τις παραμέτρους που δέχονται (αριθμό ή/και τύπο) και ίσως τον τύπο επιστροφής. Παράδειγμα υπερφόρτωσης της μεθόδου max που υπολογιζει τον μεγιστο εκ δύο αριθμών int max(int a, int b) //για 2 ακεραιους { return (a > b ? a : b); } ..... double max(double a, double b) //υπερφορτωση της max για δύο δεκαδικούς { return (a > b ? a : b); } 205. Τι είναι το Method Overriding; Δώστε ένα παράδειγμα με χρήση κώδικα Java. http://www.tutor.edu.gr/index.php/javaii/java-over Με την υπερκάλυψη μπορούμε να έχουμε δύο μεθόδους με το ίδιο όνομα αλλά με διαφορετική υπογραφή ή/και υλοποίηση. Αυτό μπορεί να γίνει όταν μία κλάση που κληρονομεί μια άλλη χρησιμοποιεί το ίδιο όνομα για να δηλώσει μια νέα μέθοδο. Σε αυτή την περίπτωση η υπερκαλυμμένη μέθοδος της υπερκλάσης μπορεί να κληθεί με ειδική ανοφορά. Παράδειγμα class Animal { public void move() { System.out.println("Τα ζώα κινούνται"); } } class Dog extends Animal { public void move() //κάνει override την move της Animal { System.out.println("Τα σκυλιά τρέχουν"); } } public class TestOver { public static void main(String args[]) { Animal a = new Animal(); // Αντικείμενο Animal Animal b = new Dog(); // Αντικείμενο Dog a.move(); // καλεί την move της Animal b.move(); // καλεί την move της Dog (overrided) } } 206.Εξηγήστε αναλυτικά τον παρακάτω κώδικα: interface MyInterface{ public void method1(); public void method2(); } class XYZ implements MyInterface { public void method1() { System.out.println(""implementation of method1""); } public void method2(){ System.out.println(""implementation of method2""); } public static void main(String arg[]){ MyInterface obj=new XYZ(); Obj.method1(); } } Η κλάση MyInterface δηλώνεται ως κλάση διεπαφής με 2 μεθόδους (δεν υπαρχει κώδικας για τις μεθόδους αυτες). Στη συνέχεια οριζεται η κλάση ΧΥΖ που υλοποιεί την MyInterface δηλώνοντας τις εντολές που περιέχουν οι μέθοδοι method1 και method2 Επιπλέον η XYZ περιέχει και μεθοδο main στην οποία ορίζεται ένα αντικείμενο της κλάσης XYZ και εκτελείται η υλοποιημένη πλέον μέθοδος method1 του αντικειμένου obj. Η γραμμή MyInterface obj = new XYZ() θα μπορούσε να γραφεί XYZ obj = new XYZ() (ετσι οπως ειναι δεν μπορούμε να εκτελέσουμε άλλες μεθόδους πλην αυτών που έχει η MyInterface) 207.Δημιουργήστε (σε Java) το class inventory χρησιμοποιώντας Vector Arrays μέσα στο inventory όου εμπεριέχονται αντικείμενα τύπου string[ ] με χαρακτηριστικά όπλων π.χ mithril sword, Plate Armour κτλ. File Inventory.java package javaapplication28; import java.util.Vector; public class Inventory { Vector String sample="tester"; //test string declared //adds sample's value to the vector void get(int which) { System.out.println("Weapon is :"+myVector.get(which)); //Displays the value }//end of main }//end of class File: JavaApplication28.java package javaapplication28; public class JavaApplication28 { public static void main(String[] args) { // TODO code application logic here Inventory I1 = new Inventory(10,2); I1.set("weapon1"); I1.get(0); } } 208.Δημιουργήστε (σε Java) το πρόγραμμα Print(), που εκτυπώνει μέσω κληρονομικότητας στην οθόνη το αποτέλεσμα των τάξεων: sum, που προσθέτει αριθμούς integer, -----sub, που αφαιρεί αριθμούς integer και multiply που πολλαπλασιάζει αριθμούς integer. Δεν καταλαβαινω την διατυπωση package javaapplication29; public class Praxi { float nr1; float nr2; float result; public Praxi(float a, float b) { nr1=a; nr2=b; } void get_result() { System.out.println(""+result); } } package javaapplication29; public class sumit extends Praxi { public sumit (float c, float d) { super(c,d); result = c+d; } } package javaapplication29; public class JavaApplication29 { public static void main(String[] args) { // TODO code application logic here sumit obj = new sumit(1,2); obj.get_result(); } 209.Δημιουργήστε (σε Java) την τάξη Rectangle, την τάξη Square και την τάξη Circle η κάθε μία περιέχει τουλάχιστον 3 μεταβλητές και μια συνάρτηση που υπολογίζει το εμβαδόν τους. Οι τάξεις Square και Circle κληρονομούν από την τάξη Rectangle τις μεταβλητές της, υπολογίζουν και εκτυπώνουν το εμβαδόν τους (εμβαδό κύκλου = 2*3.14*R*R, εμβαδό τετραγώνου = Width*Width). FILE:Rectangle.java package javaapplication26; public class Rectangle { double plevraA; double plevraB; double emvadon; public Rectangle() { } public Rectangle(double a, double b) { plevraA = a; plevraB =b; calc_emvadon(); } void calc_emvadon() { emvadon=plevraA * plevraB; } } FILE : Square.java package javaapplication26; public class Square extends Rectangle{ public Square (double a) { plevraA=a; plevraB=a; calc_emvadon(); } } FILE:Circle.java package javaapplication26; /** * * @author Manolis */ public class Circle extends Rectangle{ @Override void calc_emvadon() { emvadon=plevraA * plevraA * 3.14; } public Circle(double a) { plevraA = a; calc_emvadon(); } } FILE:JavaApplication.java package javaapplication26; public class JavaApplication26{ public static void main(String[] args) { Rectangle R1 = new Rectangle(1,2); Square S1 = new Square(5); Circle C1 = new Circle(10); System.out.println(""+C1.emvadon); } } 210.Να γραφεί συνάρτηση σε OpenGL που να σχεδιάζει ένα επίπεδο (plane). Φγηγηγηγηγφ #include "../shared/gltools.h" #include // OpenGL toolkit // Drawing routine. void drawScene(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); // Draw a polygon with specified vertices. glBegin(GL_POLYGON); glVertex3f(20.0, 20.0, 0.0); glVertex3f(80.0, 20.0, 0.0); glVertex3f(80.0, 80.0, 0.0); glVertex3f(20.0, 80.0, 0.0); glEnd(); glFlush(); } // Initialization routine. void setup(void) { glClearColor(1.0, 1.0, 1.0, 0.0); } // OpenGL window reshape routine. void resize(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 100.0, 0.0, 100.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } // Keyboard input processing routine. void keyInput(unsigned char key, int x, int y) { switch(key) { case 27: exit(0); break; default: break; } } // Main routine. int main(int argc, char **argv) { glutInit(&argc, argv); //glutInitContextVersion(4, 3); //glutInitContextProfile(GLUT_COMPATIBILITY_PROFILE); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("square.cpp"); glutDisplayFunc(drawScene); glutReshapeFunc(resize); glutKeyboardFunc(keyInput); //glewExperimental = GL_TRUE; //glewInit(); setup(); glutMainLoop(); } 211.Σε τι οφείλουμε το γεγονός ότι η OpenGL μπορεί να δείξει από 256 έως δισεκατομμύρια χρώματα χωρίς να χρειαστεί να ξαναγράψουμε ή να ξανακάνουμε compile τον κώδικα; ghghgh 212. Η OpenGL χρησιμοποιεί μια απλή, βασική, μορφή ονοματολογίας για τις εντολές της. Αναφέρατε ποια είναι αυτή και παραθέστε παράδειγμα. OpenGL commands use the prefix gl and initial capital letters for each word making up the command name (recall glClearColor(), for example). Similarly, OpenGL defined constants begin with GL_, use all capital letters, and use underscores to separate words (for example, GL_COLOR_BUFFER_BIT). Ανάλογα λοιπόν µ ε το συνδυασµό των παραπάνω παραµέτρων, ορισµένες εντολές της OpenGL παρουσιάζουν παράλλαγές. Τα ονόµατα των παραλλαγών µιας εντολής καθορίζονται βάσει της εξής σύµβασης: Όνοµα εντολής + ΄∆ιάσταση χώρου/Πλήθος χρωµατικών συνιστωσών + Πρωτογενής τύπος δεδοµένων ορισµάτων + Τρόπος κλήσεως ορισµάτων Στο τέλος δηλαδή του ονόµατος της εντολής προσθέτονται επιθήµατα που καθορίζουν πλήρως τις παραπάνω παραµέτρους. Ως παράδειγµα θα επιλέξουµε την εντολη glVertex*, µε την οποία ορίζουµε τις συντεταγµένες ενός σηµείου στο επίπεδο ή στον τρισδιάστατο χώρο. Το επίθηµα καθορίζεται από τον τύπο δεδοµένων, σύµφωνα µε τον Πίνακα 1. Έτσι λχ για τον καθορισµό ενός σηµείου στο διδιάστατο χώρο που οι συντεταγµένες του δίνονται υπό τη µορφή πραγµατικών αριθµών απλής ακρίβειας (GLfloat) µε κλήση τιµής (call by value) η αντίστοιχη εντολή έχει τη µορφή: glVertex2f (GLfloat x, GLfloat y); ενώ η αντίστοιχη συνάρτηση στον τρισδιάστατο χώρο µε ορίσµατα ακεραίων θα έχει τη µορφή glVertex3i(GLint x, GLint y, GLint z); 213. Αναφέρατε τι ονομάζουμε GLUT στην OpenGL. Για ποιο λόγο δημιουργήθηκε και ποιες βασικές λειτουργίες προσφέρει; GLUT (pronounced like the glut in gluttony) is theOpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL programs. It implements a simple windowing application programming interface (API) for OpenGL. α) Βασική βιβλιοθήκη (OpenGL core library): H βασική βιβλιοθήκη της OpenGL περιέχει τις κύριες εντολές σχεδίασης. Ολες οι εντολές της βιβλιοθήκης αυτής διακρίνονται από το πρόθεµα gl . Πολλές από τις συναρτήσεις της δέχονται προκαθορισµένα ορίσµατα (συµβολικές σταθερές) τα οποία έχουν οριστεί στη βιβλιοθήκη και αντιστοιχούν σε διάφορες παραµέτρους ή καταστάσεις λειτουργίας. Κατά σύµβαση, οι σταθερές αυτές ξεκινούν µε το πρόθεµα GL_ . β) OpenGL Utility Library (GLU): Περιλαµβάνει συναρτήσεις που εκτελούν σύνθετους αλγορίθµους όπως π.χ. τον καθορισµό µητρώων προβολής και το σχηµατισµό σύνθετων καµπυλών και επιφανειών. Κάθε υλοποίηση της OpenGL εµπεριέχει τη βιβλιοθήκη GLU. Όλες οι εντολές της βιβλιοθήκης GLU ξεκινούν µε το πρόθεµα glu. γ) OpenGL Utility Toolkit (GLUT): Όπως αναφέραµε το πρότυπο της OpenGL είναι ανεξάρτητο πλατφόρµας. Ωστόσο µια αυτονόητη απαίτηση ενός προγραµµατιστή είναι να έχει τη δυνατότητα να δει το αποτέλεσµα των προγραµµάτων του αλλά και να έχει δηλαδή τη δυνατότητα αλληλεπίδρασης µ ε αυτό. Χρειάζεται δηλαδή εντολές εισόδου-εξόδου. Ωστόσο οι εντολές αλληλεπίδρασης δεν είναι ανεξάρτητες πλατφόρµας και για το λόγο αυτό οι προγραµµατιστές σε OpenGL χρησιµοποιούν µία ακόµη βιβλιοθήκη που τους προσφέρει εντολές εισόδουεξόδου. Μία από τις βιβλιοθήκες που προσφέρει τη λειτουργικότητα αυτή είναι το OpenGL Utility Toolkit (GLUT). Η βιβλιοθήκη αυτή περιλαµβάνει εντολές απεικόνισης παραθύρων στην οθόνη, δηµιουργίας menus, διαχείρισης γεγονότων κλπ. Όλες οι εντολές της ξεκινούν µε το πρόθεµα glut. 214. Με ποια εντολή δημιουργούμε ένα τρισδιάστατο ορθογραφικό παράθυρο με διαστάσεις: αριστερά -3, δεξιά 3, πάνω 3, κάτω -3 και clipping planes στα 1 και 100 για το near και far αντίστοιχα (στην OpenGL); Gfhgfhgfhgf void glOrtho(GLdouble xwmin, GLdouble xwmax, GLdouble ywmin, GLdouble ywmax, GLdouble dnear, GLdouble dfar); όπου xwmin, xwmax, ywmin και ywmax το αριστερό, το δεξιό, το κάτω και το άνω επίπεδο αποκοπής αντίστοιχα. Οι συντεταγµένες του εγγύς και µακρινού επιπέδου αποκοπής δίνονται ως θετικοί αριθµοί dnear και dfar αντίστοιχα και ισχύει: znear=-dnear zfar=-dfar #include "../shared/gltools.h" // OpenGL toolkit #include glVertex3f(0,100,0); glEnd(); //Drawing the z axis in blue glColor3f(0,0,1); glBegin(GL_LINES); glVertex3f(0,0,-100); glVertex3f(0,0,100); glEnd(); //Drawing a yellow shape glColor3f(1,1,0); glBegin(GL_LINE_LOOP); glVertex3f(-10,-10,10); glVertex3f(10,-10,10); glVertex3f(10,-10,-10); glVertex3f(-10,-10,-10); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f(-10,-10,10); glVertex3f(10,-10,10); glVertex3f(10,10,-10); glVertex3f(-10,10,-10); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f(-10,-10,-10); glVertex3f(10,-10,-10); glVertex3f(10,10,-10); glVertex3f(-10,10,-10); glEnd(); glFlush(); } int main(int argc, char **argv) { glutInit(&argc,argv); glutInitWindowPosition(50,50); glutInitWindowSize(640,480); glutCreateWindow("A viewing transformation example"); glMatrixMode(GL_PROJECTION); glOrtho(-100,100,-100,100,-100,100); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glMatrixMode(GL_MODELVIEW); eyeX=30; eyeY=10; eyeZ=20; toX=0; toY=0; toZ=0; viewUpX=0; viewUpY=1; viewUpZ=0; gluLookAt(eyeX,eyeY,eyeZ,toX,toY,toZ,viewUpX,viewUpY,viewUpZ); glutDisplayFunc(display); glutMainLoop(); return 0; } 215. Εξετάστε την ισχύ των παρακάτω προτάσεων δηλώνοντας ΣΩΣΤΟ ή ΛΑΘΟΣ και εξηγώντας την επιλογή σας (Όπου κρίνετε απαραίτητο, παραθέστε παράδειγμα). α) 1. Τα επικρατέστερα Λειτουργικά Συστήματα (Windows, Unix, Linux, Mac OS) υποστηρίζουν την OpenGL. β) Η OpenGL μπορεί αποκλειστικά να κληθεί (is callable) από τις γλώσσες προγραμματισμού C / C++ (δηλαδή υπάρχει μοναδικό language binding). γ) Το μοναδικό περιβάλλον ανάπτυξης προγραμμάτων OpenGL είναι το DEV C++. δ) Η OpenGL περιέχει εντολές επιλογής (τύπου If ... else). ε) Οι εντολές της OpenGL ξεκινούν με το πρόθεμα gl. ghfdgfdgfdg 216. Ποια η λειτουργία των παρακάτω εντολών στην OpenGL και τι παραμέτρους δέχονται; Να δοθεί παράδειγμα.α) glutInitWindowPosition β) glutInitWindowSize γ) glutCreateWindow Fgfdgfgfdg Η ρουτίνα glutInitWindowPosition καθορίζει τη θέση στην οθόνη, στην οποία θα εµφανιστεί το παράθυρο της εφαρµογής (συντεταγµένη της άνω αριστερής κορυφής). • Η εντολή glutInitWindowSize καθορίζει το πλάτος και ύψος του παραθύρου της εφαρµογής σε pixels. Η εντολή glutCreateWindow εµφανίζει το παράθυρο της εφαρµογής στην οθόνη και του αποδίδει έναν τίτλο. 217. Περιγράψτε τρεις βασικές βιβλιοθήκες εντολών της OpenGL που περιέχουν εντολές σχεδίασης, γραφικών και απόδοσης. Σε ποιο σημείο του προγράμματος δηλώνονται; dfgfgfdgfd 218. Αναφέρετε την λειτουργία της glutMainLoop() στην OpenGL. Σε ποιο σημείο πρέπει να καλείται; Dfgfgfdgfd Η εντολή glutMainLoop() ενεργοποιεί τον κύκλο διαχείρισης γεγονότων (event processing loop). Στον κύκλο αυτό, η εφαρµογή αναµένει επ' άπειρον και ανταποκρίνεται σε γεγονότα, όπως λ.χ. στο πάτηµα ενός κουµπιού, στην αλλαγή του σκηνικού ή στην κίνηση του ποντικιού. Από το πρόθεµά της, παρατηρούµε ότι η συγκεκριµένη εντολή εµπεριέχεται στη βιβλιοθήκη GLUT, εφόσον το πρότυπο της OpenGL, ως πρότυπο ανεξάρτητο πλατφόρµας, δεν ορίζει διαδικασίες εισόδουεξόδου. 219. Ποια είναι τα πλεονεκτήματα χρήσης μιας πλατφόρμας CMS (Content Management System), σε σχέση με την δημιουργία εκ νέου ενός web site; dfgfdgfdgfd 220. To σύστημα διαχείρισης περιεχομένου (CMS) υποστηρίζει την εγκατάσταση διαφόρων modules. Τι είναι τα modules και γιατί είναι χρήσιμα για ένα CMS; fgfdgfdgf 221. Στην διάρκεια κατασκευής μιας ιστοσελίδας πολλές φορές καλούμαστε να προσθέσουμε alt και title tags. Τι είναι το καθένα απ’ αυτά και για ποιο σκοπό χρησιμοποιούνται; Είναι απαραίτητη ή προαιρετική η συμπλήρωσή τους; fdgfdgfdgf 222. Η επιστήμη του SEO (Serch Engine Optimization), δίνει μεγάλη βαρύτητα στην σωστή συμπλήρωση τριών tags (title tag, keyword tag, description tag). Τι ακριβώς είναι το καθένα από αυτά τα tags και με ποιον τρόπο γίνεται η σωστή επιλογή του περιεχομένου τους, έτσι ώστε η ιστοσελίδα να ανταποκρίνεται στα κριτήρια σωστής διάρθρωσης της επιστήμης SEO; dfgfdgfgfd 223. Μετά την υλοποίηση της ιστοσελίδας με χρήση CMS τοπικά, ποια βήματα πρέπει να γίνουν ώστε να "ανέβει" (upload) στο Internet; dfghffgf 224. Τι είναι τα σχεδιαστικά χνάρια και ποια η χρησιμότητα τους; dfgfdgfgfdgf 16.Να σχεδιαστεί ο αλγόριθμος εξαγωγής στοιχείου από λίστα. γφηγφηγφη 17.Να σχεδιαστεί ο αλγόριθμος εισαγωγής στοιχείου σε λίστα. γφηξγηξγηξ 18.Να σχεδιαστεί ο αλγόριθμος εισαγωγής στοιχείου σε ουρά. γφηγηγφ 19.Να σχεδιαστεί ο αλγόριθμος εξαγωγής στοιχείου από ουρά. γηξηγξηγξ 20.Να σχεδιαστεί ο αλγόριθμος εισαγωγής στοιχείου σε στοίβα. γηξηγξηγ 21.Να σχεδιαστεί ο αλγόριθμος εξαγωγής στοιχείου από στοίβα. γηξηξηγ 22.Να σχεδιαστεί ο αλγόριθμος της σειριακής αναζήτησης. γξηγξγηξ 23.Να σχεδιαστεί ο αλγόριθμος της δυαδικής αναζήτησης. γηξηγξ 24. Να σχεδιαστεί ο αλγόριθμος της ταξινόμησης φυσαλίδας. γηξηγξηγξ 49.Τι είναι το encapsulation; Δώστε ένα παράδειγμα σε γλώσσα προγραμματισμού Java. Η εμφώλευση είναι μια από τις τέσσερις βασικές αρχές του αντικειμενοστραφή προγραμματισμού. Με την εμφώλευση κρύβουμε τα private πεδία της κλάσης από αυθαίρετη πρόσβαση και διαχείριση και επιτρέπουμε μόνο την πρόσβαση από μεθόδους της κλάσης. Έτσι, υπάρχει απόλυτος έλεγχος για το αν και πως θα γίνει η πρόσβαση σε ένα private πεδίο. Με την εμφώλευση, ένα πεδία μπορεί να είναι Read Only ή Write Only. creating an object • Write its class –probably by subclassing • Write one (or more) constructor(s) • Write its methods • Example object: class myObject extends Object { int a; // a member field myObject() {...} // default constructor myObject(int i) {...} // another constructor void mehtod1() {...} // a method that does something ... } Using Objects • Initializing an object • Create it using the new operator • During the creation a constructor is called anObject = new myObject() ; • Calling an object’s methods anObject.method1(); // Calls method1 of the anObject object 50.Δημιουργήστε ένα πρόγραμμα σε Java το οποίο θα ζητάει από το χρήστη να εισάγει/πληκτρολογήσει μία φράση και στη συνέχεια θα εμφανίζει πόσες φορές εμφανίζεται το κάθε φωνήεν στη φράση. δφγφδγφγφδγ 51.Δημιουργήστε ένα πρόγραμμα σε Java το οποίο θα σχεδιάζει ένα κύκλο. Το χρώμα και το μέγεθος της ακτίνας του κύκλου θα καθορίζεται από τον χρήστη. δφγηφγφγφ 52.Τι είναι τα Demon Threads και τί τα Non-Demon Threads; Από που εκτελούνται και πως; Daemon thread in Java are those thread which runs in background and mostly created by JVM for performing background task like Garbage collection and other house keeping tasks. Difference between Daemon and Non Daemon(User Threads) is also an interesting multi-threading interview question, which asked mostly on fresher level java interviews. In one line main difference between daemon thread and user thread is that as soon as all user thread finish execution java program or JVM terminates itself, JVM doesn't wait for daemon thread to finish there execution. As soon as last non daemon thread finished JVM terminates no matter how many Daemon thread exists or running inside JVM. 1) JVM doesn't wait for any daemon thread to finish before existing. 2) Daemon Thread are treated differently than User Thread when JVM terminates, finally blocks are not called, Stacks are not unwounded and JVM just exits. 53. Δίνεται το μη ASCII αρχείο DATA.dbs όπου κάθε εγγραφή είναι αντικείμενο που έχει την ακόλουθη δομή: IBAN λογαριασμού (20 χαρακτήρες) Ανάληψη/Κατάθεση ('0'/'1' αντίστοιχα) Ποσό συναλλαγής (δεκαδικός αριθμός) Όνομα πελάτη (40 χαρακτήρες) ΑΦΜ πελάτη (ακέραιος 8ψήφιος) Να γραφεί πρόγραμμα Java προσπέλασης του αρχείου DATA.dbs που να τυπώνει στην οθόνη το άθροισμα των καταθέσεων, το άθροισμα των αναλήψεων καθώς και τα στοιχεία του πελάτη με τη μεγαλύτερη ανάληψη και κατάθεση. σδσδσαδσδσαδασ 54.Περιγράψτε τη βασική δομή μιας εφαρμογής φτιαγμένης σε OpenGL. Ghjhgjhgj Ε.3 Ένα τυπικό πρόγραµµα Στην παράγραφο αυτή παρουσιάζουµε και περιγράφουµε συνοπτικά τη δοµή ενός τυπικού προγράµµατος που βασίζεται στο πρότυπο της OpenGL. #include glutDisplayFunc(display); glutMainLoop(); return 0; } Ας ξεκινήσουµε µε την περιγραφή του κώδικα που περιέχεται στη συνάρτηση main. • Αρχικά προσθέτουµε την κεφαλίδα του GLUT glut.h. Γενικά, για την ανάπτυξη ενός προγράµµατος που χρησιµοποιεί ρουτίνες της OpenGL, απαιτείται η προσθήκη των κεφαλίδων gl.h και glu.h, ενώ για χρήση του GLUT, απαιτείται η προσθήκη της glut.h. Ωστόσο, µε τη δήλωση της κεφαλίδας glut.h δηλώνονται αυτοµάτως και οι δύο προηγούµενες. • Η συνάρτηση glutInit ενεργοποιεί τη βιβλιοθήκη GLUT και µέσω αυτής µπορούµε να περάσουµε παραµέτρους στην εφαρµογή µας από τη γραµµή εντολών του DOS. • Η ρουτίνα glutInitWindowPosition καθορίζει τη θέση στην οθόνη, στην οποία θα εµφανιστεί το παράθυρο της εφαρµογής (συντεταγµένη της άνω αριστερής κορυφής). • Η εντολή glutInitWindowSize καθορίζει το πλάτος και ύψος του παραθύρου της εφαρµογής σε pixels. • Η εντολή glutInitDisplayMode καθορίζει παραµέτρους σχετικές µ ε τους ενταµιευτές και το χρωµατικό µοντέλο που χρησιµοποιούνται κατά τη σχεδίαση. (Η τεχνική της διπλής ενταµίευσης χρησιµοποιείται κατά κόρον σε εφαρµογές κινουµένων γραφικών). Στο παράδειγµά µ ας χρησιµοποιούµε το χρωµατικό µοντέλο RGB (GLUT_RGB) και την εφαρµογή απλής ενταµίευσης (GLUT_SINGLE). • Η εντολή glutCreateWindow εµφανίζει το παράθυρο της εφαρµογής στην οθόνη και του αποδίδει έναν τίτλο. • Με την εντολή glMatrixMode(GLUint mode) επιλέγουµε το µητρώο το οποίο επιθυµούµε να τροποποιήσουµε. (περισσότερα για τα µητρώα στις ενότητες «Μετασχηµατισµοί συντεταγµένων» και «Προβολές») Στο παράδειγµα, δίνοντας ως όρισµα τη σταθερά GL_PROJECTION επιλέγουµε το µητρώο προβολής, το οποίο καθορίζει τον τρόπο µε τον οποίο προβάλλεται η σκηνή στο επίπεδο του θεατή. Σε συνδυασµό µε την εντολή gluOrtho2D( xMin,xMax,yMin,yMax) διευκρινίζουµε ότι θα απεικονιστεί η παράλληλη προβολή της σκηνής στο επίπεδο ΧΥ (το οποίο, στο συγκεκριµένο παράδειγµα, ταυτίζεται µ ε το παράθυρο της εφαρµογής). Το περιεχόµενο του παραθύρου περιλαµβάνει όλα τα στοιχεία του σκηνικού που εκτείνονται µεταξύ των συντεταγµένων Χ=[-50,50] και Υ=[-50,50]. Ο θετικός άξονας X έχει φορά προς τα δεξιά και το θετικό τµήµα του άξονα Y έχει φορά προς τα πάνω. • Η εντολή glutDisplayFunc(void func()) εντάσσεται σε µια ειδική κατηγορία συναρτήσεων του GLUT, οι οποίες αποκαλούνται συναρτήσεις κλήσης (callback functions). Η συγκεκριµένη συνάρτηση δέχεται ως όρισµα µια συνάρτηση στην οποία εµπεριέχεται ο κώδικας σχεδίασης γραφικών. Η συνάρτηση αυτή εκτελείται κάθε φορά που η εφαρµογή διαπιστώσει ότι απαιτείται επανασχεδιασµός της σκηνής. Η συνάρτηση δεν επιστρέφει τιµή και δεν έχει ορίσµατα. Στο συγκεκριµένο παράδειγµα δίνουµε ως όρισµα τη συνάρτηση display(). • Η εντολή glutMainLoop() ενεργοποιεί τον κύκλο διαχείρισης γεγονότων (event processing loop). Στον κύκλο αυτό, η εφαρµογή αναµένει επ' άπειρον και ανταποκρίνεται σε γεγονότα, όπως λ.χ. στο πάτηµα ενός κουµπιού, στην αλλαγή του σκηνικού ή στην κίνηση του ποντικιού. Από το πρόθεµά της, παρατηρούµε ότι η συγκεκριµένη εντολή εµπεριέχεται στη βιβλιοθήκη GLUT, εφόσον το πρότυπο της OpenGL, ως πρότυπο ανεξάρτητο πλατφόρµας, δεν ορίζει διαδικασίες εισόδουεξόδου. Ας αναλύσουµε τώρα το περιεχόµενο της συνάρτησης display. • Η εντολή glClearColor() καθορίζει το χρώµα που χρησιµοποιείται κάθε φορά που εκτελείται εντολή καθαρισµού της οθόνης. Στην OpenGL το χρώµα του φόντου είναι µία µεταβλητή κατάστασης, η οποία διατηρεί την τιµή που της ανατέθηκε την τελευταία φορά. Το χρώµα καθορίζεται από τα βάρη του στο χρωµατικό µοντέλο RGB. Στο συγκεκριµένο παράδειγµα, χρησιµοποιείται το λευκό χρώµα. • Η εντολή glClear() καθαρίζει ενταµιευτές (buffers), συγκεκριµένες περιοχές µ νήµης του συστήµατος γραφικών (frame buffer). Η µηχανή γραφικών της OpenGL ορίζει ορισµένες κατηγορίες ενταµιευτών. Με την σταθερά GL_COLOR_BUFFER_BIT δίνουµε εντολή καθαρισµού του ενταµιευτή χρωµατικών τιµών (colour buffer). Αυτή περιέχει τις χρωµατικές τιµές των pixels που απεικονίζονται (ή πρόκειται να απεικονιστούν) στην οθόνη. • Με την εντολή glColor3f(float r, float g, float b) ορίζουµε το τρέχον χρώµα σχεδιάσης. Πρόκειται για µία ακόµη µεταβλητή κατάστασης που καθορίζει το χρώµα που χρησιµοποιείται για τη σχεδίαση γραφικών. Στην εντολή περνάµε ως ορίσµατα τις κανονικοποιηµένες ως προς τη µονάδα τιµές των συνιστωσών του κόκκινου, πράσινου και µπλέ χρώµατος. Στο παράδειγµα επιλέγουµε ως χρώµα σχεδιάσης το κόκκινο. • Η εντολή glBegin(GLEnum MODE) δηλώνει την έναρξη ορισµού ενός ή περισσοτέρων γεωµετρικών σχηµάτων. Αναλόγως του ορίσµατος, µπορεί να προσδιοριστεί µια ποικιλία σχηµάτων. Στο παράδειγµά µας, ορίζουµε ευθύγράµµα τµήµατα. Η εντολή glBegin εκτελείται πάντα σε συνδυασµό µ ε την εντολή glEnd() και η δεύτερη ορίζει τη λήξη της επιλεγόµενης ρύθµισης σχεδίασης. • Η εντολή glVertex2i ορίζει σηµεία στο διδιάστατο χώρο. Εφόσον έχει προεπιλεγεί η κατάσταση σχεδίασης ευθυγράµµων τµηµάτων, τα σηµεία ορίζουν ανά ζεύγη τα ευθύγραµµα τµήµατα Το παραπάνω παράδειγµα σχεδιάζει ένα ευθύγραµµο τµήµα κόκκινου χρώµατος µ ε συνταταγµένες αρχής και τέλους (20,20) (40,40). • Η εντολή glFlush() εξαναγκάζει την εκτέλεση των εντολών που εκκρεµούν. Η εκτέλεση του κώδικα εµφανίζει το παράθυρο του παρακάτω σχήµατος. 55. Να αναφέρετε και να περιγράψετε σύντομα τα callback functions της OpenGL. Ghjhgjhjh Κύκλος διαχείρισης γεγονότων Στην OpenGL, προκειµένου ένα πρόγραµµα να ανταποκρίνεται σε γεγονότα, θα πρέπει να ενεργοποιηθεί ο (event processing loop). Η ενεργοποίηση του κύκλου διαχείρισης γεγονότων γίνεται δίνοντας την εντολή glutMainLoop: void glutMainLoop( ); Μετά την ενεργοποίηση του κύκλου διαχείρισης γεγονότων µ µ ’ . Ουσιαστικά, η ανταπόκριση µιας εφαρµογής σε γεγονότα συνίσταται στην ανάθεση ενός κώδικα προς εκτέλεση ανά είδος γεγονότος. Ο κώδικας που θα εκτελείται κατά την εµφάνιση κάθε γεγονότος ορίζεται στις συναρτήσεις διαχείρισης γεγονότων ή αλλιώς συναρτήσεις κλήσης (callback functions). Προφανώς, γεγονότα για οποία δεν έχει καταχωρηθεί συνάρτηση διαχείρισης δεν έχουν καµία επίδραση στην εκτέλεση του προγράµµατος. Ο παρακάτω ψευδοκώδικας περιγράφει τον κύκλο διαχείρισης γεγονότων while(1) //Εκτέλεση βρόχου επ’ άπειρον { if (γεγονός σχεδιασµού/επανασχεδιασµού) { εκτέλεση κώδικα διαχείρισης γεγονότος σχεδιασµού/επανασχεδιασµού; } if (αλλαγή διαστάσεων παραθύρου) { εκτέλεση κώδικα διαχείρισης του γεγονότος αλλαγής διάστασης παραθύρου; } if (εµφάνιση γεγονότος πληκτρολογίου/ποντικιού) { εκτέλεση κώδικα διαχείρισης γεγονότων πληκτρολογίου/ποντικιού } ……………………….. εκτέλεση κώδικα διαχείρισης “γεγονότος αδρανείας” ; } 56. Ποιες εντολές χρησιμοποιούμε για τις εξής λειτουργίες της OpenGL: α. translate β. rotate γ. scale ή stretch; Translate-Μετατόπιση σηµείων στο χώρο Στην OpenGL η µετατόπιση των συντεταγµένων της σκηνής στο χώρο κατά σταθερές (x,y,z) εκτελείται µε την εντολή glTranslate: glTranslatef ( GLfloat x,GLfloat y, GLfloat z ); glTranslated ( GLdouble x, GLdouble y, GLdouble z ); Rotation - Επιστροφή Στην OpenGL µπορούµε να εκτελέσουµε µετασχηµατισµούς περιστροφής ως προς οποιαδήποτε άξονα περιστροφής. Αυτό επιτυγχάνεται ορίζοντας τις συνιστώσες του διανύσµατος που ορίζει τη διεύθυνση ενός άξονα περιστροφής. Ο άξονας περιστροφής διέρχεται από την αρχή των αξόνων. Μετασχηµατισµοί περιστροφής εκτελούνται µε την εντολή glRotate*: glRotatef (Glfloat angle, GLfloat vx, GLfloat vy, GLfloat vz ); glRotated (GLdouble angle, GLdouble vx, GLdouble vy, GLdouble vz ); όπου: angle: η γωνία περιστροφής σε µοίρες vx,vy,vz : οι συνιστώσες του διανύσµατος που εκφράζει τη διεύθυνση του άξονα περιστροφής (Ο άξονας περιστροφής διέρχεται από την αρχή των αξόνων του συστήµατος συντεταγµένων.) Η φορά περιστροφής καθορίζεται από τη φορά του διανύσµατος (vx,vy,vz) σύµφωνα µε τον κανόνα του δεξιού χεριού. Scale - Κλιμάκωση Στην κλιµάκωση, οι συντεταγµένες πολλαπλασιάζονται µε ένα σταθερό ανά διεύθυνση συντελεστή κλιµάκωσης Στην OpenGL, η κλιµάκωση εκτελείται µε την εντολή glScale: glScalef(GLfloat sx, Glfloat sy, Glfloat sz); glScaled(GLdouble sx, Gldouble sy Gldouble sz); όπου xs,ys και zs, οι συντελεστές κλιµάκωσης κατά τις διευθύνσεις , x, y και z αντίστοιχα. 57. Για ποιο λόγο είναι καλό να χρησιμοποιούμε τους τύπους δεδομένων της OpenGL; jhkhjkjhkjkj 58. Περιγράψτε τη σύνταξη και τις παραμέτρους της glLookAt() (στην OpenGL). Στην OpenGL, ο µετασχηµατισµός οπτικής γωνίας εκτελείται µε απλό τρόπο χρησιµοποιώντας την εντολή gluLookAt: gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ); Οι συντεταγµένες eyeX, eyeY, eyeZ, καθορίζουν τη θέση του παρατηρητή ως προς το σύστηµα συντεταγµένων σκηνής. Ο προσανατολισµός της κάµερας καθορίζεται από το διάνυσµα µε αρχή το σηµείο eyeX,eyeY,eyeZ και πέρας το σηµείο centerX,center,centerZ. Οι τιµές καθορίζουν τον προσανατολισµό του διανύσµατος άνω κατεύθυνσης upX,upY,upZ. Με τη χρήση της εντολής gluLookAt, ο προγραµµατιστής µπορεί να καθορίσει µε ευκολία τη θέση και τον προσανατολισµό παρατήρησης. Με αυτό τον τρόπο, η OpenGL απαλλάσσει τον προγραµµατιστή από τον ορισµό περίπλοκων µετασχηµατισµών αλλαγής συστήµατος συντεταγµένων. 59. Ποια είναι η λειτουργία της glClear() και ποια της glClearColor3f() (στην OpenGL); Με την εντολή glColor3f(float r, float g, float b) ορίζουµε το τρέχον χρώµα σχεδιάσης. Πρόκειται για µία ακόµη µεταβλητή κατάστασης που καθορίζει το χρώµα που χρησιµοποιείται για τη σχεδίαση γραφικών. Στην εντολή περνάµε ως ορίσµατα τις κανονικοποιηµένες ως προς τη µονάδα τιµές των συνιστωσών του κόκκινου, πράσινου και µπλέ χρώµατος. Στο παράδειγµα επιλέγουµε ως χρώµα σχεδιάσης το κόκκινο. glColor3f(1,0,0); Η εντολή glClear() καθαρίζει ενταµιευτές (buffers), συγκεκριµένες περιοχές µ νήµης του συστήµατος γραφικών (frame buffer). Η µηχανή γραφικών της OpenGL ορίζει ορισµένες κατηγορίες ενταµιευτών. Με την σταθερά GL_COLOR_BUFFER_BIT δίνουµε εντολή καθαρισµού του ενταµιευτή χρωµατικών τιµών (colour buffer). Αυτή περιέχει τις χρωµατικές τιµές των pixels που απεικονίζονται (ή πρόκειται να απεικονιστούν) στην οθόνη. glClear(GL_COLOR_BUFFER_BIT); Στο παρακάτω παράδειγµα καθαρίσουµε τον ενταµιευτή χρωµατικών τιµών χρησιµοποιώντας ως χρώµα φόντου το µαύρο: glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); Η πρώτη εντολή ορίζει ως χρώµα καθαρισµού το µαύρο και η δεύτερη εντολή εκτελεί τον καθαρισµό του παραθύρου µε το χρώµα αυτό. Συνήθως, ορίζουµε το χρώµα καθαρισµού στην αρχή του προγράµµατός µας και µετά καθαρίζουµε τους buffers όσο συχνά χρειάζεται Η εντολή glClear επιτρέπει επίσης τον καθορισµό πολλαπλών ενταµιευτών µε µία µόνο κλήση της. Στην περίπτωση αυτή δίνουµε ως όρισµα πολλαπλές παραµέτρους διαχωρισµένες µε τελεστές OR ( | ). Για να καθαρίσουµε λ.χ. τον ενταµιευτή χρωµατικών τιµών (color buffer) και τον ενταµιευτή τιµών βάθους (depth buffer) δίνουµε: glClearColor(0.0, 0.0, 0.0, 0.0); glClearDepth(0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 60. Στην OpenGL όπως και στα περισσότερα API γραφικών χρησιμοποιούμε “normalized values”, τι σημαίνει αυτό; hjkljkjhk 61. Αναφέρατε τις εντολές (μαζί με τις παραμέτρους τους) για προοπτική (perspective) και για ορθογραφική (orthographic) απεικόνιση (στην OpenGL). H Η OpenGL, για τον ορισµό µιας προοπτικής προβολής, διαθέτει δύο εντολές: την glFrustum και την gluPerspective. Και οι δύο εντολές ακολουθούν τις παραδοχές που αναφέραµε προηγουµένως: α) Θέτουν το κέντρο προβολής στην αρχή του συστήµατος συντεταγµένων παρατηρητή. β) Ταυτίζουν το επίπεδο προβολής µε το εγγύς επίπεδο αποκοπής Με την εντολή glFrustum, ο προγραµµατιστής µπορεί να ορίσει µια συµµετρική ή πλάγια προοπτική προβολή: glFrustum(GLdouble xwmin, GLdouble xwmax, GLdouble ywmin, GLdouble ywmax, GLdouble dnear, GLdouble dfar ); όπου xwmin, xwmax, ywmin και ywmax το αριστερό, δεξιό, κάτω και άνω επίπεδο αποκοπής αντίστοιχα. Οι θετικοί αριθµοί dnear και dfar καθορίζουν το εγγύς και µακρινό επίπεδο αποκοπής. Με την εντολή gluPerspective ορίζουµε µια συµµετρική προοπτική προβολή: gluPerspective(GLdouble angle, GLdouble aspectRatio, GLdouble dnear, GLdouble dfar); όπου angle η κατακόρυφη γωνία παρατήρησης σε µοίρες, aspectRatio ο λόγος πλάτους προς ύψος του επιπέδου προβολής και dnear , dfar θετικές τιµές που καθορίζουν το εγγύς και µακρινό επίπεδο αποκοπής Στην OpenGL, o ορισµός της παράλληλης προβολής ((ορθογραφικής) στις τρεις διαστάσεις συνδυάζεται µε την δήλωση των επιπέδων αποκοπής χρησιµοποιώντας την εντολή glOrtho: void glOrtho(GLdouble xwmin, GLdouble xwmax, GLdouble ywmin, GLdouble ywmax, GLdouble dnear, GLdouble dfar); όπου xwmin, xwmax, ywmin και ywmax το αριστερό, το δεξιό, το κάτω και το άνω επίπεδο αποκοπής αντίστοιχα. Οι συντεταγµένες του εγγύς και µακρινού επιπέδου αποκοπής δίνονται ως θετικοί αριθµοί dnear και dfar 62. Με ποιους τρόπους μπορούμε να μετατοπίσουμε ένα αντικείμενο -σχήμα στην OpenGL; jklklkjljkl 63. Περιγράψτε με εντολές και παραμέτρους της OpenGL, τα βασικά γεωμετρικά σχήματα α) Γραμμές, β) Τρίγωνα, γ) Πολύγωνα. Παραθέστε σχήματα. Ο ορισµός των κορυφών κάθε γεωµετρικού σχήµατος περικλείεται µεταξύ δύο εντολών, των glBegin() και glEnd(): void glBegin(GLEnum mode); ……. void glEnd(); Το είδος του γεωµετρικού σχήµατος που σχεδιάζεται, εξαρτάται από την παράµετρο που δίνουµε στο όρισµα mode της εντολής glBegin. ΓΡΑΜΜΕΣ- LINES Αναλόγως της σταθεράς που δίνουµε στη glBegin µπορούµε να επιλέξουµε διαφορετικούς τρόπους σχεδίασης γραµµών. Υπάρχουν οι εξής επιλογές: GL_LINES Τα δοθέντα σηµεία ορίζουν κατά ζεύγη ευθύγραµµα τµήµατα. ∆ηλαδή για n σηµεία σχεδιάζονται τα τµήµατα (v0, v1) (v2,v3) κοκ . Για περιττό αριθµό σηµείων, το τελευταίο σηµείο αγνοείται. GL_LINE_STRIP ∆ίνοντας τα σηµεία (v0,v1,v2,..vn-1,vn) , σχεδιάζουµε τα διαδοχικά ευθύγραµµα τµήµατα (v0,v1), (v1,v2), ….(vn-1,vn). GL_LINE_LOOP Οµοίως µε την GL_LINE_STRIP µε τη µόνη διαφορά ότι το πρώτο και τελευταίο σηµείο συνενώνονται, σχεδιάζοντας έτσι µία κλειστή γραµµή (loop). Παράδειγμα glBegin(GL_LINES); glVertex2i(0,0); glVertex2i(10,0); glVertex2i(0,10); glVertex2i(10,10); glEnd(); ΠΟΛΥΓΩΝΑ – POLYGONS Τα πολύγωνα είναι περιοχές που περικλείονται από απλούς κλειστούς βρόχους ευθύγραµµων τµηµάτων, όπου τα ευθύγραµµα τµήµατα καθορίζονται από τις κορυφές στα άκρα τους. Τα πολύγωνα σχεδιάζονται συµπαγή (µε χρωµατισµένα τα pixels στο εσωτερικό τους), ωστόσο έχουµε τη δυνατότητα να σχεδιάσουµε απλώς τα περιγράµµατα ή τις κορυφές τους . Τα πολύγωνα διακρίνονται σε δύο κατηγορίες: τα κυρτά και τα κοίλα. Στα κυρτά πολύγωνα όλες οι εσωτερικές γωνίες είναι µικρότερες των 180 ενώ ένα πολύγωνο είναι κοίλο όταν περιέχει τουλάχιστον µια εσωτερική γωνία µεγαλύτερη των 180. Η δήλωση των κορυφών ενός ή περισσοτέρων πολυγώνων γίνεται µεταξύ των εντολών glBegin() και glEnd(). Ανάλογα µ ε το όρισµα της εντολής glBegin() υπάρχουν οι εξής διαφοροποιήσεις ως προς το σχηµατισµό των πολυγώνων. GL_POLYGON Σχεδιάζει ένα πολύγωνο χρησιµοποιώντας τα σηµεία ως κορυφές. Το n πρέπει να είναι τουλάχιστον ίσο µε 3, ειδάλλως δεν ορίζεται πολυγωνική επιφάνεια. Επιπλέον, το καθορισµένο πολύγωνο πρέπει να είναι κυρτό και να µην έχει τεµνόµενες πλευρές. Αν το πολύγωνο δεν πληρεί αυτές τις προϋποθέσεις, το αποτέλεσµα της σχεδίασής του θα είναι απρόβλεπτο. GL_QUADS Σχεδιάζει διακεκριµένα τετράπλευρα. Για διατεταγµένο σύνολο κορυφών και πολλαπλάσιο του , τα τετράπλευρα καθορίζονται από τις τεράδες κορυφών 110 ,,..., − nvvv n 4 ( ) 2301 ,,, vvvv ,() και ούτω καθεξής. Αν το n δεν είναι πολλαπλάσιο του , τότε η µία ή οι δύο ή οι τρεις τελευταίες κορυφές παραλείπονται. 6745 ,,, vvvv 4 GL_QUAD_STRIP Σχεδιάζεται αλληλουχία τετραπλεύρων µ ε µ ία κοινή πλευρά. Για διατεταγµένο σύνολο κορυφών και n άρτιο, σχεδιάζονται τα τετράπλευρά µε κορυφές από τα 110 ,,..., − nvvv ( ) 3201 ,,, vvvv , συνεχίζοντας µε , τα και ούτω καθεξής. Το n πρέπει να είναι τουλάχιστον ίσο µ ε 4 πριν σχεδιαστεί τετράπλευρο. Για n περιττό αριθµό, η τελευταία κορυφή παραλείπεται. Παράδειγμα glBegin(GL_POLYGON); glVertex2f(2.5,0); glVertex2f(7.5,0); glVertex2f(10,5); glVertex2f(7.5,10); glVertex2f(2.5,10); glVertex2f(0,5); glEnd(); ΤΡΙΓΩΝΑ – TRIANGLES Ειδικές περιπτώσεις των πολυγώνων αποτελούν τα τρίγωνα (n=3) για το οποία η OpenGL προσφέρει επιπρόσθετες παραµέτρους. Ως ειδικές περιπτώσεις πολυγώνων τα τρίγωνα διέπονται από τους ίδιους κανόνες απόδοσης επιφανειών που ισχύουν και για τα πολύγωνα. Ανάλογα µε το όρισµα της εντολής glBegin, διακρίνουµε τις εξής διαφοροποιήσεις στη σχεδίαση των τριγώνων. GL_TRIANGLES Σχεδιάζει µια σειρά από σαφώς διακεκριµένα τρίγωνα. Για διατεταγµένο σύνολο κορυφών σχεδιάζονται τα τρίγωνα µε κορυφές () , 2101 ,,...,, − nvvvv 120 ,, vvv ( ) 453 ,, vvv και ούτω καθεξής. Αν το δεν είναι ακέραιο πολλαπλάσιο του 3, η τελευταία ή οι δύο τελευταίες κορυφές παραλείπονται. GL_TRIANGLE_STRIP Σχεδιάζει µ ια αλληλουχία τριγώνων. ∆ιαδοχικά τρίγωνα έχουν µ ία κοινή πλευρά. ∆ίνοντας ένα διατεταγµένο σύνολο κορυφών σχεδιάζονται τα τρίγωνα µ ε κορυφές , , και ούτω καθεξής. Η συγκεκριµένη σειρά εµφάνισης των κορυφών εξασφαλίζει ότι οι δήλωσεις των κορυφών των τριγώνων έχουν τον ίδιο προσανατολισµό. (αριστερόστροφο ή δεξιόστροφο) και παίζει ρόλο στον προσανατολισµό της επιφανείας των πολυγώνων, όπως θα δούµε στην ενότητα “Όψεις πολυγώνων”. Το n πρέπει να είναι τουλάχιστο ίσο µε 3, ειδάλλως δε θα σχεδιαστεί τίποτα. ( 110 ,,..., − nvvv ) ) () 120 ,, vvv () 132 ,, vvv ( 342 ,, vvv GL_TRIANGLE_FAN Σχεδιάζει τρίγωνα που έχουν το πρώτο σηµείο κοινό και διαδοχικά τρίγωνα έχουν µία κοινή πλευρά. Εποµένως τα τρίγωνα σχηµατίζονται από τις κορυφές ( ) 120 ,, vvv , ( ) 230 ,, vvv , ( ) 340 ,, vvv και ούτω καθεξής. Παράδειγμα glBegin(GL_TRIANGLES); glVertex2f(0,0); glVertex2f(5,0); glVertex2f(0,5); glVertex2f(7.5,0); glVertex2f(12.5,0); glVertex2f(7.5,5); glEnd(); 64. Να γραφεί function (στην OpenGL) με όνομα keyboard που να λειτουργεί έτσι ώστε, όταν ο χρήστης πατήσει το ‘Q’ (ή ‘q’) να κλείνει την εφαρμογή και όταν πατήσει το ‘C’ (ή ‘c’) να καθαρίζει την οθόνη στο χρώμα του GL_COLOR_BUFFER_BIT. Επίσης να γράψετε την εντολή του mainloop που θα το καλέσετε. Hkhjhgjghj …….. void keyboard(unsigned char key, int x, int y) { switch(key) { case 'q': exit(0); break; case 'c': glClear(GL_COLOR_BUFFER_BIT); glFlush(); break; default: break; } } ……… int main(int argc, char **argv) { glutInit(&argc,argv); glutInitWindowPosition(50,50); glutInitWindowSize(640,480); glutCreateWindow("A viewing transformation example"); glMatrixMode(GL_PROJECTION); glOrtho(-100,100,-100,100,-100,100); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glMatrixMode(GL_MODELVIEW); eyeX=30; eyeY=10; eyeZ=20; toX=0; toY=0; toZ=0; viewUpX=0; viewUpY=1; viewUpZ=0; gluLookAt(eyeX,eyeY,eyeZ,toX,toY,toZ,viewUpX,viewUpY,viewUpZ); glutDisplayFunc(display); glutKeyboardFunc(keyInput); glutMainLoop(); return 0; } 65. Περιγράψτε τα βήματα για τη δημιουργία animation στην OpenGL. ghjhgjhgjhg 66. Ποιες είναι οι ιδιότητές που έχουν οι επιφάνειες στην OpenGL; hjkljhkjkjh 67. Περιγράψτε αναλυτικά τι είναι το double buffering. Με ποια εντολή ενεργοποιούμε το double buffering σε RGB mode στην OpenGL; Με ποια εντολή κάνουμε swap τον front και τον back buffer έτσι ώστε να έχουμε animation; hjkjkjkjuhk 68. Για ποιό σκοπό χρειάζονται οι συναρτήσεις κλήσης στην OpenGl και πώς ορίζονται; ghjkhjhjhj 69. Με ποιές συναρτήσεις γίνεται μοντελοποίηση επιφανειών που ανακλούν στην OpenGl; ghjkhjkjkjhk 70. Σε πόσες και ποιες συνιστώσες διαχωρίζετε το φως πηγής κατά την μοντελοποίηση πηγών φωτισμού; hjkjkjhkjhkj 71. Με ποια σειρά γίνονται οι διεργασίες για τον υπολογισμό της τελικής εικόνας (rendering) στην OpenGL; hjkjkjkjhkjh 72. Με ποια εντολή και ποιες συναρτήσεις θα πραγματοποιήσετε απόδοση υφής σε γραμμές και επιφάνειες στην OpenGl; hjkjkjkjhkj 73. Για ποιο λόγο χρησιμοποιούνται οι λίστες απεικόνισης(display lists) στην γλώσσα OpenGl και πώς συντάσονται; Δώστε και από ένα παράδειγμα για κάθε περίπτωση. hjkjkjkjk 74. Έστω κώδικας: Ποιο θα είναι το αποτέλεσμα; Δικαιολογήστε την απαντησή σας. hjkjhkjkjkj 75. Ποιες είναι οι διαφορές μεταξύ των πινάκων της PHP και των πινάκων της C++; hjkljhkjkjh 76. Περιγράψτε τα στάδια επεξεργασίας μιας PHP σελίδας από τη στιγμή της αίτησής της μέχρι την εμφάνιση στον browser του χρήστη. hjkjkjkjhk 77. Αναφέρετε τους κανόνες που αφορούν στην ονομασία των μεταβλητών της PHP; hjkjkjhkjhkj 78. Η εντολή $c = 1; echo ‘$c’ . $c; τι θα δώσει ως τύπωση; $c1 Εφόσον το $c περιβάλλεται από εισαγωγικά εκλαμβάνεται ως αλφαριθμητική έκφραση και όχι ως την μεταβλητή $c. Η τελεία συνδέει την συμβολοσειρα ‘$c’ και την τιμή της μεταβλητής $c, ήτοι 1, και αποστέλει το αποτέλεσμα στην έξοδο. 79. Έστω κώδικας: Ποιό θα είναι το αποτέλεσμα;Δικαιολογήστε την απαντησής σας. Hello, world Εκχωρείται στην μεταβλητή $a η αλφαριθμητική έκφραση “Hello, “ και στην μεταβλητή $b η αλφαριθμητική έκφραση “world!“ Στη συνέχεια το περιεχόμενο των μεταβλητών αποστέλλεται διαδοχικά στην έξοδο 80. Έστω κώδικας php: $a = 2; echo $a; ++$a; echo $a; --$a; echo $a; Ποιό θα είναι το αποτέλεσμα;Δικαιολογήστε την απαντησής σας. 232 Εκχωρείται στην μεταβλητή $a η τιμή 2 και αποστέλλεται στην έξοδο Η τιμή της μεταβλητής $a αυξάνεται κατά 1 και αποστέλλεται στην εξοδο Η τιμή της μεταβλητής $a μειώνεται κατά 1 και αποστέλλεται στην εξοδο 81. Να γραφεί ένα πρόγραμμα PHP το οποίο θα εμφανίζει με αλλαγή γραμμής το μήνυμα "Καλωσήρθατε στην PHP" 5 φορές. "; } ?> 82. Ποιοί είναι οι βασικοί τύποι σχέσεων μεταξύ πινάκων στην PHP(MySql); hjkjkjkjhk 83. Να γραφεί μία φόρμα σε HTML με δύο πλαίσια κειμένου με τα συμβολικά ονόματα text1 και text2 και ένα πλήκτρο πιέσεως submit το οποίο θα ενεργοποιεί μία σελίδα σε PHP η οποία θα εμφανίζει τις τιμές των πλαισίων κειμένου με πλάγια γράμματα. jkhjkhjkhjk 84. Να γραφεί μία φόρμα η οποία θα δέχεται από τον χρήστη ένα όνομα, ένα επίθετο και έναν αριθμητικό κωδικό. Αν κάποιο από τα πεδία δεν συμπληρωθεί από τον χρήστη τότε θα πρέπει να επανεμφανίζεται η φόρμα με ένα κόκκινο μήνυμα που να γράφει ποια πεδία πρέπει να συμπληρωθούν. Η φόρμα ενεργοποιεί μία σελίδα PHP που εκτυπώνει τα πεδία της φόρμας. hjkjkjkjk 85. Σε ένα αρχείο PHP υπάρχουν οι μεταβλητές var1,var2, Ex1 και Ex2 με διάφορες τιμές. Να γραφεί μία φόρμα που θα έχει ένα πλαίσιο κειμένου και θα ενεργοποιεί το παραπάνω αρχείο και το οποίο θα εμφανίζει την τιμή της μεταβλητής που έχει όνομα ίδιο με αυτό που είναι η τιμή του πλαισίου κειμένου. jklklklkjl 86. Ποιες είναι οι βασικές διαφορές μεταξύ PHP και JAVASCRIPT; hjkjkjkjk 87. Πώς μπορούμε να έχουμε καθολικές μεταβλητές μεταξύ πολλώνσυναρτήσεων; Δώστε από ένα παράδειγμα σε κάθε περίπτωση. jklklklk 88. Γιατί δεν μπορούμε να εκτελέσουμε ένα αρχείο PHP απλά ανοίγοντάς το με έναν διαχειριστή αρχείων όπως γίνεται με τις HTML σελίδες; Δικαιολογήστε την απάντησης σας. Τα αρχεια PHP περιέχουν κώδικα ο οποίος εκτελείται σε εξυπηρετητές (servers) που μπορούν να εκτελέσουν κώδικα PHP (αναγνωρίζουν τις εντολές ως κώδικα PHP, τον εκτελούν – διαθέτωντας τον σχετικό Compiler – και πιθανόν επιστρέφουν έξοδο προς τον client). Καλώντας ένα αρχείο PHP που ειναι αποθηκευμένο στον τοπικό υπολογιστή (client) δεν αναηνωρίονται οι εντολές ως κώδικας PHP αφού δεν υπάρχει compiler και απλώς εμφανίζονται οι εντολές ως κείμενο στον φυλλομετρητή. 89. Πώς θα έπρεπε να δημιουργήσετε έναν βρόχο με την εντολή while για την εκτύπωση όλων των περιττών αριθμών απο το 1 μέχρι το 49; "; $number++; } ?> 90. Πώς θα έπρεπε να χρησιμοποιήσετε μία εντολή ίf για να εκτυπώσετε το αλφαριθμητικό ''Yοuth message" στο παράθυρο μιας εφαρμογής browser εάν η τιμή μιας ακέραιης μεταβλητής ( της $age) είναι μεταξύ 18 και 35; Εάν η $age περιέχει οποιαδήποτε άλλη τιμή θα πρέπει να εκτυπώνεται το αλφαριθμητικό "Generic message" στο παράθυρο της εφαρμογής browser. If (($age >17) && ($age<36)) echo “Youth message”; else echo “Generic message”; 91. Να υλοποιήσετε μια ιστοσελίδα η οποία να περιέχει κώδικα HTML και PHP script, βάσει των οποίων θα εμφανίζει φόρμα στην οποία ο χρήστης θα δίνει δυο αριθμούς, θα επιλέγει την πράξη (πρόσθεση ή αφαίρεση) και πατώντας στο Execute θα εμφανίζεται το κατάλληλο αποτέλεσμα. PHP Calculator (Version 2)if (is_numeric($x) && is_numeric($y)) { // call the caculate function and pass $x, $y & $op as args. $prod = calculate($x, $y, $op); // print the result echo " $x $op $y = $prod "; }else { // unaccepatable values echo " x and y values are required to be numeric ... please re-enter values "; } } ?>92. Να υλοποιηθεί ένας απλός υπολογισμός για το εμβαδόν ενός κύκλου χρησιμοποιώντας τον τύπο Εμβαδόν = π*(r*r). Η ακτίνα θα δίνεται μέσω φόρμας από τον χρήστη και το PHP script θα κάνει τον υπολογισμό του εμβαδού. Ο υπολογισμός του εμβαδού θα γίνεται υποχρεωτικά από κατάλληλη συνάρτηση (function) την οποία θα ορίσετε στο PHP script. (Το π ισούται με 3,14). $prod = $x * $x * 3.14; return $prod; } // declare all variables $x = 0; $prod = 0; // grab the form values from $_GET hash extract($_GET); ?> PHP Calculator (Version 2)if (is_numeric($x) ) { // call the caculate function and pass $x, $y & $op as args. $prod = calculate($x); // print the result echo " Emvado = $prod "; } else { // unaccepatable values echo "x values are required to be numeric ... please re-enter values "; } } ?>93. Διατυπώστε τον κώδικα που χρειάζεται η PHP για να συνδεθεί στον (My)SQL DataBase Server με πρόβλεψη εκτύπωσης τυχόν σφάλματος ή επιτυχούς σύνδεσης. Χρησιμοποιήστε το username "admin" και password "fail". // Create connection // Create connection $conn = new mysqli($servername, $username, $password); //$conn = new mysqli($servername, $username, $password , $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } else echo "CONNECTION ESTABLISHED!"; ?> // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } else echo "CONNECTION ESTABLISHED!"; ?> Commented [MP1]: 94. Πού χρησιμοποιούμε τις μεταβλητές συνόδου στην PHP (PHP session variables); Δώστε δύο παραδείγματα. jlklkjljk Οι μεταβλητές συνόδου αποθηκευουν πληροφορία για τον χρήστη της εφαρμογής (διαδικτυακή) και ειναι διαθέσιμες σε όλες τις σελίδες της εφαρμογής. Η session (σύνοδος) αποτελεί τον τρόπο με τον οποίο μπορούμε να αποθηκεύσουμε πληροφορία (με τη μορφή μεταβλητών) ώστε να μπορεί να χρησιμοποιηθεί μεταξύ πολλών σελίδων (username, shopping items κτλ). Αντίθετα με τα cookies, η σχετική πληροφορία των μεταβλητών δεν αποθηκεύεται στον υπολογιστή των χρηστών. Επίσης διαφέρει από τις υπόλοιπες μεταβλητές με την έννοια ότι δεν τις περνάμε ξεχωριστά σε κάθε σελίδα, αλλά τις ανακτούμε από τη σύνοδο (session), την οποία ανοίγουμε στην αρχή κάθε σελίδας. Ωστόσο, αυτού του είδους οι πληροφορίες είναι προσωρινές και συνήθως διαγράφονται πολύ σύντομα μόλις ο χρήστης αφήσει το website που χρησιμοποιεί sessions. Για να μπορέσουμε να αποθηκεύσουμε πληροφορίες στη σύνοδο, πρέπει πρώτα απ’ όλα να ξεκινήσουμε τη σύνοδο, και αυτό γίνεται όσο πιο νωρίς είναι δυνατό στον κώδικα, πριν οποιοδήποτε HTML κείμενο σταλεί. Παράδειγμα: Αρχείο ”demo1.php” Οι μεταβλητές συνόδου μπορούν να ανακτηθούν σε αλλη σελίδα της εφαρμογής πχ Αρχείο ”demo2.php” "; echo "Favorite animal is " . $_SESSION["favanimal"] . "."; ?> 95. Δημιουργήστε στην PHP τη συνάρτηση addNums() η οποία δέχεται ως ορίσματα 2 ακέραιους και επιστρέφει το αποτέλεσμα της πρόσθεσης αυτών στην οθόνη. function addNums ($x,$y) { $prod = $x + $y; echo $prod; } 96. Φτιάξτε ένα script στην PHP που θα διαβάζει την τιμή τής μεταβλητής συνόδου (session) "logged" και εάν αυτή δεν είναι αληθής να κάνει ανακατεύθυνση (redirect) στην σελίδα login.html. 97. Δημιουργήστε στην PHP τη συνάρτηση sum() η οποία δέχεται ως ορίσματα 2 ακέραιους και επιστρέφει το αποτέλεσμα της πρόσθεσης αυτών στην οθόνη. Εκτελέστε το σε παράδειγμα χρησιμοποιώντας τους παρακάτω ακέραιους αριθμούς:α) 5 + 10 = 15β) 7 + 13 = 20γ) 2 + 4 = 6 function addNums ($x,$y) { $prod = $x + $y; echo $prod; } addNums(5,10); addNums(7,13); addNums(2,4); 98. Στείλτε ένα e-mail σε όλες τις εγγραφές του πίνακα subscribers χρησιμοποιώντας τη συνάρτηση mail (to, subject, body). Το email θα έχει θέμα "Login info" και περιεχόμενο "Your username is <το username χρήστη> and your password is <το password χρήστη> ". Δεν απαιτείται ο κώδικας σύνδεσης με τον (My)Sql server. Ο πίνακας subscribers έχει τα πεδία id, username, password, email. ;l;l;lk;l;lk; 99. Τι εννοούμε με τον όρο static mesh στην αρχιτεκτονική των Game Engines (Unreal Engine , Source και Unity); klklkjlkl 100. Τι είναι τα collision boxes στα Game Engines; Τι εξυπηρετούν και με ποιο σκεπτικό τα κατασκευάζουμε; jklklklkl 101. Αναφέρετε ποιες τεχνικές φωτισμού χρησιμοποιούνται στα video games και ποια τα χαρακτηριστικά τους. jklklklkjl 102. Τι είναι το bill boarding και ποια τα πλεονεκτήματά του στην κατασκευή 3D games; klklklklkjl 103. Πολλές φορές στους κατασκευαστές παιχνιδιών (πχ Unity) εφαρμόζεται το Level of Detail (LOD), περιγράψτε τι είναι και ποια είναι η χρησιμοτητά του. klkjlkjlklkjl 104. Να αναφερθούν συνοπτικά οι βασικές κλάσεις του Unreal Editor και ποια η λογική της χρησιμοποίησής τους. jlkklklkl 105. Περιγράψτε τη κλάση actor (στην UnrealScript), αναφέρατε τη χρησιμότητά της. ;kkjljklklklkj 106. Περιγράψτε τη κλάση pawn (στην UnrealScript), αναφέρατε τη χρησιμότητά της. 107. Να αναφερθούν οι τύποι μεταβλητών που υποστηρίζονται από την Unrealscript καθώς και οι περιγραφές τους. Kl;l;l;lk; 108. Η UnrealScript δίνει αρκετή λειτουργικότητα για τα όπλα, να αναφερθούν αναλυτικά οι βασικές καταστάσεις στις οποίες μπορεί να περιέλθει ένα όπλο με τη χρήση της. ;lk;l;l;l; 109. Τι σημαίνουν οι όροι Modeling, Rendering και Animation; Kl;l;l;l 110. Τι είναι φωτοαπόδοση και ποιοι παράγοντες την επηρεάζουν; K;lk;l;lk; 111. Αναφέρετε τα στάδια δημιουργίας κινούμενης φωτορεαλιστικής απεικόνισης ενός θέματος πολυμέσων με τη χρήση κάποιου εργαλείου τρισδιάστατης σχεδίασης και κίνησης (π.χ. 3d Studio). Kl;lk;l;lk; 112. Τι είναι οι τεχνικές φωτισμού (lighting) και σκίασης (shading); Αναφέρετε τις βασικές τεχνικές φωτισμού και σκίασης που χρησιμοποιούνται σε μια εφαρμογή τρισδιάστατης σχεδίασης και κίνησης. K;lk;lk;lk 113. Ποιες τεχνικές γνωρίζετε για την απόδοση υλικών (materials & textures) πάνω στα τρισδιάστατα μοντέλα; Kl;kl;lk;kl; 114. Τι είναι το Normal Mapping και ποια η χρησιμότητα του; Περιγράψτε αναλυτικά τον τρόπο λειτουργίας του. Kl;lk;lk;l 115. Τι είναι οι τεχνικές σχεδίασης και φωτισμού; Περιγράψτε περιληπτικά τρεις τεχνικές δημιουργίας της τελικής εικόνας (rendering). Kl;lk;l;lk 116. Γιατί είναι απαραίτητος ο φωτισμός της σκηνής; Περιγράψτε τρεις τρόπους με τους οποίους μπορεί να επιτευχθεί το παραπάνω. Kl;l;l;lk 117. Τι είναι τα function curves (στα προγράμματα τρισδιάτατης απεικόνισης) και που χρησιμεύουν; Kl;l;lk 118. Τι είναι το UV Mapping; K;lk;l;l 119. Τι είναι το Diffuse Map και ποια η διαφορά του από το Texture Map; Kol;lk;lk; 120. Τι είναι το Bump Map; Kl;lk;lk; 121. Τι είναι το Opacity Map; Kl;lk;lk; 122. Tι είναι η τεχνική extrude και πώς μπορεί να αξιοποιηθεί; Kl;lk;lk;lk 123. Στην τεχνική του Box Modeling, πoια η διαφορά μεταξύ του Convert to editable poly και πότε του convert to editable mesh; Πότε χρησιμοποιείται το δεύτερο; K;l;l;lk 124. Τι είναι το Specular Map; Kl;lk;lk; 125. Tι είναι το modifier Lathe; Τι μπορεί να σχεδιαστεί χρησιμοποιώντας το; Kl;lk;lk; 126. Τι είναι το Displacement Mapping; Kl;lk;lk; 127.Δημιουργείστε ένα παράθυρο 300Χ400 (window 300Χ400) σε JAVA, το οποίο θα μπορεί να περιλαμβάνει ένα υπό δημιουργία παιχνίδι. φδγφδγφγφ 128.Περιγράψτε τη χρησιμότητα των μεταβλητών κατά τη δημιουργία παιχνιδιών σε κώδικα JAVA (JAVA Game Variables). γφγφγφγφδ 129.Να γραφεί απλό πρόγραμμα με κώδικα σε Java, που να τυπώνει ως αποτέλεσμα στον χρήστη τις λέξεις “I love JAVA Game Programming" δφγφδγφγφδγ 130.Να αναφέρετε τη χρησιμότητα των μεθόδων (methods) στο JAVA Game Programming. δφγφγφγφδ 131.Ένα παιχνίδι που έχει δημιουργηθεί σε JAVA, συνήθως περιέχει:1) Frame2) Canvas3) GameLoop4) Rendering method5) Update method6) Mouse and Key input Εξηγείστε συνοπτικά τις έννοιες που αναφέρθηκαν, καθώς και τη χρησιμότητά τους. γφφγφγφδγ 132.Δημιουργείστε σε JAVA απλό κινούμενο αντικείμενο για το παιχνίδι σας (πχ μπαλάκι του τένις), ορίζοντας πρώτα την αρχική του θέση με x και y και κατόπιν τις επόμενες ανάλογα με την κίνηση που θέλετε να πάρει. φγφγφγφδγ 133.Αναφέρατε τουλάχιστον τέσσερις τύπους πολυμέσων που μπορούν να εισαχθούν (import) σε μια ιστοσελίδα και εξηγήστε γιατί είναι απαραίτητη η εγκατάσταση ενός πρόσθετου προγράμματος αναπαραγωγής (add-ons) για ορισμένους τύπους πολυμέσων. fgfgf 134. Τι είναι τα keywords, γιατί είναι απαραίτητη η χρησιμοποίηση τους στην δημιουργία μιας ιστοσελίδας και με ποιον τρόπο γίνεται η σωστή επιλογής τους; fdgfgfgf 135. Τι εννοούμε με τον όρο Search Engine Optimization (SEO); Για ποιον λόγο μια ιστοσελίδα θα πρέπει να εφαρμόζει όλους τους κανόνες που εισάγει η επιστήμη του SEO; fdgfgfd 136. Τί είναι οι εφαρμογές CMS (Content Management systems); Αναφέρατε δύο τουλάχιστον εργαλεία CMS. fdgfgfd 137. Ποια η χρησιμότητα του RSS και πώς επιτυγχάνεται η ενσωμάτωση του σε μια ιστοσελίδα τύπου CMS; fdgfgf 138. Πώς ελέγχουμε την επισκεψιμότητα μιας ιστοσελίδας που δημιουργήθηκε με CMS; dfgfdg 139. Ανφέρετε τις διαφορές μεταξύ component, module και plugin. fgfgfdgfdgd 140. Τι κάνουν τα εργαλεία τύπου filezilla? fgfgfdgfdg 141. Ποιοι τύποι χρηστών υπάρχουν σε μια ιστοσελίδα και ποια τυπικά δικαιώματα έχει ο καθένας; fdgfgfgd 142. Τι είναι το ψηφιακό Video; Αναφέρετε ονομαστικά τις γνωστότερες μεθόδους συμπίεσης και αντίστοιχους τύπους ψηφιακών αρχείων video. dfgfdgffg 143. Τι είναι Component video σήμα; dfgfgfgfdg 144. Τι είναι Composite σήμα video; dfgfgfdgfdg 145. Περιγράψτε τις διαφορές μεταξύ των σημάτων VGA και Βίντεο. fdgfgfdgfd 146. Ποια είναι τα βασικά μέρη του ψηφιακού βίντεο; fgfgfdg 147. Σε τι διαφέρει το Video από το Animation και ποιο κοινό χαρακτηριστικό έχουν; dfgfgfgfd 148. Εξηγήστε τις διαφορές μεταξύ γραμμικής (linear) και μη γραμμικής (non linear) επεξεργασίας video. dfgfdgfdgfdg 149. Πότε χρησιμοποιούνται οι λειτουργίες προεπισκόπηση (preview video) και σύλληψη (capture video), κατά την επεξεργασία ψηφιακού video; dfgfgfdgfdg 150. Τι είναι τα “Transition Effect” σε ένα πρόγραμμα επεξεργασίας video; Δώστε ένα παράδειγμα. dfgfgdfgfd 151. Εξηγήστε τη λειτουργία των εργαλείων trimming (ψαλίδισμα) και cropping (ξάκρισμα), κατά την επεξεργασία μοντάζ ψηφιακού video. dfgfgfg 152. Τι είναι ο υπέρτιτλος (Superimposed clip) στη διαδικασία μοντάζ ψηφιακού video; fdgfgfdgfd 153. Να περιγράψετε τα κύρια χαρακτηριστικά ενός ασυμπίεστου ψηφιακού αρχείου video. dfgfdgfdg 154. Τι είναι κωδικοποιητής ψηφιακών αρχείων video πραγματικού χρόνου (real time video encoders); dfgfgfgfdg 155. Περιγράψτε την τεχνική συμπίεσης ψηφιακού video MPEG. fdgfgfdg 156. Περιγράψτε τα τυπικά βήματα της διαδικασίας Μοντάζ για την παραγωγή ενός ψηφιακού αρχείου video με τη χρήση ενός εργαλείου επεξεργασίας video (πχ. Premiere). fdgfgfgfdg 157. Υπολογίστε το μέγεθος σε Kbytes από τον αποθηκευτικό χώρο ενός σκληρού δίσκου που δεσμεύεται κατά τη σύλληψη ασυμπίεστου ψηφιακού video χωρίς ήχο από βιντεοσυσκευή με σύνθετο βιντεοσήμα PAL, διάρκειας 2 λεπτών, με διαστάσεις 320 x 240 εικονοστοιχείων και βάθος χρώματος 16bit. dfgfgfgfdg 158. Αναφέρατε τους τύπους των symbols που υπάρχουν στο Flash και τα χαρακτηριστικά του κάθενος από αυτούς. fdgfgfg 159. Αναφέρατε τα πεδία του classic text που μπορούν να δημιουργηθούν από την εργαλειοθήκη του Flash και σε ποιες περιπτώσεις χρησιμοποιούνται. dfgfgfdgdf 160. Ποιες οι διαφορές μεταξύ keyframe, blanc keyframe και frame στο flash; fdgfgfdffd 161. Σε λευκό stage στο flash διαστάσεων 800*600px υπάρχει ένα μπλε τετράγωνο διαστάσεων 400*400px, το οποίο βρίσκεται στο σημείο 400,300 του stage. Περιγράψτε σχηματικά τι θα δει ο χρήστης όταν το movie γίνει publish. dfgfgfgfd 162. Τι είναι τα code snippets; dfgfgfdgd 163. Πότε χρησιμοποιείται η εντολή trace bitmap; fdgfdgfdgfd 164. Ποια η διαφορά μεταξύ symbol και instance; dfgfgfdgdf 165. Πού βρίσκεται και πώς λειτουργεί το εργαλείο onion skin στο flash; dfgfgfgdf 166. Ποιος ο ρόλος του frame HIT στο timeline ενός button symbol; Τι πρόβλημα δημιουργείται με κουμπί που περιέχει μόνο κείμενο και πώς το αντιμετωπίζετε; dfgfdgfdgfdg 167. Ποια είδη tweening υπάρχουν στο Flash και ποια είναι τα χαρακτηριστικά τους; dfgfgfgfdgfd 168. Πώς δουλεύει το εργαλείο Bone Tool; dfgfgfdgfd 169. Γράψτε τον κώδικα σε Actionscript 3 για ένα movie clip, το οποίο θα μετακινείται 5px στο stage ανάλογα με την πίεση των βελών του πληκτρολογίου (αριστερά-δεξιά-πάνω-κάτω). dfgfdgfgfd 170. Με ποιο τρόπο κάνουμε path animation ενός tween στο Flash; fgfgfdgfd 171. Δημιουργήστε σε AS3 την function DistanceTwoPoints που θα υπολογίζει την απόσταση μεταξύ δύο σημείων πάνω στο stage. fdgfdgdf 172. Περιγράψτε πώς επιδρά μια μάσκα σε ένα layer που «μασκάρεται» στο Flash. Πώς θα δημιουργούσατε έναν τίτλο που να δείχνει ότι κυματίζει, όπως το νερό της πισίνας; dfgfgfgdfg 173. Περιγράψτε τα αντικείμενα που πρέπει να δημιουργηθούν και τον τρόπο που πρέπει να τοποθετηθούν μέσα στην εφαρμογή, έτσι ώστε να έχουμε έναν κόκκινο κύκλο να διασχίζει οριζόντια το stage, φέρνοντας μαζί του ένα άλλο μικρότερο μπλε κύκλο σαν δορυφόρο του (δηλ. να διαγράφει κυκλική τροχιά γύρω από αυτόν) (στο Flash). dfgfdgfdgfdg 174. Δώστε ένα παράδειγμα (στο Flash) που γίνεται collision detection μεταξύ του movieclip mc_1 και του mc_2. To movieclip mc_1 κινείται αρχικά με βήμα 5px στον οριζόντιο άξονα του stage(800*600). Εάν εξέλθει του stage από μια πλευρά εισέρχεται από την άλλη, διατηρώντας την κατεύθυνσή του. Εάν συναντήσει τo movieclip mc_2 η κατεύθυνσή του αναστρέφεται. dfgfdgfgfdg |
---|