program retezovka1; function sinh(x:real):real; var ex : real; begin ex := exp(x); sinh := 0.5*(ex-1/ex); end; function cosh(x:real):real; var ex : real; begin ex := exp(x); cosh := 0.5*(ex+1/ex); end; // funkce vraci vysku bodu leziciho na retezovce function bodRetezovky(x, parametr_a : real):real; begin bodRetezovky := parametr_a*(cosh(x/parametr_a)-1); end; function delkaRetezovky(parametr_a, parametr_d : real):real; begin delkaRetezovky := 2*parametr_a*sinh(0.5*parametr_d/parametr_a); end; procedure VypisTabulku(x_min, x_max, a:real; n:integer=100); var i:integer; x:real; soubor:text; const jiz_vytvoren:boolean = false; begin assign(soubor,'retezovka.txt'); if jiz_vytvoren then append(soubor) else rewrite(soubor); for i := 0 to n do begin x := x_min+(x_max-x_min)*i/n; writeln( soubor,x,' ',bodRetezovky(x,a) ); end; writeln(soubor); close(soubor); jiz_vytvoren:=true; end; const sirka_zavesu = 3.0; function hodnota_a( sirka_d, delka_L : real ):real; begin //hodnota_a := sirka_d/(2*ln(delka_L/sirka_d)); hodnota_a := sirka_d/sqrt(24*(delka_L/sirka_d-1)); end; var delka_lana : integer; a : real; begin for delka_lana := 4 to 7 do begin a := hodnota_a(sirka_zavesu,delka_lana); Writeln( sirka_zavesu : 4:2, ' ', delka_lana : 4, ' ', a : 12:10, ' ', delkaRetezovky(a, sirka_zavesu) : 12:10 ) ; VypisTabulku(-sirka_zavesu/2, sirka_zavesu/2, a); end; end.