Zum Inhalt springen

[C] Möglicher Fehler bei der Umsetzung der Mitternachts-Formel???


Empfohlene Beiträge

Geschrieben

Hallo! Wie der Titel schon wissen lässt, hab ich offensichtlich ein Fehler bei der Umsetzung der Formel in C.

Und zwar, wenn ich die Glieder a, b, c (1, -2, 1) in meinem Programm eintippe kommen die Werte 2 und 2 Raus? Dabei musste -1 und -1 Rauskommen:

x² - 2x + 1 = 0 | -1

x² - 2x = -1 | quadrat. Ergänzung

(x + 1)² = 0 | Wurzel

x = -1

Hier der Quelltext (siehe rotmarkierte Stelle):


#include <stdio.h>

#include <math.h>


int main(void)

{

float a, b, c, out[1], D;

int i = 1;


do

{


printf("x%d: ", i++);

scanf("%f %f %f", &a, &b, &c);

printf("\n");


[COLOR="Red"]D = pow(b,2)-4*a*c;


out[0] = -b-sqrt(D)/2*a;

out[1] = -b+sqrt(D)/2*a;

[/COLOR]

printf("%f\n%f\n\n", out[0], out[1]);


}

while(getchar() != 'c');


return 0;

}

Geschrieben (bearbeitet)

x² - 2x + 1 = 0 | -1

x² - 2x = -1 | quadrat. Ergänzung

(x + 1)² = 0 | Wurzel

x = -1

Fehler endeckt und korigiert!

x² - 2x + 1 = 0 | -1

x² - 2x = -1 | quadrat. Ergänzung

(x - 1)² = 0 | Wurzel

x = +1

Man oh man ich bin sowas von Unkonzentriert!

So nun zum Fehler im Programm:

@Klotzkopp

Egal wie viel klammern ich einbau ich bekomme das ergebnis 2 und 2 statt 1 und 1, Warum?

out[0] = ((--(sqrt(D))/(2*a));

out[1] = ((-+(sqrt(D))/(2*a));[/code]




Übrigens hier auch:



[code]D = ((pow(b,2))-(4*a*c));

Bearbeitet von squidward
Geschrieben
Egal wie viel klammern ich einbau ich bekomme das ergebnis 2 und 2 statt 1 und 1, Warum?

Ein Bruchstrich bedeutet implizit eine Klammer um Zähler und Nenner. Den Nenner hast du zwar geklammert, den Zähler aber nicht (dafür aber den Gesamtausdruck).

Ach ja, es wäre auch schön, wenn du dem Array out auch ein zweites Element gönnst, wenn du schon drauf zugreifst.

Geschrieben (bearbeitet)
Ein Bruchstrich bedeutet implizit eine Klammer um Zähler und Nenner. Den Nenner hast du zwar geklammert, den Zähler aber nicht (dafür aber den Gesamtausdruck).

Juhuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu, es klappt!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Danke!

Ach ja, es wäre auch schön, wenn du dem Array out auch ein zweites Element gönnst, wenn du schon drauf zugreifst.

Wie meinst du das? Welches Element?

Achso meinst du z.B. bei int i? Aber darf ich überhaupt da das out benutzen das ja bei double liegt?

Bearbeitet von squidward
Geschrieben

Moin.

Wie meinst du das? Welches Element?

Diese hier?


[...]

float a, b, c, out[[COLOR="Red"][B]1[/B][/COLOR]], D;

[...]

out[[B][COLOR="#ff0000"]0[/COLOR][/B]] = -b-sqrt(D)/2*a;

out[[B][COLOR="#ff0000"]1[/COLOR][/B]] = -b+sqrt(D)/2*a;

[...]

Geschrieben

Hi,

Aber das macht das ganze ja noch unübersichtlicher welchen vorteil bringt mir denn das?


#include <stdio.h>

#include <math.h>


int main(void)

{

float out[5];

int i = 1;


do

{


printf("x%d: ", i++);

scanf("%f %f %f", &out[0], &out[1], &out[2]);

printf("\n");


out[3] = pow(out[1],2)-4*out[0]*out[2];


out[4] = (-b-sqrt(D))/2*out[0];

out[5] = (-b+sqrt(D))/2*out[0];


printf("%f\n%f\n\n", out[4], out[5]);


}

while(getchar() != 'c');


return 0;

}

Aber na ja hauptsache es funktioniert jetzt!

Vielen Dank!

Geschrieben

Das meinte ich nicht.

Wenn du auf out[0] und out[1] zugreifst, musst du out auch als Array mit 2 Elementen deklarieren. Du hast es (in der ursprünglichen Version) als Array mit einem einzigen Element deklariert.

Und auch in deiner neuen Version ist out um 1 zu klein.

Geschrieben

He's dead, Jim! :beagolisc

Aber na ja hauptsache es funktioniert jetzt!

Wenn es denn auch würde...


[...]

float out[[B][COLOR="Red"]5[/COLOR][/B]];

[...]

out[4] = (-b-sqrt(D))/2*out[0];

out[[B][COLOR="#ff0000"]5[/COLOR][/B]] = (-b+sqrt(D))/2*out[0];

Geschrieben
Das meinte ich nicht.

Wenn du auf out[0] und out[1] zugreifst, musst du out auch als Array mit 2 Elementen deklarieren. Du hast es (in der ursprünglichen Version) als Array mit einem einzigen Element deklariert.

Und auch in deiner neuen Version ist out um 1 zu klein.

Fängt das Zählen bei C nicht bei 0 an?

Geschrieben
Tut es, also hat ein out[5] die Elemente out[0],out[1],out[2],out[3] und out[4]! ;)

Oh hähä, nein nicht schon wieder *blamiert*! :upps

*schäm*

Vielen Dank für eure beanspruchte gedult... :rolleyes:

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...