l_seringa Posté(e) le 6 mars 2006 Partager Posté(e) le 6 mars 2006 slt tout le monde.j'ai vraiment besoin de votre aide.je suis une etudiante en informatique et je debute a peine de programmer en dev c++.alors j'ai ecris un programme pr saisir un graphe .et le probleme c'et que a chaque fois ke j'excute comme si la boucle "for" est indifinie.alors si vous voulé je vous ecris le programme et vous esssayé e m'aider .merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 6 mars 2006 Partager Posté(e) le 6 mars 2006 Je pense qu'on pourrait essayer de t'aider si : 1. Tu t'exprimais correctement 2. Tu postais le code incorrect En l'absence de ces deux éléments, on ne peut rien pour toi ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
LePhasme Posté(e) le 6 mars 2006 Partager Posté(e) le 6 mars 2006 Petite précision, Dev C++ est un logiciel pour programmer en C/C++, donc tu ne programmes pas en "dev c++" mais en C ou en C++. Ensuite une boucle for "indifinie" ca existe pas, soit t'as voulu dire infinie, donc tu as un problème avec ta condition d'arrêt, soit tu as voulu dire indéfinie et une boucle for indéfinie ca existe pas... Le ton à l'air un peu sec mais ca reflète pas ce que je pense t'inquiète pas, faut juste que tu précises plus ta question, en nous donnant un bout de code par exemple. Lien vers le commentaire Partager sur d’autres sites More sharing options...
l_seringa Posté(e) le 10 mars 2006 Auteur Partager Posté(e) le 10 mars 2006 Petite précision, Dev C++ est un logiciel pour programmer en C/C++, donc tu ne programmes pas en "dev c++" mais en C ou en C++. Ensuite une boucle for "indifinie" ca existe pas, soit t'as voulu dire infinie, donc tu as un problème avec ta condition d'arrêt, soit tu as voulu dire indéfinie et une boucle for indéfinie ca existe pas... Le ton à l'air un peu sec mais ca reflète pas ce que je pense t'inquiète pas, faut juste que tu précises plus ta question, en nous donnant un bout de code par exemple. ok merci alors je vais te donner tout mon code en t'expliquant le probleme.moi je programme avec c mais je compile en devc++.je doit saisir un graphe alors je doit mettre les sommets dans un tableau tel que L0 et les successeurs de chaque sommets dans un autre tableau tel queL2 et le adresse des du premier successeurs de chaque sommets dansL1 alors tout marche bien sauf dans quelues boucle ou j'ai preciser le probleme dans des commentaire alors si vous pouvais m'aider et ben merci d'avance #include<stdio.h> main() { int i,j,k,x,ns,nsuc,l1[100]; char l0[100],l2[100]; k=0; printf("entrer le nbre e sommets:\n"); scanf("%d",&ns); if(ns>100) printf("erreur\n"); else { for(i=0;i<ns;i++) { printf("entrer le sommet:\n"); scanf("%a",&l0); printf("entrer le nbre de successeur:\n"); scanf("%d",&nsuc); if(nsuc!=0) x=k+nsuc-1; for(j=k;j<=x;j++) printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/ scanf("%a",l2[j]); l1=k; k=l1+nsuc; else l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/ l1=k; k=k+1; } l1[ns]=nsuc+l1[ns-1]+1; } } et merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 10 mars 2006 Partager Posté(e) le 10 mars 2006 scanf("%a",&l0); Pour un caractère c'est %c, mais tu ne peux pas faire comme ça de toutes façons tu aura un \n dans le buffer. Il faut le vider après.Utilise getchar plutôt. if(nsuc!=0)x=k+nsuc-1; Attention si nscu=0 au premier tour, x ne sera pas initialisé et c'est dangereux. for(j=k;j<=x;j++)printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/ scanf("%a",l2[j]); l1=k; k=l1+nsuc; Il manque peut être des accolades pour arrêter ton for au bon endroit non ?Je n'ai pas regardé le reste. Lien vers le commentaire Partager sur d’autres sites More sharing options...
LePhasme Posté(e) le 10 mars 2006 Partager Posté(e) le 10 mars 2006 Un petit conseil, met ton code entre les balises comme ca si tu l'as indenté ca gardera l'indentation parce que la ca complique un peu... Lien vers le commentaire Partager sur d’autres sites More sharing options...
l_seringa Posté(e) le 11 mars 2006 Auteur Partager Posté(e) le 11 mars 2006 scanf("%a",&l0); Pour un caractère c'est %c, mais tu ne peux pas faire comme ça de toutes façons tu aura un \n dans le buffer. Il faut le vider après.Utilise getchar plutôt. if(nsuc!=0)x=k+nsuc-1; Attention si nscu=0 au premier tour, x ne sera pas initialisé et c'est dangereux. for(j=k;j<=x;j++)printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/ scanf("%a",l2[j]); l1=k; k=l1+nsuc; Il manque peut être des accolades pour arrêter ton for au bon endroit non ?Je n'ai pas regardé le reste. merci pour ca mais ca reste toujours le probleme.je suis un peu debutante en c et je doit rendre ce projet cette semaine alors j'ai vraimnt besoin de si quelqu'un peut m'aider car j'ai eu marre e ce tp.alors svp si je pourrais vous enner tres bien l'enoncé de ce tp et me le corrigé.merci d'avance. ou doit je mettre le getchar.?merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
LePhasme Posté(e) le 12 mars 2006 Partager Posté(e) le 12 mars 2006 On veut bien t'aider mais faut que tu nous dises si tu as encore des problèmes après les corrections proposées par théocrite et si oui lesquels en nous postant le code et le problème rencontré. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 12 mars 2006 Partager Posté(e) le 12 mars 2006 je pourrais vous enner tres bien l'enoncé de ce tp et me le corrigé.merci d'avance. Relis toi stp, c'est vraiment pas facile de te comprendre. Ce serait bien que tu colle ton code (entre des balises [ CODE]) et que tu nous dise ce qui fonctionne ce qui ne fonctionne pas, ce que tu tentais de faire et comment tu pensait le faire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
toon56 Posté(e) le 13 mars 2006 Partager Posté(e) le 13 mars 2006 main() { int i,j,k,x,ns,nsuc,l1[100]; char l0[100],l2[100]; k=0; printf("entrer le nbre e sommets:\n"); scanf("%d",&ns); if(ns>100) { printf("erreur\n"); } else { for(i=0;i<ns;i++) { printf("entrer le sommet:\n"); scanf("%a",&l0[i]); printf("entrer le nbre de successeur:\n"); scanf("%d",&nsuc); if(nsuc!=0) x=k+nsuc-1; for(j=k;j<=x;j++) printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/ scanf("%a",l2[j]); l1[i]=k; k=l1[i]+nsuc; else l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/ l1[i]=k; k=k+1; } l1[ns]=nsuc+l1[ns-1]+1; } } Je pense que comme ca il est plus lisible... for(j=k;j<=x;j++) printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/ Ici vu que tu ne met pas d'accolades ta boucle for n'execute que cette ligne en boucle jusqu' a ce que j soit plus grand que x. if(nsuc!=0) x=k+nsuc-1; ... else l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/ Est ce que ce ELSE depend de ce IF? Si oui alors tu devrais avoir ca: if(nsuc!=0) { x=k+nsuc-1; ... } else l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/ Quelques autres conseils: main() { // Sépare tes variables histoire d'avoir un programme lisible, si un jour tu dois le reutiliser il te faudra lire tout ton programme pour savoir a quoi servent tes variables */ int i,j,k=0,x; int ns=0; /* Nombre de sommets */ int nsuc; /* Nombre de successeurs */ int l1[100]; char l0[100],l2[100]; printf("Entrez le nombre de sommets:\n"); scanf("%d",&ns); if(ns>100) { printf("Nombre de sommets trop grand!\n"); return; } /* etant donné que si ce nombre est trop grand ton programme ne fait plus rien tu peut le quitter comme ca */ for(i=0;i<ns;i++) { printf("entrer le sommet:\n"); scanf("%a",&l0[i]); printf("entrer le nbre de successeur:\n"); scanf("%d",&nsuc); if(nsuc!=0) /* ce IF ne lance qu'une ligne de programme et ne laisse pas de place à un else */ x=k+nsuc-1; for(j=k;j<=x;j++) { printf("Entrez le successeur:\n"); /*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/ } /* Cette accolade bien qu'elle ne soit pas dans ton programme existe et ne laisse qu'une ligne de programme dans la boucle for... tu devrais la descendre là ou elle devrais être */ scanf("%a",l2[j]); l1[i]=k; k=l1[i]+nsuc; else /* ce ELSE ne depend de rien si tu veix qu'il depende du if ajoute des {} */ l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/ l1[i]=k; k=k+1; } l1[ns]=nsuc+l1[ns-1]+1; } Tu devrais prendre l'habitude dès maintenant de faire des programmes lisibles.. en cas d'erreur tu voit tout de suite ce qui ne va pas! par exemple les {} manquantes. Si tu tries des le depart tes variables tu pourra t'y retrouver dans ton programme en le debuguant. Essaie aussi de donner une valeur a tes variables dès le début (ce n'est aps obligatoires mais c'est mieux). Tu ne peux utiliser un ELSE avec un IF que dans deux conditions: IF test1 { ligne de code 1; ligne de code 2; ligne de code 3; ... } ELSE { ... /* une ou plusieurs ligen de code (si une seule alors les accolades ne sont pas necessaires */ } ou bien IF test1 ligne de code; //une seule ligne de code ELSE { ... /* une ou plusieurs ligen de code (si une seule alors les accolades ne sont pas necessaires */ } Dans le deuxieme cas si tu met plus d'une ligne de code entre le IF et le ELSE alors ce ELSE ne sert à rien puisque non utilisé. Je m'etonnes que ton compilateur ne t'ai pas sorti d'erreur par ailleurs... Voilà ton programme n'est pas corrigé mais je pense qu'avec ca tu devrais pouvoir le faire par toi même. Ce qui est toujours mieux! :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
l_seringa Posté(e) le 13 mars 2006 Auteur Partager Posté(e) le 13 mars 2006 main() { int i,j,k,x,ns,nsuc,l1[100]; char l0[100],l2[100]; k=0; printf("entrer le nbre e sommets:\n"); scanf("%d",&ns); if(ns>100) { printf("erreur\n"); } else { for(i=0;i<ns;i++) { printf("entrer le sommet:\n"); scanf("%a",&l0[i]); printf("entrer le nbre de successeur:\n"); scanf("%d",&nsuc); if(nsuc!=0) x=k+nsuc-1; for(j=k;j<=x;j++) printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/ scanf("%a",l2[j]); l1[i]=k; k=l1[i]+nsuc; else l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/ l1[i]=k; k=k+1; } l1[ns]=nsuc+l1[ns-1]+1; } } Je pense que comme ca il est plus lisible... for(j=k;j<=x;j++) printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/ Ici vu que tu ne met pas d'accolades ta boucle for n'execute que cette ligne en boucle jusqu' a ce que j soit plus grand que x. if(nsuc!=0) x=k+nsuc-1; ... else l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/ Est ce que ce ELSE depend de ce IF? Si oui alors tu devrais avoir ca: if(nsuc!=0) { x=k+nsuc-1; ... } else l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/ Quelques autres conseils: main() { // Sépare tes variables histoire d'avoir un programme lisible, si un jour tu dois le reutiliser il te faudra lire tout ton programme pour savoir a quoi servent tes variables */ int i,j,k=0,x; int ns=0; /* Nombre de sommets */ int nsuc; /* Nombre de successeurs */ int l1[100]; char l0[100],l2[100]; printf("Entrez le nombre de sommets:\n"); scanf("%d",&ns); if(ns>100) { printf("Nombre de sommets trop grand!\n"); return; } /* etant donné que si ce nombre est trop grand ton programme ne fait plus rien tu peut le quitter comme ca */ for(i=0;i<ns;i++) { printf("entrer le sommet:\n"); scanf("%a",&l0[i]); printf("entrer le nbre de successeur:\n"); scanf("%d",&nsuc); if(nsuc!=0) /* ce IF ne lance qu'une ligne de programme et ne laisse pas de place à un else */ x=k+nsuc-1; for(j=k;j<=x;j++) { printf("Entrez le successeur:\n"); /*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/ } /* Cette accolade bien qu'elle ne soit pas dans ton programme existe et ne laisse qu'une ligne de programme dans la boucle for... tu devrais la descendre là ou elle devrais être */ scanf("%a",l2[j]); l1[i]=k; k=l1[i]+nsuc; else /* ce ELSE ne depend de rien si tu veix qu'il depende du if ajoute des {} */ l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/ l1[i]=k; k=k+1; } l1[ns]=nsuc+l1[ns-1]+1; } Tu devrais prendre l'habitude dès maintenant de faire des programmes lisibles.. en cas d'erreur tu voit tout de suite ce qui ne va pas! par exemple les {} manquantes. Si tu tries des le depart tes variables tu pourra t'y retrouver dans ton programme en le debuguant. Essaie aussi de donner une valeur a tes variables dès le début (ce n'est aps obligatoires mais c'est mieux). Tu ne peux utiliser un ELSE avec un IF que dans deux conditions: IF test1 { ligne de code 1; ligne de code 2; ligne de code 3; ... } ELSE { ... /* une ou plusieurs ligen de code (si une seule alors les accolades ne sont pas necessaires */ } ou bien IF test1 ligne de code; //une seule ligne de code ELSE { ... /* une ou plusieurs ligen de code (si une seule alors les accolades ne sont pas necessaires */ } Dans le deuxieme cas si tu met plus d'une ligne de code entre le IF et le ELSE alors ce ELSE ne sert à rien puisque non utilisé. Je m'etonnes que ton compilateur ne t'ai pas sorti d'erreur par ailleurs... Voilà ton programme n'est pas corrigé mais je pense qu'avec ca tu devrais pouvoir le faire par toi même. Ce qui est toujours mieux! :) merci ca m'a vraiment aider.j'ai voulu seulement préciser que je les exécuter sur boorland c++ et je les bien modifier et ben tout marche bien.o merveille sauf qu'il faut que j'affiche tout mes tableau et il ya toujours un msg ui apparait c linker warning:no module definition file specified:using default.et ca c on cas d'affichage.merci si vou connaisait la reponse. ah oui comment ca faire mon programme entre les balises.merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Captain Hadock Posté(e) le 13 mars 2006 Partager Posté(e) le 13 mars 2006 linker warning:no module definition file specified:using default.et ca c on cas d'affichage.merci si vou connaisait la reponse. ah oui comment ca faire mon programme entre les balises.merci Les warnings ne sont pas des erreurs fatales. Lorsque tu tape ton message sur PCI, tape [ code ](sans les espaces entre les crochets avant le code source et [ /code ] (sans les espaces entre les crochets) après, et ça sera un poil plus lisible.... Lien vers le commentaire Partager sur d’autres sites More sharing options...
l_seringa Posté(e) le 14 mars 2006 Auteur Partager Posté(e) le 14 mars 2006 linker warning:no module definition file specified:using default.et ca c on cas d'affichage.merci si vou connaisait la reponse. ah oui comment ca faire mon programme entre les balises.merci Les warnings ne sont pas des erreurs fatales. Lorsque tu tape ton message sur PCI, tape [ code ](sans les espaces entre les crochets avant le code source et [ /code ] (sans les espaces entre les crochets) après, et ça sera un poil plus lisible.... bonjour.quesque ca veut dire mettre un programme entre les balises. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Au lieu d'écrire #include <stdio.h> tu écris : [CODE]#include <stdio.h>[ /CODE] (crochet CODE crochet #include ...) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Et si vraiment tu n'arrives pas à taper [ code ], il suffit de surligner le texte puis de cliquer sur le bouton représentant un dièse (#) dans la barre d'outils de formatage, quand tu écris ton post. Rappelle-toi que plus ton post est clair et lisible, et mieux on pourra t'aider ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.