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