Ben je ne vois pas d'appel � tp2 dans la fonction tp1 !!!Citation:
Envoy� par lucky31
Version imprimable
Ben je ne vois pas d'appel � tp2 dans la fonction tp1 !!!Citation:
Envoy� par lucky31
oui c vrai nous en nous a demander d'abord d'effectuer le tp 1 (2 listes) puis tp2( matrice) mais moi j'ai d'abord rempli la matrice puis j'ai fait appel a la matrice pour quel m'aide a me donner le succ de chaque sommets c caCitation:
Envoy� par crocodilex
Donc tu commences par tp2 alors ?Citation:
Envoy� par lucky31
Bon, �tant donn� que tu ne veux pas remplacer les scanf par des fgets, on va essayer de garder tes scanf, a ceci pr�s :
Ca evitera quelques soucis, mais ce n'est pas gagn�.Code:
1
2
3
4
5
6
7
8
9 void tp2 () { int c; ...... printf ("donner le nombre de sommets : "); scanf ("%d",&nb); while ( ((c = getchar()) != '\n') && c != EOF); .....
Fais �a partout o� tu as scanf, tout en restant coh�rent bien entendu.
je vous pose 1 question: je veux remplir 1 tableau avec de sommets j'ai ecris ca mais je crois que c fauxCitation:
Envoy� par crocodilex
//initialisation du tableau sommet
printf("entrer les sommets:\n");
scanf("%c",&s);
for (i=1;i<=nb;i++)
{
sommet[i]= s ;
printf(" ");
}
vous pouvez m'expliquer ca sert a quoi c=.....Citation:
Envoy� par crocodilex
Lorsque tu d�clares un tableau de 5 �lements comme ceci :Citation:
Envoy� par lucky31
tab[0] est le premier �l�mentCode:int tab[5];
et
tab[4] est le cinqui�me �lements :)
Or, toi tu commences ta boucle � 1 et tu termines � une valeur en dehors du tableau, d'o� plantage.
Il faut que tu fasses :
Code:
1
2
3
4
5 for (i=0;i<nb;i++) { sommet[i]= s ; ...... }
mais lors de l'execution le tableau ne s'affiche pasCitation:
Envoy� par crocodilex
Citation:
Envoy� par lucky31
Cette ligne permet de flusher le tampon d'entr�e (stdin).Code:while ( ((c = getchar()) != '\n') && c != EOF);
Sur ton clavier lorsque tu rentres un entier, tu valides par la touche entr�e.
Donc dans le tampon, tu as un entier + le code correspondant � la touche entr�e (le fameux "\n"). Dans ton cas, scanf attends seulement un entier.
Que fait-on du "\n" ? Et bien on le flush. De plus rien ne t'empeches de rentrer un entier + n'importe quoi + entr�e. C'est pour ces raisons qu'on emploi la mani�re radicale ; tirer la chasse d'eau...
Je n'ai pas saisi l� !!!!Citation:
Envoy� par lucky31
//initialisation du tableau sommetCitation:
Envoy� par crocodilex
printf("entrer les sommets pour terminer afficher '*': ");
printf("");
scanf("%c",&s);
for (i=0;i<nb;i++)
{
sommet[i]= s ;
printf(" ");
}
//initialisation de la matrice M
for (i=1;i<=nb;i++)
{ printf("\n");
for (j=1;j<=nb;j++)
{
M[i][j]=0;
printf ("\t%d\t",M[i][j]);
printf ("\n");
}
}il m'affiche n'importe quoi lors de l'execution!!!
Tu n'as pas lus mes pr�c�dents messages !!!!!:sm:Citation:
Envoy� par lucky31
J'ai dis quoi pour le scanf ?
Et pour les tableaux ?
Alors cette fonction tp2() ? Elle avance ?
je suis bloqu� dans l'affichage des listesCitation:
Envoy� par crocodilex
Montres un peu ta fonction tp2() .Citation:
Envoy� par lucky31
mais j'utilise tjrs les scanf je ne cpas utilis� d'autre choses alors si tu veux tjrs que je te montre ?????Citation:
Envoy� par crocodilex
Ben oui, montres...Citation:
Envoy� par lucky31
mais j'ai pas encore fini avec la fonction indexCitation:
Envoy� par crocodilex
mais il s'execute jusqu'a entrer l'extremite final!!Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 void tp2 () {//tp1(); int i,j,c; char som1,som2; int nb=0; int nbr=0; char sommet[30]; int M[30][30]; printf ("donner le nombre de sommets : "); scanf ("%d",&nb); printf ("donner le nombre d'arcs : "); scanf ("%d",&nbr); printf("\n"); //initialisation du tableau sommet for (i=0;i<nb;i++) { printf("\nDonner le nom du sommet nø%d :",i); scanf("%s",&sommet[i]); } //initialisation de la matrice M for (i=1;i<=nb;i++) { for (j=1;j<=nb;j++) { getchar(); printf("(%d,%d)= ",i,j); scanf("%d",&M[i][j]); printf("\n"); } } printf( "la lecture de la matrice sommet-sommet"); for(i=1;i<=nb;i++) { printf("\n"); for (j=1;j<=nb;j++) printf ("\t%d\t",M[i][j]); printf ("\n"); } //parcours en profondeur du graphe for (i=1;i<=nbr;i++) { int x,y; printf ("donner l'extremite initiale de l'arc \n: "); scanf ("%s",&som1); printf ("donner l'extremite terminale de l'arc \n: "); scanf ("%s",&som2); //x donne l'indice de som1 dans le tableau sommet x=Index(som1); // meme chose pour y y=Index(som2); M[x][y]=1; } //affichage de la matrice for (i=1;i<=nb;i++) { for (j=1;j<=nb;j++) printf ("%7d",M[i][j]); printf ("\n"); } tp1 (); }
Bon all�, en vrac quelques corrections non exhaustives (compares avec ce que tu as d�j�), parceque je commence � fatiguer un peu :( :
La fonction main :
La fonction choisir :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 int main () { int choix; do { choix = choisir (); if (choix==1) tp1 (); if (choix==2) tp2 (); if (choix==3) tp3 (); //if (choix==4) tp4 (); } while (choix!=5); return 0; }
La fonction tp2:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 int choisir () { int choix, c; printf ("tapez 1 pour effectuer le tp1 \n"); printf ("tapez 2 pour effectuer le tp2 \n"); printf ("tapez 3 pour effectuer le tp3 \n"); printf ("tapez 4 pour effectuer le tp4 \n"); printf ("tapez 5 pour sortir \n"); printf (" Donner votre choix: "); scanf ("%d",&choix); while ( ((c = getchar()) != '\n') && c != EOF); return (choix); }
Je vais me coucher.....:sleep:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 void tp2 () {//tp1(); int i,j,c; char som1,som2; int nb=0; int nbr=0; char sommet[30][30]; /* Tableau de 30 chaines de caractères */ int M[30][30]; printf ("donner le nombre de sommets : "); scanf ("%d",&nb); while ( ((c = getchar()) != '\n') && c != EOF); printf ("donner le nombre d'arcs : "); scanf ("%d",&nbr); while ( ((c = getchar()) != '\n') && c != EOF); //printf("\n"); //initialisation du tableau sommet for (i=0;i<nb;i++) { printf("\nDonner le nom du sommet nø%d :",i); scanf("%s",&sommet[i][0]); while ( ((c = getchar()) != '\n') && c != EOF); } //initialisation de la matrice M for (i=0;i<nb;i++) { for (j=0;j<nb;j++) { //getchar(); printf("(%d,%d)= ",i,j); scanf("%d",&M[i][j]); while ( ((c = getchar()) != '\n') && c != EOF); //printf("\n"); } } printf( "la lecture de la matrice sommet-sommet\n"); for(i=0;i<nb;i++) { //printf("\n"); for (j=0;j<nb;j++) printf ("\t%d\t",M[i][j]); printf ("\n"); } //parcours en profondeur du graphe for (i=0;i<nbr;i++) { int x,y; printf ("donner l'extremite initiale de l'arc \n: "); scanf ("%c",&som1); while ( ((c = getchar()) != '\n') && c != EOF); printf ("donner l'extremite terminale de l'arc \n: "); scanf ("%c",&som2); while ( ((c = getchar()) != '\n') && c != EOF); //x donne l'indice de som1 dans le tableau sommet x=Index(som1); // meme chose pour y y=Index(som2); M[x][y]=1; } //affichage de la matrice for (i=0;i<nb;i++) { for (j=0;j<nb;j++) printf ("%7d",M[i][j]); printf ("\n"); } tp1 (); }
Si quelqu'un veut bien prendre la rel�ve...:mur:
le dernier code poser bloque lors de l'execution au niveau de la fonction Index( elle est fait pour remplir la liste l1 car elle contient l'@ des successeurs et j'ai utilis� la matrice pour cela)
merci de vouloir bien m'aider
Ce code est incomplet. On ne peut pas le compiiler. Tu dois toujours v�rifier que ce que tu postes est compilable ou alors tu demandes pourquoi il ne l'est pas...Citation:
Envoy� par lucky31