Je n'arrive pas a avoir le resultat souhaiteé avec mon progrmme
Résolu
i.firmin
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
i.firmin Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
i.firmin Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
Bonjour ! Je suis débutant en programmation et j'ai écrit mon programme a la base de cet énoncé avec codeBlocks mais j'arrive pas avoir le résultat souhaité . Mon programme s’arrête au milieu. Quelqu'un aura bien l'amabilité de me venir en aide? Merci d'avance.
VOICI L'ÉNONCÉ:
Une compagnie d’assurance automobile propose à ses clients quatre familles de tarifs identifiables par
une couleur, du moins au plus onéreux : tarifs bleu, vert, orange et rouge. Le tarif dépend de la situation du
conducteur :
rouge, si toutefois il n’a jamais été responsable d’accident. Sinon, la compagnie refuse de l’assurer.
titulaire du permis depuis moins de deux ans a le droit au tarif orange s’il n’a jamais provoqué d’accident, au tarif
rouge pour un accident, sinon il est refusé.
l’origine d’aucun accident et du tarif orange pour un accident, du tarif rouge pour deux accidents, et refusé audelà.
Écrire l’algorithme permettant de saisir les données nécessaires (sans contrôle de saisie) et de traiter ce problème.
VOICI L'ALGORITHME :
Variables age, perm, acc, assur en entier
Variable situ en caractère
Début
Écrire « Entrez l’âge : «
Lire age
Écrire « Entrez le nombre d’années de permis : »
Lire perm
Écrire « Entrez le nombre d’accidents : »
Lire acc
Écrire « Entrez le nombre d’années d’assurance : »
Lire assur
C1 ← age >= 25
C2 ← perm >= 2
C3 ← assur > 1
Si Non(C1) et Non(C2) alors
Si acc = 0 alors
situ ← « Rouge »
Sinon
situ ← « Refusé »
FinSi
Sinonsi ((Non(C1) et C2) ou (C1 et Non(C2)) alors
Si acc = 0 alors
situ ← « Orange »
SinonSi acc = 1 alors
situ ← « Rouge »
Sinon
situ ← « Refusé »
FinSi
Sinon
Si acc = 0 alors
situ ← « Vert »
SinonSi acc = 1 alors
situ ← « Orange »
SinonSi acc = 2 alors
situ ← « Rouge »
Sinon
situ ← « Refusé »
FinSi
FinSi
Si C3 alors
Si situ = « Rouge » alors
situ ← « Orange »
SinonSi situ = « Orange » alors
situ ← « Orange »
SinonSi situ = « Vert » alors
situ ← « Bleu »
FinSi
FinSi
Écrire « Votre situation : », situ
Fin
VOICI MON CODE :
VOICI L'ÉNONCÉ:
Une compagnie d’assurance automobile propose à ses clients quatre familles de tarifs identifiables par
une couleur, du moins au plus onéreux : tarifs bleu, vert, orange et rouge. Le tarif dépend de la situation du
conducteur :
- un conducteur de moins de 25 ans et titulaire du permis depuis moins de deux ans se voit attribuer le tarif
rouge, si toutefois il n’a jamais été responsable d’accident. Sinon, la compagnie refuse de l’assurer.
- un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans, ou de plus de 25 ans mais
titulaire du permis depuis moins de deux ans a le droit au tarif orange s’il n’a jamais provoqué d’accident, au tarif
rouge pour un accident, sinon il est refusé.
- un conducteur de plus de 25 ans titulaire du permis depuis plus de deux ans bénéficie du tarif vert s’il n’est à
l’origine d’aucun accident et du tarif orange pour un accident, du tarif rouge pour deux accidents, et refusé audelà.
- De plus, pour encourager la fidélité des clients acceptés, la compagnie propose un contrat de la couleur immédiatement la plus avantageuse s’il est entré dans la maison depuis plus d’un an.
Écrire l’algorithme permettant de saisir les données nécessaires (sans contrôle de saisie) et de traiter ce problème.
VOICI L'ALGORITHME :
Variables age, perm, acc, assur en entier
Variable situ en caractère
Début
Écrire « Entrez l’âge : «
Lire age
Écrire « Entrez le nombre d’années de permis : »
Lire perm
Écrire « Entrez le nombre d’accidents : »
Lire acc
Écrire « Entrez le nombre d’années d’assurance : »
Lire assur
C1 ← age >= 25
C2 ← perm >= 2
C3 ← assur > 1
Si Non(C1) et Non(C2) alors
Si acc = 0 alors
situ ← « Rouge »
Sinon
situ ← « Refusé »
FinSi
Sinonsi ((Non(C1) et C2) ou (C1 et Non(C2)) alors
Si acc = 0 alors
situ ← « Orange »
SinonSi acc = 1 alors
situ ← « Rouge »
Sinon
situ ← « Refusé »
FinSi
Sinon
Si acc = 0 alors
situ ← « Vert »
SinonSi acc = 1 alors
situ ← « Orange »
SinonSi acc = 2 alors
situ ← « Rouge »
Sinon
situ ← « Refusé »
FinSi
FinSi
Si C3 alors
Si situ = « Rouge » alors
situ ← « Orange »
SinonSi situ = « Orange » alors
situ ← « Orange »
SinonSi situ = « Vert » alors
situ ← « Bleu »
FinSi
FinSi
Écrire « Votre situation : », situ
Fin
VOICI MON CODE :
#include <stdio.h> #include <stdlib.h> int main() { int age,perm,acc,assur,C1,C2,C3; char situ ; printf("Entrez l'age\n"); scanf("%i",&age); printf("Entrez le nombre d'années de permis\n"); scanf("%i",&perm); printf("Entrez le nombre d'accidents\n"); scanf("%i",&acc); printf("Entrez le nombre d'années d'assurance\n"); scanf("%i",&assur); C1=age>= 25; C2=perm>= 2; C3=assur> 1; if ((age!=C1)&&(perm!=C2)) { if(acc= 0){ situ= "Rouge"; } else {situ = "Refusé" ; } } else if (((age!=C1)&&(perm=C2)) || ((age=C1)&&(perm!=C2))) { if(acc =0) {situ="Orange";} else if (acc=1) { situ= "Rouge";} else {situ="Refusé";} } return 0; if (acc=0){situ= "Vert";} else if (acc= 1){situ="Orange";} else if(acc=2){situ ="Rouge";} else {situ= "Réfuser";} return 0 ; return 0; if (assur=C3) { if (situ= "Rouge") {situ= "Orange";} else if (situ= "Orange") {situ= "Vert";} else if (situ= "Vert") {situ= "Bleu";}} return 0; return 0; printf("%c",situ); }
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Je n'arrive pas a avoir le resultat souhaiteé avec mon progrmme
- Resultat foot - Télécharger - Vie quotidienne
- Lexer resultat - Télécharger - Sport
- Resultat loto 5/90 - Forum Excel
- 5/90 resultat - Forum Linux / Unix
- Récupérer un résultat selon la date d'aujourd'hui ✓ - Forum Excel
2 réponses
Bonjour,
J'ai juste regardé les grosses erreurs sémantiques dans ton code. Il se peut donc qu'il y ait des incohérences entre l'énoncé, l'algorithme et le code.
if(acc= 0){
L'opérateur de comparaison en C n'est pas = mais le ==.
Donc, il faut mettre :
Si tu veux mettre une chaîne de caractère, il faut utiliser :
printf("%c",situ);
Si tu as mis char situ[TAILLE_MAX], il faudra mettre :
Tu as oublié le return 0; final (juste avant l'accolade final).
Je te conseille également de mettre un : putchar('\n'); juste avant pour forcer l'affichage.
Note : attention à l'indentation. Elle n'est pas régulière, ce qui complique la lecture du programme.
Ces erreurs sont très fréquentes en C. Je t'invite à lire : https://www.commentcamarche.net/faq/46294-les-erreurs-frequentes-en-c
Cdlt,
J'ai juste regardé les grosses erreurs sémantiques dans ton code. Il se peut donc qu'il y ait des incohérences entre l'énoncé, l'algorithme et le code.
if(acc= 0){
L'opérateur de comparaison en C n'est pas = mais le ==.
Donc, il faut mettre :
if (acc == 0) {</ <ital>situ= "Rouge";</ital> Attention. situ est de type char. Tu ne peux donc mettre qu'un caractère. Exemple : <code c>situ='R';/*avec apostrophes et non guillemets*/
Si tu veux mettre une chaîne de caractère, il faut utiliser :
char situ[TAILLE_MAX]; strcpy(situ, "Rouge");
printf("%c",situ);
Si tu as mis char situ[TAILLE_MAX], il faudra mettre :
printf ("%s", situ);
Tu as oublié le return 0; final (juste avant l'accolade final).
Je te conseille également de mettre un : putchar('\n'); juste avant pour forcer l'affichage.
Note : attention à l'indentation. Elle n'est pas régulière, ce qui complique la lecture du programme.
Ces erreurs sont très fréquentes en C. Je t'invite à lire : https://www.commentcamarche.net/faq/46294-les-erreurs-frequentes-en-c
Cdlt,
i.firmin
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
Merci beaucoup pour ton aide fiddy ;). Je corrige et je compile
i.firmin
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
Youpi :) xa marché ! J'ai le résultat voulu. Infiniment merci pour ton aide et pour ta disponibilité fiddy.
Bonjour,
J'ajoute que la syntaxe d'utilisation des conditions booléennes C1 C2 C3 est incorrecte, par exemple remplacer
else if (((age!=C1)&&(perm=C2)) || ((age=C1)&&(perm!=C2)))
par
else if ( (!C1 && C2) || (C1 && !C2) )
ou même en connaissant l'algèbre de Boole par
else if ( C1 ^ C2 )
qui utilise le ou exclusif ( C1 ou C2 vrai mais pas les deux).
Et c'est quoi ces return 0; partout dans le code? return c'est pour arrêter, il faut les supprimer.
J'ajoute que la syntaxe d'utilisation des conditions booléennes C1 C2 C3 est incorrecte, par exemple remplacer
else if (((age!=C1)&&(perm=C2)) || ((age=C1)&&(perm!=C2)))
par
else if ( (!C1 && C2) || (C1 && !C2) )
ou même en connaissant l'algèbre de Boole par
else if ( C1 ^ C2 )
qui utilise le ou exclusif ( C1 ou C2 vrai mais pas les deux).
Et c'est quoi ces return 0; partout dans le code? return c'est pour arrêter, il faut les supprimer.