Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Transposition (https://www.delphipraxis.net/162723-transposition.html)

foerster7892 2. Sep 2011 19:58

Delphi-Version: 5

Transposition
 
Delphi-Quellcode:
function Transp(w,s:string):string;
var sA:array of array of string;
    xw:string;
    Laenge, yw,i,z,x:integer;
begin
  setlength(sA,length(s), 2);
  for i:= 1 to length(s) do begin
    sA[i,1]:=s[i];
    sA[i,2]:=IntToStr(i);
  end;
  for i:= 1 to length(s) do begin
    x:=i;
    for z := i to length(s) do
        if (ord(StrToInt(sA[x,1])))>(ord(StrToInt(sA[z,1]))) then x:=z;
    xw:=sA[x,1];
    yw:=StrToInt(sA[x,2]);
    sA[x,1]:=sA[i,1];
    sA[x,2]:=sA[i,2];
    sA[i,1]:=xw;
    sA[i,2]:=IntToStr(yw);
  end;//Sortierung und Nummerierung des Schlüssels
  Laenge:=ceil(length(w)/length(s));
  x:=StrToInt(sA[1,2]);
  z:=1;
  for i := 1 to Laenge do begin
    if x>length(w) then
    begin
      inc(z);
      x:=StrToInt(sA[z,2])
    end;
    Transp:=Transp+w[x];
    x:=x+length(s)
  end;
end;//Transpositionsverfahren
Ich bekomme immer so einen blöden Prozessorfehler (SIGSEGV), könnt ihr mir vllt. helfen? Ich meine da sonst keine Fehler auftreten ist es mit solch einer indirekten Fehlermeldung relativ schwierig umzugehen.

Luckie 2. Sep 2011 20:00

AW: Transposition
 
Gib mal einen Beispielaufruf oder benenne die Parameter etwas aussagekräftiger.

Klaus01 2. Sep 2011 20:07

AW: Transposition
 
Hallo,

array of array of String ist 0 basierend.
Du durchläufst das Array aber von 1 bis Länge(s).

Wenn sonnst nichts hilft gdb verwenden.

Grüße
Klaus

Luckie 2. Sep 2011 20:09

AW: Transposition
 
Aber dann müsste eine Access Violation kommen oder?

Klaus01 2. Sep 2011 20:13

AW: Transposition
 
sigsegv
SIGSEGV is the signal sent to a process when it makes an invalid memory reference,

Grüße
Klaus

foerster7892 2. Sep 2011 20:32

AW: Transposition
 
ah k thx werde gleich mal die arrays berichtigen

so nun kommt hier noch eine Fehlermeldung(Ordinal expression expected):
if (ord(sA[x-1,0]))>(ord(sA[z-1,0]))

Warum dies keine Ordinal expression ist weiß ich zwar auch nicht aber ihr könnt mir dies sicher sagen.

himitsu 2. Sep 2011 21:57

AW: Transposition
 
Weil
Delphi-Quellcode:
sA[x-1,0]
einen ganzen String zurück gibt und kein Char.

Du hast 2 Arrays und einen String ... macht 3 Indize, um auch einen Char zuzugreigfen.

Und Projektoptionen > Bereichsprüfung aktivieren (prüfen von Indize)
PS: Damit hättest du deinen Indexfehler selber gefunden.

foerster7892 2. Sep 2011 22:08

AW: Transposition
 
Warum gibt dies einen String zurück?

[x-1, 0] ist doch eine legitime angabe welche Zelle des Arrays ich wähle.

himitsu 2. Sep 2011 22:10

AW: Transposition
 
Code:
array of array of string;
x-1,     0,       ?
Zwei Indize = der Inhalt des zweiten Array und das sind Strings

foerster7892 3. Sep 2011 07:32

AW: Transposition
 
aso lol thx
ich hab es gestern abend einfach nicht gesehen^^


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