Newsgroup: it.comp.lang.pascal
Titolo: MCD

salve
come posso fare il MCD tra due frazioni?
grazie

function MCD(a:integer;  b:integer):integer;
begin
  if(a>b)
  then MCD:=MCD(a-b,b)
  else if(a<b) then
         MCD:=MCD(a,b-a)
        else MCD:=a;
end;
Questa dovrebbe andare :)
Ciauz
--
KNOWLEDGE IS POWER
http://www.sverzat.com
¯`·.           .·´¯`:
'·.   .`·.   .·´.   .·'
   `:--·´   `·--:´
      `·. '_' .·
        ;`·-·´;

 ha scritto nel messaggio
news:a36bo3$gq9$1...@news.ngi.it...


MCD è una funzione già compresa in turbo pascal?
Cosa vuol dire nella tua funzione MCD(a-b,b)??? GRAZIE!!

 
E' una funzione ricorsiva ovvero che richiama se stessa (č stata la seconda 
lezione di laboratorio a informatica 1...): non ho fatto altro che 
convertire il codice C++ originario in pascal :-P
Ciauz
-- 
KNOWLEDGE IS POWER
Linux: the choice of a GNU generation!
http://www.sverzat.com

 Cosa vuol dire nella tua funzione MCD(a-b,b)???
Praticamente dice al programma di chiamare la funzione che ho scitto 
passandogli come parametri, rispettivamente, la differenza tra a e b, e b.
Ciauz
-- 
KNOWLEDGE IS POWER


Cosa vuol dire nella tua funzione MCD(a-b,b)??? GRAZIE!!
Ricorsione: "una funzione può anche richiamare se stessa"...
---
Ciao
PV

 ha scritto nel messaggio
news:a36bo3$gq9$1...@news.ngi.it...


 ha scritto nel messaggio
news:a36bo3$gq9$1...@news.ngi.it...


scuole di pensiero... un paio di gg fa c'era un thread
proprio su questo :-)
--
Dreadnaut (dn)
drea...@liberoDALLASPAM.it
(Life would be easier if I had the source code)

si, probabilmente credo (correggetemi se sbaglio) che convenga farlo con un
repeat until perchè le istruzioni da seguire sono 2 anzichè 6
bho fate voi...
"Dreadnaut" <Drea...@liberoDALLASPAM.it> ha scritto nel messaggio
news:3Tx68.1061$5M4....@twister2.libero.it...


 grazie
Di nulla.


 ha scritto nel messaggio
news:3c5a...@news.cis.it...



Beh è del tutto indifferente... tutti i problemi che richiedono una
iterazione (operazione ripetuta + volte) possono essere fatte sia in
modo Ricorsivo sia con cicli ( e stato anche dimostrati che con una
struttura esempio For e una o + IF si replicano alla perfezioni le
carateristiche delle altre)
Il Razziatore,
The Only Good Windows in an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596

 carateristiche delle altre)
Non mi dire che se ti venisse chiesto di stampare in modo ordinato un albero
binario avresti il coraggio di adottare una soluzione iterativa al posto di
una ricorsiva... :-)


 posto di una ricorsiva... :-)
io si, non solo per quelli binari, in fondo non e' cosi' complicata :-)
se un albero binario non e' ordinato stamparlo in modo ordinato non
e' facile neanche ricorsivamente: si tratta di prendere la lista di tutti
i nodi, ordinarla e stamparla. se invece e' gia' ordinato le visite BFS e
DFS in modo iterativo sono una boiata, 5/6 righe di ciclo, in cui usi
uno stack (DFS) o una lista (BFS) per tenere da parte i nodi "pronti
da visitare"
s: stack o lista
aggiungi radice a s
while s non vuoto do
 begin
  n = togli primo nodo in s
  {se s e' uno stack n e' l'ultimo inserito, altrim il primo}
  aggiungi figli di n ad s
  {se s stack, aggiungerli al contrario }
  <visita di n>
 end
sicuro che non la adotteresti al posto di una ricorsiva ?


 sicuro che non la adotteresti al posto di una ricorsiva ?
Effettivamente non è complessa, ma ormai il mio prof mi ha assuefatto alla
ricorsione e, fino a mercoledì, dovrò adottare quella :-P ...anche perché a
lui piace così.


quella funzione mi dà stack overflow
funge solo se metto l'espressione in due variabili e dopo le divido
altrimenti mi sballa tutto
"Dreadnaut" <Drea...@liberoDALLASPAM.it> ha scritto nel messaggio
news:%zQ68.6158$nI1.1...@twister1.libero.it...


Il calcolo dell'MCD fra due numeri? mmmm, ecco l'algoritmo :-)
Function MCD (A, B: Longint): Longint;
 Var R: Longint;
 Begin
  Repeat
   R := A Mod B;
   If R <> 0 Then
     Begin
      A := B;
      B := R;
     End;
  Until R = 0;
  MCD := B;
 End;
Ciao a presto,
Cooper

> quella funzione mi dà stack overflow
quella quale ? :-)
--
Dreadnaut
