Gambas-it

Programmazione => Progetti degli utenti => Topic aperto da: vuott - 27 Aprile 2017, 20:31:24

Titolo: Libreria condivisa .so per la gestione di numeri fino a 32768 cifre
Inserito da: vuott - 27 Aprile 2017, 20:31:24
Gli utenti iscritti al forum possono scaricare una libreria dinamica condivisa, "grandinumeri.so", che ho compilato dai sorgenti, scritti in C, del seguente progetto:

- Progetto: BigNumber
- Autori: Davide Zanin, Frhack3r
- Linguaggio: C
- Licenza: GNU G.P.L.
- Versione: 1.5

La libreria è progettata per la gestione di numeri in precisione arbitraria. Questo significa che potete utilizzare numeri di dimensioni molto maggiori dei numeri standard di Gambas o del C. Allo stato attuale è possibile usare solo i numeri interi positivi con un massimo di 32768 cifre !!!


Come utilizzarla in Gambas:
1) scaricare il file qui sotto allegato e decomprimerlo.
2) nel progetto Gambas richiamare la libreria avendo cura di specificare il suo esatto percorso, ed eliminando l'estensione .so .
3) poiché la libreria è una libreria condivisa .so, le funzioni in essa contenute, da utilizzare in gambas, andranno dichiarate mediante la ormai nota parola-chave "Extern".
4) le principali funzioni previste dalla libreria .so ed utilizzabili in Gambas sono:
 


Mostriamo un esempio pratico, nel quale la libreria condivisa si presume essere posta nella cartella /tmp :
Codice: [Seleziona]
Library "/tmp/grandinumeri"

Public Struct BigN
  lun As Integer
  pun As Pointer
End Struct

' void  bInit  (int)
' Funzione che inizializza la libreria.
Private Extern bInit(lungMax As Integer)

' BigN  bIntero  (void)
' Funzione che prepara un area di memoria che rappresenta un numero.
Private Extern bIntero() As BigN

' char  bLeggi  (BigN)
' Funzione che legge un BigN.
Private Extern bLeggi(bn As BigN) As Byte

' BigN  bSot  (BigN,  BigN)
' Funzione che esegue la sottrazione tra 2 numeri.
Private Extern bSot(bn As BigN, bm As BigN) As BigN

' BigN  bSomma  (BigN,  BigN)
' Funzione che esegue la somma tra 2 numeri.
Private Extern bSomma(bn As BigN, bm As BigN) As BigN

' BigN  bMol  (BigN,  BigN)
' Funzione che esegue la moltiplicazione tra 2 numeri.
Private Extern bMol(bn As BigN, bm As BigN) As BigN

' BigN  bDiv  (BigN,  BigN)
' Funzione che esegue la divisione intera.
Private Extern bDiv(bn As BigN, bm As BigN) As BigN

' char  bStampa  (BigN)
' Funzione che stampa un numero.
Private Extern bStampa(bn As BigN) As Byte


Public Sub Main()

  Dim n, m, somma, sot, mol, dv As BigN

' All'inizio di ogni programma deve SEMPRE essere impostato questo argomento,
' che specifica la lunghezza massima che avranno i BigN che utilizzerete:
   bInit(500)
   
' Prepara l'area di memoria che conterrà le variabili n e m.
' Va sempre effettuata su ogni variabile dichiarata di tipo BigN che si legge da tastiera:
   n = bIntero()
   m = bIntero()
   
' Legge un numero:
   Print "Verranno effettuate le 4 operazioni tra 2 numeri.\nInserisci due numeri premendo 'Invio' ad ogni numero..."
   bLeggi(n)
   bLeggi(m)
   
' bSot restituisce il risultato di n - m:
   sot = bSot(n, m)
   
' bSomma restituisce il risultato di n + m:
   somma = bSomma(n, m)
   
' bMolt restituisce il risultato di n * m:
   mol = bMol(n, m)
   
' bDiv restituisce il risultato della divisione intera di n / m
   dv = bDiv(n, m)
   
' Stampa a video dei risultati:
   Print "\nSottrazione tra i due BigN:"
   bStampa(sot)
   
   Print "\n\nAddizione tra i due BigN:"
   bStampa(somma)
   
   Print "\n\nMoltiplicazione tra i due BigN:"
   bStampa(mol)
   
   Print "\n\nDivisione tra i due BigN:"
   bStampa(dv)

End


Riferimenti opportuni:
* http://www.pierotofy.it/pages/projects/project_209.html
* http://www.gambas-it.org/wiki/index.php?title=Extern:_richiamare_funzioni_esterne_a_Gambas


Titolo: Re:Libreria condivisa .so per la gestione di numeri fino 32768 cifre
Inserito da: Top Fuel - 27 Aprile 2017, 23:54:09
Ma nei componenti di Gambas non c'è già il componente gb.gmp che contiene il tipo BigInt per la gestione di numeri interi enormi? Ho già provato ad usarlo ma senza riuscire a capire come va usato.
Titolo: Re:Libreria condivisa .so per la gestione di numeri fino 32768 cifre
Inserito da: vuott - 28 Aprile 2017, 00:00:21
Ma nei componenti di Gambas non c'è già il componente gb.gmp che contiene il tipo BigInt per la gestione di numeri interi enormi?
Ma in Gambas non ci sono perfino 5 Componenti grafici ?     :hard: