Funkce - dělitelnost čísla – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Funkce - dělitelnost čísla – Pascal – Fórum – Programujte.comFunkce - dělitelnost čísla – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
kejta0
Návštěvník
8. 11. 2013   #1
-
0
-

Dobrý den, mám za úkol napsat funkci která má zjistit jestli dané číslo N je dělitelné všemi jeho ciframi.

Paté za pomoci této funkce zjistit která čísla v intervalu od čísla A do čísla B(čísla jsou zadaná na vstupu) jsou právě takové, že jdou vydělit všemi svými ciframi.

program delitelnostcisla;
var  A, B: integer;

function Spravne (N: integer): boolean;
var cislo, cifra,delit: integer;
begin
cislo := N;
while cislo > 0 do
      begin cifra := cislo mod 10;
            cislo := cislo div 10;
            delit := cislo div cifra;
if delit*cifra=cislo then spravne:=true
                     else spravne:=false;
end;

begin



end.

S funkcemi jsem setkal poprvé, takže tady je něco co jsem zkusil ale nevím zda to bude fungovat přesně tak jak má. Potřeboval bych poradit, jak dále pokračovat. 

Jo a ještě mi furt kompilátor cpe že na konci programu mám mít za end středník a nikoliv tečku, to dělá proč? :D

Děkuji za jakýkoliv nápad a pomoc.

Nahlásit jako SPAM
IP: 85.70.175.–
Reklama
Reklama
kejta0
Návštěvník
8. 11. 2013   #2
-
0
-

Už teď vidím že vlastně jakékoliv číslo by bylo správné protože by se to vždycky rovnalo. Úplně jsem se do toho zamotal a nic mě nenapadá.

Nahlásit jako SPAM
IP: 85.70.175.–
KIIV+42
God of flame
8. 11. 2013   #3
-
0
-

si muzes vypocitat kolik mas beginu a endu... pak ti bude hned jasne, proc ti to cpe ;

+ na zjisteni delitelnosti by se hodilo spis modulo (alias operator mod) - coz je zbytek po celociselnem deleni....

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
kejta0
Návštěvník
8. 11. 2013   #4
-
0
-

#3 KIIV 

function Spravne (N: integer): boolean;
var cislo, cifra,delit: integer;
begin
cislo := N;
while cislo > 0 do
      begin cifra := cislo mod 10;
            cislo := cislo div 10;
            delit := cislo mod cifra;
            end;
if delit*cifra=cislo then spravne:=true
                     else spravne:=false;
end;

Takze nejak takhle? a jak pokracovat dal?

Nahlásit jako SPAM
IP: 85.70.175.–
KIIV+42
God of flame
8. 11. 2013   #5
-
0
-

no mod se hodi, abys to pak nemusel takhle slozite zase nasobit ... ta podminka musi byt nutne uvnitr while... a "delit" promennou vubec nebudes potrebovat... zbytek po deleni je nenulovy, pokud nejde delit bezezbytku celocislne...

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
kejta0
Návštěvník
8. 11. 2013   #6
-
0
-

#5 KIIV
Takže smazat proměnnou dělit a pak

if cislo mod cifra = (nevim co dat sem) then ...

                                                            else...

Nahlásit jako SPAM
IP: 85.70.175.–
KIIV+42
God of flame
8. 11. 2013   #7
-
0
-

coz je zbytek po celociselnem deleni....

jakej je asi zbytek, kdyz jde cislo vydelit bezezbytku?

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
kejta0
Návštěvník
8. 11. 2013   #8
-
0
-

#7 KIIV
jooo, už chápu ten příkaz modulo, nejdřív jsem ho nějak nepochopil. 

Nahlásit jako SPAM
IP: 85.70.175.–
KIIV+42
God of flame
8. 11. 2013   #9
-
0
-

a ted uz jen doresit, aby se ta navratova hodnota pred cyklem nastavila na true a v cyklu se uz mohla zmenit jen na false, kdyz to nebude nejakou z cifer delitelne

(to co vratis ted je, jestli je delitelne cislo cifrou s nejvyssi vahou)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
kejta0
Návštěvník
8. 11. 2013   #10
-
0
-

#9 KIIV
takže před cyklus while nastavit

spravne:= true?

Nebo ted nejak nechapu..

Nahlásit jako SPAM
IP: 85.70.175.–
KIIV+42
God of flame
8. 11. 2013   #11
-
0
-

jo a v cyklu to prepises na false jen v pripade, ze si nasel cifru, ktera neni delitelem bezezbytku...

+ co budes delat s 0?

+ taky si to "cislo" menis pod rukama  mozna by bylo lepsi ziskavat zbytek po deleni z N a ne z cislo

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
kejta0
Návštěvník
8. 11. 2013   #12
-
0
-

   

program delitelnostcisla;
var  A, B, i: integer;

function Spravne (N: integer): boolean;
var cislo, cifra: integer;
begin
cislo := N;
spravne :=true;
while cislo > 0 do
      begin cifra := cislo mod 10;
            cislo := cislo div 10;

if cifra=0 then spravne:=false
else if N mod cifra <>0  then spravne:=false;

end;
end;

begin
 writeln ('Zadej dve cisla v jehoz rozmezi se dozvis spravna cisla:');
 readln (a);
 readln (b);
 for I:= a to b do
                if spravne(i) then
                write(i);


end.

Ted jsem na tom nejak takhle..

Nahlásit jako SPAM
IP: 85.70.175.–
kejta0
Návštěvník
8. 11. 2013   #13
-
0
-

Myslim, ze to je dokonce i konecne reseni. 

Nahlásit jako SPAM
IP: 85.70.175.–
kejta0
Návštěvník
8. 11. 2013   #14
-
0
-

Akorát ještě dořešit možná to, když člověk zadá to první číslo větší než to druhý. To by potom neudělalo vůbec nic.

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

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ý