Ben je ne vois pas d'appel à tp2 dans la fonction tp1 !!!Envoyé par lucky31
Ben je ne vois pas d'appel à tp2 dans la fonction tp1 !!!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 caEnvoyé par crocodilex
Donc tu commences par tp2 alors ?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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9void 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 fauxEnvoyé 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=.....Envoyé par crocodilex
Lorsque tu déclares un tableau de 5 élements comme ceci :Envoyé par lucky31
tab[0] est le premier élément
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5for (i=0;i<nb;i++) { sommet[i]= s ; ...... }
mais lors de l'execution le tableau ne s'affiche pasEnvoyé par crocodilex
Envoyé par lucky31
Cette ligne permet de flusher le tampon d'entrée (stdin).
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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...
//initialisation du tableau sommetEnvoyé 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 !!!!!Envoyé par lucky31
J'ai dis quoi pour le scanf ?
Et pour les tableaux ?
je suis bloqué dans l'affichage des listesEnvoyé par crocodilex
mais j'utilise tjrs les scanf je ne cpas utilisé d'autre choses alors si tu veux tjrs que je te montre ?????Envoyé par crocodilex
mais j'ai pas encore fini avec la fonction indexEnvoyé par crocodilex
mais il s'execute jusqu'a entrer l'extremite final!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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...![]()
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...Envoyé par lucky31
Partager