float "leer"?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Knyk

Betreff: float "leer"?

BeitragMo, Sep 10, 2012 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,
Ich möchte ein Programm schreiben, in das man Werte eingibt und die fehlenden Werte automatisch errechnet werden.
Das Rechnen ist kein Problem, aber die Eingabe:
Wenn ich nämlich bei der Eingabe z.B. x# leer lasse. ist x nicht leer, sondern "0.0".
Dadurch kann das Programm ja aber nicht ersehen was fehlt und rechnet nicht. (Denn 0 ist ja auch ein möglicher Wert)
Gibt es da ne Lösung?

DAK

BeitragMo, Sep 10, 2012 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
lass dir den input-Wert nicht direkt in eine int casten, sondern speicher ihn zuerst in eine string (z.B. xstring$). Dann überprüfe ob xstring$="0", und wenns das nicht ist, aber x# schon, dann weißt du, es gab einen Fehler.

BlitzBasic: [AUSKLAPPEN]

xString$ = Input("Test: ")
x# = Float(xString$)
If xString$<>"0" And x#=0 Then Print("Falsche Eingabe!")
Gewinner der 6. und der 68. BlitzCodeCompo

Knyk

BeitragMo, Sep 10, 2012 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke,
Das Problem ist so erst mal gelöst.

Jetzt habe ich ein neues:
Ich mache das ganze für ein Programm für den Physikunterricht und muss nun vom Programm eine Gleichung lösen lassen.
z.B: 7=2+2x
Ich habe keine Ahnung, ich die Lösung als Programmablauf ausdrücken soll.

Habe mir dazu schon das hier (bmax): https://www.blitzforum.de/foru...hp?t=31646
und ein wenig übers Gaußsche Eliminationsverfahren gelesen, aber ich versteh das Prinzip irgendwie nicht...
auf die Gefahr hin, mich zu blamieren:
kann jemand das vielleicht mal ganz von vorn erklären?^^
Danke

DAK

BeitragDi, Sep 11, 2012 9:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Machs wie du's manuell machen würdest: Strichrechnungen zuerst wegmachen, dann die Punktrechnungen auflösen. Alles weitere ist dein Job. Schließlich willst du's ja programmieren (wenn du mir nen 10er zahlen willst, dann schreib ich's für dich).
Gewinner der 6. und der 68. BlitzCodeCompo

Chester

BeitragMi, Sep 12, 2012 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Knyk hat Folgendes geschrieben:
z.B: 7=2+2x


Das is alles eine Frage von den möglichen Rechenoperatoren und den Anzahl der Variablen. Bei einer sollte es nicht soo schwer sein. Ich hab zwar keine Ahnung, wie man es in der Informatik tatsächlich umsetzen würde, aber ich würde so vorgehen, dass ich die Gleichung erstmal als Polynom beschreibe, also in deinem Beispiel:

Zitat:
7x^0 = 2x^0 + 2x^1
Dann könnte man die Gleichung durchgehen und alle Terme mit gleichem Exponenten suchen und davon die Summe bilden (eine Summe wird dabei immer durch einen Koeffizienten, einer Variablen und einen Exponenten beschrieben). Hier muss dann natürlich der Term, abhängig davon, ob er links oder rechts vom Gleichheitszeichen steht, mit dem richtigen Vorzeichen versehen werden.

In deinem Beispiel ergibt sich unter der Voraussetzung, dass die Terme, die rechts stehen, mit einem Minus versehen werden:

Zitat:
Summe1 => ( 7 - 2 ) * x^0 = 5 * x^0
Summe2 => (-2) * x^1 = -2 * x^1
Dann muss man natürlich wissen, nach was man auflösen will. Hier im einfachsten Fall steht natürlich nur x^1 zur Verfügung. Damit der Koeffizient bei der zu auflösenden Variablen verschwindet, teilt man einfach die Koeffizienten aller Summen durch den Koeffizient eben dieser Variable:

Zitat:
Summe1 => (5 / (-2) ) x^0 = -2.5 * x^0
Summe2 => ( (-2) / (-2) ) x^1 = 1 * x^1
Aus diesen Summen kann man die neue Gleichung

Zitat:
Summe1 + Summe2 = 0
betrachten, bei der sich als gesuchte Lösung die Restsumme (also Gesamtsumme aller "Summen" ohne der gesuchten Summe) mit gewechseltem Vorzeichen, ergibt:

Zitat:
Gesamtsumme = Summe1 * (-1) = 2.5 * x^0
Summe2 => Gesamtsumme
Und schon hat man die Lösung:

Zitat:
1* x^1 = 2.5 * x^0
Die Schreibweise als x = 2.5 ist dann reine Ökonomie der Ausgabe. Wink

Diese Methode ist, wie schon gesagt, die Vorgehensweise dir mir spontan eingefallen ist. Da gibt es sicher korrektere, optimiertere Algorithmen. Und das funktioniert auch nur für Polynome 1. Grades. Bei Polynomen 2. Grades gibt es andere Sachen, die berücksichtigt werden müssen.

Aber rein für das Verständnis, wie man solche Probleme angehen kann, sollte das doch ganz anschaulich sein. Smile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group