Polynomes du 2eme degré, réponse sous forme de fraction !

Soyez le premier à donner votre avis sur cette source.

Vue 7 479 fois - Téléchargée 193 fois

Description

Au début, j'ai commencé par faire un script tout simple de calcul d'un polynome du second degré. Mais parfois la réponse était 1.3874927834, alors c est pas vraiment très pratique. Le but de mon code était de donner la réponse comme on devrait la donner en maths, c'est a dire, pas de 0.5, mais 1/2; pas de 0.654701 mais:
-3+4rac(3)
---------
6
Pour cela, j'ai procédé comme suit: je calcule la réponse et si elle n'est pas entière, il reprend la formule en ayant le numérateur et le dénominateur. Le hic c est la racine! J'ai donc du gérer toutes ces valeurs séparement (coefficients, dénominateur, mise en évidence,...) Et tester les simplifications. Donc si je tombe sur racine de 25, c est simple: je calcule mon numérateur, mon dénominateur et je teste si c est simplifiable, mais dans le cas ou ce serait racine de 24, je simplifie la racine, c est a dire que je teste si ce qu il y a sous la racine est divisible par un nombre premier au carré, si c est le cas, ce nombre vient multiplier le coefficient de la racine (qui vaut 1 a la base). Dans ce cas-là, racine de 24 deviendrait 2rac(8) car rac(8*4).

Pour appliquer toutes ces méthodes j'ai eu besoin de:
- une fonction "est un entier", qui vérifie si une valeur soumise est entiere (simple comparaison entre la valeur float ou double et elle-même convertie en int)
- un tableau contenant "tous" les nombres premiers, pour pouvoir faire les tests, car si la fraction n'est plus simplifiable par 2, elle ne le sera pas par 4, donc il ne teste qu avec les nombres premiers. Une fonction rempli ce tableau en fond de script.

Voilà, maintenant que je vous ai expliqué comment j ai procédé, je peux vous donner un petit plan de mon script:

1)Libraires, commentaires
2)main(), mon programme est dans une fonction prog(), pour pouvoir recommencer.
3)prog(), le programme a proprement parler, il demande a,b,c et fait tous les calcus, gestion des cas,...
4)fonction is_int(), est un entier
5)fonction calcul_nb_prem(), remplit le tableau nb_prem[] (exécutée en début de main()

Source / Exemple :


--------- ZIP ---------

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

lordof00
Messages postés
1
Date d'inscription
mercredi 2 mars 2011
Statut
Membre
Dernière intervention
5 mars 2011
-
merci
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
faut voir la valeur de l'exposant pour ca, faut "passer" dans un unsigned int (pas caster, passer...)

#include <stdio.h>
#include <stdlib.h>
int afficher(unsigned int a){
int i;
for (i=0;i<32;i++){
printf("%d", a>>31);
a=a<<1;
}
}
int main(){
float f;
unsigned int *flotant;
flotant=&f;
f=-118.625;
afficher(*flotant);
printf("\n");
return 0;
}

ceci te permet d'afficher chaque bit d'un float en memoire par exemple
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13 -
ici pour débuter:
http://fr.wikipedia.org/wiki/IEEE_754

L'analyse complète des floattants est dans les manuels Intel:
http://brunews.com/brunews/download/Intel.rar
zut69
Messages postés
356
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
26 juin 2012
-
ah ok... je vois. En effet, pour mon code ca suffit largement, mais pour etre propre, tu proposes quoi?
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13 -
C'est évident.
Si x == 8654987321.0
que peut valoir: (int) x ???

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (zut69)