Informatika gyűjtemény

Egy szinttel feljebb pr_gombs.pas

2004050607080910

NézetNyomtat

pr_gombs.pas (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
program f222sejt;

type per=array[0..50] of integer; //ebben tartolom a tesztelendo permutaciot

var
i,tmax:integer; //tmax, hogy hany gombre tesztelem az optimalisat
pm,e:per; //permut. tipusu valtozok, pm-ben tarolom, hogy melyik a min. magas
pmin:real; //ebben tarolom a minimalis magassagu konfiguraciot
gom:array[1..50] of integer; //ebben, hogy mekkorak a gombsugarak (konstans)

function prob:real; //egy adott (e-ben levo) permutacio meretet teszteli
begin
prob:=gom[e[1]]+gom[e[tmax]]; //also, felso gomb sugara
for i:=1 to tmax-1 do begin
prob:=prob+sqrt(200)*sqrt(gom[e[i]]+gom[e[i+1]]-50); //szomszedos gombok...
end;
end;

function joe:boolean; //megnezi, hogy permutacio van-e az e-ben
var ii:integer;
begin
joe:=true;
for ii:=1 to e[0]-1 do begin
if e[ii]=e[e[0]] then joe:=false; //ne legyenek azonos elemek!
end;
end;


procedure beka; //Backtrack, ami eloallitja a tmax elem osszes perm.jet
begin while e[0]>0 do begin
if e[0]<=tmax then
  begin
    if e[e[0]]<tmax then begin inc(e[e[0]]); if joe then inc(e[0]); end
    else begin e[e[0]]:=0; dec(e[0]); end;
  end
else
  begin if prob<pmin then begin pmin:=prob; pm:=e; end; dec(e[0]); end;
end; end;


begin

for tmax:=1 to 9 do begin //1-tol 9-ig minden szamra teszteljunk!

e[0]:=0; //alapbol 0 gombunk van (e[0]=0), mert e[0]-ban van a darabszam...
pmin:=50*tmax*2+1; //konf. biztos kisebbegyenlo, mint N darab max. magas gomb
gom[1]:=50; for i:=2 to tmax do begin gom[i]:=gom[i-1]-1; end; //gombsugarak
e[0]:=1; for i:=1 to tmax do e[i]:=0; //backtrack elokeszit: kinullaz tomb
beka; //backtrack
write('n=',tmax,': ');
for i:=1 to tmax do write(pm[i],' '); writeln; //kiir (egyik) optimalisat

end;

//ne felejtsuk el, hogy ez azt jelenti, hogy a NAGY gomb van kivul
//mert kisebb sorszammal a nagyobb gombot jeloltuk!!!
//az, hogy melyik sorendben irja ki oket, az 'random' (valos aritmetikan mulik)

end.
(Vissza)