![]() |
Haus vom Nikolaus algo
Hallo, ich versuche seit gestern einen algo zu programieren der mir alle Lösungen vom Huas vom Nikolaus findet
nach zahlreichen versuchen hab ich dann versucht denn c algo von dieser seite: ![]() vielleicht könnt ihr mir ja sagen wo meine fehler liegen hier mein code:
Delphi-Quellcode:
weiß jemand wodurch dieser range error kommt?
unit nikolaus;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; matrx: Array[1..5] of string; function nikohaus(matrix:array of string; const kn:integer; count:integer):string; implementation {$R *.dfm} function nikohaus(matrix:array of string; const kn:integer; count:integer):string; //noch keine rückgabem, weiß auch noch nicht genau wie ich die machen soll var i: integer; begin for i := 1 to 5 do begin if matrix[kn][i] = '1' then begin if count = 7 then exit; showmessage(matrix[kn]); matrix[kn][i] := '0'; matrix[i][kn] := '0';//nach einigen duchgängen bekomme ich hier immer die exception ERage Error nikohaus(matrix, i, count + 1);//with message "range check error" matrix[kn][i] := '1'; matrix[i][kn] := '1'; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin matrx[1] := '01110'; // ich hab statt den innerenarrays strings genommen weil sie leichter zuzuweisen sind matrx[2] := '10110';//(weniger schreibarbeit) matrx[3] := '11011'; matrx[4] := '11101'; matrx[5] := '00110'; end; procedure TForm1.Button1Click(Sender: TObject); var s:string; begin nikohaus(matrx, 1, 0); end; end. und kann mir jemand einen tipp geben wie ich die rückgabe sinnvoll gestallte? freue mich auf eure antworten, grüße, David |
Re: Haus vom Nikolaus algo
Moin,
auf der Seite steht: for(i=0;i<5;i++) Also sollte deine Schleife nur von 1..4 gehen. MfG Thorsten |
Re: Haus vom Nikolaus algo
ja, aber da ich bei eins beginne ( mach ich weil der index von strings anscheinend mit eins beginnt) muss ich doch um alle
5 elemente in dem string zu durchlaufen for i:= 1 to 5 schreiben |
Re: Haus vom Nikolaus algo
Du könntest dir
![]() |
Re: Haus vom Nikolaus algo
So, habe mich nochmal damit beschäftigt.
Hier mal das übersetzte C-Programm von der oben erwähnten Seite...
Delphi-Quellcode:
Das Ganze ist eine Konsolenanwendung.
program Nikolaus;
{$APPTYPE CONSOLE} uses SysUtils; type TZeichen = 0..1; TArray = array[0..4, 0..4] of TZeichen; const mtrx:TArray = ( (0, 1, 1, 1, 0), (1, 0, 1, 1, 0), (1, 1, 0, 1, 1), (1, 1, 1, 0, 1), (0, 0, 1, 1, 0) ); var zaehl:array[0..9] of integer; procedure haus_rek(mtrx:TArray; const start:integer; const kn:integer; const count:integer; weg:string); var i:integer; weg_neu:string; begin for i:=0 to 4 do begin if mtrx[kn][i] = 1 then begin weg_neu:=weg + '->' + inttostr(i); if count = 7 then begin inc(zaehl[start]); if start = 0 then writeln(zaehl[start]:2,': ', weg_neu); exit; end; mtrx[kn][i]:=0; mtrx[i][kn]:=0; haus_rek(mtrx, start,i, count+1, weg_neu); mtrx[kn][i]:=1; mtrx[i][kn]:=1; end; end; inc(zaehl[start+5]); end; var i:integer; weg:string; begin weg:=''; for i:=0 to 9 do zaehl[i]:=0; writeln('Konstruktionsmoeglichkeiten vom Knoten 0 aus:'); for i:=0 to 4 do begin weg:=inttostr(i); haus_rek(mtrx, i, i, 0, weg); end; for i:=0 to 4 do writeln('-> Von Knoten ', i, ' aus gibt es ', zaehl[i], ' Moeglichkeiten, ', zaehl[i+5], ' Sackgassen.'); end. MfG Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz