Hallo Liebes Delphi Forum,
Also ich bin gerade dabei bisschen mit einem Dynamischen Array zu üben mit Suchfunktion.
Das Programm selber funktioniert so:
- Eingabe der Anzahl der Noten die erzeugt werden sollen
- Klick auf Noten erzeugen(1-6) und sollen in eine Liste eingetragen werden.
- eingabe der gesuchten Zahl
- Suchen Klick soll in einer Showmessage Ausgeben wieviel mal diese Zahl gefunden wurde.
Erstes Problem das bisher auf tratt war ein Overlow. Ich weiß das es mit der Endschlosschelife zutun hat, jedoch komme ich nicht dahinter wieso es zu einem Overflow kommt.
Suchfunktion habe ich eine Lineare Suche eingebaut jedoch keien Ahnung wie er erkennen soll ob es doppelte oder mehrere Einträge geben soll.
Hier der Code
Oberfläche
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls,klasse_oop;
type TForm1 = class(TForm) ListBox1: TListBox; P_Out: TPanel; B_Schnitt: TButton; B_Noten: TButton; B_Anzahl: TButton; E_Anzahl: TEdit; su_in: TEdit; suche: TButton; procedure B_NotenClick(Sender: TObject); procedure B_SchnittClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure B_AnzahlClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure sucheClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private public end;
var Form1: TForm1; Note : TNoten;
implementation
{$R *.dfm}
procedure TForm1.B_AnzahlClick(Sender: TObject); begin Note.SetAnzahl(StrToInt(E_Anzahl.Text)); end;
procedure TForm1.B_NotenClick(Sender: TObject); Var i : Integer; begin
ListBox1.Clear; Note.Noten; for i:= 1 to (Note.GetAnzahl) do Listbox1.Items.Add(IntToStr(Note.GetNoten(i)));
end;
procedure TForm1.B_SchnittClick(Sender: TObject); begin Note.schnitt; P_Out.Caption:=FloatToStr(Note.Getdurchschnitt); end;
procedure TForm1.FormActivate(Sender: TObject); begin randomize; end;
procedure TForm1.FormCreate(Sender: TObject); begin Note := TNoten.Create; end;
procedure TForm1.sucheClick(Sender: TObject); begin Note.SetSuche(StrToInt(su_in.Text)); Note.Suche; Showmessage(Note.GetMeldung); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin note.Destroy; end;
end. |
OOP
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
| unit klasse_oop;
interface
type
TNoten = class (TObject) private FAnzahl : integer; FNoten : array of integer; FSchnitt : double; FSuche : integer; FMeldung: String; public constructor create; procedure Noten; procedure schnitt; procedure Suche; procedure SetAnzahl(A:integer); procedure SetSuche(S:integer); function Getdurchschnitt:double; function GetNoten(i:integer): integer; function GetAnzahl:integer; function GetMeldung:string;
end;
implementation
constructor TNoten.create; begin inherited create;
end;
procedure TNoten.schnitt; var Summe,i: integer; begin summe := 0; For i:= 1 to FAnzahl do summe := (summe + FNoten[i]); FSchnitt := summe/FAnzahl; end;
procedure TNoten.Noten; var i : integer; begin SetLength(FNoten,FAnzahl); for i:=1 to FAnzahl do begin FNoten[i] := random(6)+1; end; end;
procedure TNoten.SetAnzahl(A:integer); begin FAnzahl:= A;
end;
function TNoten.Getdurchschnitt:double; begin result:= FSchnitt; end;
function TNoten.GetNoten(i:integer):integer; begin result:= FNoten[i]; end;
function TNoten.GetAnzahl: integer; begin result:=FAnzahl; end;
procedure TNoten.SetSuche(S:integer); begin FSuche:=S; end;
function TNoten.GetMeldung:string; begin result:= FMeldung; end;
procedure TNoten.Suche; var i: integer; begin FMeldung:= 'false'; i:=0; repeat if FNoten[i] = FSuche then FMeldung:= 'true'; inc(i); until (i=FAnzahl); end;
end. |
Bin noch in den Anfängen was Delphi angeht, jedoch komme ich schon teilweiße sehr gut zurecht.
Danke SkyX
PS.
bin gerade selber drauf gekommen=
ein Array fängt ja bei 0 an jedoch haben meine schleifen bei 1 angefangen und haben falsch runtergezählt:
Delphi-Quelltext
1:
| for i:= 0 to (Note.GetAnzahl)-1 do |