Je n'arrive pas a avoir le resultat souhaiteé avec mon progrmme

Résolu/Fermé
i.firmin Messages postés 9 Date d'inscription mardi 17 mai 2016 Statut Membre Dernière intervention 18 mai 2016 - Modifié par baladur13 le 17/05/2016 à 17:37
i.firmin Messages postés 9 Date d'inscription mardi 17 mai 2016 Statut Membre Dernière intervention 18 mai 2016 - 18 mai 2016 à 09:56
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.

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
17 mai 2016 à 20:50
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 mardi 17 mai 2016 Statut Membre Dernière intervention 18 mai 2016
18 mai 2016 à 09:05
Merci beaucoup pour ton aide fiddy ;). Je corrige et je compile
0
i.firmin Messages postés 9 Date d'inscription mardi 17 mai 2016 Statut Membre Dernière intervention 18 mai 2016
18 mai 2016 à 09:56
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
18 mai 2016 à 08:51
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 mardi 17 mai 2016 Statut Membre Dernière intervention 18 mai 2016
Modifié par i.firmin le 18/05/2016 à 09:13
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 mardi 17 mai 2016 Statut Membre Dernière intervention 18 mai 2016
18 mai 2016 à 09:53
:) Super ! xa marche comme sur des roulettes maintenant. Infiniment merci Dalfab pour ton aide et aussi pour ta disponibilité
0