Resolution systeme de N equations à N inconnues

cs_sweett Messages postés 2 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 14 mai 2008 - 13 mai 2008 à 17:45
cs_sweett Messages postés 2 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 14 mai 2008 - 14 mai 2008 à 18:25
Bonjour
je suis nouveau sur ce site (meme si j'y ai deja passé du temps pr mon programme) et je suis coincé dans le programme que je dois realiser. Le su jet est la resolution de N systemes d'equations a N inconnues. le voila

 /*resolution systeme d'equation*/

# define N 3
#include<stdio.h>
#include<string.h>

void saisie(int*n,float systeme[3][3],float secondmembre[3])
{
        int i;
        int j;

        printf("combien de valeurs voulez vous rentrer");
        scanf("%d",n);
        for(i=1;i<=*n;i++)
        {
                for(j=1;j<=*n;j++)
                {
                        {printf("entrer le nombre%f%f,i+1,j+1");}
                {scanf("%f",&systeme[i][j]);}
                }
        }
        for(i=1;i<=*n;i++)
        {
                scanf("%f",&secondmembre[i]);
        }
        {printf("afficherles equations%f%f,systeme[i][j],secondmembre[k]");}
}
void echange (float *systeme[][],float *secondmembre[][],int *i,int *j,int *k)                                  /*a modifier car l'echange ne marche pas*/
{
        float memoire;

        memoire=systeme[i][j];
        systeme[i][j]=systeme[k][j];
        systeme[k][j]=memoire;

        memoire=secondmembre[i]
        secondmembre[i]=secondmembre[k]
        secondmembre[k]=memoire

}

main()
{
float systeme[N][N];
float secondmembre[N];
int n;
int i;
int j;
int k;

saisie(&n,systeme,secondmembre);

for(j=1;j<=n;j++)
{
        if (systeme[i+1]>systeme[i]);
        {
                echange(&systeme[i][j],&systeme[k][j]);

        }

suppression(systeme[][],secondmembre[],int *i,int *k,int*j);
}

}
void suppression (int *i,int *k,int *j,float systeme[][],float secondmembre[])
{

        int n;
        int z;

for(j=1;j<=n-1;j++)
{

        for(k=1;k<=n;k++)
        {
                systeme[i][j]/systeme[k+1][j]=z;
                secondmembre[i]/secondmembre[k+1]
                for(j=1;j<=n;j++)
                        {
                        [k][j]=[i][j]-[k][j]*z
                        }
        }
}

 secondmembre[n-1]=systeme[n][n-1]/systeme[n-1][n-1];
 systeme[n][n-1]=0;
 systeme[n-1][n-1]=0;

 for (ligne=1;ligne<=n;ligne++)
{

 for (sol=2;sol<=n;sol++)
 {

 systeme[n-ligne][n-sol]*=secondmembre[n-ligne];
 systeme[n][n-sol]-=systeme[n-ligne][n-sol];
 systeme[n-ligne][n-sol]=0;

 }

 secondmembre[n-(ligne+1)]=systeme[n][n-(ligne+1)]/systeme[n-(ligne+1)][n-(ligne+1)];

 }

il y a enormement d'erreur a partir de la fonction echange, souvent la meme qui revient "invalid use of array with unspecified bounds"
Je sais que mon niveau en informatique est miserable mais je n'y comprends rien.

Voila merci pour votre aide

2 réponses

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
13 mai 2008 à 20:32
Yop,

float *systeme[][],float *secondmembre[][],int *i,int *j,int *k

tout dabord , comme tu le dis , si ton niveau en info et plus précisément en programmation n'est pas au top :D il faudrait apprendre dabord le langage C, les bases avant de s'attaquer au pointeur ;) car:

int *i,int *j,int *k

sont des pointeurs et je supose que tu veu utiliser leur valeur dans ta fonction, donc il faut par exemple a cette ligne :

memoire=systeme[i][j]; écrire ceci memoire=systeme[*i][*j]; * permet de spécifier que l'on veut utiliser la valeur pointée par le pointeur , ici i tout cours désigne l'adresse à laquel cette valeur ce trouve. Ici d'ailleur je comprend pas le pourquoi de l'utilisation de pointeur :s .

De plus aussi revoie le passage de paramètre, car ta façons de passer les tableau 2D n'est pas bonne non plus.

echange(&systeme[i][j],&systeme[k][j]);

Tu ne passe pas tout les paramètres que attend la fonction, fin bref, bcp de chose sont a refaire, prend le temps d'étudier correctement le C :D

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
cs_sweett Messages postés 2 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 14 mai 2008
14 mai 2008 à 18:25
merci pour l'histoire de l'echange. Pour l'echange tu parles des parametres "secondmembre" ou egalement des I,j et k?Ou est l'erreur dans ma facon de passer les tableaux 2D ?Quant au C je ne le comprends pas.j'ai pourtant deja lu des cours sur les passages par adresse et passage par valeur mais pour moi c'est du chinois:D

++
0
Rejoignez-nous