Ahoj, mám za úkol napsat program který zjistí největší společný dělitel dvou čísel. Našla jsem na internetu- níže napsaný.
Říká tedy- tučná část, jestliže a bude větší než b- zmenši číslo a o číslo b jinak zmenši číslo b o číslo a.
další řádek s podmínkou if mi není jasný- tedy jeho druhá část else Delitel:=Delitel(a,b); není mi jasné- proč tam jsou hodnoty a i b
Pokud tedy budu mít napříkald čísla 18 a 10. Mám číslo a větší než číslo b. Odečte se mi tedy od čísla 18-10. Vysledek 8. Delitel tedy bude? Vím že má vyjít 2- ale jak k tomu ten program dospěje? Moc díky za pomoc.
Program nsd;
{$APPTYPE CONSOLE}
uses
SysUtils;
Var a,b : integer;
Function Delitel(a,b:integer):integer;
Begin
if a > b then Dec(a,b) else Dec(b,a);
if (b=0) or (a=0) then Delitel:=a or b else Delitel:=Delitel(a,b);
End;
Begin
Writeln('Zadej dve cisla :');
Readln(a,b);
writeln('n(',a,',',b,') = ',delitel(a,b));
Readln;
end.
pascal- největší společný dělitel
-
- Level 2
- Příspěvky: 203
- Registrován: březen 07
- Pohlaví:
- Stav:
Offline
Re: pascal- největší společný dělitel
Máš dvě čísla, v tomto případě 18 a 10 a vždy se odečte větší od menšího; následně se pokračuje s rozdílem a menším z číslem dokud obě čísla nebudou stejná. Tedy:
1) 18>10 => 18-10 = 8, pokračuje se s 10 a 8
2) 10>8 => 10-8 = 2, pokračuje se s 8 a 2
3) 8>2 => 8-2 = 6, pokračuje se s 6 a 2
4) 6>2 => 6-2=4, pokračuje se s 4 a 2
5) 4>2 => 4-2=2, pokračuje se s 2 a 2
6) 2=2 => nalezen největší společný dělitel
Edit:
Možná trochu srozumitelnější než rekurze je následující cyklus (c++):
[syntax]int a; int b;
cout << "Zadat prvni cislo ";
cin >> a;
cout << "Zadat druhe cislo ";
cin >> b;
while (a != b)
{
if (a>b) a=1+(a-1)%b;
else b=1+(b-1)%a;
}
cout << "Nejvetsi spolecny delitel: "<< a;[/syntax]
1) 18>10 => 18-10 = 8, pokračuje se s 10 a 8
2) 10>8 => 10-8 = 2, pokračuje se s 8 a 2
3) 8>2 => 8-2 = 6, pokračuje se s 6 a 2
4) 6>2 => 6-2=4, pokračuje se s 4 a 2
5) 4>2 => 4-2=2, pokračuje se s 2 a 2
6) 2=2 => nalezen největší společný dělitel
Edit:
Možná trochu srozumitelnější než rekurze je následující cyklus (c++):
[syntax]int a; int b;
cout << "Zadat prvni cislo ";
cin >> a;
cout << "Zadat druhe cislo ";
cin >> b;
while (a != b)
{
if (a>b) a=1+(a-1)%b;
else b=1+(b-1)%a;
}
cout << "Nejvetsi spolecny delitel: "<< a;[/syntax]
Naposledy upravil(a) ini808 dne 10 led 2010 18:54, celkem upraveno 1 x.
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: pascal- největší společný dělitel
ini808: zdrojové kódy dávej prosím do syntax funkce.
Taky autorka tématu chce program v jazyku Pascal nikoli C++
Jak se vůbec počítá ten dělitel ?
Taky autorka tématu chce program v jazyku Pascal nikoli C++
Jak se vůbec počítá ten dělitel ?

PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
-
- Level 2
- Příspěvky: 203
- Registrován: březen 07
- Pohlaví:
- Stav:
Offline
Re: pascal- největší společný dělitel
Ten dělitel se počítá takhle http://maths.cz/clanky/nejvetsi-spolecny-delitel.html.
-
- Level 2
- Příspěvky: 203
- Registrován: březen 07
- Pohlaví:
- Stav:
Offline
Re: pascal- největší společný dělitel
ini 808- takze to delitel(a,b) vlastne bude nakonci vypadat jakoby delitel(2,2) ?
Re: pascal- největší společný dělitel
ano, nakonec se bude volat fce delitel(2, 2), která vrátí hodnotu 2
CZechBoY: omlouvám se, kód upraven
Já vím, mluvilo se o kódu v Pascalu, ale také o porozumění Euklidovu algoritmu. Když jsem měl uložen tento kód, tak jsem ho poslal. Je podle mě čitelný i neznalým c++, respektive málo znalým programování. Jestli se ti nelíbí, můžeš ho přepsat
CZechBoY: omlouvám se, kód upraven
Já vím, mluvilo se o kódu v Pascalu, ale také o porozumění Euklidovu algoritmu. Když jsem měl uložen tento kód, tak jsem ho poslal. Je podle mě čitelný i neznalým c++, respektive málo znalým programování. Jestli se ti nelíbí, můžeš ho přepsat

-
- Level 2
- Příspěvky: 203
- Registrován: březen 07
- Pohlaví:
- Stav:
Offline
Re: pascal- největší společný dělitel
tak jsem si to nakonec upravila takhle:
[syntax]uses
SysUtils;
var a,b:integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
writeln ('zadej cislo a,b');
readln (a,b);
repeat
if a>b then a:=(a-b) else b:=(b-a);
until a=b;
writeln('nsd je ',a);
readln;
end.[/syntax]
ted ještě potřebuju aby z toho spočítal nejmenší společný násobek těch dvou čísel. Tedy aby provedl (a*b) / hodnotou, ktera mi vysla jako nejvetsi spolecny delitel.. Tedy 18*10 div 2= 90. Ale nevím jak v programu použít číslo které mi vyjde jako nejmenší společný dělitel. Budu muset použít funkce? Díky za rady
[syntax]uses
SysUtils;
var a,b:integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
writeln ('zadej cislo a,b');
readln (a,b);
repeat
if a>b then a:=(a-b) else b:=(b-a);
until a=b;
writeln('nsd je ',a);
readln;
end.[/syntax]
ted ještě potřebuju aby z toho spočítal nejmenší společný násobek těch dvou čísel. Tedy aby provedl (a*b) / hodnotou, ktera mi vysla jako nejvetsi spolecny delitel.. Tedy 18*10 div 2= 90. Ale nevím jak v programu použít číslo které mi vyjde jako nejmenší společný dělitel. Budu muset použít funkce? Díky za rady
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: pascal- největší společný dělitel
Sice Pascal neumim, ale hodnotu výsledku získáš třeba takhle: výsledek=a+b;
zkusim někde najít knížku o Pascalu, někde jsem ji doma měl
jo a zkuste dát [ syntax lang=pascal]váš kód [/syntax]
zkusim někde najít knížku o Pascalu, někde jsem ji doma měl

jo a zkuste dát [ syntax lang=pascal]váš kód [/syntax]
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
-
- Level 2
- Příspěvky: 203
- Registrován: březen 07
- Pohlaví:
- Stav:
Offline
Re: pascal- největší společný dělitel
v pascalu je to myslí takhle : vysledek:= a*b;
takze bych napsala vysledek:= (a*b) div a ted prave nevim co napsat- když napíšu div a - tak je to hloupost.
takze bych napsala vysledek:= (a*b) div a ted prave nevim co napsat- když napíšu div a - tak je to hloupost.
- Tomina
- Level 5.5
- Příspěvky: 2690
- Registrován: březen 08
- Bydliště: Praha
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: pascal- největší společný dělitel
Já mám mezi cvičeními ze školy toto:
[syntax]program NSNaNSD;
{$APPTYPE CONSOLE}
uses
SysUtils;
var x,y:integer;
function nsd(a,b:integer):integer; {nejvetsi spolecny delitel}
var
zbytek:integer;
begin
repeat {postupne deleni}
zbytek:=a mod b; {zjistovani zbytku po deleni}
a:=b;
if zbytek = 0 then break else b:=zbytek;
until zbytek=0;
nsd:=b;
end;
function nsn(a,b:longint):longint; {nejmensi spolecny nasobek}
begin
nsn:=(a*b) div nsd(a,b);
end;
begin
write('Zadejte cislo x: ');
readln(x);
write('Zadejte cislo y: ');
readln(y);
writeln;
writeln('Nejvetsi spolecny delitel je: ', nsd(x,y));
writeln('Nejmensi spolecny nasobek je: ', nsn(x,y));
readln;
end.
[/syntax]
[syntax]program NSNaNSD;
{$APPTYPE CONSOLE}
uses
SysUtils;
var x,y:integer;
function nsd(a,b:integer):integer; {nejvetsi spolecny delitel}
var
zbytek:integer;
begin
repeat {postupne deleni}
zbytek:=a mod b; {zjistovani zbytku po deleni}
a:=b;
if zbytek = 0 then break else b:=zbytek;
until zbytek=0;
nsd:=b;
end;
function nsn(a,b:longint):longint; {nejmensi spolecny nasobek}
begin
nsn:=(a*b) div nsd(a,b);
end;
begin
write('Zadejte cislo x: ');
readln(x);
write('Zadejte cislo y: ');
readln(y);
writeln;
writeln('Nejvetsi spolecny delitel je: ', nsd(x,y));
writeln('Nejmensi spolecny nasobek je: ', nsn(x,y));
readln;
end.
[/syntax]
-
- Level 2
- Příspěvky: 203
- Registrován: březen 07
- Pohlaví:
- Stav:
Offline
Re: pascal- největší společný dělitel
tomina- díky, tenhle zápis jsem taky našla- ale přišlo mi to složitý
, ty funkce mi nějak nejdou, no pascal se učim 2 dny- v pondělí jdu na zkoušku. Takže je tam asi stejně budu muset zakomponovat... sakra 


- Tomina
- Level 5.5
- Příspěvky: 2690
- Registrován: březen 08
- Bydliště: Praha
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: pascal- největší společný dělitel
Já jdu ve středu také na zkoušku z pascalu, drtím to už snad dva měsíce a prostě na to nemám hlavu, jsou to samé funkce, matice, integrály, bla bla bla...je to strašný...jestli to dám, tak se půjdu pořádně ožrat 

Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti