📝 Εκφωνήσεις Ασκήσεων

Εισαγωγή στον Προγραμματισμό - Γλώσσα C

📝 Άσκηση 1: Αριθμοί Armstrong

📌 Εκφώνηση

Ένας αριθμός λέγεται αριθμός Armstrong αν το άθροισμα των κύβων των ψηφίων του είναι ίσο με τον ίδιο τον αριθμό.

Να γραφεί πρόγραμμα σε C που θα ζητά άγνωστο πλήθος αριθμών και θα εμφανίζει αν ο αριθμός που δόθηκε είναι αριθμός Armstrong ή όχι.

Η εισαγωγή αριθμών θα σταματά όταν δοθεί ο αριθμός μηδέν (0).

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

Παράδειγμα: 153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153

🔍 Βοήθεια

💡 Τι είναι ο Αριθμός Armstrong;

Ένας τριψήφιος αριθμός είναι Armstrong όταν:

αριθμός = (1ο ψηφίο)³ + (2ο ψηφίο)³ + (3ο ψηφίο)³

📊 Παραδείγματα Αριθμών Armstrong

Αριθμός Υπολογισμός Αποτέλεσμα Armstrong;
1531³ + 5³ + 3³ = 1 + 125 + 27153✅ Ναι
3703³ + 7³ + 0³ = 27 + 343 + 0370✅ Ναι
3713³ + 7³ + 1³ = 27 + 343 + 1371✅ Ναι
4074³ + 0³ + 7³ = 64 + 0 + 343407✅ Ναι
1231³ + 2³ + 3³ = 1 + 8 + 2736❌ Όχι

🧩 Αλγόριθμος

Βήμα 1: Εξαγωγή Ψηφίων

  • αριθμός % 10 → δίνει το τελευταίο ψηφίο
  • αριθμός / 10αφαιρεί το τελευταίο ψηφίο

Βήμα 2: Υπολογισμός Κύβου

Ο κύβος ενός ψηφίου: ψηφίο * ψηφίο * ψηφίο

Βήμα 3: Σύγκριση

Αν το άθροισμα των κύβων = αρχικός αριθμός → είναι Armstrong!


🎭 Άσκηση 2: Σύστημα Κρατήσεων Θεάτρου

📌 Εκφώνηση

Ένα θέατρο διαθέτει αίθουσα χωρητικότητας 500 θέσεων.

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

  • Αν οι κενές θέσεις επαρκούν τότε γίνεται η κράτηση των θέσεων
  • Αν οι απαιτούμενες θέσεις είναι περισσότερες από τις κενές τότε δεν γίνεται η κράτηση

Η διαδικασία αυτή επαναλαμβάνεται μέχρι να γεμίσει η θεατρική αίθουσα (δεν θα μείνει καμία θέση κενή).

Να γραφεί πρόγραμμα σε C που θα υλοποιεί την παραπάνω διαδικασία συμπεριλαμβανόμενων και των απαραίτητων εκτυπώσεων - μηνυμάτων.

🔍 Βοήθεια

✅ Σενάριο 1: Επιτυχής κράτηση

Κενές: 500, Ζητούμενα: 50 → 50 ≤ 500 → Κράτηση OK! → Νέες κενές: 450

❌ Σενάριο 2: Αποτυχημένη κράτηση

Κενές: 30, Ζητούμενα: 50 → 50 > 30 → Αποτυχία! → Κενές παραμένουν: 30

📊 Ροή Προγράμματος

🎬 Αρχή: freeSeats = 500
🔄 Όσο freeSeats > 0
📥 Διάβασε requested
✅ requested ≤ freeSeats; | ❌ requested > freeSeats;
🏁 Τέλος: "Η αίθουσα γέμισε!"

📌 Χρήσιμες Έννοιες

  • const: Δηλώνει σταθερά που δεν αλλάζει
  • while: Επανάληψη όσο ισχύει μια συνθήκη
  • continue: Επιστρέφει στην αρχή του βρόχου
  • -=: Σύνθετος τελεστής (x -= y ⟺ x = x - y)

⚖️ Άσκηση 3: Νομική Εταιρία Prins & Associates

📌 Εκφώνηση

Σε μια νομική εταιρία Prins & Associates εργάζονται 15 νομικοί όπου ο κάθε ένας από αυτούς επεξεργάζεται έναν αριθμό υποθέσεων.

Να γραφεί πρόγραμμα σε C το οποίο:

  1. Θα διαβάζει και θα καταχωρεί τα ονόματα των 15 νομικών στον πίνακα NAMES[15][40] και στον πίνακα CASES[15] τον αριθμό των υποθέσεων που έχει αναλάβει ο κάθε ένας.
  2. Για κάθε νομικό θα διαβάζει έναν πραγματικό αριθμό από το [0,1], που αντιπροσωπεύει το ποσοστό επιτυχίας του, το οποίο θα πολλαπλασιάζει με τον αριθμό των υποθέσεων του και το αποτέλεσμα θα αποθηκεύεται στον πίνακα RESULTS[15].
  3. Θα ταξινομεί τον πίνακα RESULTS[15] κατά φθίνουσα σειρά και μαζί του θα μεταβάλλονται και οι πίνακες των ονομάτων και των υποθέσεων. Η ταξινόμηση να πραγματοποιηθεί με συνάρτηση που θα κατασκευάσετε.
  4. Θα εμφανίζει το όνομα του καλύτερου νομικού της εταιρίας.

🔍 Βοήθεια

💡 Δομή Δεδομένων

ΠίνακαςΤύποςΜέγεθοςΠεριεχόμενο
NAMESchar[15][40]Ονόματα νομικών
CASESint[15]Αριθμός υποθέσεων
RESULTSfloat[15]Βαθμολογία = υποθέσεις × ποσοστό

Παράδειγμα Υπολογισμού:

Νομικός: Παπαδόπουλος | Υποθέσεις: 50 | Ποσοστό: 0.85

RESULTS = 50 × 0.85 = 42.5

📌 Χρήσιμες Έννοιες

  • 2D πίνακας char: Το NAMES[15][40] είναι 15 strings των 40 χαρακτήρων
  • Παράλληλοι πίνακες: Όταν ταξινομείς έναν, μετακινείς και τους άλλους
  • strcpy(): Για αντιγραφή strings (όχι απλή ανάθεση =)
  • Φθίνουσα ταξινόμηση: Από το μεγαλύτερο στο μικρότερο

🏋️ Άσκηση 4: Γυμναστήριο - Αξιολόγηση Προπονητών

📌 Εκφώνηση

Σε ένα γυμναστήριο υπάρχουν 12 προπονητές. Για κάθε προπονητή καταχωρούνται:

  • Ονοματεπώνυμο (έως 39 χαρακτήρες) σε NAMES[12][40]
  • Αριθμός πελατών σε CLIENTS[12]
  • Ποσοστό ικανοποίησης (real στο [0,1]) σε SAT[12]

Να γραφεί πρόγραμμα σε C που:

  1. Διαβάζει τα παραπάνω στοιχεία για τους 12 προπονητές.
  2. Υπολογίζει για κάθε προπονητή δείκτη: SCORE = CLIENTS × SAT και τον αποθηκεύει σε SCORES[12].
  3. Ταξινομεί κατά φθίνουσα σειρά τον πίνακα SCORES και μαζί να μετακινούνται και οι NAMES, CLIENTS, SAT. Η ταξινόμηση να γίνει με συνάρτηση που θα κατασκευάσετε και να χρησιμοποιεί pointers.
  4. Εμφανίζει το όνομα του καλύτερου προπονητή (μεγαλύτερο SCORE).
SCORE = CLIENTS × SAT

🔍 Βοήθεια

💡 Δομή Δεδομένων

ΠίνακαςΤύποςΜέγεθοςΠεριεχόμενο
NAMESchar[12][40]Ονόματα προπονητών
CLIENTSint[12]Αριθμός πελατών
SATfloat[12]Ποσοστό ικανοποίησης [0-1]
SCORESfloat[12]Βαθμολογία = CLIENTS × SAT

📚 Θεωρία: Pointers στη C

⭐ Τι είναι ο Pointer;

Ένας pointer είναι μια μεταβλητή που αποθηκεύει τη διεύθυνση μνήμης μιας άλλης μεταβλητής.

Παράδειγμα στη Μνήμη:

0x1000 x = 42
0x2000 p = 0x1000

int x = 42;    int *p = &x;

📌 Σημαντικοί Τελεστές

ΤελεστήςΌνομαΠεριγραφήΠαράδειγμα
&Address-ofΕπιστρέφει τη διεύθυνση&x → διεύθυνση του x
*DereferenceΕπιστρέφει την τιμή στη διεύθυνση*p → τιμή που δείχνει ο p

💡 Pointer Arithmetic

Όταν έχουμε έναν πίνακα float scores[12]:

  • scores = διεύθυνση του πρώτου στοιχείου
  • scores + j = διεύθυνση του scores[j]
  • *(scores + j) = τιμή του scores[j]

Ισοδύναμα: scores[j]*(scores + j)

Παράδειγμα Υπολογισμού:

Προπονητής: Γιάννης Παπαδόπουλος | Πελάτες: 50 | Ποσοστό: 0.92

SCORE = 50 × 0.92 = 46.0