begin process at 2012 05 27 16:05:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > EQUATION DU 2ND DEGRÉE DANS C

EQUATION DU 2ND DEGRÉE DANS C


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :maths, c, structure Niveau :Débutant Date de création :02/12/2005 Vu / téléchargé :7 638 / 265

Auteur : pcman5

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

 Description

Cliquez pour voir la capture en taille normale
Permet la résolution d'une équation du second degret du type:
Z1.x²+Z2.x+Z=0 avec Z1, Z2, Z3 et x des complexes.

Source

  • /* ---------------------------------------------- */
  • /* secgdeg.C: Resolution d'une equation du second */
  • /* degree */
  • /* ---------------------------------------------- */
  • /* En-tete */
  • #include<stdio.h>
  • #include<math.h>
  • /* Structure */
  • struct complexe
  • {
  • float za; /* Partie Reel */
  • float zb; /* Partie Imaginaire */
  • };
  • /* Variables globales */
  • struct complexe x1, x2; /* Racines du polynome */
  • const char carre = (char)253; /* caractere 'carre'*/
  • struct complexe A, B, C; /* Coefficient complexe */
  • /* Prototypes des fonctions: */
  • void ResEq2Deg(float Aa, float Ab, float Ba, float Bb, float Ca, float Cb); /* Résolution de l'équation */
  • int PrintComplexe(float a, float b); /* Affichage d'un nombre complexe */
  • /* Fonction PRINCIPAL */
  • int main(void)
  • {
  • char Quite;
  • printf("\t\t\t --- Debut du programme ---\n\n");
  • do
  • {
  • printf("\n--------------------------------------------------------------------------------");
  • /* Lecture des valeurs de l'equation */
  • printf("Ax%c+Bx+C=0\n\t",carre);
  • printf("A=");
  • scanf("%f",&A.za);
  • printf("\tA=%f+i",A.za);
  • scanf("%f",&A.zb);
  • printf("\tB=");
  • scanf("%f",&B.za);
  • printf("\tB=%f+i",B.za);
  • scanf("%f",&B.zb);
  • printf("\tC=");
  • scanf("%f",&C.za);
  • printf("\tC=%f+i",C.za);
  • scanf("%f",&C.zb);
  • ResEq2Deg(A.za, A.zb, B.za, B.zb, C.za, C.zb);
  • printf("\n\t\t\t------------------------------\n");
  • /* Verification que a != 0 */
  • if ( ( (A.za==(float)0) & (A.zb==(float)0) ) & ( (B.za!=(float)0) | (B.zb!=(float)0) ) )
  • {
  • /* pour A = 0 et B =! 0, on résout de la maniere suivante: (X = -C / B)*/
  • printf("\n( ");
  • PrintComplexe(B.za, B.zb);
  • printf(" )x + ( ");
  • PrintComplexe(C.za, C.zb);
  • printf(" ) = 0\n\n=> x = ");
  • PrintComplexe(x1.za, x1.zb);
  • }
  • else if ( (A.za!=(float)0) | (A.zb!=(float)0) )
  • {
  • /* Affichage du resultat */
  • /* Affichage de l'équation */
  • printf("\n(");
  • PrintComplexe(A.za,A.zb);
  • printf(")X%c + (",carre);
  • PrintComplexe(B.za,B.zb);
  • printf(")X + (");
  • PrintComplexe(C.za,C.zb);
  • printf(") = 0\n");
  • /* Résultat */
  • if (((x1.za!=x2.za) | (x1.zb!=x2.zb)) & ((x2.za!=(float)0) | (x2.zb!=(float)0)) & ((x1.za!=(float)0) | (x1.zb!=(float)0)))
  • {
  • printf("\n\n\t%c X = ", char(218));
  • PrintComplexe(x1.za,x1.zb);
  • printf("\n=>\t%c\t",char(179));
  • printf("ET\n\t%c X = ", char(192));
  • PrintComplexe(x2.za,x2.zb);
  • }
  • else if (((x1.za!=x2.za) & (x1.zb!=x2.zb)) & ((x2.za!=(float)0) | (x2.zb!=(float)0)) & (x1.za==(float)0) & (x1.zb==(float)0))
  • {
  • printf("\n\n=>\t\t X = ");
  • PrintComplexe(x2.za,x2.zb);
  • }
  • else
  • {
  • printf("\n\n=>\t\t X = ");
  • PrintComplexe(x1.za,x1.zb);
  • }
  • printf("\n");
  • }
  • else printf("Erreur A = B = 0!\n Resolution Impossible\n"); /* Si a et b sont nul, l'equation ne peut etre resolu */
  • printf("\n--------------------------------------------------------------------------------");
  • printf("\n\n Appuyez sur q pour quitter ou sur entree pour continuer ...\n\n:");
  • scanf("%c",&Quite);
  • scanf("%c",&Quite);
  • } while(Quite!='q');
  • printf("\n\n\n\t\t\t --- Fin du programme ---\n\n");
  • }
  • /* Fonction ResEq2Deg */
  • void ResEq2Deg(float a, float b, float c, float d, float e, float f)
  • {
  • /* Variable locale */
  • float denom, g, h, j, k, l, m, n, o, p;
  • if ( ( (a==(float)0) & (b==(float)0) ) & ( (c!=(float)0) | (d!=(float)0) ) )
  • {
  • /* pour A = 0 et B =! 0, on résout de la maniere suivante: (X = -C / B)*/
  • p = (c*c) + (d*d);
  • x1.za = -( (e * c) + (f * d) ) / p;
  • x1.zb = +( (e * d) + (c * f) ) / p;
  • }
  • else if ((a!=0) | (b!=0))
  • {
  • /* Calcul du discriminant */
  • g = c*c - d*d + 4*(b*f - a*e);
  • h = 2*c*d - 4*(a*f + b*e);
  • /* Calcul de la racine carré du discriminant */
  • j = sqrt( (g + sqrt(g*g + h*h) )/2);
  • k = sqrt((sqrt(g*g + h*h) - g)/2);
  • if (2*j*k > (float)0 & h<(float)0)
  • k=-k;
  • /* determination de x1 = (x1.za + i*x1.zb) et x2 = (x2.za + i*x2.zb) */
  • p = 2*(a*a + b*b);
  • l = -(a*(+j + c) + b*(k + d))/p;
  • m = +(b*(+j + c) - a*(k + d))/p;
  • n = +(a*(+j - c) + b*(k - d))/p;
  • o = +(b*(-j + c) + a*(k - d))/p;
  • x1.za = l;
  • x1.zb = m;
  • x2.za = n;
  • x2.zb = o;
  • }
  • }
  • int PrintComplexe(float a, float b)
  • {
  • if (a>0) printf("%f",a);
  • if (a<0) printf(" - %f",-a);
  • if ((b>0)&(b!=1)) printf(" + %fi",b);
  • if ((b<0)&(b!=-1)) printf(" - %fi",-b);
  • if ((b>0)&(b==1)) printf(" + i");
  • if ((b<0)&(b==-1)) printf(" - i");
  • if ((a==0)&(b==0)) printf("0");
  • }
/* ---------------------------------------------- */
/* secgdeg.C: Resolution d'une equation du second */
/*            degree                              */
/* ---------------------------------------------- */

/* En-tete */
#include<stdio.h>
#include<math.h>

/* Structure */
struct complexe
{
     float za; /* Partie Reel */
     float zb; /* Partie Imaginaire */
};

/* Variables globales */
struct complexe x1, x2; /* Racines du polynome */
const char carre = (char)253; /* caractere 'carre'*/
struct complexe A, B, C; /* Coefficient complexe */

/* Prototypes des fonctions: */
void ResEq2Deg(float Aa, float Ab, float Ba, float Bb, float Ca, float Cb); /* Résolution de l'équation */
int PrintComplexe(float a, float b);      /* Affichage d'un nombre complexe */

/* Fonction PRINCIPAL */
int main(void)
{
  char Quite;
  printf("\t\t\t --- Debut du programme ---\n\n");
  do
  {
  
      printf("\n--------------------------------------------------------------------------------");
      /* Lecture des valeurs de l'equation */
      printf("Ax%c+Bx+C=0\n\t",carre);

      printf("A=");
      scanf("%f",&A.za);
      printf("\tA=%f+i",A.za);
      scanf("%f",&A.zb);

      printf("\tB=");
      scanf("%f",&B.za);
      printf("\tB=%f+i",B.za);
      scanf("%f",&B.zb);

      printf("\tC=");
      scanf("%f",&C.za);
      printf("\tC=%f+i",C.za);
      scanf("%f",&C.zb);

      ResEq2Deg(A.za, A.zb, B.za, B.zb, C.za, C.zb);
      printf("\n\t\t\t------------------------------\n");
      
      /* Verification que a != 0 */
      if (  ( (A.za==(float)0) & (A.zb==(float)0) ) & ( (B.za!=(float)0) | (B.zb!=(float)0) )  )
      {
	   /* pour A = 0 et B =! 0, on résout de la maniere suivante: (X = -C / B)*/
           printf("\n( ");
           PrintComplexe(B.za, B.zb);
           printf(" )x + ( ");
           PrintComplexe(C.za, C.zb);
           printf(" ) = 0\n\n=> x = ");
           PrintComplexe(x1.za, x1.zb);
      }

      else if ( (A.za!=(float)0) | (A.zb!=(float)0) )
      {

      /* Affichage du resultat */
		/* Affichage de l'équation */
		printf("\n(");
		PrintComplexe(A.za,A.zb);
		printf(")X%c + (",carre);
		PrintComplexe(B.za,B.zb);
		printf(")X + (");
		PrintComplexe(C.za,C.zb);
		printf(") = 0\n");
		
		/* Résultat */
		
      if (((x1.za!=x2.za) | (x1.zb!=x2.zb)) & ((x2.za!=(float)0) | (x2.zb!=(float)0)) & ((x1.za!=(float)0) | (x1.zb!=(float)0)))
      {
             printf("\n\n\t%c X = ", char(218));
		     PrintComplexe(x1.za,x1.zb);
		     printf("\n=>\t%c\t",char(179));
             printf("ET\n\t%c X = ", char(192));		
		     PrintComplexe(x2.za,x2.zb);
        }
        else if (((x1.za!=x2.za) & (x1.zb!=x2.zb)) & ((x2.za!=(float)0) | (x2.zb!=(float)0)) & (x1.za==(float)0) & (x1.zb==(float)0))
        {
             printf("\n\n=>\t\t X = ");
		     PrintComplexe(x2.za,x2.zb);
        }
        else
        {
             printf("\n\n=>\t\t X = ");
		     PrintComplexe(x1.za,x1.zb);
        }             
        printf("\n");
    }
  
    else printf("Erreur A = B = 0!\n  Resolution Impossible\n"); /* Si a et b sont nul, l'equation ne peut etre resolu */
  
    printf("\n--------------------------------------------------------------------------------");
    printf("\n\n  Appuyez sur q pour quitter ou sur entree pour continuer ...\n\n:");
    scanf("%c",&Quite);
    scanf("%c",&Quite);
  
  } while(Quite!='q');
  printf("\n\n\n\t\t\t --- Fin du programme ---\n\n");
}
/* Fonction ResEq2Deg */
void ResEq2Deg(float a, float b, float c, float d, float e, float f)
{
  /* Variable locale */
  
  float denom, g, h, j, k, l, m, n, o, p;

  
  
  if (  ( (a==(float)0) & (b==(float)0) ) & ( (c!=(float)0) | (d!=(float)0) )  )
  { 
  	/* pour A = 0 et B =! 0, on résout de la maniere suivante: (X = -C / B)*/
    	p = (c*c) + (d*d);
	    x1.za = -( (e * c) + (f * d) ) / p;
	    x1.zb = +( (e * d) + (c * f) ) / p;
    
  }
  else if ((a!=0) | (b!=0))
  {
       /* Calcul du discriminant */
        g = c*c - d*d + 4*(b*f - a*e);
        h = 2*c*d - 4*(a*f + b*e);

        /* Calcul de la racine carré du discriminant */
        j = sqrt( (g + sqrt(g*g + h*h) )/2);
        k = sqrt((sqrt(g*g + h*h) - g)/2);
        if (2*j*k > (float)0 & h<(float)0)
                      k=-k;
        
        /* determination de x1 = (x1.za + i*x1.zb) et x2 = (x2.za + i*x2.zb) */
        p = 2*(a*a + b*b);
  
  
        l = -(a*(+j + c) + b*(k + d))/p;
        m = +(b*(+j + c) - a*(k + d))/p;
        n = +(a*(+j - c) + b*(k - d))/p;
        o = +(b*(-j + c) + a*(k - d))/p;
        x1.za = l;
        x1.zb = m;
        x2.za = n;
        x2.zb = o; 
       
  }
}


int PrintComplexe(float a, float b)
{
     if (a>0) printf("%f",a);
     if (a<0) printf(" - %f",-a);
     if ((b>0)&(b!=1)) printf(" + %fi",b);
     if ((b<0)&(b!=-1)) printf(" - %fi",-b);
     if ((b>0)&(b==1)) printf(" + i");
     if ((b<0)&(b==-1)) printf(" - i");
     if ((a==0)&(b==0)) printf("0");     
}

 Conclusion


j'espere que c'est compréhensible, dites mois ce que vous en penser...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

[DEV-C++] CALCUL DE LA RACINE CARRÉE D'UN RÉEL par Jhep
Source avec une capture MULTIPLICATIONS: PETIT EXERCICE DE MATHS par gmorris
Source avec Zip Source avec une capture RESOLUTION DE SYSTEME LINEAIRE PAR LA METHODE DU GRADIENT CO... par zangul
Source avec Zip JEU DES PETIT CHEVAUX par flamt
Source avec Zip CODE DE HUFFMAN par Ricky_MacElroy

Commentaires et avis

Commentaire de Urgo le 02/12/2005 20:04:57

Trop c'est trop, voilà ce que je pense en voyant ta source.

Les exercices persos c'est bien, mais blinder les serveurs CodeS-SourceS avec des sources inutiles (car clonés de nombreuses fois) c'est mal.

Commentaire de luhtor le 02/12/2005 20:35:09

Oui lol, une fois de plus, un programme de résolution du second degré.

Mais au moins, celui ci change un peu pour une fois. Il gère les complexes.

Commentaire de BruNews le 03/12/2005 00:08:57 administrateur CS

pcman5, faudra éviter à l'avenir ce qui est déjà en de nombreux exemplaires.
On conservera donc pour les complexes.

Commentaire de pcman5 le 06/12/2005 16:03:54

Oui, désolé j'avais pas trop fait attention...
A+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

je cherche quelqu'un fort en maths et qui est en 1ere ES !! [ par GEO ] je cherche quelqu'un qui aurais le livre orange declic maths de 1 ES merci d'avance structure [ par valoide ] sous visual c++, je voudrais que ma fonction renvoie un type structure afin de l'exploiter dans d'autres fonction???help dessiner des polygones a partir d'n fichier [ par NICKO ] Bonjour,Je cherche à dessiner des polygones (2 triangles pour commencer) dont les informations sont contenues dans un fichier.J'utilise les fonctions bleme avec les structures [ par djamine ] j'ai un bleme j'aimerais que tu m'aide avec les structuresTAF:en utilisant un tableau de structure Je dois ecrire un programme qui saisi les noms et l Structure tm [ par ranouf ] j'utilise visual c++au depart je mets #include &lt;iostream.h&gt;mon but arrivé a recuper le tps actuel dans une structure "temps"pouvoir afficher un tableau dynamique de structure en C ? [ par axl79 ] salutje voudrai faire un tableau dynamique de structures. voici ma structure: struct struct_arete { int sommet1; int sommet2; int quantite;} arete;com Taille de ma structure [ par crocejf2000 ] Salut a tous, J'ai un tres gros probleme qui me bloque toute mon avancé dans mon prog : j'ai une structure : typedef struct{ unsigned short Locate; ch [BCB C++ et MySQL] recuperer la structure des tables mysql [ par hhakim ] La meilleure contribution de chacun est celle d'aider les autresSalut a Tous,je travail avec Borland C++ builder, j'ai un petit probleme concernant la imprimer en ayant le mode paysage par défaut [ par keuf ] Bonjour,J'utilise une structure PrintDLg pour lancer une imprimer. Je voudrais modifier cette structure pour pouvoir avoir le mode paysage par défaut passer d'un widget a une autre structure [ par khaledtaib ] bonjourj' ai un petit programme de traitement d'image en language C, que je veux lui creer une interface graphique en GTK+.ce programme doit afficher


Nos sponsors


Sondage...

Comparez les prix

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,780 sec (4)

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