Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben (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 von VaNaTiC
Geschrieben

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>

Geschrieben

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 ;):D

Gruß Paddy

procedure TForm1.schliessenClick(Sender: TObject);

begin

close;

end;

end.

Geschrieben

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

Geschrieben

Diesmal war grueni eher :D

Dein Vergleich:

... < 30 then

und

... > 29 then

der hinkt ein bißchen :D

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...