#include #include int main(int argc, char *argv[]) { float Somme = 0.00 ; float Total = 0.00 ; /***************************************************************/ /** **/ /** La variable "Mt" signifie Montant. **/ /** Pour augmenter la lisibilité, on peut remplacer **/ /** tous les "Mt" par le terme "Montant" **/ /** **/ /***************************************************************/ int n=0; int NombreDeFactures = 0; int i=0; float* Mt = NULL; // Ce pointeur servira de tableau après l'appel du malloc // On demande le nombre de factures printf("Combien de factures dans ce mois ? "); scanf("%d", &NombreDeFactures); printf("Quelle est le total a obtenir?\n"); scanf("%g", &Total); if (NombreDeFactures > 0) // Il faut qu'il ait au moins une facture { Mt = malloc(NombreDeFactures * sizeof(float)); // On alloue de la mémoire pour le tableau if (Mt == NULL) // On vérifie si l'allocation a marché ou pas { exit(0); // On arrête tout } // On demande le Mt des factures une à une for (i = 0 ; i < NombreDeFactures ; i++) { printf("Entrer le montant de la facture %d : ", i); scanf("%g", &Mt[i]); } // On affiche les factures stockées, une à une printf("*****************************************************************************\n"); printf("* A but verificatif, les montants des factures du mois sont les suivants : *\n\n"); for (i = 0 ; i < NombreDeFactures ; i++) { printf("%10.2f CHF\n", Mt[i]); } switch (NombreDeFactures) { case 1: Somme=Mt[0]; if (Somme!=Total) { printf("Mt = %f \n", Somme); printf("Ce n'est donc pas la bonne facture \n"); } else { printf("Mt ( %f ) équivalent au total ( %f ) \n", Somme, Total); printf("C'est donc la bonne facture \n"); } break; case 2: if (Total==Mt[0]) { printf("Somme = %f \n", Mt[0]); printf("C'est la bonne facture \n"); printf("Il s'agit du Mt 0 \n"); } else if (Total==Mt[1]) { printf("Somme = %f \n", Mt[1]); printf("C'est la bonne facture \n"); printf("Il s'agit du Mt 1 \n"); } else if (Total==Mt[0]+Mt[1]) { printf("Somme = %f \n", Mt[0]+Mt[1]); printf("C'est la bonne facture. Il est possible d'obtenir le total voulu avec 2 Mts \n"); printf("Ce sont les montants 0 et 1 \n"); } else { printf("Il n'est pas possible de parvenir au total voulu avec ces 2 Mts\n"); } break; case 3: if (Total-Mt[0]<0.001) { printf("Somme = %g \n", Mt[0]); printf("C'est la bonne facture \n"); printf("Il s'agit du Mt 0 \n"); } else if (Total-Mt[1]<0.001) { printf("Somme = %g \n", Mt[1]); printf("C'est la bonne facture \n"); printf("Il s'agit du Mt 1 \n"); } else if (Total-Mt[2]<0.001) { printf("Somme = %g \n", Mt[2]); printf("C'est la bonne facture \n"); printf("Il s'agit du Mt 2 \n"); } else if (Total-Mt[0]-Mt[1]<0.001) { printf("Somme = %g \n", Mt[0]+Mt[1]); printf("Il est possible d'obtenir le total voulu avec 2 Mts \n"); printf("Ce sont les montants 0 et 1 \n"); } else if (Total-Mt[0]-Mt[2]<0.001) { printf("Somme = %g \n", Mt[0]+Mt[2]); printf("Il est possible d'obtenir le total voulu avec 2 Mts \n"); printf("Ce sont les montants 0 et 2 \n"); } else if (Total-Mt[1]-Mt[2]<0.001) { printf("Somme = %g \n", Mt[1]+Mt[2]); printf("Il est possible d'obtenir le total voulu avec 2 Mts \n"); printf("Ce sont les montants 1 et 2 \n"); } else if (Total-Mt[0]-Mt[1]-Mt[2]<0.001) { printf("Somme = %g \n", Mt[0]+Mt[1]+Mt[2]); printf("Il est possible d'obtenir le total voulu avec 3 Mts \n"); printf("Ce sont les montants 1 et 2 et 3\n"); } else { printf("Il n'est pas possible de parvenir au total voulu avec ces 3 Mts\n"); } break; default: printf("Si possible supprimer quelques Mts ne permettant visiblement pas d'atteindre le bon total. \n"); printf("La limite de 40 factures a en effet ete depassee\n"); break; } // On libère la mémoire allouée avec malloc, on n'en a plus besoin free(Mt); } system("PAUSE"); return 0; }