Einen wunderschönen guten Abend TweakPC-Gemeinde,
ich bin gerade dabei C zu lernen. Dazu habe ich mir zu Beginn die Aufgabe gestellt, ein Programm zu schreiben, welches (kommandozeilenbeschränkt) die Lösung einer quadratischen Gleichung errechnen kann.
Hier der Code:
Code:
// Titel: Quad
// Beschreibung: Programm zum Loesen von quadratischen Gleichungen (im Breich der reelen Zahlen)
// Autor: ***
// Einbinden der benoetigten Bibliotheken
#include "stdafx.h"
#include "math.h"
// Prototypen
struct array { double wert[2]; };
struct array quad(double, double, double);
/*
/ Funktionsname: main
/
/ Autor: ***
/ Datum: 20. Dezember 08
/
*/
int main()
{
double a, b, c; // Koeffizienten der quad Gleichung
int i;
struct array lsg;
// Willkommen
printf("Willkommen bei quad. \n");
printf("Mit diesem Programm koennen Sie unkompliziert quadratische Gleichungen loesen. \n");
//Eingabe quad Gleichung
printf("Bitte geben Sie die quadratische Gleichung in der Form ax^2+bx+c ein. \n");
printf("a: ");
scanf_s("%f", &a);
printf("b: ");
scanf_s("%f", &b);
printf("c: ");
scanf_s("%f", &c);
system("PAUSE");
// Aufruf Fkt. quad()
lsg = quad(a, b, c);
printf("Die Loesung lautet: \n");
// Ausgabe der einzelnen Werte des Arrays 'Lsg' aus der Fkt. quad()
for(i=1; i <= sizeof(lsg); i++)
{
printf("\t x%i = \t %d \n",i,lsg.wert[i]);
}
system("PAUSE");
}
/*
/ Funktionsname: quad
/
/ erwartete Parameter:
/ a, b, c double
/ Beschreibung:
/ Funktion zur Berechnung der Loesungen einer quadratischen Gleichung im Bereich der reelen Zahlen
/
/ Autor: ***
/ Datum: 20. Dezember 08
/
*/
struct array quad(a, b, c)
{
double dis; // Diskrimminante
struct array lsg; // Lsg-Array
dis = pow((b/a)/2,2) - (c/a);
if(dis > 0)
{
lsg.wert[0] = (-(b/a)/2) + sqrt(dis);
lsg.wert[1] = (-(b/a)/2) - sqrt(dis);
return lsg;
} else {
printf("Die Loesung der quadratischen Gleichung liegt nicht im Bereich der reelen Zahlen vor. \n");
system("PAUSE");
}
}
Ich arbeite mit dem Visual Studio 08. Kompiliert man den Code besteht zunächst kein Problem.
Versucht man aber beispielweise die Lösung des Polynoms 2x^2+5x+3 zu errechnen (dessen Lösung x1= -1 und x2=-1,5 wäre), kommt man aus den Fehlern nicht mehr hinaus
Nach der Eingabe der Koeffizienten (2, 5, 3) und deren Bestätigung erscheint folgende Meldung:
Zitat:
Unbehandelte Ausnahme bei 0x002639a0 in quad.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
|
Visual Studio zeigt außerdem in seinem Debuggin Fenster folgende Werte für a, b und c an: -9.2559604377396321e+061
Und das obwohl man 2, 5 und 3 eingegeben hat...
lsg.wert[0] = -9.2559631349317831e+061
lsg.wert[1] = -9.2559631349317831e+061
Also eigentlich alles falsch?!
Wo liegt mein Fehler? Ich spiele hier schon die ganze Zeit herum, komme aber zu keinem logischem Ergebnis.
Vielen Dank schon im Voraus.
Gruß mat1