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
user profile iconDarth Sitthiander hat folgendes geschrieben:
Aber da gibt es noch einige Probleme.

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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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 user profile iconChristian 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
0begin
    edit1.text := '';
      ergebnis:= (zahl3 * zahl2) / Zahl4;
      edit1.text := (FloatToStr(ergebnis));
  end;

1begin
    edit2.text := '';
     ergebnis:= (Zahl4 * zahl1) / zahl3;
      edit2.text := (FloatToStr(ergebnis));
  end;

2begin
    edit3.text := '';
     ergebnis:= (Zahl1 * zahl4) / zahl2;
     edit3.text := (FloatToStr(ergebnis));
   end;

3begin
    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 ;)


Coreyl - Mi 08.03.06 16:05

http://de.wikipedia.org/wiki/Dreisatz ??


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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt