[Delphi] Hoe beste functie schrijven die getallen

Pagina: 1
Acties:

  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 07-09 09:15

Hu9o

Schokkend

Topicstarter
Hallo,

Ik kan hier wel een heel verhaal neer zetten, maar het wordt denk ik het snelst duidelijk als ik ff een voorbeeld neerzet.
code:
1
2
3
4
5
6
7
8
9
10
1e iteratie
result = 123456789

2e iteratie
result = 213456789

3e iteratie
result = 231456789

enz.

ik moet dus een functie maken die allemaal volgordes van de getallen langs gaat. zonder dat de getallen er dubbel in staan en altijd met 9 getallen.

nu kan dit op de volgendemanier gedaan worden:
begin situatie 123456789
bepaal pos(1) als die > 9 dan pos 1 ophogen en stuk voor nieuwe pos voor de 1 zetten en stuk na nieuwe pos achter de 1 zetten.

Daarna hetzelfde voor de 2 doen, enz.

Maar dit lijkt met nogal omslachtig. Daarom hier de vraag of iemand een beter idee heeft.


hopelijk is het zo een beetje begrijpelijk uitgelegd.

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Dit kan iteratief of recursief, het makkelijkste voor je is waarschijnlijk iteratief ( for lusjes )

Ik ruik echter mmm.. Huiswerk?

Probeer eerst eens een algoritme te bedenken waar je maar 3 getallen hebt.. 1 2 en 3 dan kan je namelijk nog controleren of al de oplossingen er zijn.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • WOmBaT
  • Registratie: September 2000
  • Laatst online: 30-11-2025

WOmBaT

Nyaaa!!!

Dat is niet zo moeilijk. Je weet voor jezelf welke stappen je moet nemen. Schrijf die stappen op. Kijk waar je begint en waar je stopt en wat je elke keer veranderd.

Resultaat:
een for-loop

Het is zo gedaan hoor. :)

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op maandag 27 mei 2002 22:09 schreef WOmBaT het volgende:
Resultaat:
een for-loop
Ik zou eerder zeggen meerdere for loops :P... OF een for loop met een recursieve aanroep :)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 07-09 09:15

Hu9o

Schokkend

Topicstarter
jullie bedoelen dus dat ik het best een for loop kan gebruiken icm die manier die ik beschreven heb?

Maar die lijkt me zo omslachtig. Op de een of andere manier heb ik het gevoel dat het korter kan...

Toch ga ik het maar ff zo proberen.

alvast bedankt voor de reacties.

p.s. Nee het is geen huiswerk vraag. Dit doe ik voor de lol!!

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 07-09 09:15

Hu9o

Schokkend

Topicstarter
Recursief aanroepen van een functie wil zeggen dat je in die functie een andere aanroep doet naar die zelfde functie.
Ok, dit vat ik ff niet helemaal. Je kan toch niet een functie aanroepen vanuit diezelfde functie :?

dit zou ik wel ff graag met een voorbeeld zien.

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:26

Creepy

Tactical Espionage Splatterer

Op maandag 27 mei 2002 22:13 schreef Hu9o het volgende:
jullie bedoelen dus dat ik het best een for loop kan gebruiken icm die manier die ik beschreven heb?

Maar die lijkt me zo omslachtig. Op de een of andere manier heb ik het gevoel dat het korter kan...

Toch ga ik het maar ff zo proberen.

alvast bedankt voor de reacties.

p.s. Nee het is geen huiswerk vraag. Dit doe ik voor de lol!!
Programmeren voor de lol?? Die is gek! :P

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 07-09 09:15

Hu9o

Schokkend

Topicstarter
Op maandag 27 mei 2002 22:18 schreef Creepy het volgende:

[..]

Programmeren voor de lol?? Die is gek! :P
Bedankt voor je zinnige reply! }:O

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:30
Op maandag 27 mei 2002 22:16 schreef Hu9o het volgende:

[..]

Ok, dit vat ik ff niet helemaal. Je kan toch niet een functie aanroepen vanuit diezelfde functie :?

dit zou ik wel ff graag met een voorbeeld zien.
Toch wel, dit is net recursie. Je roept in een functie dezelfde functie aan. Je moet er natuurlijk wel voor zorgen dat dit niet oneindig doorgaat, dus je moet ergens een voorwaarde hebben die het mogelijk maakt om de recursie te stoppen.

https://fgheysels.github.io/


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Voorbeeldje?
Pseudo code:

Macht( X , Y ) {
if (Y>1) dan return X*Macht( X , Y-1)
anders return X;
}

Macht (2,3) geeft;

2* Macht (2,2) ->
2* ( 2* Macht ( 2,1 ) ) ->
2* ( 2* ( 2 ) )

resultaat 8 .. wat dus betekent dat 2 tot de macht 3 uitkomt op 8.

Zie hier een recursieve functie :)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Probeer het eens zo:

(ik spreek geen pascal, maar wel een algemene syntax taal. Vertaal het zelf dus even)


var x::vector (8)

do ( i=0 to 9)
x(1) = i
do (j=0 to 9)
if (j <> i) x(2)=j
do (k=0 to 9)
if (k<>i) & (k<>j) x(3)=k
do (k=0 to 9)
if (l<>i) & (l<>j) & (l<>k) x(4)=l

enz tot 9.

  • Hu9o
  • Registratie: Mei 2001
  • Laatst online: 07-09 09:15

Hu9o

Schokkend

Topicstarter
Weer wat geleerd!

En wat betreft dat voorbeeld. ik ga het morgen proberen. Moet nu toch wel goed komen.

(bijna)Iedereen bedankt!

>>>>>>>>>>>>>>>>>>>>>>>>>Vertel Microsoft over dit probleem <<<<<<<<<<<<<<<<<<<<<<<<<


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Een leuke oplossing die niet helemaal optimaal is er een met sets. Je ontkomt er dan bijna niet aan om dubbele mogelijkheden af te moeten vangen maar in de praktijk zal je qua snelheid niks nadeligs merken. Anders is een dynamische array de meest efficiente oplossing denk ik.

Verwijderd

edit:
Hier stond klinklare onzin, sorry jongens

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Moet je trouwens alle mogelijke combinaties hebben of wil je gewoon steeds opnieuw een willekeurige volgorde? De eerste situatie zou wel een stukje moeilijker zijn denk ik zo.

Verwijderd

Waarom klus je niet een swap-functie die gewoon 2 getallen omwisselt.
Je begint dan met een array met de waarden 1 t/m 9 en swapt er vrolijk (wel structureel, want je wilt alle oplossingen) op los.
code:
1
2
3
{pre: array[i] = a, array[j] = b}
swap(i,j) 
{post: array[i] = b, array[j] = a}

edit:

Op deze manier voorkom je dubbele getallen in je lijst zoals 112345678 (o.i.d.)

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 21:35
beetje pseudo-code die werkt:
code:
1
2
3
4
5
   Tel x van 1 t/m n!
     Wis array met getallen
     Tel y van 1 tot n-1
     Plaats getal y op beschikbare plaats [x DIV y]
     Druk array met getallen af

Bij n= 4 krijg je iets als:
1234
2134
2314
2341
1324
3124
3214
3241
1432
4132
4312
4321
1243
2143
2413
2431
1342
3142
3412
3421
1423
4123
4213
4231
Pagina: 1