Newsgroup: it.comp.lang.pascal
Titolo: Cercasi programma urgente

Scusate,
qualcuno di voi ha scritto un programma per trovare l'MCD tra 2 numeri?
Per favore rispondere a 
rizz...@keycomm.it
Grazie.



Non e' un metodo ottimizzato ma funziona :
function MCD ( a, b : integer ) : integer ;
var c : integer ;
begin
  if (a < b) then c := a else c := b ;
  while ( ( a mod c ) <> 0 ) or
        ( ( b mod c ) <> 0 ) do dec ( c ) ;
  MCD := c ;
end ;
begin
  writeln ( MCD ( 8, 12 ) ) ;
end.

procedure DIVISORE (A,B,C: real; var DIVIS:real);
           function Mcd(X, Y:real):real;
           var T1, T2: real;
           begin
            T1:=abs(trunc(X)); T2:=abs(trunc(Y));
               while T1 <> T2 do
                 begin if T1 > T2
                       then T1:=T1-T2
                       else T2:=T2-T1;
                 end;
                 Mcd:=T1;
          end;
var AB:real;
begin
AB:=Mcd(A,B);
DIVIS:=Mcd(AB,C);
end;
__________________________________________________________
E-Mail:
(
rena...@lycosmail.com
)
__________________________________________________________
I.C.Q.: 17079401
_________________________________________________________
Visita il mio sito in perenne costruzione
http://hophop.com/renato
_________________________________________________________
René
:-)

 >qualcuno di voi ha scritto un programma per trovare l'MCD tra 2 numeri?
program MCD;
  var a, b :1..maxint;
  begin
	write('Primo numero: ');
	readln(a);
	write('secondo numero: ');
	readln(b);
	while a<>b do
	   if a>b then a:=a-b
	   else b:=b-a;
	writeln(il MCD e'': ,a);
  end.
Ciao !
Emanuele
--
=====================================
   mailto:
e.sc...@mclink.it
home page: 
http://Riemann.freeweb.org
=====================================

Function MCD ( m, n : integer ) : Integer;
Var
   App : Integer
Begin
    If m < n
        Then Begin
            App := m;
            m := n;
            n := App;
        End;
    Repeat
        App := m Mod n;
        If App <> 0
            Then Begin
               m := n;
                n := App;
            End;
    Until App = 0;
    MCD := App;
End;
Bye.

 
Mi appendo qui, perche' non ho il msg originale...
procedure Scambia(var n,m:word);
var t:word;
begin
 t:=n;
 n:=m;
 m:=t;
end;
function MCD(a,b:word):word;
begin
 while(a<>b)do
   begin
    if a<b then Scambia(a,b);
    a:=a mod b;
   end;
 MCD:=a;
end;
Piu' ottimizzato di cosi' credo si muoia... :-))
bye!
Ema ;-)
-- 
"In un'organizzazione gerarchica, piu' alto e' il livello, maggiore e' la
confusione", legge di Dow

Piu' ottimizzato di cosi' credo si muoia... :-))
Non so se la funzione funzioni ! ;) pero' si puo' sostituire alla
procedura swap tre operazioni di xor sufficienti a scambiare gli
elementi.
a := a xor b ;
b := a xor b ;
a := a xor b ;

 
ottimo!! Ora siamo il NG piu' veloce del mondo a calcolare il MCD :-)))
bye!
-- 
Emanuele Cesena		
http://www.geocities.com/SilionValley/Grid/8879
ami...@iol.it
				    Attenti all'antispam NOSPAM
"L'opulenza dell'ufficio di rappresentanza e' inversamente proporzionale
alla solvenza della ditta", legge delle Istituzioni

Piu' ottimizzato di cosi' credo si muoia... :-))
Ehm...
function MCD ( a, b : integer ) : integer ; { a > b }
begin
  if b = 0 then MCD := a
  else MCD := MCD ( b, a mod b ) ;
end ;
:-)

 
sempre piu' folle... pero' ricorsivo a me non piace tanto...
In termini di velocita', secondo voi, da buoni risultati??
(ovvio: non con degli integer...) :-))
bye!
-- 
Emanuele Cesena		
http://www.geocities.com/SilionValley/Grid/8879
ami...@iol.it
				    Attenti all'antispam NOSPAM
"8. Cammina sempre a gran velocita' quando sei fuori del tuo ufficio:
eviterai un gra numero di domande sia dai subordinati che dai superiori",
dal decalogo di Spark per il giovane manager

(ovvio: non con degli integer...) :-))
Perche' ???
Puoi forse calcolare il fattoriale sui reali ???

 
no, intendevo dire che calcolare il MCD con numeri cosi' piccoli,
e' sicuramente rapido...
Pero' con strutture numeriche piu' complesse, forse, una
procedura "diretta" e' piu' efficiente...
ciao ;-)


procedura "diretta" e' piu' efficiente...
Non saprei.
In realta' la questione dell'efficienza entra in gioco per algoritmi
piu' complessi come il calcolo del fattoriale.

 
ops... devo imparare a leggere fino in fondo... vabbe', forse per una
volta siamo d'accordo :-)
bye!
-- 
Emanuele Cesena		
http://www.geocities.com/SilionValley/Grid/8879
ami...@iol.it
				    Attenti all'antispam NOSPAM
"La fortuna bussa sempre alla porta al momento sbagliato", precetto di
Ducharme

cambia molto... in piu' si spreca meno memoria...
In questo caso c'entra il limite raggiungibile con i due diversi
algoritmi.


Non è vero in quanto l'allocazzione della memoria nelle procedure avviene
nello stack,
quindi è allocata dinamicamente, e all'uscita della procedura lo spazio
occupato dalle variabili locali
della procedura si libera

della procedura si libera
Grazie per la lezione, ma sinceramente, oltre a non vederne il motivo,
non ne avevamo bisogno ;)