Prog C(projet):résolution d'1 système d'équat
Pierrrrro
Messages postés
7
Statut
Membre
-
Pierrrrro Messages postés 7 Statut Membre -
Pierrrrro Messages postés 7 Statut Membre -
Bonjour à tous,
j'ai "quelques" soucis pour programmer en C le sujet suivant: "résolution d'un système d'équations" la méthode de résolution proposée est la méthode du pivot de Gauss qui consiste (pour un système à 3 équations, donc 3 inconnus x,y,z) dans un premier temps à éliminer l'inconnu x des 2 dernières équations puis y pour trouver l'inconnu z que l'on remplacera alors dans la deuxième ligne pour trouver y que l'on remplacera également dans la première pour trouver x. (la méthode est détaillée et beaucoup mieux expliquée sur: http://www.bibmath.net/dico/index.php3?action=affiche&quoi=./g/gausspivot.html )
Pour le moment, j'ai 2 tableaux:
-un de 3*3 pour mon système d'équations
-un pour les second membres (ce à quoi est égal l'équation de la mm ligne)
et j'aimerai associer la ligne du second membre qui correspond à son équation donc a une ligne (équation) dans le premier tableau, pour pouvoir afficher le système avec les 3 équations et le second membre correspondant à chaque équation. (pour le moment:/)
Bref, si qqn m'a suivit jusque l'a, je vous en remercie, et vous pourrez donc constater que je galère pas mal...
Merci d'avance
j'ai "quelques" soucis pour programmer en C le sujet suivant: "résolution d'un système d'équations" la méthode de résolution proposée est la méthode du pivot de Gauss qui consiste (pour un système à 3 équations, donc 3 inconnus x,y,z) dans un premier temps à éliminer l'inconnu x des 2 dernières équations puis y pour trouver l'inconnu z que l'on remplacera alors dans la deuxième ligne pour trouver y que l'on remplacera également dans la première pour trouver x. (la méthode est détaillée et beaucoup mieux expliquée sur: http://www.bibmath.net/dico/index.php3?action=affiche&quoi=./g/gausspivot.html )
Pour le moment, j'ai 2 tableaux:
-un de 3*3 pour mon système d'équations
-un pour les second membres (ce à quoi est égal l'équation de la mm ligne)
et j'aimerai associer la ligne du second membre qui correspond à son équation donc a une ligne (équation) dans le premier tableau, pour pouvoir afficher le système avec les 3 équations et le second membre correspondant à chaque équation. (pour le moment:/)
Bref, si qqn m'a suivit jusque l'a, je vous en remercie, et vous pourrez donc constater que je galère pas mal...
Merci d'avance
A voir également:
- Prog C(projet):résolution d'1 système d'équat
- Filigrane projet - Guide
- Gant projet - Télécharger - Gestion de projets
- Robot prog - Télécharger - Édition & Programmation
- Wbs projet - Télécharger - Gestion de projets
- Projet windows movie maker - Télécharger - Montage & Édition
5 réponses
Salut,
Si ce que tu veux faire c'est juste afficher le système tu n'as pas besoin de "regrouper" les deux tableaux tu fais juste une boucle qui affiche ton système.
Par exemple si tab1 et ton tableau du système et tab2 ton tableau du second membre tu fais :
for(i=0;i<3;i++){
printf("%f.x + %f.y + %f.z = %f\n",tab1[i][0],tab1[i][1],tab1[i][2],tab2[i]);
}
Voila. a+
Si ce que tu veux faire c'est juste afficher le système tu n'as pas besoin de "regrouper" les deux tableaux tu fais juste une boucle qui affiche ton système.
Par exemple si tab1 et ton tableau du système et tab2 ton tableau du second membre tu fais :
for(i=0;i<3;i++){
printf("%f.x + %f.y + %f.z = %f\n",tab1[i][0],tab1[i][1],tab1[i][2],tab2[i]);
}
Voila. a+
Essaye ca :
Panneau de config -> Sons et perif audio.
Onglet Volume -> paramètre avancé
Options -> propriétés
Ajuster le voume pour -> enregistrement
et normalement tu dois avoir steréo mixer dans le cadre en dessous.
Si c'est le cas tu le coche puis OK. Ensuite tu peut le selectionner mais normalement c'est ce que audacity fais quand tu change la source d'enregistrement dans le logiciel.
Voilou.
a+
Edit : Désolé jme suis trompé de post
Panneau de config -> Sons et perif audio.
Onglet Volume -> paramètre avancé
Options -> propriétés
Ajuster le voume pour -> enregistrement
et normalement tu dois avoir steréo mixer dans le cadre en dessous.
Si c'est le cas tu le coche puis OK. Ensuite tu peut le selectionner mais normalement c'est ce que audacity fais quand tu change la source d'enregistrement dans le logiciel.
Voilou.
a+
Edit : Désolé jme suis trompé de post
Voila, j'ai fait comme tu m'a proposé mais ya encore un 'hik', quand j'éxécute, à l'affichage du systeme j'obtient:
le systéme est:
0x+916455424y+0z=9175040000
0x+916455424y+0z=9175040000
0x+916455424y+0z=9175040000
/*résolution d'un système d'équation*/
#include<stdio.h>
#include<string.h>
void saisie(int*n,float systeme[3][3],float secondmembre[3])
{
int i;
int j;
int k;
int l;
printf("combien de valeurs voulez vous entrer\n");
scanf("%i",n);
for(i=0;i<=*n-1;i++)
{
for(j=0;j<=*n-1;j++)
{
printf("entrer le nombre de la ligne %i et de la colonne %i\n",i+1,j+1);
scanf("%i",&systeme[i][j]);
}
}
for(k=0;k<=*n-1;k++)
{
printf("entrer le second membre de la ligne %i\n",k+1);
scanf("%i",&secondmembre[k]);
}
{printf("le systeme est:\n");}
for(i=0;i<=*n-1;i++)
{
printf("%d x+ %d y+ %d z =%d \n",systeme[i][0],systeme[i][1],systeme[i][2],secondmembre[i]);
}
}
main ()
{
int n,i,j,k;
float systeme[3][3];
float secondmembre[3];
saisie(&n,systeme,secondmembre);
}
le systéme est:
0x+916455424y+0z=9175040000
0x+916455424y+0z=9175040000
0x+916455424y+0z=9175040000
/*résolution d'un système d'équation*/
#include<stdio.h>
#include<string.h>
void saisie(int*n,float systeme[3][3],float secondmembre[3])
{
int i;
int j;
int k;
int l;
printf("combien de valeurs voulez vous entrer\n");
scanf("%i",n);
for(i=0;i<=*n-1;i++)
{
for(j=0;j<=*n-1;j++)
{
printf("entrer le nombre de la ligne %i et de la colonne %i\n",i+1,j+1);
scanf("%i",&systeme[i][j]);
}
}
for(k=0;k<=*n-1;k++)
{
printf("entrer le second membre de la ligne %i\n",k+1);
scanf("%i",&secondmembre[k]);
}
{printf("le systeme est:\n");}
for(i=0;i<=*n-1;i++)
{
printf("%d x+ %d y+ %d z =%d \n",systeme[i][0],systeme[i][1],systeme[i][2],secondmembre[i]);
}
}
main ()
{
int n,i,j,k;
float systeme[3][3];
float secondmembre[3];
saisie(&n,systeme,secondmembre);
}
C'est normal tu déclares des tableaux de float, c'est donc un %f qu'il faut quand tu saisis les coefficients.
Si tu veux des coefs entiers déclare des tableau de int .
Je te rappelle que le C est un langage fortement typé cad que le type que tu donnes à tes variables est trés important puisque leur occupation mémoire diffère suivant le type.
De plus je ne voie pas trés bien a quoi sert "printf("combien de valeurs voulez vous entrer\n"); scanf("%i",n);" puisque le reste du prog suppose que ce nombre est 3. Enfin ca c'est un détail.
a+. Bonne soirée
Si tu veux des coefs entiers déclare des tableau de int .
Je te rappelle que le C est un langage fortement typé cad que le type que tu donnes à tes variables est trés important puisque leur occupation mémoire diffère suivant le type.
De plus je ne voie pas trés bien a quoi sert "printf("combien de valeurs voulez vous entrer\n"); scanf("%i",n);" puisque le reste du prog suppose que ce nombre est 3. Enfin ca c'est un détail.
a+. Bonne soirée
Bonsoir,
c'est encore moi, toujours dans le même programme, je voudrais créer une fonction qui échange deux ligne de mon système quand la valeur affectée à x(le premier inconnu) est plus élevée sur une ligne autre que la première.
C'est à dire qu'avec cette fonction on aura ces valeurs dans l'ordre décroissant avec les lignes.
Mon principal soucis, c'est que pour faire un échange, il faut enregistrer les valeurs à échanger, et là il s'agit d'un tableau à 2 dimensions....
Et pour finir, je n'arrive pas à écrire en C la triangulation du système par la méthode de Gauss, c'est à dire que une fois que le système est classé, et que les inconnuesx et y sont éliminés de la dernière ligne (troisième pour système à 3 inconnus) et donc qu'il ne reste que l'inconnu z, comment faire pour retrancher à chaque lignes la valeur que l'on a trouvé pour z pour trouver la valeur de y et enfin celle de x???!
Un Grand Merci d'avance.
c'est encore moi, toujours dans le même programme, je voudrais créer une fonction qui échange deux ligne de mon système quand la valeur affectée à x(le premier inconnu) est plus élevée sur une ligne autre que la première.
C'est à dire qu'avec cette fonction on aura ces valeurs dans l'ordre décroissant avec les lignes.
Mon principal soucis, c'est que pour faire un échange, il faut enregistrer les valeurs à échanger, et là il s'agit d'un tableau à 2 dimensions....
Et pour finir, je n'arrive pas à écrire en C la triangulation du système par la méthode de Gauss, c'est à dire que une fois que le système est classé, et que les inconnuesx et y sont éliminés de la dernière ligne (troisième pour système à 3 inconnus) et donc qu'il ne reste que l'inconnu z, comment faire pour retrancher à chaque lignes la valeur que l'on a trouvé pour z pour trouver la valeur de y et enfin celle de x???!
Un Grand Merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
salut,
Pour inverser deux ligne il peut etre interressant de déclarer ton bleau en mémoire dynamique. Pour cela on crée un tableau qui contient les adresse pointant vers chaque tableau représentant les différentes lignes du système. Ce tableau contiendra des adresses de tableaux d'entier donc des int*.
int*systeme[nb_ligne_systeme];
Ensuite on rempli ce tableau par les adresse des tableau de coefs :
for(i=0;i<nb_ligne_systeme;i++){
systeme[i] = (int*)malloc(nb_colonne_systeme*sizeof(int));
}
avec nb_ligne_systeme = nb_colonne_systeme si le syst est carré
Pour remplir ce tableau :
systeme[indice_lig][indice_col] = un_nombre;
Pour inverser deux ligne c'est alors simple par ex pour inverser la ligne m avec la ligne n :
int*ligne_temp = systeme[m];
systeme[m] = systeme[n];
sysyeme[n] = ligne_temp;
Pour ta deuxieme question il "suffit" d'écrire le systeme par exemple
a1 x + b1 y + c1 z = A;
a2 x + b2 y + c2 z = B;
a3 x + b3 y + c3 z = C;
Pour annullé la variable z : la ligne 3 donne :
z = (C - a3 x - b3 y)/c3.
Que l'on substitue dans les lignes 1 et 2. Soit:
(a1 - a3/c3) x + (b1 - b3/c3) y = A - C/c3
(a2 - a3/c3) x + (b2 - b3/c3) y = B - C/c3
Donc si on reprend le code le système devient:
systeme[1][1] = systeme[1][1] - systeme[3][1]/systeme[3][3];
systeme[1][2] = systeme[1][2] - systeme[3][2]/systeme[3][3];
systeme[2][1] = systeme[2][1] - systeme[3][1]/systeme[3][3];
systeme[2][2] = systeme[2][2] - systeme[3][2]/systeme[3][3];
Tu peux mettre les autres coef a zero pour signaler que la var z n'est plus utiliser et que la derniere ligne ne sert plus.
Le second membre est également modifié :
second_membre[1] = second_membre[1] - second_membre[3] /systeme[3][3];
second_membre[2] = second_membre[2] - second_membre[3] /systeme[3][3];
Voila . Ya un peut plus de travail pour continuer la triangulation et pour généraliser a des système plus grand mais la base est la. Un conseil résoud ton système "a la main" comme j'ai fait pour trouver les formules générales puis le code
viendra tout seul.
Pour inverser deux ligne il peut etre interressant de déclarer ton bleau en mémoire dynamique. Pour cela on crée un tableau qui contient les adresse pointant vers chaque tableau représentant les différentes lignes du système. Ce tableau contiendra des adresses de tableaux d'entier donc des int*.
int*systeme[nb_ligne_systeme];
Ensuite on rempli ce tableau par les adresse des tableau de coefs :
for(i=0;i<nb_ligne_systeme;i++){
systeme[i] = (int*)malloc(nb_colonne_systeme*sizeof(int));
}
avec nb_ligne_systeme = nb_colonne_systeme si le syst est carré
Pour remplir ce tableau :
systeme[indice_lig][indice_col] = un_nombre;
Pour inverser deux ligne c'est alors simple par ex pour inverser la ligne m avec la ligne n :
int*ligne_temp = systeme[m];
systeme[m] = systeme[n];
sysyeme[n] = ligne_temp;
Pour ta deuxieme question il "suffit" d'écrire le systeme par exemple
a1 x + b1 y + c1 z = A;
a2 x + b2 y + c2 z = B;
a3 x + b3 y + c3 z = C;
Pour annullé la variable z : la ligne 3 donne :
z = (C - a3 x - b3 y)/c3.
Que l'on substitue dans les lignes 1 et 2. Soit:
(a1 - a3/c3) x + (b1 - b3/c3) y = A - C/c3
(a2 - a3/c3) x + (b2 - b3/c3) y = B - C/c3
Donc si on reprend le code le système devient:
systeme[1][1] = systeme[1][1] - systeme[3][1]/systeme[3][3];
systeme[1][2] = systeme[1][2] - systeme[3][2]/systeme[3][3];
systeme[2][1] = systeme[2][1] - systeme[3][1]/systeme[3][3];
systeme[2][2] = systeme[2][2] - systeme[3][2]/systeme[3][3];
Tu peux mettre les autres coef a zero pour signaler que la var z n'est plus utiliser et que la derniere ligne ne sert plus.
Le second membre est également modifié :
second_membre[1] = second_membre[1] - second_membre[3] /systeme[3][3];
second_membre[2] = second_membre[2] - second_membre[3] /systeme[3][3];
Voila . Ya un peut plus de travail pour continuer la triangulation et pour généraliser a des système plus grand mais la base est la. Un conseil résoud ton système "a la main" comme j'ai fait pour trouver les formules générales puis le code
viendra tout seul.
Je vais essayer de me débrouiller pour le reste..
Merci encore