Autor |
Beitrag |
Akamaru
Hält's aus hier
Beiträge: 9
WIN 2000
Delphi
|
Verfasst: So 04.12.05 20:56
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"
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
      
Beiträge: 334
Win 95, Win 98, Win XP, Win Vista, Linux
D5 Enterprise ,D2005, D6 Personal, Visual C++ Express 2005, C++ Builder 6 E, Dev-C++
|
Verfasst: 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
_________________ GEIZ IST GEIL! - Ihr Sozialamt
Zuletzt bearbeitet von starsurfer am So 04.12.05 21:10, insgesamt 2-mal bearbeitet
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: 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();.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Zuletzt bearbeitet von GTA-Place am So 04.12.05 21:10, insgesamt 1-mal bearbeitet
|
|
Akamaru 
Hält's aus hier
Beiträge: 9
WIN 2000
Delphi
|
Verfasst: 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
      
Beiträge: 334
Win 95, Win 98, Win XP, Win Vista, Linux
D5 Enterprise ,D2005, D6 Personal, Visual C++ Express 2005, C++ Builder 6 E, Dev-C++
|
Verfasst: 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'; |
_________________ GEIZ IST GEIL! - Ihr Sozialamt
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 04.12.05 21:14
Oder gleich so:
Delphi-Quelltext 1:
| Edit1.Text := 'Idealgewicht'; |
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Akamaru 
Hält's aus hier
Beiträge: 9
WIN 2000
Delphi
|
Verfasst: 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"
|
|
Amateur
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: So 04.12.05 21:20
nimm lieber boolean anstatt bool. der grund fällt mir grad net ein aber es ist auf jedenfall besser...
ansonsten guck dir mal besser das hier an. denn dir fehlen sehr viele grundlagen:
Crashkurs Delphi
und
Delphi Source
und
Delphi Basics für diverse Befehle
_________________ "Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
|
|
Akamaru 
Hält's aus hier
Beiträge: 9
WIN 2000
Delphi
|
Verfasst: 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
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: 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...
_________________ "Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
|
|
Akamaru 
Hält's aus hier
Beiträge: 9
WIN 2000
Delphi
|
Verfasst: 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 
Hält's aus hier
Beiträge: 9
WIN 2000
Delphi
|
Verfasst: So 04.12.05 21:59
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
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 04.12.05 22:27
Das kann so nicht funktionieren, weil du nirgends auf die Checkboxen eingehst.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Akamaru 
Hält's aus hier
Beiträge: 9
WIN 2000
Delphi
|
Verfasst: So 04.12.05 22:32
das habe ich auch gerade bemerkt -.-" nur zeigte er keinen fehler an...ich arbeite dran.^^"
|
|
Amateur
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: 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; |
_________________ "Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
|
|
Akamaru 
Hält's aus hier
Beiträge: 9
WIN 2000
Delphi
|
Verfasst: 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... 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
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: 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 
Hält's aus hier
Beiträge: 9
WIN 2000
Delphi
|
Verfasst: Di 06.12.05 17:18
habe ich jetzt getan und das funktionierend programm in info fertig gestellt. sieht so aus:
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...
|
|
|