Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Θα ηθελα μια βοηθεια εχω την παρακατω ασκηση
 

Μία μηχανή αυτόματης πώλησης καφέ δέχεται μόνο ΕΝΑ χαρτονόμισμα των 5 € κάθε φορά και δίνει τα
ρέστα σε κέρματα των 10, 20 & 50 λεπτών καθώς και σε κέρματα του 1 και 2 ευρώ . Κάθε καφές κοστίζει
70 λεπτά. Να γραφεί πρόγραμμα το οποίο να ζητάει τον αριθμό των καφέδων (int) και να εμφανίζει τα
ρέστα (σε κέρματα) (int) που πρέπει να δώσει. Στην περίπτωση που τα χρήματα δεν επαρκούν να
εμφανίζει το κατάλληλο μήνυμα. (Τα χρήματα υπολογίζονται σε λεπτά του ευρώ).

το προβλημα μου ειναι πως να μοιρασω τα διαφορα κερματα...δλδ αν εχω 3 καφεδες τοτε 3 * 0,7 = 2,1
πως θα πω 1 κερμα των 2 και 1 κερμα των 10??
Δημοσ.

Θα κάνεις ακέραιες διαιρέσεις με τα κέρματα(ξεκινώντας από το μεγαλύτερο) μέχρι να μηδενίσει. Που κολλάς συγκεκριμένα;

  • Moderators
Δημοσ.

Θα μπορούσες να κάνεις το εξής:

Χωρίζεις τα ευρώ και τα λεπτά σε 2 μέρη, δηλαδή για το παράδειγμά σου θα έχεις μια μεταβλητή με τιμή 2 και άλλη μία με τιμή 10.

Ξεκινώντας από το μεγαλύτερο κέρμα, βλέπεις επαναληπτικά πόσα τέτοια κέρματα "χωράνε"[1] στο υπόλοιπο που έχεις. Παράδείγμα:

90 λεπτά ρέστα

  • Το 50λεπτο χωράει μια φορά στα 90 που απομένουν.
  • Στη συνέχεια σου μένουν 40. Το 50λεπτο δε χωράει, οπότε πας στο αμέσως μικρότερο (20λεπτο).
  • Το 20λεπτο χωράει στα 40, οπότε βάζεις κι ένα 20λεπτο στα ρέστα και συνεχίζεις.
  • Σου μένουν 20. Μπορεί να βάλεις άλλο ένα 20λεπτο
  • Σου μένουν 0. Τελείωσες.

Έτσι, τα ρέστα σου έχουν διαμορφωθεί σε 1 50λεπτο και 2 20λεπτα.

 

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

Δημοσ.

Θα κάνεις ακέραιες διαιρέσεις με τα κέρματα(ξεκινώντας από το μεγαλύτερο) μέχρι να μηδενίσει. Που κολλάς συγκεκριμένα;

κολλαω στο οτι δε μπορω να καταλαβω αν για παραδειγμα εχω 290 ρεστα( για ευκολια πραξεων το βαζω ετσι) και κανω 290 % 200

και 290 / 200 πως θα βγει μετα οτι θα εχω 1 κερμα των 2 ενα των 50 και 2 των 20?

Θα μπορούσες να κάνεις το εξής:

Χωρίζεις τα ευρώ και τα λεπτά σε 2 μέρη, δηλαδή για το παράδειγμά σου θα έχεις μια μεταβλητή με τιμή 2 και άλλη μία με τιμή 10.

Ξεκινώντας από το μεγαλύτερο κέρμα, βλέπεις επαναληπτικά πόσα τέτοια κέρματα "χωράνε"[1] στο υπόλοιπο που έχεις. Παράδείγμα:

90 λεπτά ρέστα

  • Το 50λεπτο χωράει μια φορά στα 90 που απομένουν.
  • Στη συνέχεια σου μένουν 40. Το 50λεπτο δε χωράει, οπότε πας στο αμέσως μικρότερο (20λεπτο).
  • Το 20λεπτο χωράει στα 40, οπότε βάζεις κι ένα 20λεπτο στα ρέστα και συνεχίζεις.
  • Σου μένουν 20. Μπορεί να βάλεις άλλο ένα 20λεπτο
  • Σου μένουν 0. Τελείωσες.

Έτσι, τα ρέστα σου έχουν διαμορφωθεί σε 1 50λεπτο και 2 20λεπτα.

 

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

θεωρητικα δε μπορω να το κανω με επαναληψη γιατι δεν την διδαχτηκαμε ακομα ειμαι στα if και switch

  • Moderators
Δημοσ.

Τότε μπορείς να πάρεις όλους τους πιθανούς καφέδες που μπορείς να πάρεις με 5 ευρά και όλα τα πιθανά ρέστα και να ελέγχεις έτσι. Δηλαδή ξέρεις ότι με έναν καφέ τα ρέστα θα είναι 2 2ευρα, 1 20λεπτο και 1 10λεπτο. Με 2 θα είναι 1 2ευρω, 1 ευρώ, 1 50λεπτο και 1 10λεπτο κοκ. Αυτό μου έρχεται τώρα, ίσως υπάρχει λιγότερο άσχημος τρόπος αλλά χωρίς επανάληψη δε βλέπω πώς αλλιώς μπορεί να γίνει.

Δημοσ.

μηπως γινεται με πολλαπλες if?εστω ρεστα = 290

δηλαδη στην πρωτη ελεγχω αν τα ρεστα ειναι πανω απο 200
και κανω ρεστα_200(δηλαδη τα διευρα) = ρεστα / 200
              ρεστα = ρεστα%200

απο αυτα εχω οτι τα ρεστα πλεον ειναι 90 και συνεχιζω αναλογως με τα υπολοιπα κερματα γινεται???

  • Moderators
Δημοσ.

Και αν χρειαστεί κάπου να δώσεις 2 φορές το ίδιο κέρμα τι θα κάνεις; Δηλαδή μετά το ρεστα_200 = ρεστα / 200 τι θα έχεις; Το ίδιο για μονόευρα; Και αν τα ρέστα είναι 430;

Δημοσ.

a

 total = cof * 70

if (total <= 500)

{

  total = 500 - (cof * 70)

  a = total / 200

  total = total - ( a * 200)

  b = ...

}

else

       wrong

 

έχετε ρέστα

 if ( a <> 0)

εκτύπωσε α

... 

 

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

Δημοσ.

οκ ευχαριστω πολυ παιδια αν και νομιζω το βρηκα με τον τροπο μου ...γιατι και 2 φορες να βγαινει το κερμα θα προκυπτει καθε φορα απο τη διαιρεση 

  • 5 χρόνια αργότερα...
Δημοσ.
Στις 23/10/2014 στις 8:00 ΜΜ, antbyron είπε

Θα κάνεις ακέραιες διαιρέσεις με τα κέρματα(ξεκινώντας από το μεγαλύτερο) μέχρι να μηδενίσει. Που κολλάς συγκεκριμένα;

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

code.PNG

result.PNG

Δημοσ. (επεξεργασμένο)

^^^ Εχει δικιο

 

Επισης δες εναν διαφορετικο τροπο με τον οποιο μπορεις να το λυσεις:

#include "stdio.h"

#define CENTS 100
#define MONEY_EUROS 100
#define MONEY_CENTS (MONEY_EUROS * CENTS)
#define COFFEE_COST 2.5 // In euros

int main() {
    printf("How many coffees? ");
    int coffees;
    scanf("%d", &coffees);
    int cost = coffees * (int)(COFFEE_COST * CENTS);

    int change = MONEY_CENTS - cost;

    if (cost > MONEY_CENTS)
        printf("There's not enough money for %d coffees\n", coffees);
    else {
        float banknotes[] = {500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01}; // In euros
        for (int i = 0; i < sizeof(banknotes) / sizeof(float); i++) {
            int count = change / (int)(banknotes[i] * CENTS);
            change %= (int)(banknotes[i] * CENTS);
            if (count != 0)
                printf("%.2f euros: %d\n", banknotes[i], count);
        }
    }

    return 0;
}

 

Επεξ/σία από xristos97
Δημοσ. (επεξεργασμένο)
1 ώρα πριν, aravellalousta είπε

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

Δες τα παρακάτω πάνω στα δικά σου. Χωρίς επανάληψη, χωρίς υπόλοιπα,  με ενδιάμεσες τυπώσεις, δηλαδή με μία μεταβλητή "coins". Αν τα coins είναι μηδέν κατά τη διαίρεση, τα ρέστα (change) παραμένουν αμετάβλητα. Δοκίμασέ το.

#include <stdio.h>

#define standardMoney 500

int main()
{
    int coffees, cost, change, coins, remain;

    printf("How many coffees: ");
    scanf("%d", &coffees);

    cost = coffees * 70; 
    change = standardMoney - cost;
    
    if (cost > 500)
    {
       printf("There's not enough money for %d coffees", coffees);
    }
    else
    {
       coins = change / 200;
       
       printf("2 euros: %d", coins);

       change = change - (coins * 200);
       coins = change / 100;
    
       printf("\n1 euros: %d", coins);
       
       change = change - (coins * 100);
       coins = change / 50;

       printf("\n50 cents: %d", coins);
     
       change = change - (coins * 50);
       coins = change / 20;
         
       printf("\n20 cents: %d", coins);
       
       change = change - (coins * 20);
       coins = change / 10;
       
       printf("\n10 cents: %d", coins);
       
    }
    
    return 0;
}

 

Επεξ/σία από marios28
Δημοσ.

Η λίστα του Kercyn που είναι; Αν είναι να δίνονται έτοιμες λύσεις καλό είναι να μην ξεχνάμε και την τεκμηρίωση. Μην πάθουν και τίποτα. Στην τελική είναι πυρηνική φυσική να χρησιμοποιήσεις κάποιον debugger για να γίνει οι οποίες διορθώσεις... 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...