AGB  ·  Datenschutz  ·  Impressum  







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

teilweise permutation

Ein Thema von ajaxson · begonnen am 11. Feb 2008 · letzter Beitrag vom 12. Feb 2008
Antwort Antwort
Seite 2 von 2     12   
ajaxson

Registriert seit: 6. Sep 2007
14 Beiträge
 
#11

Re: teilweise permutation

  Alt 11. Feb 2008, 20:12
um jetzt mal wieder zu mir zurück zu kommen

procedure permutation(eingabe:string);
var ergebnis:string;
begin
while x=length(eingabe) -2 do
begin
ergebnis := copy(eingabe,1,1) + permutation(copy(eingabe,2,length(eingabe)-2)) + copy(eingabe,length(eingabe)-1,1);<----die zeile wird als fehler markiert
x:=x+1;
end;
end;

er gibt mir folgende fehlermeldung:[Pascal Fehler] Unit1.pas(79): E2010 Inkompatible Typen: 'string' und 'procedure, untyped pointer or untyped parameter'
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#12

Re: teilweise permutation

  Alt 11. Feb 2008, 20:14
"permutation" ist als procedure deklariert und hat keinen Rückgabewert. Daher der Fehler.
  Mit Zitat antworten Zitat
ajaxson

Registriert seit: 6. Sep 2007
14 Beiträge
 
#13

Re: teilweise permutation

  Alt 11. Feb 2008, 20:20
ok thx^^
  Mit Zitat antworten Zitat
ajaxson

Registriert seit: 6. Sep 2007
14 Beiträge
 
#14

Re: teilweise permutation

  Alt 11. Feb 2008, 20:54
Code:
function permutation(eingabe:string):string;
var ergebnis:string;
begin
while x<>length(eingabe) -2 do
 begin
  x:=x+1;
  ergebnis := copy(eingabe,1,1) + permutation(copy(eingabe,2,length(eingabe)-2)) + copy(eingabe,length(eingabe)-1,1);

  form1.Memo1.Lines.Add(ergebnis);
 end;
  end;
irgendwie funktioniert das nicht...das programm bricht nach ner zeit ab(overflow) und gibt nur ad aus(bei eingabe abcde).
hat jemand schon einmal jemand einen ähnlichen algorithmus geschrieben? Beispiele wären hilfreich.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#15

Re: teilweise permutation

  Alt 12. Feb 2008, 00:33
Wenn du jetzt noch "ergebnis" einfach mal nach Englisch übersetzt, und aus der Variablendeklaration heraus nimmst, bist du schon mal ein großes Stück weiter. Ob ein ordentliches Abbruchkriterium erreicht wird kann ich dank Müdigkeit gerade nicht sehen, ich finde es aber schon seltsam eine while-Schleife in einer Rekursion dort einzusetzen, in der die Rekursion statt findet. Darüber hinaus scheint "x" irgendwo deklariert zu sein, und ist somit wohl auch noch für alle rekursiven Aufrufe das selbe. Macht auf mich grad einen recht planlosen Eindruck, will aber nicht ausschließen dass auch ich morgen nach ein paar Stunden Schlaf erkenne was du da machst

Edit: Also... irgendwie... WAS zum Geier soll da passieren!? Du rufst eine Funktion auf, die die inneren Zeichen eines Strings herauskopiert, und damit rufst du die Funktion nochmal auf. Das tust du sogar noch so oft, wie der String lang ist minus 2. Die rekursiv aufgerufenen Funktionen tun das selbe, nur mit den verkürzten Strings, und gibst diese dann zurück, und schreibst das in ein Memo. Ganz nebenbei zählst du eine Variable irgendwie hoch, die nachher irgendwas wildes enthalten dürfte, aber niemals zum Terminieren der Rekursion führen wird. Das ist von vorne bis hinten Unsinn. Ich empfehle mindestens die Wikipedia-Einträge zur Rekursion und Permutation zu lesen (und verinnerlichen), und zudem ein paar Pascal-Grundlagen ("result" anyone?). Weil wenn wir so weiter machen, wirds ein Geschustere, und am Ende wird irgendwer entnervt einfach eine fertige Funktion posten die du kopieren kannst, aber mehr wissen wirste dann auch nicht.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: teilweise permutation

  Alt 12. Feb 2008, 01:30
Hier mal ein Vorschlag...

Delphi-Quellcode:
procedure permutation(mitte:string; Liste:TStrings);

  procedure permut(links, mitte, rechts:string);
  var i:integer;
      temp:string;
  begin
    if mitte = 'then
      Liste.Append(links + rechts)
    else
      for i:=1 to length(mitte) do begin
        temp:=mitte;
        delete(temp, i, 1);
        permut(links + mitte[i], temp, rechts);
      end;
  end;

var links, rechts:string;
begin
  Liste.Clear;
  links:=copy(mitte, 1, 1);
  delete(mitte, 1, 1);
  rechts:=copy(mitte, length(mitte), 1);
  delete(mitte, length(mitte), 1);
  permut(links, mitte, rechts);
end;

procedure TForm.ButtonClick(Sender: TObject);
begin
  permutation('ABCDEFG', Memo.Lines);
end;
Gruss
Thorsten
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:49 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