Se connecter avec
S'enregistrer | Connectez-vous

[pb execution avec dev c++]

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

voila c 1 prg basé sur les graphe si tu veux plus d'info je suis la
#include <stdio.h>
#define N 30
void tp1 ();
void tp2 ();
void tp3 ();
void tp4 ();
main ()
{
//******************************************************************************

int choisir ();
int index (char s);

//******************************************************************************
char sommet [30];
char l2[30];
int l1[N];
int M[N][N];
int r,nb,nbr;
int choix;
char s;
//******************************************************************************



choisir ();
do
{

if (choix==1) tp1 ();
if (choix==2) tp2 ();
if (choix==3) tp3 ();
//if (choix==4) tp4 ();
}
while (choix==5);


}
//******************************************************************************
int choisir ()
{int choix;
printf ("tapez 1 pour effectuer le tp2 \n");
printf ("tapez 2 pour effectuer le tp1 \n");
printf ("tapez 3 pour effectuer le tp3 \n");
printf ("tapez 4 pour effectuer le tp4 \n");
printf (" Donner votre choix ");
scanf ("%s\n",&choix);
getch();
return (choix);
}
//******************************************************************************
int index (char s)
{char sommet[30];
int r=0;
int p;
p=1;
while ((sommet[p]!=s) && (sommet[p]!='*')) p=p+1;
if (sommet[p]==s) return(p);
else
{
r=r+1;
sommet[r]=s;
return (r);
}

}
//******************************************************************************
void tp2 ()
{ tp1();
int i,j;
char som1,som2;
int nb;
int nbr;
char sommet[30];
int M[30][30];
printf ("donner le nombre de sommets : ");
scanf ("%d\n",&nb);
printf ("donner le nombre d'arcs : ");
scanf ("%d\n",&nbr);
//initialisation du tableau sommet
for (i=1;i<=nb;i++)
{
sommet= ' ' ;
}
//initialisation de la matrice M
for (i=1;i<=nb;i++)
for (j=1;j<=nb;j++)
M[j]=0;
//parcours en profondeur du graphe
for (i=1;i<=nbr;i++)
{
int x,y;
printf ("donner l'extremite initiale de l'arc \n: ");
scanf ("%c",&som1);
printf ("donner l'extremite terminale de l'arc \n: ");
scanf ("%c",&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[j]);
printf ("\n");
}
tp1 ();
}
//******************************************************************************
void tp1 ()
{
int i,j,k,d,nb,M[30][30],l1[30];
char sommet[30],l2[30];
k=0;
//la lecture de la matrice sommet-sommet
for(i=1;i<=nb;i++)
{
for(j=1;j<=nb;j++)
{
scanf( "d",M[j]);
}
}
//la lecture du tableau des sommets
for (i=1;i<=nb;i++)
{
scanf ("%c",sommet);
}
//initialisation de la liste l2
for (i=1;i<=N;i++)
{
l2=' ';
}
//creation de la liste l2
for (i=1;i<=nb;i++)
{
for (j=1;j<=nb;j++)
{
if( M[j]==1)
{
printf (" le successeur du sommet : ");
printf ("%c",sommet);
printf (" est : ");
printf ("%c\n",sommet[j]);
k=k+1;
l2[k]=sommet[j];
}
}
}
d=i;
for (j=1;j<=nb;i++)
{
if (M[d][j]!=1)
{
k=k+1;
l2[k]='*';
}
}

//affichage de la liste l2
for(i=1;i<=N;i++)
{
while (l2!=' ' )
{
printf("%c",l2);
printf (" ");
}
}
//initialisation de la liste l1
for(i=1;i<N;i++)
{
l1=0;
}
//creation de la liste l1
i=1;
j=1;
k=0;
a:if(M[j]==1)
{
k=k+1;
l1[k]=k;
j=j+1;
while(j<=nb)
{
b:if(M[j]==1)
{
k=k+1;
j=j+1;
goto b;
}
else
{
j=j+1;
goto b;
}
}
i=i+1;
j=1;
goto a;
}
else
{
j=j+1;
goto a;
}
int p;
p=k;
for (i=1;i<=N;i++)
{
if(l2=='*')
{
l1[p]=p;
}
}
//affichage de la liste l1
for(i=1;i<=N;i++)
{
while (l1!=0)
{
printf("%d",l1);
printf (" ");
}
}

}
//******************************************************************************
void tp3 ()
{
int i,j,nb,M[30][30];
for (i=1;i<=nb;i++)
{
for (j=1;j<=nb;j++)
{
if ((M[j]==1)&&(i!=j))
{
if ((M[j]==1)&&(i!=j))
{
printf (" le graphe est symétrique ");
printf ("\n");
}
else printf (" le graphe est antisymetrique ");
}
if ((M[j]==0) && (M[j]==0))
{
printf (" le graphe n'est complet ");
printf ("\n");
}
else printf("le graphe est complet");
}
}

}

Je dois dire que je cale en voyant ton programme. J'en connais un bout de C mais pas autant que toi.

Citation :
la se pose le pb de l'execution elle m'affiche pas tout juste le debut du prg

J'ai un peu du mal à comprendre ton problème. Quand il n'y a pas de ponctuation et quand un problème ne m'est pas dis vraiment précisément je comprends pas. :-)
Lorsque tu éxécutes ton programme, il s'éteint ?

J'ai vu tout ça. Après avoir écrit Tapez 1...tapez 2... tapez 3... etc... tu as crée une boucle while avec une condition.

Tu as marqué "if (sommet[p]==s) return(p);" mais tu n'as pas marqué { et } et ce que ça faisait.

int index (char s);
{
int r=0;
int p;
p=1;

while ((sommet[p]!=s) && (sommet[p]!='*')) p=p+1;
if (sommet[p]==s)
{
return(p);
}
else
{
r=r+1;
sommet[r]=s;
return (r);
}

}
j'ai mis comme ca mais tjrs la meme erreur qui s'affiche

ISO C++ forbids declaration of `index' with no type
In function `int index(char)':
`sommet' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
c les erreurs qu'il ma afficher

Bonjour moi j'ai un problème du même type au démarrage du programme (sous MSDOS) , j'ai une erreur. Je débute et j'essai de programmer une mini-calculatrice. Seulemnt une fois le premier nombre tapé dans la console je me tape un "le prog doit fermer.... vous la connaissez la suite".
Voici mon code:

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

int main(int argc, char *argv[])
{
char operation = 0;
double valeur1 = 0, valeur2 = 0;
printf("Bienvenue dans le programme calculatrice sous MSDOS\n\n");
printf("Veuillez taper le premier nombre:");
scanf("%lf", valeur1);
printf("Veuillez selectionner le type d'opération souhaitée (+,-,*,/):");
scanf("%ld", operation);

system("PAUSE");
}

Avec le debbuger il me dit: une violation d'accès (erreur de segmentation) est apparue dans votre programme, juste après avoir tapé le premier nombre.
Bon déjà ça.
Ensuite je voudrais que l'utilisateur choisisse + - * /, et ne marque pas addition, etc. Comment fer pour lui proposer de taper ceci et de la mettre dans une variable (je ne connais que %ld pour les nb positifs et %lf pour les decimaux).
Merci de votre aide.
:-(
Expert Programmation

Je crois qu'il demande de l'aide lui aussi...
Citation :
ISO C++ forbids declaration of `index' with no type
In function `int index(char)':
`sommet' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
c les erreurs qu'il ma afficher

J'ai pas bien regardé ton code, mais il te demande de déclarer sommet dans ta fonction index!! Donc essaye de rajouter sommet[30]; comme au départ,non?

Et puis je pense que tu devrais mettre un type de retour à ta fonction index(); étant donné que c'est un int qui est renvoyé, elle devrait être déclarée de cette facon: int index(/*Arguments ici*/);

Et pour ton programme computer, je crois que tu as fait plusieurs erreurs...
Citation :
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char operation = 0;
double valeur1 = 0, valeur2 = 0;
printf("Bienvenue dans le programme calculatrice sous MSDOS\n\n");
printf("Veuillez taper le premier nombre:");
scanf("%lf", valeur1);
printf("Veuillez selectionner le type d'opération souhaitée (+,-,*,/):");
scanf("%ld", operation);

system("PAUSE");
}


1-Tu dois passer a scanf l'adresse de ta variable et non pas la valeur de ta variable.
Si tu comprends pas, je te simplifie:
scanf("%lf", &valeur1);
C'est comme cela que marche scanf, même chose pour l'autre erreur.

2-tu ne scannes pas un entier ici, mais un caractère...
Je te conseilles donc de faire un scanf("%c",&operation);
Par contre fais attention, le scanf("%c",&operation); risque de mettre me '\n' qui se trouve dans le tampon.
Si tu comprends pas ici non plus, voila une solution:
pour éviter ceci (d'une facon simple), je te conseille de faire

fflush(stdin);
scanf("%c",&operation);

même si c'est pas très propre, ca devrait marcher...
Ton pogramme n'est pas fini, mais je te laisses faire :D 

j'ai fais des changement sur mon code et voila mais maintenant l'erreur est:expected declaration before '}' token je comprend pas

#include <stdio.h>
#define N 30
void tp1 ();
void tp2 ();
void tp3 ();
void tp4 ();
int choisir ();
int index (char s);
char sommet [30];
char l2[30];
int l1[N];
int M[N][N];
int r,nb,nbr;
int choix;
char s;
int main ()
{

//******************************************************************************
int r, nb, nbr = 0;


choisir ();
do
{

if (choix==1) tp1 ();
if (choix==2) tp2 ();
if (choix==3) tp3 ();
//if (choix==4) tp4 ();
}
while (choix==5);


}
//******************************************************************************
int choisir ()
{int choix;
printf ("tapez 1 pour effectuer le tp2 \n");
printf ("tapez 2 pour effectuer le tp1 \n");
printf ("tapez 3 pour effectuer le tp3 \n");
printf ("tapez 4 pour effectuer le tp4 \n");
printf (" Donner votre choix ");
scanf ("%s\n",&choix);

return (choix);
}
//******************************************************************************
int index (char s)
{

int r=0;
int p;
p=1;

while ((sommet[p]!=s) && (sommet[p]!='*'))
{
p=p+1;
}
if (sommet[p]==s)
{
return(p);
}
else
{
r=r+1;
sommet[r]=s;
return (r);
}
}

//******************************************************************************
void tp2 ()
{ tp1();
int i,j;
char som1,som2;
int nb;
int nbr;
char sommet[30];
int M[30][30];
printf ("donner le nombre de sommets : ");
scanf ("%d\n",&nb);
printf ("donner le nombre d'arcs : ");
scanf ("%d\n",&nbr);
//initialisation du tableau sommet
for (i=1;i<=nb;i++)
{
sommet= ' ' ;
}
//initialisation de la matrice M
for (i=1;i<=nb;i++)
for (j=1;j<=nb;j++)
M[j]=0;
//parcours en profondeur du graphe
for (i=1;i<=nbr;i++)
{
int x,y;
printf ("donner l'extremite initiale de l'arc \n: ");
scanf ("%c",&som1);
printf ("donner l'extremite terminale de l'arc \n: ");
scanf ("%c",&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[j]);
printf ("\n");
}
tp1 ();
}
//******************************************************************************
void tp1 ()
{
int i,j,k,d,nb,M[30][30],l1[30];
char sommet[30],l2[30];
k=0;
//la lecture de la matrice sommet-sommet
for(i=1;i<=nb;i++)
{
for(j=1;j<=nb;j++)
{
scanf( "%d",M[j]);
}
}
//la lecture du tableau des sommets
for (i=1;i<=nb;i++)
{
scanf ("%c",sommet);
}
//initialisation de la liste l2
for (i=1;i<=N;i++)
{
l2=' ';
}
//creation de la liste l2
for (i=1;i<=nb;i++)
{
for (j=1;j<=nb;j++)
{
if( M[j]==1)
{
printf (" le successeur du sommet : ");
printf ("%c",sommet);
printf (" est : ");
printf ("%c\n",sommet[j]);
k=k+1;
l2[k]=sommet[j];
}
}
}
d=i;
for (j=1;j<=nb;i++)
{
if (M[d][j]!=1)
{
k=k+1;
l2[k]='*';
}
}

//affichage de la liste l2
for(i=1;i<=N;i++)
{
while (l2!=' ' )
{
printf("%c",l2);
printf (" ");
}
}
//initialisation de la liste l1
for(i=1;i<N;i++)
{
l1=0;
}
//creation de la liste l1
i=1;
j=1;
k=0;
a:if(M[j]==1)
{
k=k+1;
l1[k]=k;
j=j+1;
while(j<=nb)
{
b:if(M[j]==1)
{
k=k+1;
j=j+1;
goto b;
}
else
{
j=j+1;
goto b;
}
}
i=i+1;
j=1;
goto a;
}
else
{
j=j+1;
goto a;
}
int p;
p=k;
for (i=1;i<=N;i++)
{
if(l2=='*')
{
l1[p]=p;
}
}
//affichage de la liste l1
for(i=1;i<=N;i++)
{
while (l1!=0)
{
printf("%d",l1);
printf (" ");
}
}

}


//******************************************************************************
void tp3 ()
{
int i,j,nb,M[30][30];
for (i=1;i<=nb;i++)
{
for (j=1;j<=nb;j++)
{
if ((M[j]==1)&&(i!=j))
{
if ((M[j]==1)&&(i!=j))
{
printf (" le graphe est symétrique ");
printf ("\n");
}
else printf (" le graphe est antisymetrique ");
}
if ((M[j]!=1) && (M[j]!=1))
{
printf (" le graphe est complet ");
printf ("\n");
}
else printf("le graphe n'est pas complet");
}
}

}

}
return (0);
}

Expert Programmation

Je vais essayer de regarder cela...

Mais sinon (rien a voir avec ton problème) tu déclares des variables globales et c'est pas une bonne habitude a prendre... Tu ne donnes pas non plus tes types de retours (je sais pas si c'est nécessaire en C++, je n'en fais pas depuis longtemps), tu mets des goto... Ca me donne des boutons tout ca :lol: 
Expert Programmation

ZOMG! Ce code est "orrible" a lire! Pire que ce que je croyais... Donc si tu pouvais le réécrire SANS goto , sans variables globales, avec des types de retours qui conviennent ce serait plus lisible... Vite fait j'ai cru que c'était du C++, maintenant il me semble plutot que c'est du C très sale...

J'tai corrigé un ou deux trucs pour que ca compile, mais c'est trop sale pour moi... Si je devais le corriger totalement il me faudrait sans doute tout réécrire.
Tu dois le rendre? A un prof?
Nettoies le!

Aurais tu des lacunes en C?

  1. #include <stdio.h>
  2. #define N 30
  3. void tp1 ();
  4. void tp2 ();
  5. void tp3 ();
  6. void tp4 ();
  7. char choisir ();
  8. int index (char s);
  9. char sommet [30];
  10. /*char l2[30];
  11. int l1[N];
  12. int M[N][N];
  13. int r,nb,nbr;
  14. */
  15.  
  16. char s;
  17. int main(void)
  18. {
  19.  
  20. //******************************************************************************
  21. int r, nb, nbr = 0;
  22. char choix='5';
  23.  
  24. choix=choisir();
  25. do
  26. {
  27.  
  28. if (choix=='1') tp1 ();
  29. if (choix=='2') tp2 ();
  30. if (choix=='3') tp3 ();
  31. //if (choix==4) tp4 ();
  32. }
  33. while (choix=='5');
  34.  
  35. return 0;
  36.  
  37. }
  38. //******************************************************************************
  39. char choisir(void)
  40. {
  41. char choix='5';
  42. printf ("tapez 1 pour effectuer le tp2 \n");
  43. printf ("tapez 2 pour effectuer le tp1 \n");
  44. printf ("tapez 3 pour effectuer le tp3 \n");
  45. printf ("tapez 4 pour effectuer le tp4 \n");
  46. printf (" Donner votre choix ");
  47. while(choix!='4' ||choix!='3' ||choix!='2' || choix!='1')//pas teste mais ca doit marcher
  48. {
  49. choix=getchar();
  50. }
  51. return (choix);
  52. }
  53. //******************************************************************************
  54. int index (char s)
  55. {
  56.  
  57. int r=0;
  58. int p;
  59. p=1;
  60.  
  61. while ((sommet[p]!=s) && (sommet[p]!='*'))
  62. {
  63. p=p+1;
  64. }
  65. if (sommet[p]==s)
  66. {
  67. return(p);
  68. }
  69. else
  70. {
  71. r=r+1;
  72. sommet[r]=s;
  73. return (r);
  74. }
  75. }
  76.  
  77. //******************************************************************************
  78. void tp2 ()
  79. { tp1();
  80. int i,j;
  81. char som1,som2;
  82. int nb;
  83. int nbr;
  84. char sommet[30];
  85. int M[30][30];
  86. printf ("donner le nombre de sommets : ");
  87. scanf ("%d\n",&nb);
  88. printf ("donner le nombre d'arcs : ");
  89. scanf ("%d\n",&nbr);
  90. //initialisation du tableau sommet
  91. for (i=1;i<=nb;i++)
  92. {
  93. sommet[i]= ' ' ;
  94. }
  95. //initialisation de la matrice M
  96. for (i=1;i<=nb;i++)
  97. for (j=1;j<=nb;j++)
  98. M[i][j]=0;
  99. //parcours en profondeur du graphe
  100. for (i=1;i<=nbr;i++)
  101. {
  102. int x,y;
  103. printf ("donner l'extremite initiale de l'arc \n: ");
  104. scanf ("%c",&som1);
  105. printf ("donner l'extremite terminale de l'arc \n: ");
  106. scanf ("%c",&som2);
  107. //x donne l'indice de som1 dans le tableau sommet
  108. x=index(som1);
  109. // meme chose pour y
  110. y=index(som2);
  111. M[x][y]=1;
  112. }
  113. //affichage de la matrice
  114. for (i=1;i<=nb;i++)
  115. {
  116. for (j=1;j<=nb;j++)
  117. printf ("%7d",M[i][j]);
  118. printf ("\n");
  119. }
  120. tp1 ();
  121. }
  122. //******************************************************************************
  123. void tp1 ()
  124. {
  125. int i,j,k,d,nb,M[30][30],l1[30];
  126. char sommet[30],l2[30];
  127. k=0;
  128. //la lecture de la matrice sommet-sommet
  129. for(i=1;i<=nb;i++)
  130. {
  131. for(j=1;j<=nb;j++)
  132. {
  133. scanf( "%d",M[i][j]);
  134. }
  135. }
  136. //la lecture du tableau des sommets
  137. for (i=1;i<=nb;i++)
  138. {
  139. scanf ("%c",sommet[i]);
  140. }
  141. //initialisation de la liste l2
  142. for (i=1;i<=N;i++)
  143. {
  144. l2[i]=' ';
  145. }
  146. //creation de la liste l2
  147. for (i=1;i<=nb;i++)
  148. {
  149. for (j=1;j<=nb;j++)
  150. {
  151. if( M[i][j]==1)
  152. {
  153. printf (" le successeur du sommet : ");
  154. printf ("%c",sommet[i]);
  155. printf (" est : ");
  156. printf ("%c\n",sommet[j]);
  157. k=k+1;
  158. l2[k]=sommet[j];
  159. }
  160. }
  161. }
  162. d=i;
  163. for (j=1;j<=nb;i++)
  164. {
  165. if (M[d][j]!=1)
  166. {
  167. k=k+1;
  168. l2[k]='*';
  169. }
  170. }
  171.  
  172. //affichage de la liste l2
  173. for(i=1;i<=N;i++)
  174. {
  175. while (l2[i]!=' ' )
  176. {
  177. printf("%c",l2[i]);
  178. printf (" ");
  179. }
  180. }
  181. //initialisation de la liste l1
  182. for(i=1;i<N;i++)
  183. {
  184. l1[i]=0;
  185. }
  186. //creation de la liste l1
  187. i=1;
  188. j=1;
  189. k=0;
  190. a:if(M[i][j]==1)
  191. {
  192. k=k+1;
  193. l1[k]=k;
  194. j=j+1;
  195. while(j<=nb)
  196. {
  197. b:if(M[i][j]==1)
  198. {
  199. k=k+1;
  200. j=j+1;
  201. goto b;
  202. }
  203. else
  204. {
  205. j=j+1;
  206. goto b;
  207. }
  208. }
  209. i=i+1;
  210. j=1;
  211. goto a;
  212. }
  213. else
  214. {
  215. j=j+1;
  216. goto a;
  217. }
  218. int p;
  219. p=k;
  220. for (i=1;i<=N;i++)
  221. {
  222. if(l2[i]=='*')
  223. {
  224. l1[p]=p;
  225. }
  226. }
  227. //affichage de la liste l1
  228. for(i=1;i<=N;i++)
  229. {
  230. while (l1[i]!=0)
  231. {
  232. printf("%d",l1[i]);
  233. printf (" ");
  234. }
  235. }
  236.  
  237. }
  238.  
  239.  
  240. //******************************************************************************
  241. void tp3 ()
  242. {
  243. int i,j,nb,M[30][30];
  244. for (i=1;i<=nb;i++)
  245. {
  246. for (j=1;j<=nb;j++)
  247. {
  248. if ((M[i][j]==1)&&(i!=j))
  249. {
  250. if ((M[j][i]==1)&&(i!=j))
  251. {
  252. printf (" le graphe est symétrique ");
  253. printf ("\n");
  254. }
  255. else printf (" le graphe est antisymetrique ");
  256. }
  257. if ((M[i][j]!=1) && (M[j][i]!=1))
  258. {
  259. printf (" le graphe est complet ");
  260. printf ("\n");
  261. }
  262. else printf("le graphe n'est pas complet");
  263. }
  264. }
  265.  
  266.  
  267. }
Expert Programmation

Citation :
mais ta rien corriger c la meme table du dos qui s'afficher pour moi et je demander que de l'aide tes critique tu peux les garder pour toi

T'as pas compris. J'ai rien corrigé? Je peux corriger deux, trois trucs dans ton code qui ne marchent pas;
La j'ai uniquement corrigé quelques erreurs de syntaxe qui empechaient le programme de compiler. Je vais pas réécrire tout le code a ta place.

Si tu veux de l'aider et que tu refuses les conseils et les "critiques", et que tu agresses les gens comme cela (je ne suis pas le premier!), tu peux être sur que les autres vont te répondre vertement... T'es peut être pressé,j'ai peut être pas utilisé les bons mots non plus mais c'est pas une raison quand même.

Tu refuses mon aide, avec toutes les critiques que cela implique, soit.
J’assume pleinement la responsabilité de cet échec et j’en tire les conséquences en me retirant de ce topic.
Si quelqu'un d'autre veut t'aider, qu'il le fasse. Je lui souhaite bonne chance.

Tu dois le rendre ? hum et tu comptes rendre un code qui contient des " goto ".

c'est horrible les profs ne veulent pas en voir. C'est que tu as des problèmes d'algorithmique.


Alors voila tant que tu n'auras pas enlever tes goto moi perso je ne regarderai pas ce code tout comme tes profs d'alleurs , si c'est des vrais profs d'info, et je sais ce que je dis je suis en 2ème année d'iut informatique.


bon courage, car je sais que c'est pas simple :-)
Lassé par la pub ? Créez un compte
Tom's guide dans le monde