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   -
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 :
  • 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:

2 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 :
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,
0
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
0
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.
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
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.
0
i.firmin Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Ok. J'ai pris la syntaxe Finsi de l'énoncé pour le return 0. Merci pour ton aide , je corrige , je compile et on verra la suite
0
i.firmin Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
:) Super ! xa marche comme sur des roulettes maintenant. Infiniment merci Dalfab pour ton aide et aussi pour ta disponibilité
0