Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fehlermeldungen aller Art ~ (https://www.delphipraxis.net/164337-fehlermeldungen-aller-art-%7E.html)

SilverSunlight 8. Nov 2011 16:29

Fehlermeldungen aller Art ~
 
Hallö zusammen :) Ich mal wieder.
Ich bastel immernoch an meinem Sortier-Programm herum und bekomme es einfach nicht auf die Reihe. Morgen ist Abgabe .. Ogott.
Für ein paar meiner Fragen hab ich hier im Forum durch rumsuchen und durchlesen schon so meine Antworten gefunden, aber da gibt es noch Sachen, die ich nicht schaffe.
Aaaaalso.
Ich soll eine Datenmenge (Unsortierte Nachnamen) mit Hilfe von 3 Sortieralgorithmen sortieren. Meine Wahl fiel auf Bubblesort, Mergesort, sowie Quicksort. Der Bubble funktioniert auch( YUHU! :-D ), aber bei den anderen beiden hängt es ein bisschen ...
Beim Merge kommt (beim Ausführen des Programms -> Ausführen des Mergesorts) eine Fehlermeldung "Zugriffsverweigerung". Und ich komme einfach nicht dahinter wieso. o_O

Der Quicksort sagt mir ständig eine Meldung nach der anderen, noch bevor ich das Programm überhaupt öffnen kann. Diesmal ist es "Nicht genügend wirkliche Parameter".

Könntet ihr bitte einmal drüber schauen? Vielleicht wisst ihr ja, wo meine Fehler liegen :s

Hier mein Code :oops: :

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Heading: TLabel;
    BubbleButton: TButton;
    QuickButton: TButton;
    MergeButton: TButton;
    OpenButton: TButton;
    Eingabe: TEdit;
    OpenDialog1: TOpenDialog;
    Label2: TLabel;
    Ausgabe: TListBox;
    SaveDialog1: TSaveDialog;
    Speichern: TEdit;
    SaveButton: TButton;
    RadioGroup1: TRadioGroup;
    Aufsteigend: TRadioButton;
    Abfallend: TRadioButton;
    procedure OpenButtonClick(Sender: TObject);
    procedure BubbleButtonClick(Sender: TObject);
    procedure MergeButtonClick(Sender: TObject);
    procedure MergeSort(var L,R: Integer);
    procedure QuickButtonClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  txtfile: Textfile;
  save: string;
  Feld, Merken: Array of string;
  Z: Integer;

implementation

{$R *.DFM}

procedure Quicksort(l,r: Integer;var a : array of integer);

var i, j, Merke, Mitte: Integer;

begin
i := l;
j := r;
Mitte := a[(l+r) div 2];
repeat
while a[i] < Mitte do Inc(i);
while Mitte < a[j] do dec(j);
if i <= j then
begin
Merke := a[i];
a[i] := a[j];
a[j] := Merke;
inc(i);
dec(j);
end;
until i > j;
if l < j then Quicksort(l,j,a);
if i < r then Quicksort(i,r,a);
end;

procedure TForm1.MergeSort(var L, R : integer );
var
  i, j, k, m, m2 : Integer;
begin
if R>L then
begin
m:= (R+L) div 2;
m2:= m+1;
MergeSort( L, m);
MergeSort( m2, R);
for i:= L to m do Merken[i]:= Feld[i];
i:= L;
for j:= m+1 to R do Merken[R+m+1-j]:= Feld[j];
j:= R;
for k:= L to R do
begin
if (Merken[i] < Merken[j]) then
begin
Feld[k]:= Merken[i];
inc(i);
end
else
begin
Feld[k]:= Merken[j];
dec(j);
end;
end;
end;
end;

procedure TForm1.OpenButtonClick(Sender: TObject);
var
A: Integer;
begin
Z:=0;
OpenDialog1.Execute;
Eingabe.Text:=OpenDialog1.Filename;
AssignFile(txtfile, Eingabe.text);
reset (txtfile);
while not eof (txtfile) do
begin
Z:= Z+1;
readln (txtfile, save);
Ausgabe.items.add(save);
end;
Setlength(Feld, Z);
reset(txtfile);
for A:= 0 to Z-1 do
begin
readln (txtfile, Feld[A]);
end;
end;

procedure TForm1.BubbleButtonClick(Sender: TObject);
var
x: Integer;
Temp: String;
Done: Boolean;

begin
Ausgabe.clear;
repeat
done:= True;
for x := Low(Feld) to High(Feld) -1 do
begin
if Feld[x] > Feld[x+1] then
begin
Temp := Feld[x];
Feld[x] := Feld[x+1];
Feld[x+1] := Temp;
Done := False;
end;
end;
until done;

if Aufsteigend.checked=True then
begin
for x:= Low(Feld) to High(Feld) do
begin
Ausgabe.Items.add(Feld[x]);
end;
end

else if Abfallend.checked=True then
begin
for x:= High(Feld) downto Low(Feld) do
begin
Ausgabe.Items.add(Feld[x]);
end;
end;
end;

procedure TForm1.MergeButtonClick(Sender: TObject);
var
g,c,x: Integer;
begin
c:= Low(Feld);
g:= High(Feld);
Ausgabe.clear;
begin
MergeSort (c,g);

if Aufsteigend.checked=True then
begin
for x:= Low(Feld) to High(Feld) do
begin
Ausgabe.Items.add(Feld[x]);
end;
end

else if Abfallend.checked=True then
begin
for x:= High(Feld) downto Low(Feld) do
begin
Ausgabe.Items.add(Feld[x]);
end;
end;
end;
end;

procedure TForm1.QuickButtonClick(Sender: TObject);
var
i,j: Integer;
begin
i:= Low(Feld);
j:= High(Feld);
Ausgabe.clear;
begin
QuickSort (i,j);
end;
end;
end.

DeddyH 8. Nov 2011 16:33

AW: Fehlermeldungen aller Art ~
 
Formatier Deinen Code mal nachvollziehbar und sag uns dann, in welchen Zeilen Fehlermeldungen kommen. Zumindest ich habe keine Lust, mich da durchzuwühlen.

himitsu 8. Nov 2011 16:36

AW: Fehlermeldungen aller Art ~
 
Erstmal empfehle ich dir, die Indexprüfung, in den Projektoptionen zu aktivieren, vorallem wenn man Kreuz und Quer in Arrays rummacht.

Und dann ...
[edit]
DeddyH war schneller

mquadrat 8. Nov 2011 16:39

AW: Fehlermeldungen aller Art ~
 
1. Sprechende Variablennamen verwenden. "i, j, k, m, m2 : Integer;" Wenn du in zwei Monaten noch weißt was m2 macht, haste Glück gehabt.
2. Bei den Fehlern wird auch immer eine Zeile angegeben
3. Der Fehler nennt sich doch sicher "Zugriffsverletzung" und nicht "Zugriffsverweigerung"
4. Deinem Merken-Array im Mergesort weist du nirgends eine Länge zu (oder ich hab's übersehen)
5. Schau dir mal die Signatur deiner Quicksort-Method an. Wieviele Parameter? So und nun den Aufruf anschauen. Wieviele Parameter?

Furtbichler 8. Nov 2011 17:43

AW: Fehlermeldungen aller Art ~
 
Ohne hinzugucken würde ich bei i,j,k auf Zählvariablen tippen. Das ist allgemein so üblich, also alles halb so wild.

Viel lustiger ist, das Du Code abschreibst, den du überhaupt nicht verstehst. Ist es das, was man heutzutage in der Schule lernt? Schade eigentlich.

Bummi 8. Nov 2011 18:40

AW: Fehlermeldungen aller Art ~
 
Der Quicksort ist so in Ordnung, allerdings solltest Du mal nachdenken mit was Du Ihn aufrufen willst

Delphi-Quellcode:
procedure Quicksort(L, R: Integer; [b]var a: array of Integer[/b]);
Da wo Du ihn aufrufen willst übergibst Du a also das zu sortierende Integer Array nicht
statt dessen kruschtelst DUu mit Feld herum welches so deklariert ist
Delphi-Quellcode:
  Feld, Merken: Array of string;

Luckie 8. Nov 2011 19:00

AW: Fehlermeldungen aller Art ~
 
Bitte gib deinem ersten Beitrag einen aussagekräftigen Titel, der auch etwas über das Problem aussagt.

himitsu 9. Nov 2011 06:39

AW: Fehlermeldungen aller Art ~
 
Zitat:

Zitat von mquadrat (Beitrag 1135094)
4. Deinem Merken-Array im Mergesort weist du nirgends eine Länge zu (oder ich hab's übersehen)

Wegen sowas und für fehlgeflaufene Arrayzugriffe, mein Tipp mit den Projektoptionen.

mquadrat 9. Nov 2011 08:30

AW: Fehlermeldungen aller Art ~
 
Zitat:

Zitat von Furtbichler (Beitrag 1135115)
Ohne hinzugucken würde ich bei i,j,k auf Zählvariablen tippen. Das ist allgemein so üblich, also alles halb so wild.

Deshalb hatte ich mich auf m2 bezogen :D

DeddyH 9. Nov 2011 08:34

AW: Fehlermeldungen aller Art ~
 
Hat sich ja wohl mittlerweile von allein erledigt:
Zitat:

Zitat von SilverSunlight (Beitrag 1135091)
Morgen ist Abgabe .. Ogott.


Uwe Raabe 9. Nov 2011 08:52

AW: Fehlermeldungen aller Art ~
 
Zitat:

Zitat von DeddyH (Beitrag 1135214)
Hat sich ja wohl mittlerweile von allein erledigt:
Zitat:

Zitat von SilverSunlight (Beitrag 1135091)
Morgen ist Abgabe .. Ogott.


OT: Ist das eigentlich überall so? Mein Sohn (17) hatte für eine Aufgabenmappe in Informatik (Java Swing) über acht Wochen Zeit. Er weiß, daß er mich jederzeit fragen kann wenn er etwas nicht versteht oder Hilfe braucht (nein, ich löse nicht seine Aufgaben - ich erkläre nur und gebe Tips). Drei Tage vor Abgabe fängt er wirklich damit an und einen Tag vor Abgabe kommt er dann völlig entnervt zu mir und beschwert sich über das Schulsystem...

mquadrat 9. Nov 2011 08:54

AW: Fehlermeldungen aller Art ~
 
Das ist normal. Ich behaupte sogar, dass 80% aller IT-Projekte so laufen :D


EDIT: Nur das man irgendwann nicht mehr über das Schulsystem schimpft, sondern über beliebige andere Sachen ;)

Teekeks 9. Nov 2011 09:00

AW: Fehlermeldungen aller Art ~
 
Ich habe dieses Jahr ja mein Abitur gemacht (und nicht bestanden :( ) und kann deswegen meine Beobachtungen dazu mal hier nieder schreiben (Hölle klingt das Abgehoben...)

Es ist recht üblich erst auf den letzten Drücker anzufangen mit einer Aufgabe, wenn möglich erst am Abend vor der Abgabe. bei größeren Aufgaben auch mitunter schon eine Woche vorher.
Man kann auch tatsächlich konzentrierter Arbeiten wenn man einen gewissen Zeitdruck mit dabei hat, aber helfen tut das auch nicht immer.

Aber dass beschweren über das Schulsystem ist mir noch nicht so unter gekommen. Ist ja auch irgendwie unlogisch. :gruebel:
Das hat ja der TE auch nicht gemacht.

gruß, Teekeks

mquadrat 9. Nov 2011 09:01

AW: Fehlermeldungen aller Art ~
 
Hier im Forum wird auch eher über die Lehrer als über das Schulsystem an sich geschimpft "Unser Lehrer kann das nicht erklären und jetzt müssen wir das aber morgen schon abgeben". Keine Ahnung, wir hofft man das hier schon lesen konnte ;)

DeddyH 9. Nov 2011 09:17

AW: Fehlermeldungen aller Art ~
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1135215)
(nein, ich löse nicht seine Aufgaben - ich erkläre nur und gebe Tips).

Genauso versuchen wir (oder zumindest ich) das hier im Forum ja auch zu handhaben. Es macht ja IMO keinen Sinn, eine ausgefuchste Lösung zu präsentieren, die der TE dann nicht versteht oder gar erklären kann. Aber wenn es bereits zuviel verlangt ist, einen Code wie auch immer nachvollziehbar zu formatieren, dann nehme ich mir die Zeit auch nicht, mir das anzuschauen.

BTW: Ein Bekannter von mir hat mal folgenden Spruch zum Besten gegeben.
Zitat:

Ich liebe das zischende Geräusch der Timeline, wenn sie an mir vorbeirauscht.
:lol:

Uwe Raabe 9. Nov 2011 09:31

AW: Fehlermeldungen aller Art ~
 
Zitat:

Zitat von Teekeks (Beitrag 1135217)
Aber dass beschweren über das Schulsystem ist mir noch nicht so unter gekommen.

Die Formulierung war vielleicht zu allgemein. Genauer gesagt ging es um unfähige/unwissende Informatiklehrer in den vergangenen Jahren, bei denen man halt nicht das lernte, was jetzt von der durchaus fähigen, aber leider auch etwas gestressten, aktuellen Lehrerin als bekannt vorausgesetzt wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 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