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
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
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
2 juin 2008 à 20:06
s'ils vous plais ya pas quelqu'un pour m'aider??????
merci.
merci.
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
2 juin 2008 à 20:51
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,
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
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.
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.
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
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).
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).
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
2 juin 2008 à 21:43
SVP de l'aide j'en ai vraiment besois en plus c'est urgent!!!!!!!!!!!!!!
merci beaucoup.
merci beaucoup.
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
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û
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
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
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!!!!!!!!!!!
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!!!!!!!!!!!
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
2 juin 2008 à 22:28
le résultat de quoi ?
Tu as donné quoi comme valeur à n et à tes arrêtes ?
Tu as donné quoi comme valeur à n et à tes arrêtes ?
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
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.
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.
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
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 .
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 .
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
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.
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.
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
2 juin 2008 à 23:12
ok, je vais revoir le problème.merci pour ton aide
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
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");
}
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");
}
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
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.
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.
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
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
et est ce que je peut continuer la discussion ou je créer un autre nouveau sujet
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
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!!!
#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!!!