Probléme en C

Fermé
dazlouk Messages postés 13 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 2 juin 2008 - 2 juin 2008 à 19:39
dazlouk Messages postés 13 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 2 juin 2008 - 2 juin 2008 à 23:20
bonsoir a tous,
j'ai un petit problème en langage C, en vérité je suis débutant en ( C ) ,donc je n'arrive ni a compiler ni a exécuter la solution que j'ai supposer pour un exercice de parcours de graphe.
l'exo consiste à implémenter l'algorithme du parcours de graphe en utilisant la représentation matricielle.j'ai peu bricoler la solution ci-dessous que je trouve logiquement valable mais je n'arrive pas à corriger les erreur qui me sont affiché après l'avoir compilé a l'aide de CODE BLOCKS.
ma solution est tel:

include<stdio.h>
void marque(int,int*);
main()
{
int i,n,j,x; int tab[n][n]; int v[n];
printf ("donnez le nbre de sommets:");
scanf("%d",&n);
printf("\n mettre 1 pour accepter un arc 0 sinon:");
for (i=0;i<n;i++)
tab[i][i]=0;
for (i=0;i<n;i++)
for (j=(i+1);j<n;j++)
{
printf("le sommet %d et le sommet %d",i,j);
scanf("\n %d",tab[i][j]);
}
for (i=1;i<n;i++)
for (j=0;j<(i-1);j++)
tab[i][j]=tab[j][i];
printf("donner le sommet de départ");
scanf("%d",&x);
for (i=0;i<n;i++)
{
v[i]=0;
v[x]=1;
printf("%d",x);
marque(x);
}
void marque(int a;int *tab)
{
int i,n;
for (i=0;i<n;i++)
if (tab[a][i]==1)&&(v[i]!=1)
{
a=i;
v[i]=1;
printf("%d",i);
marque(a);
}
}

mais malheuresement il m'affiche des message tel que :

In function 'int main()':
line 2 error: too few arguments to function 'viod marque(int, int*)'
line 27 error: at this point in file
line 29 error: expected ',' or '...' before ';' token
line 29 error: expected ')' before ';' token
line 29 error: expected initializer before ')' token
line 40 error: expected '}' at end of input

et sincèrement je ne vois absolument pas ou est l'erreur ça fait 26 heurs que je m'acharne sur ce problème mais sans fruit c'est pour cela que je vous pris de bien vouloir m'aider a régler ce problème.
merci d'avance pour toutes vos réponse.

7 réponses

dazlouk Messages postés 13 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 2 juin 2008 1
2 juin 2008 à 20:06
s'ils vous plais ya pas quelqu'un pour m'aider??????
merci.
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
2 juin 2008 à 20:51
Bonjour,
Premièrement, il faut faire compiler ton code.
line 2 error: too few arguments to function 'viod marque(int, int*)' 

Ici le problème c'est que tu déclares et implémentes une fonction marque qui prend deux arguments (un int et un pointeur vers un int). Jusque là pas de problème, sauf qu'à chaque fois que tu appelles ta fonction, tu ne lui passes qu'un seul argument (marque(x)).
Seulement, le compilateur, il ne connait pas de fonction marque qui ne prend qu'un seul argument, donc il t'envoie paître.

Corrige ça et essaie de compiler, on déboguera tout ça après.

Cordialement,
0
dazlouk Messages postés 13 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 2 juin 2008 1
2 juin 2008 à 21:08
bonsoir Marco la baraque;
j'ai corrigé le code comme tu la dit et j'ai aussi fait quelque modification et ca compile normalement jusque la pas de problème. voila ce qu'il m'affiche ( Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings)
voila la modification:
#include<stdio.h>
void marque(int);
main()
{
int i,n,j,x; int tab[n][n]; int v[n];
printf ("donnez le nbre de sommets:");
scanf("%d",&n);
printf("\n mettre 1 pour accepter un arc 0 sinon:");
for (i=0;i<n;i++)
tab[i][i]=0;
for (i=0;i<n;i++)
{

for (j=(i+1);j<n;j++)
{
printf("le sommet %d et le sommet %d",i,j);
scanf("\n %d",tab[i][j]);
}
}
for (i=1;i<n;i++)
{
for (j=0;j<(i-1);j++)
tab[i][j]=tab[j][i];
}
printf("donner le sommet de départ");
scanf("%d",&x);
for (i=0;i<n;i++)
{
v[i]=0;
v[x]=1;
printf("%d",x);
marque(x);
}
}
void marque(int a)
{
int i,n; int tab[n][n]; int v[n];
for (i=0;i<n;i++)
{
if ((tab[a][i]==1)||(v[i]!=1))
{
a=i;
v[i]=1;
printf("%d",i);
marque(a);
}
}
}


mais après avoir fait RUN il m'affiche la console noir et le message ( test.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."
PS: "test.exe"->/*le nom de mon programme*/
que dois-je faire ?
merci d'avance.
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328 > dazlouk Messages postés 13 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 2 juin 2008
2 juin 2008 à 21:50
Re,
Ligne 17 : scanf("\n %d",&tab[i][j]); (faut pointer sur l'adresse de ton élément).
Sinon, dans ta fonction marque, n n'est pas initialisé (donc forcément après ça explose dans tous les sens).
0
dazlouk Messages postés 13 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 2 juin 2008 1
2 juin 2008 à 21:43
SVP de l'aide j'en ai vraiment besois en plus c'est urgent!!!!!!!!!!!!!!
merci beaucoup.
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
2 juin 2008 à 21:54
je crois que dans ta fonction "marque" tu initialise un tableau avec une variable non initialisée -> n

je pense que cela est un gros probleme, par ailleurs tu fais la meme erreur dans ton main. initialise ton "int n" et ensuite declare tes tableaux tab[n][n] et v[n].

bon courage

tchû
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dazlouk Messages postés 13 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 2 juin 2008 1
2 juin 2008 à 22:21
j'ai corrigé comme vous me l'avez dit et ça marche!!!!!!!!!!
mais le résultat est 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
je suis dépasser je sais plus ou mettre de ma tête!!!!!!!!!!!
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
2 juin 2008 à 22:28
le résultat de quoi ?
Tu as donné quoi comme valeur à n et à tes arrêtes ?
0
dazlouk Messages postés 13 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 2 juin 2008 1 > Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009
2 juin 2008 à 22:33
j'ai donné des valeurs au hasard!!!
c'est à dire les messages s'affiche tous juste a ce qu'il arrive au message <printf(" \n donner le sommet de départ :"); >
et la ya erreur c'est a dire il m'affiche comme si c'etait une boucle infinie.
0
osm nadjib Messages postés 164 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 22 septembre 2009 1
2 juin 2008 à 22:32
salut tous le monde .
enfet dazlouk pour savoir ou votre programme plante tu peux ajouter des printf à chaque niveau de votre prog comme ça pendant l'exécution tu peux t'en apercevoir .
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328 > osm nadjib Messages postés 164 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 22 septembre 2009
2 juin 2008 à 22:35
Le truc ici, c'est dans ta fonction marque.
Tu utilises un vecteur v non initialisé, donc ta condition if ((tab[a][i]==1)||(v[i]!=1)) est toujours vraie.
Ceci a pour résultat de t'afficher un 0 (car i=0).

De plus, dans cette condition, tu appelles récursivement marque avec le même paramètre, donc tu as une boucle infinie qui t'affiche des 0 tant que tu n'as pas de stack overflow.
0
dazlouk Messages postés 13 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 2 juin 2008 1 > Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009
2 juin 2008 à 23:12
ok, je vais revoir le problème.merci pour ton aide
0
osm nadjib Messages postés 164 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 22 septembre 2009 1
2 juin 2008 à 22:37
svp j'ai un problème avec mon programme en c
c'est un prog qui réalise le tri par sélection et voici les détails:

#include<stdlib.h>
#include<stdio.h>


void permuter(int *a,int *b)
{
int c;
c=*a;
*a=*b;
*b=c;
}
void tri_select(int n,int tab[100])
{
int i,j,k;
for(i=0;i=n-1;i++)
{j=i;
for(k=i+1;k=n;k++)
{if(tab[k]<tab[j]) j=k;}
permuter(&tab[j],&tab[n]);
}};
main()
{
int n,i;
int tab[100];
printf("donner le nombre d element du tableau\n");
scanf("%d",&n);
printf("donner les valeur du tableau\n");
for(i=0;i<=n;i++)
scanf("%d",tab[n]);
printf("le tri de tableau par selection");
tri_select(n,tab);
for(i=0;i<=n;i++)
printf("tab[%d] = %d\n",i,*tab);

system("pause");
}
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
2 juin 2008 à 22:41
Bonsoir,
Crées un autre post stp, car il ne correspondant pas au thread.
Merci

Sinon, la synthaxe d'un for, c'est for(initialisation variable; condition à respecter pour exécuter le tour de boucle; traitement à effectuer en fin de boucle).
Regarde de ce côté pour voir si ton code fait bien ce que tu veux faire.
0
osm nadjib Messages postés 164 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 22 septembre 2009 1 > Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009
2 juin 2008 à 22:56
ja m'excuse marco j'étais tellement perdu car il faut que je prépare ce TP pour demain encore une fois je m'excuse

et est ce que je peut continuer la discussion ou je créer un autre nouveau sujet
0
dazlouk Messages postés 13 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 2 juin 2008 1
2 juin 2008 à 23:20
je crois que finalement le problème c'est qu'il falait déclarer les variables globale avant la déclaration de la fonction comme tel :
#include<stdio.h>
int i,n,j,x; int tab[7][7]; int v[7]; <----------------------------------------voila le Pb
void marque(int);
main()
{
printf ("donnez le nbre de sommets:");
scanf("%d",&n);
printf("\n mettre 1 pour accepter un arc 0 sinon:");
for (i=0;i<n;i++)
tab[i][i]=0;
for (i=0;i<n;i++)
{
for (j=(i+1);j<n;j++)
{
printf("\n le sommet %d et le sommet %d :",i,j);
scanf("\n %d",&tab[i][j]);
}
}
for (i=1;i<n;i++)
{
for (j=0;j<(i-1);j++)
tab[i][j]=tab[j][i];
}
printf(" \n donner le sommet de depart :");
scanf("%d",&x);
for (i=0;i<n;i++)
{
v[i]=0;
v[x]=1;
printf("%d \n",x);
marque(x);
}
}
void marque(int a)
{
int i;
for (i=0;i<n;i++)
{
if ((tab[a][i]==1)||(v[i]!=1))
{
a=i;
v[i]=1;
printf("%d",i);
marque(a);
}
}
}
Au lieu de ça

#include<stdio.h>
void marque(int);
main()
{
int i,n,j,x; int tab[n][n]; int v[n]; <-------------------------------------- il faut les déclarer avant "marque...."
printf ("donnez le nbre de sommets:");
scanf("%d",&n);
printf("\n mettre 1 pour accepter un arc 0 sinon:");
for (i=0;i<n;i++)
tab[i][i]=0;
for (i=0;i<n;i++)
{

for (j=(i+1);j<n;j++)
{
printf("le sommet %d et le sommet %d",i,j);
scanf("\n %d",tab[i][j]);
}
}
for (i=1;i<n;i++)
{
for (j=0;j<(i-1);j++)
tab[i][j]=tab[j][i];
}
printf("donner le sommet de départ");
scanf("%d",&x);
for (i=0;i<n;i++)
{
v[i]=0;
v[x]=1;
printf("%d",x);
marque(x);
}
}
void marque(int a)
{
int i,n; int tab[n][n]; int v[n]; <------------------- ce n'est plus la peine.
for (i=0;i<n;i++)
{
if ((tab[a][i]==1)||(v[i]!=1))
{
a=i;
v[i]=1;
printf("%d",i);
marque(a);
}
}
}

mais la je suis entrain de chercher ou est le problème d'incohérence dans la logique du programme mais bon je vais voir tjrs chercher.
si quelqu'un pourrait bien m'aidé ca ne serait pas de refus car je suis vraiment claqué!!!!!
en tout cas merci a tous pour votre aide!!!
0