Problem mit einem Programm [ Bräuchte bitte Hilfe ]

hakkejimmy25

Grünschnabel
Hallo alle zusammen, habe mal mit Visual C++ 9.0 ein Programm geschrieben um die Nullstellen zu berechnen.
Hier erstmal die Quelltext:

// Nullenstellen.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#pragma warning(disable:4996)
#include "stdafx.h"
#include <math.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{

int a,b,c; /* Parameter in a*x^2+b*x+c */
double dis; /* Diskriminante */
/* Initialisierung: Einlesen der Parameter */
printf("Nullstellen von f(x)=a*x^2+b*x+c\n");
printf("a="); scanf("%f",&a);
printf("die Zahl ist %.2f\n"); (hier ließt er auch irgendwie keine Werte aus die ich mit der Tastatur eingebe)
printf("b="); scanf("%f",&b);
printf("die Zahl ist %.2f\n");
printf("c="); scanf("%f",&c);
printf("die Zahl ist %.2f\n");

(ab hier macht er irgendwie nicht mehr weiter )

/* Berechnung der Diskriminante */
dis=b*b-4.0*a*c;

/* Berechnung der Nullstellen */
if (dis == 0.0) /* doppelte Nullstelle */
printf("Doppelte Nullstellen bei %.2f\n",-b/(2.0*a));
else if (dis > 0.0) { /* zwei reelle Nullstellen */
printf("1.Nullstelle bei %.2f\n",(sqrt(dis)-b)/(2.0*a));
printf("2.Nullstelle bei %.2f\n",(-sqrt(dis)-b)/(2.0*a));
}
else
/* keine reelle Nullstelle */
printf("keine reellen Nullstellen\n");


}




Also ich habe schon einiges an Zeit reingesteckt jedoch komme ich nicht dahinter das Problem zu lösen....
Sehe das Problem....Er soll ja Werte einlesen die ich mit der Tastatur eingebe und diese dann später ausgebe...irgendwie mit dem einlesen wird ein Problem sein...
Bitte um Eure Hilfe...

 
Hi,

zur Ausgabe mit printf() kann man sagen, wenn du nur einen String ausgeben möchtest reicht ein Parameter,m öchtest du hingegen Variablen ausgeben musst du sie auch in der Funktion mitangeben. Wenn du a,b,c als integer deklarierst musst du sie auch als solche einlesen.
C++:
printf("a="); scanf("%i",&a);  // %i oder %d entsprechen einem Integer
printf("die Zahl ist %i\n",a);  // zweiter Parameter entspricht der Variablen die für %xx eingesetzt wird.
C++:
/* Berechnung der Nullstellen */
if (dis == 0.0) // kritischer Bereich
Einen double Wert mit 0 zu vergleichen führt meist nicht zum gewünschtem Verhalten, da durch die interne Rechnerstruktur und deren Funktionsweise(begrenzte Anzahl Nachkommastellen) keine 100%ige Genauigkeit erzeilt werden kann.

Man definiert sich ein Epsilonwert und vergleicht mit diesem z.B.
C++:
#define EPSILON 0.000001
// Check whether the value is zero
const bool isZero(const float aVal)
{
    if (std::fabs(aVal) > EPSILON)
      return false;
    else
      return true;
}

Ansonsten bitte Code-Tags benutzen und nächstes mal versuchen genaueres Fehlverhalten beschreiben.

mfg ;-)
 
Erstmal danke für deine schnelle Antwort...
habe jetzt auch verstanden was sehr wahrscheinlich mein Problem ist, nur wie könnte ich das mit dem " Epsilon " in meinen Code einbauen....
Bin noch C Anfänger und daher noch nicht so viel Erfahrung damit...
 
Hallo, sieh mal:
Code:
/* Berechnung der Nullstellen */
double EPSILION = 1.0E-5;
if (fabs(dis) <= EPSILON)		/* doppelte Nullstelle */
   printf("Doppelte Nullstellen bei %.2f\n",-b/(2.0*a));
else if (dis > EPSILON) {	/* zwei reelle Nullstellen */
   printf("1.Nullstelle bei %.2f\n",(sqrt(dis)-b)/(2.0*a));
   printf("2.Nullstelle bei %.2f\n",(-sqrt(dis)-b)/(2.0*a));
} else {
   /* keine reelle Nullstelle */
   printf("keine reellen Nullstellen\n");
}

Hast du mal überlegt, was dein Programm macht, wenn a gleich 0 ist?
Probiers mal aus.

Noch etwas: Falls double-Zahlen im Spiel sind, verwende bei printf bitte %.2lf statt %.2f.
f ist nur zulässig bei reinen float-zahlen. Du aber benutzt beides.
 
Zuletzt bearbeitet:
Hallo deepthroat,
du hast Recht! Bei printf gibt es %lf nicht, nur bei scanf.
Also die letzten beiden Zeilen meines Beitrags einfach ignorieren! :rolleyes:
 
Zurück