Entwickler-Ecke

Sonstiges (Delphi) - Programm mit Auswahlstrukturen


Startprogrammer - So 17.11.02 21:13
Titel: Programm mit Auswahlstrukturen
Hallo Freunde,
wir sollen ein Programm mit Auswahlstrukturen schreiben, und zwar folgendermaßen. Das ist jetzt der Algorithmus dafür:

1. Körpermasse in Kg eingeben
2. Körpergröße in cm eingeben
3. Körpergröße quadrieren
4. Punkt 1. durch Punkt 3. teilen
5. Ergebnis aus Punkt 4. =KMI
6. Wenn KMI<20, Ausgabe:Untergewicht
wenn 20 < oder = KMI < oder = , Ausgabe: Idealgewicht
wenn 22 < KMI , Ausgabe: Übergewicht
7. Fertig

Jetzt weiß ich überhaupt nicht, wie das ganze ablaufen soll. Vielleicht könnt ihr mir helfen, da was hinzukriegen. KMI bedeutet Körper-Masse-Index. Also bis dann


Delete - So 17.11.02 21:16

Mach für jede Eingabe ein Edit dann berechnest du das in einem ButtonClick-Ereigniss und gibst es in einem Label aus - fertig.
Was du noch brauchst ist IntToStr und StrToInt gegeben Falls noch.


Wolff68 - So 17.11.02 22:21

Also ich versteh Dein Problem nicht ganz.
Im Prinzip hast Du doch bereits den Ablauf und die Variablen oben selber beschrieben. Musst es nur noch auf 'Delphianisch' übersetzen. Also hier mal die Delphi-Basics die Du brauchst (Und in einer wachen Minute von Deinem Lehrer aufgeschnappt haben solltest)

Zuerst brauchst Du ja einen Auslöser, daß das Rechnen beginnen soll.
Also pack Dir am besten einen Button auf das Formular und mach einen Doppelklick drauf. Damit wird im Quelltext ein Form1.Button1Click Rumpf erzeugt, in den Du jetzt den Programmtext reinpacken kannst.

Zitat:
1. Körpermasse in Kg eingeben
2. Körpergröße in cm eingeben
Also brauchst 2 Eingabefelder. zB Edit.
Zack, rauf aufs Formular und vielleicht noch edGewicht und edGroesse nennen.

Zitat:
3. Körpergröße quadrieren
4. Punkt 1. durch Punkt 3. teilen
5. Ergebnis aus Punkt 4. =KMI
Aus Punkt 5. wird ersichtlich, daß Du eine Variable KMI brauchst. Also oben var KMI : Real;
Punkt 3. Größe quadtrieren: Sqr(StrToFloat(edGroesse.Text)) (Das StrToFloat brauchst, um den Text in eine Zahl zu verwandeln.
Punkt 4. Teilen : StrToFloat(edGewicht.Text)/...
Zusammengeschrieben wird daraus:KMI := StrToFloat(edGewicht.Text)/Sqr(StrToFloat(edGroesse.Text));

Zitat:
6. Wenn KMI<20, Ausgabe:Untergewicht
wenn 20 < oder = KMI < oder = , Ausgabe: Idealgewicht
wenn 22 < KMI , Ausgabe: Übergewicht
Du brauchst also eine Ausgabe. Plazieren wir also zB ein Label auf dem Formular und nennen es Ausgabe.
Wenn schreibt sich in Delphi IF und sonst = else
Am besten macht man das dann mit einer leicht verschachtelten If-then-else. Das sieht dann so aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
IF KMI <= 20 then //Wenn KMI <= 20
  Ausgabe.Caption := 'Untergewicht'
else //Sonst (Also wenn KMI nicht < 20)
  IF KMI > 22 then // Wenn KMI > 22
    Ausgabe.Caption := 'Übergewicht' 
  else //Sonst (Also wenn KMI nicht > 22. KMI <= 20 haben wir oben ja schon geprüft)
    Ausgabe.Caption := 'Idealgewicht';


Alles klar?

StrToFloat gibt übrigends wüste Fehlermeldungen aus, wenn Du in die Edits keine Zahlen eingibst. Wie man das verhindert wirst aber später noch lernen. Also vorerst einfach mal sichergehen, daß Du nur Zahlen eingibst....


Delete - So 17.11.02 22:55

Na wenn das jetzt nach dem Kochrezept nicht klappt... :roll:


Startprogrammer - Mo 18.11.02 18:25

Hallo, danke für die schnelle Hilfe, aber der Lehrer meint: (o-ton Inf.-Lehrer)"Ja, nicht schlecht, aber du solltest das etwas ausführlicher machen...". Ja, toll, ausführlicher? Hä? Ich hätte mich nicht an die Aufgabenstellung gehalten. Versteh ich zwar nicht, aber egal. :shock: :autsch:


Delete - Mo 18.11.02 18:31

Er meint bestimmt die Zeile:

Quelltext
1:
KMI := StrToFloat(edGewicht.Text)/Sqr(StrToFloat(edGroesse.Text));                    

Do solltest bestimmt mit Variablen arbeiten und so.


Startprogrammer - Di 19.11.02 16:35

Ich soll da auch was mit Variablen machen, aber ich checke das ganze nicht. Ich muss mir irgendwie was ausdenken. Mal sehen...


Wolff68 - Di 19.11.02 18:18

Also gut.
Eben weniger effektiv gebündelt, dafür eher durchzublicken.
(Damit es auch Dein Lehrer kapiert !?)

1. Variablen einsetzen:
Du könntest die Zahlen in den Eingabefeldern erstmal in Variablen einlesen.
Also weitere Variablen deklarieren:
der Beginn der Prozedur sollte ja in etwa so aussehen:

Quelltext
1:
2:
3:
4:
5:
procedure Form1.Button1Click(...);
var KMI : Real;
begin
....... Programmschritte .....
end;
Jetzt machen wir einfach noch 3 Variablen dazu. Das sieht dann so aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
var KMI : Real;
    Gewicht : Real;
    Groesse : Real;
    QuadrGroesse : Real;
begin
...
end;

Jetzt kannst im Programmtext die Variablen füllen:

Quelltext
1:
2:
3:
4:
Gewicht := StrToFloat(edGewicht.Text);
Groesse := StrToFloat(edGroesse);
QuadrGroesse := Groesse * Groesse; //oder auch Sqr(Groesse)
KMI := Gewicht / QuadrGroesse;

Und auch die verschachtelte If-Anweisung kann man natürlich übersichtlicher machen:

Quelltext
1:
2:
3:
If KMI <= 20 then Ausgabe.Caption := 'Untergewicht';
If (KMI > 20) and (KMI <= 22) then Ausgabe.Caption := 'Normalgewicht';
If KMI > 22 then Ausgabe.Caption := 'Übergewicht';


Für den Anfang ist es vielleicht echt übersichtlicher und leichter verständlich.

Übrigends: Wenn Du meinen Code dem Lehrer vorgelegt hast (und weiteren vorlegen willst): Ich persönlich hab nix dagegen. Aber Du solltest immer vorher begriffen haben warum der Code so geschrieben ist, wie er funktioniert und was er macht. DU sollst lernen! Ich kann es schon! Wenn Du nur abpinselst hast Du überhaupt nix erreicht. Spätestens in der nächsten Arbeit stehst dann auf'm Schlauch.
Also wenn was unklar ist: Lieber hier (oder direkt) nochmal nachfragen bis es Dir klar ist wie und warum das so geschrieben ist.


Startprogrammer - Mi 20.11.02 21:28

Ich schätze mich glücklich, Informatik nicht schriftlich gewählt zu haben. Danke für die Hilfe....


Delete - Mi 20.11.02 21:35

Startprogrammer hat folgendes geschrieben:
Ich schätze mich glücklich, Informatik nicht schriftlich gewählt zu haben. Danke für die Hilfe....


Wie soll denn da die mündliche Prüfung aussehen? :shock:


Klabautermann - Mi 20.11.02 23:48

Hallo,
Luckie hat folgendes geschrieben:
Wie soll denn da die mündliche Prüfung aussehen? :shock:

als der ******* von Programmie-Lehrer mir im Zweiten Jahr meiner Ausbildung nur 'ne zwei geben wollte bin ich freiwillig in die Mündliche Prüfung geganen. Das lief dann so ab, dass ich eine Aufgabe gestellt bekahm (in dem Fall einen Sortieralgorithmus (mit ein paar eigenheiten) zu entwickeln und als C(++)-Code zu Papier bringen. Dafür bekahm ich 15 Minuten Zeit. Danach musste ich diesen an der Tafel vor dem Komitee (3 Leute inklusive meines Lehrers) präsentieren. Nachdem wir ein paar Sonderfälle durchgespielt haben mit demen mein Alogo problemlos klar kahm wurde noch eine Musterlösung angeschrieben und ich musst erklähren warum ich nicht so vorgegangen war. Das gelang mir indem ich einen Sonderfall konstruierte der die Musterlösung zum scheitern brachte. Meine Variante war zusätzlich noch ein paar Zeilen kürzer. Ich fand das war ein sehr gelungener Tag. - Habe ich erwähnt das mein Lehrer mir die 2 geben wollte weil meine programme zwar alle funktionierten aber nicht seinen Mustern entsprachen :mrgreen: .

Mündliche Prüfungen sind also absolut möglich.

Gruß
Klabautermann