Autor Beitrag
Darkpara
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: Di 03.06.08 23:33 
hi zusammen,

bin noch immer bei bleistift und papier mit meinem problem und hoffe ihr könnt mir weiter helfen.
zu meinem problem, ich will eine funktion machen welche ich in meinem program brauche welche:

als input eine länge (int) annimmt von 2 bis unentlich (wobei bei max 100 schluss sein wird)

und als output eine solche reihe produziert:

wenn input = 2 dann ist der string = 15
wenn input = 3 dann ist der string = 135
wenn input = 4 dann ist der string = 1345
wenn input = 5 dann ist der string = 12345
wenn input = 6 dann ist der string = 123445
wenn input = 7 dann ist der string = 1223445
wenn input = 8 dann ist der string = 12234445
wenn input = 9 dann ist der string = 122234445
wenn input = 10dann ist der string = 1222344445
wenn input = 11dann ist der string = 12222344445
wenn input = 12dann ist der string = 122223444445
ect...

nun wollt ich fragen wie ihr das so macht wenn ihr einen algo sucht/programiert? ich habe versucht eine regelmässigkeit zu finden aber ohne erfolg, klar ist es logisch was die nächsten outputs sind aber wie bring ich das ner funktion bei :)

danke für euere hilfe
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Mi 04.06.08 00:07 
Hallo!

user profile iconDarkpara hat folgendes geschrieben:
ich habe versucht eine regelmässigkeit zu finden aber ohne erfolg, klar ist es logisch was die nächsten outputs sind aber wie bring ich das ner funktion bei :)


Wenn es doch, nach Deiner Aussage, logisch ist, was die nächsten Outputs sind, dann wird es wohl auch eine Regelmäßigkeit geben, oder? :wink:

Und da ich gerade ein wenig Langeweile hatte (Schlafen ist ja eh was für Schwächlinge 8) ) habe ich Dir mal was gebastelt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
function MyFunc(a: byte): string;
var
  i: Integer;
begin
  Result:= '';
  case a of
    0: Result:= '';
    1: Result:= '';
    2: Result:= '15';
    3: Result:= '135';
    4: Result:= '1345';
    5: Result:= '12345';
  else
    begin
      Result:= '1';
      for i := 5 to a do
        if i mod 2 = 1 then
          Result:= Result + '2';
      Result:= Result + '3';
      for i := 6 to a do
        if i mod 2 = 0 then
          Result:= Result + '4';
      Result:= Result + '45';
    end;
  end;
end;


Bis zur 5ten Stelle gibt es IMHO keine Logik, ab der 6ten fängt aber die Logik an; deswegen die case-Auswahl. Der Rest ist schnell zurechtkodiert; mag sein, dass es bessere Möglichkeiten für Dein Problem gibt, meine funktioniert aber soweit ich das beurteilen kann.

Edit:
user profile iconDarkpara hat folgendes geschrieben:
nun wollt ich fragen wie ihr das so macht wenn ihr einen algo sucht/programiert?

Um auch diese Frage zu beantworten: Regelmäßigkeiten finden (das ist manchmal schwierig, manchmal offensichtlich), diese Regeln zu Papier bringen, und, last but not least, das logische Konstrukt in eine Funktion packen. Ein paar Mal mit bekannten Input- und Outputwerten verifizieren, Fertig. (bei Deinem Problem habe ich insgesamt ungefähr 5 Minuten dafür gebraucht)

Bei Deinem Problem ist mir zuerst aufgefallen, dass die 4 bei geraden Stringlängen immer ein Mal öfter vorkommt als die 2, deswegen das Konstrukt mit dem Modulo (bei der 2 auf ungerade prüfen, bei der 4 auf gerade, jeweils mit versetztem Schleifenstartpunkt).
Man muss sowas ein paar Mal gemacht haben, dann bekommt man ein Gefühl dafür. :lol:

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]


Zuletzt bearbeitet von Dunkel am Mi 04.06.08 00:20, insgesamt 2-mal bearbeitet
Darkpara Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: Mi 04.06.08 00:12 
oh super vielen dank!
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Mi 04.06.08 00:22 
por favor :)

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Mi 04.06.08 09:52 
Hallo,

da ist doich Logik drin.
Länge >= 2.

Position_der_3 = (Länge+1) Div 2 (2,3,4,5,6 ->1,2,2,3,3..)
Fülle alles zwischen 1 bis Position_der_3 mit '2'// for i := 2 to Position_der_3-1 do ..
Fülle Ausgabe[Position_der_3] mit '3'
Fülle alles zwischen Position_der_3 bis Länge mit '4'
Ausgabe[1] immer '1'// überschreibt einmal die 3
Ausgabe[länge] ist immer '5'

Gruß Horst
P.S. Ich hoffe es stimmt so...