Delphi Grundkurs Seite 31 Beispiel 9 Notenanalyse Problem: Programm P09 Schulnoten in Editfeld eingeben: bei <ENTER> wird Text in Zahl x umgewandelt; Bei Eingabefehler (x < 1 oder x > 5 oder x nicht numerisch) Anzeige durch MessageBox Editfeld wird gelöscht neuerliche Eingabe; Häufigkeitsanalyse und statistische Auswertung. Formulardesign: Listing: unit P09_U; // Notenanalyse interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Printers; type TForm1 = class(tform) Label1 : TLabel; // Beschriftungen Label2 : TLabel; Label3 : TLabel; Label4 : TLabel; Label5 : TLabel; Edit1 : TEdit; // Noteneingabe (mit ENTER) Memo1 : TMemo; // Datenausgabe Button1: TButton; // Start Button2: TButton; // Berechnen
Delphi Grundkurs Seite 32 Button3: TButton; // Drucken Button4: TButton; // Beenden Bevel1 : TBevel; procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } var Form1: TForm1; implementation {$R *.DFM} const NotNam : array[1..5] of String = ('Sehr gut', 'Gut', 'Befriedigend', 'Genügend', 'Nicht genügend'); const MAX = 100; // max. Notenanzahl type HAUF = array[1..5] of Integer; // Typisieren var NOTEN : array[1..max] of Integer; // Noten HN : HAUF; // Häufigkeiten ANZ : Integer; // Notenanzahl MWT : Real; // Mittelwert; STREU : Real; // Streuung; procedure Nullieren(var HN : HAUF); // Löschen aller Notenhäufigkeiten var I : Integer; For I := 1 to 5 do HN[I] := 0; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); // Abfrage, ob ENTER-Taste gedrückt var T : string; X, Code : Integer; If (Sender = Edit1) and (Key = Chr(13)) then T := Edit1.Text; Val(T,X,Code); If (Code = 0) and (X >= 1) and (X <= 5) then ANZ := ANZ + 1; NOTEN[ANZ] := X; Label5.Caption := 'Anzahl = ' + IntToStr(ANZ); end else ShowMessage('Eingabefehler!'); Edit1.Setfocus;
Delphi Grundkurs Seite 33 procedure TForm1.Button1Click(Sender: TObject); // Initialisieren Label5.Caption := 'Anzahl = 0'; Memo1.Lines.Clear; Edit1.SetFocus; ANZ := 0; Nullieren(HN); procedure TForm1.Button2Click(Sender: TObject); // Berechnung und Ausgabe var SUM, QSUM, X, I : Integer; T : String; If ANZ = 0 then Exit; // Berechnen der Datenwerte SUM := 0; QSUM := 0; Nullieren(HN); For I := 1 to ANZ do X := NOTEN[I]; SUM := SUM + X; QSUM := QSUM + X*X; HN[X] := HN[X] + 1; MWT := SUM/ANZ; STREU := SQRT(QSUM/ANZ - MWT*MWT); // Ausgeben der Datenwerte Memo1.Lines.Clear; Memo1.Lines.Add(''); Memo1.Lines.Add('Notenhäufigkeiten:'); Memo1.Lines.Add('--------------------------------'); For I := 1 to 5 do X := HN[I]; Str(X:4, T); T := T + ' ' + NotNam[I]; Memo1.Lines.Add(T); Memo1.Lines.Add('--------------------------------'); Str(ANZ, T); Memo1.Lines.Add('Notenanzahl = ' + T); Str(MWT:5:2, T); Memo1.Lines.Add('Notenmittelwert = ' + T); Str(STREU:5:2, T); Memo1.Lines.Add('Notenstreuung = ' + T);
Delphi Grundkurs Seite 34 procedure TForm1.Button3Click(Sender: TObject); // Memozeilen drucken var PText : TextFile; I : Integer; AssignPrn(PText); ReWrite(PText); For I := 0 to Memo1.Lines.Count-1 do WriteLn(PText, Memo1.Lines[I]); CloseFile(PText); procedure TForm1.Button4Click(Sender: TObject); Application.Terminate; end.
Delphi Grundkurs Seite 35 Beispiel 10 Würfeln Problem: Randomize; Programm P10 Anzahl (ANZ) der Würfe in einem Editfeld eingeben; Zufallsgenerator einschalten; Der Computer erzeugt ANZ Zufallszahlen zwischen 1 und 6: Ausgabe in Memofeld: 1... xx % 2... yy %... 6... zz % // internen Zufallsgenerator initialisieren Eintragen in Ereignis (Event) OnActivate Für alle Befehle, die man nur 1 x braucht. X := Random; 0.. 1 Real Formulardesign: X := Random(N); 0, 1,..., N-1 1, 2,..., N X := Random(N) + 1; Listing: unit P10_U; // Würfeln interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Printers;
Delphi Grundkurs Seite 36 type TForm1 = class(tform) Label1 : TLabel; // Beschriftungen Label2 : TLabel; Label3 : TLabel; Edit1 : TEdit; Memo1 : TMemo; // Ausgabe der Häufigkeiten Button1: TButton; // Clear Button2: TButton; // Run Button3: TButton; // Print Button4: TButton; // Quit Bevel1 : TBevel; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } var Form1: TForm1; implementation {$R *.DFM} const WNam : Array[1..6] of String = ('1er', '2er', '3er', '4er', '5er', '6er'); type HAUF = Array[1..6] of Integer; // Typisieren var ANZ : Integer; // Anzahl der Würfe AUZ : HAUF; // Augenzahl PROZ : Real; // Prozent Procedure Nullieren(var AUZ : Hauf); var I : Integer; For I := 1 to 6 do AUZ[I] := 0; procedure TForm1.FormActivate(Sender: TObject); Randomize; procedure TForm1.Button1Click(Sender: TObject); // Löschen der Eingabefelder Memo1.Lines.Clear; Edit1.SetFocus;
Delphi Grundkurs Seite 37 ANZ := 0; PROZ := 0; Nullieren(AUZ); procedure TForm1.Button2Click(Sender: TObject); // Berechnung und Ausgabe var I, Code, X, Y : Integer; T, U : String; T := Edit1.Text; Val(T, ANZ, Code); If (ANZ = 0) or (Code <> 0) then ShowMessage('Eingabefehler!'); Edit1.Setfocus; For I := 1 to ANZ do Y := Random(6) + 1; AUZ[Y] := AUZ[Y] + 1; // Ausgabe If ANZ = 0 then Exit; Memo1.Lines.Clear; Memo1.Lines.Add('Auswertung der Würfe'); Memo1.Lines.Add(''); For I := 1 to 6 do X := AUZ[I]; If ANZ <> 0 then PROZ := X / ANZ * 100; Str(X, T); Str(PROZ:5:2, U); T := T + ' x ' + WNam[I] + ', das sind ' + U + ' %'; Memo1.Lines.Add(T); procedure TForm1.Button3Click(Sender: TObject); // Programm beenden Application.Terminate; procedure TForm1.Button4Click(Sender: TObject); // Formular ausdrucken PrintScale := poproportional; Print; end.
Delphi Grundkurs Seite 38 Beispiel 11 Zahlen raten Programm P11 Problem: Der Zufallsgenerator erzeugt eine Zahl Z zwischen 1 und 100. Diese ist möglichst schnell zu erraten. Formulardesign: Listing: unit P11_U; // Zahlen raten interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Printers; type TForm1 = class(tform) Label1 : TLabel; // Beschriftungen Label2 : TLabel; Label3 : TLabel; Label4 : TLabel; Label5 : TLabel; Label6 : TLabel; Edit1 : TEdit; // Zahleneingaben Memo1 : TMemo; // Ergebnisausgabe Button1: TButton; // Beginnen Button2: TButton; // Beenden Button3: TButton; // Drucken procedure FormActivate(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char);
Delphi Grundkurs Seite 39 procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } var Form1: TForm1; implementation {$R *.DFM} var RATEZ, ZUFALLSZ, ANZ : Integer; procedure TForm1.FormActivate(Sender: TObject); // Zufallsgenerator einschalten Randomize; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); // Abfrage, ob ENTER gedrückt var T : String; X, Code : Integer; if (Sender = Edit1) and (Key = Chr(13)) then T := Edit1.Text; Val(T, X, Code); if (Code = 0) and (X >= 1) and (X <= 100) then ANZ := ANZ + 1; RATEZ := X; if RATEZ > ZUFALLSZ then Memo1.Lines.Add(IntToStr(RATEZ)+' ist zu groß!'); Label6.Caption := 'Versuch '+ IntToStr(ANZ); if RATEZ = ZUFALLSZ then Memo1.Lines.Add(IntToStr(RATEZ)+'! ERRATEN!'); Label6.Caption := 'Versuch '+ IntToStr(ANZ); if RATEZ < ZUFALLSZ then Memo1.Lines.Add(IntToStr(RATEZ)+' ist zu klein!'); Label6.Caption := 'Versuch '+ IntToStr(ANZ); end else ShowMessage('Eingabefehler!'); Edit1.SetFocus;
Delphi Grundkurs Seite 40 procedure TForm1.Button1Click(Sender: TObject); // Initialisieren Memo1.Lines.Clear; Label6.Caption := 'Versuch 0'; Edit1.Setfocus; ANZ := 0; ZUFALLSZ := Random(99) + 1; procedure TForm1.Button2Click(Sender: TObject); // Programm beenden Application.Terminate; procedure TForm1.Button3Click(Sender: TObject); // Formular ausdrucken PrintScale := poproportional; Print; end.