begin process at 2012 05 30 15:41:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

resoudre une matrice triangulaire superieure


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

resoudre une matrice triangulaire superieure

dimanche 3 décembre 2006 à 22:36:02 | resoudre une matrice triangulaire superieure

alyggattor

Bonjour à tous,
je suis un debutant en C. J'ai voulu travailler sur la resolution d'une matrice d'ordre n directement triangulaire superieure. Cependant mon code comporte quelques erreurs et je ne me retrouve pas.
Quelqu'un pourrait il m'aider à y voir plus clair? Merci.

/*c'est juste pour voir comment trouver les solutions
 d'une matrice triangulaire superieure A telle que
       A*x=b  */

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int c,i,j,n,k;
float*a,*b,*x;


int val(int i,int j){k=((i-1)*n)+(j-1);  //pour faire la correspondance de
       return k;          // l'element a[i][j] de la matrice par rapport au pointeur
                            }

void saisie(){a=(float*)malloc((n*n)*sizeof(float));//a correspond à la matrice
       for(c=0;c<(n*n);c++)
         scanf("%f",a[c]);
                    }
void remonte(){
        b=(float*)malloc(n*sizeof(float));
        x=(float*)malloc(n*sizeof(float));
        x[n]=b[n]/(a[val(n,n)]);
        for(i=n-1;i>=1;i--)
  {x[i]=b[i];
   for(j=i+1;j<=n;j++)
   x[i]=x[i]-a[val(i,j)]*x[j];
   x[i]=x[i]/a[val(i,i)];
  }
                        }

void main(){clrscr();
     printf("Taille de la matrice?\n");
     scanf("%d",&n);
     printf("sasir la matrice triangulaire superieure\n");
     saisie();
     printf("saisir les resultats\n");
     for(i=1;i<=n;i++)
      scanf("%f",b[i]);
      remonte();
      printf("Les solutions sont:\n");
      for(i=1;i<=n;i++)
      printf("\nx%d=%f\n",i,x[i]);
      printf("voulez vous continuer");
      getch();
                 }

P.S.: encore une fois je suis un grand debutant de la programmation

dimanche 3 décembre 2006 à 23:06:16 | Re : resoudre une matrice triangulaire superieure

SAKingdom

Membre Club
Réponse acceptée !
scanf("%f",b[i]);
Tu entre une valeur dans b mais ce pointeur n'est initialiser qu'après à remonte(). Il n'y a pas de mémoire d'allouer pour le premier tour de boucle. Si ça plante là, c'est logique.

Ensuite:
b=(float*)malloc(n*sizeof(float));
x=(float*)malloc(n*sizeof(float));
 x[n]=b[n]/(a[val(n,n)]);
Tu divise la valeur contenue dans b[n]. Cependant, il n'y a rien à cette location puisque sa mémoire vien juste d'être alloué. Le résultat est faussé.

Finalement, je vois beaucoup de malloc mais aucun free. C'est pas bon du tout ça.

Il faudrait que tu revoie certaines notions. Ton programme n'est pas très bon.

Commence par quelque chose de plus facile si tu es "un grand debutant de la programmation".

Bonne continuation.

C++ (@++)

mardi 9 janvier 2007 à 09:20:46 | Re : resoudre une matrice triangulaire superieure

alyggattor

Après verification et prise en compte de la derniere reponse, j'ai pu modifier mon code. Bien que pouvant etre harmonisé, je l'ai fait juste dans le cadre de la manipilation des pointeurs. J'avais eu à le faire avec des tableaux statiques.
Merci de voir le code suivant.

/*c'est juste pour voir comment trouver les solutions
 d'une matrice triangulaire superieure A telle que
      A*x=b  */

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int c,i,j,n,k;
float*a,*b,*x;


int val(int i,int j){k=((i-1)*n)+(j-1);  //pour faire la correspondance de
       return k;          // l'element a[i][j] de la matrice par rapport au pointeur
      }

void saisie(float*a){                   //saisie de la matrice A
  for(c=0;c<(n*n);c++)
   scanf("%f",a[c]);
      }
void remonte(){
        x[n-1]=b[n-1]/(a[val(n,n)]);
        for(i=n-2;i>=0;i--)
  {x[i]=b[i];
   for(j=i+1;j<n;j++)
    x[i]=x[i]-a[val(i+1,j)]*x[j];
    x[i]=x[i]/a[val(i+1,i+1)];
  }
       }

void main(){clrscr();
     printf("Taille de la matrice?\n");
     scanf("%d",&n);
     a=(float*)malloc((n*n)*sizeof(float));//a correspond à la matrice
     x=(float*)malloc(n*sizeof(float));
     b=(float*)malloc(n*sizeof(float));
     printf("sasir la matrice triangulaire superieure\n");
     saisie(a);
     printf("saisir les resultats\n");
     for(i=0;i<n;i++)
      scanf("%f",b[i]);
      remonte();
      printf("Les solutions sont:\n");
      for(i=0;i<n;i++)
      printf("\nx%d=%f\n",(i+1),x[i]);
      printf("voulez vous continuer");
      free(a);
             free(b);
             free(x);
             getch();
            
     }



Cette discussion est classée dans : printf, matrice, float, triangulaire, superieure


Répondre à ce message

Sujets en rapport avec ce message

Besoin d'aide en C - Fonction [ par bugs2600 ] Voici mon programme quelqu'un pourrait-il m'aider je dois faire une fonction et je ne vois pas comment la faire le non de ma fonction doit etre PRODMA fonction et matrice [ par herve_blondel ] bonjour a tous.je suis un debutant en C++ et j'aimerais ecrire un fonction qui prend en argument une matrice et me retourne une matrice(je sais ce que tourne en rond, besoin d'aide [ par jekburn ] Seriez-vous me dire quelle mon erreur dans ce programme ?#include int main(){ float somme(float n,float y[50]);float x[50],z[50];float n,i;printf("com compilation mai au lancement "erreur la memoire ne peu pas pas etre read" [ par touny23 ] je maitrise pas tro le C.mai comme j ai un projet a faire dessus pour la rentré , je sui obligé de m y mettre .j arrive a compiler sous dev-cpp mai lo matrice triangulaire supérieures [ par imanet ] svp.je cherche un code qui calcule le produit de 2 matrices triangulaire supérieures.merci Calcul matriciel [ par ganfoud ] SalutJ'ai créé une classe Vecteur et Matrice, tout marche sauf la surcharge de l'operateur =Voici les bouts qui nous interessent:matrice.hclass Vecteu pb incrementation variable. [ par conan76 ] Voila j'ai passé l'après midi a chercher d'ou vient mon problème sans succès.je tente même de faire des affichages console avant et après incrémentati Surcharge des opérateurs [ par karamellatti ] salut tout le monde,je sollicite votre aide pour la résolution d'un ptit problem concernant un mini-programme de calcul matriciel..voici  le programme probleme dans l'algorithme de jacobi [ par mino1001 ] voila mon programme ,et je ne c pas pourquoi il ne calcule pas les solutions du systeme Ax=b telles que:        5   -1 -1 -1                  -4       Produit matriciel en c renvoit des valeurs complètement fausses [ par bilel59 ] Bonjout à tous, je sollicite votre aide pour la raison indiquée dans le titre, en effet le produif matriciel que j'effectue renvoit des valeurs vraime


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,560 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales