Problème de vecteur,produit mixtes,produit vectoriel...

cs_faerie Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 6 juin 2008 - 6 juin 2008 à 14:20
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 6 juin 2008 à 17:55
bonjour, alors voilà, j'ai un problème avec un exercice d' informatique, il faut créer un programme qui porte sur les vecteurs, quand je le compile, il n'y a aucune erreur, mais les quatres dernières fonctions ne marchent pas, il ne veut pas les exécuter, je pense que le problème vient du produit vectoriel, mais je bloque depuis 4 jours dessus, s'il vous plait, aidez moi.  Merci d'avance
Voici le programme :

#include <stdio.h> /* Davo-Brunet */

#include <math.h>

 

int main (void)

{

/* declaration de toutes les variables de la fonction */

int N;

float scalaire;

float composantes0[20];

float composantes1[20];

float composantes2[20];

float stocage[20];

float Nov,Nov2,Nov3,PS,PM1,PM2;

float t1,t2,r1,r2,r,t,X,Y,x1,x2,v1,v2,a,b,c,d,e,f,g,h,i;char Bof[50];

/* declaration des fonctions appelees */

int NbreComposantes(void);

void EntrerVecteur (float *pcomposantes,int nb);

void EcrireVecteur (float *pcomposantes,int nb);

float NormeVecteur (float composantes[20], int nb);

void VecteurPlusVecteur( float composantes0[20], float composantes1[20] ,float composantes2[20],int nb);

void VecteurParScalaire( float a, float *composantes2, int nb);

float Norme2 (float composantes[20], int nb);

float Norme3 (float composantes[20], int nb);

void Normalise( float *composantes, int nb );

float ProduitScalaire( float composantes0[20], float composantes1[20], int N);

void ProduitVectoriel( float composantes0[20],float composantes1[20],float *stoc,int n );

float ProduitMixte1( float composantes0[20], float composantes1[20], float composantes2[20],int N );

float ProduitMixte2( float composantes0[20], float composantes1[20], float composantes2[20],int N );

void DoubleProdVect1( float composantes0[20], float composantes1[20], float composantes2[20],float *stoc,int N);

void DoubleProdVect2( float composantes0[20], float composantes1[20], float composantes2[20],float *stoc,int N);

/* saisie et verification de la validite des donnees saisies */

N=NbreComposantes();

a=r1;b=t1;x1=c;

d=r1;e=t1;v1=f;

a=r2;b=t2;x2=c;

d=r2;e=t2;v2=f;

X=x1+x2;Y=v1+v2;

/* traitement des donnees */

printf("Vous avez choisis %d argumens pour le vecteur V.\n",N);

EntrerVecteur (composantes0,N);

EcrireVecteur (composantes0,N);

/* calcul et affichage des normes */

Nov=NormeVecteur (composantes0,N);

printf("\nLa 1ere norme =%f. ",Nov);

Nov2=Norme2 (composantes0,N);

printf("\nLa 2nde norme =%f. ",Nov2);

Nov3=Norme3 (composantes0,N);

printf("\nLa 3eme norme =%f. \n",Nov3);

/* traitement avec deux vecteurs */

EntrerVecteur (composantes1, N);

EcrireVecteur ( composantes1,N );

PS=ProduitScalaire( composantes0, composantes1,N); /* Le produit scalaire */

printf("\nLe produit scalaire des deux vecteurs = %f \n",PS );

VecteurPlusVecteur(composantes0, composantes1, composantes2,N ); /* la somme */

printf("\nVoici la somme des deux vecteurs :");

EcrireVecteur (composantes2,N);

printf("\nPar quel scalaire voulais vous multiplier ce dernier ? : "); /* la multiplication par un scalaire */

scanf("%f",&scalaire);

VecteurParScalaire(scalaire,composantes2,N);

EcrireVecteur (composantes2,N);

printf("\nLe voici normalise : ");

Normalise(composantes2,N);

EcrireVecteur (composantes2,N);

printf("\n\tEntrez R1(module du vecteur1):\t\t");

scanf("%f",&r1);

printf("\n\tEntrez T1(argument du vecteur1):\t");

scanf("%f",&t1);

printf("\n\tEntrez R2(module du vecteur2):\t\t");

scanf("%f",&r2);

printf("\n\tEntrez T2(argument du vecteur2):\t");

scanf("%f",&t2);

return 0;

}

 

 

/* Definition des fonctions */

int NbreComposantes (void)

{

int n1;

do

{

printf("\nChoisissez le nombre d'arguments du vecteur (compris entre 2 et 20) : ");

scanf("%d",&n1);

}

while (n1<2||n1>20);

return n1;

}

 

 

void EntrerVecteur (float *pcomposantes,int nb)

{

int i;

printf("\nVeuillez entrez votre vecteurs d'il vous plait : \n");

for (i=0;i<nb;i=i+1)

{

do

{

printf(" V%d = ",i);

scanf("%f",(pcomposantes+i));

}

while (*(pcomposantes+i)<-10||*(pcomposantes+i)>10);

}

return ;

}

 

 

void EcrireVecteur (float *pcomposantes,int nb)

{

int i;

printf("\nLe vecteur x s'ecrit : \n");

for (i=0;i<nb;i=i+1)

{

printf(" X%d= %f \n",i,*(pcomposantes+i));

}

return ;

}

 

 

float NormeVecteur (float composantes0[20], int nb)

{

int i;

float norme=0;

for (i=0;i<nb;i=i+1)

{

norme=composantes0[ i ]*composantes0[ i ] + norme;

}

norme= norme*norme/2;

return norme ;

}

 

 

float Norme2( float composantes0[20], int nb )

{

int i;

float norme=0;

for( i=0;i<nb;i++)

{

if(composantes0[ i ]>=0)

{

norme=composantes0[ i ] + norme;

}

else

{

norme=-composantes0[ i ] + norme;

}

}

return norme;

}

 

 

float Norme3( float composantes0[20], int nb )

{

int i;

float norme3=0;

for( i=0;i<nb;i++)

{

if(composantes0[ i ] <0) /* on cherche le maximum de la valeur absolue pour la retourner */

{

if(-composantes0[ i ]>norme3)

{

norme3=-composantes0[ i ];

}

}

else

{

if(composantes0[ i ]>norme3)

{

norme3=composantes0[ i ];

}

}

}

return norme3;

}

 

 

void Normalise( float composantes[20], int nb )

{

int i;

float norme=NormeVecteur( composantes, nb ); /* on initialise la norme à sa valeur */

for( i=0; i<nb;i++ )

{

composantes[ i ] = composantes[ i ]/ norme; /* chaque argument on le divise par la norme */

}

return ;

}

 

 

 

 

void VecteurPlusVecteur( float composantes0[20],float composantes1[20], float composantes2[20], int nb)

{

int i;

for(i=0;i<nb;i++)

{

composantes2[i]=composantes0[i]+composantes1[i]; /* on fait la somme des deux composantes */

}

return ;

}

 

 

void VecteurParScalaire( float a, float *composantes2, int nb)

{

int i;

for( i=0;i<nb;i++)

{

composantes2[i]=composantes2[i]*a; /* chaques arguments ont le multiplie par a */

}

return ;

}

 

 

float ProduitScalaire( float composantes0[20] ,float composantes1[20],int n )

{

int i;

float PS=0;

for( i=0; i<n ; i++ )

{

PS = composantes0[ i ] * composantes1[ i ] + PS;

}

return PS;

}

 

 

void ProduitVectoriel( float composantes0[20],float composantes1[20],float *stoc,int n )

{

/* ici tu devra faire le produit vectoriel de vomposantes0 et composantes1 et mettre le resultat dans stoc */

}

 

 

float ProduitMixte1( float composantes0[20], float composantes1[20], float composantes2[20],int N )

{

float PM1;

float PV[20];

ProduitVectoriel( composantes0, composantes1,PV,N ); /* on stoque le produit vectoriel dand PV */

PM1=ProduitScalaire( PV , composantes2,N ); /* et on calcul le produit scalaire pour avoir le produit mixte */

return PM1;

}

 

 

float ProduitMixte2( float composantes0[20], float composantes1[20], float composantes2[20],int N )

{

float PM2;

float PV[20];

ProduitVectoriel( composantes1, composantes2,PV,N ); /* on stoque le produit vectoriel dand PV */

PM2=ProduitScalaire( composantes0, PV, N ); /* et on calcul le produit scalaire pour avoir le produit mixte*/

return PM2;

}

 

 

void DoubleProdVect1( float composantes0[20], float composantes1[20], float composantes2[20],float *stoc,int N)

{

float DPV1[20];

ProduitVectoriel( composantes1,composantes2,DPV1 , N ); /* on met le premier resultat dans DPV1 */

ProduitVectoriel(DPV1,composantes2,stoc , N ); /* on met le second resultat dans stoc */

return ;

}

 

 

void DoubleProdVect2( float composantes0[20], float composantes1[20], float composantes2[20],float *stoc,int N)

{

float DPV2[20];

ProduitVectoriel( composantes1,composantes2,DPV2 , N ); /* on met le premier resultat dans DPV2 */

ProduitVectoriel(composantes0, DPV2,stoc, N); /* on met le second resultat dans stoc */

return ;

}

3 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
6 juin 2008 à 16:03
et qu'est-ce-que tu mets dans 'void ProduitVectoriel(...)' ?

Ah autre chose quand tu déclares tes fonctions il faut le faire en-dehors du corps d'une autre fonction (main() en l'occurence) :

int NbreComposantes(void);


int main(void)
{
...
}
0
cs_faerie Messages postés 4 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 6 juin 2008
6 juin 2008 à 16:11
je viens de faire le produit vectoriel :

void ProduitVectoriel( float composantes0[20],float composantes1[20],float *stoc,int n  )
{
 stoc[0] = (composantes0[1]*composantes1[2]) - (composantes0[2]*composantes1[1]);
 stoc[1] = (composantes1[0]*composantes0[2]) - (composantes1[2]*composantes0[0]);
 stoc[2] = (composantes0[0]*composantes1[1]) - (composantes0[1]*composantes1[0]);
 return ;
}

mais il y a toujours le meme problème, quand je compile il s'arrete lorsqu'il demande les valeurs des modules et arguments...
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
6 juin 2008 à 17:55
Il s'arrête après avoir demandé les modules et arguments R1 T1 r2 T2...et où est le problème?
la ligne suivante c'est return 0; donc la fin du programme ?!!??!
0
Rejoignez-nous