Kezdőoldal » Számítástechnika » Programozás » Pascal: Algoritmussal lépésenk...

Pascal: Algoritmussal lépésenként végig lehet számolni hogy hányféleképp írható fel egy tömb elemeinek sorrendje? (bővebben lent)

Figyelt kérdés

Olyan algoritmusra lenne szükségem, amely egy tömb elemeinek értékét cserélgeti annyiszor, ahányszor csak felírható a tömb elemeiből a sorrend.

Szeretném, ha nem azonnal csinálná meg, hanem hívogatnám az eljárást és mindig megjegyezné hogy hányadik lépésnél tartott és mindig csak a következő egy lépést hajtaná végre.

Ha a végére ért, akkor kezdené az első lépéssel ismét.

Nem kell hogy kiírja, elég ha a tömb elemeit cserélgeti a program a lépéseknek megfelelően.

Olyat szeretnék, hogy nagy elemszám esetén is végigszámolja.


Példa, hogy mire gondolok:

0,1,2

0,2,1

2,1,0

2,0,1

1,2,0

1,0,2


Mivel nem tudom a megoldást, nem tudok olyan sokat írni.


program hanyszor;

var

t : array [0..2] of byte;

i : byte;

begin

for i := 0 to 2 do

t[i]:=i;

end.


Miként lehetne ezt megoldani?



2015. júl. 22. 08:28
 1/5 anonim ***** válasza:

Permutációk a kulcsszó:

[link]

2015. júl. 22. 11:01
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:

Köszönöm a választ.

Ha egy lépéssel szeretném csinálni és nem rekurzívan, akkor miként csináljam?

2015. júl. 22. 11:38
 3/5 anonim ***** válasza:
Az iteratív módszer fejezetben egy ciklusmag van leírva. Egész egyszerűen azt kiemeled egy függvénybe/eljárásba, az lesz egy lépés. Aztán hívogatod, ahogy jólesik. :)
2015. júl. 22. 11:50
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:

Ez az implentáció mennyire jó s émilyen mértékben van túlbonyolítva, esetleges hibákat tartalmazhat vagy teljesen jó?

program perm;


var

p: array[1 .. 12] of integer;

is_last: boolean;

n: integer;


procedure next;

var i, j, k, t: integer;

begin

is_last := true;

i := n - 1;

while i > 0 do

begin

if p[i] < p[i + 1] then

begin

is_last := false;

break;

end;

i := i - 1;

end;


if not is_last then

begin

j := i + 1;

k := n;

while j < k do

begin

t := p[j];

p[j] := p[k];

p[k] := t;

j := j + 1;

k := k - 1;

end;


j := n;

while p[j] > p[i] do j := j - 1;

j := j + 1;


t := p[i];

p[i] := p[j];

p[j] := t;

end;

end;

2015. júl. 22. 11:56
 5/5 SimkoL ***** válasza:
Írt nekem a kérdező, hogy nem teljesen érti, ezért az első válaszoló által belinkelt oldal alapján szóról szóra elkészítettem, sok komnenttel. [link] A tömb feltöltését, a kiíratást és az elemek cseréjék külön eljárásba tettem az átláthatóság kedvéért.
2015. júl. 23. 12:11
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!