Wie kann ich mit einem C# Programm die Nullstellen einer quadratischen Gleichung ausrechnen?
Ich hab es so versucht, jedoch treten ständig fehler auf (a soll a sein , b b und c c, d soll die diskriminante sein, e die LF bzw. Mitternachtsformel mit -b+... und f -b-...)
Ich hoffe ihr findet meinen Fehler. double nthRoot = Math.Pow(d) soll übrigens die Wurzel aus d sein, dies abe ich aus einem Bericht aus dem Internet, jedoch wird mir dies auch immer als Fehler angezeigt.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Quadratische_Gleichung_lösen_Jakob
{
public partial class Form1 : Form
{
double a, b, c;
double n = 2;
private void button1_Click(object sender, EventArgs e)
{
a = Convert.ToDouble(textBox1.Text);
b = Convert.ToDouble(textBox2.Text);
c = Convert.ToDouble(textBox3.Text);
d = (b * b) - (4 * a * c);
e = (-b + (double nthRoot = Math.Pow(d)/ (2 * a));
f = (-b - (double nthRoot = Math.Pow(d)/ (2 * a));
}
double d, e, f;
public Form1()
{
InitializeComponent();
label1.Text = "a=";
label2.Text = "b=";
label3.Text = "c=";
label4.Text = "x1=";
label6.Text = "x2=";
label5.Text = e.ToString();
label7.Text = f.ToString();
}
}
}
3 Antworten
Denk dran, dass Methoden nicht der Reihe nach abgearbeitet werden (so, wie sie zufällig im Programmcode stehen), sondern dann, wenn sie aufgerufen werden.
An welche Stelle gehören also die Zuweisungen
label5.Text = e.ToString();
label7.Text = f.ToString();
?
-----
Math.Pow(double, double) erwartet zwei Argumente. Ein Aufruf wie
Math.Pow(d)
dürfte also gar nicht erst kompiliert werden. Nimm
Math.Pow(d, 0.5)
oder gleich
Math.Sqrt(d)
(Sqrt = square root = Quadratwurzel)
-----
Noch ein paar inhaltliche/stilistische Anmerkungen:
label5 und label7 würde ich durch TextBoxes ersetzen (mit .ReadOnly = true) -- es handelt sich um veränderliche Einträge, die der Benutzer vielleicht rauskopieren möchte
Die Variable n wird nirgends verwendet. Soll vielleicht 1.0/n das 2. Argument von Math.Pow() sein?
Die Texte von label1 bis label6 kannst du auch gleich in die Eigenschaftenseite der Steuerelemente eintragen (üblicherweise rechts unten im Fenster von VisualStudio)
Die Variablen a, b, c, d, e, f werden wo gebraucht und wo nicht? Wenn man Variablen möglichst nur dort haben will, wo sie gebraucht werden, wo müssten sie dann deklariert werden?
Die Variable nthRoot ist (so, wie sie hier verwendet wird) überflüssig -- sie wird ja jedesmal neu gesetzt. Außerdem würde sie nicht das Ergebnis von Math.Pow() enthalten, sondern das Ergebnis der folgenden Division. Das ist aus Sicht der Operationensparsamkeit zwar sinnvoll, doch ist dann der Name irreführend.
danke , ich werde es Mal so versuchen, weil bei der Quadratwurzel würde es mir immer unterringelt , das lag daran, dass ich ein Leerzeichen, statt einen Punkt dazwischen hatte
..und..
je nachdem wie a,b,c gewählt wurde wird die Wurzel negativ und dies wird ebenfalls zu einem Fehler führen.
Hier musst du per Fallentscheidung diese Fälle prüfen, oder auch komplexe Lösungen ergänzend programmieren.
Was für Fehler? (Bezeichnung)
e und f geht so ganz bestimmt nicht
Das Programm startet und bricht sofort ab / wie kann ich e und f sonst erwähnen
ich bin es noch zu sehr von c++ von der arduino Software gewöhnt,dass alles der Reihe nach aufgerufen wird ...