Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Idealgewichtsberechnung
Akamaru - So 04.12.05 20:56
Titel: Idealgewichtsberechnung
Also, hallo erstmal^^
Meine Aufgabe für Info ist es einen Idealgewichtsrechner zu programmieren, Konzentration hierbei auf die Verzweigung (hab info ja erst ein paar Wochen o.o")
Also, man soll mit Eingabe des Geschlechts, des Gewichts und der Größe berechnen lassen, ob jemand Ideal-, Unter- oder Übergewicht hat. Es soll zusätzlich noch eine Toleranz von jeweils 2% geben. Da das Idealgewicht bei Frauen anders ist muss er zuerst mal das Geschlecht als Bool Wert (Frage: bist du männlich? ja/nein) angeben.
Schlussendlich soll bei der Ausgabe dastehen, ob man über-, unter- oder idealgewicht- hat.
ich hab jezt den Code fertig und Delphi zeigt mir endlich keine Fehler mehr an, aber er zeigt bei der Endlösung nicht das an, was er soll.
hier der bisherige code...könnt ihr mir sagen, wo der fehler liegt? o_O"
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:
| type TForm1 = class(TForm) EdGroesse: TEdit; EdGewicht: TEdit; Edgeschlecht: TEdit; EdAusgabe: TEdit; Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var Groesse, Gewicht, Idealgewicht2 : Real; Geschlecht : Bool; Untergewicht, Uebergewicht, Idealgewicht : String; begin Groesse := StrtoFloat(EdGroesse.text) ; Gewicht := StrtoFloat(EdGewicht.Text) ; Geschlecht := StrtoBool(EdGeschlecht.Text) ; if Geschlecht = true then begin Idealgewicht2 := (Groesse-100)/ 100 * 95; if Gewicht < Idealgewicht2 / 100 * 98 then EdAusgabe.Text := Untergewicht else if Gewicht > Idealgewicht2 / 100 * 102 then EdAusgabe.Text := Uebergewicht else EdAusgabe.Text := Idealgewicht end else begin Idealgewicht2 := (Gewicht - 100) / 100 * 90; if Gewicht < Idealgewicht2 / 100 * 98 then EdAusgabe.Text := Untergewicht else if Gewicht > Idealgewicht2 / 100 * 102 then EdAusgabe.Text := Uebergewicht else EdAusgabe.Text := Idealgewicht
end end;
end. |
starsurfer - So 04.12.05 21:08
also das der bei dir kein Fehler anzeigt ist mir ein Rätsel...
mein Delphi kennt den Befehl hier nich:
Delphi-Quelltext
1:
| Geschlecht := StrtoBool(EdGeschlecht.Text) ; |
mach das lieber mit ner checkbox oda so
GTA-Place - So 04.12.05 21:08
Du hast ja auch einige Variablen (Idealgewicht, Untergewicht, ...) keinen Wert zugewiesen.
Und wie starsurfer sagt, benutz eine Checkbox und nicht StrToBool();.
Akamaru - So 04.12.05 21:08
wir haben noch nicht mit bool werten gearbeitet...o_O" und vor allem...was ist eine check box? also, was sollte ich denn hinschreiben? o.o"
edit: hm?
Untergewicht, Uebergewicht, Idealgewicht : String; ist hier doch..? oder was meinst du? o.O es soll ja als dieser text ausgegeben werden..insofern sehe ich kein problem?
starsurfer - So 04.12.05 21:12
ja, die variablen sind da, in denen steht aba noch nix drinne
das musst du noch machen:
Delphi-Quelltext
1: 2: 3:
| idealgewicht:='top'; untergewicht:='zu niedrig'; übergewicht:='fett'; |
GTA-Place - So 04.12.05 21:14
Oder gleich so:
Delphi-Quelltext
1:
| Edit1.Text := 'Idealgewicht'; |
Akamaru - So 04.12.05 21:15
da bin ich jetzt mal anz ehrlich total verwirrt o_O" also die variablen sind da...und sie brauchen noch werte...aber wo muss ich selbige denn hinschreiben?
EdAusgabe.Text := Uebergewicht <--hier irgendwo..? oô`
edit: achso, verstehe ^^
edit2: also, jetzt funktioniert es, fehlten nur diese anführungsstriche...danke^^
nur das mit der checkbox habe ich noch nicht verstanden o_O"
Akamaru - So 04.12.05 21:22
dankeschön^^
aber: die grundlagen fehlen mir, weil ich erst seit ein paar wochen info habe, kein wunder also XD"
Amateur - So 04.12.05 21:29
deswegen ist besonders der erste link sehr gut für dich.
ansonsten ne checkbox gibt einfach nur nen boolean zurück. vom aussehen ist es einfach son weisses kästchen entweder leer oder mit nem x drin. kennste 100%ig. ist das x drin gibt checkbox1.checked nen true zurück ansonsten false.
für deine auswahl vom geschlecht ist allerdings nen radiobutton besser. das sind die runden kreisdinger wo nur in einem nen kreis drin ist im anderen nicht. gibts alles bei den kompos von delphi. normale windows sachen die man überall findet.
es sei denn du willst bei deiner berechnung auch zwitter und so mit einschliessen. denn sonst kann man ja nur männlich oder weiblich sein. dazu zu benutzen wäre auch noch die groupbox auf der du die beiden radiobuttons dann plazierst. macht das ganze noch besser und ist glaub ich für die zuordnung wichtig zwischen welchen radiobuttons man nur einen auswählen kann...
Akamaru - So 04.12.05 21:34
achso...ich verstehe...das probier ich mal. selbigen code aufbau werd ich schon zusammenkriegen...ist natürlich sehr praktisch, damit man nichts falsches eingeben kann...hmm...da schau ich mal!
danke^^
Akamaru - So 04.12.05 21:59
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) EdGroesse: TEdit; EdGewicht: TEdit; EdAusgabe: TEdit; Button1: TButton; RadioGroup1: TRadioGroup; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Label1: TLabel; Label2: TLabel; BtAbbruch: TButton; Label3: TLabel; procedure Button1Click(Sender: TObject); procedure BtAbbruchClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var Groesse, Gewicht, Idealgewicht2 : Real; Maennlich, Weiblich : Boolean; Untergewicht, Uebergewicht, Idealgewicht : String; begin Groesse := StrtoFloat(EdGroesse.text) ; Gewicht := StrtoFloat(EdGewicht.Text) ; if Maennlich then begin Idealgewicht2 := (Groesse-100)/ 100 * 95; if Gewicht < Idealgewicht2 / 100 * 98 then EdAusgabe.Text := 'dürr' else if Gewicht > Idealgewicht2 / 100 * 102 then EdAusgabe.Text := 'zu fett' else EdAusgabe.Text := 'super' end; if Weiblich then begin Idealgewicht2 := (Gewicht - 100) / 100 * 90; if Gewicht < Idealgewicht2 / 100 * 98 then EdAusgabe.Text := 'dürr' else if Gewicht > Idealgewicht2 / 100 * 102 then EdAusgabe.Text := 'zu fett' else EdAusgabe.Text := 'super'
end end;
procedure TForm1.BtAbbruchClick(Sender: TObject); begin close; end;
end. |
jetzt mit radio button...hat gleich funktioniert. super^^
problem gelöst ^^
GTA-Place - So 04.12.05 22:27
Das kann so nicht funktionieren, weil du nirgends auf die Checkboxen eingehst.
Akamaru - So 04.12.05 22:32
das habe ich auch gerade bemerkt -.-" nur zeigte er keinen fehler an...ich arbeite dran.^^"
Amateur - So 04.12.05 22:51
die radiobuttons haben auch eine eigenschaft die true oder false zurückgeben. ich weiss nicht obs checked ist oder was anderes... sollte aber net schwer rauszufinden sein wenn an im code in dem drop down menü guckt. dann musst du nur einmal mit ner if then else abfrage prüfen ob mann true gesetzt ist. diesen wert gibst du der variable männlich. weiblich kannste dir schenken denn wenn es not männlich ist ist es automatisch weiblich. dazu braucht man keine neue variable. außerdem gibt es für sowas ja auch else.
also anstatt mit der männlich weiblich variable rumzumachen mach doch einfach:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| if mannradio.checked then begin end else begin end; |
Akamaru - So 04.12.05 23:16
hab jetzt mal in nem andern bereich des forums gesucht, da hab ich hilfe gefunden...nur zeigt er jetzt wieder nichts an...
weird...
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) EdGroesse: TEdit; EdGewicht: TEdit; EdAusgabe: TEdit; Button1: TButton; RadioGroup1: TRadioGroup; Maennlich: TRadioButton; Weiblich: TRadioButton; Label1: TLabel; Label2: TLabel; BtAbbruch: TButton; Label3: TLabel; EdIdealgewicht: TEdit; Label4: TLabel; Label5: TLabel; procedure Button1Click(Sender: TObject); procedure BtAbbruchClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var Groesse, Gewicht, Idealgewicht2 : Real;
begin Groesse := StrtoFloat(EdGroesse.text) ; Gewicht := StrtoFloat(EdGewicht.Text) ; if radiogroup1.itemindex = 1 = true then begin Idealgewicht2 := (Groesse-100)/ 100 * 95; if Gewicht < Idealgewicht2 / 100 * 98 then EdAusgabe.Text := 'Untergewicht' else if Gewicht > Idealgewicht2 / 100 * 102 then EdAusgabe.Text := 'Uebergewicht' else EdAusgabe.Text := 'Idealgewicht'; EdIdealgewicht.Text := FloattoStr(Idealgewicht2); end; if radiogroup1.itemindex = 2 = true then begin Idealgewicht2 := (Gewicht - 100) / 100 * 90; if Gewicht < Idealgewicht2 / 100 * 98 then EdAusgabe.Text := 'Untergewicht' else if Gewicht > Idealgewicht2 / 100 * 102 then EdAusgabe.Text := 'Uebergewicht' else EdAusgabe.Text := 'Idealgewicht'; EdIdealgewicht.Text := FloattoStr(Idealgewicht2);
end; end;
procedure TForm1.BtAbbruchClick(Sender: TObject); begin close; end;
end. |
Blackheart666 - So 04.12.05 23:48
Ich schätze mal Du hast Radiobuttons in die Radiogroup eingesetzt die Du aber nicht ansprichst.
Gib mal unter Strings in der Radiogroup Maennlich und Weiblich ein und dann kannst Du
Maennlich mit ItemIndex 0 und Weiblich mit 1 ansprechen.
Bsp.
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Button1Click(Sender: TObject); begin if Radiogroup1.itemindex = 0 then Caption:='Maennlich'; end; |
oder Du musst die Radiobuttons direkt ansprechen dann sieht das so aus.
Bsp.
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Button1Click(Sender: TObject); begin if RB_Maennlich.Checked = true then Caption:='Maennlich'; end; |
Akamaru - Di 06.12.05 17:18
habe ich jetzt getan und das funktionierend programm in info fertig gestellt. sieht so aus:
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) EdGroesse: TEdit; EdGewicht: TEdit; EdAusgabe: TEdit; Button1: TButton; RadioGroup1: TRadioGroup; Maennlich: TRadioButton; Weiblich: TRadioButton; Label1: TLabel; Label2: TLabel; BtAbbruch: TButton; Label3: TLabel; EdIdealgewicht: TEdit; Label4: TLabel; Label5: TLabel; procedure Button1Click(Sender: TObject); procedure BtAbbruchClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var Groesse, Gewicht, Idealgewicht2 : Real;
begin Groesse := StrtoFloat(EdGroesse.text) ; Gewicht := StrtoFloat(EdGewicht.Text) ; if Maennlich.checked = true then begin Idealgewicht2 := (Groesse-100)/ 100 * 95; if Gewicht < Idealgewicht2 / 100 * 98 then EdAusgabe.Text := 'Untergewicht' else if Gewicht > Idealgewicht2 / 100 * 102 then EdAusgabe.Text := 'Uebergewicht' else EdAusgabe.Text := 'Idealgewicht'; EdIdealgewicht.Text := FloattoStr(Idealgewicht2) end else begin Idealgewicht2 := (Groesse - 100) / 100 * 90; if Gewicht < Idealgewicht2 / 100 * 98 then EdAusgabe.Text := 'Untergewicht' else if Gewicht > Idealgewicht2 / 100 * 102 then EdAusgabe.Text := 'Uebergewicht' else EdAusgabe.Text := 'Idealgewicht'; EdIdealgewicht.Text := FloattoStr(Idealgewicht2);
end; end;
procedure TForm1.BtAbbruchClick(Sender: TObject); begin close; end;
end. |
jetzt soll ich mal versuchen noch ausnahmen einzubauen...da hab ich im unterricht mit exeptions rumprobiert, es aber noch nicht wirklich hingekriegt.
mir würde es auch reichen es mit einem if zu machen also if Groesse < 100 then
dann müsste ich halt ne message zeigen lassen...wie man das macht habe ich NOCH keine ahnung...lass es mir mal morgen erklären, da hab ich wieder info...
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!