{ Načtení n čtverců do pole c vynecháno. } for i:=1 to n do begin P[2*i-1]:=c[i].xdolni; P[2*i]:=c[i].xhorni; end; { Setřídění pole P vynecháno, hodnoty se třídí bez ohledu na to, zda jde o horní či dolní hranici. Při takovémto třídění mohou vzniknout i pásy nulové šířky, na správnosti algoritmu to ale nic nemění. } { Setřídění pole c podle dolní y-ové hranice vynecháno. } obsah:=0; for i:=1 to 2*n-1 do begin vyska:=0; ypredchozi:=c[1].ydolni; for j:=1 to n do if (c[j].xleve <= P[i]) and (c[j].xprave >= P[i+1]) and (ypredchozi < c[j].yhorni) then begin vyska:=vyska+c[j].yhorni-c[j].ydolni - max(0,ypredchozi-c[j].ydolni); ypredchozi:=c[j].yhorni; end; obsah:=obsah+vyska*(P[i+1]-P[i]); end; { V proměnné obsah je nyní obsah zaplněné plochy }