Programme en C
Fermé
firk
-
4 juil. 2008 à 10:12
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 - 4 juil. 2008 à 13:31
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 - 4 juil. 2008 à 13:31
A voir également:
- Programme en C
- Programme demarrage windows 10 - Guide
- Mettre en veille un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Désinstaller programme windows 10 - Guide
- Sms programmé - Guide
11 réponses
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
81
4 juil. 2008 à 10:16
4 juil. 2008 à 10:16
Euh, en effet, vous ne devez pas avoir beaucoup appris le C, mais un autre programme… parce qu’il y a beaucoup, beaucoup d’erreurs, je vais les détailler !
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
81
4 juil. 2008 à 10:19
4 juil. 2008 à 10:19
//char* (status[6])={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités//,Douze_mois_sans_incident_paiement"};
char * status [6] = {"CDI_hors_ess_ou_preavis_lic" , "CDD_CNE_ou_CDI_essai" , "Etudiant,TNS" , "Retraités", "Douze_mois_sans_incident_paiement" } ;
//colocation(int R[],int L,char statut1,char statut2)
//{ int i,h,k;
//Là, j’ai vraiment rien compris
//switch(statut1,statut2){
//
//{ case(statut1=statut2 && statut2=status[5]): /* Cas 2 En place(les 2 premiers case) */
//printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
//}
//case(statut1=status[5] && statut2=!status[1]): /* Cas 1 En place avec n'importe qui */
//printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
//}
Ici, vous comparez des chaines de caractères, il faut que vous utilisiez strcmp.
char * status [6] = {"CDI_hors_ess_ou_preavis_lic" , "CDD_CNE_ou_CDI_essai" , "Etudiant,TNS" , "Retraités", "Douze_mois_sans_incident_paiement" } ;
//colocation(int R[],int L,char statut1,char statut2)
//{ int i,h,k;
//Là, j’ai vraiment rien compris
//switch(statut1,statut2){
//
//{ case(statut1=statut2 && statut2=status[5]): /* Cas 2 En place(les 2 premiers case) */
//printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
//}
//case(statut1=status[5] && statut2=!status[1]): /* Cas 1 En place avec n'importe qui */
//printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
//}
Ici, vous comparez des chaines de caractères, il faut que vous utilisiez strcmp.
le premier case correspond au cas où les 2 personnes ont le même status, à savoir 12 mois...
Je ne voudrais pas énumérer tous les if, c'est pourquoi j'ai introduis le switch suivi de case.
si j'utilise strcmp, je dois faire tous les if.
Est-ce que je peux utiliser strcmp dans les cases?
P.S : c'est bien strcmp(statut1==statut2; statut2=status[5]) pour le premier case ?
Je ne voudrais pas énumérer tous les if, c'est pourquoi j'ai introduis le switch suivi de case.
si j'utilise strcmp, je dois faire tous les if.
Est-ce que je peux utiliser strcmp dans les cases?
P.S : c'est bien strcmp(statut1==statut2; statut2=status[5]) pour le premier case ?
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
81
>
firk
4 juil. 2008 à 10:31
4 juil. 2008 à 10:31
non, tu es sous Linux, si tu veux connaître la syntaxe de strcmp, le mieux est de la chercher dans le manuel avant de demander… comme je suis bon prince :
strcmp(char*, char*) renvoie 0, si les deux pointeurs pointent vers une chaîne de caractères identiques (jusqu’au caractère '\0')
strcmp(char*, char*) renvoie 0, si les deux pointeurs pointent vers une chaîne de caractères identiques (jusqu’au caractère '\0')
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
4 juil. 2008 à 10:21
4 juil. 2008 à 10:21
je vois pas l'interet de ton switch la
fais plutot
if(statut1==statut2 && statut2==status[5])
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
else if(statut1==status[5] && statut2=!status[1])
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
et comme ton tableau status[] contien des char* il faut que statu1 et statu2 soit aussi des char*
et a ce moment tu doit les comparé non pas avec un (==) mais avec un STRCMP
fais plutot
if(statut1==statut2 && statut2==status[5])
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
else if(statut1==status[5] && statut2=!status[1])
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
et comme ton tableau status[] contien des char* il faut que statu1 et statu2 soit aussi des char*
et a ce moment tu doit les comparé non pas avec un (==) mais avec un STRCMP
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
81
4 juil. 2008 à 10:24
4 juil. 2008 à 10:24
kazou, status[5] est un pointeur, ça m’étonnerait qu’il veuille comparer des pointeurs… quoique pas sûr.
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
4 juil. 2008 à 10:26
4 juil. 2008 à 10:26
regarde la fin de mon post
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
81
4 juil. 2008 à 10:27
4 juil. 2008 à 10:27
en effet, j’avais pas vu ! Excuse-moi pour le dérangement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
4 juil. 2008 à 10:27
4 juil. 2008 à 10:27
tu ne déranges pas si tu as d'autre solution a apporter soit le bienvenu =)
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
4 juil. 2008 à 10:29
4 juil. 2008 à 10:29
non c'est
strcmp(statut1,statut2) && strcmp(statut2=status[5])
et je ne sais pas si tu a le droit de switch sur 2 variables
strcmp(statut1,statut2) && strcmp(statut2=status[5])
et je ne sais pas si tu a le droit de switch sur 2 variables
j'ai essayé comme tu m'as proposé mais j'ai les erreurs lorsque j'insère ceci, kazouu :
case(strcmp(statut1,statut2) && strcmp(statut2=status[5]) ):
warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast
warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast
warning: assignment makes integer from pointer without a cast
warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast
error: too few arguments to function ‘strcmp’
case(strcmp(statut1,statut2) && strcmp(statut2=status[5]) ):
warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast
warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast
warning: assignment makes integer from pointer without a cast
warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast
error: too few arguments to function ‘strcmp’
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
>
firk
4 juil. 2008 à 10:41
4 juil. 2008 à 10:41
lis tout ce que l'on marque !
et comme ton tableau status[] contien des char* il faut que statu1 et statu2 soit aussi des char*
et a ce moment tu doit les comparé non pas avec un (==) mais avec un STRCMP
et comme ton tableau status[] contien des char* il faut que statu1 et statu2 soit aussi des char*
et a ce moment tu doit les comparé non pas avec un (==) mais avec un STRCMP
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
>
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
4 juil. 2008 à 10:44
4 juil. 2008 à 10:44
si je corrige ton ton code a vu d'oeil ca donne un truc du genre
(status[6])={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_mois_sans_incident_paiement"};
colocation(int R[],int L,char* statut1,char* statut2)
{ int i,h,k;
switch(statut1,statut2){
{ case(strcmp(statut1,statut2) && strcmp(statut2,status[5])): /* Cas 2 En place(les 2 premiers case) */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
}
case(strcmp(statut1,status[5]) && !strcmp(statut2,status[1])): /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
}
(status[6])={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_mois_sans_incident_paiement"};
colocation(int R[],int L,char* statut1,char* statut2)
{ int i,h,k;
switch(statut1,statut2){
{ case(strcmp(statut1,statut2) && strcmp(statut2,status[5])): /* Cas 2 En place(les 2 premiers case) */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
}
case(strcmp(statut1,status[5]) && !strcmp(statut2,status[1])): /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
}
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
81
>
firk
4 juil. 2008 à 10:44
4 juil. 2008 à 10:44
firk, si statut1 et statut2 sont des entiers alors ça ne sert à rien de les comparer avec une chaîne de caractères, ni entre eux avec strcmp.
D’autre part tu n’as pas compris à quoi sert switch, il faut ABSOLUMENT que tu utilises if pour faire ce que tu veux.
if ((statut1 == statut2) && (statut2 == 5))
D’autre part tu n’as pas compris à quoi sert switch, il faut ABSOLUMENT que tu utilises if pour faire ce que tu veux.
if ((statut1 == statut2) && (statut2 == 5))
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
81
4 juil. 2008 à 10:35
4 juil. 2008 à 10:35
Bonjour, la structure de switch, c’est
switch(EXPRESSION) {
case VALEUR :
[…] break;
etc.
}
statut1, statut2 est effectivement une expression, mais qui ne sert à rien, puisque l’opérateur virgule, en C, renvoie la deuxième valeur ;
et ici, au lieu de faire des comparaisons avec ==, tu fais des affectations avec =, qui te renvoient automatiquement la valeur de droite… bref.
switch(EXPRESSION) {
case VALEUR :
[…] break;
etc.
}
statut1, statut2 est effectivement une expression, mais qui ne sert à rien, puisque l’opérateur virgule, en C, renvoie la deuxième valeur ;
et ici, au lieu de faire des comparaisons avec ==, tu fais des affectations avec =, qui te renvoient automatiquement la valeur de droite… bref.
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
4 juil. 2008 à 10:39
4 juil. 2008 à 10:39
ouai et je ne vois pas la difference entre faire
switch
case
case
...
ou
if
else if
else if
..
mais bon a toi de voir
switch
case
case
...
ou
if
else if
else if
..
mais bon a toi de voir
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
81
>
firk
4 juil. 2008 à 10:46
4 juil. 2008 à 10:46
dans ce cas, si tu veux utiliser switch, il faut que tu fasses
switch (statut1 == statut2) {
case 0: // statuts différents
break;
default: // statuts identiques
break;
}
switch (statut1 == statut2) {
case 0: // statuts différents
break;
default: // statuts identiques
break;
}
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
81
>
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
4 juil. 2008 à 10:48
4 juil. 2008 à 10:48
PS. sincèrement tu m’as l’air de ne pas connaître la syntaxe du C précisément, il faut absolument que tu lises un cours de C avant de continuer, car tu fais énormément d’erreurs !
Je te conseillerais le cours en lien : http://sites.univ-provence.fr/wcpp/V2/index.htm
Je te conseillerais le cours en lien : http://sites.univ-provence.fr/wcpp/V2/index.htm
firk
>
(Pabix)
Messages postés
578
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
27 octobre 2009
4 juil. 2008 à 11:26
4 juil. 2008 à 11:26
Si je fais qqch du style :
switch(statut1==statut2){
case(0):statut2=status[5]; /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
default( );statut2==status[5]: /* Cas 2 En place(les 2 premiers case) */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
}
switch(statut1==statut2){
case(0):statut2=status[5]; /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
default( );statut2==status[5]: /* Cas 2 En place(les 2 premiers case) */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
}
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
>
firk
4 juil. 2008 à 11:29
4 juil. 2008 à 11:29
mais c'est affreux ^^
arrête de vouloir faire un a tout prix un switch
un switch a la base c'est pour tester les different resultat d'une expression
donc si tu veux vraiment faire un switch faut que tu fasse
switch(statut1==statut2){
case(0): if(statut2=status[5]) /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
mais c'est vraiment très très laid
arrête de vouloir faire un a tout prix un switch
un switch a la base c'est pour tester les different resultat d'une expression
donc si tu veux vraiment faire un switch faut que tu fasse
switch(statut1==statut2){
case(0): if(statut2=status[5]) /* Cas 1 En place avec n'importe qui */
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");break;
mais c'est vraiment très très laid
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
4 juil. 2008 à 10:48
4 juil. 2008 à 10:48
moi je te conseil
(status[6])={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_mois_sans_incident_paiement"};
colocation(int R[],int L,char* statut1,char* statut2)
{ int i,h,k;
if(strcmp(statut1,statut2) && strcmp(statut2,status[5]))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n")
else if(strcmp(statut1,status[5]) && !strcmp(statut2,status[1]))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
}
(status[6])={"CDI_hors_ess_ou_preavis_lic,CDD_CNE_ou_CDI_essai,Etudiant,TNS,Retraités,Douze_mois_sans_incident_paiement"};
colocation(int R[],int L,char* statut1,char* statut2)
{ int i,h,k;
if(strcmp(statut1,statut2) && strcmp(statut2,status[5]))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n")
else if(strcmp(statut1,status[5]) && !strcmp(statut2,status[1]))
printf("Vous remplissez les conditions d'acceptation auprès de notre assurance\n");
}
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
>
firk
4 juil. 2008 à 11:57
4 juil. 2008 à 11:57
ce if la
if(strcmp(statut1,statut2) && strcmp(statut2,status[5]))
correspond au cas ou statut 1=statu2 et ou statu2= status[5]
if(strcmp(statut1,statut2) && strcmp(statut2,status[5]))
correspond au cas ou statut 1=statu2 et ou statu2= status[5]
firk
>
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
4 juil. 2008 à 12:07
4 juil. 2008 à 12:07
quand tu dis statut1=statut2 : en français, c'est bien statut1 et statut2 sont identiques, n'est-ce pas, kazouu?
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
>
firk
4 juil. 2008 à 12:09
4 juil. 2008 à 12:09
oui strcmp renvoi TRUE quand 2 chaine sont egal
donc if(strcmp(chain1,chaine2)){ /* ici tu met les instruction qu'il faut excuté quand la chaine 1 est identique ( attention a la casse ) a la chaine2 */
donc if(strcmp(chain1,chaine2)){ /* ici tu met les instruction qu'il faut excuté quand la chaine 1 est identique ( attention a la casse ) a la chaine2 */
zavenger
Messages postés
811
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
20 avril 2012
161
4 juil. 2008 à 11:54
4 juil. 2008 à 11:54
Bonjour,
Je peux me tromper bien sur, mais je me demande si tu ne prends pas le probleme a l'envers. Ne serait il pas possible de calculer pour chaque cas final les conditions d'acceptation. Je n'ai bien sur pas les details, mais faire qque chose comme:
AssuranceOK = condition1 ET condition2 ou conditin3
....
ensuite
faire le traitement de tous tes resultats
Juste une idee comme cela ...
Je peux me tromper bien sur, mais je me demande si tu ne prends pas le probleme a l'envers. Ne serait il pas possible de calculer pour chaque cas final les conditions d'acceptation. Je n'ai bien sur pas les details, mais faire qque chose comme:
AssuranceOK = condition1 ET condition2 ou conditin3
....
ensuite
faire le traitement de tous tes resultats
Juste une idee comme cela ...
kazouu
Messages postés
466
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juillet 2008
12
4 juil. 2008 à 11:55
4 juil. 2008 à 11:55
oui après ca c'est l'algo nous on l'aide juste pour le codage ^^
zavenger
Messages postés
811
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
20 avril 2012
161
4 juil. 2008 à 12:57
4 juil. 2008 à 12:57
mais c'est peut-etre justement l'algo qui fait que le codage est difficile. C'est pour cela que je demande si l'algo ne pourrait pas etre revu, car il a l'air d'avoir un algo du style
si condiftion1 alors resultat1
si condiftion2 alors resultat2
si condiftion3 alors resultat1
...
Alors qu'il faudrait peut etre avoir un algo
on a resultat1 si condition1 et condition3
on a resultat2 si condition2
...
si condiftion1 alors resultat1
si condiftion2 alors resultat2
si condiftion3 alors resultat1
...
Alors qu'il faudrait peut etre avoir un algo
on a resultat1 si condition1 et condition3
on a resultat2 si condition2
...
firk
>
zavenger
Messages postés
811
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
20 avril 2012
4 juil. 2008 à 13:24
4 juil. 2008 à 13:24
oui,
pour 2 locataires :
si les 2 sont etudiant, alors pour tout revenu, on a "caution solidaire".
si etudiant+CDD : si revenu (CDD)>=2*L, alors "caution solidaire".
si revenu (CDD)<2*L, alors "impossible.
il y a des situations où un statut domine tous les autres, 2 statuts qui sont dominés, etc...
et ainsi de suite. le noeud de l'algorithme réside dans le fait de bien combiner le statut des 2 locataires.
(je dois aussi faire pour 3 locataires, c'est plus complexe encore).
pour 2 locataires :
si les 2 sont etudiant, alors pour tout revenu, on a "caution solidaire".
si etudiant+CDD : si revenu (CDD)>=2*L, alors "caution solidaire".
si revenu (CDD)<2*L, alors "impossible.
il y a des situations où un statut domine tous les autres, 2 statuts qui sont dominés, etc...
et ainsi de suite. le noeud de l'algorithme réside dans le fait de bien combiner le statut des 2 locataires.
(je dois aussi faire pour 3 locataires, c'est plus complexe encore).
zavenger
Messages postés
811
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
20 avril 2012
161
>
firk
4 juil. 2008 à 13:31
4 juil. 2008 à 13:31
donc tu crois pouvoir repenser ton algo?