Newsgroup: it.comp.lang.pascal
Titolo: Problemi di algoritmo

Salve a tutti, dopo aver tentato , inutilmente, ho deciso di chiedere aiuto:
mi chiamo Daniele e mi interesserebbe il modo di calcolare il MCD e mcm di n
numeri.
Grazie.
Daniele Di Mauro 
mr_g...@yahoo.com

 wrote in message
7rp76g$c1k$1...@news.flashnet.it...



Massimo Comun Divisore per n numeri:
Uses
    crt, dos;
const
     N = 2;
var
   l: word;
   flag: boolean;
   v: array[1..N] of word;
   min : word;
begin
     clrscr;
     randomize;
     for l:=1 to N do
         begin
              v[l] := random(3000)+1;
              writeln('v[',l,'] = ',v[l]);
         end;
     flag := true;
     while flag do
           begin
                flag := false;
                min := v[1];
                for l:=2 to N do if min>v[l] then min := v[l];
                for l:=1 to N do if v[l]>min then
                    begin
                         dec(v[l], min);
                         flag := true;
                    end;
           end;
     writeln('M.C.D.: ', v[1]);
end.
Controlla bene perche' molto probabilmente c'e' qualche errore...
Ciao!
Simone.
=================================
e-mail:  
drfa...@libero.it
 
drfa...@tiscalinet.it
 
drfa...@tin.it
web:     
http://www.tiscalinet.it/drfalken
 
http://free.prohosting.com/~drfalken
Mailing list: 
ml_ass...@egroups.com
 (per l'iscrizione invia un msg a
 
ml_assemble...@egroups.com
)
ICQ#:  19598133
=================================

you wrote :
#> Salve a tutti, dopo aver tentato , inutilmente, ho deciso di chiedere
#aiuto:
#> mi chiamo Daniele e mi interesserebbe il modo di calcolare il MCD e mcm di
#n
#> numeri.
#> Grazie.
function MCD ( a, b : integer ) : integer ; { a > b }
begin
  if b = 0 then MCD := a
  else MCD := MCD ( b, a mod b ) ;
end ;
--------------------------------------------------------
* Andrea Laforgia        (
andrea_...@bigfoot.com
) *
--------------------------------------------------------

function MCD ( a, b : integer ) : integer ; { a > b }
begin
  if b = 0 then MCD := a
  else MCD := MCD ( b, a mod b ) ;
end ;
function mcm ( a, b : integer ) : integer ; { a > b }
begin
  mcm := (a * b) div MCD ( a, b ) ;


 wrote in message
37f0489...@diesel.cu.mi.it...

Il ragazzo non aveva chiesto MCD e MCM su N valori ?
_____________________________________________
"....c'e' vita su Marte ?"
"Giusto un po' il sabato sera...."
            C.Guzzanti
e-mail:  
drfa...@libero.it
 
drfa...@tiscalinet.it
 
drfa...@tin.it
web:     
http://www.tiscalinet.it/drfalken
 
http://free.prohosting.com/~drfalken
ICQ#:  19598133
_____________________________________________

you wrote :
#Il ragazzo non aveva chiesto MCD e MCM su N valori ?
E quindi ?
Agendo a due a due non si ottiene lo stesso risultato ?
MCD(a, b, c, d) = MCD(a, MCD(b, MCD(c, d)))


 wrote in message
37fdfda...@diesel.cu.mi.it...

Dipende dalle necessita', cioe' se N e' piccolo va bene ma per N>1000 (tanto
per dire un numero...) ? (Stack overflow ?)


you wrote :
#Dipende dalle necessita', cioe' se N e' piccolo va bene ma per N>1000 (tanto
#per dire un numero...) ? (Stack overflow ?)
Uno dei principi su cui si basa la programmazione strutturata e' che
tutto cio' che si puo' fare per via ricorsiva si puo' parimenti fare
per via iterativa e viceversa :
Dati N valori (supponiamo N = 1700000000, eh.. eh...) e 
var v : array [1..N] of integer ;
    d : integer ;
    i : integer ;
begin
  d := mcd(v[1], v[2]) ;
  for i := 3 to N do 
    d := mcd( d, v[i] ) ;
end.


 
M := MCD (n[1], n[2]);
for i:=3 to 1000 do
   M := MCD (M, n[i]);
bye!
-- 
Emanuele Cesena                 
http://www.penguinpowered.com/~ecesena
ece...@penguinpowered.com
                 Attenti all'antispam NOSPAM
Se gli scienziati spaziali sono cosi' intelligenti, perche' contano
sempre all'indietro?
		-- Robert Orben