ÒØÓÐ ÒØÓÐ Ø Java Απλές εντολές: έκφραση + ; έκφραση; Σύνθετες(block)εντολές: nεντολέςμέσασε {,n 0. { εντολή_1 εντολή_2... εντολή_n Οι σύνθετες εντολές είναι συντακτικά ισοδύναμες με τις απλές. Κάποιες από τις εντολές i μπορεί να είναι σύνθετες.
È Ö Ø Ö Ø ÒØÓÐ Ò Οι αντίστοιχες εκφράσεις στις εντολές ανάθεσης σχηματίζονται με χρήση του δυαδικού τελεστή ανάθεσης = Η έκφραση ανάθεσης παίρνει την τιμή του δεξιού μέλους. Η σύνθετη έκφραση: (x = 6) + (y = 7) αναθέτειτιμέςστιςμτβ x, yκαιταυτόχροναέχειτηντιμή13. Δυνατότητα για πολλαπλές αναθέσεις: n1 = n2 = n3 = 0; Ο τελεστής ανάθεσης υπολογίζεται απο δεξιά προς αριστερά. Ó Ó» ÜÓ Ó Είσοδος: η μετακίνηση δεδομένων από μονάδες εισόδου στη μνήμη. Εξοδος: η μετακίνηση δεδομένων από τη μνήμη σε μονάδες εξόδου. standard input ΠΡΟΓΡΑΜΜΑ standard output Standard input: το πληκτρολόγιο(στη Java: System.in) Standard output: η οθόνη(στη Java: System.out)
Standard output Εκτύπωση με δυο τρόπους: System.out.println(έκφραση) System.out.print(έκφραση) Παράδειγμα: System.out.print("Hell"); System.out.print("o, "); System.out.println("world"); ισοδ. System.out.println("Hello, world"); ¼ Standard input Ñ ÓÙÖ Ø ÖÕ Ò Scanner Ñ ÒÓÑ ØÛ input ÔÓÙ ÙÒ Ø Ñ ØÓ System.in Ô Ü Ö Þ Ø Ø ÓÑ Ò ÓÙ Scanner input = new Scanner(System.in); À Ò ÒÛ ÓÑ ÒÛÒ Ü ÖØ Ø Ô ØÓÒ Ø ÔÓ ØÓÙ Ò Ø Ñ Ø ÐÐ Ð Ñ ÓÙº Ⱥպ int i = input.nextint(); double x = input.nextdouble(); String s = input.nextline(); ÈÐ ÖÓ ÓÖ Õ Ø Ñ ØÓÒ Scanner Ø Ñ ÓÙ ØÓÙ ÙÔ ÖÕÓÙÒ Ø ÐÐ Ð Ð Ó ÔÓÙ ÔÖ Ô Ò ÙÑÔ Ö Ð Ó Ò Ø Ò ÖÕ ØÓÙ ÖÕ ÓÙ Ñ Ø Ò Ð ØÓÙ ÔÖÓ Ö ÑÑ ØÓº import java.util.*; public class ClassName { //...
Λεπτά σε ώρες import java.util.*; public class Min2Hours { public static void main(string args[]) { Scanner input = new Scanner(System.in); System.out.print("ÉÖ ÒÓ Ð ÔØ? "); int totalminutes = input. nextint(); int hours, minutes; hours = totalminutes / 60; minutes = totalminutes % 60; System.out.print(totalMinutes); System.out.println("min Ò " + hours + "hr " + minutes + "min"); ¾ Ó Ó» ÜÓ Ó String import java.util.*; public class Greetings { public static void main(string args[]) { Scanner input = new Scanner(System.in); System.out.println("Πως σε λένε?"); String user = input.nextline(); System.out.println("Γειά σου " + user);
ÈÖÓ Ö ÑÑ Ø Ø ôñ Ø 1. Ανάγνωση από standard είσοδο System. out. printl(μήνυμα εισόδου); μεταβλητή = input. nextint(); 2. Εκτέλεση πράξης και ανάθεση ήισοδύναμα 3.Αύξησηκατά1 μεταβλητή = μεταβλητή έκφραση μεταβλητή = έκφραση x++;ισοδ. ++x;ισοδ. x += 1;ισοδ. x = x + 1; 4.Μείωσηκατά1 y--;ισοδ. --y;ισοδ. y -= 1;ισοδ. y = y - 1; È Ö Ñ public class Confusion { public static void main(string[] args) { int j, i = 10; System.out.println("i = " + i); //10 j = i++; System.out.println("(j = i++) = " + j); //10 System.out.println("i = " + i); // 11 j = ++i; System.out.println("(j = ++i) = " + j); //12 System.out.println("i = " + i); //12
ÈÖÓØ Ö Ø Ø Ö ÙÔÓÐÓ ÑÓ Παρενθέσεις Μονομελείςτελεστές,π.χ. ++ -- + -!κ.λ.π. Αριθμητικοί τελεστές, πρώτα * / % και μετά +, - Τελεστές σύγκρισης, πρώτα > < >= <= και μετά ==!= Λογικοί τελεστές, πρώτα η σύζευξη και μετά η διάζευξη. Τελεστέςανάθεσης,π.χ. = += *=κ.λ.π. Σε φθίνουσα σειρά προτεραιότητας. Συσχετίζονταιαπόαρίστεραπρόςδεξιά(ΕΚΤΟΣ: ) ÒØÓÐ Ð ÕÓÙ Αλλάζουν τη ροή εκτέλεσης των εντολών προγράμματος. Χωρίς τη χρήση εντολών ελέγχου, η εκτέλεση είναι σειριακή από την αρχή προς το τέλος του προγράμματος. Οι εντολές ελέγχου επιτρέπουν: Εκτέλεση υπό συνθήκη: if Επαναληπτική εκτέλεση: while, for.
Ø Ð ÙÔ ÙÒ ÒØÓÐ if-else true ΣΥΝΘΗΚΗ false if (λογική συνθήκη) εντολή S1 else εντολή S2 S1 S2 Οι εντολή S1 εκτελείται όταν αληθεύει η λογική συνθήκη. Στην αντίθετη περίπτωση ε- κτελείταιηεντολή S2. Οι S1, S2 μπορείναείναιαπλές ή σύνθετες(block) εντολές. Ø Ð ÙÔ ÙÒ ÒØÓÐ if ΣΥΝΘΗΚΗ true S false Οταν δεν υπάρχει κλάδος S2, παίρνει τη μορφή: if (λογική συνθήκη) εντολή S
È Ö Ñ Πρόβλημα: Υπολόγισε την απόλυτη τιμή x του x και αποθήκευσε το αποτέλεσμα στη μεταβλητή abs. Τρείς ισοδύναμες λύσεις ΛύσηΑ ΛύσηΒ ΛύσηΓ if (x >=0) { abs = x; if (x < 0) { abs = -x; abs = x; if (x < 0) { abs = -x; if (x >=0) { abs = x; else { abs = -x; ¼ Ø Ü Ö ÑôÒ Πρόβλημα Διάβασε3αριθμούς a, bκαι cκαιδιάταξέτουςέτσιώστε a b c. Ανάλυση Ενας μη προφανής(αλλά κομψός) αλγόριθμος: 1.Εναλλαγήτων aκαι b,ανχρειάζεται,έτσιώστε a b. 2.Εναλλαγήτων bκαι c,ανχρειάζεται,έτσιώστε b c.(τώραη μεταβλητή c έχει την μεγαλύτερη τιμή, αλλά τα a, b δεν είναι κατ ανάγκη διατεταγμένα). 3.Εναλλαγήτων aκαι b,ανχρειάζεται,έτσιώστε a b. Παράδειγμα:Τισυμβαίνειγια a = 3, b = 2, c = 1?
Ø Ü Ö ÑôÒ ÙÒ Õºµ Εναλλαγήτιμώντωνμτβ x, yμεχρήσητηςβοηθητικήςμτβ temp 3. x = temp temp 1. temp = y x y 2. y = x ¾ Ø Ü Ö ÑôÒ ÙÒ Õºµ import java.util.*; public class Sort3 { public static void main(string args[]) { Scanner input = new Scanner(System.in); int a = input.nextint(); int b = input.nextint(); int c = input.nextint(); if (b < a) {int temp = b; b = a; a = temp; if (c < b) {int temp = c; c = b; b = temp; if (b < a) {int temp = b; b = a; a = temp; System.out.println(a + " " + b + " " + c);
³ Ð ÕÓ ØÓÙ ØÓÙ //... System.out.print("Dwse etos? "); int year = input.nextint(); boolean isleapyear = ( year%4==0)&&( year%100!=0) ( year%400==0); System.out.print("To " + year + " "); if (isleapyear) System.out.print("einai"); else System.out.print("den einai"); System.out.println(" disekto"); //... ³ Ð ÕÓ ØÓÙ ØÓÙ Και μ ένα διαφορετικό if //... System.out.print("Dwse etos? "); int year = input.nextint(); boolean isleapyear = ( year%4==0)&&( year%100!=0) ( year%400==0); System.out.print("To " + year + " "); if (!isleapyear) System.out.print("den"); System.out.println("einai disekto"); //...
ÈÖÓ Ö ÑÑ Ø Ø ôñ Ø Ñ ÐÓ Ö Για boolean isleapyear, iseven και int n αντί της if (isleapyear == true)... προτιμάται η if (isleapyear)... αντί της if (n%2 == 0) iseven = true; else iseven = false; προτιμάται η iseven = (n%2 == 0); Ë Ò Ø if if (συνθήκη1) εντολή 1 else if (συνθήκη2) εντολή 2 else if (συνθήκη3) εντολή 3... else εντολή e συνθήκη i: boolean έκφραση. εντολή i:εκτελείταιότανησυνθήκη iείναι true. εντολή e: εκτελείται όταν δεν αληθεύει καμμία συνθήκη i.
Ë Ò Ø if ÙÒ Õºµ import java.util.*; public class Sign { public static void main(string args[]) { Scanner input = new Scanner(System.in); int n = input.nextint(); if (n > 0) System.out.println("+"); else if (n == 0) System.out.println(0); else System.out.println("-"); Ç ÙÔÓ Ø Ø Ð Ø?: Χρήσιμη συντομογραφία ο τριμελής υποθετικός τελεστής συνθήκη? έκφραση1 : έκφραση2 ισοδύναμαητιμήτηςέκφρασης?:θαδινότανστημτβ value: if (συνθήκη) value = έκφραση1; else value = έκφραση2; Παραδείγματα: max = (x > y)? x : y; System.out.println(" Õ "+n+" Ñ"+(n==1?" ":"Ó "));
À ÒØÓÐ while while (λογική συνθήκη) εντολή S false ΣΥΝΘΗΚΗ S true À Ø Ð ØÛÒ ÒØÓÐôÒ S Ô Ò Ð Ñ Ò ¹ Ø Ó Ð ÄË ÐÓ ÙÒ µº À Ø Ñ Ð Ý Ù µ Ø ÄË ÔÖ Ô Ò Ò ÑÔÓÖ Ò ÙÔÓÐÓ Ø ÔÖ Ò Ø Ò Ø Ð Ø while к ÄË Ò Ò ÓÖ Ñ Ò µ Ò Ñ Ø ÐÐ Ø Ñ ÔÓ Ô Ø Ò¹ ØÓÐ S ÓÖ Ø Ð Ø ÄË Ò ÐÐ Ü º ½¼¼ ÖÓ Ñ Ý ÛÒ Ö ÓÙ Γιατονακέραιο n: Εύρεση τελευταίου ψηφίου: n%10(π.χ. 1985%10 5). Αποκοπή τελευταίου ψηφίου: n/10(π.χ. 1985/10 198). int n = input.nextint(); int dsum = 0; while (n > 0) { dsum += n % 10; n /= 10; System.out.println(dsum);
Ø ÖÑÓÒ Ô Ò Ð Ý Υπάρχει περίπτωση μια επαναληπτική εντολή να μην τερματίζει. Παράδειγμα: while (n >= 0) { dsum += n%10; n /= 10; Οτανεξαντληθούνόλαταψηφία,το nθαπαίρνειδιαρκώςτηντιμή 0 και η παραπάνω while δεν τερματίζει. 102 Å Ø ØÖÓÔ Ó Ù I import java.util.*; /* Μετατροπή δεκαδικού σε δυαδικό (1ος τρόπος) */ public class DecToBin { public static void main(string args[]) { Scanner input = new Scanner(System.in); System.out.print("Δεκαδικός ακέραιος? "); int N = input.nextint(); /* μέγιστη δύναμη του 2 <= N */ int p = 1; while (p <= N/2) p *= 2;
/* δυαδικά ψηφία */ while (p > 0) { if (N < p) { System.out.print(0); else { System.out.print(1); N = N - p; p /= 2; System.out.println(); ½¼ Å Ø ØÖÓÔ Ó Ù II import java.util.*; public class DecToBin2 { public static void main(string args[]) { Scanner input = new Scanner(System.in); System.out.print("Δεκαδικός ακέραιος? "); int N = input.nextint(); String s = ""; while (N > 0) { s = (N % 2) + s; N /= 2; System.out.println(s);
ÒØ ØÖÓ Ý ÛÒ Ö ÓÙ import java.util.*; public class DigitReverser { public static void main(string args[]) { Scanner input = new Scanner(System.in); System.out.print("N? "); int N = input.nextint(); // αντιστροφή με αριθμητική int m = 0; while (N!= 0) { m = (10 * m) + (N % 10); N = N / 10; ½¼ System.out.println(m); // αντιστροφή με strings String s = ""; while (m!= 0) { int digit = m % 10; s = s + digit; m = m / 10; System.out.println(s);
À ÒØÓÐ for ΑΡΧΙΚΟΠΟΙΗΣΗ for (αρχικοποίηση;συνθήκη;ενημέρωση) εντολή S false ΣΥΝΘΗΚΗ true S ΕΝΗΜΕΡΩΣΗ Οι εντολές αρχικοποίησης εκτελούνται μια φορά. Ηεντολή S εκτελείταιόσοαληθεύει η λογική συνθήκη. Οι εντολές ενημέρωσης εκτελούνται στο τέλος κάθε επανάληψης και συνήθως επηρεάζουν την τιμή της συνθήκης. Η Sμπορείναείναιαπλήήσύνθετη (block) εντολή. ½¼ È Ö Ñ Ø for for (int i = 1; i <= 10; i++) System.out.println(i); for (int odd = 1; odd <= 100; odd += 2) System.out.println(odd); for (int alot = 100; alot >= 10; alot++) System.out.println(alot); for (int nothing = 100; nothing < 10; nothing -= 5) System.out.println(nothing); for (int countdown = 10; countdown >= 0; --countdown) System.out.println(countdown);
Ø ÔÛ Ö ÑôÒ Ò Ö ÑÑ Εκτύπωσητωνακεραίωναπότο1000εωςτο2000,5ανάγραμμή: public class FivePerLine { public static void main(string[] args) { int i; for (i = 1000; i <= 2000; i++) { System.out.print(i + " "); if (i % 5 == 4) System.out.println(); if (i % 5!= 0) System.out.println(); 110 Ö ÑÓ Fibonacci Ηακολουθία1,2,3,5,8,13,... f n = f n 1 + f n 2, n > 2 με f 1 = 1, f 2 = 2. import java.util.*; /* N πρώτοι αριθμοί Fibonacci */ public class Fibonacci { public static void main(string args[]) { Scanner input = new Scanner(System.in); System.out.print("N αριθμοι Fibonacci? "); int N = input.nextint();
int g = 1, f = 2; System.out.println(g); System.out.println(f); for (int i = 3; i <= N; i++) { f = f + g; g = f - g; System.out.println(f); ½½¾ ËÕ for while for (αρχικοποίηση;συνθήκη;ενημέρωση) { εντολές; ισοδ. αρχικοποίηση; while (συνθήκη) { εντολές; ενημέρωση; Η for προτιμάται όταν ο αριθμός των επαναλήψεων είναι γνωστός.
while ÒØ for ÉÖ Ò ÔÐ Ñ Ð ÓÙ ½¼¼¼ Ñ Ø Ó ± Ø Û? public class DoubleCapital { public static void main(string args[]) { double mymoney = 1000.0; int years = 0; while (mymoney < 2000.0) { mymoney *= 1.05; years ++; System.out.print("Διπλ/σμός κεφαλαίου σε "); System.out.println(years + " χρόνια"); ½½ for Ñ for Εκτύπωση κύκλου ακτίνας R. Παράδειγμαγια R = 5:..... *....... * * * * * * *... * * * * * * * * *.. * * * * * * * * *.. * * * * * * * * *. * * * * * * * * * * *. * * * * * * * * *.. * * * * * * * * *.. * * * * * * * * *... * * * * * * *....... *..... Εκτύπωση του N N πίνακα. Παράδειγμαγια N = 11 * * * * * * * * * * *. * * * * * * * * * *.. * * * * * * * * *... * * * * * * * *.... * * * * * * *..... * * * * * *...... * * * * *....... * * * *........ * * *......... * *.......... *
Circle.java //... int R = input.nextint(); for (int i = -R; i <= R; i++) { for (int j = -R; j <= R; j++) { if (i*i + j*j <= R*R) System.out.print("* "); else System.out.print(". "); System.out.println(); //... ½½ Triangle.java //... int N = input.nextint(); for (int i = 0; i < N; i++) { for (int j = 0; j < i; j++) System.out.print(". "); for (int j = 0; j < N-i; j++) System.out.print("* "); System.out.println(); //...
ÉÖ Ø for Ñ ÔÖ Ñ Ø ÓÑ Ò for (double x = 1.0; x <= 2.0; x += 0.1) δίνει System.out.print(x + " "); 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 Αιτία: Μερικοί πραγματικοί δεν έχουν ακριβή αναπαράσταση στο δυαδικόσύστημα.ετσιο0.1δενείναιακριβώςίσοςμε 1/10.Το σφάλμα συσσωρεύεται με διαδοχικές αθροίσεις του x καταλήγοντας στηντιμή,π.χ. 2.00001 > 2.0. ½½ ÉÖ Ø for Ñ ÔÖ Ñ Ø ÓÑ Ò ÙÒ Õºµ Λύση: Χρήση ακέραιων μετρητών. double x; for (int i = 10; i <= 20; i++) { x = i / 10.0; System.out.print(x + " ");