Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 6.894 pregleda

Najnovija ↓

Re: Skraćivanje razlomaka u Pascal-u 14.04.2004. u 23:30 · pre 274 meseca #2
Pa proveriš da li su i brojilac i imanilac deljivi sa istim brojem koji je manji od manjeg od ova dva! Na primer ako imas 5/15 onda proveravas da li su brojilac i imenilac deljivi sa bilo kojim brojem manjim ili jednakim 5 (x mod y=0) i ako jesu podelis ova i skratio si razlomak! I tako radiš dok ga ne skratiš maksimalno!

Ako ti treba baš kod reci i napisaću ti!
Re: Skraćivanje razlomaka u Pascal-u 14.04.2004. u 23:40 · pre 274 meseca #3
Imaš mnogo jednostavnije rešenje, a to je sledeće:

Pustiš jednu petlju koja će da oduzima manji broj od većeg sve dok se brojevi ne izjednače. Kad se izjednače, neka je njihova vrednost x, e onda i jedan i drugi početni broj podeliš sa tim x, i to je skraćen razlomak. Mislim da brži algoritam od ovog ne postoji, ako ti nešto nije jasno javi se ponovo.
Potpis
Ljubičice crvena, što si plava kô zelena trava.
Re: Skraćivanje razlomaka u Pascal-u 15.04.2004. u 09:30 · pre 274 meseca #5
Citat:
Bojan Basic:
Imaš mnogo jednostavnije rešenje, a to je sledeće:

Pustiš jednu petlju koja će da oduzima manji broj od većeg sve dok se brojevi ne izjednače. Kad se izjednače, neka je njihova vrednost x, e onda i jedan i drugi početni broj podeliš sa tim x, i to je skraćen razlomak. Mislim da brži algoritam od ovog ne postoji, ako ti nešto nije jasno javi se ponovo.

Mislim da ovo nije ispravno.
Recimo da je razlomak 6/22. Dakle kad se skrati dobijemo 3/11. Prema gornjem algoritmu, petlja se neće izjednačiti, prema tome razlomak se ne može skratiti.
Re: Skraćivanje razlomaka u Pascal-u 15.04.2004. u 20:32 · pre 274 meseca #6
Ispravno je sigurno, evo ti na tvom primeru:
6 22
6 16
6 10
6 4
2 4
2 2
Sad su jednaki, pa podeliš i 6 i 16 sa 2 i dobiješ skraćeni razlomak.
Potpis
Ljubičice crvena, što si plava kô zelena trava.
Re: Skraćivanje razlomaka u Pascal-u 17.04.2004. u 15:55 · pre 274 meseca #7
A ima jos bolje resenje i zove se Euklidov algoritam.

Najlakse se pise rekurzijom i nema mnogo poziva, pa nema frke da ce da pukne stack.

Ideja je sledeca: najveci zajednicki sadrzalac za dva broja (u principu i za dva polinoma) je i najmanji zajednici sadrzalac za manji od njih i ostatak pri deljenju veceg manjim.
Znaci ako je a<b, onda je nzs(a,b)=nzs(b mod a, a);

Znaci, evo funkcije:

function Euclid(a, b: integer): integer;
begin
if a=0 then Euclid:=b
else Euclid:=Euclid(b mod a, a);
end;


Moras da pazis da je prvo mani broj kad pozivas f-ju, pa bi bilo korisno i

function nzs(a, b: integer): integer;
begin
if a<b then nzs:=euclid(a, b) else nzs:=euclid(b, a);
end;


gde ne moras da vodis racuna o redosledu.

Recimo za onaj primer od gore za 6 i 22 imas parove
6 i 22
4 i 6
2 i 4
0 i 2
Potpis
10 BEGIN
20 HOME_SWEET_HOME
30 GOTO 20
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme