Potřeboval bych pomoct zaokrouhlit (vždy nahoru na stovky) např. číslo 15555 na 15600!!!
napadlo mě tímto způsobem, ale bohužel to nefunguje...
cislo:=15555;
repeat
cislo2:=cislo+1;
until cislo2=15600;
#1 FeXxy
tak si zkus promyslet proc to nefunguje... mas cyklus ve kterym do cisla2 ulozis vysledek souctu cislo+1 ... ani za 1000000let nemuzes v zivote dostat vic nez cislo+1, jelikoz cislo se nemeni...
krom toho bych to zalozil na zbytku po deleni stovkou...
#2 KIIV
A mohl bys mi napsat jak to má být? Jelikož jsem amatér tak zas v tom nejsem dobrý...
Pokud by se mělo jednat o funkci MOD, tak tu jsem zkoušel, jenže nechce mi to vzít knihovnu math...
Pořád mi to vypisuje chybu. Budu rád, když mi napíšeš jak to má být díky moc
Pro zaokrouhlování nahoru existuje jeden docela elegantní postup:
1) Přičti číslo o 1 menší než to, na které zaokrouhluješ (v případě desítek 9, v případě stovek 99, v případě šestnáctek 15 apod.).
2) Vynuluj ty spodní cifry, které chceš mít nulové (v případě stovek třeba odečtením zbytku po dělení stem, při zaokrouhlování na "binárně kulatá" čísla se dá s výhodou použít and).
3) A je to.
Jak to funguje? Dejme tomu, že máme číslo 2300. Přičteme 99, dostaneme 2399. Odečteme 2399 mod 100, dostaneme zpátky 2300 - nula zaokrouhlená nahoru zůstane nulou. A když tam nula nebude: 2302+99=2401, 2401-(2401 mod 100)=2400.
Pro zaokrouhlení dolů prostě vynech krok 1.
Díky za upřesnění, předpokládal jsem celočíselný vstup. Pokud jde o reálná čísla, rád si to taky nechám vysvětlit :-).
A co tohle? :) Samostatně to jede (zaokrouhlí to na 15600), ale v mém programu na(100)...
a:=15555;
If (a mod 100) <>0 THEN
a:=a-(a mod 100) +100;
Problém mám teď v tom, že já nemůžu dosadit místo 'a' (typ: WORD) 'b' (typ: REAL)
Jak mám tedy dostat proměnou b do toho vzorce? Když má proměnou REAL tak mi to odmítá vzít, a já potřebuju k výpočtu procent typ 'b' ve WORDU?!
Díky moc :)
Já bych to řešil asi takhle:
uses
.., Math;
Function RoundUp(Num: Extended): Extended;
var
OldMode: TFPURoundingMode;
begin
OldMode := SetRoundMode(rmUp);
try
Result := RoundTo(Num,2);
finally
SetRoundMode(OldMode);
end;
end;
Vyzkoušeno v FPC, Lazarus a Delphi.
#12 FeXxy
Jakou verzi Pascalu provozuješ?
Pokud to má být v oboru reálných čísel, tak ve stadardním Pascalu nepotřebuješ nic extra, stačí prosté sčítání, dělení a násobení.
function ZaokrouhlitNahoru(x:real; rady : integer) : real;
var mocnina : real;
begin
ZaokrouhlitNahoru:=round(x/rady+0.049)*rady;
end;
begin
writeln(ZaokrouhlitNahoru(15555,100):0:0);
writeln(ZaokrouhlitNahoru(15545,100):0:0);
writeln(ZaokrouhlitNahoru(15545,1000):0:0);
writeln(ZaokrouhlitNahoru(15545,10):0:0);
end.
Pořád nevím jak to tam udělat... Budu rád, když se najde nějaka osoba, která udělá pár příkazů a má to hotovo...
Problém je pod příkazem SHM:= (hrubamzda*1.34);
Potřebuju SHM zaokrouhlit na stovky (vždy nahoru)
Díky moc
V tom případě ti asi chybí end; na konci té funkce. Jestli ne, ukaž celý zdroják, ať nemusíme hádat.
Ještě pár poznámek pro upřesnění:
Ad #12: Žádná knihovna Math v TP 7 standardně není. Základní matematické funkce (pro zaokrouhlování jenom Round, Trunc, Frac a Int) jsou definované přímo v jednotce System (která se do Uses nepíše), všechno ostatní je potřeba doprogramovat ručně. V Crt není matematického nic.
Ad #10: Operátory div a mod se dají použít jenom s celými čísly, ne s reálnými - proto ta chyba.
#19 FeXxy
Právě jsem ti to tam zkusil přidat a funguje to bez chyby.
Takže to vypadá, že neumíš pracovat s podprogramy...
Tak to vrať do předchozího stavu
a místo:
SHM:= (hrubamzda*1.34);
tam dej:
SHM:=round(hrubamzda*1.34/100+0.049)*100;
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku