Domanda C# Sviluppo convertitore Binario-Decimale C#

ADeveloperStoat

Utente Iron
9 Aprile 2021
12
4
0
18
Ultima modifica:
Salve. Sto scrivendo un programma in C# utilizzando lo strumento del Form Windows su Visual Studio. Questo programma ha lo scopo di convertire un qualsiasi numero in qualsiasi base nei corrispettivi numeri di tutte le altre basi. Sono arrivato alla conversione da binario a decimale e l'ho quasi finita, ma mi dà un errore nel calcolo del peso della cifra (In particolare col metodo Math.Pow). Ho già provato a fare il calcolo diretto come m^n, ma dà delle cifre completamente sbagliate. Ho guardato anche che la posizione fosse sempre corretta e così era.
Ecco qui di seguito il codice con un commento per farvi capire dove si trova l'errore.


C#:
private void button1_Click(object sender, EventArgs e)

        {

            if (textBox1_TextChanged != null)

            {

                long BinContenute = Convert.ToInt32(InputBoxBin.Text);

                long position = 0;

                Console.WriteLine("Valore inserito in Bin");

                long DecValue = 0;

                long basen = 2;



                while (BinContenute > 0)

                {

                    long weight = Math.Pow(Convert.ToDouble(basen, position)); //Errore= Argomento 2; Non è possibile convertire da 'long' a 'System.IFormatProvider?'

                    if (BinContenute%2==1)

                    {

                        DecValue = DecValue + (weight * 1);

                        Console.WriteLine("La posizione: " + position);

                        position++;

                    }

                    if (BinContenute%2==0)

                    {

                        Console.WriteLine("La posizione: " + position);

                        position++;

                    }

                    Console.WriteLine("Il peso: " + weight);

                    BinContenute /= 10;



                  

                }

                InputBoxDec.Text = Convert.ToString(DecValue);



            }

          

        }
 
long weight = Math.Pow(Convert.ToDouble(basen, position)); //Errore= Argomento 2; Non è possibile convertire da 'long' a 'System.IFormatProvider?'
Non conosco C#, ma in quella riga hai messo male le parentesi. Probabilmente volevi scrivere:
C#:
long weight = Math.Pow(Convert.ToDouble(basen), position);
Anche se presumo che la conversione esplicita da long a double si possa anche rimuovere.
 
Non conosco C#, ma in quella riga hai messo male le parentesi. Probabilmente volevi scrivere:
C#:
long weight = Math.Pow(Convert.ToDouble(basen), position);
Anche se presumo che la conversione esplicita da long a double si possa anche rimuovere.
No, le parentesi sono posizionate correttamente. Ho ricontrollato online anche adesso e vedo che la sintassi è corretta sotto quel punto di vista.
Ho fatto inoltre una conversione esplicita in double perché il metodo Math.Pow () richiede necessariamente come argomento due variabili di tipo double.
In caso tu volessi suggerire di provare lo stesso a convertirle in double per vedere se l'errore possa essere quello, ho già provato, ma purtroppo mi dà sempre l'ennesimo errore.
Grazie lo stesso del tentativo <3
 
Uhm, no. Non conosco C#, ma credo proprio che quelle parentesi siano sbagliate: tu vuoi passare due argomenti a Math.Pow, mentre nel tuo codice stai passando due argomenti a Convert.ToDouble e un solo argomento a Math.Pow. Provando online, una roba del genere sembra funzionare:
C#:
long BinContenute = 11101; // input per testare
long position = 0;
long DecValue = 0;
long basen = 2;
while (BinContenute > 0) {
  long weight = (long)Math.Pow(basen, position); 
  if (BinContenute % 2 == 1) {
    DecValue = DecValue + (weight * 1);
    Console.WriteLine("La posizione: " + position);
    position++;
  }

  if (BinContenute % 2 == 0) {
    Console.WriteLine("La posizione: " + position);
    position++;
  }

  Console.WriteLine("Il peso: " + weight);
  BinContenute /= 10;
}
Console.WriteLine("result = " + DecValue); // output per testare
Prova a riadattarla nel tuo codice.

Se posso darti un ulteriore consiglio, secondo me è meglio tenere il valore da convertire (il contenuto di InputBoxBin.Text) in forma di stringa e convertire leggendo da sinistra verso destra invece che da destra verso sinistra; però vabbé, capisco che sono esercizi didattici e credo che sia importante trovare la tua personale soluzione.
 
Uhm, no. Non conosco C#, ma credo proprio che quelle parentesi siano sbagliate: tu vuoi passare due argomenti a Math.Pow, mentre nel tuo codice stai passando due argomenti a Convert.ToDouble e un solo argomento a Math.Pow. Provando online, una roba del genere sembra funzionare:
C#:
long BinContenute = 11101; // input per testare
long position = 0;
long DecValue = 0;
long basen = 2;
while (BinContenute > 0) {
  long weight = (long)Math.Pow(basen, position);
  if (BinContenute % 2 == 1) {
    DecValue = DecValue + (weight * 1);
    Console.WriteLine("La posizione: " + position);
    position++;
  }

  if (BinContenute % 2 == 0) {
    Console.WriteLine("La posizione: " + position);
    position++;
  }

  Console.WriteLine("Il peso: " + weight);
  BinContenute /= 10;
}
Console.WriteLine("result = " + DecValue); // output per testare
Prova a riadattarla nel tuo codice.

Se posso darti un ulteriore consiglio, secondo me è meglio tenere il valore da convertire (il contenuto di InputBoxBin.Text) in forma di stringa e convertire leggendo da sinistra verso destra invece che da destra verso sinistra; però vabbé, capisco che sono esercizi didattici e credo che sia importante trovare la tua personale soluzione.
Ok, ho risolto. Grazie dell'aiuto