AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Kellerspeicher

Ein Thema von hotkey · begonnen am 23. Mai 2012 · letzter Beitrag vom 23. Mai 2012
Antwort Antwort
Seite 1 von 3  1 23   
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#1

Kellerspeicher

  Alt 23. Mai 2012, 17:46
Hallo , ich schreibe morgen endlich die Informatik-LK-Klausur und habe als Übung mal einen Kellerspeicher programmiert , kp , ob es richtig oder falsch ist.

Auf jeden Fall compiliert er alles , aber leider kriege ich noch einen Fehler , der das Compilieren eigentlich behindert.

Hier der Code:

Delphi-Quellcode:
unit Unit1;

interface

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


  type
   Tperson = record
    name : string;
    id:integer;
    end;


    TStack = class
     private
       Keller : array[1..4] of Tperson;
        Stackpos : Integer;
       public
       procedure stackpush(i:integer;s:string);
       function stackpop():integer;
       function stacktop():integer;
       constructor create;
       end;



  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private

    { Private declarations }
    FStack : Tstack;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

constructor tstack.create;
 begin
   Stackpos := -1; // HIER WIRD ES ALS FEHLER MARKIERT ; WAS IST HIER FALSCH ?
   end;



procedure tstack.stackpush(i:integer;s:string);
 begin
   inc(stackpos);
   i := strtoint(form1.Edit1.Text);
   s := form1.edit2.text;
   Keller[Stackpos].id := i;
   Keller[Stackpos].name := s;
   end;


function tstack.stackpop:integer;
 begin
   result := Keller[Stackpos].id;
   dec(stackpos);
   end;


  function tstack.stacktop:integer;
   begin
     result := Keller[Stackpos].id;
     end;






procedure TForm1.Button1Click(Sender: TObject);
var myrec : Tperson;
begin
myrec.name := form1.edit1.text;
myrec.id := strtoint(form1.edit2.text);
fstack.stackpush(strtoint(form1.Edit1.text),'form1.edit2.text');

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
fstack.stacktop;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
fstack.create;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
fstack.Free;
end;

end.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Kellerspeicher

  Alt 23. Mai 2012, 17:59
Und welcher Fehler wird gemeldet? Übrigens:
Zitat:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
fstack.create;

end;
Das sollte wohl
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  fstack := TStack.create;
end;
heißen. Und weshalb Du hier auf die benannte Form-Instanz zugreifst, wo Du doch extra Parameter deklariert hast, wirst wohl nur Du wissen:
Zitat:
Delphi-Quellcode:
procedure tstack.stackpush(i:integer;s:string);
 begin
   inc(stackpos);
   //die beiden folgenden Zeilen sind doch eigentlich kompletter Unsinn
   i := strtoint(form1.Edit1.Text);
   s := form1.edit2.text;
   Keller[Stackpos].id := i;
   Keller[Stackpos].name := s;
   end;
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#3

AW: Kellerspeicher

  Alt 23. Mai 2012, 17:59
Und wie lautet die Fehlermeldung?
PS: Strg+C Funktioniert an vielen Stellen (Inhalte von Fehlerdialogen und auch unten die markierten Compilermeldungen)

Aber eigentlich sieht es OK aus.


[edit]
Etwa Zugriffsverletzung bei Adresse 000000xx?
Tja, das liegt an deinem falschen Create-Aufruf.

Zitat:
Auf jeden Fall compiliert er alles , aber leider kriege ich noch einen Fehler , der das Compilieren eigentlich behindert.
Nja, ich hatte dich so verstanden das der Compiler meckert.
Genauere Fehlerbeschreibungen sind schon eine tolle Angelegenheit.
[/edit]


Nur...
Delphi-Quellcode:
procedure tstack.stackpush(i:integer;s:string);
 begin
   inc(stackpos);
   i := strtoint(form1.Edit1.Text);
   s := form1.edit2.text;
   Keller[Stackpos].id := i;
   Keller[Stackpos].name := s;
 end;
Wieso kennt dein Stack die Form?
Und wozu die Parameter, wenn du es dann sowieso ignorierst und dir selbst holst? (bzw. warum selbst holen, wenn man es bekommt? )


[add]
PS: Wenn du Variablen ala Form1 verwenden mußt, dann machst du zu 99% ganz bestimmt was falsch.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (23. Mai 2012 um 18:04 Uhr)
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#4

AW: Kellerspeicher

  Alt 23. Mai 2012, 18:05
Vielen Dank für die Antworten , jetzt compiliert er :

Habs auch ein bisschen verändert. Ist es jetzt bisschen besser ?

Delphi-Quellcode:
unit Unit1;

interface

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


  type
   Tperson = record
    name : string;
    id:integer;
    end;


    TStack = class
     private
       Keller : array[1..4] of Tperson;
        Stackpos : Integer;
        i:integer;
       public
       procedure stackpush;
       function stackpop():integer;
       function stacktop():integer;
       constructor create;
       end;



  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private

    { Private declarations }
    FStack : Tstack;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

constructor tstack.create;
 begin
   Stackpos := -1;
   end;



procedure tstack.stackpush;
 begin
   inc(stackpos);
   Keller[Stackpos].id := i;
   end;


function tstack.stackpop:integer;
 begin
   result := Keller[Stackpos].id;
   dec(stackpos);
   end;


  function tstack.stacktop:integer;
   begin
     result := Keller[Stackpos].id;
     end;






procedure TForm1.Button1Click(Sender: TObject);
var myrec : Tperson;
begin
myrec.name := form1.edit1.text;
myrec.id := strtoint(form1.edit2.text);
fstack.stackpush;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
fstack.stacktop;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
fstack := tstack.create;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
fstack.Free;
end;

end.
Felix
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#5

AW: Kellerspeicher

  Alt 23. Mai 2012, 18:07


[add]
PS: Wenn du Variablen ala Form1 verwenden mußt, dann machst du zu 99% ganz bestimmt was falsch.
Was meinst du damit ?

Ist das semantisch nicht korrekt ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Kellerspeicher

  Alt 23. Mai 2012, 18:10
Deine TForm1-Instanz muss ja nicht zwangsläufig Form1 heißen. Lass den Namen einfach weg, dann wird das automatisch zu self, greift also auf die eigene Instanz zu.
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var myrec : Tperson;
begin
myrec.name := {form1.}edit1.text;
myrec.id := strtoint({form1.}edit2.text);
fstack.stackpush;

end;
Aber wieso hast Du nun die Parameter bei stackpush rausgeworfen? Welchen Wert soll i denn haben?
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
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#7

AW: Kellerspeicher

  Alt 23. Mai 2012, 18:13
Ich dachte mir eigentlich dabei , dass der Benutzer i selber aussuchen kann , indem er das ins Edit-Feld reinschreibt.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Kellerspeicher

  Alt 23. Mai 2012, 18:17
Was glaubst Du, was mit der lokalen Variablen geschieht, wenn Du aus der Methode wieder rauskommst?
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
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#9

AW: Kellerspeicher

  Alt 23. Mai 2012, 18:18
Stimmt , also liegt die Empfehlung hier , das global zu deklarieren ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Kellerspeicher

  Alt 23. Mai 2012, 18:24
Nimm doch einfach die Parameter wieder rein und weise innerhalb der stackpush-Methode deren Werte dem aktuellen Record zu.
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
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:15 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