TweakPC

Zurück   Computer Hardware Forum - TweakPC > Games und Software > Programmiersprachen

Antwort
 
LinkBack Themen-Optionen Thema bewerten Ansicht
Alt 20.12.2008, 19:52   #1 (permalink)
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
Alt 20.12.2008, 21:05   #2 (permalink)
Hardware Freak
 
Registriert seit: 28.03.2003
Beiträge: 8.248

redfalcon hat die Renommee-Anzeige deaktiviert

Standard AW: [C] Problem mit einem Array

Mit C würde ich nicht mit dem Visual Studio anfangen, ist für den Anfang Overkill. Ich würde lieber devcpp oder so nehmen.
Außerdem finde ich das mit dem struct etwas strange. Gehst du nach einem Tutorial oder so vor? Deine pq-Formel find ich auch etwas komisch: -((b/a)/2), hä?

Hab dein Programm mal etwas umgeschrieben und mMn vereinfacht:

846651334384428 - NoPaste - Paste it here
redfalcon ist offline   Mit Zitat antworten
Alt 21.12.2008, 09:54   #3 (permalink)
Abakus
 
Registriert seit: 16.08.2008
Beiträge: 22

mat1 befindet sich auf einem aufstrebenden Ast

Standard AW: [C] Problem mit einem Array

Hi,
danke schonmal für deine Antwort.
Ich habe mit devcpp angefangen, muss aber sagen, dass dieses Programm nicht wirklich hilfreich ist, denn Fehlermeldungen wie "[Error 1]" sagen mir nicht wirklich etwas und eine Hilfedatei gibt es nicht. Daher Visual Studio - damit komme ich bestens zurecht .

Ich habe kein Tutorial als Vorlage - ich mache das extra so, weil ich etwas lernen will.

Zu meiner Formel: Die allseits bekannte Lösungsformel für quadratische Gleichungen (x1/2 = -p/2 +- sqrt((p/2)^2-q) )funktioniert nur wenn die Funktion in Normalform (ax^2+bx+c -> a=1 => x^2+px+q) vorliegt. Um diese Normalform zu erreichen dividiere ich die einzelnen Koeffizienten durch a.

Du hast es dir natürlich einfach gemacht indem du die zweite Funktion "quad" entfernt und deren Anweisungen in die Main-Funktion gepackt hast .
Ich aber will genau eine zweite Funktion (einfach weil ich es so will ) - ich möchte es halt ausprobieren.
Du berechnest übrigens deine Diskriminante und deine Lösungen falsch (siehe Lösungsformel oben)

Vielen Dank schonmal .

Leider weis ich jetzt immer noch nicht wieso meine Werte für a, b und c immer "-9.2559604425286806e+061" sind.


Weis jemand Rat?
Danke schon im Voraus.

Gruß
mat1
mat1 ist offline   Mit Zitat antworten
Alt 21.12.2008, 10:18   #4 (permalink)
Hardware Freak
 
Registriert seit: 28.03.2003
Beiträge: 8.248

redfalcon hat die Renommee-Anzeige deaktiviert

Standard AW: [C] Problem mit einem Array

Zitat:
Zitat von mat1 Beitrag anzeigen
Leider weis ich jetzt immer noch nicht wieso meine Werte für a, b und c immer \\\\\\"-9.2559604425286806e+061\\\\\\" sind.
Weil du floats einscannen willst, die Werte aber double sind. Probier mal

PHP-Code:
scanf_s(\\\"%lf\\\", &a); 
(die Backslashs wegmachen)
redfalcon ist offline   Mit Zitat antworten
Alt 21.12.2008, 10:28   #5 (permalink)
Abakus
 
Registriert seit: 16.08.2008
Beiträge: 22

mat1 befindet sich auf einem aufstrebenden Ast

Standard AW: [C] Problem mit einem Array

Aber f ist doch das Formatzeichen für double und lf wäre ja long double, oder irre ich mich?!
Nichtsdestotrotz habe ich mal lf bei scanf eingetragen. Nun wird nicht mehr "-9.2559604425286806e+061" für a, b und c angegeben sondern:
a = 0
b = 1073741824
c = 0
lsg.wert[0] = -9.2559631349317831e+061
lsg.wert[1] = -9.2559631349317831e+061

hmm ^^
Ehrlich gesagt verstehe ich nicht, welches Problem der Compiler mit meiner scanf Anweisung hat!?


Gruß
Mat1
mat1 ist offline   Mit Zitat antworten
Alt 21.12.2008, 11:21   #6 (permalink)
Hardware Freak
 
Registriert seit: 28.03.2003
Beiträge: 8.248

redfalcon hat die Renommee-Anzeige deaktiviert

Standard AW: [C] Problem mit einem Array

Mich wundert es überhaupt, dass dein Code compiliert, VS08 schmeisst bei mir schonmal 8 Fehler. Das Problem ist wohl das return von lsg, da werden die Werte nicht mitübergeben. Ich verstehe auch nicht, warum du statt eines struct nicht einfach ein double Array verwendest. Folgender Code compiliert jedenfalls und gibt die richtige Lösung aus, aber wie man das lsg korrekt zurück an die main() übergibt, keine Ahnung.

86e9d4fafafe9ed - NoPaste - Paste it here

Außerdem ist dein Code kein Standard-C, weil da einige Visual Studio-only Sachen drin sind (stdafx.h, scanf_s usw), deswegen werden andere Compiler das auch nicht kompilieren.

Edit:
Das printf("%f",dis); in Zeile 74 war nur drin, um zu checken ob die Diskriminante richtig berechnet wird.

Geändert von redfalcon (21.12.2008 um 11:53 Uhr)
redfalcon ist offline   Mit Zitat antworten
Antwort

Stichworte
array, problem


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir erlaubt, neue Themen zu verfassen.
Es ist dir erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array an main() senden in C Daiquiri Programmiersprachen 12 25.01.2011 16:24
Struct array zurückgeben kilo_milo Programmiersprachen 1 27.11.2008 13:56
C++ Array übergeben --Chris-- Programmiersprachen 10 15.02.2005 15:14
Problem mit bootable RAID array DaKarl Festplatten und Datenspeicher 1 08.10.2004 22:14
Problem beim Aufbau eines Raid Array Gast Festplatten und Datenspeicher 2 09.08.2003 14:29


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr.




Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum - Hardware-Links - Partner
Copyright © 1999-2013 TweakPC, Alle Rechte vorbehalten, all rights reserved