Diskuze: Úloha v pascalu
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj, v pascalu moc neumím, ale pokusím se pomoct nějakým
pseudokódem.
Protože 365 na n je vždy kladné můžu tím vynásobit nerovnici bez změny
znaménka. a pak budu jen násobyt a porovnávat v cyklu, protože nevím jak n
vyjádřit.
function nasob(n)
d=1
for i := 365 downto (365-n+1) do
d=d*i
end
return d
end
n=0
p=vstup
a=nasob(n)
while not(365^n >= a ) do
n=n+1
a=nasob(n)
end
print(n)
Nejsem si jistý jestli to tak bude fungovat a určitě by to šlo napsat i jednodušeji, ale snad ti to pomůže.
Moc děkuju a mohla bych ještě poprosit o okomentování toho kódu? Vůbec ne nevyznám ve funkcích - co je parametr, co je proměnná
Pokusil jsem se to přepsat do pascalu, ale nemám žádný kompilér a ten co jsem našel online se choval poněkud divně, tak jsem nevyzkoušel jestli to vážně funguje, možná tam bude problém s velikostí proměnných.
Uses Math;
function nasob(b:integer):longint; {virobím fci na vypočtení citatele pro pro hodnotu kterou dostane parametrem do promené b}
var
result:longint; {definice místních proměných}
i:integer;
begin
result:=1; {do výsledku dám 1 abych mohl postupne násobit}
for i := 365 downto (365-b+1) do {postupně pri i = 365 až i = 365-n+1 násobím (o rádek níž) }
result:=result*i;
end; {proměnná result se automaticky vrací jako vsledek fce}
function nejmensipocetucas(p:real):integer; { tvoje připravená fce která dostane parametrem hodnotu do proměnné p}
var
n, result:integer;
a:longint; {definyce pomocných proměnných}
begin
{místo pro tu podmínku co máš na obrázku na ověření vstupu}
n:=0;
a:=nasob(n); {hodnota čitatele jestliže nikdo nepříjde (n=0)}
while not(power(365,n)*p >= a ) do {budu testovat tak dlouho dokud se nerovnice nesplní (minule jsem zapoměl *p)}
n:=n+1; {při každém pokusu zvětším n o 1}
a:=nasob(n); {vypočtu čitatel při dalším pokusu ho zase porovná}
end.
writeln(n); {vypíšu vísledek}
result:=n; {a taky ho vrátím z funkce}
end;
Zobrazeno 5 zpráv z 5.