Pascal: kombinacje i wariacje liczb z tablicy

0

Witam serdecznie, jako że jest to mój pierwszy post.

Muszę rozwiązać dwa zadanka z Pascala, a mianowicie:

  1. Proszę napisać procedurę, otrzymującą jako parametr tablicę liczb typu Integer wraz z jej długością oraz liczbę naturalną N mniejszą lub równą długości tablicy. Efektem działania procedury powinno być wypisanie na standardowe wyjście wszystkich N-elementowych kombinacji liczb z tablicy w oddzielnych wierszach. Można przyjąć, że liczby w tablicy się nie powtarzają, a jej długość jest mniejsza lub równa stałej MAX.

  2. Proszę napisać procedurę, otrzymującą jako parametr tablicę liczb typu Integer wraz z jej długością oraz liczbę naturalną N mniejszą lub równą długości tablicy. Efektem działania procedury powinno być wypisanie na standardowe wyjście wszystkich N-elementowych wariacji bez powtórzeń liczb z tablicy w oddzielnych wierszach. Można przyjąć, że liczby w tablicy się nie powtarzają, a jej długość jest mniejsza lub równa stałej MAX.

Nie bardzo wiem, jak się za to zabrać, a konkretniej jak dojść do tego, żeby wyświetlało mi kombinacje/wariacje złożone z akurat N liczb. Będę wdzięczny za wszelką pomoc.

0

Standardowe pytanie, które tutaj znajdziesz to:

Ile płacisz za to zlecenie ?

0

A jakie są plus/minus stawki za tego typu sprawy?

1

google -> agh -> http://winnie.ics.agh.edu.pl/dydaktyka/wdi/zadania.html -> Zadania różne -> Przykładowe rozwiązania :/

1

Wszelkie prawa zastrzeżone :P

program perm_war;

type
  TAlphabet = String[255];
  TStack = String[32];
  int = longint;

var
  stack: TStack;

procedure push(c: char);
begin
  Inc(stack[0]);
  stack[Ord(stack[0])]:=c;
end;

procedure pop();
begin
  Dec(stack[0]);
end;

procedure write();
begin
  WriteLn(stack);
end;

procedure wariacje_(var alphabet: TAlphabet; n: int; mask: int);
var i: int;
begin
  if (n=0) then
    begin
      write();
      exit;
    end;
  for i:=0 to Ord(alphabet[0])-1 do
    begin
      if ((mask shr i) and 1)=0 then
        begin
          push (alphabet[i+1]);
          wariacje_(alphabet, n-1, mask or (1 shl i));
          pop();
        end;
    end;
end;

procedure wariacje(var alphabet: TAlphabet);
begin
  wariacje_(alphabet, Ord(alphabet[0]), 0);
end;

procedure kombinacje(var alphabet: TAlphabet);
var i: int;
begin
  for i:=1 to Ord(alphabet[0]) do
    wariacje_(alphabet,i,0);
end;


var
  alphabet: TAlphabet;
begin
  WriteLn('Podaj z jakich znakow utworzyc kombinacje i wariacje (bez powtorzen):');
  ReadLn(alphabet);
  WriteLn('Wariacje:');
  wariacje(alphabet);
  WriteLn;
  WriteLn('Kombinacje:');
  kombinacje(alphabet);
  ReadLn;
end.
0

Dzięki serdeczne! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1