You are on page 1of 34

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/320402954

Lab Manual for the course: Introduction To Computer Science - Java


Programming Language

Book · February 2017


DOI: 10.5281/zenodo.3549402

CITATIONS READS

0 2,519

2 authors:

Eleftheria Katsiri Alexandros Gazis


Democritus University of Thrace Democritus University of Thrace
48 PUBLICATIONS   192 CITATIONS    14 PUBLICATIONS   2 CITATIONS   

SEE PROFILE SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Lab Material for Duth,EECE View project

Teaching programming View project

All content following this page was uploaded by Alexandros Gazis on 12 February 2020.

The user has requested enhancement of the downloaded file.


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

Μάθημα: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ


Διδάσκουσα καθηγήτρια: Ελευθερία Κατσίρη

Αλέξανδρος Γαζής
πτυχιούχος ΗΜΜΥ ΔΠΘ,
μεταπτυχιακός φοιτητής ΔΠΘ

ΞΑΝΘΗ, ΦΕΒΡΟΥΑΡΙΟΣ 2017


 Το παρόν εγχειρίδιο δημιουργήθηκε με σκοπό την παροχή
επεξηγήσεων και την καθοδήγηση των προπτυχιακών φοιτητών του
Δημοκρίτειου Πανεπιστημίου Θράκης, αναφορικά με το εργαστηριακό τμήμα
του μαθήματος «Εισαγωγή στην Επιστήμη των Υπολογιστών», όπως
διδάσκεται σήμερα. Βασίστηκε σε υλικό που δημιουργήθηκε στα πλαίσια του
μαθήματος τα τελευταία χρόνια το οποίο και διανθίστηκε μέσα από την
καθημερινή αλληλεπίδραση με τους φοιτητές του εργαστηρίου. Αποτελεί
ένα αναλυτικό οδηγό, που στοχεύει τόσο στην επισήμανση των κύριων
ζητημάτων, που καλείται να αντιμετωπίσει ο κάθε σπουδαστής κατά την
διάρκεια των εργαστηρίων, όσο και στην αποσαφήνιση της διδακτέας ύλης.

 Σε περίπτωση που προκύπτουν απορίες, κατά την ανάγνωση του


εγχειριδίου, παρακαλούμε όπως επικοινωνήσετε μαζί μας, στα κάτωθι
email:
Διδάσκουσα καθηγήτρια: Ελευθερία Κατσίρη, ekatsiri@ee.duth.gr

Υπεύθυνος εργαστηρίου: Αλέξανδρος Γαζής, agazis@ee.duth.gr

 Τέλος, θα θέλαμε να ευχαριστήσουμε τον κ. Αλέξανδρο Καράκο


αφυπηρετήσαντα καθηγητή ΔΠΘ του τμήματος ΗΜΜΥ καθώς και την κ.
Σοφιάννα Μενεσίδου, διδάκτορα του τμήματος για την συνεισφορά τους.

2
ΠΕΡΙΕΧΟΜΕΝΑ
σελ.

Εγγραφή στο μάθημα μέσω της πλατφόρμας του eclass ..................................................... 4


Εργαστήριο 1- Παρουσίαση Εργαστηριακών Εργαλείων ............................................. 7
1. Ram Type 5...................................................................................................................... 7
2. Open Office ...................................................................................................................... 8
3. Eclipse Kepler .................................................................................................................. 9
Εργαστήριο 2- Μεταβλητές, Λογικές Συνθήκες και Βασικές Εντολές........................ 10
1. 1ο πρόγραμμα υλοποίησης - «Γεια σου Κόσμε» ...................................................... 11
2. Υλοποίηση αποτελέσματος οθόνης στην Γραμμή Εντολών (των Windows) ....... 12
3. Μεταβλητές/Τύποι Δεδομένων .................................................................................... 13
4. Μετατροπές σε Μεταβλητές/Τύπους Δεδομένων ..................................................... 14
5. Java: Case sensitive ..................................................................................................... 15
6. Αριθμητικοί και Λογικοί Τελεστές ................................................................................ 15
7. Εντολές Εισόδου-Εξόδου Δεδομένων ....................................................................... 16
8. Εντολές Λογικού Ελέγχου (ΑΝ)................................................................................... 18
9. Συνδυαστικά Παραδείγματα......................................................................................... 19
Εργαστήριο 3- Πίνακες Δεδομένων και Δομές Επανάληψης ..................................... 23
1. Πίνακας-Βασικές ιδιότητες ........................................................................................... 23
Ι. Πίνακας-Βασικές ιδιότητες στην επιστήμη των Υπολογιστών................................. 24
ΙΙ. Παραδείγματα με χρήση Πινάκων .............................................................................. 26
2. Δομές Επαναλήψεων ................................................................................................... 28
Ι. Ανάθεση τυχαίων Τιμών ............................................................................................... 29
3. Παραδείγματα Δομών Επανάληψης........................................................................... 30

3
Εγγραφή στο μάθημα μέσω της πλατφόρμας του eclass

Η πλατφόρμα «DUTHNET eClass» αποτελεί ένα ολοκληρωμένο σύστημα διαχείρισης


ηλεκτρονικών μαθημάτων. Ακολουθεί τη φιλοσοφία του λογισμικού ανοικτού κώδικα και
υποστηρίζει την υπηρεσία Ασύγχρονης Τηλεκπαίδευσης, χωρίς περιορισμούς και
δεσμεύσεις. Η πρόσβαση στην υπηρεσία γίνεται με τη χρήση ενός απλού φυλλομετρητή
(web browser), χωρίς την απαίτηση εξειδικευμένων τεχνικών γνώσεων.

Για την παρακολούθηση του μαθήματος απαιτείται η εγγραφή σας στο μάθημα, ώστε
να λαμβάνεται ενημερώσεις τόσο για την θεωρία όσο και για το εργαστηριακό μέρος.
Για την εγγραφή, ακολουθείστε τα παρακάτω βήματα:

1. Στην γραμμή διευθύνσεων (web address) του περιηγητή σας εισάγετε


την παρακάτω ηλεκτρονική διεύθυνση:

https://eclass.duth.gr

2. Στο πεδίο «Σύνδεση χρήστη» εισάγετε το όνομα χρήστη καθώς και τον
κωδικό που σας παρέχει η γραμματεία του Δημοκρίτειου Πανεπιστημίου
Θράκης.

Τονίζεται ότι το όνομα χρήστη μπορεί να προκύψει και από τα στοιχεία


σύνδεσης στην υπηρεσία ηλεκτρονικών μηνυμάτων
(https://webmail.duth.gr/). Ως εκ τούτου, το όνομα χρήση και ο κωδικός
σας στην πλατφόρμα του eclass (λ.χ. agazis και 1993a1) είναι
ταυτόσημα με τα στοιχεία που ζητούνται κατά την είσοδο στην υπηρεσία
ηλεκτρονικών μηνυμάτων.

Τέλος, τονίζεται ότι το πανεπιστημιακό email κάθε φοιτητή της σχολής


προκύπτει αυτόματα από το όνομα χρήστη, συνοδευόμενο από :
@ee.duth.gr . Συνεπώς, αν το όνομα χρήση είναι agazis, το email είναι
agazis@ee.duth.gr .

Οποιαδήποτε επικοινωνία με τον διδάσκοντα ή τον υπεύθυνο


εργαστηρίου πραγματοποιείται μέσω του email του πανεπιστημίου.

3. Στο νέο παράθυρο, όπου μεταφέρεστε, μετά την επιτυχή σύνδεση,


αναζητούμε στις επιλογές, στο αριστερό τμήμα της οθόνης την καρτέλα
«Μαθήματα».
4. Στην συνέχεια, επιλέγουμε τον σύνδεσμο για το προπτυχιακό επίπεδο
(με γαλάζια γράμματα).

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

Ακολουθεί σχηματική απεικόνιση των παραπάνω βημάτων:

Εικόνα 1 Βήμα 1: εισαγωγή ηλεκτρονικής διεύθυνσης σε περιηγητή

Εικόνα 2 Βήμα 2: εισαγωγή στοιχείων στην Σύνδεση χρήστη

5
Εικόνα 3 Βήμα 3: επιλογή αριστερά Μαθήματα

Εικόνα 4 Βήμα 4: επιλογή Προπτυχιακό

Εικόνα 5 Βήμα 5: πριν και μετά την επιλογή του κουτιού του μαθήματος, στο οποίο επιθυμούμε να
εγγραφούμε

6
Εργαστήριο 1- Παρουσίαση Εργαστηριακών Εργαλείων

Για την ορθή παρακολούθηση και συμμετοχή στο εργαστηριακό μέρος του μαθήματος,
απαιτείται η εξοικείωση του αναγνώστη με τα εξής εργαλεία:

 Ram Type 5

 Open Office

 Eclipse Kepler (4.3.2)

1. Ram Type 5

To πρόγραμμα Ram Type 5 αποτελεί το πιο δημοφιλές πρόγραμμα εκμάθησης τυφλού


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

Για να κατεβάσετε το πρόγραμμα στον ηλεκτρονικό σας υπολογιστή, επιλέγετε τα


κάτωθι στο περιβάλλον του eclass:

Χαρτοφυλάκιο Χρήστη -> Εισαγωγή στην Επιστήμη Η/Υ -> Έγγραφα ->Τυφλό Σύστημα
Πληκτρολόγησης

To αρχείο που πρέπει να κατεβάσετε έχει τίτλο «Τυφλό σύστημα Πληκτρολόγησης».


Ακολουθεί σχηματική αναπαράσταση:

Εικόνα 6 Για το κατέβασμα του προγράμματος Ram Type 5 μπορείτε είτε να πατήσετε(αριστερό κλικ) είτε
στο όνομα του αρχείου είτε όπως υποδεικνύει το δεξί βέλος.

7
2. Open Office

To πρόγραμμα Open Office 4 αποτελεί ένα ολοκληρωμένο πακέτο εφαρμογών


γραφείου ανοιχτού κώδικα (δωρεάν διάθεση) για όλες τις πλατφόρμες λειτουργικών
συστημάτων (Windows, Macintosh, Linux). Διαθέτει υποστήριξη της ελληνικής
γλώσσας (χάρη στην συμβολή εθελοντών), χαρακτηρίζεται από την ίδια
λειτουργικότητα με το MS Office (εφαρμογή επί πληρωμή, κλειστού κώδικα) και
αποτελεί την ιδανική λύση για επιχειρήσεις, σχολεία και οργανισμούς, καθώς
μπορούν να το αποκτήσουν ελεύθερα. Η μορφή αποθήκευσης (format) είναι σε
ανοιχτό OpenDocument, αλλά δίνεται η δυνατότητα ανάγνωσης και εγγραφής
αρχείων που έχουν προέλθει από το Word, Excel και PowerPoint (MS office) καθώς
και δημιουργίας αρχείων με την αντίστοιχη κατάληξη (doc/docx, xls/xlsx, ppt/pptx).
Περιλαμβάνει τα εξής εργαλεία, τα οποία παρουσιάζονται, επιγραμματικά, στο
εισαγωγικό εργαστήριο του μαθήματος:

1. Επεξεργαστής Κειμένου (Writer)

2. Υπολογιστικό Φύλλο (Calc)

3. Δημιουργός Παρουσιάσεων (Ιmpress)

4. Πρόγραμμα Σχεδίασης (Draw)

5. Βάση Δεδομένων (Base)

6. Επεξεργαστής Εξισώσεων (Math)

Για να κατεβάσετε το αρχείο της εγκατάστασης του προγράμματος στον ηλεκτρονικό


σας υπολογιστή, επιλέγετε τους εξής συνδέσμους:

Για την αγγλική έκδοση (παρέχει την επιλογή να http://www.openoffice.org/download/


κατεβάσετε και greek language pack)
Για την ελληνική έκδοση http://www.openoffice.org/el/

Εικόνα 7 Για το κατέβασμα του προγράμματος OpenOffice από τους παραπάνω συνδέσμους πατήσετε
(αριστερό κλικ) εκεί που υποδεικνύει το δεξί βέλος, εφόσον έχετε εγκατεστημένο λειτουργικό σύστημα
Windows.

8
Υπενθύμιση (για τους χρήστες Linux): για υπολογιστές με συνολική Ram άνω των 4GB
επιλέξτε την έκδοση των 64bit .

3. Eclipse Kepler

To πρόγραμμα Eclipse αποτελεί ένα από τα γνωστότερα εργαλεία για την ανάπτυξη
λογισμικού σε ηλεκτρονικούς υπολογιστές. Η ανάπτυξη του εργαλείου έγινε στα τέλη
του 1990, από την ΙΒΜ και αποτελεί ένα ολοκληρωμένο περιβάλλον ανάπτυξης (IDE).
Αναλυτικότερα, συνιστά ένα ελεύθερο ολοκληρωμένο περιβάλλον για την ανάπτυξη
λογισμικού -IDE- κυρίως σε γλώσσα προγραμματισμού JAVA (την οποία θα
μελετήσουμε στα πλαίσια του μαθήματος). Αξίζει να αναφερθεί ότι, με τις κατάλληλες
προσθήκες-plugins, το περιβάλλον ανοικτού κώδικα (Open source) δύναται να
υποστηρίξει πληθώρα γλωσσών προγραμματισμού, όπως: C, C + +, Java, PHP,
COBOL, Perl, PHP, Python, Scala κλπ.

Εναλλακτικές προτάσεις είναι το NetBeans της Sun Microsystems και το .NET της
Microsoft. Όλες οι προαναφερθείσες πλατφόρμες συντελούν στην ταχεία
προτυποποίηση, την αλληλεπίδραση και την ανταλλαγή ιδεών, με βάση μια κοινή
αρχιτεκτονική, διευκολύνοντας την ανάπτυξη διαφόρων τύπων εφαρμογών μεγάλης
κλίμακας, για τις μεγάλες ομάδες των προγραμματιστών.

Για να κατεβάσετε το αρχείο της εγκατάστασης του προγράμματος στον ηλεκτρονικό


σας υπολογιστή, επιλέγετε τον εξής σύνδεσμο:

https://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/keplersr2

Εικόνα 8 Για το κατέβασμα του προγράμματος Eclipse από τον παραπάνω σύνδεσμο, επιλέξτε (αριστερό
κλικ) εκεί που υποδεικνύει το κόκκινο πλαίσιο, αναλόγως του λειτουργικού σας συστήματος (Windows,
Macintosh, Linux)

Εικόνα 9 Για υπολογιστές με συνολική Ram ΚΑΤΩ των 4GB, επιλέξτε την έκδοση των 32 bit (πράσινο βέλος
για επαλήθευση ορθής επιλογής), ενώ για συνολική Ram των 4GB ή ΠΑΡΑΠΑΝΩ επιλέξτε την έκδοση των
64 bit (Κόκκινο βέλος για να κατεβάσετε το αρχείο)

9
Εργαστήριο 2- Μεταβλητές, Λογικές Συνθήκες και
Βασικές Εντολές

Στόχος του δεύτερου εργαστήριου είναι η εξοικείωση με βασικές έννοιες του


προγραμματισμού καθώς και η υλοποίηση του πρώτου προγράμματος. Αρχικά,
παρουσιάζεται το εξής σχήμα, το οποίο αντιπροσωπεύει την βασική λειτουργία που
υλοποιείται εντός του ηλεκτρονικού υπολογιστή, για την επεξεργασία του
προγραμματιστικού κώδικα και την εξαγωγή των αποτελεσμάτων στην οθόνη του
υπολογιστή.

Εικόνα 10 Διαδικασία υλοποίησης για την εξαγωγή αποτελεσμάτων στην οθόνη του χρήστη (και παράδειγμα
λειτουργίας σε αρχεία Java)

Οι παραπάνω έννοιες επεξηγούνται αναλυτικά στα προτεινόμενο εγχειρίδιο του


μαθήματος, από την υπηρεσία «Εύδοξος». Στα πλαίσια του εργαστηρίου, απαιτείται η
εξοικείωση και κατανόηση των παρακάτω όρων:

 Compiler: πρόγραμμα που μετατρέπει το πηγαίο κώδικα από μια γλώσσα


προγραμματισμού σε μια άλλη (με σκοπό να τρέξουμε ένα πρόγραμμα)
 Interpreter: πρόγραμμα που εκτελεί ΜΟΝΟ ένα κώδικα ή πρόγραμμα

Στα πλαίσια του εργαστηρίου δεν θα ασχοληθούμε με τα παραπάνω, καθώς το


εργαλείο Eclipse κάθε φορά που τρέχουμε ένα πρόγραμμα κάνει αυτόματα compile
(όπως και interpret). Αξίζει να τονιστεί ότι επιβάλλεται να είναι ΠΑΝΤΟΤΕ επιλεγμένη η
ρύθμιση Project/ Bulid Automatically. Ακολουθεί σχηματική απεικόνιση στο περιβάλλον
του Eclipse.

Εικόνα 11 Επιλογή ρύθμισης Project/ Bulid Automatically στην γραμμή επιλογών του Eclipse

10
1. 1ο πρόγραμμα υλοποίησης - «Γεια σου Κόσμε»

Στα πλαίσια του εργαστηρίου, απαιτείται η δημιουργία ενός προγράμματος το οποίο θα


εμφανίζει στην οθόνη του χρήστη το μήνυμα «Γεια σου κόσμε. Hello world!».
Σημειώνεται ότι όσον αφορά τον τρόπο, με τον οποίο γράφουμε τον προγραμματιστικό
κώδικα στο Eclipse, ανατρέχετε στο Κεφάλαιο Τεχνικό Παράρτημα/Βασικά Βήματα
Εclipse .

Ο κώδικας, ο οποίος απαιτείται για να υλοποιήσουμε το σχετικό μήνυμα ως


έξοδο στην οθόνη του χρήστη, είναι ο εξής:

public class HelloWord {


public static void main(String[ ] args) {
System.out.println("Γεια σου κόσμε. Hello world!");
// με 2 παύλες βάζουμε σχόλια!!!
}
}

Με βάση το παραπάνω παράδειγμα, στην οθόνη του χρήστη θα εμφανιστεί το μήνυμα:

Γεια σου κόσμε. Hello world!

Στην συνέχεια, ακολουθεί σύντομη παρουσίαση των παραπάνω εντολών:

 public class HelloWord:


Δηλώνει τη κλάση Hello. Προσοχή, το συγκεκριμένο όνομα προϋποθέτει ότι το
αρχείο είναι Hello.java (αρχείο στο src φάκελο στο workspace)

 public static void main(String[ ] args):


Δηλώνει, όσον αφορά το κυρίως πρόγραμμα που επιτελείται, ποιο είναι το
ΚΥΡΙΟ ΣΩΜΑ, στο οποίο υπάρχει η main. 1

 System.out.println("Hello World!"):
Τυπώνει το μήνυμα Hello World!

 ;
Χρησιμοποιείται στο τέλος κάθε εντολής

 // Σχόλια:
Χρησιμοποιούνται για να γράφουμε σχόλια στο κώδικα. Δεν εκτελούνται σε
καμία περίπτωση και δεν εμφανίζονται ΠΟΤΕ στην οθόνη=console του Eclipse

1
Σε κάθε πρόγραμμα που θα υλοποιηθεί στα πλαίσια του εργαστηρίου ή γενικότερα στην
προγραμματιστική γλώσσα JAVA, επιβάλλεται η ύπαρξη της εντολής: public static void main(String[]
args)

11
2. Υλοποίηση αποτελέσματος οθόνης στην Γραμμή Εντολών (των
Windows)

Γιατί επιλέγουμε το Eclipse για την ανάπτυξη εφαρμογών και όχι την γραμμή εντολών ;

Ενδεικτικά, αν έχετε ακολουθήσει επακριβώς τα βήματα για την εγκατάσταση καθώς και
υλοποίηση ενός φακέλου για την αποθήκευση των προγραμμάτων σας (workspace),
τότε οι εντολές απαιτούν λίγα δευτερόλεπτα για να τρέξουν(interpret) στην οθόνη του
υπολογιστή σας. Αν έχετε υποπέσει σε σφάλμα, τότε το περιβάλλον του Eclipse θα σας
υποδείξει (μετά το απαραίτητο compile) το σημείο-γραμμή.

Έστω ότι επιθυμούσαμε να τρέξουμε ένα παρόμοιο πρόγραμμα με το παραπάνω, το


οποίο θα εμφανίζει ως μήνυμα εξόδου: «hello world» μόνο με εντολές. Βασικές εντολές
του Cmd είναι: help, dir2, cd3, copy, move, del, exit, mkdir, cls (βοήθεια, περιεχόμενα
φακέλου, αλλαγή προορισμού, αντιγραφή, μετακίνηση (αποκοπή), διαγραφή, έξοδος,
δημιουργία νέου φακέλου (προορισμού), καθαρισμός της γραμμής εντολών). Για να
τρέξουμε το παραπάνω πρόγραμμα απαιτούνται τα εξής βήματα, αφού πρώτα
ανοίξουμε την γραμμή εντολών και πατήσουμε στην αναζήτηση των Windows την
εντολή cmd.exe (Start->Run->cmd).

Μάλιστα, για να υλοποιηθούν όλα τα παραπάνω, απαιτούν την εγκατάσταση του JDK:

http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

2
dir: directory, παραθέτει αναλυτικά όλα τα αρχεία και υποφακέλους εντός του φακέλου που είμαστε
3
cd: change directory, άλλαξε το φάκελο. Όπως κάνετε ΔΙΠΛΟ ΚΛΙΚ

12
και της αναλυτικής δήλωσης, στην γραμμή εντολών του φακέλου της java, σύμφωνα με
τις οδηγίες που παρέχονται από το επίσημο ιστότοπο της προγραμματιστικής γλώσσας:

https://www.java.com/en/download/help/path.xml

Από όλα τα παραπάνω γίνεται σαφές ότι ο συγκεκριμένος τρόπος, αν και λειτουργικός,
δεν είναι ιδιαίτερα εύχρηστος για τον προγραμματισμό.

3. Μεταβλητές/Τύποι Δεδομένων

Σε προγενέστερο κεφάλαιο παρουσιάστηκε το πρόγραμμα εξαγωγής ενός μηνύματος


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

1. char -> χαρακτήρας


 πχ. char c = 'a';

2. String -> ακολουθία χαρακτήρων


 πχ. String hello = "Hello World!" ;

3. int -> ακέραιος αριθμός


 πχ. int x = 5;

4. long -> μεγάλος ακέραιος


 πχ. long y = 4356456325624564325L;

5. float -> κινητής υποδιαστολής


 πχ. float z = 5.2F;

6. double -> διπλής ακρίβειας κινητής


υποδιαστολής
 πχ. double w = 0.12342355575678;

7. boolean -> λογική μεταβλητή (true ή false)


 πχ. boolean b = true;

Έμφαση απαιτείται να δοθεί στον όρο συγκεκριμένη ποσότητα, καθώς αναλόγως με το


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

13
4. Μετατροπές σε Μεταβλητές/Τύπους Δεδομένων

Στην JAVA έχουμε την δυνατότητα να μετατρέψουμε μια μεταβλητή σε μεταβλητή άλλου
τύπου, με τη τεχνική του casting . Η σύνταξη της εντολής έχει την εξής μορφή:

Γενική μορφή: (τύπος) μεταβλητή

Ωστόσο, μέσω αυτής της τεχνικής, υπάρχει κίνδυνος να απολεσθούν πληροφορίες.

Παραδείγματα σε γλώσσα Java είναι τα παρακάτω:-

 x = (int) y; (εάν y = 2.4 τότε το x θα έχει τη τιμή 2)


 z = (double) w; (εάν w = 14 τότε το z θα έχει τη τιμή 14.0)
 x = (int) ch; (εάν ch = 'a' τότε το x θα έχει τη τιμή 97)
 ch = (char) x; (το αντίστροφο)

Ακολουθούν αναλυτικά παραδείγματα μετατροπής:

Παράδειγμα 1
public static void main(String[] args) {
double x= 12.324;
int y= (int) x;
System.out.println("PROSOXI stis metatropes dedomenwn!"
+ " Alli timi exei to x:"+x+" prin tin metatropi kai alli meta opou
y:"+y);}}

όπου παράγεται το εξής μήνυμα στην οθόνη του χρήστη:

Παράδειγμα 2
public static void main(String[ ] args) {
int x= 21;
double y = (double) x; // i mporume na grapsume pio analitika
// double y;
// y = (double) x;
System.out.println("PROSOXI stis metatropes dedomenwn!"
+ " Alli timi exei to x:"+x
+" prin tin metatropi kai alli meta opou y:"+y); }}
όπου παράγεται το εξής μήνυμα στην οθόνη του χρήστη:

14
5. Java: Case sensitive

Σε αυτό το σημείο και με αφορμή τα προηγούμενα παραδείγματα που παρουσιάστηκαν,


κρίνεται αναγκαίο να επισημανθεί ότι η γλώσσα java είναι case sensitive. Ειδικότερα,
αυτό σημαίνει ότι υπάρχει διάκριση μεταξύ των κεφαλαίων και των μικρών γραμμάτων,
ανεξαρτήτως αν γράφουμε το πρόγραμμα με ελληνικούς ή λατινικούς χαρακτήρες. Για
να κατανοήσουμε ορθότερα τον όρο, ας εξετάσουμε το εξής παράδειγμα:

public static void main(String[ ] args) {


int A=12;
int a=12;
System.out.println("ΠΡΟΣΟΧΗ η Java ειναι CASE SENSITIVE"
+ "διαφορετικη τιμη εχει το A:"+A+" απο οτι το α:"+a);}}

όπου παράγεται το εξής μήνυμα στην οθόνη του χρήστη:

Στη συνέχεια, αντιγράψετε το παραπάνω κώδικα και μεταβάλλετε κάποια από τις
παραπάνω εντολές όπως:
int Α=12; ως Int ή iNt ή inT
Παρατηρούμε ότι, εφόσον συντελέσουμε αυτή τη μεταβολή ή γενικότερα
ανασυντάξουμε το κείμενο, μετατρέποντας ένα γράμμα από κεφαλαίο σε μικρό, το
πρόγραμμα δεν έχει την επιθυμητή λειτουργία.

6. Αριθμητικοί και Λογικοί Τελεστές

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

Αριθμητικοί τελεστές

 + πρόσθεση
 ++ πρόσθεση κατά 1
 - αφαίρεση
 -- αφαίρεση κατά 1
 * πολλαπλασιασμός
 / διαίρεση
 % υπόλοιπο διαίρεσης

Παράδειγμα: w = ((x + 3)*(x - y))/10

15
Λογικοί τελεστές
 > μεγαλύτερο
 >= μεγαλύτερο ή ίσο
 < μικρότερο
 <= μικρότερο ή ίσο
 == ίσο
 != διάφορο
 ! αντίθετο (NOT)
 & λογικό AND
 | λογικό OR

Παράδειγμα: x > 5, !(x > 5) ισοδύναμο με x <= 5, y == x

7. Εντολές Εισόδου-Εξόδου Δεδομένων

Με εφαλτήριο την εντολή για την εξαγωγή μηνυμάτων στην οθόνη του χρήστη
System.out.println("…"); , σε αυτήν την ενότητα παρουσιάζεται ο τρόπος με τον οποίο
εισάγονται δεδομένα από τον χρήστη, για την επίτευξη σχέσης αλληλεπίδρασης
χειριστή-κονσόλας.

Για την εισαγωγή δεδομένων από τον χρήστη, χρησιμοποιείται η εντολή:

Scanner sc = new Scanner(System.in);

Η χρήση της παραπάνω εντολής απαιτεί την ύπαρξη της βιβλιοθήκης java.util.Scanner,
επομένως πρέπει να εισαχθεί η έκφραση import java.util.Scanner; πριν τη δήλωση της
κλάσης (public class ΟΝΟΜΑ). Στα πλαίσια του εργαστηρίου καθώς και μελλοντικά, στα
προγράμματα που θα υλοποιήσετε, προτείνεται να υλοποιείται αυτόματα την
διαδικασία, μέσω του περιβάλλοντος του Eclipse, ώστε να μην δημιουργείται δυσχέρεια
κατά την εύρεση και εισαγωγή της ορθής βιβλιοθήκης.

Ειδικότερα, αφού πληκτρολογήσετε την εντολή για την χρήση του Scanner, πατήστε
ταυτόχρονα Cntrl+Shift+O για την αυτόματη δήλωση-συμπλήρωση βιβλιοθήκης. Σε
ότι αφορά την χρήση της εντολής, ακολουθούν μερικά παραδείγματα:

Scanner sc = new
Scanner(System.in);

16
int x = sc.nextInt();

double z = sc.nextDouble();

String str = sc.next();

Σημειώνεται ότι δηλώνουμε το Scanner μια φορά και μετέπειτα, αναλόγως του τύπου
μεταβλητής που επιθυμούμε να εισάγει ο εκάστοτε χρήστης, κάνουμε αναφορά σε αυτό,
μέσω της sc.next…

Αναλυτικότερα, αναλόγως των στοιχείων που θέλουμε να εισάγει ο χρήστης στην


κονσόλα, επιλέγουμε την εκάστοτε εντολή:

Εντολή Τύπος μεταβλητής


εισόδου

nextInt() Ιnteger

nextFloat() Float

nextLong() Long

nextShort() Short

nextBoolean() Boolean

nextLine() Line of Strings

Τέλος, παρότι δόθηκε έμφαση για την εντολή του Scanner, επισημαίνουμε ότι, εφόσον
επιθυμείτε να εισάγετε άλλα εργαλεία (utilities), ακολουθείτε τον ίδιο τρόπο
συμπλήρωσης και σε αυτή την περίπτωση. Ακολουθούν παραδείγματα μαθηματικών
υπολογισμών.

 double z = Math.sqrt(x);
Υπολογίζει τη τετραγωνική ρίζα του x, όπου x είναι double
μεταβλητή

 double z = Math.pow(a,b);
Υπολογίζει τη δύναμη του a εις την b, όπου a,b είναι double
μεταβλητές

 double z = Math.random();
Επιστρέφει μια τυχαία τιμή στο διάστημα [0.0, 1.0)

17
8. Εντολές Λογικού Ελέγχου (ΑΝ)

Στις προηγούμενες ενότητες αναλύθηκαν κύριες έννοιες για την εισαγωγή και εξαγωγή
δεδομένων, τη δήλωση και την χρησιμοποίηση μεταβλητών. Σε αυτό το κεφάλαιο, θα
επεκταθούμε σε μια ιδιαίτερα σημαντική έννοια του προγραμματισμού, την εντολή
ελέγχου ΑΝ (if).

Πιο αναλυτικά, έστω ότι θέλουμε να χρησιμοποιήσουμε ένα πλήθος εντολών,


αποκλειστικά στις περιπτώσεις όπου ισχύει μια συνθήκη, λ.χ σε μια αριθμομηχανή
εισάγουμε αριθμούς και, αναλόγως μιας συνθήκης, επιλέγουμε ποια πράξη θα
υλοποιηθεί. Η γενική σύνταξη αυτής της εντολής είναι:

if(λογική συνθήκη) {
//Εάν είναι αληθής η συνθήκη, πχ. x > 5

}else{
//Εάν είναι ψευδής η συνθήκη

Αντίστοιχα, η παραλλαγή για πολλές υλοποιήσεις αναλόγως συνθηκών είναι:
if(λογική συνθήκη) {
//Εάν είναι αληθής η συνθήκη, πχ. x > 5

}else if(λογική συνθήκη){
//Εάν είναι αληθής η συνθήκη. πχ. x == 0

}else{
//Εάν δεν ισχύει κανένα από τα προηγούμενα

Αν η ακριβής σύνταξη της εντολής παρουσιάζει δυσχέρειες, πατήστε If στον editor και
μετά Cntrl+Spacebar, ώστε το Eclipse να παρέχει βοήθεια κατά την συμπλήρωση.
Ειδικότερα, παρουσιάζεται το ακόλουθο παράθυρο, όπου αριστερά εμφανίζεται η
εντολή και δεξιά η γενική σύνταξή της:

18
9. Συνδυαστικά Παραδείγματα

Παράδειγμα 1
Να κατασκευάσετε πρόγραμμα, το οποίο θα δέχεται 2 μη μηδενικούς αριθμούς από το
πληκτρολόγιο του χρήστη, έναν integer (ακέραιο) και έναν double (κινητής
υποδιαστολής) και θα υπολογίζει το μέσο όρο τους.
Όταν ο μέσος όρος των αριθμών είναι:
 αρνητικός, τότε το πρόγραμμα θα εξάγει το τελικό αποτέλεσμα σε ακέραιο
 θετικός, τότε το πρόγραμμα θα εξάγει το τελικό αποτέλεσμα σε πραγματικό
αριθμό (double).
Το αποτέλεσμα στο Eclipse, για την εισαγωγή αρνητικού αλλά και θετικού ΜΟ, θα είναι
ως εξής:

public static void main(String[ ] args) {


int x, w;
double y, z;
System.out.print("Πληκτρολόγησε έναν double: ");
Scanner s = new Scanner(System.in);
y = s.nextDouble();
System.out.print("Πληκτρολόγησε έναν inetger: ");
x = s.nextInt();
z = (x+y)/2;
System.out.println("Το αποτέλεσμα είναι: "+z);
if(z<0){
w = (int) z;
System.out.println("Αρα ο ΜΟ είναι αρνητικός,οπότε πλέον το
αποτέλεσμα σε ακέραιο είναι: "+w);
}}

19
Παράδειγμα 2
Να κατασκευάσετε πρόγραμμα, το οποίο επιτελεί τις βασικές λειτουργίες μιας
αριθμομηχανής. Ειδικότερα το πρόγραμμα πρέπει να:
1. δέχεται από τον χρήστη 3 ΑΚΕΡΑΙΕΣ τιμές, με βάση τα 3 τελευταία ψηφία του
ΑΕΜ σας
2. ρωτάει τον χρήστη ποια πράξη να επιτελέσει, μέσω της εισαγωγής ενός
ακεραίου από το 1 έως το 4 και
3. επιτελεί:
a. πρόσθεση και εμφανίζει το αποτέλεσμα, αν επιλεγεί το 1
b. αφαίρεση και εμφανίζει το αποτέλεσμα, αν επιλεγεί το 2
c. πολ/σμό και εμφανίζει το αποτέλεσμα, αν επιλεγεί το 3
d. διαίρεση και εμφανίζει το αποτέλεσμα, αν επιλεγεί το 4
Ενδεικτικά: έστω φοιτητής με ΑΕΜ: 56127. Αυτός εισάγει τους αριθμούς 1,2,7 και τα
αποτελέσματα στην κονσόλα του Eclipse. Αν επιλέξει τη πράξη του πολλαπλασιασμού,
θα πρέπει να είναι ως εξής:

import java.util.Scanner;
public class ONOMAARXEIO_.JAVA {
public static void main(String[ ] args) {
int arithmos1,arithmos2,arithmos3,inputXristi,praxi;

//dexomai kai meta metatrepw tis eisodous se akeraious arithmus


System.out.println("Eisigage to 1o arithmo:");
Scanner x = new Scanner(System.in); //dilwsa enan scanner
arithmos1= x.nextInt();

System.out.println("Eisigage to 2o arithmo:");
arithmos2= x.nextInt();
System.out.println("Eisigage to 3o arithmo:");
arithmos3= x.nextInt();
System.out.println("Epelexe ti praxi thes na ginei:"

20
+ " 1:gia prosthesi"
+ " 2:gia afairesi"
+ " 3:gia pollaplasiasmo"
+ " 4:gia diairesi");
inputXristi= x.nextInt();

if (inputXristi==1){
praxi=arithmos1+arithmos2+arithmos3;
System.out.println("Epelexes prosthesi kai to apotelesma einai
"+praxi);
}

if (inputXristi==2) {
praxi=arithmos1-arithmos2-arithmos3;
System.out.println("Epelexes afairesi kai to apotelesma einai
"+praxi);
}

if (inputXristi==3) {
praxi=arithmos1*arithmos2*arithmos3;
System.out.println("Epelexes pollaplasiasmo kai to apotelesma
einai "+praxi);
}

if (inputXristi==4) {
praxi=arithmos1/arithmos2/arithmos3;
System.out.println("Epelexes diairesi kai to apotelesma einai
"+praxi);
}
//x.close(); //για να εξαφανιστεί το warning σχετικά με το
Scanner}}

Από το παραπάνω παράδειγμα παρατηρώ ότι:

21
22
Εργαστήριο 3- Πίνακες Δεδομένων και Δομές
Επανάληψης

Στόχος του 3ου εργαστήριου είναι η περεταίρω εξοικείωση με βασικές έννοιες του
προγραμματισμού και ειδικότερα των πινάκων δεδομένων καθώς και των
επαναλήψεων. Αρχικά, παρουσιάζονται εκτενώς οι έννοιες των πινάκων, όπως αυτές
γίνονται κατανοητές, μέσω της επιστήμης της Γραμμικής Άλγεβρας και μετέπειτα
αναλύονται υπό το πρίσμα της γλώσσας προγραμματισμού Java.

1. Πίνακας-Βασικές ιδιότητες

Ως πίνακας ορίζεται ένα αντικείμενο, το οποίο αποτελείται από σειρά αριθμημένων


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

Για κάθε πίνακα πάντα ορίζεται το πλήθος των γραμμών και στηλών (δηλαδή οι
διαστάσεις του). Στην συνέχεια ακολουθούν 2 παραδείγματα πινάκων.

Εικόνα 12 Π.χ. 3x1 πίνακας σημαίνει 3 γραμμές και 1 στήλη

Εικόνα 13 Π.χ. 3x3 πίνακας σημαίνει 3 γραμμές και 3 στήλες

Παρατηρούμε ότι, για τον ορθό ορισμό των διαστάσεων ενός πίνακα, χρησιμοποιείται η
εξής κωδικοποίηση: n x m, όπου n: γραμμές και m: στήλες.
Αντίστοιχα, αν επιθυμούμε την υπόδειξη συγκεκριμένου στοιχείου του εκάστοτε πίνακα,
τότε αναφερόμαστε σε αυτό ως: (Γραμμή, Στήλη), λ.χ. αν θέλουμε να υλοποιήσουμε μια
διαδικασία στο στοιχείο της 1ης στήλης και 3ης γραμμής ενός μονοδιάστατου πίνακα
τότε: (3,1).

23
Ακολουθεί σχηματική απεικόνιση των θέσεων των προγενέστερων πινάκων:

1,1
1,2
1,3

1,1 1,2 1,3


2,1 2,2 2,3
3,1 3,2 3,3

Ι. Πίνακας-Βασικές ιδιότητες στην επιστήμη των Υπολογιστών

Στο προηγούμενο εργαστήριο παρουσιάστηκε η δομή των μεταβλητών και δόθηκε


ιδιαίτερη έμφαση στην κατανόηση και ορθή δήλωσή τους. Ας υποθέσουμε ότι
επιθυμούμε να κατασκευάσουμε ένα πρόγραμμα, το οποίο περιλαμβάνει το πλήθος
των καταθέσεων του πληθυσμού της Ξάνθης. Σύμφωνα με την τελευταία καταγραφή
του 2011, ο πληθυσμός της έγκειται σε 71.657 κατοίκους. Με βάση τα δεδομένα του 2ου
εργαστηρίου, αρκεί η δήλωση 71.657 μεταβλητών, κάθε μια εκ των οποίων θα
αντιστοιχεί στις καταθέσεις ενός ατόμου. Επειδή οι καταθέσεις είναι αριθμοί με δεκαδικό
μέρος, οι μεταβλητές μου θα είναι τύπου double.

Τι συμβαίνει όταν θέλουμε να εισάγουμε ομαδοποιημένα την εκάστοτε τράπεζα, όπου


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

Με βάση τα παραπάνω, ορίζουμε ένα πίνακα, με τίτλο «Καταθέσεις», που θα περιέχει


όλα τα απαραίτητα στοιχεία. Όταν δηλώνουμε έναν πίνακα, επιβάλλεται να ορίζεται
ρητά ο τύπος των δεδομένων και η χωρητικότητα του πίνακα. Πιο αναλυτικά, στο
παράδειγμα που αναφέραμε, ο τύπος των δεδομένων (ίδιος τρόπος λειτουργίας και
σκέψης με την δήλωση τύπου μεταβλητών) θα είναι double, ενώ αντίστοιχα η
χωρητικότητα θα είναι 71.657 θέσεων. Αφού δηλώσω τον πίνακα πλέον σε μια ενιαία
δομή δεδομένων, για συλλογή και διαχείριση δεδομένων ιδίου τύπου, παράγω έναν νέο
πίνακα για κάθε τράπεζα, όπου βρίσκονται καταθέσεις ή αντίστοιχα ταξινομώ τον
πίνακα κατά αύξουσα ή φθίνουσα σειρά καταθέσεων, επιλύοντας τους προηγούμενους
προβληματισμούς.

ΔΗΛΩΣΗ ΠΙΝΑΚΑ= ΤΥΠΟΣ ΚΑΙ ΧΩΡΙΤΙΚΟΤΗΤΑ

Στην προγραμματιστική γλώσσα του εργαστηρίου (Java) αλλά και κατ’ επέκταση στα
περισσότερα υπολογιστικά συστήματα, η αρίθμηση των πινάκων ξεκινάει, αντί για το 1
από το 0, τόσο στην αναφορά σε γραμμές όσο και στήλες. Ειδικότερα, στα
προηγούμενα παραδείγματα πινάκων, αν θέλαμε να τα δηλώσουμε με βάση την
αναφορά που θα γινόταν στην Java, τότε:

24
0,0
1,0
2,0

0,0 0,1 0,2


1,0 1,1 1,2
2,0 2,1 2,2

 Για την δήλωση του τύπου ενός πίνακα (1ας στήλης):


Τύπος_Μεταβλητων_Πίνακα [ ] Ονομα_Πινακα ;

Τύπος_Μεταβλητων_Πίνακα[ ] Ονομα_Πινακα ;
char[ ] pinakasKeimenu;
int[ ] pinakasAkeraiwn;
double[ ][ ] pinakasPragmatikwn2D; //2D-array

ή πολλών στηλών (η πρώτη αγκύλη αντιπροσωπεύει πλήθος γραμμών, ενώ η


δεύτερη στηλών): Τύπος_Μεταβλητων[ ][ ] Ονομα_Πινακα ;

 Για την χωρητικότητα του πίνακα (δέσμευση χώρου) ακολουθούν παραδείγματα.


Χρησιμοποιείται η εντολή:
Ονομα_Πινακα= new Τύπος_Μεταβλητων_Πίνακα

pinakasKeimenu=new char[ ];

pinakasAkeraiwn=new int[ ];//δλδ πίνακας με 4 στοιχεια(0,1,2,3)

pinakasPragmatikwn2D = new double[ ][ ]; //2 Διαστάσεων πίνακας!

Παραδείγματα αρχικοποίησης τιμών σε πίνακες


Μονιαδιάστατος Πίνακας Δυσδιάστατος Πίνακας

arrayOfInts[0] =4; arrayOfDoubles2D[0][0]=4.2;


arrayOfInts[1]=33; arrayOfDoubles2D[0][1]=3.2;
arrayOfInts[2]=3; arrayOfDoubles2D[1][0]=2.1;

Πολλαπλές δηλώσεις τιμών σε πίνακες


int[ ] arrayOfInts= {4, 33, 3};
ή
int[ ] arrayOfInts = new int[ ] {4,33,3};

25
double[ ][ ] arrayOfDoubles2D = {{4.2, 3.2}, {2.1, 2.9}};
ή
double[ ][ ] arrayOfDoubles2D = new double[ ][ ]{{4.2, 3.2}, {2.1, 2.9}};

ΙΙ. Παραδείγματα με χρήση Πινάκων

Παράδειγμα 1. Δημιουργήστε ένα πίνακα μιας στήλης και 4ων γραμμών και
τοποθετήστε τυχαία ακέραιους αριθμούς, σε όλες τις διαθέσιμες θέσεις

public static void main(String[ ] args) {


int[ ] pinakas_Akeraiwn;
pinakas_Akeraiwn = new int[4];//εχω τα στοιχεια:0,1,2,3
pinakas_Akeraiwn[0]=1;
pinakas_Akeraiwn[1]=2;
pinakas_Akeraiwn[2]=3;
pinakas_Akeraiwn[3]=4;
System.out.println(pinakas_Akeraiwn[0]);
Παράδειγμα 2. Δημιουργήστε έναν πίνακα, που θα αποθηκεύει την αγγλική λέξη:
‘hmmy’ και θα εμφανίζει το τελευταίο της γράμμα στην οθόνη του χρήστη.

public static void main(String[ ] args) {


char[ ] pinakas_Keimenu;
pinakas_Keimenu = new char[4];//εχω τα στοιχεια:0,1,2,3
pinakas_Keimenu[0]='h';
pinakas_Keimenu[1]='m';
pinakas_Keimenu[2]='m';
pinakas_Keimenu[3]='y';
System.out.println(pinakas_Keimenu[3]);

26
Παράδειγμα 3. Δημιουργήστε ένα πίνακα μιας στήλης και 4ων γραμμών και
τοποθετήστε τυχαία πραγματικούς(double) αριθμούς, σε όλες τις διαθέσιμες θέσεις.

public static void main(String[ ] args) {


double[ ] pinakas_Pragmatikwn;
pinakas_Pragmatikwn = new double[4];
pinakas_Pragmatikwn[0]=1.5;
pinakas_Pragmatikwn[1]=2.45;
pinakas_Pragmatikwn[2]=3.6;
pinakas_Pragmatikwn[3]=4.34;
System.out.println(pinakas_Pragmatikwn[1]);
}}
Παράδειγμα 4. Να κατασκευαστεί ο πίνακας της παρακάτω εικόνας:

0 1
-1 -2
4 5
Με βάση την προηγούμενη ανάλυση, ισχύει ότι:

ΣΤΟΙΧΕΙΑ ΠΙΝΑΚΑ

0,0 0,1

1,0 1,1

2,0 2,1

Αντίστοιχα, παρατηρούμε ότι όλα τα δεδομένα εντός του πίνακα είναι ακέραιοι αριθμοί,
συνεπώς έχω έναν πίνακα 3 x 2 διαστάσεων ακεραίου(int:integer) τύπου.
public static void main(String[ ]
args) {
int[ ][ ] A;
A = new int[3][2];
A[0][0]=0;
A[1][0]=-1;
A[2][0]=4;
A[0][1]=1;
A[1][1]=-2;
A[2][1]=5;
System.out.println(A[1][0]);
}}

27
2. Δομές Επαναλήψεων

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

Για (for), Όσο (while), Εφόσον (DoWhile)

Η γενική σύνταξη της for είναι:

int i;
for (i=0; i<=5; i++) {
//εκτέλεσε των κώδικα 6 φορές (από 0-5)
}

Η γενική σύνταξη της while είναι:


while (λογική συνθήκη) {
//εκτέλεσε των κώδικα όσο η συνθήκη είναι αληθής
}

Η γενική σύνταξη της DoWhile είναι:


do {
// εκτέλεσε των κώδικα όσο η συνθήκη είναι αληθής
// αλλά τουλάχιστον μία φορά γιατί ο έλεγχος γίνεται στο τέλος
} while (λογική συνθήκη) ;

Οι τρείς παραπάνω υλοποιήσεις έχουν ταυτόσημη σημασία και χρήση. Ειδικότερα, θα


αναλυθεί η εντολή for :

Πλήθος Τιμή i Έλεγχος Συνθήκης Εκτέλεση εντολών εντός


επανάληψης (𝒊 ≤ 𝟓) {}
1η 0 NAI( 0 ≤ 5) ΝΑΙ
2η 0+1=1 NAI (1 ≤ 5) NAI
3η 1+1=2 NAI (2 ≤ 5) NAI
4η 2+1=3 NAI (3 ≤ 5) NAI
5η 3+1=4 NAI (4 ≤ 5) NAI
6η 4+1=5 NAI (5 ≤ 5) NAI
7η 5+1=6 ΟΧΙ (6 ≤ 5) ΟΧΙ
(τέλος δομής επανάληψης)

Από το παραπάνω παράδειγμα, παρατηρώ ότι κάθε δομή επανάληψης:

28
1. Έχει μια αρχική τιμή (αρχικοποίηση) για την μεταβλητή i, καθώς και ότι ΠΑΝΤΑ
είναι ακέραιου τύπου.
2. Κάθε δομή επανάληψης απαιτεί ένα βήμα αύξησης (i=i+1), αλλιώς στο πίνακα
δεν θα μπορούσε να προχωρήσει η επαναληπτική διαδικασία περαιτέρω της 1ης
επανάληψης (θα ίσχυε πάντα ( 0 ≤ 5).
3. Έχει μια λογική συνθήκη που ελέγχει και καθορίζει το πλήθος των
επαναλήψεων, συνεπώς και την συνθήκη τερματισμού της επαναληπτικής
διαδικασίας.
Σε αυτό το σημείο, αξίζει να τονιστεί ότι τόσο στην for, όσο και στην while, η λογική
συνθήκη ελέγχεται στην αρχή της υλοποίησης, συνεπώς δεν είναι απαραίτητο να
επιτελεστεί έστω και μια επανάληψη. Αυτό δεν ισχύει για την εντολή DoWhile επειδή,
αφού η λογική συνθήκη ελέγχεται στο τέλος της υλοποίησης, ακόμα και αν δεν ισχύει η
συνθήκη, ΠΑΝΤΑ ΘΑ ΕΚΤΕΛΕΙΤΑΙ ΤΟΥΛΑΧΙΣΤΟΝ 1 ΦΟΡΑ.
Τέλος, σε περίπτωση που κατά το εργαστήριο δεν ορίσαμε ορθώς το βήμα αύξησης ή
γενικότερα αντιμετωπίσαμε κάποια δυσχέρεια που οδηγεί στην μη παύση της
επαναληπτικής διαδικασίας, το φαινόμενο ονομάζεται «ατέρμων βρόγχος». Το
πρόγραμμά θα τρέχει διαρκώς ‘’κολλημένο’’ σε μια επανάληψη, μέχρις ότου να γεμίσει
η μνήμη του υπολογιστή μας, όπου ακολουθεί αυτόματη επανεκκίνησή του. Στο
εργαλείο Eclipse επιβάλλεται να πατηθεί το κουμπί Terminate, όπως παρουσιάζεται
στην ακόλουθη εικόνα:

Ι. Ανάθεση τυχαίων Τιμών

Στα πλαίσια του εργαστηρίου, για την αυτόματη συμπλήρωση των στοιχείων των
πινάκων, χρησιμοποιείται εντολή ανάθεσης τυχαίων τιμών. Πιο αναλυτικά, στην
γλώσσα Java ονομάζεται Math.random() και έχει την δυνατότητα να παράγει τυχαίες
ΠΡΑΓΜΑΤΙΚΕΣ -και ΠΑΝΤΑ ΘΕΤΙΚΕΣ- τιμές, από το 0 έως το 1. Όταν δηλώνουμε μια
μεταβλητή ή στοιχείο πίνακα να αρχικοποιήσει με τυχαίες τιμές, αυτή η μεταβλητή
επιβάλλεται να είναι τύπου double (πραγματικές τιμές).

Επειδή η εντολή αυτή παράγει MONO πραγματικές τιμές, όταν απαιτείται να


δημιουργηθούν τυχαίες ακέραιες τιμές, τότε κάνουμε CASTING και πολλαπλασιάζουμε
την ζητούμενη ποσότητα με ένα αριθμό (συνήθως το 10).

Π.χ. int tixaios_akeraios = (int) (Math.random()*10);

29
3. Παραδείγματα Δομών Επανάληψης

Παράδειγμα 1. Να κατασκευαστεί ένα πρόγραμμα, το οποίο θα εμφανίζει στην οθόνη


το πλήθος των (ακεραίων) αριθμών, από το 1 έως το 100 (1,2,3,4,…,100) .

Με χρήση της εντολής Για (for) :


public static void main(String[ ] args) {
for (int i = 1; i < 101; i++) {
System.out.println(i);
}}}

Με χρήση της εντολής Όσο (while) :


public static void main(String[ ] args) {
int i=0;
while(i<100){
i=i+1;
System.out.println(i);
}}}

Με χρήση της εντολής Εφόσον (Dowhile) :


public static void main(String[ ] args) {
int i=0;
do{
i=i+1;
System.out.println(i);
}while(i<100);
}}

Παράδειγμα 2. Να υλοποιηθεί πρόγραμμα, το οποίο συμπληρώνει ένα δισδιάστατο


πίνακα 7 x 4 με τυχαίες ακέραιες τιμές και το εμφανίζει στην οθόνη του χρήστη.
public static void main(String[ ] args) {
int i, j;
int pinakas_Akeraiwn[][]=new int[7][4];
//γεμίζω τυχαία τους πίνακες
for (i=0; i<pinakas_Akeraiwn.length; i++) {
for (j=0; j<pinakas_Akeraiwn[i].length; j++){
pinakas_Akeraiwn[i][j] = (int) (Math.random()*100);
}}

30
//εκτυπώνω τα στοιχεία της κάθε γραμμής-σειράς
for (i=0; i<pinakas_Akeraiwn.length; i++) {
System.out.println("Grammi Akeraiou Pinaka: "+i+" :");
for (j=0; j<pinakas_Akeraiwn[i].length; j++) {
System.out.println(pinakas_Akeraiwn[i][j]);
}
System.out.println("");
}}}

Παράδειγμα 3. Να υλοποιηθεί πρόγραμμα, το οποίο συμπληρώνει ένα δισδιάστατο


πίνακα 7 x 4 με τυχαίες πραγματικές τιμές και το εμφανίζει στην οθόνη του χρήστη.
public static void main(String[ ] args) {
int i, j;
double pinakas_Pragmatikwn[][]=new double[7][4];
//γεμίζω τυχαία-γινόμενο 2 αριθμών- τους πίνακες
for (i=0; i<pinakas_Pragmatikwn.length; i++) {
for (j=0; j<pinakas_Pragmatikwn[i].length; j++){
pinakas_Pragmatikwn[i][j] = Math.random();
}}
//εκτυπώνω τα στοιχεία της κάθε γραμμής-σειράς
for (i=0; i<pinakas_Pragmatikwn.length; i++) {
System.out.println("Grammi Pragmatikou Pinaka: "+i+" :");
for (j=0; j<pinakas_Pragmatikwn[i].length; j++) {
System.out.print(pinakas_Pragmatikwn[i][j]+"\t");
}
System.out.println("");
}}}

Παράδειγμα 4. Να δημιουργηθεί πρόγραμμα, το οποίο:


A. να συμπληρώνει ένα μονοδιάστατο πίνακα 5 θέσεων με τυχαίες τιμές της
αρεσκείας σας
B. να τον εμφανίζει στην οθόνη,
C. να υπολογίζει το άθροισμα των τιμών και να το εμφανίζει στην οθόνη του
χρήστη
D. να βρίσκει τον ελάχιστο (min) αριθμό και να τον εμφανίζει στην οθόνη του
χρήστη

31
public class ONOMAARXEIO_.JAVA {
public static void main(String[ ] args) {
int i=0, j=0, k=0 ;
double sum=0,min;
double[] pinakas = new double[4]; //στοιχεια: 0,1,2,3
// (A)αρχικοποίηση πινακα
do {
pinakas[0]= Math.random()*100;//τυχαία τιμή
pinakas[1]= Math.random()*100;//τυχαία τιμή
pinakas[2]= Math.random()*100;//τυχαία τιμή
pinakas[3]= Math.random()*100;//τυχαία τιμή
i=i+1;
} while (i<pinakas.length);
//(B)εκτύπωση στοιχείων πίνακα
System.out.println("Τα στοιχεία του πίνακα είναι τα εξής: ");
for (int l = 0; l < pinakas.length; l++) { //δηλώνω μέσα στην
εντολή το τύπο της μεταβλητής l
System.out.println(pinakas[l]);
}
//(C)υπολογισμός αθροίσματος
while (j<pinakas.length) {
sum = sum +pinakas[j];
j=j+1;
}
System.out.println("To αθροισμα των στοιχείων του πίνακα είναι
το εξής: "+ sum);
//(D)υπολογισμός ελάχιστου στοιχείου στον πίνακα
min=pinakas[0]; //δηλώνω τυχαία ότι το 1ο στοιχείο του πίνακα
είναι ο μικρότερος αριθμός και τον συγκρίνω με τους υπολοίπους
for (k=0;k<pinakas.length;k++)
{
if(pinakas[k]<min){
min=pinakas[k];
}
}
System.out.println("O ελάχιστος αριθμός στην "+(k+1)
+"η επαναληψη, δηλαδή ο Min = " + min);}}}}

32
33

View publication stats

You might also like