Chmatákov online


Fórum – Let's do "programování"

Fórum » Diskuse mimo mísu » Let's do "programování"

MAK_obnova2
uživatel
SZ
čus "komunito"

nedávno mě kamarádka překecala ať jí pomůžu trošku s programováním do školy a měla velice zajímavý úkol.

Sestavte algoritmus, který určí, zda dané číslo je dokonalé. Dokonalé číslo je takové kdy součet dělitelů je roven tomu číslu (tedy např u 6 máte dělitele 1 2 a 3 ; 1+2+3 = 6 --> číslo je dokonalé)



Upřímě jsem nad tím chvilku přemýšlel a mám nějaké svoje řešení, akorát by mě zajímalo, jak by to řešil někdo jiný. Pokud teda někdo ovládá jakýkoliv jazyk, který dokáže vyřešit tuto úlohu a má zájem se předvést tak s chutí do toho.

Odměnu bohužel nemám xD ale spíš půjde o ten pocit kdy můžete přemýšlet nad problémem.
# 6.6.2013 20.19
 
grok
uživatel
Obrázek
Ve hře: Naxi
SZ Web
Byla by potřeba vypsat čísla, kterými se to dělí?

Jinak v pascalu bych to asi udělal nějak takto:

načíst číslo
for i:=1 to x(podle čísla) do begin
if x mod i = 0 then S:=S+i;
Nakonec podmínku, jestli se součet (S) bude rovnat číslu, tak je to dokonalé číslo.
Snad to tak bude :D, moc se mi teď přemýšlet nechce :).



Edit:

Napsal jsem celej program, možna tam bude par chybek :)
I s výpisem, kterými čísli to lze dělit.


program dokonale_cislo;
var x,i,S:integer;

begin
writeln('Nacti cislo:');
read(x);
for i:= 1 to x-1 do begin
if x mod i=0 then begin
S:=S+i;
write(i:4);
end;

if S = x then writeln('Cislo ',x,' je dokonale!')
else writeln('Cislo ',x,' neni dokonale!');
end.



Naposledy upraveno: 9.6.2013 1.18

# 6.6.2013 22.11
Chmatákov fan stránka:
www.chmatakov.kvalitne.cz

MAK_obnova2
uživatel
SZ
Já to tam třeba měl.. ale já to řešil přes list tohle vypadá funkční a mnohem jednodušší

:D vidíš, přesně takovej přístup jako máš ty mě zajímal, dík
# 6.6.2013 22.17
 
grok
uživatel
Obrázek
Ve hře: Naxi
SZ Web
Není zač, něco takového jsem na noc potřeboval :).
Máš tam celej program do pascalu.


Mám tam chybu, u cyklu for i:= musíš začít dvojkou, jinak by to započítalo číslo samo samé, které se nepočítá :)
# 6.6.2013 22.25
Chmatákov fan stránka:
www.chmatakov.kvalitne.cz

MAK_obnova2
uživatel
SZ
No to je taky blbost protože u všech čísel je dělitel 1 takže musíš to tam nějak započítat
# 6.6.2013 23.13
 
grok
uživatel
Obrázek
Ve hře: Naxi
SZ Web
Aha tak ještě jinak, já jsem jen věděl, že se tam nesmí započítat číslo, které je stejně velké jako je testované číslo.

V tom případě by měl být cyklus asi takhle? : for i:=1 to x-1 do begin
Nejsem si jistý, jestli to v takhle v pascalu pujde, kdyžtak by se to hodilo normal od 1 do x a odečetlo se číslo -x od S a bylo by :)

Snad už to bude dobře :D
Ale i tak, pokud tam jsou ještě chyby, tak to pujde určitě nějak opracit. Ve kterém programu to děláte vy?
# 7.6.2013 6.50
Chmatákov fan stránka:
www.chmatakov.kvalitne.cz

MAK_obnova2
uživatel
SZ
Já to mám v C#
# 7.6.2013 12.49
 
aleyo
uživatel
SZ Mail
Vim, že píšu trochu pozdě, ale přeci jen je to mimo mísu :)
Uvedu zde příklad v javě, který bude i asi dost podobný C#
Tady je ta metoda(nazvěte si to funkce, pokuď chcete :D ):


boolean dokonalost(int cislo){
int cisloOvereni = 0;

for(int i = 1 ; i < cislo ; i++){
if(cislo % i == 0){
cisloOvereni += i;
}
}

if(cislo == cisloOvereni){
return true;
}

return false;

}
# 29.7.2013 8.49
 

Fórum » Diskuse mimo mísu » Let's do "programování"

Pro zasílání odpovědí se musíte přihlásit.



(Registrace)


↑ nahoru | © 2004–2009 Chmatákov Team. Všechna práva vyhrazena.