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

Αυτόματος Πωλητής Εισιτηρίων


Figantu
Μετάβαση στην απάντηση Απαντήθηκε από Figantu,

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

Να γίνει πρόγραμμα το οποίο θα διαβάζει από το χρήστη το πλήθος των εισιτηρίων που θέλει να αγοράσει
κάποιος (ακέραιος αριθμός στο διάστημα [1,5]) καθώς και το χρηματικό ποσό που διαθέτει (πραγματικός
αριθμός στο διάστημα [0.75,100]). Θεωρείστε ότι το κόστος του ενός εισιτηρίου είναι 75 λεπτά. Το
πρόγραμμα θα ελέγχει αν οι δύο αριθμοί έχουν έγκυρες τιμές και αν τα χρήματα επαρκούν για την αγορά
των εισιτηρίων. Σε διαφορετική περίπτωση το πρόγραμμα θα πρέπει να τερματίζει εμφανίζοντας το μήνυμα
«Wrong input».
Το πρόγραμμα θα πρέπει να υπολογίζει και να εμφανίζει τα ρέστα που πρέπει να επιστρέψει
χρησιμοποιώντας κέρματα με αξία 2€, 1€, 0.50€, 0.20€, 0.10€ , 0.05€ και 0.01€. Ο αλγόριθμος πρέπει να
λειτουργεί με τέτοιο τρόπο ώστε τα ρέστα να δίνονται με τον μικρότερο δυνατό αριθμό κερμάτων.

#include <stdio.h>

int main()
{
    int tickets;
    float money,ticket_price;
    ticket_price=0.75;
    scanf("%d %f",&tickets,&money);
    if ((tickets>=1 && tickets<=5) && (money>=0.75 && money<=100))
    {
        float change,price;
        int changex;
        price=tickets*ticket_price;
        change=money-price;
        changex=change*100;
        if (money>price)
        {
            int x1,change1;
            x1=changex%200;
            change1=changex-200*x1;
            int x2,change2;
            x2=change1%100;
            change2=change1-100*x2;
            int x3,change3;
            x3=change2%50;
            change3=change2-50*x3;
            int x4,change4;
            x4=change3%20;
            change4=change3-20*x4;
            int x5,change5;
            x5=change4%10;
            change5=change4-10*x5;
            int x6,change6;
            x6=change5%5;
            change5=change5-5*x6;
            int x7,change7;
            x7=change5%1;
            change6=change5-1*x7;
            printf("%d%dcoins",x1,changex);
        }
        
       
    }
    else
    {
        printf("Wrong input");
    }
  return 0;
}

 

Παιδια βοηθεια για αυτη την ασκηση? Εχω καει τελειως την δουλευω ωρες και δεν μπορω να την λυσω

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

Το πρόγραμμα σου είναι γενικά σωστό εκτός από χ1 = change/200 ypoloipo = change%200 ή αυτό που κάνεις με την αφαίρεση

Κοίτα όμως τι σου ζητάει ως έξοδο στο τέλος. Εγώ καταλαβαίνω "ρεστα 13,79 analisi 6 2€ 1 1€ 150c 1 20c klp"

Μετά κοίτα αν χρειάζεσαι όλες αυτές τις μεταβλητές που χρησιμοποιείς ή μπορείς να επαναλαμβάνεις κάποιες. Το υπόλοιπο πχ σε λεπτά που το ονομάζεις changex μπορεί να είναι πάντα η ίδια μεταβλητή και όχι change1, change2 ...

 

Επεξ/σία από k33theod
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

#include <math.h>
#include <stdio.h>

int main()
{
    int tickets,change;
    float ticket_price =75;
    float money,price;
    int x200,x100,x50,x20,x10,x5,x1;
    scanf("%d %f",&tickets,&money);
    price=tickets*ticket_price;
    if (tickets<1 || tickets>5 || price>(money*100) || money>100 || money<0.75)
    {
        printf("Wrong input");
    }
    else
    {
        change=round((money*100)-price);
        x200=change/200;
        change=change%200;
        x100=change/100;
        change=change%100;
        x50=change/50;
        change=change%50;
        x20=change/20;
        change=change%20;
        x10=change/10;
        change=change%10;
        x5=change/5;
        change=change%5;
        x1=change/1;
        change=change%1;
        if(x200>0)
        {
            printf("%d * 2 euros\n",x200);
        }
        if(x100>0)
        {
            printf("%d * 1 euros\n",x100);
        }
        if(x50>0)
        {
            printf("%d * 50 cents\n",x50);
        }
        if(x20>0)
        {
            printf("%d * 20 cents\n",x20);
        }
        if(x10>0)
        {
            printf("%d * 10 cents\n",x10);
        }
        if(x5>0)
        {
            printf("%d * 5 cents\n",x5);
        }
        if(x1>0)
        {
            printf("%d * 1 cents\n",x1);
        }
    }
  return 0;
}

 

Επεξ/σία από Figantu
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να προσθέσω δύο πραγματάκια στην άσκηση:

- Θα μπορούσαν τα ρέστα να μπουν σε ένα πίνακα, πχ coins = [200,100,50,20,10,5,1]  και με κάποιες for, while κλπ να γινόταν η δουλειά με λιγότερες γραμμές.

- Ο άπληστος αλγόριθμος, δε βρίσκει πάντα τη βέλτιστη λύση. Το ότι τη βρίσκει εδώ, οφείλεται στα νομίσματα που βοηθούν στη λειτουργία. Παράδειγμα, αν τα διαθέσιμα νομίσματα ήταν τα {25,20,10,5} και θέλαμε να επιστρέψουμε 40 λεπτά ρέστα, τότε ο αλγόριθμος θα έδινε 25-10-5 ενώ το βέλτιστο θα ήταν 20-20.

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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