Newsgroup: it.comp.lang.delphi
Titolo: somma di frazioni

Salve a tutti, qualcuno saprebbe dirmi dove trovare qualcosa che mi ritorni
la somma di due frazioni, sempre come valore fratto?
Es. 1/4 + 1/2 = 3/4
Ho visto su torry ma ho trovato solo un calcExpress che pare non serva al
mio scopo.
Grazie anticipatamente,
Ciao
Davide

> Es. 1/4 + 1/2 = 3/4
usi la matematica
3/4 = 0,75 = 75/100 e poi semplifichi
--
Consonni Davide
DavideC...@Virgilio.it
webmaster of
http://www.traduzioniellepi.com

 3/4 = 0,75 = 75/100 e poi semplifichi
esatto. Ed esiste anche un algoritmo che a partire da un numero reale ricava
la frazione che o esattamente o piu' da vicino lo approssima. Bisogna pero'
chiedere a qualcuno che si occupi di matematica. Io lavoravo con questi
algoritmi sulle programmabili HP nei primi anni '80, e' passato un po' di
tempo da allora :)
Ciao, Sandro

 Es. 1/4 + 1/2 = 3/4
Come hanno detto puoi trasformare le due frazioni in numeri:
0,25 + 0,5 = 0,75
moltiplichi per togliere i decimali e poi semplifichi
75/100
L'algoritmo per semplificare non dovrebbe essere difficile.. mi pare ci sia
un modo facile per vedere se due numeri sono primi tra loro, il che e' di
grande aiuto. (magari chiedi su it.scienza.matematica :)
Altrimenti puoi fare qualcosa piu' vicino a quello che si fa a scuola,
cercando il minimo comune multiplo ecc ecc ma non credo convenga..

3/4 = 0,75 = 75/100 e poi semplifichi
Ok, allora risolvi questo :
1/9 + 1/3 = ...

cercando il minimo comune multiplo ecc ecc ma non credo convenga..
Invece e' cosi' che bisogna fare.
Trasformare in numeri non va bene.

Es. 1/4 + 1/2 = 3/4
se cerchi qualcosa di gia' fatto,
potresti guardare su 
www.torry.net
,
si chiamano parser se non sbaglio...
Ciao,
Alan Solo

 1/9 + 1/3 = ...
Ehehe beccato :)
Beh per correggerlo si potrebbe mettere un sistema per arrotondare, ma direi
che a questo punto e' molto meglio il sistema "da scuola" :)
ad esempio:
.. = 3+9 / 27 = 12/27
poi semplificando
4/9
ciao ! :)

 cercando il minimo comune multiplo ecc ecc ma non credo convenga..
Questo post mi ha fatto ricordare le prime prove che facevo con delphi1,
e siccome non butto via mai niente, ho ritrovato nei
miei polverosi archivi questa robetta che non fa uso ne di numeri primi ne
di minimi comuni e che sembra funzionare:
procedure Semplifica(var a, b : Integer);
var  x, m: Integer;
begin
  if a < b then m := a else m := b;
  x := 2;
  while x <= m do
  begin
    if ((a mod x) > 0 ) or ((b mod x) > 0)
    then Inc(x)
    else begin
      a := a div x;
      b := b div x;
      x := 2
    end
  end
end;
--
Windows is loading... Come back tomorrow

 wrote in message
3af4177...@news.libero.it...

Credo proprio di si, infatti,
1/3 = 0,33333333... periodico !!

 di minimi comuni e che sembra funzionare:
GRANDIOSO!! Ho risparmiato tempo e ... SALUTE!! Molto grazie, va alla
grande!!!
Ciao
Davide

Ecco qualcosina di utile:
Funzion iterativa per la ricerca di un numero primo:
function numeroprimo(numero:integer):boolean;
   var ndec:integer;
 begin
    if numero<=2 then numeroprimo:=true else
      begin
          ndec:=numero-1;
          while (ndec>2) and  ((numero mod ndec)<>0) do ndec:=ndec-1;
          numeroprimo:=((numero mod ndec)<>0);
      end;
 end;
implementazione della funzione che verifica se un numero č primo o non lo č.
function numeroprimoricors(num:integer):boolean;
 begin
   if num<2 then numeroprimoricors:=true else
                        numeroprimoricors:=numerodivisibile(num,num-1);
 end;
function numerodivisibile(num,ndiv:integer):boolean;
 begin
     if (ndiv<2) then numerodivisibile:=false;
     if ((num mod ndiv)=0) then numerodivisibile:=true
                                        else
numerodivisibile:=numerodivisibile(num,ndiv-1);
 end;
Ora ritornando al problema iniziale:
supponiamo due frazioni.
a/b+c/d=?
si fa:
(d*a)+(c*b)/(d*b)
quindi indipendentemente da mcm si ottiene:
a/b+c/d=(d*a)+(c*b)/(d*b)
(d*a)+(c*b)/(d*b) va semplificato e si ottiene la frazione esatta.
procedure semplificazione(var a, b : Integer);
   var  i,m: Integer;
begin
  if a < b then m := a else m := b;
  i:=m;
  while (i>1) do
     begin
       if ((a mod i)=0) and ((b mod i)=0) then
          begin
              a:=a div i;
              b:=b div i;
              i:=m;
          end;
       i:=i-1;
     end;
end;
--
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                           Giovanni Ceglia
                WebMaster & WebDesigner
 
http://www.xungame.com/
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^