ELTE Szlávi-Zsakó: Programozási alapismeretek 8.1/ Kiválogatás Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Db:Egész, Y:Tömb[1..Db:Egész] Előfeltétel: N 0 Utófeltétel: Db= és i(1≤i≤Db): T(X[Y[i]]) és Y (1,2,…,N) L. Megszámolás tételt!Megszámolás tétel Statikus tömb-deklaráció esetében: N
ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/ Kiválogatás Algoritmus: Megjegyzés: A sorszám általánosabb, mint az érték. Ha még- is érték kellene, akkor Y[Db]:=X[i] szerepelne. (Ekkor a specifikációt is módosítani kell!) Db:=0 i=1..N T(X[i]) Db:=Db+1 Y[Db]:=i I N L. Megszámolás tételt!Megszámolás tétel
ELTE Szlávi-Zsakó: Programozási alapismeretek 8.3/ Szétválogatás 2 tömbre Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Db:Egész, Y,Z:Tömb[1..N:Egész] Előfeltétel: N 0 Utófeltétel: Db= és i(1≤i≤Db): T(X[Y[i]]) és i(1≤i≤N – Db): nem T(X[Z[i]]) és Y (1,2,…,N) és Z (1,2,…,N)
ELTE Szlávi-Zsakó: Programozási alapismeretek 8.4/ Szétválogatás 2 tömbre Algoritmus: Megjegyzés: Itt is szerepelhetne :=i helyett :=X[i], ha csak az értékekre lenne szükségünk. (A specifikáció is módosítandó!) Db:=0 DbZ:=0 i=1..N T(X[i]) Db:=Db+1DbZ:=DbZ+1 Y[Db]:=iZ[DbZ]:=i I N
ELTE Szlávi-Zsakó: Programozási alapismeretek 8.5/ Szétválogatás 1 tömbre Permutáció(1,2,...,N):=az 1..N számok összes permutációjának halmaza Probléma: Y-ban és Z-ben együtt csak N darab elem van, azaz elég lenne egyetlen N-elemű tömb. Megoldás: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Db:Egész, Y:Tömb[1..N:Egész] Előfeltétel: N 0 Utófeltétel: Db= és i(1≤i≤Db): T(X[Y[i]]) és i(Db+1≤i≤N): nem T(X[Y[i]]) és Y Permutáció(1,2,…,N)
ELTE Szlávi-Zsakó: Programozási alapismeretek 8.6/ Szétválogatás 1 tömbre Algoritmus: Db:=0 DbZ:=N+1 i=1..N T(X[i]) Db:=Db+1DbZ:=DbZ–1 Y[Db]:=iY[DbZ]:=i I N