CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Petit problème code language C

Dam979
Dam979
Niveau 7
07 octobre 2012 à 12:53:19

Bonjours à tous,

je dois faire un programme calculant delta pour demain.

En le faisant, je me suis dit que, tant qu'à faire, je ferait bien un programme qui en même temps calcule les racines.

Cependant, quelque chose de bizarre se passe, pour les racine négative pas de problème mais quand delta est > ou = 0, il ne m'affiche pas les racines.

Voici mon programme en question :

  1. include<stdio.h>
  2. include<stdlib.h>
  3. include<math.h>

float calcul_delta (float a, float b, float c);
float calcul_racine_positive (float a, float b, float c, float delta);
float calcul_racine_negative (float a, float b, float c, float delta);

int main ()
{
float a = 0;
float b = 0;
float c = 0;
float delta = 0;
float x1 = 0;
float x2 = 0;

printf("veuillez rentrer a/b/c\n");
scanf("%f/%f/%f%*c", &a, &b, &c);

delta = calcul_delta(a,b,c);

printf("\ndelta vaut %0.2f%*c", delta);

if(delta < 0)
{
printf("\npas de racine reelle");
}
else if(delta = 0)
{
x1 = calcul_racine_positive(a,b,c,delta);
printf("\nla racine de votre equation est x1 = %0.2f%*c", x1);
}
else if(delta > 0)
{
x1 = calcul_racine_positive(a,b,c,delta);
x2 = calcul_racine_negative(a,b,c,delta);
printf("\nles racines de votre equation sont x1 = %0.2f%*c et x2 = %0.2f%*c", x1,x2);
}

getc(stdin);
return 0;
}

float calcul_delta (float a, float b, float c)
{
return(b*b)-(4*a*c);
}

float calcul_racine_positive (float a, float b, float c, float delta)
{
return(-b + sqrt(delta))/(2*a);
}

float calcul_racine_negative (float a, float b, float c, float delta)
{
return(-b - sqrt(delta))/(2*a);
}

Si vous avez des amélioration ou conseils (ou même n'importe quoi d'autre à dire), allez y.

Merci de vos réponses.

Pseudo supprimé
Pseudo supprimé 07 octobre 2012 à 13:04:45

http://pastebin.com/
Essaye de mettre ton code là-dessus !

Dam979
Dam979
Niveau 7
07 octobre 2012 à 13:07:23

C'est quoi comme genre de site ?

Pseudo supprimé
Pseudo supprimé 07 octobre 2012 à 13:08:12

Ca nous permettra de comprendre plus facilement ton code.

Dam979
Dam979
Niveau 7
07 octobre 2012 à 13:14:40

est-ce que j'ai tout fait correctement ? http://pastebin.com/HEYHK9ik

Tikim
Tikim
Niveau 21
07 octobre 2012 à 14:06:15

Quand tu écris : "\nla racine de votre equation est x1 = %0.2f%*c"

C'est quoi exactement " %0.2f%*c " ?

Ca ressemble à rien que je connaisse. Tu veux afficher un float, pourquoi ne pas mettre directement %f ? Et le %*c ne signifie-t-il pas que tu dois après mettre un char en plus de x1 ?

Je comprends pas trop ce que tu as fais. Tu essaies de jouer avec les divers modificateurs de printf? Essaie déjà avec un simple %f et redis-nous si ça marche pas.

Tikim
Tikim
Niveau 21
07 octobre 2012 à 14:11:26

Pareil dans le scanf d'ailleurs, pourquoi il y a %*c à la fin ?

Dam979
Dam979
Niveau 7
07 octobre 2012 à 14:13:52

Il me semble qu'on nous avait expliqué (enfin commencé à expliquer) que le "%*f" c’était pour une histoire de cache. Pour le "%0.2f" c'est juste pour qu'il m'affiche 2 chiffres après la virgule.
Malheureusement, j'ai été malade cette semaine mais je dois quand même rendre ce travail. Peut être l'on-t'il expliqué aux cours que j'ai raté (je n'ai pas vraiment eu l'occasion de me mettre en ordre).

Quand j’enlève les "%*c" le programme se ferme de suite sans que j'ai eu le temps de lire ce qui est affiché.

Tikim
Tikim
Niveau 21
07 octobre 2012 à 14:32:31

Dans le if c'est "else if(delta == 0) {}
Tu as pas mis de double =

je regarde le reste.

Tikim
Tikim
Niveau 21
07 octobre 2012 à 14:37:30

Alors le problème vient clairement du scanf, parce que si tu mets ensuite des valeurs à a, b et c ça fonctionne.

En gros là ton scanf ne prend que la première variable ( tu le verras si tu affiches a b et c direct après le scanf).

Donc au lieu de te compliquer la vie, pose 3 fois la question et fais 3 scanf :o))

Dam979
Dam979
Niveau 7
07 octobre 2012 à 14:46:57

C'est quand même bizarre que si c'est mon scanf le problème, il me trouve quand même une valeur pour delta.
Enfin je vais essayer.
Par contre, depuis que j'ai mis "delta == 0", quand je fait enter après avoir rentré mes valeurs, rien ne s'affiche, au contraire même, ce qui était écrit précédemment s’efface et je me retrouve avec ma fenêtre toute noire.

Tikim
Tikim
Niveau 21
07 octobre 2012 à 14:58:00

Ton scanf donne la première valeur à a. Les variables b et c prennent la valeur 0. Tu as donc toujours delta = 0 - 0 = 0.

Je connaissais pas cette méthode du scanf, mais à mon avis c'est pas une bonne idée de vouloir prendre 3 nombres dans un seul scanf, parce qu'il saura pas forcément différencier les 3.

ensuite le %*c a peut-être du sens dans le scanf, mais je pense ne pas me tromper en disant que ça n'a absolument aucun sens dans le printf, certains confirmeront peut-être. : http://www.cplusplus.com/reference/clibrary/cstdio/printf/

En l'enlevant de chaque printf, perso le programme tourne bien, sauf que delta est toujours = à 0, et la solution est toujours x1 = 0. Parce que b et c = 0.

En mettant 3 scanf à la suite ça marche bien mieux.

Au passage, je crois que la fonction scanf n'est pas du tout appréciée.

Dam979
Dam979
Niveau 7
07 octobre 2012 à 15:03:30

En effet, le "%*c" ne sert à rien. C'est d’ailleurs ça qui faisait tout rater.
J'ai essayé en les supprimant et tout fonctionne nickel.

Merci du coup de main.

Tikim
Tikim
Niveau 21
07 octobre 2012 à 15:07:28

Mais tu mets quand même tout dans un scanf ? Parce que là j'essaie avec "scanf("%f/%f/%f", &a, &b, &c);

Et ça marche pas, b et c = 0 toujours.

En tout cas tant mieux si j'ai pu t'aider, au passage j'apprends une autre utilisation de scanf et printf, même si pas forcément utile ici :o))

Dam979
Dam979
Niveau 7
07 octobre 2012 à 15:22:03

j'ai mis des "%d" (car ça m'étonnerai qu'on mette des valeur a virgules). Par contre j'ai gardé ce "format" là.
Si c’était un travail que je faisais pour m’entraîner, j'aurai fait comme tu m'avais dit, mais c'est un travail à rendre et les labos que j'ai raté expliquaient comment entrer des dates dans ce format.
Je me dit que ça peut montrer à mon prof que j'ai compris le système (même si c'est un peu bizarre de faire comme ça ^^).

Tikim
Tikim
Niveau 21
07 octobre 2012 à 15:24:57

Mais tu as changé le reste du code ? Parce que même avec des %d j'ai 0 0 et 0.

Tu pourrais mettre ton code fonctionnel sur pastebin ? Je sens que quelque chose m'échappe :o))

Dam979
Dam979
Niveau 7
07 octobre 2012 à 15:28:55

voilà le code http://pastebin.com/fDvV7sPV
Pour info, j'ai changé le début et mis tout dans un fichier en tête mais ou sinon c'est pareil qu'avant.
Autre chose (je ne sais pas si c'est important), j'utilise visual studio 2010.

Tikim
Tikim
Niveau 21
07 octobre 2012 à 15:35:52

C'est marrant parce que j'ai c/c le code chez moi en ajoutant l'entête et j'obtiens toujours 0 pour les 3 variables.

Au passage, tes fonctions voient a, b et c comme des float. C'est pas très dérangeant, mais puisque c'est des int, pourquoi ne pas les mettre en int dans le prototype ?

Tikim
Tikim
Niveau 21
07 octobre 2012 à 15:39:35

Ah mais je te dis un peu des bêtises, j'avais pas capté le séparateur. En fait tu écris par exemple 1/2/-8

Moi j'écrivais 1 2 -8

Avec l'espace comme séparateur.

Bon ben j'ai appris comment faire alors :o))

Par contre, ça tu peux l'écrire en commentaire dans le code et/ou dans le printf, parce que l'utilisateur sait pas forcément sous quelle forme il doit donner les valeurs.

Dam979
Dam979
Niveau 7
07 octobre 2012 à 15:39:59

A ben c'est vrai j'ai pas pensé à les changer là.

Chez moi les variables ont les valeur que j'entre (j'ai vérifié en mettant un point d'arrêt a plusieurs endroits pour voir mes variables.
Je ferai bien un print screen mais je ne sais pas trop comment les mettre sur le forum ^^.

(peut être que tu ne mets pas "x/x/x" mais "x x x" (parce qu'en faisant ça, j'ai 0 aussi))

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment