Witam, jestem kompletnym nowicjuszem jeśli chodzi o programowanie w Delphi, i próbuję rozwiązać pewne zadanie, mianowicie napisać funkcję która dla danej tablicy wypisze wszystkie podzbiory, czyli dla tablicy: [1, 2, 3] poda 1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3 (w dowolnej kolejności). Docelowo program ma dla każdej tablicy w tablicy znajdować wszystkie permutacje, ale na razie szukam rozwiązania pierwszego problemu. Proszę o pomoc w miarę możliwości.
Najpierw pokaż co już sam stworzyłeś, wtedy na pewno ktoś pomoże.
Jedyne co mam to funkcję w pythonie która działa i wykonuje zadanie:
def list_powerset(lst):
result = [[]]
for x in lst:
result += [subset + [x] for subset in result]
result.pop(0)
return result
Próbuję to zaimplementować w delphi ale nie mam ani kawałka sensownego kodu który by coś robił, z językiem nie miałem nigdy styczności i nie wiem czy na ten sposób jest to w ogóle możliwe, czy trzeba to zrobić inaczej.
W sumie można by to podciągnąć pod Brute Force - poczytaj;
Próbuję to zaimplementować w delphi ale nie mam ani kawałka sensownego kodu który by coś robił
No i dobrze, przynajmniej się czegoś nauczysz a nie przekleisz gotowca;
z językiem nie miałem nigdy styczności i nie wiem czy na ten sposób jest to w ogóle możliwe, czy trzeba to zrobić inaczej.
A czy w ogóle zrobiłeś coś co chociaż próbuje rozwiązać to zadanie? Tak samo raczej tego nie zrobisz, wszystko zależy od tego w jakim IDE to piszesz, choćby ze względu na pętlę for .. in
;
Poczytaj cokolwiek o jakichkolwiek algorytmach a większość z nich dopasujesz pod swój program; Tutaj masz stary wątek: http://4programmers.net/Forum/Archiwum/29298-algorytmika_Permutacje - coś na ten temat można się dowiedzieć; Oczywiście ciekawszym sposobem byłoby napisać algorytm wykorzystujący rekurencję, ale jak to mówią: nie każdy ma tą część mózgu do rekurencji (czy wskaźników, wątków...);
var
i, k, n: integer;
x:array[0..100] of integer;
begin
n:=5;
x[1]:=1; k:=1;
while k <> 0 do begin
for i:=1 to k do
write(x[i], #32);
writeln;
if x[k] = n then begin
dec(k); inc(x[k])
end else begin
inc(k); x[k]:= x[k-1] + 1
end
end
end.
furious programming napisał(a):
ale jak to mówią: nie każdy ma tą część mózgu do rekurencji (czy wskaźników, wątków...);
Jak to mówią - nie każdy ma TĘ część mózgu do ortografii... :D