Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   oop-lerne es gerade neu-problem (https://www.delphipraxis.net/102987-oop-lerne-es-gerade-neu-problem.html)

mr_emre_d 7. Nov 2007 23:50


oop-lerne es gerade neu-problem
 
Wie schon die Überschrift sagt habe ich ein Problem.
Jedesmal wenn ich den Button "ändern mit class" anklicke, kommt das:

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at adress 00403499 in module 'Project1.exe'. Read of address 00000000'.Process stopped. Use step or Run to continue.

Was das ooprogrammieren angeht: ich lerne sie gerade neu in der schule (ca 2-3 Wochen); unser prof. hat es vermieden, uns vorher die records beizubringen... und nun hab ich mal selbst etwas versucht aber ..gescheiter -> bitte um Verständnis(da ich noch ein Noob bin)

Weiß nicht wo ich es hinposten soll, deshalb poste ich es mal hier hin. Bitte moven falls es nicht hier hin gehört
Ich poste mal das ganze Programm:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
    zahlen:array[0..4]of integer;

  public
    { Public declarations }
  end;

  mathe = class //mir ist nichts besseres eingefallen, wie unkreativ nicht?
    mwert,kl,gr:integer;
    procedure rechnen;
  end;


var
  Form1: TForm1;
  m: mathe;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
 for i:=0 to 4 do begin
  zahlen[i]:=random(50)+1;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.width:=280;
form1.height:=140;
memo1.clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
memo1.Clear;
 for i:=0 to 4 do memo1.lines.add( (inttostr(zahlen[i]) ));
end;

{ mathe }

procedure mathe.rechnen;
var i,sum:integer;
begin
m.create;
sum:=0;
kl:=51;
gr:=0;
  for i:=0 to 4 do begin
                   sum:=sum+form1.zahlen[i];
                   if form1.zahlen[i]< kl then kl:=form1.zahlen[i];
                   if form1.zahlen[i]>gr then gr:=form1.zahlen[i];
                   form1.memo1.lines.add(inttostr(form1.zahlen[i]));
                   form1.Memo1.lines.add(inttostr(sum));
                   form1.Memo1.lines.add(inttostr(mwert));
                   form1.Memo1.lines.add(inttostr(gr));
                   form1.Memo1.lines.add(inttostr(kl));
                   end;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
m.rechnen;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
showmessage('"init"= zufällige Zahlen werden erzeugt'#13'"einfügen"=init wird in memo1 angezeigt'#13'"ändern mit (einer) class(e)" = aus init wird der Summe aller vorhandenen Zahlen im init,Mittelwert,größter und kleinster Wert!'#13'"Über"=das hier^^');
end;

end.
Übrigens: Es ist mit Delphi 7 Ent geschrieben worden

mfg

Nuclear-Ping 8. Nov 2007 00:09

Re: oop-lerne es gerade neu-problem
 
Du musst (in der Regel) eine Klasse "instanzieren", bevor du sie benutzen und auf deren Methoden und Eigenschaften zugreifen kannst.
Delphi-Quellcode:
m := mathe.Create;

statt

m.Create;
Solche Instanzen musst (bzw. solltest) du auch irgendwann, wenn du sie nicht mehr benötigst, per FreeAndNil oder Klasse.Free wieder freigeben.

Weiterhin würde ich dir empfehlen, Typdeklarationen ein "T..." voranzustellen. "TMathe" z.B., denn das entspricht der Pascal-Sprachkonvention.

Und wenn wir schon bei OOP sind: Lege "m: mathe" (bzw. "m: TMathe") als "private" oder "public" Eigenschaft der TForm-Klasse an. Solche sog. "globalen Variablen" sind in einem Atemzug mit "OOP" genannt, garnicht gern gesehen. ;)

mr_emre_d 8. Nov 2007 00:25

Re: oop-lerne es gerade neu-problem
 
vielen danke
ich probiers gleich aus
mfg

mr_emre_d 9. Nov 2007 14:19

Re: oop-lerne es gerade neu-problem
 
ich hätte da noch eine frage:
wie kann man float zu char ,oder umgekehrt, konvertieren?
(sowie inttostr, strtoint,....)
mir ist klar das floattochr & chrtofloat nicht funzen

mfg

Progman 9. Nov 2007 14:22

Re: oop-lerne es gerade neu-problem
 
mit FloatToStr oder FloatToStrF

Phoenix 9. Nov 2007 14:25

Re: oop-lerne es gerade neu-problem
 
Zitat:

Zitat von mr_emre_d
wie kann man float zu char ,oder umgekehrt, konvertieren?

:?:

Das macht _keinen_ Sinn. Float ist eine Fließkommazahl. Also eine Zahl mit Nachkommastellen.
Ein Char ist ein einzelnes Zeichen. Wenn in dem Char zufällig eine Ziffer drinsteht, dann ist das auch nur eine Ziffer, also eine Ganzzahl. Also würde _wenn überhaupt_, nur eine Char <-> Integer konvertierung Sinn machen. Aber auch das ist nicht vorgesehen.

Also lieber das Zeichen in einen String packen und den String dann mit den Dir bekannten Methoden konvertieren.

mr_emre_d 9. Nov 2007 14:28

Re: oop-lerne es gerade neu-problem
 
ok thx

DP-Maintenance 9. Nov 2007 14:50

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage.

grenzgaenger 9. Nov 2007 20:29

Re: oop-lerne es gerade neu-problem
 
sag mal, wo liegt deine parmaeter übergabe...????

bei 'n aufruf eines objekts, soll das objekt normal alle parmeter besitzen, welches es braucht um die aufgaben durchzuführen... also 'n zürückgreifen auf globale variablen, in deinem fall auf die variabelen eines imaginaären objekts, ist schon recht kriminell...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz