ΕΠΛ131 Αρχές Προγραμματισμού

Σχετικά έγγραφα
ΕΠΛ131 Αρχές Προγραμματισμού

ΕΠΛ131 Αρχές Προγραμματισμού

ΕΠΛ131 Αρχές Προγραμματισμού Ι

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

ΕΠΛ131 Αρχές Προγραμματισμού Ι

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

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

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

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

Δομές ελέγχου ροής προγράμματος

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΕΠΛ131 Αρχές Προγραμματισμού

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΕΡΓΑΣΙΑ 4 - Αντικειμενοστραφής Υλοποίηση του Συστήματος Κατανομής Θέσεων σε Προγράμματα Σπουδών

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

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

Οντοκεντρικός Προγραμματισμός

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

ΕΠΛ Φροντιστήριο 3

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

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

API: Applications Programming Interface

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

ΕΡΓΑΣΙΑ 2. Κατασκευάζοντας Ημερολόγια. Ημερομηνία Ανάρτησης: 23/02/2018 Ημερομηνία Παράδοσης: 13/03/2018, 09:00

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

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

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

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

ΕΠΛ 131 Φροντιστήριο 2

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

Mεταβλητές (variables) και Σταθερές (constants)

Πληροφορική ΙΙ Θεματική Ενότητα 5

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

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

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

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

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

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

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

ΕΠΛ131 Αρχές Προγραμματισμού

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

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

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

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

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Πίνακες (Arrays) ΕΠΛ131 Ενότητα VI

Βασικά της γλώσσας JAVA

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

Πίνακες (Arrays) ΕΠΛ131 Ενότητα VI

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

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

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

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

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

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

CSD Univ. of Crete Φθινόπωρο Άσκηση 1 Εκφώνηση

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Παίρνοντας Αποφάσεις 1

Πολλές φορές έχουμε πολλές μεταβλητές του ίδιου τύπου που συσχετίζονται και θέλουμε να τις βάλουμε μαζί.

Βασικές Έννοιες Δοµών Δεδοµένων

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

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

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

Διδάσκων: Παναγιώτης Ανδρέου

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

Κεφάλαιο 10 Ψηφιακά Λεξικά

Ν!=1*2*3* *(N-1) * N => N! = (Ν-1)! * N έτσι 55! = 54! * 55

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ131 Αρχές Προγραμματισμού Ακαδημαϊκό Έτος 2016/17 Εαρινό Εξάμηνο ΕΝΔΙΑΜΕΣΗ ΕΞΕΤΑΣΗ ΗΜΕΡΟΜΗΝΙΑ: 15 Μαρτίου 2017 ΔΙΑΡΚΕΙΑ: 4:00μμ 6:30μμ ΑΙΘΟΥΣΕΣ: Κτήριο ΧΩΔ01, Αίθουσα 108 ΔΙΔΑΣΚΟΥΣΑ: Ελπίδα Κεραυνού-Παπαηλιού Απαντήστε και τις τρεις ερωτήσεις Κάθε ερώτηση λαμβάνει 33 μονάδες. Ερώτηση 1 Έχουν αναπτυχθεί δύο εναλλακτικά προγράμματα (TwoNumsV1.java και TwoNumsV2.java) για την επίλυση του προβλήματος που περιγράφεται πιο κάτω. Λαμβάνονται δύο φυσικοί αριθμοί, οι οποίοι περιλαμβάνουν αριθμητικά ψηφία πλην του 0. Το κάθε πρόγραμμα επεξεργάζεται τους δύο αριθμούς, και το αποτέλεσμα της επεξεργασίας παρουσιάζεται ως εξής: Αν οι αριθμοί έχουν διαφορετικό μήκος σε αριθμό ψηφίων, τότε απλά επισημαίνεται η διαφορά μήκους. Αν οι δύο αριθμοί έχουν το ίδιο μήκος, δεν είναι όμως οι ίδιοι αριθμοί αλλά περιλαμβάνουν ακριβώς τα ίδια ψηφία, τότε και πάλι επισημαίνεται αυτό. 1

Αν οι δύο αριθμοί δεν είναι οι ίδιοι, αλλά έχουν το ίδιο μήκος, όμως δεν περιλαμβάνουν ακριβώς τα ίδια ψηφία, τότε παρουσιάζεται το κοινό τους μέρος (ίδια αντίστοιχα ψηφία) και τα διαφορετικά τους μέρη (διαφορετικά αντίστοιχα ψηφία). Αν φυσικά οι αριθμοί είναι οι ίδιοι, τότε απλά επισημαίνεται αυτό. Για καλύτερη επεξήγηση της λειτουργίας των δύο προγραμμάτων, πιο κάτω δίνονται κάποια παραδείγματα χρήσης του προγράμματος TwoNumsV1 (οι ίδιες ακριβώς απαντήσεις θα δίνονταν στα συγκεκριμένα παραδείγματα και από το έτερο πρόγραμμα, TwoNumsV2): $ java TwoNumsV1 567 12 Numbers 567 and 12 have different lengths! $ java TwoNumsV1 45621 61542 Numbers 4562 and 6542 have the same digits but not in same positions! $ java TwoNumsV1 1122234 5122678 Common digits of numbers 1122234 and 5122678 are: 122 Digits of number 1122234 that differ from number 5122678 are: 1234 Digits of number 5122678 that differ from number 1122234 are: 5678 $ java TwoNumsV1 785 785 Input numbers 785 and 785 are the same Πιο κάτω δίνεται ο κώδικας των δύο προγραμμάτων, τα οποία είναι λογικά ισοδύναμα, αφού σε κάθε περίπτωση καταλήγουν στις ίδιες απαντήσεις. Για την απάντησή σας στην Ερώτηση 1 χρειάζεται να περιγράψετε αλγοριθμικά τη λύση του κάθε προγράμματος ξεχωριστά. Οι απαντήσεις σας πρέπει να είναι σε εννοιολογικό επίπεδο (conceptual level) και όχι απλά να συνιστούν μεταγραφή του κώδικα (code transliteration). Στη συνέχεια να κάνετε μια συγκριτική ανάλυση των εναλλακτικών αυτών λύσεων του ίδιου προβλήματος, με αναφορά στα ακόλουθα στοιχεία: κατανόηση/διαφάνεια, δομή/άρθρωση, επαναχρησιμοποίηση, δυνατότητα επεκτασιμότητας. 2

Πρώτο Πρόγραμμα: TwoNumsV1.java public class TwoNumsV1 { public static boolean samelen (int x, int y){ return Len(x) == Len(y); public static int Len (int x){ int l = 0; while (x!=0){l++; x = x/10; return l; public static int Sort (int x){ return Sort(x/10, x%10); public static int Sort (int x, int y){ if (x == 0) return y; else return Sort(x/10, insert(y, x%10)); public static int insert (int y, int d){ if (y == 0) return d; else if (d <= y%10) return y*10+d; else return insert(y/10, d)*10 + y%10; public static int match (int x, int y){ if (x==0 && y==0) return 0; else if (x%10 == y%10) return match(x/10, y/10)*10 + x%10; else return match (x/10, y/10); public static int diff (int x, int y){ if (x==0 && y==0) return 0; else if (x%10!= y%10) return diff(x/10, y/10)*10 + x%10; else return diff (x/10, y/10); public static void main (String[] args){ int x = Integer.parseInt(args[0]); int y = Integer.parseInt(args[1]); if (!samelen(x,y)) System.out.print("\n\nNumbers " + x + " and " + y + " have different lengths!"); else if (x!= y) if (Sort(x) == Sort(y)) System.out.print("\n\nNumbers " + x + " and " + y + " have the same digits but not in same positions!"); else {int m = match(x,y); int dx = diff(x,y); int dy = diff(y,x); System.out.print("\n\nCommon digits of numbers " + x + " and " + y + " are: " + m); System.out.print("\n\nDigits of number " + x + " that differ from number " + y + " are: " + dx); System.out.print("\n\nDigits of number " + y + " that differ from number " + x + " are: " + dy); 3

else System.out.print("\n\nInput numbers " + x + " and " + y + " are the same"); System.out.print("\n\n"); Δεύτερο Πρόγραμμα: TwoNumsV2.java public class TwoNumsV2 { public static void main (String[] args){ int x = Integer.parseInt(args[0]); int y = Integer.parseInt(args[1]); int tx = x, ty = y, Lx = 0, Ly = 0; while (tx!= 0){tx = tx/10; Lx++; while (ty!= 0){ty = ty/10; Ly++; tx = x; ty = y; int m = 0, dx = 0, dy = 0; int i = Lx; if (Lx == Ly){ while (tx!= 0){ int e = 1, j = i; while (j!= 0) {e = e * 10; j--; i--; int d1 = tx / e, d2 = ty / e; tx = tx % e; ty = ty % e; if (d1 == d2) m = m * 10 + d1; else {dx = dx * 10 + d1; dy = dy * 10 + d2; int[] xs = {0,0,0,0,0,0,0,0,0,0; int[] ys = {0,0,0,0,0,0,0,0,0,0; boolean ok = Lx == Ly; tx = x; ty = y; if (ok){ while (tx!= 0){ xs[tx%10]++; ys[ty%10]++; tx = tx/10; ty = ty/10; for (int k = 1; k < 10; k++) if (xs[k]!= ys[k]) ok = false; if (Lx!= Ly) System.out.print("\n\nNumbers " + x + " and " + y + " have different lengths!"); else if (x!= y) if (ok) System.out.print("\n\nNumbers " + x + " and " + y + " have the same digits but not in same positions!"); else {System.out.print("\n\nCommon digits of numbers " + x + " and " + y + " are: " + m); System.out.print("\n\nDigits of number " + x + 4

" that differ from number " + y + " are: " + dx); System.out.print("\n\nDigits of number " + y + " that differ from number " + x + " are: " + dy); else System.out.print("\n\nInput numbers " + x + " and " + y + " are the same"); System.out.print("\n\n"); Ερώτηση 2 Για τη δεύτερη ερώτηση χρειάζεται να λύσετε το ίδιο ουσιαστικά πρόβλημα με δύο εναλλακτικούς τρόπους όπως εξηγείται στη συνέχεια. (α) Κατασκευάστε πρόγραμμα (Max2.java) το οποίο λαμβάνει από το χρήστη μια απροσδιορίστου μήκους ακολουθία ακεραίων αριθμών, η οποία τερματίζεται από τον αριθμό 0. Το 0 δεν ανήκει στην ακολουθία, απλά σηματοδοτεί το τέλος της. Στη συνέχεια το πρόγραμμα παρουσιάζει το μεγαλύτερο αριθμό της ακολουθίας, καθώς και το δεύτερο μεγαλύτερο αριθμό. Αν φυσικά ο χρήστης δεν δώσει κανένα αριθμό, ή αν όλοι οι αριθμοί που δώσει είναι οι ίδιοι, αυτό επισημαίνεται από το πρόγραμμα. Το πρόγραμμα ΔΕΝ πρέπει να κάνει χρήση οποιουδήποτε πίνακα. Πιο κάτω δίνονται κάποια παραδείγματα χρήσης του προγράμματος Max2. $ java Max2 Give number: 89 Give number: 5 Give number: 45 Give number: 89 Give number: 100 Give number: 0 The largest number is 100 and the second largest is 89 $ java Max2 Give number: 0 No input given $ java Max2 Give number: 77 Give number: 77 Give number: 80 Give number: 80 Give number: 0 The largest number is 80 and the second largest is 77 5

$ java Max2 Give number: 6 Give number: 6 Give number: 6 Give number: 0 All numbers are the same >> 6 (β) Κατασκευάστε πρόγραμμα (MaxT.java) το οποίο λαμβάνει από τη γραμμή εντολής μια ακολουθία ακεραίων αριθμών (και πάλι απροσδιορίστου μήκους, αλλά τώρα δεν χρειάζεται να επισημανθεί το τέλος της όπως στο προηγούμενο πρόγραμμα) και όπως και το προηγούμενο πρόγραμμα παρουσιάζει το μεγαλύτερο αριθμό της ακολουθίας, καθώς και το δεύτερο μεγαλύτερο αριθμό. Επιπρόσθετα, και σε αντίθεση με το προηγούμενο πρόγραμμα, το δεύτερο πρόγραμμα δίνει και τις πρώτες σε σειρά θέσεις στις οποίες βρίσκονται οι δύο αριθμοί. Αν φυσικά δεν δοθούν καθόλου ορίσματα στη γραμμή εντολής, ή αν όλα τα ορίσματα είναι τα ίδια, όπως και προηγουμένως αυτό επισημαίνεται από το πρόγραμμα. Το πρόγραμμα πρέπει να κάνει χρήση πίνακα. Πιο κάτω δίνονται τα αντίστοιχα παραδείγματα χρήσης για το πρόγραμμα MaxΤ. $ java MaxT 89 5 45 89 100 The largest number is 100 found in position 5 and the second largest is 89 found in position 1 $ java MaxT No Input given $ java MaxT 77 77 80 80 The largest number is 80 found in position 3 and the second largest is 77 found in position 1 $ java MaxT 6 6 6 All numbers are the same >> 6 6

Ερώτηση 3 Για την τρίτη ερώτηση χρειάζεται να συμπληρώσετε το πρόγραμμα Histogram.java, ο σκελετός του οποίου δίνεται πιο κάτω. Όπως λέει και το όνομά του (ιστόγραμμα) το πρόγραμμα αυτό δημιουργεί ιστογράμματα με διακριτό τρόπο και σε δύο διαφορετικές μορφές. Το πρόγραμμα λαμβάνει από τη γραμμή εντολής μια απροσδιορίστου μήκους ακολουθία ακεραίων αριθμών, και νοουμένου ότι δοθεί έστω ένας αριθμός, προχωρεί στο σχηματισμό των ιστογραμμάτων που αντιστοιχούν στους δεδομένους αριθμούς. Οι δύο διαφορετικές μορφές ιστογραμμάτων σχηματίζονται αντίστοιχα από τις μεθόδους, UHist (κάθετο ιστόγραμμα) και VHist (οριζόντιο ιστόγραμμα). Είναι αυτές τις δύο μεθόδους που χρειάζεται να ορίσετε, αξιοποιώντας όπου κρίνετε, βοηθητικές μεθόδους που ήδη ορίζονται (nl, line, max, min, positives, negatives) τις λειτουργίες των οποίων, όμως, χρειάζεται να εξηγήσετε. Η μέθοδος main ορίζεται επίσης. public class Histogram { public static void nl(){system.out.println(); public static void line (int n, char c){ for (int i = 1; i <= n; i++) System.out.print(c); public static int max (int[] table){ int res = table[0]; for (int i = 1; i < table.length; i++) if (table[i] > res) res = table[i]; return res; public static int min (int[] table){ int res = table[0]; for (int i = 1; i < table.length; i++) if (table[i] < res) res = table[i]; return res; public static boolean positives (int [] table){ for (int i = 0; i < table.length; i++) if (table[i] > 0) return true; return false; public static boolean negatives (int [] table){ for (int i = 0; i < table.length; i++) if (table[i] < 0) return true; return false; 7

public static void UHist(int[] tab){........ public static void VHist(int[] table){........ public static void main(string[] args){ if (args.length == 0) System.out.print("\n\nNo Data given\n\n"); else { int [] table = new int[args.length]; for (int i = 0; i < table.length; i++) table[i]=integer.parseint(args[i]); UHist(table); nl(); nl(); VHist(table); nl(); nl(); Οι λειτουργίες των μεθόδων UHist και VHist φαίνονται στα ακόλουθα παραδείγματα χρήσης του προγράμματος. Σε κάθε παράδειγμα, το πρώτο σχήμα αντιστοιχεί στη λειτουργία της UHist και το δεύτερο στη λειτουργία της VHist. Και οι δύο μέθοδοι επεξεργάζονται ακριβώς τα ίδια στοιχεία, δηλαδή τους αριθμούς που δίνονται στη γραμμή εντολής. UHist: Οι στήλες που αντιστοιχούν στους αριθμούς, τυπώνονται κάθετα. Στην περίπτωση των θετικών αριθμών, οι στήλες έχουν κατεύθυνση προς τα πάνω και απαρτίζονται από τον χαρακτήρα *. Στην περίπτωση κάποιου αριθμού που είναι το 0, δεν εμφανίζεται κανένα αστεράκι στη συγκεκριμένη στήλη. Στην περίπτωση των αρνητικών αριθμών οι στήλες έχουν κατεύθυνση προς τα κάτω και απαρτίζονται από το χαρακτήρα +. Οι πάνω και οι κάτω στήλες διαχωρίζονται μεταξύ τους από μια οριζόντια γραμμή που σχηματίζεται από το χαρακτήρα -. VHist: Τα ιστογράμματα σχηματίζονται σε οριζόντια τοποθέτηση, όπου οι σειρές που αντιστοιχούν στους θετικούς αριθμούς προσανατολίζονται προς τα δεξιά και απαρτίζονται από το χαρακτήρα *, ενώ οι σειρές που αντιστοιχούν στους αρνητικούς αριθμούς προσανατολίζονται προς τα αριστερά και απαρτίζονται από το χαρακτήρα +. Ο διαχωρισμός ανάμεσα στα θετικά και τα 8

αρνητικά, τώρα γίνεται με μια κάθετη γραμμή, η οποία απαρτίζεται από το χαρακτήρα. Και οι δύο μέθοδοι έχουν ως παράμετρο ένα πίνακα ακεραίων. Για λόγους που πρέπει να εξηγήσετε οι πίνακες που λαμβάνουν ως ορίσματα οι εν λόγω μέθοδοι δεν θα πρέπει να τροποποιούνται. Φυσικά αν η επεξεργασία που χρειάζεται να γίνει συνεπάγεται τροποποίηση του πίνακα, ο πίνακας μπορεί να αντιγραφεί σε τοπικό πίνακα και η επεξεργασία να γίνεται στον τοπικό πίνακα. $ java Histogram 7 10-8 -9 15 0 2 6 0 0-10 -5 13 6 * * * * * * * * * * * * * * * * * ** * * ** * * ** ** * * ** ** * * ** ** * * ** ** * ** ** ** * ** ** -------------- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + ++ + ++ + + + + ******* ********** ++++++++ +++++++++ *************** ** ****** ++++++++++ +++++ ************* ****** 9

$ java Histogram 1 2 3 4 5 4 3 2 1-1 -2-3 -4-5 -4-3 -2-1 * *** ***** ******* ********* ------------------ +++++++++ +++++++ +++++ +++ + * ** *** **** ***** **** *** ** * + ++ +++ ++++ +++++ ++++ +++ ++ + ΤΕΛΟΣ ΕΡΩΤΗΣΕΩN 10

ΧΩΡΟΣ ΑΠΑΝΤΗΣΕΩΝ Ονοματεπώνυμο Φοιτητή: ----------------------------------------------------------------- Ταυτότητα: --------------------------------------------------------------------------------------- Υπογραφή: -------------------------------------------------------------------------------------- Ερωτήσεις Μονάδες Ερώτηση 1 Ερώτηση 2 Ερώτηση 3 Σύνολο Μονάδων Παρατηρήσεις Διδάσκοντα 11

Απάντηση στην Ερώτηση 1 12

(τυχόν συνέχεια στην απάντηση της Ερώτησης 1) 13

(τυχόν συνέχεια στην απάντηση της Ερώτησης 1) 14

Απάντηση στην Ερώτηση 2 15

(τυχόν συνέχεια στην απάντηση της Ερώτησης 2) 16

(τυχόν συνέχεια στην απάντηση της Ερώτησης 2) 17

Απάντηση στην Ερώτηση 3 18

(τυχόν συνέχεια στην απάντηση της Ερώτησης 3) 19

(τυχόν συνέχεια στην απάντηση της Ερώτησης 3) 20

Επιπρόσθετο φύλλο (για συμπλήρωση απάντησης ή πρόχειρο) 21

Επιπρόσθετο φύλλο (για συμπλήρωση απάντησης ή πρόχειρο) 22

Επιπρόσθετο φύλλο (για συμπλήρωση απάντησης ή πρόχειρο) 23

Επιπρόσθετο φύλλο (για συμπλήρωση απάντησης ή πρόχειρο) ΤΕΛΟΣ ΕΞΕΤΑΣΤΙΚΟΥ ΔΟΚΙΜΙΟΥ 24