program prl1; sharedvar values : array[1] of word; // pole razenych hodnot, sdilene vsemi procesory var i : word; procedure init; var p, i : word; begin read(p); // nacteni poctu vstupnich hodnot P := p; // inicializace poctu procesoru for i := 1 to p do read(values[i]); // nacitani razenych cisel a ukladani do pole end; end init; procedure sortfirst; // provede serazeni pro liche procesory var i : word; temp : word; begin par i := 1 to P sync do // iteruj synchronne pres vsechny procesory if (i mod 2 = 1) then // pro kazdy lichy procesor if (i + 1 <= P) then // ktery ma vpravo souseda if (values[i+1] < values[i]) then // pokud je nase hodnota vetsi nez hodnota souseda temp := values[i]; // prohod hodnoty values[i] := values[i+1]; values[i+1] := temp; end; end; end; end; end sortfirst; procedure sortsecond; // provede serazeni pro sude procesory var i : word; temp : word; begin par i := 2 to P sync do // iteruj synchronne pres vsechny procesory if (i mod 2 = 0) then // pro kazdy sudy procesor if (i + 1 <= P) then // ktery ma vpravo souseda if (values[i + 1] < values[i]) then // pokud je nase hodnota vetsi nez hodnota souseda temp := values[i]; // prohod hodnoty values[i] := values[i + 1]; values[i + 1] := temp; end; end; end; end; end sortsecond; procedure finish; var i : word; begin write(P); // vypis pocet procesoru/hodnot chwrite(32); for i := 1 to P do write(values[i]); // vypis serazene hodnoty chwrite(32); end; end finish; begin for i := 1 to (P-1) / 2 + 1 do // provadej n/2-krat (konstrukce zaruci spravny pocet iteraci i v pripade licheho poctu prvku) sortfirst(); sortsecond(); end; @CLOCK end prl1.