» »

[NALOGA] največji skupni delitelj dveh celih števil

[NALOGA] največji skupni delitelj dveh celih števil

turbo-- ::

Napiši podprogram, ki poišče in vrne največji skupni delitelj dveh celih števil..:))
Potreboval bi pomoč:\
  • spremenilo: CCfly ()

OwcA ::

Pri čem bi potreboval pomoč?
Otroška radovednost - gonilo napredka.

WarpedGone ::

Zelo enostavn pristop:

1. kandidat za rešitev je manjše od obeh števil
2. preveri če trenuten kandidat deli večje število, če ga deli si našel NSD in končaj
3. kandidat := kandidat -1, izvedi 2. korak

koraka 2 in 3 izvajaj dokler je kandat večji od 1, če prideš do 1 brez da katerokoli od preizkušenih števil deli večje število končaš. Števili sta si tuji.
Zbogom in hvala za vse ribe

Microsoft ::

Gres od 1 do manjsega od dveh stevil (recimo, da imas 16 in 20). Torej od 1 do 16. In potem z tem stevilom poskusis delit 16 in 20. Ce si lahko delil obe stevili tako (brez ostanka), shranis to stevilo kot najvecjega delitelja.
Tko bo program sel od 1 do 16 in bo recimo pri deljenju z 4 ugotovil, da se da delit obe stevili brez ostanka. 4 bo v tem trenutnku najvecji skupni deljitelj. Vsa nadaljan stevila do 16 ne bodo.
Ko jo program konec, pac preberes tisto najvecjo vrednost. V tem primeru 4.

Progrma na pamet (C#), dvakrat sem uporabil "manjse" kot znak za manjse, ker ga kle ne pusti vnest:
int a = 16;
int b = 20;
int d = 1;
int max = -1;

int stop;
if(a "manjse" b)
stop = a;
else
stop = b;

for(;d "manjse"= stop; d++)
{
if((a%d == 0) & (b%d == 0))
max = d;
}

Console.WriteLine(max);



by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

Zgodovina sprememb…

OwcA ::

Kaj je to, tekmovanje za najbolj okorno rešitev?

 def gcd(a,b):
        while b:
            a,b = b, a % b
        return a
Otroška radovednost - gonilo napredka.

WarpedGone ::

"lepota" rešitve se ne meri v številu vrstic ampak njeni enostavni razumljivosti in elegantnosti. Hkrati.
Zbogom in hvala za vse ribe

OwcA ::

Enostavna razumljivost, nič ne rečem (čeprav se meni moja rešitev -- Evklidov algoritem -- ne zdi ravno kriptična), ampak ali sistematičnemo preiskovanje prostora rešitev (ki ima v "splošnem" vsaj par desettisoč elementov) res lahko okličemo za elegantno?
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

WarpedGone ::

Sploh ne dvomim, da tvoja rešitev nebi delala, tut simim da je precej učinkovita, amapak mi niti pod razno ni jasno kako točno dela, tut zato ker tega jezika ne govorim eee kodiram :]

Glede na to da človek prosi za pomoč pri tako osnovnem problemu, verjetno ni smotrno ga obremenjevat še z optimalnostjo. Najprej naj dela kar se da enostavno, da razume algoritem in problem, pol nej nardi da dela še 'pocen'
Zbogom in hvala za vse ribe

kopernik ::

Preberi naslednje, http://en.wikipedia.org/wiki/Euclidean_algorithm, in mora biti vse kristalno jasno.

Microsoft ::

OwcA, vse kar si ti naredil je to, da si prekopiral nek algoritem, napisal tri popolnoma nejasne vrstice in podal nic vrstic komentarja na to, kako zadeva sploh deluje, kater programski jezik je to in prakticno pokazal en primer.

In tudi to, da nekdo sprasuje, kako najti najvecji deljitelj, bi ti lahko dalo vedeti, da verjetno ne sprasuje po kaki tvoji über resitvi, ki je itak noben ne razume, ampak po eni simpl resitvi.
Pa se mal je treba pocakat, da bo prsu kak BigWhale pa zacel tezit, ko lahko on to v Linuxu, pazi Linuxu, to naredi z konzolo. Ker ce tko naredis, si totalno über leet in ti vsi zavidajo.

Boh pomagi!


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

Zgodovina sprememb…

tonic ::

bravo MS; razkuri se, pa povej svoje :D

itaq da nihče "leet"a ne zastopi, ker je "unikatno" bitje v tej galaksiji

zaradi danih problemov, kreiramo rešitve, katere zahtevalo vedno več in več procesorske moči; zaradi tega smo včasih bitje "srca" šteli v mega, danes v giga, jutri verjetno v tera...

aja, turbo--, da ne bom zašel iz teme (pa ne mislim prostora brez luči), lahko ti napišem rešitev v jeziku, katerega ne razumeš; je pa v igri while in if; tako kot v tem velikonočnem času zajček in pisano jajce

:)

mte ::

In tudi to, da nekdo sprasuje, kako najti najvecji deljitelj, bi ti lahko dalo vedeti, da verjetno ne sprasuje po kaki tvoji über resitvi, ki je itak noben ne razume, ampak po eni simpl resitvi.

Če se prav spomnem, je tale stvar snov gimnazije. Ne reči, da še nisi slišal za tale algoritem tam. Če ti je pa še gimnazija "über", potem pa ne vem kako lahko sploh poskušaš kaj programirat...
Kljub enostavnosti obeh rešitev še vedno vztrajaš pri tvoji po nepotrebnem požrešni in zelo neučinkoviti rešitvi. A se vsi MS programerji zanašate samo na hitrost procesorjev? Kaj pa ko boste imeli pred sabo kakšen tapravi algoritem, ko bi učinkovito neko stvar izračunali v enem dnevu, po vaših metodah pa v enem tednu? Boh pomagi.
Izvoli isto stvar v c/c++/c#:
int gcd(int a, int b) {
  if (b == 0) return a;
  else return gcd(b, a % b);
}

krho ::

Dragi Micro$oft. Lepo bi bilo, če bi se malce izobrazil na področju programskih jezikov.
BTW. Tisto je Python. Ne pa da povsod vlačiš "smrdljivi" C#:\
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

Zgodovina sprememb…

  • spremenil: krho ()

jeti51 ::

Microsoft, lahko te je sram. Gre za znani Evklidov algoritem (ki je tudi zelo preprost, preberi si na internetu) in če ti postopek ni jasen, je problem v TEBI, ne v tistih parih vrsticah kode. Ker je, še enkrat, algoritem zelo preprost.

Samo nasvet: preden kritiziraš neko rešitev, jo vsaj poskusi najprej razumeti, ne pa da začetniku svetuješ z zelo slabo in počasno rešitvijo in to samo zato, ker neke druge predlagane rešitve ne razumeš. Res, prav smešiš se pri takih osnovnih stvareh, škoda, da sam trenutno ne vidiš, kako zelo. Če hočeš biti dober programer, boš moral težiti k pisanju algoritmov z manjšo časovno zahtevnostjo namesto straight-forward pristopa. Če ti je pretežko, pa postani informatik ali pa prodajalec Microsoftovih izdelkov.>:D

Veš, programiranje je vse kaj več kot samo samo drag-and-drop klikanje form in tipkanje kode brez premisleka, kako učinkovita je ta koda.

snow ::

Microsoft
Kodo naslednjič opremi s st.koda tagi, kjer lahko uporabljaš tudi znak manjše.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Zgodovina sprememb…

  • spremenilo: snow ()

snow ::

Microsoft

1.letnik gimnazije - kontrolke iz matematike. Misliš da so delali iteracijo do 1000+ in delili? :D


Snov po letnikih.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Zgodovina sprememb…

  • spremenilo: snow ()

WarpedGone ::

Sam par pripomb:

Govoriti o učinkoviti rešitvi in delati rekurziven algoritem je protislovje.

Evklidov algoritem je najstarejši znan algoritem sploh. Programiranje pa ni le uporaba znanih receptov ampak tut razumevanje problema. Ko prvič vidiš evklida ti ni jasno nič.

Algoritmi se podajajo v psevdokodi. Zato, da se človek ne ubada z tehnikalijami jezika ampak da razmišlja o algoritmu samemu.

Če je owc-in program tipičen program v pythonu, pol lahk rečem le, da se programerska industrija iz napak c-ja ni naučila čisto nič. Njegov program je za neposvečenega TOTALNO nerazumljiv. Re-usanje iste variable za kontrolo zanke in samo naračunavanje je zelo leet, je pa zelo mim, kar se tiče dobrega programiranja.

Poleg tega pa, človek verjetno ne študira boljše rešitve znanih problemov, ampak se uči programirat. Tle je pa glavno analitično razmišljanje. Kjer največ pomaga psevdokoda.
Zbogom in hvala za vse ribe

OwcA ::

Govoriti o učinkoviti rešitvi in delati rekurziven algoritem je protislovje.

No, no. V funkcijskih jezikih je rekurzivna rešitev optimalna. Tail call elemination dela čudeže.

Poleg tega pa, človek verjetno ne študira boljše rešitve znanih problemov, ampak se uči programirat. Tle je pa glavno analitično razmišljanje. Kjer največ pomaga psevdokoda.

Očitna rešiteve ravno ne vzpoduje analitičnega razmišljanja, ka-li?

Če je owc-in program tipičen program v pythonu, pol lahk rečem le, da se programerska industrija iz napak c-ja ni naučila čisto nič. Njegov program je za neposvečenega TOTALNO nerazumljiv. Re-usanje iste variable za kontrolo zanke in samo naračunavanje je zelo leet, je pa zelo mim, kar se tiče dobrega programiranja.

To je takorekoč dobesedno udejanjenje Evklidovega algoritma! Edino kar mi lahko očitaš je, da sem upoštaval lastnosti Pythona in napisal zanko namesto rekurzije, čeprav za razumeti je verjetno iterativna rešitev tako ali tako lažja.
Otroška radovednost - gonilo napredka.

WarpedGone ::

Še enkrat:

Če človek ne zna napisat programa za gcd, je očitno še precej na začetku. Placa za izbolšave mu itak ne bo nikol zmanjkal. Naj pa najprej nardi neki kar bo delalo in bo tut razumel zakaj in kako dela. Pol se pa nej matra in stvar izboljšuje. Tut preko evklida, rekurcije, etc.
Zbogom in hvala za vse ribe

Microsoft ::

Ok, vi ki ste tako über leet in to. Povejte, ko ste prvic dobili nalogo, da zracunate takole nalog, ste sigurno zaceli vsim tezit z nekim algoritmom, optimizacijo, rekurzijo, ...

Skratka, ne gre tako. Stvari gredo po vrsti. In ce prvo ne naredis z for zanko (ali cem podobnim), potem nikoli ne bos znal nic drugega, kot kopirat algiritme.

In taksnega algoritma nismo imeli v srednji soli. Se zdalec ne! Pa rekurzijo. V prvem letniku?! Lepo vas prosm. Neumnosti na celi crti. (govorim za 5~10 let nazaj).


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

snow ::

Maturitetni katalog za matematiko, 2001, stran 9 - Evklidov algoritem se zahteva za višji nivo iskanje največjega skupnega deljitelja pa tudi za osnovni nivo. Evklida pa smo učili pri pouku iz matematike učili vsi - gimnazija Velenje.

Pa OwcA ni podal rekurzivne rešitve.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

snow ::

Stvaritelju teme, turbu-- pa svetujem da si prebere PREBERI ME: označevanje topicov v oddelku programiranje.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

OwcA ::

Povejte, ko ste prvic dobili nalogo, da zracunate takole nalog, ste sigurno zaceli vsim tezit z nekim algoritmom, optimizacijo, rekurzijo, ...

Pravzaprav ja. To je prednost, če nisi čisto v vsem samouk. Tako kaj kmalu ugotovoiš, da za večino problemov že obstjajo razmeroma elegantni algoritmi in se k naivni rešitvi zatčeš šele, če ne najdeš nič boljšega, ne obratno.

Skratka, ne gre tako. Stvari gredo po vrsti. In ce prvo ne naredis z for zanko (ali cem podobnim), potem nikoli ne bos znal nic drugega, kot kopirat algiritme.

Odvisno od tega, kaj se učiš. Če govorimo o obrtniškem izdelovanju aplikacij, potem imaš verjetno prav. Imamo kladivo in vsak problem zbijemo na obliko žeblja.
Ampak to ni programiranje. Katero orodje (jezikovni konstrukt) uporabiš je zadnja skrb (čisti funkcijski jeziki niti nimajo zank), rešitev problema se nikoli ne skriva v vprašanju "a je to za for al za if?" ampak v razumevanju problema.

In taksnega algoritma nismo imeli v srednji soli. Se zdalec ne! Pa rekurzijo. V prvem letniku?! Lepo vas prosm. Neumnosti na celi crti. (govorim za 5~10 let nazaj).

Mi (gimnazija Vič) smo 7 let nazaj imeli oboje, Evklidov algoritem in rekurzijo, v 1. letniku.
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

OwcA ::

Da ne bo pomote, tista moja rešitev zgoraj ni bila mišljena kot odgovor na začetno vprašanje (pravzaprav niti še ne vemo kaj ga muči), temveč samo kot argumentacija moje kritike. Bolj didaktična bi bila gotovo Skoratična metoda (zastavljanje vprašanj preko katerih učenec sam pride do novih spoznanj).
Otroška radovednost - gonilo napredka.

kopernik ::

Microsoft, Evklidov algoritem JE elegantna in enostavna rešitev, ki se jo učimo tudi v šoli. Mislim, računanje ostanka pri deljenju pa res ni zahtevno, niti za začetnike v programiranju. Na Wikipedi piše : "Euclid's algorithm is widely used in practice, especially for small numbers, due to its simplicity."

Morda temu v šoli niste rekli Evklidov algoritem, kar pa niti ni tako pomembno.

Zgodovina sprememb…

  • spremenil: kopernik ()

Microsoft ::

WarpedOne, OwcA in jst smo dali resitve. Vsak svojo. Cakam se na ostale, ker do sedaj ste samo smetili.:\


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

snow ::

Največji skupni deljitelj na googlu - rešitev, če človek ne ve kaj je največji skupni deljitelj.

Če pa je problem pri programiranju tega, pa moramo vedeti za programski jezik gre - verjetno kateri od tistih katerih rešitve so zgoraj navedene, ni pa nujno. :\
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Thomas ::

Man muss immer generalisieren - Carl Jacobi


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Najvecji skupni delitelj dveh ali vec stevil

Oddelek: Programiranje
51033 (661) RatedR
»

Naloga iz Putka - UPM

Oddelek: Programiranje
242053 (1389) NejcSSD
»

problem s programiranjem ulomka

Oddelek: Programiranje
191596 (1036) KaRkY
»

Digitalna evolucija (strani: 1 2 3 426 27 28 29 )

Oddelek: Znanost in tehnologija
141673455 (23624) pietro
»

Okrajšan ulomek (C++)

Oddelek: Programiranje
91729 (1544) Ktj

Več podobnih tem