
|
|
Auteur
|
Message
|
1
|
|
|
|
salut tout le monde, ben voila j'ai besoin de votre aide j'ai ecris 1 prg en c dans le dev c++ mais je comprend pas pk il ne veux pas s'executer , mon code source le voila:
#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;
}
aidez moi svp
|
|
|
|
|
|
y a personne pour m'aidez!!!!!!!!!!
|
|
|
|
|
Salut !
Déjà la première chose est de modifier presque toutes les affectations dans les tableaux : un truc du genre "char sommet[30]; ...suivi de... sommet= ' ' ;" ne marche pas car sommet est de type char* (bienvenu dans le monde du C et des pointeurs). Donc soit tu fais "sommet[ i ] = ' '", soit tu fais "*(sommet+i) = ' '".
Pour la matrice, c'est la même chose : soit "M[ i ][ j ] = 0", soit "*(M+i*30+j) = 0, en déclarant M comme M[N*N], ou (mais je ne garantis pas que ca marche, tu laisses ta déclaration telle quelle et tu fais *(*(M+i)+j) = 0". Comme tu connais le nombre d'éléments à traiter, la notation par tableau est plus simple à comprendre (par contre la notation par pointeurs est nickel quand à la compilation, tu ne connais pas le nombre d'éléments du tableau).
Commence par reprendre toutes tes notations de tableau et reposte si nécessaire (en indentant ton fichier source si possible).
-->Message édité par Minus-et-Cortex le 05/05/2006 11:03:38<--
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
|
|
|
|
|
|
est que vous pouvez me corriger mon code source merci
|
|
|
|
|
|
car je ne sais pas dutout comment faire merci
|
|
|
|
|
j'ai fais comme tu me la montrer et voila le code
#include <stdio.h>
#include<stdlib.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[30];
int M[30][30];
int r,nb,nbr;
char s;
int main ()
{
int r, nb, nbr = 0;
int choix;
choix = choisir ();
do {
if (choix==1) tp1 ();
if (choix==2) tp2 ();
if (choix==3) tp3 ();
//if (choix==4) tp4 ();
} while (choix!=5);
return 0;
}
int choisir ()
{
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("tapez 5 pour sortir \n");
printf (" Donner votre choix: ");
scanf("%i";&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=0;
int nbr=0;
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 ;
//}
|
|
|
|
|
|
j'ai vraiment besoin de votre aide
|
|
Je calcul donc je suis relativ
|
|
|
À quoi sert ce programme?
Quel est ton compilateur?
>>>
#define N 30
<<<
Il devient plus courant de déclarer cette équivalence:
"const int N =30;"
>>>
int main(){
...do{
......if(choix==1)tp1();
......if(choix==2)tp2();
......if(choix==3)tp3();
......// if(choix==4)tp4();
...}while(choix==5);
<<<
Qu,est-ce qui fait en sorte que choix==5? Je veux dire: La loop ne sera pas exécuté tant qu'un initialisation de 'choix' à 5 ne sera pas faite, ce que je n'ai vu nul part... alors cette loop n'est en théorie pas exécuté!
>>>
ligne 176
(...)
}
...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 (){
(...)
<<<
tp1() est alors fermé et else suit tout de suite après!
As-tu bien utilisé les accolades de tes loop for?
>>>
à la fin du code
<<<
Que fait return 0 là?
Il devrait être dans main()...
a++
-------
vive Linux!
|
|
|
|
|
|
Salut, je fais un saut rapide car pas de connexion, mais c'est une autre histoire... cependant, il me semble qu'il y a une erreur de ta part esselfe : contrairement au while( condition ) { bloc } qui s'exécute à la condition que condition soit vraie, do { bloc } while ( condition ) s'exécute au moins une fois, et s'arrête si condition est fausse. @+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
|
|
1
|
|

|






|