AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Access Violation und kein Ende in Sicht

Ein Thema von HackZu · begonnen am 24. Sep 2008 · letzter Beitrag vom 26. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
HackZu

Registriert seit: 27. Aug 2008
15 Beiträge
 
#1

Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 19:50
Hallo, wir programmieren in der Schule zur Zeit einen Bruchrechner und dort erhalten meine Mitschüler und ich immer wieder denselben Fehler, die Lehrerin darauf angesprochen, doch sie weiß anscheinend auch keine Lösung und sagt nur "Da ist irgendwo ein Fehler" Nun gut, da wäre ich auch selbst drauf gekommen. Ich hoffe, dass mir hier vielleicht geholfen werden kann, das Projekt ist zwar jetzt beendet, nur es läuft halt nicht.

Das Formular:

Delphi-Quellcode:
unit fmBruchrechner;

interface

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

type
  TTestBruchrechner = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    LZaehlerErgebnis: TLabel;
    LNennerErgebnis: TLabel;
    EZaehler1: TEdit;
    ENenner1: TEdit;
    EZaehler2: TEdit;
    ENenner2: TEdit;
    BAddition: TButton;
    BMultiplikation: TButton;
    BSubtraktion: TButton;
    BDivision: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    BEnde: TButton;
    BClear: TButton;
    BDezimalzahl: TButton;
    LDezimalzahl: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure BEndeClick(Sender: TObject);
    procedure BClearClick(Sender: TObject);
    procedure setzeEingabe;
    procedure BAdditionClick(Sender: TObject);
   
  private
    { Private declarations }
  public
    hatBruch1:Bruch;
    hatBruch2:Bruch;
    hatErgebnisbruch:Bruch;
    hatBruchrechner:Bruchrechner;
  end;

var
  TestBruchrechner: TTestBruchrechner;

implementation

{$R *.dfm}

procedure TTestBruchrechner.FormCreate(Sender: TObject);
begin
  hatBruch1.init;
  hatBruch2.init;
  hatErgebnisbruch.init;
  hatBruchrechner.init;
end;

procedure TTestBruchrechner.FormDestroy(Sender: TObject);
begin
  hatBruch1.gibFrei;
  hatBruch2.gibFrei;
  hatErgebnisbruch.gibFrei;
  hatBruchrechner.gibFrei;
end;

procedure TTestBruchrechner.BEndeClick(Sender: TObject);
begin
  close;
end;

procedure TTestBruchrechner.BClearClick(Sender: TObject);
begin
  EZaehler1.Text:='';
  ENenner1.Text:='';
  EZaehler2.Text:='';
  ENenner2.Text:='';
  LZaehlerErgebnis.Caption:='';
  LNennerErgebnis.Caption:='';
  LDezimalzahl.Caption:='';
end;

procedure TTestBruchrechner.setzeEingabe;
begin
  hatBruch1.setzeZaehler(StrToInt(EZaehler1.Text));
  hatBruch1.setzeNenner(StrToInt(ENenner1.Text));
  hatBruch2.setzeZaehler(StrToInt(EZaehler2.Text));
  hatBruch2.setzeNenner(StrToInt(ENenner2.Text));
end;

procedure TTestBruchrechner.BAdditionClick(Sender: TObject);
begin
  self.setzeEingabe;
  hatBruchrechner.Addition(hatBruch1, hatBruch2);
  LZaehlerErgebnis.Caption:=IntToStr(hatErgebnisbruch.gibZaehler);
  LNennerErgebnis.Caption:=IntToStr(hatErgebnisbruch.gibNenner);
end;

end.
Die Unit mBruch:
Delphi-Quellcode:
unit mBruch;

interface

uses Math;

type Bruch=class
  private
        zZaehler : integer;
        zNenner : integer;

  protected

  public
        constructor init;
        procedure setzeZaehler (pZaehler : integer);
        procedure setzeNenner (pNenner : integer);
        function gibZaehler : integer;
        function gibNenner : integer;
        function gibDezimalzahl : Extended;
        function ggt(zZaehler,zNenner:integer): integer;
        procedure ErweitereUm(pFaktor : integer);
        procedure KuerzeUm(pFaktor : integer);
        procedure KuerzeVoll;
        //procedure KehreUm ;
        destructor gibFrei ;
  published

end;

implementation
{Bruch}

constructor Bruch.init;
begin
  zZaehler:=0;
  zNenner:=1;
end;

procedure Bruch.setzeZaehler(pZaehler:integer);
begin
   if zNenner <> 0 then
   begin
    zZaehler:=pZaehler;
   end;
end;

procedure Bruch.setzeNenner(pNenner:integer);
begin
   if zZaehler <> 0 then
   begin
    zNenner:=pNenner;
   end;
end;

function Bruch.gibZaehler;
begin
    result:=zZaehler;
end;

function Bruch.gibNenner;
begin
   result:=zNenner;
end;

function Bruch.GibDezimalzahl;
begin
  result:= zZaehler/zNenner;
end;

procedure Bruch.ErweitereUm(pFaktor: integer);
begin
        if pFaktor <> 0 then
        begin
                zZaehler:=zZaehler*pFaktor;
                zNenner:=zNenner*pFaktor;
        end;
end;

procedure Bruch.KuerzeUm(pFaktor: integer);
begin
       if (zZaehler mod pFaktor = 0) and (zNenner mod pFaktor = 0) then
         zZaehler := zZaehler div pFaktor;
         zNenner := zNenner div pFaktor;
end;

function Bruch.ggt(zZaehler,zNenner:integer): integer;
begin
  if zZaehler = zNenner then result := zZaehler
  else
  result := ggt(min(zNenner,zZaehler), abs(zZaehler-zNenner));
end;

procedure Bruch.KuerzeVoll;
begin
  self.KuerzeUm(ggT(zZaehler,zNenner));
end;

destructor Bruch.gibFrei;
begin

end;


end.
und die Unit mBruchrechner
Delphi-Quellcode:
unit mBruchrechner;

interface

 uses mBruch;
 type Bruchrechner=class
   private

   public
     constructor init;
     function Addition(pBruch1,pBruch2: Bruch): Bruch;
     function Subtraktion(pBruch1,pBruch2: Bruch): Bruch;
     function Multiplikation(pBruch1,pBruch2: Bruch): Bruch;
     function Division(pBruch1,pBruch2: Bruch): Bruch;
     destructor gibFrei;

end;

implementation {Bruch}

constructor Bruchrechner.init;
begin
end;

destructor Bruchrechner.gibFrei;
begin
end;

function Bruchrechner.Addition(pBruch1,pBruch2: Bruch): Bruch;
begin
  result:=Bruch.init;
  result.setzeNenner(pBruch2.gibNenner * pBruch1.gibZaehler);
  result.setzeZaehler(pBruch1.gibZaehler * pBruch2.gibNenner + pBruch2.gibZaehler * pBruch1.gibNenner);
  result.KuerzeVoll;
end;

function Bruchrechner.Subtraktion(pBruch1,pBruch2: Bruch): Bruch;
begin
  result:=Bruch.init;
  result.setzeNenner(pBruch2.gibNenner * pBruch1.gibZaehler);
  result.setzeZaehler(pBruch1.gibZaehler * pBruch2.gibNenner - pBruch2.gibZaehler * pBruch1.gibNenner);
  result.KuerzeVoll;
end;

function Bruchrechner.Multiplikation(pBruch1,pBruch2: Bruch): Bruch;
begin
  result:=Bruch.init;
  result.setzeZaehler(pBruch1.gibZaehler * pBruch2.gibZaehler);
  result.setzeNenner(pBruch1.gibNenner * pBruch2.gibNenner);
  result.KuerzeVoll;
end;

function Bruchrechner.Division(pBruch1,pBruch2: Bruch): Bruch;
begin
  result:=Bruch.init;
  result.setzeZaehler(pBruch1.gibZaehler * pBruch2.gibNenner);
  result.setzeNenner(pBruch1.gibNenner * pBruch2.gibZaehler);
  result.KuerzeVoll;
end;
end.
http://img3.imagebanana.com/img/qq0z...ruchAccess.JPG

Eventuell hat ja jemand Lust und Zeit und findet den Fehler, die Units sind einem "Lösungs"zettel der Lehrerin entsprechend.

Mit freundlichen und um kompetente Hilfe bittenden Grüßen
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 19:52
Einen Constrcutor nennt man i.A. Create und nicht init. Das wäre aber noch egal.
Wichtig ist: Das Instanzieren eines Objektes aus einer Klasse erfolgt mit "myClass:=Tmyclass.create"
Also: hatBruch1:=TBruch.init;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 19:53
Ich hab den Quelltext jetzt nicht angeschaut ober die Adresse (Read of address) deutet darauf hinn das du ein Object nicht erzeugt hast.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 20:01
Soll das jetzt Delphi sein oder TurboPascal?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
HackZu

Registriert seit: 27. Aug 2008
15 Beiträge
 
#5

Re: Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 20:07
Zitat von sirius:
Einen Constrcutor nennt man i.A. Create und nicht init. Das wäre aber noch egal.
Wichtig ist: Das Instanzieren eines Objektes aus einer Klasse erfolgt mit "myClass:=Tmyclass.create"
Also: hatBruch1:=TBruch.init;
Habe das mal versucht, da gibt es noch mehr Fehler.

Zitat von DeddyH:
Soll das jetzt Delphi sein oder TurboPascal?
Uns wird das als Delphi verkauft.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 20:08
und solange du uns die weiteren Fehler verschweigst können wir auch nur schweigen und nicht helfen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
HackZu

Registriert seit: 27. Aug 2008
15 Beiträge
 
#7

Re: Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 20:15
So habe ich das jetzt geändert:

Delphi-Quellcode:
unit fmBruchrechner;

interface

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

type
  TTestBruchrechner = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    LZaehlerErgebnis: TLabel;
    LNennerErgebnis: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    LDezimalzahl: TLabel;
    EZaehler1: TEdit;
    ENenner1: TEdit;
    EZaehler2: TEdit;
    ENenner2: TEdit;
    BAddition: TButton;
    BMultiplikation: TButton;
    BSubtraktion: TButton;
    BDivision: TButton;
    BEnde: TButton;
    BClear: TButton;
    BDezimalzahl: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure BEndeClick(Sender: TObject);
    procedure BClearClick(Sender: TObject);
    procedure setzeEingabe;
    procedure BAdditionClick(Sender: TObject);
  private
    { Private declarations }
  public
    hatBruch1:TBruch.init;
    hatBruch2:TBruch.init;
    hatErgebnisbruch:TBruch.init;
    hatBruchrechner:TBruchrechner.init;
  end;
Da kommen dann folgende Fehler:

Delphi-Quellcode:
[Error] fmBruchrechner.pas(37): Undeclared identifier: 'TBruch'
[Error] fmBruchrechner.pas(37): ',or ':' expected but ';' found
[Error] fmBruchrechner.pas(38): ';' expected but '.' found
[Error] fmBruchrechner.pas(39): ';' expected but '.' found
[Error] fmBruchrechner.pas(40): Undeclared identifier: 'TBruchrechner'
[Error] fmBruchrechner.pas(40): ';' expected but '.' found
[Error] fmBruchrechner.pas(41): Type expected but 'END' found
[Error] fmBruchrechner.pas(52): Missing operator or semicolon
[Error] fmBruchrechner.pas(53): Missing operator or semicolon
[Error] fmBruchrechner.pas(54): Missing operator or semicolon
[Error] fmBruchrechner.pas(55): Missing operator or semicolon
[Error] fmBruchrechner.pas(62): Missing operator or semicolon
[Error] fmBruchrechner.pas(63): Missing operator or semicolon
[Error] fmBruchrechner.pas(64): Missing operator or semicolon
[Error] fmBruchrechner.pas(65): Missing operator or semicolon
[Fatal Error] pBruchrechner.dpr(7): Could not compile used unit 'fmBruchrechner.pas'
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 20:18
Du solltest auch etwas mitdenken. Wenn deine Klasse nicht TBruch heißt sondern anders kann er natürlich TBuch auch nicht finden. Der allgemein Syntax heißt einfach:
Klasseninstanz := TKlasse.DerConstructor(eventuelleParameter);
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
HackZu

Registriert seit: 27. Aug 2008
15 Beiträge
 
#9

Re: Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 20:23
Zitat von SirThornberry:
Du solltest auch etwas mitdenken. Wenn deine Klasse nicht TBruch heißt sondern anders kann er natürlich TBuch auch nicht finden. Der allgemein Syntax heißt einfach:
Klasseninstanz := TKlasse.DerConstructor(eventuelleParameter);
Logisch, mein Fehler.

Delphi-Quellcode:
  public
    hatBruch1:Bruch.init;
    hatBruch2:Bruch.init;
    hatErgebnisbruch:Bruch.init;
    hatBruchrechner:Bruchrechner.init;
  end;
Fehler:

Delphi-Quellcode:
[Error] fmBruchrechner.pas(37): ';' expected but '.' found
[Error] fmBruchrechner.pas(38): ';' expected but '.' found
[Error] fmBruchrechner.pas(39): ';' expected but '.' found
[Error] fmBruchrechner.pas(40): ';' expected but '.' found
[Error] fmBruchrechner.pas(41): Type expected but 'END' found
[Fatal Error] pBruchrechner.dpr(7): Could not compile used unit 'fmBruchrechner.pas'

Oder muss das unter type und nicht unter public?
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Access Violation und kein Ende in Sicht

  Alt 24. Sep 2008, 20:26
was dir SirThornBerry sagen will ist das:

Delphi-Quellcode:
  public
    hatBruch1:Bruch;
    hatBruch2:Bruch;
    hatErgebnisbruch:Bruch;
    hatBruchrechner:Bruchrechner;
  end;

var
  TestBruchrechner: TTestBruchrechner;

implementation

{$R *.dfm} 

procedure TTestBruchrechner.FormCreate(Sender: TObject);
begin
  //myClass := Tmyclass.create
  //.init = .create

  hatBruch1 := Bruch.init;
  hatBruch2 := Bruch.init;
  hatErgebnisbruch := Bruch.init;
  hatBruchrechner := Bruchrechner.init;
end;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 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