Nejmenší společný dělitel a "hloupá" holka v nesnázích – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nejmenší společný dělitel a "hloupá" holka v nesnázích – C / C++ – Fórum – Programujte.comNejmenší společný dělitel a "hloupá" holka v nesnázích – C / C++ – Fórum – Programujte.com

 

Klára
~ Anonymní uživatel
16 příspěvků
30. 9. 2007   #1
-
0
-

Zdravím lidi,

potřebovala bych poradit do školy s úlohou "Hledání nejmenšího společného dělitele". Ve škole mi bohužel utekl celý úvod do C++ a doučuji se jen tady pomocí "Kurzu C++" (tímto mockrát děkuji autorovi za krásně napsaný kurz i pro dementy jako já, protože přávě čtu 2. lekci a zatím jsem v obraze). Ale zpět k věci, prostě jsem uplně v pasti, matematicky bych to dala, ale nevím jak to přenést do C++. Poradí please nějaký borec, který se zrovna nudí :-)

Pokud jo, předem velice děkuji.

Lara

Nahlásit jako SPAM
IP: ...–
DeathHumanCZ0
Stálý člen
30. 9. 2007   #2
-
0
-

Jeastli to "matematicky" uděláš tak není problém to v Cčku udělat. Přemýšlej nad vzorcem výpočtu a pak to zakomponuj do kódu.

Nahlásit jako SPAM
IP: ...–
Vskutku...
k
~ Anonymní uživatel
144 příspěvků
30. 9. 2007   #3
-
0
-

Najmensi spolocny delitel ? Ved to je pre vsetky cisla z R 1 ;). Tak predpokladam, ze hladas najvacsi spolocny delitel.



int D(int x1, int x2)
{
int tmpx = x1 > x2 ? x2 : x1;
for(;tmpx > 1; tmpx--) {
if( ((x1%tmpx) || (x2%tmpx)) == 0)
return tmpx;
}
return 1;
}

Nahlásit jako SPAM
IP: ...–
Klára
~ Anonymní uživatel
16 příspěvků
30. 9. 2007   #4
-
0
-

DeathHumanCZ píše:#
# Jeastli to "matematicky" uděláš tak není problém to v Cčku udělat. Přemýšlej nad vzorcem výpočtu a pak to zakomponuj do kódu.

Takhle, právě na tom zakonponování jsem se zasekla. Důvod vidím v tom, že mi ještě chybí některé základní pravidla a slovní zásoba C++ :-] V tuhle chvíli by mi teď nejvíc pomohlo pár řádků zdrojového programu s komentářem pro lamy jako jsem zatím taky já :-D....zatím

Lara

Nahlásit jako SPAM
IP: ...–
Klára
~ Anonymní uživatel
16 příspěvků
30. 9. 2007   #5
-
0
-

k píše:#
# Najmensi spolocny delitel ? Ved to je pre vsetky cisla z R 1 ;). Tak predpokladam, ze hladas najvacsi spolocny delitel.#
##
#

#
#int D(int x1, int x2)#
#{#
# int tmpx = x1 > x2 ? x2 : x1;#
# for(;tmpx > 1; tmpx--) {#
# if( ((x1%tmpx) || (x2%tmpx)) == 0)#
# return tmpx;#
# }#
# return 1;#
#}#
#
#
#

Zdarec, vážně jde o nejmenšího společného dělitele. Pokud je to fakt tak easy, tak sorry za demenci, ale hlava mi to prostě furt nebere.

Nahlásit jako SPAM
IP: ...–
Klára
~ Anonymní uživatel
16 příspěvků
30. 9. 2007   #6
-
0
-

Ještě doplním, úloha má jít řešit 2 způsoby. Potřebovala bych to vysvětlit i kamarádce (ještě větší lama než já). Zítra todle budem řešit ve škole a potřebovaly bychom zaperlit každá s jiným způsobem :-D takový divadýlko pro učitele ;-)

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
30. 9. 2007   #7
-
0
-

nesluzi na toto prave euklidov algoritmus? (teda ked predpokladam ze sa jedna o najvecsi delitel)



int nsd(int a, int b){

do{

if(a > b) a -= b;
else if(b > a) b -= a;

}while(a != b);

return a;
}


malo by to fungovat ale to momentalne nemam kde skompilovat

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Zelenáč0
Posthunter
30. 9. 2007   #8
-
0
-

Dovolim si olga trosicku opravit ;-)
Pro hledání největšího společného dělitele (NSD, Greatest Comon Divisor, GCD) dvou čísel se používá euklidovský algoritmus.



int nsd(int ta, int tb){

int A, B, C;

// zjistime, ktere z cisel je vetsi
if(ta > tb){
A = ta;
B = tb;
} else if(ta < tb){
A = tb;
B = ta;
} else{ // pokud jsou stejna, jsou obe NSD
return ta;
}

do{

C = A%B; // % je operator modulo

A = B;
B = C;
} while(B != 0); // dokud neni zbytek (tedy C) roven "0".. Protoze jsme to ale pred chvily cele posunuli, budeme porovnavat B

return A;

}



A priklad s cisly 250 a 32:




A B C

250 32 26
32 26 6
26 6 2
6 2 0


NSD čísel 250 a 32 je tedy 2...

Nahlásit jako SPAM
IP: 89.176.254.–
Klára
~ Anonymní uživatel
16 příspěvků
30. 9. 2007   #9
-
0
-

To olgo: jj, Euklidův algoritmus je pro největšího, já ale potřebuju pořešit nejmenšího společného dělitele :-]

Nahlásit jako SPAM
IP: ...–
Klára
~ Anonymní uživatel
16 příspěvků
30. 9. 2007   #10
-
0
-

To Zelenáč: Byl jsi rychlejší :-) Každopádně díky i za toho největšího společ. dělitele. ;-) Můj problém ale zůstává

Lara

Nahlásit jako SPAM
IP: ...–
Zelenáč0
Posthunter
30. 9. 2007   #11
-
0
-

NEJMENŠÍ SPOLEČNÝ DĚLITEL NEEXISTUJE!!!
z toho důvodu, že neexistuje ani nejmenší číslo... Ať vezmu jakékoli číslo, vždy najdu ještě nějaké číslo měnší (to samozřejmě platí pro obor reálných čísel).
V oboru celých čísel je nejmenší společný dělitel vždy 1, takže nemá cenu ho počítat..

Nahlásit jako SPAM
IP: ...–
klára
~ Anonymní uživatel
16 příspěvků
30. 9. 2007   #12
-
0
-

To Zelenáč: Ty jo, dohodneme se na tom, že na celý tento topic zapomeneme a nebudeme o něm nikomu říkat? :-D Řeším to už několik hodin a až teď mi došlo, že jsem celou dobu řešila uplnou hloupost :-D

Díky moc za pomoc, jdu si posypat hlavu popelem.

Lara

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
30. 9. 2007   #13
-
0
-

To Zelenáč: a ako je to pri zrovnani tych algoritmov? imho je rychlejsie to odcitane ale asi to bude hodne zavisiet od vstupu

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Zelenáč0
Posthunter
30. 9. 2007   #14
-
0
-

Asi urcite to bude zaviset na vstupu.. Deleni je sice AFAIK daleko narocnejsi nez odecitani, ovsem rekneme, ze bychom meli spocitat NSD 10 000 000 000 a 2.. Moje verze by tohle zvladla za jedinou iteraci, zatimco tvoje by na to potrebovala 9 999 999 998 iteraci..

Nahlásit jako SPAM
IP: 89.176.254.–
DeathHumanCZ0
Stálý člen
30. 9. 2007   #15
-
0
-

To Zelenáč: Už jsem přišel na vzorec pro nejmenšího společného dělitele "a:a" :-D

Nahlásit jako SPAM
IP: ...–
Vskutku...
mephi0
Expert
1. 10. 2007   #16
-
0
-

omg nikto neuviedol funkciu na vypočet najmenšieho delitela tak ja to napravim:



int spolocnyDelitel(int a,int b)
{
int ret;

ret = (a+b) / (b+a);
ret *= ret;
for (int i=0;i<(sqrt(a*a+b*b);i++)
ret = (-1)*(-1)*ret;
return ret;
}


snad som sa nepomylil, jednoduchšie to asi nepojde;

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
DeathHumanCZ0
Stálý člen
1. 10. 2007   #17
-
0
-

To mephi: :-D

Nahlásit jako SPAM
IP: ...–
Vskutku...
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, 26 hostů

Moderátoři diskuze

 

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