Εισαγωγή στον Προγραμματισμό Ακαδημαϊκό έτος 2010/2011 Επιμέλεια Ξενοφών Βασιλάκος
Περιεχόμενα Φροντιστηρίου A. Πρωταρχικοί τύποι B. Είσοδος/ Έξοδος C. Πράξεις 2
Δήλωση / Αρχικοποίηση / Εκχώρηση A. Πρωταρχικοί Τύποι 3
Δήλωση Γενικά Δήλωση: type varname; byte bb; // 8 bits short s; // 16 bits int i; // 32 bits long l; // 64 bits float fl; // 32 bits double dd; // 64 bits boolean b; // 8 bits char c; // 16 bits 4
Δήλωση-Αρχικοποίηση Δήλωση με ταυτόχρονη εκχώρηση (αρχικοποίηση): type varname = κάποια σταθερά ή παράσταση int num = 563; boolean psema = false; 5
Εκχώρηση Εκχώρηση: varname = κάποια σταθερά ή παράσταση bb = 15; s = 2225; i = 5 * s; l = 77L; fl = 5.4f; dd = 5.4 * fl; b = true && false; c = 5; c = 5 ; // αυτό διαφέρει από το παραπάνω.. Γιατί; 6
Δήλωση-Εκχώρηση 1/3 Δήλωση short mysrt; O short έχει μήκος 16 bit στη java ωστόσο πιάνει ολόκληρη τη θέση μήκους 32 δυφίων.. Αν είχαμε πίνακα από short (short[])μεταβλητές, τότε θα σώζαμε μνήμη καθότι σε μία θέση θα αντιστοιχούσαν 2 short μεταβλητές H μεταβλητή mysrt είναι πλέον συνώνυμο της θέσης 3 στη μνήμη Διεύθυν ση 0 1 2 3 4 5 6 7 8 9 10 11 12 Μνήμη Περιεχόμενο (λέξη 32 bits) 7
Δήλωση-Εκχώρηση 2/3 Δήλωση short mysrt; O short έχει μήκος 16 bit στη java ωστόσο πιάνει ολόκληρη τη θέση μήκους 32 δυφίων.. Αν είχαμε πίνακα από short (short[])μεταβλητές, τότε θα σώζαμε μνήμη καθότι σε μία θέση θα αντιστοιχούσαν 2 short μεταβλητές H μεταβλητή mysrt είναι πλέον συνώνυμο της θέσης 3 στη μνήμη Εκχώρηση σταθεράς mysrt = 5; Διεύθυν ση 0 1 2 3 4 5 6 7 8 9 10 11 12 Μνήμη Περιεχόμενο (λέξη 32 bits) 000..0101 8
Δήλωση-Εκχώρηση 3/3 Δήλωση short mysrt; Μνήμη O short έχει μήκος 16 bit στη java, ωστόσο πιάνει ολόκληρη τη θέση μήκους 32 δυφίων.. Αν είχαμε πίνακα από short (short[])μεταβλητές, τότε θα σώζαμε μνήμη καθότι σε μία θέση θα αντιστοιχούσαν 2 short μεταβλητές H μεταβλητή mysrt είναι πλέον συνώνυμο της θέσης 3 στη μνήμη Εκχώρηση σταθεράς mysrt = 5; Εκχώρηση παράστασης mysrt = 5.7 * mysrt; τι τύπου είναι το αποτέλεσμα; άρα είναι συντακτικά λαθεμένη η παραπάνω εντολή. Διεύθυν ση 0 1 2 3 4 5 6 7 8 9 10 11 12 Περιεχόμενο (λέξη 32 bits) 00 0...1. 9
Εισαγωγή πακέτου java.io.*; Χειρισμός IOException Παραδείγματα Ι/Ο Β. Είσοδος / Έξοδος 10
I/O Input / Output 1/2 Γενικά I/O: Input / Output Με τον όρο Ι/Ο αναφερόμαστε στην Είσοδο και Έξοδο δεδομένων από το πρόγραμμα σας Παραδείγματα Εξόδου Αρχείο κάποιο άλλο πρόγραμμα στον ίδιο Η/Υ ή κάπου αλλού στο δίκτυο Οθόνη ή Εκτυπωτή ή Παραδείγματα Εισόδου Αρχείο Κάποιο άλλο πρόγραμμα στον ίδιο Η/Υ ή κάπου αλλού στο δίκτυο Από πληκτρολόγιο ή ποντίκι ή.. 11
I/O Input / Output 2/2 Ροή Με Δεδομένα Στη java ανοίγουμε μια ροή με δεδομένα προς κάπου Πχ ένα αντικείμενο της κλάσης FileOutputStream Χρησιμοποιείται για ροή εγγραφής σε κάποιο αρχείο του δίσκου Εμείς θα δείξουμε εδώ το βασικό Ι/Ο System.in: από το πληκτρολόγιο προς το πρόγραμμα Default Input (προκαθορισμένη είσοδος) System.out: από το πρόγραμμα προς την οθόνη Default Output (Προκαθορισμένη έξοδος) System.err: Default Error Output Για μηνύματα λάθους» Προκαθορισμένη έξοδος είναι και πάλι η οθόνη Σημ: Εδώ κάνουμε μια απλή εισαγωγή στο Ι/Ο. Λεπτομέρειες για τις ροές σε απόμενα μαθήματα του οδηγού σπουδών πάνω στο προγραμματισμό ή ψάξτε αν ενδιαφέρεστε και από μόνοι σας. 12
I/O Input / Output 1/2 Βήμα 1: εισαγωγή βιβλιοθήκης στο κώδικα 1. import java.io.*;
I/O Input / Output 2/2 Βήμα 2: Δήλωση ρήψης εξαίρεσης από τη μέθοδο που περιλαμβάνει το κώδικα I/O 1. Import java.io.*; 2. public class SomeClass{ 3. public static void main(string[] args) throws IOException { 4. }//main() 5. }//SomeClass
Ι/Ο με παραδείγματα 1/2 1. int c = System.in.read(); // Διαβάζει και επιστρέφει το (σε μορφή int) το // επόμενο byte που μόλις διαβάστηκε από το πληκτρολόγιο 2. System.out.print(c); // Τυπώνει στην οθόνη την αριθμητική τιμή του byte που μόλις // διαβάστηκε πριν από το πληκτρολόγιο 3. System.out.print((char)c); // Τυπώνει στην οθόνη ως χαρακτήρα αυτό που μόλις // διαβάστηκε πριν από το πληκτρολόγιο (ερμηνεύει τον αριθμό ως τακτικό // αριθμό κάποιου χαρακτήρα). // Αν είναι λατινικός χαρακτήρας όλα καλά.. Για τους άλλους υπάρχει ζήτημα // κωδικοποίησης και το παραπάνω δεν θα παίξει σωστά 4. System.err.println( Ένα κείμενο @default error output ;-) ); 5. System.out.print( Ένας αριθμός: + 6 + \n );
Ι/Ο με παραδείγματα 2/2 6. System.out.print( Ένας αριθμός: + 6 + 17 + \n ); //Τι τυπώνει; 7. System.out.print( Ένας αριθμός: + (6 + 17) + \n ); //Ποια η διαφορά από πρίν; 8. System.out.print( Δύο αριθμοί τυπωμένοι με κενό ανάμεσα τους: + 6 + + 17 + \n );
Τελεστές και προτεραιότητες αυτών Παραδείγματα πράξεων και καλουπωμάτων C. Πράξεις 17
Αριθμητικοί Τελεστές Αριθμητικές πράξεις Τελεστές + ή - * ή / ή % Ο % επιστρέφει το υπόλοιπο μιας διαίρεσης (mod) Προτεραιότητες Όπως και στα μαθηματικά Προηγούνται τα «/» και «*» και «%» Έπονται τα +/- Μεταξύ ισοδύναμων προτεραιοτήτων προηγείται ότι είναι πιο αριστερά: Άσκηση: 1/2 + 5*8 + 2.5/(3+5)%5 1/(2 + 5)*8 + 2.5/3+5%5 Γιατί; 18
Αριθμητικοί Τελεστές Αριθμητικές πράξεις Άσκηση: 1/2 + 5*8 + 2.5/(3+5)%5 System.out.println(1/2); System.out.println(1/2 + 5*8); System.out.println(2.5/(3+5)); System.out.println(2.5/(3+5)%5); System.out.println(1/2 + 5*8 + 2.5/(3+5)%5); 0 40 0.3125 0.3125 40.3125 19
Παραδείγματα Πράξεων 1/8 1. byte b = 887; // Λαθος! εκτός range [- 128,127] 2. byte b = 111; // σωστό 3. b = (byte) 887; 4. System.out.println("0.0 b = " + b + "\n"); // αντιστοιχα για short σε σχέση με το εύρος τιμών που θα περάσουμε 5. int i = 887; 6. System.out.println("1.0 i = " + i + "\n"); 7. System.out.println("\t1.1 i / 10 = " + i/10 + "\n"); 20
Παραδείγματα Πράξεων 2/8 8. System.out.println("\t1.2 i % 10 = " + i%10 + "\n"); 9. System.out.println("\t1.3 (float)i % 10 = " + (float)i/10 + "\n"); 10.char c ; 11.c = 'α'; 12.System.out.println("2.0 c = " + c + "\n"); 13.// short srt = c; Λαθος! αν και ειναι // και οι δύο 16 bit, ο // char καταλαμβάνει 32 bit απο τα οποία // χρησιμοποιεί μόνο 16 21
Παραδείγματα Πράξεων 3/8 13.i = c * 'φ' / 887; 14.System.out.println("\t2.1 i = c * 'φ' / 887 = " + i + "\n"); 15.double d = (double) c * 'φ' / 887; 16.System.out.println("4.0 d = (double) c * 'φ' / 887 = " + d + "\n"); 22
Παραδείγματα Πράξεων 18.float f = 123; // ok, γιατι; 19.System.out.println("5.0 f = " + f + "\n"); 20.//f = 123.0; // οχι ok, γιατι; 21.f = 123.0f; // ok 22.f = (float)123.0;// ok, ποιά η διαφορά απο πριν; σημ: παίρνει και παραπάνω χρόνο 23.System.out.println("6.0 f = (float)123.0 ή 123.0f = " + f + "\n"); 4/8 24.// f = d / 125; // λάθος, γιατι; 25.// f = d / 125f; // λάθος, γιατι; 26.// f = d / 125.0; // λάθος, γιατι; 27.// f = (float)d / 125.0; // λάθος, γιατι; 23
Παραδείγματα Πράξεων 5 /8 28.d = (d / 125); // Σωστό, αν και // διαιρείται με int, γιατι; 29.System.out.println("\t6.1 d = (d / 125) = " + d + "\n"); 30.f = (float)(d / 125.0); // Σωστό, γιατι; 31.System.out.println("\t\t6.1.1 f = (float)(d / 125) = " + f + "\n"); 32.f = (int)(32000*d / 125.0); // Σωστή σύνταξη, λαθεμένο αποτέλεσμα, // γιατι; Ποιό το αποτέλεσμα και γιατί; 33.System.out.println("\t\t6.2.0 f = (int)(d / 125.0) = " + f + "\n");
Παραδείγματα Πράξεων 6 /8 34.f = (short)(32000*d / 125.0); // Ποιό το // αποτέλεσμα και γιατί διαφέρει απο το // προηγούμενο; 35.System.out.println("\t\t6.2.1 f = (short)(32000*d / 125.0) = " + f + "\n"); 36.d = (byte)(32000*d / 125.0); // Ποιό το // αποτέλεσμα και γιατί διαφέρει απο το // προηγούμενο; 37.System.out.println("\t\t6.2.2 d = (byte)(32000*d / 125.0) = " + d + "\n");
Παραδείγματα Πράξεων 7 /8 38.d = (32000*d / 125.0); // Σωστό αποτέλεσμα, // γιατι; Γιατί διαφέρει απο το // προηγούμενο; 39.System.out.println("\t\t6.2.3 d = (32000*d / 125.0) = " + d + "\n"); 40.f = (float)(32000*d / 125.0); // Ποιό το // αποτέλεσμα και γιατί διαφέρει απο το // προηγούμενο; 41.System.out.println("\t\t6.2.4 f = (float)((32000*d / 125.0) = " + f + "\n"); 42.i = 200 % 121; // γιατι είναι λάθος το i = 200.0 % 120; 43.System.out.println("7.0 i = 200 % 120 = " + i + "\n");
Παραδείγματα Πράξεων 8/8 44.double somedbl = (88-i)/i*100; // ποιά η // διαφορά απο το 88-i/i*100 ή το 88- // i/(i*100); 45.System.out.println("\t7.1 somedbl = (88- i)/i*100 = " + somedbl + "\n"); 46.System.in.read(); 47.someDbl =(double)(88-i)/i*100; 48.System.out.println("\t7.2 somedbl = (double)(88-i)/i*100 = " + somedbl + "\n"); 49.System.in.read(); 50.someDbl =(int)((88-i)/(double)(i)*100); 51.System.out.println("\t7.3 somedbl =(int)((88-i)/(double)(i)*100) = " + somedbl + "\n");
Τι Ακούσατε Σήμερα A. Πρωταρχικοί τύποι Δήλωση Αρχικοποίηση Εκχώρηση B. Είσοδος/ Έξοδος C. Πράξεις Προτεραιότητα Πράξεων Πράξεις Μεταξύ Ακεραίων Και Πραγματικών 28
ΤΕΛΟΣ!