Einzelnen Beitrag anzeigen
Alt 20.12.2008, 19:52   #1 (permalink)
mat1
Abakus
 

Registriert seit: 16.08.2008
Beiträge: 22

mat1 befindet sich auf einem aufstrebenden Ast

Frage [C] Problem mit einem Array

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
mat1 ist offline   Mit Zitat antworten