Problèmes dans un programme de TVA
Résolu/Fermé
SIMO97
Messages postés
65
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
30 novembre 2013
-
Modifié par SIMO97 le 19/03/2013 à 23:00
SIMO97 Messages postés 65 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 30 novembre 2013 - 21 mars 2013 à 14:03
SIMO97 Messages postés 65 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 30 novembre 2013 - 21 mars 2013 à 14:03
A voir également:
- Problèmes dans un programme de TVA
- Programme demarrage windows 10 - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Desinstaller un programme - Guide
- Forcer la fermeture d'un programme - Guide
- Mettre en veille un programme - Guide
3 réponses
mamiemando
Messages postés
33387
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 novembre 2024
7 803
19 mars 2013 à 23:17
19 mars 2013 à 23:17
Plusieurs choses ne vont pas.
Sur le fond :
1) <conio.h> n'est pas un header standard (et en plus il ne sert à rien dans ce programme) donc inutile de l'inclure. En effet ton programme qui n'utilise aucune spécificité de windows ne pourrait pas compiler par exemple sous Mac ou sous Linux à cause de cette inclusion.
2) Les buffers de saisie sont mal vidés. Le problème est expliqué ici (mais les solutions sont fausses ou sales ou ne marchent pas systématiquement) :
http://www.linuxforums.org/forum/programming-scripting/67560-problem-scanf.html#post355499
Une résolution standard et correcte est donnée ici
https://c.developpez.com/faq/?page=Gestion-du-clavier-et-de-l-ecran-en-mode-console#CONS_vider_buffer_clavier
3) La fonction main est sensée retourner 0 quand tout va bien, un code d'exécution non nul sinon qui peut être rattrapé par le programme qui invoque ton programme. De plus toute fonction doit avoir un type de retour (quitte à mettre void si la fonction ne retourne rien, voir exemple ci-dessous avec clean_stdin)
4) Algorithmiquement parlant, j'imagine que le programme devrait redemander une valeur de categorie si la saisie est incorrecte, ou abandonner et quitter.
5) Le calcul du prix TTC étant le même quelque soit le code, cette partie devrait être commune quelque soit le code (code dit factorisé), quitte à ajouter une variable intermédiaire (appelons-là par exemple taux)
Sur la forme :
1) Les blocs d'un switch case n'ont pas besoin d'être enveloppé d'une paire d'accolade.
2) L'indentation et le nom des variables laisse à désirer. Et aère ton code !! :-)
3) Normalement les majuscules sont réservées aux constantes (#define par exemple), les macros, et dans certaines bibliothèque (par exemple l'API windows) des types, mais c'est rare.
4) La fin (getch()) est un patch pour windowsien qui lance le programme depuis l'explorateur windows (au lieu de le lancer par exemple depuis les commandes ms-dos) afin de laisser la fenêtre ms-dos ouverte une fois le programme terminé, mais dans la vraie vie, ça n'a rien à faire dans ton programme.
Voici à quoi ton code pourrait ressembler :
Bonne chance
Sur le fond :
1) <conio.h> n'est pas un header standard (et en plus il ne sert à rien dans ce programme) donc inutile de l'inclure. En effet ton programme qui n'utilise aucune spécificité de windows ne pourrait pas compiler par exemple sous Mac ou sous Linux à cause de cette inclusion.
2) Les buffers de saisie sont mal vidés. Le problème est expliqué ici (mais les solutions sont fausses ou sales ou ne marchent pas systématiquement) :
http://www.linuxforums.org/forum/programming-scripting/67560-problem-scanf.html#post355499
Une résolution standard et correcte est donnée ici
https://c.developpez.com/faq/?page=Gestion-du-clavier-et-de-l-ecran-en-mode-console#CONS_vider_buffer_clavier
3) La fonction main est sensée retourner 0 quand tout va bien, un code d'exécution non nul sinon qui peut être rattrapé par le programme qui invoque ton programme. De plus toute fonction doit avoir un type de retour (quitte à mettre void si la fonction ne retourne rien, voir exemple ci-dessous avec clean_stdin)
4) Algorithmiquement parlant, j'imagine que le programme devrait redemander une valeur de categorie si la saisie est incorrecte, ou abandonner et quitter.
5) Le calcul du prix TTC étant le même quelque soit le code, cette partie devrait être commune quelque soit le code (code dit factorisé), quitte à ajouter une variable intermédiaire (appelons-là par exemple taux)
Sur la forme :
1) Les blocs d'un switch case n'ont pas besoin d'être enveloppé d'une paire d'accolade.
switch (condition) { case 1: instruction1a; instruction1b; break; case 2: instruction2a; instruction2b; break; default: instructionda; instructiondb; }
2) L'indentation et le nom des variables laisse à désirer. Et aère ton code !! :-)
3) Normalement les majuscules sont réservées aux constantes (#define par exemple), les macros, et dans certaines bibliothèque (par exemple l'API windows) des types, mais c'est rare.
4) La fin (getch()) est un patch pour windowsien qui lance le programme depuis l'explorateur windows (au lieu de le lancer par exemple depuis les commandes ms-dos) afin de laisser la fenêtre ms-dos ouverte une fois le programme terminé, mais dans la vraie vie, ça n'a rien à faire dans ton programme.
#define PI 3.14159 #define MIN(a, b) a < b ? a : b
Voici à quoi ton code pourrait ressembler :
#include <stdio.h> // https://c.developpez.com/faq/?page=Gestion-du-clavier-et-de-l-ecran-en-mode-console // Note: fflush(stdin) a un comportement indéterminé void clean_stdin(void) { int c; do { c = getchar(); } while (c != '\n' && c != EOF); } int main() { float prix_ht, prix_ttc; int taux, ok = 0; char categorie; printf( "Ce programme vous donne le prix TTC d'un produit en lui fournissant son prix HT et sa catégorie\n" "Entrez le prix HT de votre produit\n" ); scanf("%f", &prix_ht); printf( "Entrez la categorie de ce produit\n" "A) TVA = 7 \%\n" "B) TVA = 14 \%\n" "C) TVA = 20 \%\n" ); do { clean_stdin(); scanf("%c", &categorie); ok = 1; switch (categorie) { case 'A': taux = 7; break; case 'B': taux = 14; break; case 'C': taux = 20; break; default : ok = 0; printf("La categorie doit être A, B ou C\n"); } } while (!ok); prix_ttc = prix_ht + (prix_ht * taux) / 100; printf("Le prix TTC de votre produit est: %f\n", prix_ttc); // Pour les windowsiens :-) clean_stdin(); printf("Appuyez sur une touche pour quitter"); getchar(); return 0; }
Bonne chance
mamiemando
Messages postés
33387
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 novembre 2024
7 803
20 mars 2013 à 19:30
20 mars 2013 à 19:30
Tu vois :-)
Au passage, n'hésite pas à encadrer ton code avec les balises de code. Pour ça il suffit de sélectionner le code avec la souris et de cliquer sur le bouton <>, situé au dessus de la boîte dans laquelle tu saisis ton message.
Bonne continuation ;-)
Au passage, n'hésite pas à encadrer ton code avec les balises de code. Pour ça il suffit de sélectionner le code avec la souris et de cliquer sur le bouton <>, situé au dessus de la boîte dans laquelle tu saisis ton message.
Bonne continuation ;-)
SIMO97
Messages postés
65
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
30 novembre 2013
5
21 mars 2013 à 14:03
21 mars 2013 à 14:03
Mrc ami;)
SIMO97
Messages postés
65
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
30 novembre 2013
5
20 mars 2013 à 13:57
20 mars 2013 à 13:57
Le voilà;
/*CAT_TVA*/
#include<stdio.h>
#include<conio.h>
main(){
float pht,pttc;
//PHT=Prix hors taxes PTTC=Prix touts taxes comprises
char cat;
printf("Ce programme vous donne le prix TTC d'un produit en lui fournissant son prix HT et sa categorie\nveuillez choisir votre categorie\n");
printf("\nA-TVA=7%");
printf("\nB-TVA=14%");
printf("\nC-TVA=20%\n");
scanf("%c",&cat);
printf("\nveuillez entrer le prix hors taxes:");
scanf("%f",&pht);
switch(cat){
case'A':
pttc=pht+pht*7/100;
printf("\nle prix TTC est de: %.2f",pttc);
break;
case'B':
pttc=pht+pht*14/100;
printf("\nle prix TTC est de: %.2f",pttc);
break;
case'C':
pttc=pht+pht*20/100;
printf("\nle prix TTC est de: %.2f",pttc);
break;
default :
printf("\nLa categorie doit etre A,B,ouC\n");
}
getch();
return 0;
}
/*CAT_TVA*/
#include<stdio.h>
#include<conio.h>
main(){
float pht,pttc;
//PHT=Prix hors taxes PTTC=Prix touts taxes comprises
char cat;
printf("Ce programme vous donne le prix TTC d'un produit en lui fournissant son prix HT et sa categorie\nveuillez choisir votre categorie\n");
printf("\nA-TVA=7%");
printf("\nB-TVA=14%");
printf("\nC-TVA=20%\n");
scanf("%c",&cat);
printf("\nveuillez entrer le prix hors taxes:");
scanf("%f",&pht);
switch(cat){
case'A':
pttc=pht+pht*7/100;
printf("\nle prix TTC est de: %.2f",pttc);
break;
case'B':
pttc=pht+pht*14/100;
printf("\nle prix TTC est de: %.2f",pttc);
break;
case'C':
pttc=pht+pht*20/100;
printf("\nle prix TTC est de: %.2f",pttc);
break;
default :
printf("\nLa categorie doit etre A,B,ouC\n");
}
getch();
return 0;
}
20 mars 2013 à 00:11
Mrc une 2eme fois
20 mars 2013 à 07:26
20 mars 2013 à 13:40
En tt cas Mrc infiniment