Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Textaufgaben
Darth Sitthiander - Di 07.03.06 22:32
Titel: Textaufgaben
Hallo ich bins wieder.
Ich habe mal wieder eine Frage, und zwar. Ich habe mal kurz ein Programm geschrieben, nit welchem man textaufgaben lösen sollte. Auf jeden Fall manche. Also es gint einen X-Namen z. B. 7 (Kühe), dann einen X-Wert z. B. 50(Also 50 Lier Milch pro Tag). Dann noch Einen Y-Namen z. B. 8 (Kühe) und einen Y-Wert = ?. Daraus folgt. 7 Kühe liefern 50 Liter Milch.(pro Tag) und 8 Kühe liefern ? Liter Milch pro Tag. Jetzt möchte man das ? herausfinden. Also rechnet man 50 : 7 x 8 =57.14... Liter Milch pro Tag.
Das hab ich programmiert. Aber da gibt es noch einige Probleme. Wär nett, wenn sich einer das Programm mal ansehen würde. Danke im Vorraus.
Tino - Di 07.03.06 22:38
Titel: Re: Textaufgaben
Und welche Probleme gibt es? :gruebel:
Darth Sitthiander - Di 07.03.06 22:40
Ja manchmal kommt bei einem Wert einfach eine Null oder ein Falsches ergebnis.
Marc. - Di 07.03.06 22:45
zeig doch mal ein wenig mehr sourcecode ;)
außerdem frage ich mich warum du kein fließkommawerte verwendest, dann kämen vermutlich auch anstelle von 56litern, deine 57,14 raus :roll:
Darth Sitthiander - Di 07.03.06 22:48
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80:
| unit ha;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Label2: TLabel; Label3: TLabel; Edit3: TEdit; Edit4: TEdit; Label1: TLabel; Label4: TLabel; ComboBox1: TComboBox; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var Zahl1, Zahl2, Zahl3, ergebnis: integer; begin if Combobox1.text = 'X-Name' then begin edit1.text := ''; Zahl1 := strtoint(Edit3.text); Zahl2 := strtoint(Edit2.text); Zahl3 := strtoint(Edit4.text); ergebnis:= (Zahl1 * zahl2); Zahl1 := (ergebnis div Zahl3); edit1.text := (IntToStr(Zahl1)); end; if Combobox1.text = 'X-Wert' then begin edit2.text := ''; Zahl1 := strtoint(Edit4.text); Zahl2 := strtoint(Edit1.text); Zahl3 := strtoint(Edit3.text); ergebnis:= (Zahl1 * zahl2); Zahl1 := (ergebnis div Zahl3); edit2.text := (IntToStr(Zahl1)); end; if Combobox1.text = 'Y-Name' then begin edit3.text := ''; Zahl1 := strtoint(Edit1.text); Zahl2 := strtoint(Edit4.text); Zahl3 := strtoint(Edit2.text); ergebnis:= (Zahl1 * zahl2); Zahl1 := (ergebnis div Zahl3); edit3.text := (IntToStr(Zahl1)); end; if Combobox1.text = 'Y-Wert' then begin edit4.text := ''; Zahl1 := strtoint(Edit2.text); Zahl2 := strtoint(Edit1.text); Zahl3 := strtoint(Edit3.text); ergebnis:= (Zahl1 div zahl2); Zahl1 := (ergebnis * Zahl3); edit4.text := (IntToStr(Zahl1)); end; end;
end. |
Und die fließkommawerte hab ich nicht benutzt weil ich ein neewbie bin.
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
juKx - Di 07.03.06 23:19
hi,
ich wollte dir nochmal einen Tipp geben...gib deinen Edit-Felder mal aaussagekräftige Namen, dann lässt sich dein Programm besser verstehen :) ...aber ich habs auch so kapiert. ES hilft dir später auch bei großeren Projekte...
mfg juKx
Marc. - Di 07.03.06 23:20
ich habe deinen code mal ein wenig gekürtzt, hoffe er stimmt noch so ;)
als kleiner verbesserungstipp: wähle sinnvolle namen für deine kompnenten, zb y_name_edit damit du später noch weißt, was du eigentlich gerechnet hast :P
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| procedure TForm1.ButtonClick(Sender: TObject); var c: byte; Zahl1, Zahl2, Zahl3, Zahl4, ergebnis: real; begin c := combobox.ItemIndex;
Zahl1 := StrToFloat(edit1.Text); Zahl2 := StrToFloat(edit2.Text); Zahl3 := StrToFloat(edit3.Text); Zahl4 := StrToFloat(edit4.Text);
case c of 0: begin edit1.text := ''; ergebnis:= (zahl3 * zahl2) / Zahl4; edit1.text := (FloatToStr(ergebnis)); end;
1: begin edit2.text := ''; ergebnis:= (Zahl4 * zahl1) / zahl3; edit2.text := (FloatToStr(ergebnis)); end;
2: begin edit3.text := ''; ergebnis:= (Zahl1 * zahl4) / zahl2; edit3.text := (FloatToStr(ergebnis)); end;
3: begin edit4.text := ''; ergebnis:= (Zahl2 / zahl1) * zahl3; edit4.text := (FloatToStr(ergebnis)); end; end; end;
end. |
mfg
Delete - Di 07.03.06 23:27
geht ja auch noch ein bischen kürzer. hoff ich hab jetzt nicht gegen das copyright verstossen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.ButtonClick(Sender: TObject); var Zahl1, Zahl2, Zahl3, Zahl4: real; begin Zahl1 := StrToFloat(edit1.Text); Zahl2 := StrToFloat(edit2.Text); Zahl3 := StrToFloat(edit3.Text); Zahl4 := StrToFloat(edit4.Text);
case combobox.ItemIndex of 0: edit1.text := FloatToStr((zahl3 * zahl2) / Zahl4); 1: edit2.text := FloatToStr((Zahl4 * zahl1) / zahl3); 2: edit3.text := FloatToStr((Zahl1 * zahl4) / zahl2); 3: edit4.text := FloatToStr((Zahl2 / zahl1) * zahl3); end; end; |
juKx - Di 07.03.06 23:28
hi,
hättest du doch gleich mal in deiner Verbesserung machen können ^^.
Darth Sitthiander - Mi 08.03.06 13:43
Danke für die Informationen. Allerdings funktionieren die Quelltexte nicht. Da komm eine Fehler meldeng:
Klasse EconvertError, '' ist kein gültiger Gleitkommawert.
Wie kann ich machen das man es rechnen kann, obwohlk da nix drin steht?
Hux - Mi 08.03.06 14:14
Die Box muss automatisch eine Zahl die > íst als 0, nur dann kanst du es berechnen, denn du weißt ja, dass x/0 = Error is...,
du kannst ja bei dem Buttonevent davor ein Check machen, ob in den Feldern eine Zahl die > ist als 0 ist, wenn nicht fügst du einen wert ein oder du warnst den User...
Hoffe hab dein Prob verstanden...
Darth Sitthiander - Mi 08.03.06 14:20
Aber geht das etwa nicht anders?
Marc. - Mi 08.03.06 14:34
du könntest eine exception auslösen
zb.:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| try a := b / 0; except on EZeroDivide do begin ShowMessage('Achtung, Division durch Null!'); end; |
es ist aber besser wenn du den fehler abfängst ehe er auftritt
zb mit einer if abfrage. ggfalls forderst du den user mithilfe einer message (showmessage) auf, eine gültigen wert in das jeweilige edit feld einzugeben ;)
Darth Sitthiander - Do 09.03.06 13:24
Könnte es so stimmen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TForm1.Button1Click(Sender: TObject); var Zahl1, Zahl2, Zahl3, Zahl4: real; begin try Zahl1 := StrToFloat(edit1.Text); Zahl2 := StrToFloat(edit2.Text); Zahl3 := StrToFloat(edit3.Text); Zahl4 := StrToFloat(edit4.Text);
case combobox1.ItemIndex of 0: edit1.text := FloatToStr((zahl3 * zahl2) / Zahl4); 1: edit2.text := FloatToStr((Zahl4 * zahl1) / zahl3); 2: edit3.text := FloatToStr((Zahl1 * zahl4) / zahl2); 3: edit4.text := FloatToStr((Zahl2 / zahl1) * zahl3); end; except on EZeroDivide do begin ShowMessage('Achtung, Division durch Null!'); end else Showmessage('Alle Felder müssen ausgefüllt sein!'); end; end; |
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!