Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
30/07/08 10:18
Matthew
Ciao a tutti,
sto provando a scrivere un programma che possa gestire grandi numeri, ossia al di la della portata delle normali variabili numeriche. Per farlo volevo dividere il numero in un array di stringhe ognuna delle quali contiene 5 cifre. Finora sono riuscito a creare una struttura chiamata Gnum (Grande numero) che divide il numero in due array: uno per la parte intera e uno per i decimali.
Mi spiego meglio:
creata la struttura
public struct Gnum
    {
        private static int x, y, sd, resto;
        private static string strnumD, smParz;
        private static string[] stra, straD, str1;
        private static Gnum somma;

        public Gnum(string strnum)
        {
            y = strnum.IndexOf(",");

            str1 = new string[2];
            if (y != -1)
            {
                str1 = strnum.Split(',');

                strnum = str1[0];
                strnumD = str1[1];
            }
            else
            {
                strnumD = "0";
            }

            while (Math.IEEERemainder((double)strnum.Length, 5) != 0)
            {
                strnum = strnum.Insert(0, "0");
            }

            for (x = 5; strnum.Length > x; x += 6)
            {
                strnum = strnum.Insert(strnum.Length - x, "#");
            }

            while (Math.IEEERemainder((double)strnumD.Length, 5) != 0)
            {
                strnumD = strnumD.Insert(strnumD.Length, "0");
            }

            for (x = 5; strnumD.Length > x; x += 6)
            {
                strnumD = strnumD.Insert(strnumD.Length - x, "#");
            }

            stra = new string[50];
            stra = strnum.Split('#');

            straD = new string[50];
            straD = strnumD.Split('#');

            this.Intero = stra;
            this.Decimali = straD;
        }
        
        public string[] Intero
        {
            get { return stra; }
            set { stra = value; }
        }

        public string[] Decimali
        {
            get { return straD; }
            set { straD = value; }
        }
}

posso facilmente creare un grande numero così:
Gnum n1 = new Gnum(textBox1.Text);

il problema però e che non riesco a creare due grandi numeri distinti, infatti il seguente codice :
Gnum n1 = new Gnum(textBox1.Text);
Gnum n2 = new Gnum(textBox2.Text);

crea si due grandi numeri, ma quando viene creato il secondo il primo si modifica da solo e diventa uguale al secondo.
Come posso fare per risolvere questo problema?

Grazie per l'attenzione e grazie in anticipo per l'aiuto!
Buona giornata a tutti.
Ultima modifica effettuata da Matthew 30/07/08 10:25
aaa
31/07/08 8:56
Il Totem
Semplicemente perchè hai dichiarato le variabili static. Questo significa che per qualunque istanza della struttura Gnum, quelle variabili sono uguali: ossia è come se fossero messe "in comune" tra tutti gli oggetti di tipo Gnum. Per risolvere il problema, basta togliere la keyword static.
aaa
31/07/08 11:36
Matthew
Grazie mille ho seguito il tuo suggerimento e ora funziona!
aaa
01/08/08 8:26
Il Totem
Ok allora chiudo.
aaa