College Compass

College Compass

Software Development

CN4001
  • Έτος 1 · Εξάμηνο 1
  • Αρχείο

Τα πρώτα βήματα στον προγραμματισμό με Java: μεταβλητές, συνθήκες, βρόχοι, πίνακες, μέθοδοι και αντικείμενα, με μια εργασία κάθε εβδομάδα.

Εβδομάδες

Εβδομάδα 1Πρώτα βήματα στη Java
Εβδομάδα 2Αποφάσεις και χειρισμός σφαλμάτων
Εβδομάδα 3

Δεν υπάρχει γραμμένο μάθημα για αυτή την εβδομάδα.

Εβδομάδα 4Είσοδος από τον χρήστη με τον Scanner
Εβδομάδα 5

Δεν υπάρχει γραμμένο μάθημα για αυτή την εβδομάδα.

Εβδομάδα 6Βρόχοι και πίνακες
Εβδομάδα 7

Δεν υπάρχει γραμμένο μάθημα για αυτή την εβδομάδα.

Εβδομάδα 8Μέθοδοι, κλάσεις και αντικείμενα
Εβδομάδα 9

Δεν υπάρχει γραμμένο μάθημα για αυτή την εβδομάδα.

Εβδομάδα 10

Δεν υπάρχει γραμμένο μάθημα για αυτή την εβδομάδα.

Εβδομάδα 11

Δεν υπάρχει γραμμένο μάθημα για αυτή την εβδομάδα.

Εβδομάδα 12

Δεν υπάρχει γραμμένο μάθημα για αυτή την εβδομάδα.

Ασκήσεις εξάσκησης

Άσκηση

1st Weekly Task

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Χαιρετισμός, αθροίσματα, πολλαπλάσια και πρώτοι αριθμοί σε μία main().

Εκφώνηση

Δώστε κώδικα ο οποίος να πραγματοποιεί σε διακριτά βήματα τα παρακάτω (στην ίδια main()):

  • Ζητά από το χρήστη το όνομά του και του τυπώνει ένα μήνυμα χαιρετισμού.
  • Τροποιήστε το παραπάνω ώστε το πρόγραμμα να χαιρετά μόνο το Γιάννη και τη Μαρία.
  • Ζητήστε από το χρήστη να εισάγει έναν ακέραιο n. Υπολογίστε το άθροισμα όλων των ακεραίων από τον 1 έως τον αριθμό n>0 που έδωσε ο χρήστης.
  • Τυπώστε όλα τα πολλάπλάσια του 5 μεταξύ του 1 και του παραπάνω αριθμού n.
  • Ο χρήστης δίνει εκ νέου έναν οποιδήποτε ακέραιο αριθμό ως είσοδο. Υπολογίστε όλους τους ενδιάμεσους πρώτους αριθμούς. Ως πρώτος ορίζεται ο αριθμός που δίνει ακέραιο υπόλοιπο 0 διαιρώντας τον με το 1 ή τον εαυτό του (prime number).
Άσκηση

Εβδομάδα 1: Ασκήσεις με μεταβλητές και τύπους

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

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

Εκφώνηση

Η δραστηριότητα αυτή αποτελείται από 6 ερωτήματα, ήτοι, 6 αρχεία τα οποία οφείλετε να τα δημιουργήσετε.

Ερώτημα 1ο

Στην αίθουσα είδαμε μέσω παραδείγματος πως υπολογίζουμε το εμβαδό του κύκλου μέσω του τύπου π * radius², κατά την ίδια λογική στο ερώτημα αυτό θα πρέπει να υπολογίσετε την περίμετρο του κύκλου η οποία προκύπτει από τον τύπο 2 * π * radius.

Ερώτημα 2ο

Να υπολογίσετε το κέρδος της τράπεζας για ένα δάνειο 6 ετών, με 8% επιτόκιο για κεφάλαιο €15.000 και να τυπώσετε στο τέλος ένα κείμενο που θα είναι της μορφής “The interest of the loan for a principle of €15.000 with 8% rate and a period of 6 years, is: €” και το αποτέλεσμα. Δε θα πρέπει να χρησιμοποιείσετε “καρφωτές” τιμές αλλά να κάνετε χρήση των μεταβλητών σας για την παραγωγή του μηνύματος στην κονσόλα. Ο τύπος που θα πρέπει να χρησιμοποιήσετε θα είναι:

Interest = (P * R * T) / 100

Όπου:

  • P = το αρχικό κεφάλαιο
  • R = το επιτόκιο
  • T = ο χρόνος σε έτη

Παράδειγμα:

Για αρχικό κεφάλαιο €8000, με 5% ετήσιο επιτόκιο δανείου 2 ετών, θα έχουμε:

Interest = (8000 * 5 * 2) / 100 = 80000 / 100 = 800

Άρα το κέρδος της τράπεζας για το εν λόγω δάνειο θα ανέρχεται σε €800.

Ερώτημα 3ο

Να μετατρέψετε τους 29,5°C σε βαθμούς Fahrenheit και να τυπώσετε στην κονσόλα το αποτέλεσμα με ένα μήνυμα του τύπου “The 29,5C are equivelent to XF”, όπου αντί για X θα έχετε το αποτέλεσμα της μεταβλητής σας. Ο τύπος μετατροπής των βαθμών κελσίου σε βαθμούς Fahrenheit είναι:

F = (C * 9/5) + 32

Ερώτημα 4ο

Να υπολογίσετε την περίμετρο ενός ορθογώνιου παραλληλόγραμμου με μήκος 8 και πλάτος 5. Να τυπώσετε αντίστοιχο μήνυμα στην κονσόλα. Ο τύπος της περιμέτρου είναι:

Perimeter = 2 * (length + width)

Ερώτημα 5ο

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

Ερώτημα 6ο

Να γίνει αντιστροφή των τιμών δύο μεταβλητών χωρίς χρήση προσωρινής (δηλαδή 3ης) μεταβλητής.

int a = 5;
int b = 10;

Μετά την αντιστροφή θα πρέπει η μεταβλητή a να φέρει την τιμή 10 και αντίστοιχα η μεταβλητή b να φέρει την τιμή 5. Η διαδικασία αυτή θα πρέπει να γίνει χωρίς τη χρήση τρίτης μεταβλητής. Θα πρέπει να τυπωθεί στην κονσόλα ένα μήνυμα που θα δείχνει τις τιμές των μεταβλητών πριν την αντιστροφή “Before swap:” και μετά “After swap:”.

Άσκηση

2η Εβδομαδιαία Εργασία (Κοσμίδης)

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

20 ερωτήματα συμπλήρωσης κενών: αριθμητικοί, σχεσιακοί και λογικοί τελεστές, και συνθήκες if.

Εκφώνηση

Ερώτημα 1

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

int a = 5;
int b = 3;
int sum = ________;
System.out.println("The sum is: " + sum);

Αναμενόμενο αποτέλεσμα:

The sum is: 8

Ερώτημα 2

Υπολογίστε το γινόμενο δύο αριθμών.

int x = 4;
int y = 7;
int product = ________;
System.out.println("The product is: " + product);

Αναμενόμενο αποτέλεσμα:

The product is: 28

Ερώτημα 3

Υπολογίστε το υπόλοιπο μιας πράξης διαίρεσης.

int num = 10;
int divisor = 3;
int remainder = ________;
System.out.println("The remainder is: " + remainder);

Αναμενόμενο αποτέλεσμα:

The remainder is: 1

Ερώτημα 4

Συγκρίνετε δύο αριθμούς και εκτυπώστε αν ο ένας είναι μεγαλύτερος.

int a = 15;
int b = 10;
boolean isGreater = a ________ b;
System.out.println("Is a greater than b? " + isGreater);

Αναμενόμενο αποτέλεσμα:

Is a greater than b? true

Ερώτημα 5

Προσδιορίστε αν δύο αριθμοί είναι ίσοι.

int a = 5;
int b = 5;
boolean isEqual = a ________ b;
System.out.println("Are a and b equal? " + isEqual);

Αναμενόμενο αποτέλεσμα:

Are a and b equal? true

Ερώτημα 6

Αυξήστε έναν αριθμό κατά 1 χρησιμοποιώντας τον τελεστή increment.

int number = 9;
number ________;
System.out.println("The incremented number is: " + number);

Αναμενόμενο αποτέλεσμα:

The incremented number is: 10

Ερώτημα 7

Μείωση ενός αριθμού κατά 1 χρησιμοποιώντας τον τελεστή μείωσης.

int number = 7;
number ________;
System.out.println("The decremented number is: " + number);

Αναμενόμενο αποτέλεσμα:

The decremented number is: 6

Ερώτημα 8

Ανάθεση ενός μηνύματος με βάση μια συνθήκη.

int age = 20;
String message = (age ________) ? "Adult" : "Minor";
System.out.println("The person is: " + message);

Αναμενόμενο αποτέλεσμα:

The person is: Adult

Ερώτημα 9

Αρνηση (αντιστροφή) μιας boolean τιμής.

boolean isTrue = true;
boolean isFalse = ________;
System.out.println("The negated value is: " + isFalse);

Αναμενόμενο αποτέλεσμα:

The negated value is: false

Ερώτημα 10

Αποτιμήστε μια λογική πράξη AND.

boolean condition1 = true;
boolean condition2 = false;
boolean result = condition1 ________ condition2;
System.out.println("The AND result is: " + result);

Αναμενόμενο αποτέλεσμα:

The AND result is: false

Ερώτημα 11

Αποτιμήστε μια λογική πράξη OR.

boolean condition1 = true;
boolean condition2 = false;
boolean result = condition1 ________ condition2;
System.out.println("The OR result is: " + result);

Αναμενόμενο αποτέλεσμα:

The OR result is: true

Ερώτημα 12

Προσδιορίστε αν ένας αριθμός είναι ζυγός χρησιμοποιώντας τον τελεστή modulo.

int number = 6;
boolean isEven = number ________ 2 == 0;
System.out.println("Is the number even? " + isEven);

Αναμενόμενο αποτέλεσμα:

Is the number even? true

Ερώτημα 13

Υπολογίστε το άθροισμα τριών αριθμών.

int a = 2;
int b = 3;
int c = 4;
int sum = ________;
System.out.println("The sum of three numbers is: " + sum);

Αναμενόμενο αποτέλεσμα:

The sum of three numbers is: 9

Ερώτημα 14

Χρησιμοποιήστε τον τελεστή σύνθετης πρόσθεσης.

int number = 5;
number ________ 3;
System.out.println("The updated number is: " + number);

Αναμενόμενο αποτέλεσμα:

The updated number is: 8

Ερώτημα 15

Χρησιμοποιήστε τον τελεστή σύνθετου πολλαπλασιασμού.

int number = 4;
number ________ 2;
System.out.println("The updated number is: " + number);

Αναμενόμενο αποτέλεσμα:

The updated number is: 8

Ερώτημα 16

Γράψτε ένα πρόγραμμα που να ελέγχει αν ένας μαθητής πέρασε ή απέτυχε με βάση τη βαθμολογία του. Μια βαθμολογία 50 ή περισσότερο θεωρείται επιτυχία.

int score = 45;
if (score ________ 50) {
    System.out.println("You passed!");
} else {
    System.out.println("You failed.");
}

Αναμενόμενο αποτέλεσμα:

You failed.

Ερώτημα 17

Γράψτε ένα πρόγραμμα για να ελέγξετε αν ένας αριθμός είναι μεταξύ 10 και 20 (συμπεριλαμβανομένου).

int number = 15;
if (number ________ 10 ________ number ________ 20) {
    System.out.println("The number is within the range.");
} else {
    System.out.println("The number is outside the range.");
}

Αναμενόμενο αποτέλεσμα:

The number is within the range.

Ερώτημα 18

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

int age = 19;
boolean isCitizen = true;
if (age ________ 18 ________ isCitizen) {
    System.out.println("You are eligible to vote.");
} else {
    System.out.println("You are not eligible to vote.");
}

Αναμενόμενο αποτέλεσμα:

You are eligible to vote.

Ερώτημα 19

Γράψτε ένα πρόγραμμα για να ελέγξετε αν ένα έτος είναι δίσεκτο. Ένα δίσεκτο έτος διαιρείται με το 4 αλλά δεν διαιρείται με το 100, εκτός αν διαιρείται με το 400.

int year = 2024;
if ( (year ________ 4 == 0 ________ year ________ 100 != 0) ________ year ________ 400 == 0) {
    System.out.println("It is a leap year.");
} else {
    System.out.println("It is not a leap year.");
}

Αναμενόμενο αποτέλεσμα:

It is a leap year.

Ερώτημα 20

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

  1. Ο μαθητής πρέπει να έχει βαθμό 60 ή μεγαλύτερο.
  2. Εάν ο βαθμός του μαθητή είναι μεταξύ 50 και 59 (συμπεριλαμβανομένου), πρέπει να έχει παρακολουθήσει πάνω από το 80% των μαθημάτων για να είναι επιλέξιμος.
  3. Εάν ο βαθμός του μαθητή είναι κάτω από 50, δεν είναι επιλέξιμος, ανεξάρτητα από την παρακολούθηση.

Αρχικές μεταβλητές:

int grade = 55; // Example grade, you can change it
double attendancePercentage = 85.0; // Example attendance percentage, you can change it

Αναμενόμενο αποτέλεσμα (Για τις δεδομένες αρχικές μεταβλητές):

Eligible for advanced exam.
Άσκηση

2nd Weekly Task

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Συναρτήσεις με πίνακες: μέγιστο, αντιστροφή, αναζήτηση, παλινδρομικά strings και συνδυασμός πινάκων.

Εκφώνηση

Καλείστε να φτιάξετε κώδικα που να υλοποιεί τα παρακάτω (μόνο κώδικας μέσα στη main() και χρήση συναρτήσεων) Γράψτε συνάρτηση που:

  1. δοσμένου ενός πίνακα ακεραίων, βρίσκει το μέγιστο αριθμό σε ένα πίνακα ακεραίων.
  2. δοσμένου ενός πίνακα ακεραίων, αντιστρέφει τη σειρά των στοιχείων του.
  3. δοσμένου ενός πίνακα ακεραίων και ενός αριθμού, ελέγχει αν αυτός ο αριθμός βρίσκεται εντός του πίνακα και αν ναι, επιστρέφει τιμή αλήθειας true, διαφορετικά επιστρέφει false.
  4. δοσμένου ενός πίνακα ακεραίων, επιστρέφει νέο πίνακα που περιέχει τα στοιχεία του πρώτου σε όλες τις μονές θέσεις μόνο..
  5. δοσμένου ενός string, κοιτάει αν το αλφαρηθμητικό αυτό είναι παλινδρομικό. Ως παλινδρομικό, νοείται το αλφαρηθμητικό όπου η σειρά των γραμμάτων του είναι η ίδια αν το διαβάσουμε και από την ανάποδη. “A string is said to be palindrome if the reverse of the string is the same as the string. For example, “abba” is a palindrome because the reverse of “abba” will be equal to “abba” so both of these strings are equal and are said to be a palindrome, but “abbc” is not a palindrome”.
  6. δοσμένου ενός πίνακα ακεραίων, επιστρέφει το άθροισμα των στοιχείων του με χρήση for-loop και while-loop.
  7. δοσμένου δύο πινάκων ακεραίων, επιστρέφει συνδυασμό των δύο.
  8. δοσμένου δύο πινάκων ακεραίων, επιστρέφει έναν πίνακα με εναλλάξ τα στοιχεία των προηγούμενων πινάκων.
Άσκηση

3rd Weekly Task

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Συμπλήρωση κώδικα με if-else, switch statements και switch expressions, και δύο προαιρετικά προχωρημένα ερωτήματα.

Εκφώνηση

Σε αυτές τις ασκήσεις θα χρειαστεί να συμπληρώσετε τα κενά σημεία στον κώδικα που σας δίνεται. Χρησιμοποιήστε τις εντολές if-else, switch statements και switch expressions για να κάνετε τον κώδικα πλήρως λειτουργικό, σύμφωνα με τις οδηγίες που περιλαμβάνονται στην εκφώνηση της κάθε άσκησης.

Ερώτημα 1

Γράψτε ένα πρόγραμμα που να ελέγχει την κατάσταση μιας παραγγελίας βάσει του κωδικού κατάστασης (1: Επεξεργασία, 2: Σε Αναμονή, 3: Αποστολή, 4: Ολοκλήρωση).

int status = 3;
switch (status) {
        System.out.println("Order is being processed");
        System.out.println("Order is on hold");
        System.out.println("Order has been shipped");
        System.out.println("Order is completed");
        System.out.println("Unknown status code");
}

Ερώτημα 2

Δημιουργήστε ένα πρόγραμμα που να ελέγχει αν ένας αριθμός (μέσος όρος θερμοκρασίας) αντιστοιχεί σε ζεστό, κρύο ή μέτριο καιρό. (30+ = ζεστό, 15+ = χλιαρό)

int temperature = 25;
if () {
    System.out.println("Hot weather");
    System.out.println("Moderate weather");
    System.out.println("Cold weather");
}

Ερώτημα 3

Γράψτε ένα πρόγραμμα που να ελέγχει το επίπεδο προσβασιμότητας ενός χρήστη με βάση έναν κωδικό πρόσβασης (1: Διαχειριστής, 2: Συντάκτης, 3: Αναγνώστης).

int accessLevel = 2;
switch () {
    case 1:
        System.out.println("Administrator access");
        System.out.println("Editor access");
        System.out.println("Reader access");
        System.out.println("Unknown access level");
}

Ερώτημα 4

Δημιουργήστε ένα πρόγραμμα που να κατατάσσει μια ημέρα ως εργάσιμη ή αργία (Δευτέρα έως Παρασκευή: εργάσιμη, Σάββατο και Κυριακή: αργία).

String day = "Saturday";
switch (day) {
        System.out.println("Weekday");
        System.out.println("Weekend");
        System.out.println("Unknown day");
}

Ερώτημα 5

Δημιουργήστε ένα πρόγραμμα που να εκτιμά το επίπεδο εμπειρίας ενός χρήστη βάσει των πόντων εμπειρίας που έχει (0-100: Νέος, 101-500: Μέτριος, 501+ : Προχωρημένος).

int experiencePoints = 120;
if () {
    System.out.println("Beginner");
    System.out.println("Intermediate");
    System.out.println("Advanced");
}

Ερώτημα 6

Δημιουργήστε ένα πρόγραμμα που να ελέγχει την προσβασιμότητα ενός χρήστη σε μία πλατφόρμα ανάλογα με το ρόλο και την ηλικία του (π.χ. Admins με ηλικία κάτω των 18 δεν επιτρέπονται).

String role = "Admin";
int age = 17;

if (role.equals()) {
    if () {
        System.out.println("Access granted to Admin");
        System.out.println("Access denied to Admin under 18");
    }
} else if () {
    System.out.println("Access granted to User");
    System.out.println("Unknown role");
}

Ερώτημα 7

Γράψτε ένα πρόγραμμα που να εκτιμά την προτεινόμενη ταχύτητα ενός οχήματος με βάση τον τύπο του δρόμου (αυτοκινητόδρομος, επαρχιακός δρόμος, εντός πόλης) και την ώρα (π.χ. βράδυ/μέρα).

String roadType = "Highway";
String timeOfDay = "Night";

switch (roadType) {
    case "Highway":
        if (timeOfDay.equals) {
            System.out.println("Recommended speed: 120 km/h");
        } else {
            System.out.println("Recommended speed: 100 km/h");
        }
        break;
    case "City":
        System.out.println("Recommended speed: 50 km/h");
    case "Rural":
        if (timeOfDay.equals("Day")) {
            System.out.println("Recommended speed: 80 km/h");
        } else {
            System.out.println("Recommended speed: 60 km/h");
        }
        System.out.println("Unknown road type");
}

Ερώτημα 8

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

int experienceYears = 5;
int age = 24;

if (experienceYears > 8) {
    System.out.println("Professional player");
} else if (experienceYears > 3) {
    if () { // bellow 30
        System.out.println("Semi-professional player");
        System.out.println("Professional player");
    }
    System.out.println("Amateur player");
}

Ερώτημα 9

Δημιουργήστε ένα πρόγραμμα που να επιστρέφει την τιμή έκπτωσης για ένα προϊόν βάσει της κατηγορίας του (A, B, C). Για παράδειγμα, 20% για κατηγορία A, 15% για κατηγορία B, 10% για κατηγορία C, και 5% για άλλες κατηγορίες. Χρησιμοποιήστε switch expression.

char category = 'A';
int discount = switch (category) {

};
System.out.printf("The discount for the category %c is %d%%%n", category, discount);

Ερώτημα 10

Γράψτε ένα πρόγραμμα που καθορίζει την περιγραφή της ζώνης ενός αθλητή στο Brazilian Jiu-Jitsu βάσει της βαθμίδας (white, blue, purple, brown, black) και του επιπέδου (1-4 για white, 1-3 για blue, purple, και brown, 1-6 για black). Χρησιμοποιήστε switch expression για να επιστρέψετε τη σωστή περιγραφή.

String beltColor = "blue";
int rank = 2;

String beltDescription = switch (beltColor) {
    case "white" -> switch (rank) {
        case 1 -> /* "White Belt - Beginner" */;
        case 2 -> /* "White Belt - Intermediate" */;
        case 3 -> /* "White Belt - Advanced" */;
        case 4 -> /* "White Belt - Experienced" */;
        default -> /* "Invalid rank for White Belt" */;
    };
    case "blue" -> switch (rank) {
        // Fill in cases here
    };
    case "purple" -> switch (rank) {
        // Fill in cases here
    };
    case "brown" -> switch (rank) {
        // Fill in cases here
    };
    case "black" -> switch (rank) {
        // Fill in cases here
    };
    default -> /* "Unknown belt color" */;
};

System.out.println(beltDescription);

Προχωρημένα Ερωτήματα (προαιρετικά)

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

Προχωρημένo Ερώτημα 1

Δημιουργήστε ένα πρόγραμμα που ταξινομεί τους συμμετέχοντες σε προγράμματα εκπαίδευσης με βάση την ηλικία τους. Το πρόγραμμα θα ζητά από τον χρήστη να εισάγει την ηλικία του και θα εμφανίζει την κατάλληλη κατηγορία, με βάση τους εξής κανόνες:

  • Παιδί (Child): 6 - 12 ετών
  • Έφηβος (Teenager): 13 - 17 ετών
  • Νεαρός Ενήλικας (Young Adult): 18 - 25 ετών
  • Ενήλικας (Adult): 26 - 60 ετών
  • Ηλικιωμένος (Senior): 61 και άνω

Το πρόγραμμα θα πρέπει να χρησιμοποιεί ένα σύνθετο if-else σύστημα για να ελέγξει τις συνθήκες και να εμφανίζει την κατηγορία με κατάλληλο μήνυμα.

Προχωρημένo Ερώτημα 2

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

  • Για ενοικίαση μέχρι 3 ημέρες, το κόστος είναι 50 ευρώ ανά ημέρα.
  • Για ενοικίαση από 4 έως 7 ημέρες, το κόστος είναι 40 ευρώ ανά ημέρα.
  • Για ενοικίαση πάνω από 7 ημέρες, το κόστος είναι 30 ευρώ ανά ημέρα.

Το πρόγραμμα πρέπει να χρησιμοποιεί ένα switch ή και ένα if-else σύστημα για να καθορίσει την τιμή ανάλογα με τις ημέρες και να εμφανίζει το συνολικό κόστος στον χρήστη.

Άσκηση

4η Εβδομαδιαία Εργασία (Kosmidis)

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

13 προγράμματα με Scanner: γεωμετρία, μετατροπές μονάδων, ποσοστά, φόρος εισοδήματος και κλίμακες με if.

Εκφώνηση

Ερώτημα 1

Ζητήστε από τον χρήστη την ακτίνα και το ύψος ενός κυλίνδρου και υπολογίστε τον όγκο του.

Οδηγίες:

  1. Ζητήστε την ακτίνα και το ύψος του κυλίνδρου από τον χρήστη.
  2. Υπολογίστε τον όγκο με τον τύπο: V = π · radius² · height
  3. Εκτυπώστε το αποτέλεσμα.

Ερώτημα 2

Ζητήστε από τον χρήστη να εισάγει πέντε αριθμούς και υπολογίστε τη μέση τιμή τους.

Οδηγίες:

  1. Ζητήστε από τον χρήστη να εισάγει πέντε αριθμούς.
  2. Υπολογίστε τη μέση τιμή με τον τύπο: Average = sumofnumbers / 5
  3. Εκτυπώστε το αποτέλεσμα.

Ερώτημα 3

Ζητήστε από τον χρήστη να εισάγει μια θερμοκρασία σε Φαρενάιτ και μετατρέψτε την σε Κελσίου.

Οδηγίες:

  1. Ζητήστε τη θερμοκρασία σε Φαρενάιτ.
  2. Υπολογίστε τη θερμοκρασία σε Κελσίου με τον τύπο: C = (F − 32) · 5/9
  3. Εκτυπώστε το αποτέλεσμα.

Ερώτημα 4

Ζητήστε από τον χρήστη τη βάση και το ύψος ενός τριγώνου και υπολογίστε την έκτασή του.

Οδηγίες:

  1. Ζητήστε τη βάση και το ύψος του τριγώνου.
  2. Υπολογίστε την έκταση με τον τύπο: A = ½ · base · height
  3. Εκτυπώστε το αποτέλεσμα.

Ερώτημα 5

Ζητήστε από τον χρήστη να εισάγει χρόνο σε λεπτά και μετατρέψτε τον σε ώρες και λεπτά.

Οδηγίες:

  1. Ζητήστε χρόνο σε λεπτά.
  2. Υπολογίστε τις ώρες και τα υπόλοιπα λεπτά με τους τύπους:
    1. Ώρες: hours = minutes / 60
    2. Λεπτά: remainingminutes = minutes
  3. Εκτυπώστε το αποτέλεσμα.

Ερώτημα 6

Ζητήστε από τον χρήστη την απόσταση και την κατανάλωση καυσίμου του αυτοκινήτου (λίτρα ανά 100 χλμ) και υπολογίστε το συνολικό κόστος του ταξιδιού.

Οδηγίες:

  1. Ζητήστε την απόσταση και την κατανάλωση καυσίμου.
  2. Υπολογίστε την ποσότητα καυσίμου που απαιτείται και το συνολικό κόστος με τον τύπο: FuelNeeded = (distance · consumption) / 100
  3. Εκτυπώστε το κόστος.

Ερώτημα 7

Ζητήστε από τον χρήστη τον αρχικό πληθυσμό και το ποσοστό ετήσιας αύξησης και υπολογίστε τον πληθυσμό μετά από 5 χρόνια.

Οδηγίες:

  1. Ζητήστε τον αρχικό πληθυσμό και το ποσοστό αύξησης.
  2. Υπολογίστε τον πληθυσμό για κάθε έτος για 5 χρόνια με τον τύπο: PopulationYearN = PopulationYearN − 1 · (1 + growthrate)
  3. Εκτυπώστε τον τελικό πληθυσμό μετά από 5 χρόνια.

Ερώτημα 8

Ζητήστε από τον χρήστη να εισάγει έναν αριθμό και υπολογίστε την τετραγωνική ρίζα του.

Οδηγίες:

  1. Ζητήστε τον αριθμό.
  2. Υπολογίστε την τετραγωνική ρίζα με τον τύπο: SquareRoot = √number
  3. Εκτυπώστε το αποτέλεσμα.

Ερώτημα 9

Ζητήστε από τον χρήστη την τιμή ενός προϊόντος και το ποσοστό ΦΠΑ και υπολογίστε την τελική τιμή.

Οδηγίες:

  1. Ζητήστε την τιμή προϊόντος και το ποσοστό ΦΠΑ.
  2. Υπολογίστε την τελική τιμή με τον τύπο: FinalPrice = price · (1 + VAT/100)
  3. Εκτυπώστε το αποτέλεσμα.

Ερώτημα 10

Δημιουργήστε ένα πρόγραμμα που υπολογίζει τον φόρο εισοδήματος με βάση το ετήσιο εισόδημα. Οι φορολογικές κλίμακες είναι οι εξής:

  • Εισόδημα μέχρι €10,000: Χωρίς φόρο
  • Εισόδημα από €10,001 έως €20,000: 10% φόρος
  • Εισόδημα από €20,001 έως €30,000: 15% φόρος
  • Εισόδημα άνω των €30,000: 20% φόρος

Το πρόγραμμα θα ζητά από τον χρήστη να εισάγει το ετήσιο εισόδημά του και στη συνέχεια θα εμφανίζει το ποσό του φόρου.

Απαιτούμενες Παράμετροι:

  • annualIncome: ένα double που αντιπροσωπεύει το ετήσιο εισόδημα του χρήστη.

Κωδικός Παραγωγής Εξόδου: Το πρόγραμμα θα εμφανίζει το ποσό του φόρου σε ευρώ, π.χ., “Your income tax is: €XXXX”.

Ερώτημα 11

Γράψτε ένα πρόγραμμα που κατατάσσει τη θερμοκρασία σε διαφορετικές καιρικές συνθήκες με βάση την τιμή σε Κελσίου που δίνεται:

  • Κάτω από 0°C: “Freezing”
  • Από 0°C έως 10°C: “Cold”
  • Από 11°C έως 20°C: “Cool”
  • Από 21°C έως 30°C: “Warm”
  • Πάνω από 30°C: “Hot”

Το πρόγραμμα θα ζητά από τον χρήστη να εισάγει τη θερμοκρασία σε Κελσίου και στη συνέχεια θα εμφανίζει την αντίστοιχη καιρική συνθήκη.

Απαιτούμενες Παράμετροι:

  • temperature: ένας ακέραιος που αντιπροσωπεύει τη θερμοκρασία σε Κελσίου.

Κωδικός Παραγωγής Εξόδου: Το πρόγραμμα θα εμφανίζει την καιρική συνθήκη στα Αγγλικά, π.χ., “Freezing”, “Cold”, “Cool”, “Warm”, ή “Hot”.

Ερώτημα 12

Ζητήστε από τον χρήστη την τελική τιμή ενός προϊόντος και το ποσοστό ΦΠΑ που περιλαμβάνεται σε αυτήν, και υπολογίστε την αποφορολογημένη τιμή.

Οδηγίες:

  1. Ζητήστε από τον χρήστη την τελική τιμή του προϊόντος (συμπεριλαμβανομένου του ΦΠΑ) και το ποσοστό του ΦΠΑ.
  2. Υπολογίστε την αποφορολογημένη τιμή χρησιμοποιώντας με τον τύπο: NetPrice = FinalPrice / (1 + VATPercentage/100)
  3. Εκτυπώστε το αποτέλεσμα.

Ερώτημα 13

Δημιουργήστε ένα πρόγραμμα που αξιολογεί την επιλεξιμότητα δανείου με βάση τη βαθμολογία πίστωσης. Τα κριτήρια επιλεξιμότητας είναι τα εξής:

  • Βαθμολογία κάτω από 500: “High Risk - Loan Denied”
  • Βαθμολογία από 500 έως 650: “Medium Risk - Higher Interest Rate”
  • Βαθμολογία από 651 έως 750: “Low Risk - Standard Interest Rate”
  • Βαθμολογία πάνω από 750: “Very Low Risk - Preferred Interest Rate”

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

Απαιτούμενες Παράμετροι:

  • creditScore: ένας ακέραιος που αντιπροσωπεύει τη βαθμολογία πίστωσης του χρήστη.

Κωδικός Παραγωγής Εξόδου: Το πρόγραμμα θα εμφανίζει το μήνυμα επιλεξιμότητας δανείου στα Αγγλικά, π.χ., “High Risk - Loan Denied”, “Medium Risk - Higher Interest Rate”, κ.λπ.

Άσκηση

5th Weekly Task

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

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

Εκφώνηση

Για κάθε ένα από τα παρακάτω ερωτήματα καλείστε να γράψετε κώδικα που να επιλύει το κάθε ζήτημα ξεχωριστά. Δοσμένου ενός πίνακα ακεραίων (ή οποιουδήποτε τύπου, πλην String) γράψτε κώδικα ο οποίος:

Ερώτημα 1

Αναζητά έναν έναν δοσμένο αριθμό στο πίνακα. Αν ο αριθμός υπάρχει στις τιμές του πίνακα, τότε το πρόγραμμα τυπώνει “value found!”. Αν η τιμή δεν βρεθεί στο πίνακα τότε τυπώνεται “value not found!”. Επιπλέον, στη περίπτωση που η τιμή εντοπιστεί στο πίνακα περισσότερες από μία φορά, τότε τυπώνεται “multiple occurrences of value detected!”.

Ερώτημα 2

Αρχικά αναζητάει την ελάχιστη τιμή Min στο δοσμένο πίνακα. Δεδομένης αυτής της τιμής μπορείτε να επιλέξετε με τυχαίο τρόπο μια τιμή Αi του δοσμένου πίνακα όπου 1≤i≤N και να επιλέξετε και ένα τυχαίο αριθμό Τ ώστε να ισχύει 1≤Τ≤100 και να θέσετε το Αi = Τ.

Να υπολογίσετε τον ελάχιστο αριθμό ενεργειών όπως παραπάνω, ώστε το Min που έχετε βρει, να γίνει το μέγιστο στοιχείο του πίνακα.

Ερώτημα 3

Να υπολογίζει το μέγιστο στοιχείο ενός πίνακα, και μετά το επόμενο μέγιστο του πίνακα πχ σε ένα πίνακα με τιμες 1,5,3,7,8,9,2 να δώσει ώς μέγιστο τη τιμή 9 και ως επόμενο μέγιστο τη τιμή 8.

Άσκηση

5th Weekly Task 2

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Είσοδος με Scanner και hasNext…, και μορφοποιημένη έξοδος με printf και String.format.

Εκφώνηση

Ερώτημα 1

Ζητήστε από τον χρήστη να εισάγει το όνομά του και την ηλικία του. Χρησιμοποιήστε printf για να εμφανίσετε το μήνυμα σε μορφή: “Hello, [Name]! You are [Age] years old.”

Οδηγίες:

  • Χρησιμοποιήστε hasNextInt για να ελέγξετε την εισαγωγή της ηλικίας.
  • Χρησιμοποιήστε %s για το όνομα και %d για την ηλικία.
  • Υπόδειξη: Χρησιμοποιήστε printf("Hello, %s! You are %d years old.\n", name, age);

Ερώτημα 2

Ζητήστε από τον χρήστη να εισάγει την ακτίνα ενός κύκλου. Υπολογίστε το εμβαδό (π * ακτίνα^2) και χρησιμοποιήστε String.format για να το εμφανίσετε σε μορφή: “The area of the circle with radius [Radius] is [Area] square units.”

Οδηγίες:

  • Χρησιμοποιήστε hasNextDouble για την ακτίνα.
  • Χρησιμοποιήστε %f για την ακτίνα και το εμβαδό (μορφοποιημένα σε 2 δεκαδικά ψηφία).
  • Υπόδειξη: Χρησιμοποιήστε String.format("The area of the circle with radius %.2f is %.2f square units.", radius, area);

Ερώτημα 3

Ζητήστε από τον χρήστη να εισάγει την τιμή ενός προϊόντος και το ποσοστό έκπτωσης. Εμφανίστε την έκπτωση ως “The product price is $[Price] with a discount of [Discount]%.”

Οδηγίες:

  • Χρησιμοποιήστε hasNextDouble για την τιμή και hasNextInt για την έκπτωση.
  • Χρησιμοποιήστε %f για την τιμή (2 δεκαδικά ψηφία) και %d για την έκπτωση.
  • Χρησιμοποιήστε %% για το σύμβολο του ποσοστού.
  • Υπόδειξη: Χρησιμοποιήστε printf("The product price is $%.2f with a discount of %d%%.\n", price, discount);

Ερώτημα 4

Ζητήστε από τον χρήστη να εισάγει έναν χαρακτήρα. Εμφανίστε την Unicode τιμή του χαρακτήρα χρησιμοποιώντας printf.

Οδηγίες:

  • Χρησιμοποιήστε hasNext() και next().charAt(0) για να διαβάσετε έναν χαρακτήρα.
  • Χρησιμοποιήστε %c για τον χαρακτήρα και %d για την Unicode τιμή.
  • Υπόδειξη: Χρησιμοποιήστε printf("The character '%c' has the Unicode value %d.\n", character, (int) character);

Ερώτημα 5

Ζητήστε από τον χρήστη να εισάγει έναν αριθμό από 0 έως 100, που αντιπροσωπεύει το ποσοστό ολοκλήρωσης. Χρησιμοποιήστε printf για να εμφανίσετε “You have completed [Percentage]% of the task.”

Οδηγίες:

  • Χρησιμοποιήστε hasNextInt για την εισαγωγή ποσοστού.
  • Χρησιμοποιήστε %d για την εμφάνιση του ποσοστού και %% για το σύμβολο του ποσοστού.
  • Υπόδειξη: Χρησιμοποιήστε printf("You have completed %d%% of the task.\n", percentage);

Ερώτημα 6

Ζητήστε από τον χρήστη να εισάγει το μικρό και το επώνυμό του. Χρησιμοποιήστε String.format για να εμφανίσετε “Your full name is [First Name] [Last Name], and your initials are [Initials].”

Οδηγίες:

  • Χρησιμοποιήστε %s για τα ονόματα.
  • Εξάγετε τα αρχικά χρησιμοποιώντας charAt(0) και μορφοποιήστε τα με %c.

Ερώτημα 7

Ζητήστε από τον χρήστη να εισάγει το μηνιαίο εισόδημα και το ποσοστό αποταμίευσης. Υπολογίστε και εμφανίστε το ποσό αποταμίευσης ως “With an income of $[Income] and a savings rate of [Rate]%, you save $[Savings] per month.”

Οδηγίες:

  • Χρησιμοποιήστε hasNextDouble για το εισόδημα και το ποσοστό αποταμίευσης.
  • Μορφοποιήστε το εισόδημα και τις αποταμιεύσεις με %f (2 δεκαδικά ψηφία), και το ποσοστό αποταμίευσης με %d.

Ερώτημα 8

Ζητήστε από τον χρήστη να εισάγει το βάρος (kg) και το ύψος (m). Υπολογίστε τον Δείκτη Μάζας Σώματος (ΔΜΣ) με τον τύπο BMI = weight / (height * height) και εμφανίστε τον ως “Your BMI is [BMI].”

Οδηγίες:

  • Χρησιμοποιήστε hasNextDouble για την εισαγωγή βάρους και ύψους.
  • Μορφοποιήστε τον ΔΜΣ με %f (2 δεκαδικά ψηφία).

Ερώτημα 9

Ζητήστε από τον χρήστη να εισάγει θερμοκρασία σε Φαρενάιτ. Μετατρέψτε τη σε Κελσίου χρησιμοποιώντας τον τύπο C = (F - 32) * 5/9 και εμφανίστε τη ως “The temperature [F]°F is equal to [C]°C.”

Οδηγίες:

  • Χρησιμοποιήστε hasNextDouble για την εισαγωγή θερμοκρασίας.
  • Μορφοποιήστε τη θερμοκρασία σε Φαρενάιτ με %f (1 δεκαδικό ψηφίο) και σε Κελσίου με %f (2 δεκαδικά ψηφία).

Ερώτημα 10

Ζητήστε από τον χρήστη να εισάγει το όνομα προϊόντος, την ποσότητα και την τιμή μονάδας. Υπολογίστε την συνολική τιμή και εμφανίστε την ως τιμολόγιο:

Product: [Product Name]
Quantity: [Quantity]
Unit Price: $[Unit Price]
Total Price: $[Total Price]

Οδηγίες:

  • Χρησιμοποιήστε hasNextInt για την ποσότητα και hasNextDouble για την τιμή μονάδας.
  • Χρησιμοποιήστε %s για το όνομα προϊόντος, %d για την ποσότητα και %f για τις τιμές (2 δεκαδικά ψηφία).

Προχωρημένο Ερώτημα 1

Δημιουργήστε μια μικρή εφαρμογή κουίζ που ρωτάει τον χρήστη μια σειρά από ερωτήσεις, καταγράφει τις απαντήσεις του και στη συνέχεια εμφανίζει μια σύνοψη στο τέλος. Το πρόγραμμα θα πρέπει να χρησιμοποιεί έναν πίνακα (array) από Strings για τις ερωτήσεις, έναν for loop για την επανάληψη των ερωτήσεων, Scanner για να καταγράψει τις απαντήσεις του χρήστη, και printf και String.format για τη μορφοποίηση της εξόδου.

Οδηγίες:

  • Δημιουργήστε έναν πίνακα (array) από String ερωτήσεις με τουλάχιστον 3 ερωτήσεις (π.χ., “What is your favorite color?”, “What is your favorite food?”, “What is your favorite movie?”).
  • Χρησιμοποιήστε έναν for loop για να επαναλάβετε τον πίνακα questions και να ρωτήσετε κάθε ερώτηση στον χρήστη.
  • Για κάθε ερώτηση, χρησιμοποιήστε Scanner για να καταγράψετε την απάντηση του χρήστη.
  • Αποθηκεύστε κάθε απάντηση σε έναν πίνακα Strings.
  • Μετά την ολοκλήρωση των ερωτήσεων, εμφανίστε μια σύνοψη των απαντήσεων του χρήστη χρησιμοποιώντας printf και String.format για μορφοποίηση.

Παράδειγμα Εξόδου:

Question 1: What is your favorite color?
Answer: Blue

Question 2: What is your favorite food?
Answer: Pizza

Question 3: What is your favorite movie?
Answer: Inception

--- Summary of Your Answers ---
1. Favorite color: Blue
2. Favorite food: Pizza
3. Favorite movie: Inception

Υποδείξεις:

  • Χρησιμοποιήστε έναν πίνακα String[] για τις ερωτήσεις και έναν άλλο πίνακα String[] για την αποθήκευση των απαντήσεων.
  • Χρησιμοποιήστε String.format για να δημιουργήσετε μια μορφοποιημένη σύνοψη για κάθε ζεύγος ερώτησης και απάντησης.
  • Χρησιμοποιήστε printf για να εμφανίσετε κάθε γραμμή της σύνοψης στην κονσόλα.
Άσκηση

6th Weekly Task

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Κλιμακωτός φόρος εισοδήματος με έλεγχο εισόδου και επανάληψη.

Εκφώνηση

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

Η κλίμακα φορολόγησης είναι η εξής. Για ετήσιο εισόδημα:

  • έως 10.000 ο φόρος είναι 0%.
  • μεταξύ 10.000 και 20.000 ο φόρος είναι 9%.
  • μεταξύ 20.000 και 30.000 ο φόρος είναι 17%.
  • μεταξύ 30.000 και 40.000 ο φόρος είναι 24%.
  • από 40.000 και πάνω, ο φόρος είναι 36%.

Για παράδειγμα, για ετήσιο εισόδημα 12.000 ο φόρος υπολογίζεται και είναι 180 (τα πρώτα 10.000 έχουν φόρο 0% και τα υπόλοιπα 2000 που απομένουν έχουν φόρο 9%). Όμοια. για ετήσιο εισόδημα 50.000, ο φόρος υπολογίζεται και είναι 8.600 (τα πρώτα 10.000 έχουν 0% φόρο, τα επόμενα 10.000, που είναι στη δεύτερη κατηγορία, έχουν φόρο 9%, τα επόμενα 10.000, που βρίσκονται στη 2η κατηγορία, έχουν 17% φόρο και τα επόμενα 10.000, που ανήκουν στην 3η κατηγορία, έχουν φόρο 24%. Τέλος, το ποσό που υπολείπεται από τα 40.000 και πάνω ανήκει στη τελευταία κατηγορία και έχει φόρο 36%.

Το ετήσιο εισόσημα δίνεται ώς είσοδος από το χρήστη. Καλείστε να ελέγξεται την ορθότητα της εισόδου ώς εξής!

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

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

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

Αν ο χρήστης πληκτόλογήσει “Yes” (ή 1 αν θέλετε να δουλέψετε με ακέραιο), τότε θα ζητάει η εφαρμογής σας εκ νέου είσοδο για το εισόδημα και θα υπολογίζει το νέο φόρο. Αν ο χρήστης πληκτρολογήσει “Νο” (ή τον αριθμό 0 κατα αντιστοιχία), τότε η εφαρμογή σας θα τερματίζει.

Άσκηση

6th Weekly Task 2

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Πέντε υπολογιστές (ρεύμα, έκπτωση, καύσιμα, δάνειο, ΦΠΑ) με while και do-while.

Εκφώνηση

Ερώτημα 1

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

Οδηγίες:

  • Δημιουργήστε μια κλάση με όνομα: ElectricityBillApp.
  • Χρησιμοποιήστε ένα while loop:
    • Για να διασφαλίσετε ότι ο χρήστης θα εισάγει θετικές τιμές για την κατανάλωση ρεύματος και την τιμή ανά kWh.
  • Χρησιμοποιήστε ένα do-while loop:
    • Για να επαναλαμβάνεται το πρόγραμμα, αν ο χρήστης εισάγει το γράμμα ‘y’ όταν ερωτηθεί αν θέλει να το επαναλάβει.
  • Προβάλλετε το συνολικό κόστος με δύο δεκαδικά ψηφία.

Ερώτημα 2

Ένα πρόγραμμα που υπολογίζει την τελική τιμή ενός προϊόντος μετά από έκπτωση. Ο χρήστης πρέπει να εισάγει την αρχική τιμή του προϊόντος και το ποσοστό έκπτωσης. Το πρόγραμμα πρέπει να αποδέχεται μόνο θετικές τιμές για την αρχική τιμή και το ποσοστό έκπτωσης. Στη συνέχεια, υπολογίζει την τελική τιμή του προϊόντος και την εμφανίζει στην οθόνη. Ο χρήστης θα ερωτηθεί αν θέλει να επαναλάβει το πρόγραμμα.

Οδηγίες:

  • Δημιουργήστε μια κλάση με όνομα: DiscountCalculatorApp.
  • Χρησιμοποιήστε ένα while loop:
    • Για να διασφαλίσετε ότι ο χρήστης θα εισάγει θετικές τιμές για την αρχική τιμή και το ποσοστό έκπτωσης.
  • Χρησιμοποιήστε ένα do-while loop:
    • Για να επαναλαμβάνεται το πρόγραμμα, αν ο χρήστης εισάγει το γράμμα ‘y’ όταν ερωτηθεί αν θέλει να το επαναλάβει.
  • Προβάλλετε την τελική τιμή με δύο δεκαδικά ψηφία.

Ερώτημα 3

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

Οδηγίες:

  • Δημιουργήστε μια κλάση με όνομα: FuelCostApp.
  • Χρησιμοποιήστε ένα while loop:
    • Για να διασφαλίσετε ότι ο χρήστης θα εισάγει θετικές τιμές για την ποσότητα καυσίμου και την τιμή ανά λίτρο.
  • Χρησιμοποιήστε ένα do-while loop:
    • Για να επαναλαμβάνεται το πρόγραμμα, αν ο χρήστης εισάγει το γράμμα ‘y’ όταν ερωτηθεί αν θέλει να το επαναλάβει.
  • Προβάλλετε το συνολικό κόστος καυσίμου με δύο δεκαδικά ψηφία.

Ερώτημα 4

Ένα πρόγραμμα που υπολογίζει το συνολικό ποσό που πρέπει να πληρωθεί για ένα δάνειο, συμπεριλαμβανομένου του τόκου. Ο χρήστης πρέπει να εισάγει το ποσό του δανείου και το ετήσιο επιτόκιο. Το πρόγραμμα πρέπει να αποδέχεται μόνο θετικές τιμές για το ποσό και το επιτόκιο. Στη συνέχεια, υπολογίζει και εμφανίζει το συνολικό ποσό που πρέπει να επιστραφεί μετά από 1 έτος. Ο χρήστης θα ερωτηθεί αν θέλει να επαναλάβει το πρόγραμμα.

Οδηγίες:

  • Δημιουργήστε μια κλάση με όνομα: LoanCalculatorApp.
  • Χρησιμοποιήστε ένα while loop:
    • Για να διασφαλίσετε ότι ο χρήστης θα εισάγει θετικές τιμές για το ποσό του δανείου και το επιτόκιο.
  • Χρησιμοποιήστε ένα do-while loop:
    • Για να επαναλαμβάνεται το πρόγραμμα, αν ο χρήστης εισάγει το γράμμα ‘y’ όταν ερωτηθεί αν θέλει να το επαναλάβει.
  • Προβάλλετε το συνολικό ποσό με δύο δεκαδικά ψηφία.

Ερώτημα 5

Ένα πρόγραμμα που υπολογίζει την τελική τιμή ενός προϊόντος λαμβάνοντας υπόψη το ΦΠΑ και μια έκπτωση. Ο χρήστης πρέπει να εισάγει την αρχική τιμή του προϊόντος, το ποσοστό ΦΠΑ και το ποσοστό έκπτωσης. Το πρόγραμμα πρέπει να αποδέχεται μόνο θετικές τιμές για την τιμή, το ΦΠΑ και την έκπτωση. Στη συνέχεια, υπολογίζει την τελική τιμή του προϊόντος και την εμφανίζει στην οθόνη. Ο χρήστης θα ερωτηθεί αν θέλει να επαναλάβει το πρόγραμμα.

Οδηγίες:

  • Δημιουργήστε μια κλάση με όνομα: PriceCalculatorApp.
  • Χρησιμοποιήστε ένα while loop:
    • Για να διασφαλίσετε ότι ο χρήστης θα εισάγει θετικές τιμές για την αρχική τιμή, το ποσοστό ΦΠΑ και το ποσοστό έκπτωσης.
  • Χρησιμοποιήστε ένα do-while loop:
    • Για να επαναλαμβάνεται το πρόγραμμα, αν ο χρήστης εισάγει το γράμμα ‘y’ όταν ερωτηθεί αν θέλει να το επαναλάβει.
  • Προβάλλετε την τελική τιμή με δύο δεκαδικά ψηφία.
Άσκηση

Small Quiz

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Πόσοι συνδυασμοί K αριθμών από 1 έως N έχουν άθροισμα N;

Εκφώνηση

Given a number N, the task is to count the combinations of K numbers from 1 to N having a sum equal to N, with duplicates allowed.

Examples:

Input: N = 7, K = 3

Output:15

Explanation:The combinations which lead to the sum N = 7 are: {1, 1, 5}, {1, 5, 1}, {5, 1, 1}, {2, 1, 4}, {1, 2, 4}, {1, 4, 2}, {2, 4, 1}, {4, 1, 2}, {4, 2, 1}, {3, 1, 3}, {1, 3, 3}, {3, 3, 1}, {2, 2, 3}, {2, 3, 2}, {3, 2, 2}

Input: N = 5, K = 5

Output: 1

Explanation: {1, 1, 1, 1, 1} is the only combination.

Άσκηση

8th Weekly Task

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Πίνακες, δισδιάστατοι πίνακες και στατικές μέθοδοι.

Εκφώνηση

Ερώτημα 1

Δημιουργήστε έναν πίνακα τύπου double που περιέχει θερμοκρασίες σε βαθμούς Κελσίου. Υπολογίστε τον μέσο όρο των θερμοκρασιών, μετατρέψτε τις σε Φαρενάιτ και υπολογίστε ξανά τον μέσο όρο για τις θερμοκρασίες σε Φαρενάιτ.

Οδηγίες:

  • Δημιουργήστε έναν πίνακα τύπου double που περιέχει θερμοκρασίες σε βαθμούς Κελσίου.
  • Υπολογίστε και εκτυπώστε τον μέσο όρο των θερμοκρασιών σε βαθμούς Κελσίου.
  • Μετατρέψτε κάθε θερμοκρασία σε Φαρενάιτ.
  • Υπολογίστε και εκτυπώστε τον μέσο όρο των θερμοκρασιών σε Φαρενάιτ.
  • Μαθηματικός τύπος: °F = (°C × 9/5) + 32

Παράδειγμα εισόδου:

[15.0, 20.0, 25.0, 30.0]

Παράδειγμα εξόδου:

Average in Celsius: 22.50
Average in Fahrenheit: 72.50

Ερώτημα 2

Δημιουργήστε έναν πίνακα συμβολοσειρών (String) και έναν πίνακα ακέραιων (int). Εκτυπώστε τα δεδομένα των πινάκων, ενημερώστε ορισμένες τιμές στον πίνακα int και εκτυπώστε ξανά τα δεδομένα.

Οδηγίες:

  • Δημιουργήστε έναν πίνακα τύπου String με ονόματα.
  • Δημιουργήστε έναν πίνακα τύπου int με ηλικίες.
  • Εκτυπώστε τα δεδομένα των δύο πινάκων.
  • Αλλάξτε δύο τιμές στον πίνακα int.
  • Εκτυπώστε ξανά τα δεδομένα των δύο πινάκων.

Παράδειγμα εισόδου:

["Alice", "Bob", "Charlie"]
[20, 25, 30]

Παράδειγμα εξόδου:

Alice: 20
Bob: 25
Charlie: 30
Updated Data:
Alice: 20
Bob: 26
Charlie: 32

Ερώτημα 3

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

Οδηγίες:

  • Δημιουργήστε έναν πίνακα 2 διαστάσεων (int) που περιέχει προϊόντα και τις τιμές τους.
  • Εκτυπώστε τα δεδομένα του πίνακα.
  • Υπολογίστε και εκτυπώστε το άθροισμα όλων των τιμών.
  • Εντοπίστε και εκτυπώστε την υψηλότερη τιμή στον πίνακα.

Παράδειγμα εισόδου:

[
[1, 10], // Product 1, Price 10
[2, 20], // Product 2, Price 20
[3, 30]  // Product 3, Price 30
]

Παράδειγμα εξόδου:

Total Price: 60
Highest Price: 30

Ερώτημα 4

Μεταφέρετε τον υπολογισμό της μετατροπής θερμοκρασίας από το Ερώτημα 1 σε μια ξεχωριστή στατική μέθοδο.

Οδηγίες:

  • Δημιουργήστε μια στατική μέθοδο convertToFahrenheit που θα μετατρέπει βαθμούς Κελσίου σε Φαρενάιτ.
  • Επαναχρησιμοποιήστε τη μέθοδο στην κύρια κλάση για να μετατρέψετε τις θερμοκρασίες του πίνακα.
  • Εκτυπώστε τις μετατρεπόμενες θερμοκρασίες.

Παράδειγμα εισόδου:

[10.0, 15.0, 20.0]

Παράδειγμα εξόδου:

Temperatures in Fahrenheit: [50.0, 59.0, 68.0]

Ερώτημα 5

Δημιουργήστε μια μέθοδο που θα υπολογίζει και θα επιστρέφει τη μέση τιμή ενός πίνακα double.

Οδηγίες:

  • Δημιουργήστε μια στατική μέθοδο calculateAverage που θα υπολογίζει τη μέση τιμή ενός πίνακα double.
  • Επιστρέψτε τη μέση τιμή και εκτυπώστε την στην κύρια μέθοδο.

Παράδειγμα εισόδου:

[5.0, 10.0, 15.0]

Παράδειγμα εξόδου:

Average: 10.0

Ερώτημα 6

Δημιουργήστε μια μέθοδο που θα βρίσκει τη μέγιστη τιμή σε έναν πίνακα int.

Οδηγίες:

  • Δημιουργήστε μια στατική μέθοδο findMax που θα επιστρέφει το μέγιστο στοιχείο ενός πίνακα int.
  • Επιστρέψτε και εκτυπώστε τη μέγιστη τιμή στην κύρια μέθοδο.

Παράδειγμα εισόδου:

[1, 3, 7, 2, 9]

Παράδειγμα εξόδου:

Maximum Value: 9

Ερώτημα 7

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

Οδηγίες:

  • Δημιουργήστε έναν πίνακα int με αριθμητικά δεδομένα.
  • Δημιουργήστε μια στατική μέθοδο calculateSum για να υπολογίζει το άθροισμα των στοιχείων του πίνακα.
  • Δημιουργήστε μια στατική μέθοδο findMax για να βρίσκει τη μέγιστη τιμή.
  • Δημιουργήστε μια στατική μέθοδο calculateAverage για να υπολογίζει τη μέση τιμή.
  • Χρησιμοποιήστε τις μεθόδους στην κύρια μέθοδο και εκτυπώστε τα αποτελέσματα.

Παράδειγμα εισόδου:

[5, 10, 15, 20]

Παράδειγμα εξόδου:

Sum: 50
Maximum Value: 20
Average: 12.50

Ερώτημα 8

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

Οδηγίες:

  • Δημιουργήστε έναν πίνακα double με αρχικές τιμές προϊόντων.
  • Δημιουργήστε μια μέθοδο applyTax που θα προσθέτει έναν σταθερό φόρο (π.χ. 24%) σε κάθε τιμή.
  • Δημιουργήστε μια μέθοδο calculateTotal για να υπολογίζει το συνολικό ποσό.
  • Δημιουργήστε μια μέθοδο printPrices για να εκτυπώνει τις ενημερωμένες τιμές.
  • Χρησιμοποιήστε τις μεθόδους στην κύρια μέθοδο.
  • Μαθηματικός τύπος: Price with Tax = Price + (Price × Tax Rate / 100)

Παράδειγμα εισόδου:

[10.0, 20.0, 30.0]

Παράδειγμα εξόδου:

Prices after Tax: [12.40, 24.80, 37.20]
Total Price: 74.40

Ερώτημα 9

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

Οδηγίες:

  • Δημιουργήστε έναν πίνακα double με θερμοκρασίες σε βαθμούς Κελσίου.
  • Δημιουργήστε μια μέθοδο convertToFahrenheit για να μετατρέπετε κάθε θερμοκρασία σε Φαρενάιτ.
  • Δημιουργήστε μια μέθοδο findMin για να βρίσκει την ελάχιστη τιμή στον πίνακα.
  • Δημιουργήστε μια μέθοδο calculateRange για να υπολογίζει το εύρος θερμοκρασιών (μέγιστο - ελάχιστο).
  • Εκτυπώστε τα αποτελέσματα στην κύρια μέθοδο.

Παράδειγμα εισόδου:

[15.0, 20.0, 25.0, 30.0]

Παράδειγμα εξόδου:

Temperatures in Fahrenheit: [59.0, 68.0, 77.0, 86.0]
Minimum Temperature: 15.0
Temperature Range: 15.0

Ερώτημα 10

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

Οδηγίες:

  • Δημιουργήστε έναν πίνακα int με αριθμητικά δεδομένα.
  • Δημιουργήστε μια μέθοδο isEven για να ελέγχει αν ένας αριθμός είναι ζυγός ή μονοός.
  • Δημιουργήστε μια μέθοδο countEvens για να υπολογίζει το πλήθος των ζυγών αριθμών στον πίνακα.
  • Δημιουργήστε μια μέθοδο addNumberToArray για να προσθέτει έναν σταθερό αριθμό σε κάθε στοιχείο του πίνακα.
  • Εκτυπώστε τα αποτελέσματα στην κύρια μέθοδο.

Παράδειγμα εισόδου:

[1, 2, 3, 4, 5]
Προσθήκη: 2

Παράδειγμα εξόδου:

Even Numbers: 2
Updated Array: [3, 4, 5, 6, 7]
Άσκηση

9th Weekly Task

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

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

Εκφώνηση

Ερώτημα 1

α) Δημιουργήστε μία κλάση στο πρόγραμμά σας με το όνομα WeatherAnalysisApp.

β) Γράψτε μία στατική μέθοδο belowFreezingDays που λαμβάνει έναν πίνακα θερμοκρασιών (σε βαθμούς Κελσίου) και εκτυπώνει τις ημέρες που η θερμοκρασία ήταν κάτω από 0 βαθμούς.

γ) Γράψτε μία στατική μέθοδο coldestTemperature που λαμβάνει έναν πίνακα θερμοκρασιών και εκτυπώνει τη χαμηλότερη θερμοκρασία μαζί με την ημέρα.

δ) Γράψτε μία στατική μέθοδο convertToKelvin που λαμβάνει έναν πίνακα θερμοκρασιών σε βαθμούς Κελσίου και τις μετατρέπει σε βαθμούς Κέλβιν σύμφωνα με τον τύπο:

Kelvin = Celsius + 273.15

ε) Γράψτε μία στατική μέθοδο displayTemperatures που λαμβάνει έναν πίνακα και εκτυπώνει τις θερμοκρασίες σε Κέλβιν μαζί με την ημέρα.

στ) Προσθέστε σχόλια στο πρόγραμμα για να εξηγήσετε τον κώδικα.

Παράδειγμα Εξόδου:

Days with temperatures below freezing (0°C):
Day 1: -5.00°C
Day 4: -2.00°C
Day 6: -7.50°C
The coldest temperature was on Day 6: -7.50°C
Temperatures in Kelvin:
Day 1: 268.15 K
Day 2: 273.15 K
Day 3: 276.65 K
Day 4: 271.15 K
Day 5: 274.15 K
Day 6: 265.65 K
Day 7: 278.15 K

Ερώτημα 2

α) Δημιουργήστε μία κλάση στο πρόγραμμά σας με το όνομα SalesDataApp.

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

γ) Γράψτε μία στατική μέθοδο highestSales που λαμβάνει έναν πίνακα πωλήσεων και εκτυπώνει την ημέρα με τις υψηλότερες πωλήσεις.

δ) Γράψτε μία στατική μέθοδο convertToDollars που λαμβάνει έναν πίνακα πωλήσεων σε ευρώ και μετατρέπει το ποσό σε δολάρια χρησιμοποιώντας την εξής φόρμουλα:

Dollars = Euros × 1.1

ε) Γράψτε μία στατική μέθοδο displaySales που λαμβάνει έναν πίνακα και εκτυπώνει τις πωλήσεις (σε δολάρια) με την αντίστοιχη ημέρα.

στ) Προσθέστε σχόλια στο πρόγραμμα για να εξηγήσετε τον κώδικα.

Παράδειγμα Εξόδου:

Days with sales above the target of 1000.00 units:
Day 2: 1200.50 units
Day 4: 1100.00 units
Day 5: 1300.50 units
Day 7: 1500.00 units
The highest sales were on Day 7: 1500.00 units
Sales amounts in Dollars:
Day 1: 990.00 USD
Day 2: 1320.55 USD
Day 3: 825.00 USD
Day 4: 1210.00 USD
Day 5: 1430.55 USD
Day 6: 880.00 USD
Day 7: 1650.00 USD

Ερώτημα 3

α) Δημιουργήστε μία κλάση στο πρόγραμμά σας με το όνομα FitnessTrackerApp.

β) Γράψτε μία στατική μέθοδο aboveTargetSteps που λαμβάνει έναν πίνακα βημάτων και εκτυπώνει τις ημέρες όπου τα βήματα ξεπέρασαν έναν συγκεκριμένο στόχο (π.χ., 10,000 βήματα).

γ) Γράψτε μία στατική μέθοδο highestSteps που λαμβάνει έναν πίνακα βημάτων και εκτυπώνει την ημέρα με τον μεγαλύτερο αριθμό βημάτων.

δ) Γράψτε μία στατική μέθοδο convertToKilometres που λαμβάνει έναν πίνακα βημάτων και μετατρέπει τα βήματα σε χιλιόμετρα με τη φόρμουλα:

Kilometres = Steps × 0.0008

ε) Γράψτε μία στατική μέθοδο displaySteps που λαμβάνει έναν πίνακα και εκτυπώνει τις αποστάσεις (σε χιλιόμετρα) με την αντίστοιχη ημέρα.

στ) Προσθέστε σχόλια στον κώδικα για να εξηγήσετε τη λειτουργία του.

Παράδειγμα Εξόδου:

Days with steps above the target of 10000 steps:
Day 2: 12000 steps
Day 4: 15000 steps
Day 5: 11000 steps
Day 7: 14000 steps
The highest steps were on Day 4: 15000 steps
Distances in Kilometres:
Day 1: 6.40 km
Day 2: 9.60 km
Day 3: 7.60 km
Day 4: 12.00 km
Day 5: 8.80 km
Day 6: 5.60 km
Day 7: 11.20 km
Άσκηση

Week 10 Assessment

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Πρώτοι και τέλειοι αριθμοί με μεθόδους και μενού επιλογών.

Εκφώνηση

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

Το πρόγραμμα σας θα πρέπει να περιλαμβάνει διάφορες μεθόδους που να υλοποιούν συγκεκριμένες λειτουργίες και να απαντούν σε διάφορα ερωτήματα.

  1. Υλοποίηση μεθόδου για τον έλεγχο πρώτων αριθμών: Υλοποιήστε μια μέθοδο isPrime(int n) που δέχεται έναν ακέραιο αριθμό n και επιστρέφει true αν ο αριθμός είναι πρώτος και false διαφορετικά.Θυμηθείτε ότι ένας αριθμός είναι πρώτος αν διαιρείται μόνο από το 1 και τον εαυτό του.

  2. Υλοποίηση μεθόδου για εύρεση τέλειων αριθμών: Υλοποιήστε μια μέθοδο isPerfect(int n) που δέχεται έναν ακέραιο αριθμό n και επιστρέφει true αν ο αριθμός είναι τέλειος. Ένας αριθμός είναι τέλειος αν είναι ίσος με το άθροισμα των θετικών διαιρετών του (εκτός του εαυτού του).

  3. Λίστα πρώτων αριθμών σε ένα εύρος: Υλοποιήστε μια μέθοδο getPrimesInRange(int start, int end) που δέχεται δύο ακέραιους αριθμούς start και end και επιστρέφει έναν πίνακα με όλους τους πρώτους αριθμούς στο συγκεκριμένο εύρος.

  4. Λίστα τέλειων αριθμών σε ένα εύρος: Υλοποιήστε μια μέθοδο getPerfectNumbersInRange(int start, int end) που δέχεται δύο ακέραιους αριθμούς start και end και επιστρέφει έναν πίνακα με όλους τους τέλειους αριθμούς στο συγκεκριμένο εύρος.

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

    • Έλεγχο αν ένας αριθμός είναι πρώτος.
    • Έλεγχο αν ένας αριθμός είναι τέλειος.
    • Εύρεση όλων των πρώτων αριθμών σε ένα εύρος.
    • Εύρεση όλων των τέλειων αριθμών σε ένα εύρος.
    • Έξοδο από το πρόγραμμα.

Επιπλέον Απαιτήσεις:

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

Παρατίθενται κάποιες ενδεικτικές εκτελέσεις στις οποίες μπορείτε να δείτε μια εκδοχή του προγράμματος που ζητείται και πώς συμπεριφέρεται:

Είσοδος:

Επιλογή 1. Έλεγχος αν ένας αριθμός είναι πρώτος
Εισάγετε αριθμό: 29

Έξοδος:

Ο αριθμός 29 είναι πρώτος.

Είσοδος:

Επιλογή 3. Εύρεση όλων των πρώτων αριθμών σε ένα εύρος
Εισάγετε αρχή του εύρους: 10
Εισάγετε τέλος του εύρους: 50

Έξοδος:

Οι πρώτοι αριθμοί στο εύρος [10, 50] είναι:
11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47

Είσοδος:

Επιλογή 4. Εύρεση όλων των τέλειων αριθμών σε ένα εύρος
Εισάγετε αρχή του εύρους: 1
Εισάγετε τέλος του εύρους: 1000

Έξοδος:

Οι τέλειοι αριθμοί στο εύρος [1, 1000] είναι: 6, 28, 496
Άσκηση

11th Weekly Task

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Κληρονομικότητα σε τρία επίπεδα: οχήματα, υπάλληλοι, σχήματα και ζώα.

Εκφώνηση

Ερώτημα 1

Δημιουργήστε μια κλάση με όνομα Vehicle. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητες speed (τύπος int) και fuel (τύπος double).
  • Constructor που θα δέχεται ως παραμέτρους την αρχική ταχύτητα και το καύσιμο.
  • Private ιδιότητες και τις αντίστοιχες μεθόδους get και set.
  • Μέθοδο refuel(double amount) που θα προσθέτει την τιμή amount στην ιδιότητα fuel.
  • Μέθοδο printStats() που θα εμφανίζει την ταχύτητα και το καύσιμο του οχήματος.

Δημιουργήστε μια κλάση Car που κληρονομεί την Vehicle. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητα brand (τύπος String), που θα δηλώνει τη μάρκα του αυτοκινήτου.
  • Constructor που θα δέχεται ως παραμέτρους τα speed, fuel και brand, και θα καλεί τον constructor της γονικής κλάσης χρησιμοποιώντας super.
  • Μέθοδο accelerate(int increment) που θα αυξάνει την ταχύτητα κατά την τιμή increment, αλλά μόνο εάν υπάρχει καύσιμο (π.χ., fuel > 0).
  • Υπερκαλυμμένη μέθοδο printStats() που θα καλεί τη μέθοδο printStats() της γονικής κλάσης χρησιμοποιώντας super και θα εμφανίζει επιπλέον τη μάρκα του αυτοκινήτου.

Δημιουργήστε μια κλάση ElectricCar που κληρονομεί την Car. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητα batteryLevel (τύπος int, από 0 έως 100), που θα δηλώνει το ποσοστό φόρτισης της μπαταρίας.
  • Constructor που θα δέχεται ως παραμέτρους τα speed, fuel, brand και batteryLevel, και θα καλεί τον constructor της γονικής κλάσης χρησιμοποιώντας super.
  • Μέθοδο charge(int percentage) που θα αυξάνει το επίπεδο της μπαταρίας κατά το ποσοστό percentageχωρίς να ξεπερνά το 100.
  • Υπερκαλυμμένη μέθοδο accelerate(int increment) που θα ελέγχει εάν η μπαταρία έχει αρκετή ενέργεια (batteryLevel > 10) πριν αυξήσει την ταχύτητα.
  • Υπερκαλυμμένη μέθοδο printStats() που θα εμφανίζει επιπλέον το επίπεδο της μπαταρίας.

Στην κύρια κλάση App, κάντε τα εξής:

  • Δημιουργήστε ένα αντικείμενο της Vehicle και καλέστε όλες τις μεθόδους του.
  • Δημιουργήστε ένα αντικείμενο της Car και καλέστε όλες τις μεθόδους του, συμπεριλαμβανομένων και των μεθόδων που κληρονόμησε.
  • Δημιουργήστε ένα αντικείμενο της ElectricCar και καλέστε όλες τις μεθόδους του, επιδεικνύοντας τη χρήση της super για πρόσβαση στις ιδιότητες της γονικής κλάσης.

Ερώτημα 2

Δημιουργήστε μια κλάση Employee. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητες name (τύπος String), salary (τύπος double).
  • Constructor που θα δέχεται ως παραμέτρους το όνομα και τον μισθό.
  • Private ιδιότητες και τις αντίστοιχες μεθόδους get και set.
  • Μέθοδο increaseSalary(double percentage) που θα αυξάνει τον μισθό κατά την τιμή percentage.
  • Μέθοδο printDetails() που θα εμφανίζει το όνομα και τον μισθό του υπαλλήλου.

Δημιουργήστε μια κλάση Manager που κληρονομεί την Employee. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητα department (τύπος String), που θα δηλώνει το τμήμα στο οποίο εργάζεται.
  • Constructor που θα δέχεται ως παραμέτρους το name, το salary και το department, και θα καλεί τον constructor της γονικής κλάσης χρησιμοποιώντας super.
  • Υπερκαλυμμένη μέθοδο printDetails() που θα καλεί τη μέθοδο printDetails() της γονικής κλάσης χρησιμοποιώντας super και θα εμφανίζει επιπλέον το τμήμα.

Δημιουργήστε μια κλάση Executive που κληρονομεί την Manager. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητα bonus (τύπος double), που θα δηλώνει το μπόνους που λαμβάνει ο διευθυντής.
  • Constructor που θα δέχεται ως παραμέτρους το name, το salary, το department και το bonus, και θα καλεί τον constructor της γονικής κλάσης χρησιμοποιώντας super.
  • Μέθοδο calculateTotalCompensation() που θα επιστρέφει το άθροισμα του μισθού και του μπόνους.
  • Υπερκαλυμμένη μέθοδο printDetails() που θα εμφανίζει το όνομα, τον μισθό, το τμήμα και το συνολικό εισόδημα (μισθός + μπόνους).

Στην κύρια κλάση App, κάντε τα εξής:

  • Δημιουργήστε ένα αντικείμενο της Employee και καλέστε όλες τις μεθόδους του.
  • Δημιουργήστε ένα αντικείμενο της Manager και καλέστε όλες τις μεθόδους του, συμπεριλαμβανομένων και των μεθόδων που κληρονόμησε.
  • Δημιουργήστε ένα αντικείμενο της Executive και καλέστε όλες τις μεθόδους του, επιδεικνύοντας τη χρήση της super για πρόσβαση στις ιδιότητες της γονικής κλάσης.

Ερώτημα 3

Δημιουργήστε μια κλάση Shape. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητα color (τύπος String), που θα δηλώνει το χρώμα του σχήματος.
  • Constructor που θα δέχεται ως παράμετρο το color.
  • Private ιδιότητα και την αντίστοιχη μέθοδο get και set.
  • Μέθοδο calculateArea() που θα επιστρέφει 0 (double).
  • Μέθοδο printDetails() που θα εμφανίζει το χρώμα του σχήματος.

Δημιουργήστε μια κλάση Rectangle που κληρονομεί την Shape. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητες width και height (τύπος double).
  • Constructor που θα δέχεται ως παραμέτρους το color, το width και το height, και θα καλεί τον constructor της γονικής κλάσης χρησιμοποιώντας super.
  • Υπερκαλυμμένη μέθοδο calculateArea() που θα υπολογίζει και θα επιστρέφει το εμβαδόν του ορθογωνίου (πλάτος × ύψος).
  • Υπερκαλυμμένη μέθοδο printDetails() που θα καλεί τη μέθοδο printDetails() της γονικής κλάσης χρησιμοποιώντας super και θα εμφανίζει επιπλέον το πλάτος, το ύψος και το εμβαδόν του ορθογωνίου.

Δημιουργήστε μια κλάση Circle που κληρονομεί την Shape. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητα radius (τύπος double), που θα δηλώνει την ακτίνα του κύκλου.
  • Constructor που θα δέχεται ως παραμέτρους το color και το radius, και θα καλεί τον constructor της γονικής κλάσης χρησιμοποιώντας super.
  • Υπερκαλυμμένη μέθοδο calculateArea() που θα υπολογίζει και θα επιστρέφει το εμβαδόν του κύκλου (π.χ., π × ακτίνα × ακτίνα).
  • Υπερκαλυμμένη μέθοδο printDetails() που θα καλεί τη μέθοδο printDetails() της γονικής κλάσης χρησιμοποιώντας super και θα εμφανίζει επιπλέον την ακτίνα και το εμβαδόν του κύκλου.

Στην κύρια κλάση App, κάντε τα εξής:

  • Δημιουργήστε ένα αντικείμενο της Shape και καλέστε τη μέθοδο printDetails() για να ελέγξετε τη βασική συμπεριφορά της.
  • Δημιουργήστε ένα αντικείμενο της Rectangle, ορίστε τιμές για πλάτος και ύψος και καλέστε τις μεθόδους calculateArea() και printDetails().
  • Δημιουργήστε ένα αντικείμενο της Circle, ορίστε τιμή για την ακτίνα και καλέστε τις μεθόδους calculateArea() και printDetails().

Ερώτημα 4

Δημιουργήστε μια κλάση Animal. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητες name (τύπος String) και age (τύπος int).
  • Constructor που θα δέχεται ως παραμέτρους το name και το age.
  • Private ιδιότητες και τις αντίστοιχες μεθόδους get και set.
  • Μέθοδο makeSound() που θα επιστρέφει μια γενική συμβολοσειρά όπως “Some generic animal sound”.
  • Μέθοδο printDetails() που θα εμφανίζει το όνομα και την ηλικία του ζώου.

Δημιουργήστε μια κλάση Dog που κληρονομεί την Animal. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητα breed (τύπος String), που θα δηλώνει τη φυλή του σκύλου.
  • Constructor που θα δέχεται ως παραμέτρους το name, το age και το breed, και θα καλεί τον constructor της γονικής κλάσης χρησιμοποιώντας super.
  • Υπερκαλυμμένη μέθοδο makeSound() που θα επιστρέφει τη συμβολοσειρά “Woof Woof!”.
  • Υπερκαλυμμένη μέθοδο printDetails() που θα καλεί τη μέθοδο printDetails() της γονικής κλάσης χρησιμοποιώντας super και θα εμφανίζει επιπλέον τη φυλή του σκύλου.

Δημιουργήστε μια κλάση Dolphin που κληρονομεί την Animal. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητα canPerformTricks (τύπος boolean), που θα δηλώνει αν το δελφίνι μπορεί να εκτελεί κόλπα.
  • Constructor που θα δέχεται ως παραμέτρους το name, το age και το canPerformTricks, και θα καλεί τον constructor της γονικής κλάσης χρησιμοποιώντας super.
  • Υπερκαλυμμένη μέθοδο makeSound() που θα επιστρέφει τη συμβολοσειρά “Click Click!”.
  • Υπερκαλυμμένη μέθοδο printDetails() που θα καλεί τη μέθοδο printDetails() της γονικής κλάσης χρησιμοποιώντας super και θα εμφανίζει επιπλέον αν το δελφίνι μπορεί να εκτελεί κόλπα.

Δημιουργήστε μια κλάση Eagle που κληρονομεί την Animal. Η κλάση αυτή πρέπει να έχει:

  • Ιδιότητα wingSpan (τύπος double), που θα δηλώνει το άνοιγμα των φτερών του αετού.
  • Constructor που θα δέχεται ως παραμέτρους το name, το age και το wingSpan, και θα καλεί τον constructor της γονικής κλάσης χρησιμοποιώντας super.
  • Υπερκαλυμμένη μέθοδο makeSound() που θα επιστρέφει τη συμβολοσειρά “Screech!”.
  • Υπερκαλυμμένη μέθοδο printDetails() που θα καλεί τη μέθοδο printDetails() της γονικής κλάσης χρησιμοποιώντας super και θα εμφανίζει επιπλέον το άνοιγμα των φτερών.

Στην κύρια κλάση App, κάντε τα εξής:

  • Δημιουργήστε ένα αντικείμενο της Animal και καλέστε τη μέθοδο makeSound() και τη μέθοδο printDetails().
  • Δημιουργήστε ένα αντικείμενο της Dog με όνομα, ηλικία και φυλή και καλέστε όλες τις μεθόδους του.
  • Δημιουργήστε ένα αντικείμενο της Dolphin με όνομα, ηλικία και την τιμή για το canPerformTricks και καλέστε όλες τις μεθόδους του.
  • Δημιουργήστε ένα αντικείμενο της Eagle με όνομα, ηλικία και άνοιγμα φτερών και καλέστε όλες τις μεθόδους του.
Άσκηση

Επαναληπτική Άσκηση 1

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Ένα παιχνίδι μονομαχίας με αντικείμενα: ζωή, ελιξίριο και «τελειωτικό χτύπημα».

Εκφώνηση

Γράψτε κώδικα με αντικειμενοστραφή χαρακτήρα ώστε να δημιουργήσετε ένα παιχνίδι. Στο παιχνίδι αυτό έχετε ένα χαρακτήρα πολεμιστή, ο οποίος έχει

  • διάφορες ιδιότητες (μέχρι 3 που θα επιλέξετε εσείς),
  • έχει επίπεδο ζωής,
  • επίπεδο ελιξιρίου (elixir) καθώς και
  • μια δυνατότητα για «το τελειωτικό χτύπημα» (kill strike).

Θα πρέπει να υλοποιήσετε τη παρακάτω λογική:

Αρχικά ο χαρακτήρας σας έχει επίπεδο ζωής στο μέγιστο καθώς και επίπεδο elixir. Όταν κάνει κάποιο χτύπημα (hit) μειώνετε κάποιο ποσό από το ελιξίριό του. Το ελιξίριο αυτό ανανεώνεται μετά από κάθε χτύπημα που δέχεται από τον αντίπαλό σας. Ο κάθε χαρακτήρας έχει έως 3 ιδιότητες. Αυτές τις επιλέγετε εσείς και μπορεί να είναι οτιδήποτε (πχ με μια ιδιότητα ξανα γεμίζετε τη ζωή του χαρακτήρα, με μια άλλη μπορείτε να κάνετε χτύπημα μεγαλύτερης δύναμης). Η χρήση της ειδικής δυνατότητας χρησιμοποιεί όλο το ελιξίριό σας το οποίο μπορεί να γεμίσει πλήρως μετά από 3 χτυπήματα από τον αντίπαλό σας. Τέλος το kill strike που έχετε, έχει ένα συγκεκριμένο νούμερο ζωής που θα αφαιρέσει από τον αντίπαλό σας και σας επιτρέπετε να το χρησιμοποιήσετε μόνο αν αυτό θα είναι το τελειωτικό χτύπημα που μπορεί να δεχτεί ο αντίπαλός σας και να χάσει τη μάχη.

  1. Δημιουργήστε τις απαιτούμενες κλάσεις για τους χαρακτήρες (έναν αντίπαλο και τον δικό σας).

  2. Δημιουργήστε τις απαιτούμενες μεθόδους ώστε όλες οι κινήσεις του χαρακτήρα σας να έχουν λειτουργικότητα. Πχ. Μπορείτε να φτιάξετε μια μέθοδο receive_hit, την οποία θα καλεί ο αντίπαλός σας. Αυτή θα δέχεται για όρισμα μία τιμή ακεραίου η οποία θα αφαιρείται από τη ζωή σας και θα επιστρέφει στον αντίπαλό σας που τη κάλεσε το επίπεδο της υπόλοιπης ζωής σας. Ταυτόχρονα, σε αυτή τη συνάρτηση, επειδή όταν καλείτε δέχεστε χτύπημα, πρέπει να προσθέτετε μια σταθερή ποσότητα στο ελιξίριό σας. Σε περίπτωση που έχει μηδενιστεί η ζωή σας, επιστρέφετε -1 και σηματοδοτείτε με μια εκτύπωση ότι χάσατε τη μονομαχία.

  3. Υλοποιήστε μια μέθοδο του χαρακτήρα σας που θα υπολογίζει την κατανάλωση του ελιξίριου ανάλογα με το ποια ενέργεια κάνατε. Πχ, η μέθοδος αυτή μπορεί να δέχεται ως όρισμα κάποιο αλφαριθμητικό ή κάποιο νούμερο που να υποδηλώνει το είδος της ενέργειας (αν ήταν απλό χτύπημα, χρήση κάποιας ιδιότητας ή kill strike) και να αφαιρεί το αντίστοιχο ποσό ελιξιρίου από το υπόλοιπό σας.

  4. Τέλος, να φτιάξετε μια μέθοδο η οποία θα καλείτε από εσάς και θα είναι μέθοδος του αντικειμένου του αντιπάλου σας, ώστε να στέλνετε σε αυτόν τα δικά σας χτυπήματα. Θα δίνετε ως όρισμα μια τυχαία ακέραια τιμή η οποία θα αφαιρείτε από τη ζωή του αντιπάλου σας. Αν η ζωή του αντιπάλου σας (που σας επιστρέφετε σαν την δική σας μέθοδο στο ερώτημα 2) έχει πέσει τόσο όσο χρειάζεται για να του επιφέρετε το δικό σας kill strike θα πρέπει να το εντοπίσετε και να του το επιφέρετε! Για το kill strike το όρισμα που θα περνάτε στη συνάρτηση θα πρέπει να είναι η τιμή 3210.

Σημείωση. Όλοι οι έλεγχοι που θα πραγματοποιήσετε θα γίνονται και από το αντίπαλό σας. Οπότε να παίξετε τίμια!

Άσκηση

Προσομοίωση Αντιδραστήρα RBMK σε Java με Πιθανότητα Έκρηξης

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

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

Εκφώνηση

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

Καλείστε να γράψετε πρόγραμμα που να περιλαμβάνει:

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

Βασικές Έννοιες που θα Εφαρμοστούν:

  • Κλάσεις και Αντικείμενα: Μοντελοποιήστε τα συστατικά του αντιδραστήρα (π.χ. FuelRod, ControlRod, CoolingSystem, ReactorCore) ως Java κλάσεις.
  • Ενθυλάκωση: Χρησιμοποιήστε ιδιωτικά πεδία (fields) και δημόσιες μεθόδους getter και setter για να ελέγχετε την πρόσβαση στα δεδομένα κάθε συστατικού.
  • Κληρονομικότητα: Δημιουργήστε μια βασική κλάση για κοινή συμπεριφορά (ReactorComponent) και δημιουργήστε εξειδικευμένες κλάσεις για κάθε τύπο συστατικού.
  • Τυχαία Γεγονότα: Χρησιμοποιήστε γεννήτρια τυχαίων αριθμών για να εισαγάγετε πιθανές συνθήκες αστοχίας στην προσομοίωση.
  • Πιθανότητα Έκρηξης: Προσθέστε έναν παράγοντα που επιτρέπει στον αντιδραστήρα να έχει καθορισμένη πιθανότητα έκρηξης σε οποιονδήποτε κύκλο προσομοίωσης. Ο παράγοντας αυτός θα είναι ρυθμιζόμενος, με τιμές μεταξύ 0.0 (καμία πιθανότητα έκρηξης) και 1.0 (σίγουρη έκρηξη).

Αναλυτικότερα: Η δομή των κλάσεων μεθόδων κ.ο.κ. θα μπορούσε να είναι η παρακάτω:

ReactorComponent

Αντιπροσωπεύει ένα γενικό συστατικό του αντιδραστήρα.

  • Πεδία:
    • name (String): Το όνομα του συστατικού.
    • status (String): Η λειτουργική κατάσταση του συστατικού (π.χ. “operational”, “failed”).
  • Μέθοδοι:
    • checkStatus(): Επιστρέφει την τρέχουσα κατάσταση.
    • failComponent(): Θέτει την κατάσταση σε “failed”.

Παράγωγες Κλάσεις από την παραπάνω (subtypes):

FuelRod

Αντιπροσωπεύει μια ράβδο καυσίμου στον αντιδραστήρα.

  • Πεδία:
    • temperature (double): Η τρέχουσα θερμοκρασία της ράβδου.
    • reactivity (double): Το επίπεδο αντιδραστικότητας της ράβδου.
  • Μέθοδοι:
    • increaseReactivity(): Αυξάνει την αντιδραστικότητα και τη θερμοκρασία.
    • decreaseReactivity(): Μειώνει την αντιδραστικότητα και τη θερμοκρασία.
    • meltDown(): Αποτυγχάνει το συστατικό εάν η θερμοκρασία υπερβεί ένα ασφαλές όριο.

ControlRod

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

  • Πεδία:
    • position (boolean): Εάν η ράβδος είναι εισαχθείσα (true) ή αποσυρμένη (false).
  • Μέθοδοι:
    • insert(): Εισάγει τη ράβδο, μειώνοντας την αντιδραστικότητα.
    • withdraw(): Αποσύρει τη ράβδο, αυξάνοντας την αντιδραστικότητα.

CoolingSystem

Αντιπροσωπεύει το σύστημα ψύξης του αντιδραστήρα.

  • Πεδία:
    • coolantLevel (double): Το ποσοστό του ψυκτικού που απομένει.
    • temperature (double): Η θερμοκρασία του ψυκτικού.
  • Μέθοδοι:
    • coolDown(): Μειώνει τη θερμοκρασία του ψυκτικού.
    • failureRisk(): Προσομοιώνει πιθανή αποτυχία του συστήματος ψύξης.

ReactorCore

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

  • Πεδία:
    • Πίνακας από αντικείμενα FuelRod.
    • Πίνακας από αντικείμενα ControlRod.
    • Ένα αντικείμενο CoolingSystem.
    • explosionProbability (double): Η πιθανότητα έκρηξης του αντιδραστήρα κατά τη διάρκεια ενός κύκλου προσομοίωσης
  • Μέθοδοι:
    • simulateCycle(): Προσομοιώνει έναν κύκλο λειτουργίας του αντιδραστήρα.
    • checkStability(): Ελέγχει αν πληρούνται οι συνθήκες για τήξη ή έκρηξη.

Ροή Προσομοίωσης:

  1. Αρχικοποίηση: Το πρόγραμμα αρχικοποιεί τον πυρήνα του αντιδραστήρα (ReactorCore) με έναν καθορισμένο αριθμό ράβδων καυσίμου και ελέγχου, ένα σύστημα ψύξης και μια πιθανότητα έκρηξης που ορίζεται από τον χρήστη.
  2. Προσομοίωση Κύκλου: Κάθε κύκλος προσομοίωσης εκτελεί τα εξής:
    • Ρυθμίζει την αντιδραστικότητα και τη θερμοκρασία των ράβδων καυσίμου.
    • Ρυθμίζει τη θέση των ράβδων ελέγχου.
    • Προσομοιώνει τη δραστηριότητα του συστήματος ψύξης.
    • Ελέγχει για τυχαίες αστοχίες.
    • Ελέγχει την πιθανότητα έκρηξης:
      • Δημιουργεί έναν τυχαίο αριθμό μεταξύ 0.0 και 1.0.
      • Εάν ο τυχαίος αριθμός είναι μικρότερος ή ίσος με το explosionProbability, ενεργοποιείται έκρηξη.
  3. Κρίσιμη Αποτυχία: Εάν προκύψει αποτυχία (π.χ. τήξη ράβδου καυσίμου, αποτυχία ψύξης) ή εάν ο αντιδραστήρας εκραγεί λόγω της πιθανότητας, η προσομοίωση τερματίζεται και εμφανίζεται λεπτομερές αρχείο καταγραφής.
Άσκηση

Kaprekar Constant

Προθεσμία
Χωρίς προθεσμία — για εξάσκηση

Η σταθερά 6174, άλλα μήκη ψηφίων και άλλες βάσεις.

Εκφώνηση

Η σταθερά Kaprekar αφορά μια μαθηματική διαδικασία που εφαρμόζεται σε αριθμούς συγκεκριμένου μήκους σύμφωνα με την οποία:

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

Για παράδειγμα, για αριθμούς 4 ψηφίων στη βάση 10, η σταθερά Kaprekar είναι το 6174. Περισσότερα μπορείτε να δείτε και εδώ σχετικά με την σταθερά αυτή και τη χρήση της: https://en.wikipedia.org/wiki/6174

Καλείστε λοιπόν να υλοποιήσετε εφαρμογή η οποία:

  • Λαμβάνει ως είσοδο έναν αριθμό με n ψηφία (π.χ., 4 ψηφία).
  • Ταξινομεί τα ψηφία σε φθίνουσα και αύξουσα σειρά.
  • Υπολογίζει τη διαφορά μεταξύ αυτών των δύο αριθμών.
  • Επαναλαμβάνει τη διαδικασία μέχρι να καταλήξει στη σταθερά Kaprekar ή σε κυκλικό αριθμό.
  • Δοκίμασε τη συνάρτηση για την περίπτωση n = 4 και επιβεβαίωσε ότι οδηγεί στο 6174.

Κατόπιν της παραπάνω υλοποίηση προσπαθείστε να απαντήσετε και να τεκμηριώσετε τα παρακάτω ερωτήματα.

  • Δοκίμασε την ίδια διαδικασία για αριθμούς με n = 3 ή n = 5 ψηφία. Υπάρχουν σταθερές για αυτές τις περιπτώσεις; Αν ναι, ποιες;
  • Τροποποίησε τη συνάρτηση ώστε να λειτουργεί για αριθμούς σε διαφορετικές βάσεις, π.χ., βάση 8 ή βάση 16. Πώς αλλάζει η συμπεριφορά του αλγορίθμου;

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

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

Ενδεικτική Δομή του Προγράμματος:

  • Συνάρτηση kaprekar_step(number, base): Υπολογίζει μία επανάληψη της διαδικασίας Kaprekar για δεδομένο αριθμό και βάση.
  • Συνάρτηση kaprekar_process(number, base): Επαναλαμβάνει τη διαδικασία μέχρι να καταλήξει σε σταθερά ή κύκλο.

Επισκόπηση

Το Software Development είναι το πρώτο μάθημα προγραμματισμού του προγράμματος σπουδών. Η γλώσσα είναι η Java, και το μάθημα ξεκινά από το μηδέν: πώς γράφεις και τρέχεις ένα πρόγραμμα, πώς αποθηκεύεις δεδομένα σε μεταβλητές και πώς κάνεις υπολογισμούς.

Σταδιακά προστίθενται οι αποφάσεις (if-else, switch), οι επαναλήψεις (for, while, do-while), η είσοδος από τον χρήστη με τον Scanner και η μορφοποιημένη έξοδος, οι πίνακες και οι μέθοδοι. Το τελευταίο μέρος περνά στον αντικειμενοστραφή προγραμματισμό: κλάσεις, αντικείμενα, κατασκευαστές, υπερφόρτωση και κληρονομικότητα.

Κάθε εβδομάδα συνοδεύεται από μια εργασία με πολλά μικρά προγράμματα, και συχνά από προαιρετικά «προχωρημένα» ερωτήματα για όσους θέλουν να πάνε παραπέρα. Όλες οι εργασίες της χρονιάς βρίσκονται παρακάτω.

Τι θα μάθουμε

  • Να γράφεις, να μεταγλωττίζεις και να τρέχεις απλά προγράμματα σε Java.
  • Να χρησιμοποιείς μεταβλητές, τύπους δεδομένων και τελεστές για υπολογισμούς.
  • Να διαβάζεις είσοδο από τον χρήστη με τον Scanner, να την ελέγχεις και να μορφοποιείς την έξοδο με printf.
  • Να ελέγχεις τη ροή του προγράμματος με if-else, switch και βρόχους for, while και do-while.
  • Να δουλεύεις με πίνακες μίας και δύο διαστάσεων και να οργανώνεις τον κώδικα σε μεθόδους.
  • Να γράφεις κλάσεις και αντικείμενα, με ενθυλάκωση, κατασκευαστές, υπερφόρτωση και κληρονομικότητα.