begin process at 2012 05 27 15:53:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications Linux

 > ÉCHELONNER UNE MATRICE AVEC L'ALGORITHME DE GAUSS (COMPILÉ AVEC G++ SOUS LINUX)

ÉCHELONNER UNE MATRICE AVEC L'ALGORITHME DE GAUSS (COMPILÉ AVEC G++ SOUS LINUX)


 Information sur la source

Note :
4 / 10 - par 1 personne
4,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Applications Linux Niveau :Initié Date de création :31/10/2002 Date de mise à jour :31/10/2002 13:20:15 Vu :10 306

Auteur : bouba

Ecrire un message privé
Site perso
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

On rentre une matrice au clavier et le programme nous donne sa forme échelonnée grace a l'algorithme de gauss. Possibilité de stocker les résultats dans un fichier.
J'ai compilé le programme avec g++ sous linux (Red Hat 7.3) mais je pense qu'il ne devarit pas y avoir de problème avec d'autres complateurs comme Borland compiler ou autres ....

Source

  • #include<iostream.h>
  • #include<fstream>
  • #include<stdio.h>
  • int main()
  • {
  • char name[256], name_file[256];
  • bool avec_fichier, est_nulle;
  • int col,lig;
  • double temp;
  • double matrix[256][256];
  • FILE *fichier;
  • cout << "==================================";
  • cout << endl << "= Gauss =";
  • cout << endl << "= auteur: Bouba =";
  • cout << endl << "==================================" << endl << endl;
  • cout << "Entrez le nom de la matrice a créer:";
  • gets(name);
  • cout << "Voulez vous enregistrer la matrice \"" << name << "\" dans un fichier? (O/N)";
  • if(getchar()=='o')
  • {
  • strcpy(name_file,name);
  • strcat(name_file,".mtx");
  • if((fichier=fopen(name_file,"a+"))!=NULL)
  • {
  • cout <<"Fichier \"" << name_file <<"\" créé avec succès!";
  • avec_fichier=true;
  • }
  • else
  • {
  • cout <<"Impossible de créer le fichier \"" << name_file << "\"!";
  • }
  • }
  • cout << endl << "Entrez les dimensions de la matrice \"" << name << "\"";
  • cout << endl << "lignes : ";
  • cin >> lig;
  • cout << "colonnes : ";
  • cin >> col;
  • cout << "La matrice \"" << name << "\" est de dimension " << lig << "x" << col;
  • cout << endl << "Entrez la valeur de chaque élément de la matrice \"" << name << "\"" << endl;
  • for(int i=0; i<lig; i++)
  • for(int j=0; j<col; j++)
  • {
  • cout << name << "[" << i+1 << "][" << j+1 << "] : ";
  • cin >> matrix[i][j];
  • }
  • cout << "La matrice \"" << name << "\" est la suivante" << endl << endl;
  • if(avec_fichier==true)
  • fprintf(fichier,"Matrice initiale\n");
  • for(int i=0; i<lig; i++)
  • {
  • cout << "|\t";
  • for(int j=0; j<col; j++)
  • {
  • cout << matrix[i][j] << "\t";
  • if(avec_fichier==true)
  • {
  • fprintf(fichier,"%f\t",matrix[i][j]);
  • }
  • }
  • if(avec_fichier==true)
  • fprintf(fichier,"\n");
  • cout << "|" << endl;
  • }
  • cout << endl << "Appuyez sur [entrée] pour continuer";
  • getchar();
  • while(getchar()!='\n');
  • cout << "L'algorithme de Gauss donne la matrice échelonnée suivante" << endl;
  • int l=0, c=0;
  • double tmp[256];
  • //c'est ici que commence l'algorithme de gauss
  • while((l<lig)&&(c<col))
  • {
  • for(int i=0;i<lig;i++)
  • {
  • for(int j=0;j<col;j++)
  • {
  • if(matrix[i][j]==0)
  • est_nulle=true;
  • else
  • est_nulle=false;
  • }
  • }
  • if(est_nulle==true)
  • {
  • cout << endl << "La matrice \"" << name << "\" est nulle" << endl;
  • for(int i=0; i<lig; i++)
  • {
  • cout << "|\t";
  • for(int j=0; j<col; j++)
  • {
  • cout << matrix[i][j] << "\t";
  • }
  • cout << "|" << endl;
  • }
  • return 0;
  • }
  • else
  • {
  • temp=0;
  • while(temp==0)
  • {
  • temp=0;
  • for(int x=l; x<lig; x++)
  • {
  • temp=matrix[x][c]+temp;
  • }
  • if(temp==0)
  • c++;
  • }
  • if(matrix[l][c]==0)
  • {
  • int i=l+1;
  • while(matrix[i][c]==0)
  • {
  • i=i+1;
  • }
  • for(int x=0;x<col;x++)
  • {
  • tmp[x]=matrix[l][x];
  • matrix[l][x]=matrix[i][x];
  • matrix[i][x]=tmp[x];
  • }
  • }
  • for(int i=l+1;i<lig;i++)
  • {
  • temp=matrix[i][c]/matrix[l][c];
  • for(int x=c;x<col;x++)
  • {
  • matrix[i][x] = matrix[i][x] - temp*matrix[l][x];
  • if((matrix[i][x] < 0.00000000000001) && (matrix[i][x]>-0.00000000000001))
  • matrix[i][x]=0;
  • }
  • }
  • l++;
  • c++;
  • }
  • }
  • if(avec_fichier==true)
  • fprintf(fichier,"\nVoici le résulatat du pivot de gauss sur cette matrice\n");
  • for(int i=0; i<lig; i++)
  • {
  • cout << "|\t";
  • for(int j=0; j<col; j++)
  • {
  • cout << matrix[i][j] << "\t";
  • if(avec_fichier==true)
  • {
  • fprintf(fichier,"%f\t",matrix[i][j]);
  • }
  • }
  • if(avec_fichier==true)
  • fprintf(fichier,"\n");
  • cout << "|" << endl;
  • }
  • return 0;
  • }
#include<iostream.h>
#include<fstream>
#include<stdio.h>

int main()
{
	char name[256], name_file[256];
	bool avec_fichier, est_nulle;
	int col,lig;
	double temp;
	double matrix[256][256];
	FILE *fichier;

	cout << "==================================";
	cout << endl << "=    Gauss                           =";
	cout << endl << "=    auteur: Bouba                =";
	cout << endl << "==================================" << endl << endl;
	cout << "Entrez le nom de la matrice a créer:";
	gets(name);
	cout << "Voulez vous enregistrer la matrice \"" << name << "\" dans un fichier? (O/N)";

	if(getchar()=='o')
	{
		strcpy(name_file,name);
		strcat(name_file,".mtx");
		if((fichier=fopen(name_file,"a+"))!=NULL)
		{
			cout <<"Fichier \"" << name_file <<"\" créé avec succès!";
			avec_fichier=true;
		}
		else
		{
			cout <<"Impossible de créer le fichier \"" << name_file << "\"!";
		}
	}


	cout << endl << "Entrez les dimensions de la matrice \"" << name << "\"";
	cout << endl << "lignes : ";
	cin >> lig;
	cout << "colonnes : ";
	cin >> col;
	cout << "La matrice \"" << name << "\" est de dimension " << lig << "x" << col;
	cout << endl << "Entrez la valeur de chaque élément de la matrice \"" << name << "\"" << endl;

	for(int i=0; i<lig; i++)
		for(int j=0; j<col; j++)
		{
			cout << name << "[" << i+1 << "][" << j+1 << "] : ";
			cin >> matrix[i][j];
		}

	cout << "La matrice \"" << name << "\" est la suivante" << endl << endl;

	if(avec_fichier==true)
		fprintf(fichier,"Matrice initiale\n");

	for(int i=0; i<lig; i++)
	{
		cout << "|\t";
		for(int j=0; j<col; j++)
		{
			cout << matrix[i][j] << "\t";
			if(avec_fichier==true)
			{
				fprintf(fichier,"%f\t",matrix[i][j]);
			}
		}
		if(avec_fichier==true)
			fprintf(fichier,"\n");
		cout << "|" << endl;
	}

	cout << endl << "Appuyez sur [entrée] pour continuer";
	getchar();
	while(getchar()!='\n');
	cout << "L'algorithme de Gauss donne la matrice échelonnée suivante" << endl;

	int l=0, c=0;
	double tmp[256];

//c'est ici que commence l'algorithme de gauss
	while((l<lig)&&(c<col))
	{
		for(int i=0;i<lig;i++)
		{
			for(int j=0;j<col;j++)
			{
			if(matrix[i][j]==0)
				est_nulle=true;
			else
				est_nulle=false;
			}
		}

		if(est_nulle==true)
		{
			cout << endl << "La matrice \"" << name << "\" est nulle" << endl;
			for(int i=0; i<lig; i++)
			{
				cout << "|\t";
				for(int j=0; j<col; j++)
				{
					cout << matrix[i][j] << "\t";
				}
				cout << "|" << endl;
			}
			return 0;
		}
		else
		{
			temp=0;
			while(temp==0)
			{
				temp=0;
				for(int x=l; x<lig; x++)
				{
					temp=matrix[x][c]+temp;
				}
				if(temp==0)
					c++;
			}
			if(matrix[l][c]==0)
			{
				int i=l+1;
				while(matrix[i][c]==0)
				{
					i=i+1;
				}
				for(int x=0;x<col;x++)
				{
					tmp[x]=matrix[l][x];
					matrix[l][x]=matrix[i][x];
					matrix[i][x]=tmp[x];
				}
			}
			for(int i=l+1;i<lig;i++)
			{
			temp=matrix[i][c]/matrix[l][c];
				for(int x=c;x<col;x++)
				{
					matrix[i][x] = matrix[i][x] - temp*matrix[l][x];
					if((matrix[i][x] < 0.00000000000001) && (matrix[i][x]>-0.00000000000001))
						matrix[i][x]=0;
				}
			}
			l++;
			c++;
		}
	}
	
	if(avec_fichier==true)
		fprintf(fichier,"\nVoici le résulatat du pivot de gauss sur cette matrice\n");

	for(int i=0; i<lig; i++)
	{
		cout << "|\t";
		for(int j=0; j<col; j++)
		{
			cout << matrix[i][j] << "\t";
			if(avec_fichier==true)
			{
				fprintf(fichier,"%f\t",matrix[i][j]);
			}
		}
		if(avec_fichier==true)
			fprintf(fichier,"\n");
		cout << "|" << endl;
	}
	return 0;
}


 

 Conclusion

Bon, le truc qui peut paraître bizard c'est:

if((matrix[i][x] &lt; 0.00000000000001) && (matrix[i][x]&gt;-0.00000000000001))
matrix[i][x] =0;

En fait, ça sert a régler les problèmes d'arrondi, sans ceci au lieu d'avoir des zéros qui s'affichent à l'écran il se peut qu'on voit des 1.0e10-16.
Voilà, c'est tout, si vous avez des questions n'hésitez pas!


 Sources du même auteur

Source avec Zip Source avec une capture EDITEUR DE FICHIERS C++ (LINUX, WINDOWS, MAC...)
CRÉER UNE FENÊTRE AVEC LA XLIB (TOUT OS À BASE D'UNIX (LINUX...
FONCTIONS KBHIT() ET GETCH() SOUS LINUX (DOIT MARCHER AVEC T...
Source avec Zip Source avec une capture EDITEUR DE TEXTE (COMME LE NOTEPAD!!!) [COMPILATEUR BCC55](M...
Source avec une capture EXEMPLE D'UN CUBE PLEIN QUI TOURNE EN OPENGL (UTILISE GLUT)

 Sources de la même categorie

Source avec Zip TRAITEMENT D'IMAGE PGM par Jios
Source avec une capture COLORIMÈTRE NUMÉRIQUE LINUX par valchek
Source avec Zip TRAITEMENTS D'IMAGES AU FORMAT PGM AVEC LES ALGORITHMES DE C... par lemout
Source avec Zip ALGORITHME ACO INTERFACE GTK par RyBeN
Source avec Zip COMPRESSER SES SAUVEGARDES SMSBACKUPRESTORE (ANDROID) EN C A... par ThalLab

Commentaires et avis

Commentaire de bouba le 31/10/2002 01:36:56

Attention, j'avais oublié, dans les directives de compilation j'ai placé une ligne #include&lt;fstream&gt;, ceci est une nouvelle norme supporté par les denières versions de g++. Il me semble que certains compilateurs sous windows la supporte mais je n'en suis pas sûr, alors si vous avez un problème a cause de ceci a la compilation remplacez la ligne par #include&lt;fstream.h&gt;

Commentaire de Kaid le 31/10/2002 09:33:32

Juste un détail: tu mets #include&lt;string&gt; alors que tu n'utilises jamais l'objet std::string que le header contient.

Commentaire de bouba le 31/10/2002 13:17:42

C'est très juste, j'avais oublié de l'enlever, merci pour cette remarque Kaid!

Commentaire de esitc le 16/02/2005 18:07:23

cherche désespéremment de l'aide pour faire un C++ d'une résolution de syst linéaire par gauss.
merci énormément

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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 : 0,655 sec (3)

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