Probléme en C
dazlouk
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
dazlouk Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
dazlouk Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
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.
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
Bonjour,
Premièrement, il faut faire compiler ton code.
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,
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,
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.
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.
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û
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û
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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!!!!!!!!!!!
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!!!!!!!!!!!
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.
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.
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");
}
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");
}
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.
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.
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!!!
#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!!!