Rend la monnaie en langage c

Résolu/Fermé
chungech Messages postés 7 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 20 novembre 2007 - 25 oct. 2007 à 11:22
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 25 oct. 2007 à 13:57
Bonjour,
je veut faire un petit programme en langage c qui pour une somme donne S imprime le nombre (minimal) e piece necesasaires pour la composer
les pieces
30 dinar=30000 millimes
20 dinar = 20000 milimes
10 dinar =10000 millimes
5 dinar 5000
1 dinar 1000
1/2 dinar 500
1/10 dinar 100
1/20 dinar 50
1/50 20
1/100 10
1/200 5
1/500 2

svp aider moi pour trouvez l'algo juste une idee pour entamer l'écriture du programme
A voir également:

4 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
25 oct. 2007 à 11:39
Bonjour,

Ca fait trop longtemps que je n'ai pas fait de C, donc je préfère éviter de te donner du code, mais voilà déjà l'algorithme :

Soit S la somme à décomposer.
Soit P[] le tableau contenant la valeur des pièces, trié de la plus grosse à la plus petite (le tri est important !)

On appelle s une variable temporaire qui correspond au reste de la somme.
On appelle p une variable temporaire qui correspond à l'indice d'une pièce dans le tableau P[]
On appelle R[] le tableau résultat : R[p] contient le nombre de pièces p

Voilà l'algorithme :
s = S;
p = 0;

Tant que s > 0, faire
    R[p] = s / P[p];
    s = s % P[p];
    p = p + 1;
Continuer;


Voilà, c'est pas compliqué :)

Xavier
0
chungech Messages postés 7 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 20 novembre 2007
25 oct. 2007 à 12:13
merci pour l'aide mai
ca na pas marché
#include <stdio.h>
#include <stdlib.h>




void main()
{
int piece[12] = {30000, 20000, 10000, 5000, 1000, 500, 100, 50, 20, 10 ,5 ,2};
int result[12];
int i,reste,somme;
printf("entrez la somme s");
scanf("%d",&somme);

while(somme>0)
{
i=i+1;
result[i]=somme/piece[i];
reste=somme%piece[i];
result[i]=reste;
printf("on peut composer %d piece de valeur %d \n",result[i],piece[i]);
}

system("pause");
}
0
chungech Messages postés 7 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 20 novembre 2007
25 oct. 2007 à 12:16
#include <stdio.h>
#include <stdlib.h>




void main()
{
int piece[12] = {30000, 20000, 10000, 5000, 1000, 500, 100, 50, 20, 10 ,5 ,2};
int result[12];
int i,reste,somme;
printf("entrez la somme s");
scanf("%d",&somme);

while(somme>0)
{
i=i+1;
result[i]=somme/piece[i];
reste=somme%piece[i];
somme=reste;
printf("on peut composer %d piece de valeur %d \n",result[i],piece[i]);
}

system("pause");
}
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
25 oct. 2007 à 13:57
Déjà, tu fais i=i+1 dès le début de la boucle, ce qui fait que tu n'utilises jamais la plus grosse pièce (qui est en i=0) Et il faut peut-être initialiser i à 0, non ? Enfin c'est peut-être implicite en C, je ne sais pas.

Ensuite, qu'est-ce qui n'a pas marché exactement ? Le résultat n'est pas bon ? Tu as un message d'erreur ?
0