Winkelmann Software Blog

Aktuelles 10.10.2022

  1. Es wurden neue Projekte und Fachthemen hinzugefügt.
  2. Es sind neue Artikel im Lazarus und Freepascal Grundlagenkurs online.

In dieser Übung möchte ich dich bitten, mit einen in diesem Kurs entwickelten Wissen, einen BMI Rechner zu entwickeln. BMI steht hierbei für Body Mass Index. Anbei findest du die Wikipedia Seite für weitere Informationen dazu. Wikipedia Seite.  [https://de.wikipedia.org/wiki/Body-Mass-Index]

Ich möchte dir hier eine etwas engere Vorgabe machen um den BMI Rechner zu erstellen.

Die Formel für den Body Mass Index (BMI)

Die Formel für den BMI lautet:

BMI = Masse / Köpergröße im Metern zum Quadrat

BMI = m / l²

BMI Tabelle Männer und Frauen

Abb. 1.01 BMI Tabelle die Ihr nutzen könnt

Abb. 1.01 BMI Tabelle die Ihr nutzen könnt

Benötigte Komponenten der IDE Lazarus

  1. TLabel
  2. TEdit
  3. TButton
  4. Projekt speichern
  5. Objektinspektor
  6. Compiler Einstellungen
  7. Iconn ändern
  8. GUI Planung

Benötige Sprachelemente von Freepascal

  1. Funktion StrToInt() und IntToStr()
  2. Variablen Deklaration
  3. IF ELSE Anweisungen
  4. Wahrheitsoperatoren
  5. Arithmetische Operatoren
  6. Mathematische Operatoren

 

Du kannst natürlich gerne mehr verwenden und das kleine Programm noch um einen Grundumsatzrechner erweitern.

Beides werde ich als Lösung präsentieren.

Da kannst das ganze natürlich auch noch weiterdenken und weiterentwickeln. Hierauf werde ich allerdings im Grundlagenkurs nicht mehr eingehen. Es wäre natürlich möglich das Programm zu deinem Diät Manager umzubauen und weitere werte zu erfassen. Blutwerte, Sauerstoffwerte, Zuckerwerte usw.

Die Lösung mit der Erklärung und Beispielsoftware findest du dann bald unter Lösung BMI Rechner. Ab dem 13.10.2022 verfügbar.


Winkelmann Software Blog

Benutzeroberflächen Planung in Lazarus

In diesem Artikel möchte ich kurz auf meine Erfahrung in der Planung von Benutzeroberflächen eingehen. Jedes Programm sollte gut strukturiert und übersichtlich aufgebaut sein. Aber wie erreicht man das? Je nach Software kann diese Struktur im Aufbau unterschiedlich sein, sollte aber für den wiedererkennungswert klaren Standards folgen. Auch die von einer Firma entwickelte Software gehört zum Cooperate Design. Gleichzeitig werden Software Anwender einem danken das man in der Software klaren Design Standards folgt, diese können sich in neuen Software Bereichen besser und schneller einarbeiten. Auch die Wartung und Anpassung von Software sollte schon beim Design mit geplant werden. Veröffentlicht Ihr ein minimum viable product ein minimal überlebensfähiges Produkt, so wird dies automatisch nach Kundenakzeptanz und Kundenwunsch erweitert. Das GUI Design sollte darauf vorbereitet sein. Damit nicht die ganze Software überarbeitet werden muss, sondern eine Erweiterung eingebaut und Design werden kann.
Ich möchte dies nun etwas genauer beleuchten

Abb. 1.01 GUI Design Standards

Abb. 1.01 GUI Design Standards

Das in Abbildung 1.01 zu sehende Beispiel ist der neue Standard für meine Tutorial Software. Für Winkelmann.Software typischen Header mit dem Winkelmann.Software Blog Logo. Die eigentliche Software ist mit zwei verschiedenen nebeneinander liegenden TPageControl Komponenten aufgebaut. Diese lassen sich, wie man an den beiden Programmen sehen kann, leicht erweitern.

 

GUI Design Standards

GUI Design Standards 2

Bei Verkaufssoftware die auch von der Bedienung größer ist, sollte dieser Standard dann dem entsprechend weiter ausgebaut werden. Bei meiner Software Winkelmann’s IT Team Cockpit kurz WS.ITTC kann man im Design der Software das Cooperate Design meiner Firma Winkelmann.Software erkennen. Was man hier erkennen kann ist, dass auch TPageControls für die bessere Übersicht genutzt werden. Die einzelnen Bereiche sind dazu auch noch Frames die einzeln geladen werden. Kommt damit ein Bereich dazu kann dieser schnell und einfach implementiert werden. Ich werde mit euch gemeinsam die Version 4.0 meiner Software entwickeln und euch bei diesen Schritten mitnehmen lassen.

Diese Standards sollten im eigentlichen Cooperate Design und der übergeordneten Cooparate Idendity bereits von Anfang an festgelegt werden.


Winkelmann Software Blog

If Else Anweisung Freepascal

Allgemeines zur If Else Abfrage in Freepascal

Die IF Else Abfrage heißt auf Deutsch, wenn dann Abfrage. Es wird also ein Zustand der Abfragebedingung geprüft der true oder false ergibt. Trifft die Abfrage zu ist der Wert true deutsch wahr, trifft er nicht zu ist der Wert False deutsch fasch.

Abb. 1.01 Beispiel Software für IF Else Abfrage zum Download s.u.

Abb. 1.01 Beispiel Software für IF Else Abfrage zum Download s.u.

Abb. 1.01 Beispiel Software für IF Else Abfrage zum Download s.u.

Als erstes sehen wir uns die einfache IF Abfrage an.

If Abfrage

Der Lazarus Programmcode  If Abfrage

Var
X,Y : integer;
X := 1
Y := 2

IF (X >= Y) then
Begin
// Mache etwas
END;

Im Quellcode können wir gut sehen das wir eine Bedingung in den runden Klammern haben die abgefragt wird. Gelesen wird das Ganze: Wenn X größer gleich > ist dann // mache etwas.

In einer Software mit GUI General User Interface im deutsch Benutzeroberfläche müssen wir von einem Editfeld Daten als Text auslesen und die in einen Integer umwandeln. Dies geht mit der Funktion StrToInt().

Das UML Diagramm dazu:

Abb. 1.02 Das IF Else UML Diagramm

Abb. 1.02 Das IF Else UML Diagramm

 

Abb. 1.03 If Abfrage Beispiel Software

Abb. 1.03 If Abfrage Beispiel Software

In der Beispiel Software prüfe ich ob Zahl1 kleiner ist als Zahl 2. Bei dieser Abfrage kann nur das Wahre Ergebnis ausgegeben werden. Sollte ein Ergebnis unwahr sein ändert sich nicht. Damit auch bei einer zweiten Abfrage das wahr sollte die erste Abfrage wahr gewesen sein.

Die Button Click Funktion des Quellcodes

procedure TForm1.Button1Click(Sender: TObject);
begin
if (StrToInt(EdtZahl1.text)) < (StrToInt(EdtZahl2.Text)) then
BEGIN
EdtErgebnis.Text := 'Wahr';
END;
end;

Das ist noch ziemlich unschön daher gibt es noch eine IF Else Anweisung. Diese sehen wir uns als nächstes an.

IF Else Anweisung in Freepascal

Der Quellcode zur IF Else Abfrage

Var
X,Y : integer;
X := 1
Y := 2
IF (X > Y) then
Begin
// Mache etwas
END ELSE
BEGIN
// mach etwas anderes
END;

Bei der IF Else Abfrage habe ich nun den Else Teil hinzugefügt. Gelsen wird das ganze wie folgt: Wenn X größer als y Ist dann mache etwas wenn nicht dann mache etwas anderes. In meiner Beispiel Software kann ich mit der IF Else Abfrage schon mehr abfragen.

Das UML Diagramm dazu:

Abb. 1.04 UML Diagramm zur IF Else Abfrage

Abb. 1.04 UML Diagramm zur IF Else Abfrage

 

Abb. 1.05 Beispiel 3 IF Else Abfrage wahr

Abb. 1.05 Beispiel 3 IF Else Abfrage wahr

 

Abb. 1.05 Beispiel 3 IF Else Abfrage unwahr

Abb. 1.05 Beispiel 3 IF Else Abfrage unwahr

Die Button Click Funktion des Quellcodes
procedure TForm1.BtnProofA2Click(Sender: TObject);
begin
if (StrToInt(EdtIEAZahl1.text)) > (StrToInt(EdtIEAZahl2.Text)) then
BEGIN
EdtIEAErgebnis.Text := 'Wahr';
END ELSE
BEGIN
EdtIEAErgebnis.Text := 'Unwahr';
END;
end;

wir können nun schon zwischen Wahr und unwahr unterscheiden. Wenn wir aber wissen möchten, ob Zahl 1 kleiner oder größer ist benötigen wir noch eine weitere Abfrage. Die IF ELSE IF Abfrage diese sehen wir uns als letztes an.

Die IF ELSE IF Abfrage in Freepascal

Der Quellcode zur IF Else Abfrage

Var
X,Y : integer;
X := 1
Y := 2
IF (X > Y) then
Begin
// Ausgabe X größer Y.
END ELSE IF (X < Y) then
BEGIN
// Ausgabe X kleiner Y.
END;

Im ELSE Teil haben wir nun eine weitere IF Abfrage. Mit der wir prüfen können. Diese IF Else Anweisungen lassen sich auch weiter verschachteln. So könnten wir weiter prüfen ob Zahl 1 = Zahl 2 ist.

Das UML Diagramm dazu:

Abb. 1.07 Das UML Diagramm zur IF ELSE IF Diagramm

Abb. 1.06 Das UML Diagramm zur IF ELSE IF Diagramm

Kommen wir nun zu meiner Beispiel Software.

Abb. 1.08 IF ELSE If Abfrage Beispiel 1

Abb. 1.07 IF ELSE If Abfrage Beispiel 1

Abb. 1.09 IF ELSE If Abfrage Beispiel 2

Abb. 1.08 IF ELSE If Abfrage Beispiel 2

Abb. 1.09 IF ELSE If Abfrage Beispiel 2

Die Klick Funktion des Buttons

procedure TForm1.Button2Click(Sender: TObject);

begin
if (StrToInt(EdtIEFZahl1.text)) < (StrToInt(EdtIEFZahl2.Text)) then
BEGIN
EdtIEFErgebnis.Text := 'Die Zahl1 ist kleiner!';
END ELSE IF (StrToInt(EdtIEFZahl1.text)) > (StrToInt(EdtIEFZahl2.Text)) then
BEGIN
EdtIEFErgebnis.Text := 'Die Zahl 2 ist größer!';
END;
end;

Allgemeines zum Artikel:

Die UML Diagramme wurden mit der kostenlosen Software draw.io erstellt. Die Beispiel Software ist mit 7Zip gepackt und enthält keine Exe Datei. Diese kannst du mit der Lazarus IDE selber erstellen. Einfach auf den grünen Play Button drücken oder die F9 Taste zum kompilieren und starten der Software drucken.

Hier geht es zum Herunterladen der Beispiel Software. Die Software ist 644kb groß.


Winkelmann Software Blog

Wahrheitsoperatoren in Freepascal

In Freepascal gibt es vier Wahrheitsoperatoren das AND, das OR, das XOR und das NOT. Hiermit können wir alle logischen Operatoren nachbilden. Einschließlich das NAND (negatives UND) siehe Beispiel unten. Am Ende gibt es noch eine kleine Wahrheitsoperatoren Software um die Tabellen testen zu können.

Die Wahrheitsoperatoren kommen aus dem Bereich der Digitaltechnik. Der Vollständigkeitshalber zeige ich hier die Mathematischen Formen und die Digitalen Schaltbilder auf. Im Bereich der Digitaltechnik werden für TRUE eine 1 angegeben für FALSE eine 0. Im Bereich der Programmiersprache Free Pascal ist nur FALSE eine 0 und TRUE eine -1 bzw. alles andere.

Wahrheitsoperator loisches AND / logisches UND Gatter

AND Gatter / UND Gatter

Digitales AND Gatter mit Formel und Ergebnistabelle

Hier noch einmal die Tabelle mit der Wahrheitswerten TRUE und FALSE

 Eingang A Eingang B Ergebnis
true false false
true true true
false true false
false false false

Freepascal Code:

and

Wahrheitsoperator logisches OR Gatter / logisches Oder

Digitales OR Gatter mit Formel und Ergebnistabelle

Digitales OR Gatter mit Formel und Ergebnistabelle

Eingang A Eingang B Ergebnis
true false True
true true True
false true True
false false False

Freepascal Code

or

Wahrheitsoperator XOR  (antivalentes oder)

Digitales XOR Gatter mit Formel und Ergebnistabelle

Digitales XOR Gatter mit Formel und Ergebnistabelle

Eingang A Eingang B Ergebnis
true false False
true true TRUE
false true TRUE
false false FALSE

Freepascal Code

xor

Wahrheitsoperator NOT   logische Negation

Alle Eingabe die Null als Eingangs Signal haben werden in 1 Umgewandelt und umgekehrt. Bei einem Oder oder AND Gatter wird eine Negation als runder Kreis dargestellt. Das Oder Gatter wird dann zum NAND und das AND Gatter zum NAND.

Digitales NOT Gatter mit Formel und Ergebnistabelle

Digitales NOT Gatter mit Formel und Ergebnistabelle

E1 A
0 1
1 0

Freepascal Code

not

NAND negatives logisches AND Gatter / UND Gatter als Beispiel

Beispiel Negation eines UND das sogenannte NAND (negatives UND) Freepascal benötigt hier ein NOT AND. bei einem OR Gatter wäre es dann ein NOR.

Wahrheitsoperator NOT Beispiel NAND Negation des AND Operators / UND Operators

Digitales NAND Gatter mit Formel und Ergebnistabelle

Digitales NAND Gatter mit Formel und Ergebnistabelle

 

Eingang A Eingang B Ergebnis
true false True
true true False
false true True
false false True

Winkelmann Software Blog

Freepascal Vergleichsoperatoren

Vergleichsoperatoren

Mit einem Vergleichsoperator können wie der Name schon sagt Vergleiche durchgeführt werden. Die Werte die daraus resultieren sind boolesche Werte (Wahr oder Falsch). Diese werden bei Freepascal wahr engl. true als 1 und falsch engl. false 0 dargestellt. Bei der Darstellung in unserer kleinen Vergleichsoperatoren Software werden die Informationen durch die Funktion boolTostr() in true -1 und false 0 dargestellt.

Software-Vergleichsoperatoren

Abb. 1.01 Software-Vergleichsoperatoren

< Kleiner Operator Beispiele:

  • 5 < 6 gelesen 5 ist kleiner als 6 ergibt true -1
  • 6 < 5 gelesen 6 ist kleiner als 5 ergibt false 0

> Größer Operator Beispiele:

  • 5>6 gelesen 5 ist größer als 6 ergibt false 0
  • 6>5 gelesen 6 ist größer als 5 ergibt true -1

<= Kleiner Gleich Beispiele:

  • 5<=6 gelesen 5 ist kleiner gleich 6 ergibt true -1
  • 6<=5 gelesen 6 ist kleiner gleich 5 ergibt false 0

>= Größer Gleich Beispiele:

  • 5>=6 gelesen 5 ist größer gleich als 6 ergibt false 0
  • 6>=5 gelesen 6 ist größer gleich als 5 ergibt true -1

= Gleich Operator: Beispiele:

  • 5=5 gelesen 5 ist gleich 5 und ergibt true -1
  • 5=6 gelesen 5 ist gleich 6 und ergibt false 0

<>Ungleich Operator: Beispiele:

  • 5<>5 gelesen 5 ist ungleich 5 und ergibt false 0
  • 5<>6 gelesen 5 ist ungleich 6 und ergibt true -1

Meine Beispielsoftware Vergleichsoperatoren kannst du hier als .zip Archiv mit 7Zip erstellt herunterladen. Sie steht als Programmcode für die Lazarus IDE, ohne ausführbare .exe zur Verfügung. Diese kompilierst du indem du das Projekt (.lpi Datei) in Lazarus öffnest, indem du (f9) oder den grünen Play Button drückst.


1 2 3 4 24