9. príklady


Posledná zmena: 8.10.2002

Banner Text množiny

Množiny

  • nasledujú úlohy na množinu čísel - pre všetky predpokladáme tieto deklarácie:
    • type
        baza = 1..50;
        mnozina = set of baza;

funkcia vytvorí z množiny reťazec

 

function vypis(const mn:mnozina):string;
var
  i:baza;
begin
  Result:='[';
  for i:=low(baza) to high(baza) do
    if i in mn then
      Result:=Result+','+IntToStr(i);
  Result:=Result+']';
  if Result[2]=',' then delete(Result,2,1);
end;

náhodná množina

náhodné generovanie množiny:

pre každý prvok "hodíme mincu" - podľa výsledku zaradíme / nezaradíme do výsledku

function generuj:mnozina;
var
  i:baza;
begin
  Result:=[];
  for i:=low(baza) to high(baza) do
    if random(2)=0 then Result:=Result+[i];
end;

počet prvkov množiny

 

function pocet(const mn:mnozina):integer;
var
  i:baza;
begin
  Result:=0;
  for i:=low(baza) to high(baza) do
    if i in mn then inc(Result);
end;

párne prvky

funkcia vráti len všetky párne čísla

function parne(const mn:mnozina):mnozina;
var
  i:baza;
begin
  Result:=[];
  for i:=low(baza) to high(baza) do
    if (i mod 2=0)and(i in mn) then
      Result:=Result+[i];
end;

každý druhý prvok

funkcia vráti každý druhý prvok množiny

napr. parne2([1,2,3,5,6,7,9,10]) vráti [2,5,7,10]

function parne2(const mn:mnozina):mnozina;
var
  i,j:baza;
begin
  Result:=[]; j:=0;
  for i:=low(baza) to high(baza) do
    if i in mn then begin
      inc(j);
      if j mod 2=0 then
        Result:=Result+[i];
    end;
end;

nepárne čísla z množiny

funkcia vráti všetky nepárne čísla z danej množiny

dalo by sa aj

Result:=mn-parne(mn);
function neparne(const mn:mnozina):mnozina;
var
  i:baza;
begin
  Result:=[];
  for i:=low(baza) to high(baza) do
    if odd(i)and(i in mn) then
      Result:=Result+[i];
end;

množinový doplnok

pozor! častou chybou je zápis

Result:=[baza]-mn;
function doplnok(const mn:mnozina):mnozina;
begin
  Result:=[low(baza)..high(baza)]-mn;
end;

prienik

prienik dvoch množín bez množinovej operácie *

dalo by sa aj napr.

Result:=a-(a-b);

function prienik(const a,b:mnozina):mnozina;
var
  i:baza;
begin
  Result:=[];
  for i:=low(baza) to high(baza) do
    if (i in a)and(i in b) then
      Result:=Result+[i];
end;

náhodná množina

funkcia vygeneruje náhodnú n-prvkovú množinu

function nahodne(n:integer):mnozina;
var
  i,k:integer;
  p:array[1..50] of baza;
begin
  for i:=1 to 50 do p[i]:=i;
  k:=50; Result:=[];
  while n>0 do begin
    i:=random(k)+1;
    Result:=Result+[p[i]];
    p[i]:=p[k]; dec(k); dec(n);
  end;
end;
  • ďalšie úlohy sú na množinu znakov - pre všetky predpokladáme tieto deklarácie:
    • type
        zmnozina = set of char;

písmená v reťazci

funkcia boli zistí, ktoré písmená sa vyskytli v zadanom znakovom reťazci (nebudeme rozlišovať malé a veľké)

chceme podmožinu ['a'..'z']

function boli(s:string):zmnozina;
var
  i:integer;
begin
  s:=LowerCase(s); Result:=[];
  for i:=1 to length(s) do
    Result:=Result+[s[i]];
  Result:=Result*['a'..'z'];
end;

chýbajúce písmená

ako predchádzajúca úloha, ale zistiť, ktoré chýbajú

dalo by sa aj

Result:=['a'..'z']-boli(s);

function neboli(s:string):zmnozina;
var
  i:integer;
begin
  s:=LowerCase(s); Result:=['a'..'z'];
  for i:=1 to length(s) do
    Result:=Result-[s[i]];
end;

znaky v súbore

funkcia zistí, ktoré znaky sa v textovom súbore vyskytli aspoň raz

zaujímajú nás znaky z [' '..#255]

function bolivsubore(s:string):zmnozina;
var
  t:TextFile;
  z:char;
begin
  AssignFile(t,s); Reset(t);
  Result:=[];
  while not eof(t) do begin
    read(t,z); Result:=Result+[z];
  end;
  CloseFile(t);
  Result:=Result*[' '..#255];
end;

z množiny reťazec

funkcia vypis z množiny znakov vytvorí reťazec reprezentujúci danú množinu, napr. v tvare

['2','D','X','a','b']

function vypis(const mn:zmnozina):string;
var
  z:char;
begin
  Result:='[';
  for z:=' ' to #255 do
    if z in mn then
      Result:=Result+','''+z+'''';
  Result:=Result+']';
  if Result[2]=',' then delete(Result,2,1);
end;

z množiny reťaze

funkcia vypis2 z množiny znakov vytvorí reťazec len zo znakov v množine

function vypis2(const mn:zmnozina):string;
var
  z:char;
begin
  Result:='';
  for z:=' ' to #255 do
    if z in mn then
      Result:=Result+z;
end;

počet prvkov

funkcia pocet zistí počet prvkov množiny znakov

function pocet(const mn:zmnozina):integer;
var
  z:char;
begin
  Result:=0;
  for z:=' ' to #255 do
    if z in mn then inc(Result);
end;

Ďalšie úlohy

  •  funkcia pre zadané n vytvorí množinu všetkých deliteľov n, ktoré sú menšie ako 256
  • vytvoriť množinu všetkých čísel do 255, ktoré obsahujú cifru 3
  • vytvoriť množinu všetkých čísel do 255, v ktorej pre všetky prvky platí, že v ich dvojkovom zápise je párny počet cifier 0 aj 1 (vymyslite si aj iné podmienky, napr. rovnaký počet 0 a 1 a pod.)


© 2002 AB, KVI
blaho@fmph.uniba.sk