2010-08-19 3 views
-2

Question: Programme qui demande à l'utilisateur d'entrer une valeur de prix et de montrer comment payer ce montant en utilisant le plus petit nombre de factures de 50 $, 20 $, 10 $, 5 $ et 1 $.C Exercice de programme. Rapport de transaction simple

Résultat:

Enter Price: 187 
Enter Amount to pay: 500 
Change is : 313 

(6)$50 (1)$10 (3)$1 
(0)$20 (0)$5 

Voici mon code: espérons que vous me aider, je suis tout dur à connaître la bonne formule pour elle ..

#include <stdio.h> 
#include <conio.h> 
#define p printf 
#define s scanf 
#define g gotoxy 

main() 
{ 
    clrscr(); 
    int c1,c2,c3,c4,c5; 
    int price,amount; 
    float change; 
    p("Enter Price: ");s("%d",&price); 
    p("Enter amount: ");s("%d",&amount); 
    change=amount-price; 
    p("Change is : %f ",change); 
    c1=(change/50); 
    c2=(0); 
    c3=(change/change); 
    c4=(0); 
    c5=(change/change)+2; 
    g(5,5);p("(%d) Php 50",c1); 
    g(5,6);p("(%d) Php 20",c2); 
    g(18,5);p("(%d)Php 10 \t",c3);p("(%d)Php 1",c5); 
    g(18,6);p("(%d) Php 5 ",c4); 


    getch(); 
    return 0; 
} 
+0

Est-ce que ce sont les devoirs? Cela ressemble à ça ... – FrustratedWithFormsDesigner

+21

Astuce # 1: Quel que soit le problème avec votre code, ne raccourcissez pas les noms en utilisant des macros. '#define p printf' n'est absolument pas une bonne idée. –

+0

Bienvenue sur SO! La prochaine fois, cliquez sur ce bouton avec les zéros et les uns pour formater votre code. – NullUserException

Répondre

3

Vous » re sur la bonne voie:

change devrait être un int aussi (cela signifie que vous devriez changez% f en% d). Vous devriez alors déterminer correctement le nombre de 50 (notez que la division entière en C tronque). Vous devriez regarder% (opérateur de module) pour obtenir la quantité restante de changements après les années 50 sont traitées:

En utilisant votre exemple:

changement = 313
cinquantaine = 313/50 (6)
changement% = 50 (13)

ce que des moyens mis en change au reste après division par 50 lui-même (= changement changement% 50)

vingtaine = changement/20 (0)
c hangement% = 20 (13)

dizaines = changement/10 (1)
Variation% = 10 (3)

Cela devrait vous donner l'idée de base du code dont vous avez besoin. Vous continuez simplement ce modèle dans l'ordre de la dénomination décroissante. Comme indiqué, utilisez de meilleurs noms de variables, n'utilisez pas ces définitions et respectez généralement une instruction par ligne (ajoutez une nouvelle ligne après les points-virgules). Cela rendra votre code plus lisible. Vous utilisez également plus de parenthèses que nécessaire, mais ce n'est pas grave.

+0

Et si je change mon prix à 500? et s'élève à 1000; devrais-je changer ma formule aussi? .. désolé newbie .. // sortie incorrect (o_O) a obtenu un 13 $ sur .. Entrez Prix: 500 Entrez Montant à payer: 1000 Le changement est: 500 (10) 50 $ (1) $ 10 (3) 1 $ (0) 20 $ (0) 5 $ –

+0

Non, la formule est la même pour tous les prix et montants. C'est juste un exemple. –

2

Je suggère de définir un tableau qui contient les dénominations de factures, et un tableau vide au départ de comptages de factures:

int denoms[5] = {50, 20, 10, 5, 1}; 
int bills[5] = {0, 0, 0, 0, 0}; 

for(int i =0; i < 5; ++i) 
{ 
    bills[i] = /* do something interesting with denoms[i] here */ 
    change = /* more work for you here */ 
} 

/* output answer */ 
for(int i =0; i < 5; ++i) 
{ 
    if (bills[i] > 0) 
      p("{%d)$%d", bills[i], denoms[i]); 
} 
p("\n"); 
for(int i =0; i < 5; ++i) 
{ 
    if (bills[i] == 0) 
      p("{%d)$%d", bills[i], denoms[i]); 
} 
p("\n"); 
+0

Je suppose que l'utilisation de la boucle ne vise pas à cet exercice parce que mon professeur est toujours pas nous enseigner des instructions conditionnelles .. –

0
void changeloop(int* change, int* counter, int amount) { 
    while (*change > amount) { 
     (*counter)++; 
     (*change) -= amount; 
    } 
} 
int main() { 
    clrscr(); 
    int price; printf("Enter Price: "); scanf("%d", &input); 
    int amount; printf("Enter Amount: "); scanf("%d", &amount); 
    int change = amount - price; 
    int fifties, twenties, tens, fives, ones; 
    fifties = twenties = tens = fives = ones = 0; 
    changeloop(&change, &fifties, 50); 
    changeloop(&change, &twenties, 20); 
    changeloop(&change, &tens, 10); 
    changeloop(&change, &fives, 5); 
    changeloop(&change, &ones, 1); 
    printf("Fifties: %d\n", fifties); 
    printf("Twenties: %d\n", twenties); 
    printf("Tens: %d\n", tens); 
    printf("Fives: %d\n", fives); 
    printf("Ones: %d\n", ones); 
    getch(); 
    return; 
} 

Il y a du travail à faire, comme la validation d'entrée et le traitement des erreurs. Mais les bases sont ici. Le code pourrait être refactorisé pour être beaucoup plus extensible ... mais mec.

+0

est ici la sortie: Exemple: Entrez Prix: 187 Entrez Montant: 500 584 = fifties <--- 500+ fifties? heheh Twenties: 1 dizaines: 0 cinq: 0 Ones: 3 –

+0

Ensuite, vous avez foiré. Le mien donne 6/0/1/0/2, ce qui n'est évidemment pas tout à fait correct. Je suppose que vous devrez peut-être essayer de résoudre le problème. – Puppy

Questions connexes