Prog C(projet):résolution d'1 système d'équat
Fermé
Pierrrrro
Messages postés
7
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
24 mai 2008
-
10 mai 2008 à 14:04
Pierrrrro Messages postés 7 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 24 mai 2008 - 24 mai 2008 à 19:34
Pierrrrro Messages postés 7 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 24 mai 2008 - 24 mai 2008 à 19:34
A voir également:
- Prog C(projet):résolution d'1 système d'équat
- Restauration systeme windows 10 - Guide
- Mini projet en langage c corrigé - Forum C
- Forcer résolution 1920x1080 - Forum Windows 10
- L'administrateur système a configuré la politique de votre système pour interdire cette installation ✓ - Forum Logiciels
- Gantt projet - Télécharger - Gestion de projets
5 réponses
damlegone32
Messages postés
74
Date d'inscription
lundi 11 septembre 2006
Statut
Membre
Dernière intervention
31 mai 2011
29
10 mai 2008 à 15:16
10 mai 2008 à 15:16
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+
damlegone32
Messages postés
74
Date d'inscription
lundi 11 septembre 2006
Statut
Membre
Dernière intervention
31 mai 2011
29
10 mai 2008 à 15:48
10 mai 2008 à 15:48
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
Pierrrrro
Messages postés
7
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
24 mai 2008
10 mai 2008 à 20:04
10 mai 2008 à 20:04
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);
}
Pierrrrro
Messages postés
7
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
24 mai 2008
10 mai 2008 à 15:51
10 mai 2008 à 15:51
'Pas de soucis.
damlegone32
Messages postés
74
Date d'inscription
lundi 11 septembre 2006
Statut
Membre
Dernière intervention
31 mai 2011
29
11 mai 2008 à 00:16
11 mai 2008 à 00:16
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
Pierrrrro
Messages postés
7
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
24 mai 2008
11 mai 2008 à 11:53
11 mai 2008 à 11:53
Merci, ca fonctionne quand mes tableaux sont de type int, quant au printf bizard, pour le moment il me sert à rien mais c'est par ce que je compte d'abord faire le programme avec 3 inconnus pour le faire à n inconnus plus tard.
Merci encore
Merci encore
Pierrrrro
Messages postés
7
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
24 mai 2008
14 mai 2008 à 18:13
14 mai 2008 à 18:13
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
damlegone32
Messages postés
74
Date d'inscription
lundi 11 septembre 2006
Statut
Membre
Dernière intervention
31 mai 2011
29
17 mai 2008 à 16:45
17 mai 2008 à 16:45
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.
Pierrrrro
Messages postés
7
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
24 mai 2008
24 mai 2008 à 19:34
24 mai 2008 à 19:34
Désolé de ne pas avoir répondu plus tôt (smaines d'exams...)
Mais merci beaucoup, c'est vrai qu'en posant les opérations à la mains ca va mieux, merci pour ton aide!!
Bon week end!
Mais merci beaucoup, c'est vrai qu'en posant les opérations à la mains ca va mieux, merci pour ton aide!!
Bon week end!
10 mai 2008 à 15:24
Je vais essayer de me débrouiller pour le reste..
Merci encore