Paddy92 Geschrieben 27. Januar 2010 Geschrieben 27. Januar 2010 Hallo Leute... Ich glaub ich bin einfach zu blöd ... vielleicht könnt ihr mir ja trd. helfen. Ich hab noch ned viel programmiert und des is eins von meinen ersten Programmen, bei mir kommt bei diesem Quellcode immer die Fehlermeldung "record objekt oder klassentyp erforderlich" begin gewicht:= StrtoFloat (gewicht.Text); groesse:= StrtoFloat (groesse.text); bmi:= gewicht/(groesse*groesse); bmi.Caption:=FloattoStr(bmi); end; Danke schonmal für eure Hilfe. Gruß Paddy Zitieren
VaNaTiC Geschrieben 27. Januar 2010 Geschrieben 27. Januar 2010 (bearbeitet) Ich vermute es geht um Delphi?! Und wenn Du Dir Deine rote Zeile genau anguckst, wirst Du erkennen, dass Du eine TEdit-Komponente (Text-Eingabefeld im Formular) und eine lokale Variable (var groesse: ...) mit ein und demselben Namen benutzt! groesse kann entweder ein TEdit oder eine lokale Variable sein. Für die Variable bmi und das Label bmi gilt das übrigens ebenso. Ich empfehle Dir dringend ein paar Notationsregeln einfallen oder bekannte einfach anzunehmen. Als Beispiel: statt groesse: TEdit -> GroesseEdit: TEdit oder edGroesse: TEdit und für lokale Variablen bietet sich die s.g. ungarische Notation an. statte var groesse: Double -> dGroesse: Double Ansonsten wirst Du immer wieder schnell mit Problemen kämpfen, die Du eigentlich garnicht erst bräuchtest. Bearbeitet 27. Januar 2010 von VaNaTiC Zitieren
Paddy92 Geschrieben 27. Januar 2010 Autor Geschrieben 27. Januar 2010 okay ...vielen Dank Vanatic ! ich werd mir das zu Herzen nehmen. Gruß Paddy Zitieren
grueni Geschrieben 27. Januar 2010 Geschrieben 27. Januar 2010 Mit was programmierst du denn, ist das Delphi? Wo hast du gewicht, groesse und bmi deklariert? Sind das Variablen oder Bedienelemente wie TTextbox/TLabel...? Ich würde tippen, daß Folgendes helfen würde: var dblGewicht: double; dblGroesse: double; dblBMI: double; begin dblGewicht:= StrtoFloat (gewicht.Text); dblGroesse:= StrtoFloat (groesse.text); dblBmi:= dblGewicht/(dblGroesse*dblGroesse); bmi.Caption:=FloattoStr(dblBmi); end; <edit> Vanatic war schneller Und seinen Tipp wegen Namenkonventionen solltest du wirklich beherzigen. </edit> Zitieren
Paddy92 Geschrieben 28. Januar 2010 Autor Geschrieben 28. Januar 2010 Ja klar sorry ... is natürlich Delphi ! Danke Leute ... hab das Problem gelöst ... aber es gibt schonwieder das nächste ... Er zeigt mir alles an ! nur nicht *über und untergewicht bei der Altersklasse mitte 40! Ich check aber ned warum ... Hier der Code: unit UBMI; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) gewicht: TEdit; Label1: TLabel; groesse: TEdit; bmi: TLabel; Label3: TLabel; Button1: TButton; schliessen: TButton; status: TLabel; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Alter: TLabel; editalter: TEdit; Altersklasse: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure schliessenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var valtersklasse: String; valter, vgewicht, vgroesse, vbmi: real; vmann: boolean; begin valter:=StrtoFloat (editalter.text); If valter < 18 then Altersklasse.Caption:= ('Jugendlich'); If (valter > 19 ) and (valter < 30 ) then Altersklasse.Caption:= ('Mitte zwanzig'); If (valter >29) and (valter < 40 ) then Altersklasse.caption:= ('Mitte dreißig'); If (valter >39) and (valter < 50 ) then Altersklasse.caption:= ('Mitte Vierzig'); If (valter >49) and (valter < 60 ) then Altersklasse.caption:= ('Mitte fünfzig'); If (valter >59) and (valter < 70 ) then Altersklasse.caption:= ('Mitte sechzig'); valtersklasse:= altersklasse.caption; If radiobutton1.checked = true then vmann:=true else vmann:=false; vgewicht:= StrtoFloat (gewicht.Text); vgroesse:= StrtoFloat (groesse.text); vbmi:= vgewicht/(vgroesse*vgroesse); bmi.Caption:=FloattoStr(round(vbmi)); If vmann= true then begin If valtersklasse = 'Mitte dreißig' then begin If (vbmi <26) and (vbmi >19) then begin status.caption:= 'normalgewicht'; end else If vbmi <20 then begin status.caption:= 'untergewicht'; end else If vbmi >23 then begin status.caption:= 'übergewicht'; end; end; If vmann= true then begin If valtersklasse = 'Mitte zwanzig' then begin If (vbmi >17) and (vbmi <24) then begin status.caption:= 'normalgewicht'; end else If vbmi <18 then begin status.caption:= 'untergewicht'; end else If vbmi >23 then begin status.caption:= 'übergewicht'; end; If vmann= true then begin If valtersklasse = 'Mitte vierzig' then begin If (vbmi >20) and (vbmi <28) then begin status.caption:= 'normalgewicht'; end else If vbmi <21 then begin status.caption:= 'untergewicht'; end else If vbmi >27 then begin status.caption:= 'übergewicht'; end; end end end end end end; Wär cool wenn ihr helfen könnt ... (wenn der code nich optimal geschrieben is dann müsst ihr verständnis haben ... is mein zweites Programm Gruß Paddy procedure TForm1.schliessenClick(Sender: TObject); begin close; end; end. Zitieren
grueni Geschrieben 28. Januar 2010 Geschrieben 28. Januar 2010 Ganz einfach... Hier: If (valter >39) and (valter < 50 ) then Altersklasse.caption:= ('Mitte Vierzig'); schreibst du "Vierzig" groß. und hier: If valtersklasse = 'Mitte vierzig' then begin schreibst du "vierzig" klein. Deshalb wird das nie ausgeführt. Ich würde das nicht über Strings lösen, ein Aufzählungstyp wäre geeigneter. Und verwende bitte Code-Tags für deinen Quelltext Zitieren
VaNaTiC Geschrieben 28. Januar 2010 Geschrieben 28. Januar 2010 Hmm, das ist halt der Mist mit dem String-Vergleich: 'Mitte Vierzig' ist halt nicht 'Mitte vierzig' Zitieren
VaNaTiC Geschrieben 28. Januar 2010 Geschrieben 28. Januar 2010 Diesmal war grueni eher Dein Vergleich: ... < 30 then und ... > 29 then der hinkt ein bißchen Ist die Überschneidung wirklich gewollt? Ich würde das nicht über Strings lösen, ein Aufzählungstyp wäre geeigneter. Was grueni richtigerweise damit meint ist: type TAltersGruppe = (agJugend, agMitte20, agMitte30, agMitte40, agMitte50, agRentnerUndAndere); function findeAltersgruppe(alter: Real): TAltersGruppe; begin Result := agRentnerUndAndere; if alter < 18 then Result := agJugend ... end; function holeAltersText(altersgruppe: TAltersGruppe): string; begin case altersgruppe of agJugend: Result := 'Jugendlich'; agMitte20: Result := else Result := 'Rentner oder keine Ahnung'; end; end; Das Prozedere ist besser lesbar und besser verwendbar. Und das solltest Du noch auf das Normal-, Über und Untergewicht erweitern. Zitieren
Paddy92 Geschrieben 29. Januar 2010 Autor Geschrieben 29. Januar 2010 Hey ho... Danke für eur Hilfe ;-) Zum Glück gibts Leute dies blicken ! :-D Gruß Paddy Zitieren
VaNaTiC Geschrieben 29. Januar 2010 Geschrieben 29. Januar 2010 Es ist noch kein Meister vom Himmel gefallen. Mit genügend Eigeninitiative und den Tipps aus einem Forum wie hier wird das schon Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.