TweakPC

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

Antwort
 
LinkBack Themen-Optionen 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.252

redfalcon kann auf vieles stolz sein
redfalcon kann auf vieles stolz sein

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.252

redfalcon kann auf vieles stolz sein
redfalcon kann auf vieles stolz sein

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.252

redfalcon kann auf vieles stolz sein
redfalcon kann auf vieles stolz sein

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

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht 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 aus.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem bei einem request unter Javascript mokus Programmiersprachen 4 08.07.2008 21:41
Problem bei Installation von einem DVD-RW unter Win Me MaxZorin Windows & Programme 1 13.05.2007 11:57
Win XP x64 - ist das aktivieren ein Problem bei einem wiederverkauf? Jenlain Windows & Programme 2 03.11.2005 20:36
Problem mit einem komischen Virus Gast Security & SPAM 5 30.08.2004 23:03
Problem beim Aufbau eines Raid Array Gast Festplatten und Datenspeicher 2 09.08.2003 14:29


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 Uhr.






Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum, Datenschutz Copyright © 1999-2015 TweakPC, Alle Rechte vorbehalten, all rights reserved