HELP pascal

Programovacie jazyky, rady, poradňa...
breky023
Amateur
Amateur
Príspevky: 32
Registrovaný: 24 máj 2009, 16:48
Bydlisko: Vranov nad Topľou

HELP pascal

Príspevok od používateľa breky023 »

zdravím. potreboval by som pomoc s programom v pascale

PR.
Napíšte program, ktorým nájdete najväčšieho spoločného deliteľa N zadaných čísel. Užívateľ hodnotu N zadá.

keby bola znama ta hodnota N, tak by som si s tym vedel poradit, ale ked ze nie je potreboval by som pomoc.

toto je program pre 2 cisla, no ja by som potreboval pre N cisel, pomozete? za odpovede vopred dakujem.

program spoldel;
uses crt;
var
number_1,number_2,temp : integer;

begin
clrscr;
writeln('Program na vypocet najvacsieho spolocneho delitela');

writeln('Zadaj prve cislo');
readln(number_1);
writeln('Zadaj druhe cislo');
readln(number_2);
clrscr;

Repeat
IF number_1 < number_2 THEN
begin
temp := number_1;
number_1 := number_2;
number_2 := temp;
end;
number_1 := number_1 mod number_2;
Until number_1 = 0;

writeln(number_2);
readln;
end.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: HELP pascal

Príspevok od používateľa harrison314 »

Euklidov algoritmus
http://sk.wikipedia.org/wiki/Euklidov_algoritmus
len si to prepises do pascalu
breky023
Amateur
Amateur
Príspevky: 32
Registrovaný: 24 máj 2009, 16:48
Bydlisko: Vranov nad Topľou

Re: HELP pascal

Príspevok od používateľa breky023 »

no ved to, že ja mam problem to urobiť v pascale a nie najsť vzorec, ale aj tak dik :wink:
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: HELP pascal

Príspevok od používateľa harrison314 »

Ja som uz zabudol v nom kodit, tak som skopiroval prvy lik ktori som nasiel.

Kód: Vybrať všetko

program ea;
var x,y:integer;
 
begin
 writeln('Euklidov algortimus ');
 writeln('Zadaj x,y');
 readln(x,y);
 
 repeat
   if x>y then x:= x-y;
   if y>x then y:= y-x;
 until x=y;
 
 writeln('NSD= ',x);
 readln;
end.
 
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: HELP pascal

Príspevok od používateľa Gregi »

Lenze to je riesenie pre 2 cisla. Avsak on potrebuje riesenie pre N cisiel, teda i viac.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: HELP pascal

Príspevok od používateľa harrison314 »

Tak pouzije Euklidov algoritmus na dvojice z cisel ( parne + neparne) , s toho ziska len polovicny pocet tychto cisel, a postup opkuje pokial nema jedno,
nejako sa to da urcite napisat ako pekna rekurzia .
Keby si este pametam pascaltak ti to napisem :mrgreen:

Este lepsi napad zo O(n) :) pouzijes Euklidov algoritmus na prve dve cisla, potom jeho vysledok vlozis donho polu z dalsim cislom postupnosti a pokracujes dokonca.
breky023
Amateur
Amateur
Príspevky: 32
Registrovaný: 24 máj 2009, 16:48
Bydlisko: Vranov nad Topľou

Re: HELP pascal

Príspevok od používateľa breky023 »

no keby sa našiel človek čo by mi to napisal tak to by bola ozaj veľka vďaka, lebo z toho čo tu hovorite rozumiem asi tak viete čomu :)
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: HELP pascal

Príspevok od používateľa c-ice »

Kód: Vybrať všetko

program ea;
var x,y:integer;

begin
writeln('Euklidov algortimus ');
writeln('Zadaj cislo ');
readln(x);
repeat
writeln('Zadaj dalsie cislo ');
readln(y);
if (y = 0)
    break;
repeat
   if x>y then x:= x-y;
   if y>x then y:= y-x;
until x=y;

until 1=1;

writeln('NSD= ',x);
readln;
end.
stale pridavas cisla ... kym nezadas nulu a mas to pre N cisel... iba copy paste harrisnov kod ... pridany cyklus ktory som chcel uz pridat do jeho kodu len sa mi nechcelo rozmyslat ci ma na to dobry algoritmus ...
breky023
Amateur
Amateur
Príspevky: 32
Registrovaný: 24 máj 2009, 16:48
Bydlisko: Vranov nad Topľou

Re: HELP pascal

Príspevok od používateľa breky023 »

c-ice napísal:

Kód: Vybrať všetko

program ea;
var x,y:integer;

begin
writeln('Euklidov algortimus ');
writeln('Zadaj cislo ');
readln(x);
repeat
writeln('Zadaj dalsie cislo ');
readln(y);
if (y = 0)
    break;
repeat
   if x>y then x:= x-y;
   if y>x then y:= y-x;
until x=y;

until 1=1;

writeln('NSD= ',x);
readln;
end.
stale pridavas cisla ... kym nezadas nulu a mas to pre N cisel... iba copy paste harrisnov kod ... pridany cyklus ktory som chcel uz pridat do jeho kodu len sa mi nechcelo rozmyslat ci ma na to dobry algoritmus ...
v pascale mi to nejde, naskočí mi chyba :( :cry: :cry:
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: HELP pascal

Príspevok od používateľa c-ice »

a ja mam vediet syntax ? preco nenapises aka chyba ti naskoci ... ten IF sisi tam neprepisal ... IF y = 0 THEN BREAK;
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: HELP pascal

Príspevok od používateľa Gregi »

No lebo tam je chybka a to
namiesto:
if (y = 0) break;
if (y = 0) then Break;
a (len pre upravu)
until 1=1
until True
breky023
Amateur
Amateur
Príspevky: 32
Registrovaný: 24 máj 2009, 16:48
Bydlisko: Vranov nad Topľou

Re: HELP pascal

Príspevok od používateľa breky023 »

už to ide ale ono je to stale len na 2 čísla, ale ja by som to potreboval urobiť tak, aby sa ma pýtalo, z koľkých čísel to má urobiť, a potom aby som ich tam mohol toľko zadať.
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: HELP pascal

Príspevok od používateľa c-ice »

toto je na N cisel ... mozeš ich davat do vtedy kym ta to neprestane bavit a nezadaš nulu...
prehod prvy repeat until na For cyklus a pred cele pridaj nacitania kolko krat N sa to ma vykonat + kontrolu N => 2 tym ze for bude zacinat i := 2 a podmienka bude i =< N ... a inkrementovat budeš o jedna ...
breky023
Amateur
Amateur
Príspevky: 32
Registrovaný: 24 máj 2009, 16:48
Bydlisko: Vranov nad Topľou

Re: HELP pascal

Príspevok od používateľa breky023 »

nechcem byť dotieravý, viem že otravujem ale nemohol by si mi to upraviť ty?
ako si si určite všimol tak ja som z toho dosť jeleň :(
bol by som ti veľmi vďačný
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: HELP pascal

Príspevok od používateľa harrison314 »

Nehovorim ze je to OK

Kód: Vybrať všetko

program ea;
var x,y,pocet:integer;

begin
writeln('Euklidov algortimus ');
write('Zadaj pocet cisel ');
read(pocet);
pocet:=pocet-1;
write ('Zadaj cislo ');
readln(x);
repeat
writeln('Zadaj cislo ');
readln(y);
if (y = 0) then break;
repeat
   if x>y then x:= x-y;
   if y>x then y:= y-x;
until x=y;

pocet:=pocet-1;
until pocet <=0;

writeln('NSD= ',x);
readln;
end.
breky023
Amateur
Amateur
Príspevky: 32
Registrovaný: 24 máj 2009, 16:48
Bydlisko: Vranov nad Topľou

Re: HELP pascal

Príspevok od používateľa breky023 »

kámo, maš u mňa pivo... fakt veľke vďaka
samozrejme aj ostatným ďakujem za pomoc :smt059 :smt059 :smt059 :smt059 :smt007 :smt007 :smt007
Napísať odpoveď