Zaokrouhlení na stovky – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Zaokrouhlení na stovky – Pascal – Fórum – Programujte.comZaokrouhlení na stovky – Pascal – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
FeXxy0
Newbie
16. 6. 2013   #1
-
0
-

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;

Nahlásit jako SPAM
IP: 94.229.92.–
Reklama
Reklama
KIIV+42
God of flame
16. 6. 2013   #2
-
0
-

#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...

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
FeXxy0
Newbie
17. 6. 2013   #3
-
0
-

#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 

Nahlásit jako SPAM
IP: 82.209.19.–
FeXxy0
Newbie
17. 6. 2013   #4
-
0
-

Jinak chybu jsem našel a má to být asi takhle což?

cislo:=15555;

repeat

cislo:=cislo+1;

until cislo=15600;

writeln (cislo);

Nahlásit jako SPAM
IP: 82.209.19.–
KIIV+42
God of flame
17. 6. 2013   #5
-
0
-

math pro mod neni potreba... modulo je zakladni operator

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Mircosoft+1
Věrný člen
17. 6. 2013   #6
-
0
-

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.

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
peter
~ Anonymní uživatel
2547 příspěvků
17. 6. 2013   #7
-
0
-

2300.99 + 99 = 2399.99

2399.99 - (2399.99 mod 100) = 2399.99 - 99.99 = 2300

Ale melo to byt 2400. Asi funci ceil plne nerozumis.

Nahlásit jako SPAM
IP: 193.84.207.–
Mircosoft+1
Věrný člen
17. 6. 2013   #8
-
0
-

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 :-).

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
KIIV+42
God of flame
17. 6. 2013   #9
-
0
-

no v tom pripade si pohrat s ceil (minimalne free pascal ho urcite ma)

cislo := 100.0*ceil(cislo/100);

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
FeXxy0
Newbie
18. 6. 2013   #10
-
0
-

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 :) 

Nahlásit jako SPAM
IP: 94.229.92.–
Sniper
~ Anonymní uživatel
184 příspěvků
19. 6. 2013   #11
-
0
-

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.

Nahlásit jako SPAM
IP: 90.179.201.–
FeXxy0
Newbie
19. 6. 2013   #12
-
0
-

Můžete mi poslat odkaz k stáhnutí knihovny MATH? Protože já mám pouze knihovnu CRT...  

Nahlásit jako SPAM
IP: 94.229.92.–
JoDiK
~ Anonymní uživatel
981 příspěvků
19. 6. 2013   #13
-
0
-

#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.
Nahlásit jako SPAM
IP: 88.103.236.–
FeXxy0
Newbie
19. 6. 2013   #14
-
0
-

Turbo pascal 7.0...

Na tomto programu jedou všechny školní PC...

Nahlásit jako SPAM
IP: 94.229.92.–
FeXxy0
Newbie
19. 6. 2013   #15
-
0
-

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...

http://uloz.to/…6z/zaokr-pas

Problém je pod příkazem SHM:= (hrubamzda*1.34);

Potřebuju SHM zaokrouhlit na stovky (vždy nahoru)

Díky moc  

Nahlásit jako SPAM
IP: 94.229.92.–
JoDiK
~ Anonymní uživatel
981 příspěvků
19. 6. 2013   #16
-
0
-

#15 FeXxy
A to co jsem ti psal jsi vyzkoušel? Nefunguje? Nebo neumíš podprogramy, tak tomu nerozumíš?

Nahlásit jako SPAM
IP: 88.103.236.–
FeXxy0
Newbie
19. 6. 2013   #17
-
0
-

zkoušel.... samostatně to funguje, ale když to chci dát do toho programu, tak mi to vypisuje chybu

Nahlásit jako SPAM
IP: 94.229.92.–
JoDiK
~ Anonymní uživatel
981 příspěvků
19. 6. 2013   #18
-
0
-

#17 FeXxy
Jakou?

Nahlásit jako SPAM
IP: 88.100.43.–
FeXxy0
Newbie
19. 6. 2013   #19
-
0
-

 #18 JoDiK
Na konci chci zakončit program "end.", jenže mi to vypisuje, že mám dát "end;" tak to zvolím a dál to vypíše toto "Unexpected end of file"

Nahlásit jako SPAM
IP: 94.229.92.–
Mircosoft+1
Věrný člen
19. 6. 2013   #20
-
0
-

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.

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Řešení
JoDiK
~ Anonymní uživatel
981 příspěvků
19. 6. 2013   #21
-
0
-
Vyřešeno Nejlepší odpověď

#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;

 

Nahlásit jako SPAM
IP: 88.100.43.–
FeXxy0
Newbie
19. 6. 2013   #22
-
0
-

#21 JoDiK
Díky moc!   Nakonec jsem našel i chybu ve vzorci, která mi ukazovala jinou částku, takže jsem možná měl i správně varianty jak to má být ... No nic, hlavně že už to mám. Ještě jednou VELKÝ DÍK  

Nahlásit jako SPAM
IP: 94.229.92.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

Zaokrouhlení — založil Standa

Zaokrouhlení double — založil Redby

Zaokrouhlení čísel — založil pauli975

Zaokrouhlení na desitky — založil Boblig

Zaokrouhlení double — založil vollf82

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý