Konwersja ze string do int, double, decimal

0

Witajcie,

Mam za zadanie zrobić program, w którym wykażę się znajomością użycia funkcji i algorytmu zamiany. Podobny temat założyłem niedawno w wątku: Decimal i liczby <- jednak ten wątek nie wyczerpuje wystarczająco tego co chcę osiągnąć.

Otóż treść zadania jest taka: Mam użyć funkcji "static int/double/decimal ObliczDługośćPromienia(int/double/decimal r)" (zawsze ma kompilować z tego samego "r" bodajże) program ma obliczyć promień kiedy użytkownik poda długość obwodu koła. Napisałem coś takiego:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zad2
{
    class Program
    {
        static int ObliczDługośćPromienia(int r)
        {
            return r;
        }
        static double ObliczDługośćPromienia(double r)
        {
            return r;
        }
        static decimal ObliczDługośćPromienia(decimal r)
        {
            return r;
        }        
        static void Main(string[] args)
        {
            string o, r;
            
            Console.WriteLine("Podaj długość obwodu koła: ");
            o = Console.ReadLine();
            r = Convert.ToInt32(o) / Convert.ToInt32(2 * Math.PI);            
            Console.WriteLine("Wynik to: {0:G17}", ObliczDługośćPromienia(Convert.ToInt32(r)));
            Console.ReadKey();

            Console.WriteLine("Podaj długość obwodu koła: ");
            o = Console.ReadLine();
            r = Convert.ToDouble(o) / Convert.ToDouble(2 * Math.PI);
            Console.WriteLine("Wynik to: {0:G17}", ObliczDługośćPromienia(Convert.ToDouble(r)));
            Console.ReadKey();

            Console.WriteLine("Podaj długość obwodu koła: ");
            o = Console.ReadLine();
            r = Convert.ToDecimal(o) / Convert.ToDecimal(2 * Math.PI);
            Console.WriteLine("Wynik to: {0:G17}", ObliczDługośćPromienia(Convert.ToDecimal(r)));
            Console.ReadKey(); 
            
        }
    }
}
 

Nie mogę skompilować programu bo wywala mi 3 błędy, że nie można skompilować typu int/dobule/decimal do string. To w takim razie po co pisać tą konwersje do danego typu danych jak program tego nie potrafi wyświetlić?

Pozdrawiam

1

Zmienna r jest u Ciebie ciągiem znaków, lecz Ty mimo to w jakimś niewiadomym celu próbujesz do niego przypisać liczbę zmiennoprzecinkową:

Convert.ToInt32(o) / Convert.ToInt32(2 * Math.PI);

zawsze ma kompilować z tego samego "r"
Co to znaczy kompilować z tego samego parametru?

0
Patryk27 napisał(a):

Zmienna r jest u Ciebie ciągiem znaków, lecz Ty mimo to w jakimś niewiadomym celu próbujesz do niego przypisać liczbę zmiennoprzecinkową:

Convert.ToInt32(o) / Convert.ToInt32(2 * Math.PI);

zawsze ma kompilować z tego samego "r"
Co to znaczy kompilować z tego samego parametru?

Pokażę na przykładzie o co mi chodzi, w tym programie niżej mając zadeklarowane dwie zmienne, robię trzy działania na przekonwertowanych zmiennych.

 using System;

class Program
{
    static int ObliczDługośćPrzeciwprostokątnej(int a, int b)
    {
        return Convert.ToInt32(Math.Sqrt(a * a + b * b));
    }
    static double ObliczDługośćPrzeciwprostokątnej(double a, double b)
    {
        return Convert.ToDouble(Math.Sqrt(a * a + b * b));
    }
    static decimal ObliczDługośćPrzeciwprostokątnej(decimal a, decimal b)
    {
        return (decimal)Math.Sqrt(Convert.ToDouble(a * a + b * b));
    }
    static void Main(string[] args)
    {
        string a, b;

        Console.WriteLine("Podaj długośc pierwszej przyprostokątnej: ");
        a = Console.ReadLine();

        Console.WriteLine("Podaj długośc drugiej przyprostokątnej: ");
        b = Console.ReadLine();

        Console.WriteLine("Wynik to: {0:G17}", ObliczDługośćPrzeciwprostokątnej(Convert.ToInt32(a), Convert.ToInt32(b)));

        Console.ReadLine();
        

        Console.WriteLine("Podaj długośc pierwszej przyprostokątnej: ");
        a = Console.ReadLine();

        Console.WriteLine("Podaj długośc drugiej przyprostokątnej: ");
        b = Console.ReadLine();

        Console.WriteLine("Wynik to: {0:G17}", ObliczDługośćPrzeciwprostokątnej(Convert.ToDouble(a), Convert.ToDouble(b)));

        Console.ReadLine();


        Console.WriteLine("Podaj długośc pierwszej przyprostokątnej: ");
        a = Console.ReadLine();

        Console.WriteLine("Podaj długośc drugiej przyprostokątnej: ");
        b = Console.ReadLine();

        Console.WriteLine("Wynik to: {0:G17}", ObliczDługośćPrzeciwprostokątnej(Convert.ToDecimal(a), Convert.ToDecimal(b)));

        Console.ReadLine();
    }
}

Jednak jeżeli chcę w analogiczny sposób wykorzystać r, to program mi nie działa.

1

Jaki analogiczny - w tym kodzie wyżej nigdzie nie ma próby zapisywania liczby zmiennoprzecinkowej do ciągu znaków:
Do zmiennych a i b wczytywane są stringi od użytkownika (hehe), następnie są one konwertowane i dzieją się jakieś operacje.
I to jest poprawne.

Natomiast w Twoim pierwotnym kodzie wczytujesz jeden ciąg znaków od użytkownika, konwertujesz go na liczbę i próbujesz, wykonawszy jakieś operacje, przypisać liczbę do drugiego ciągu znaków (tj. do zmiennej r).

1

Na przyszłość nie wklejaj całego kodu tylko linijkę(albo trochę większy fragment, żeby znać kontekst) która powoduje błąd.

To co próbujesz zrobić jest równoznaczne z tym:

string r = 555;

I komunikat błędu jasno mówi co jest nie tak - żeby przypisać int do string musisz go skonwertować jawnie, czyli np. za pomocą ToString().

1

Już rozumiem :)

Napisałem to tak:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zad2
{
    class Program
    {
        static int ObliczDługośćPromienia(int r)
        {
            return Convert.ToInt32(r/(2*Math.PI));
        }
        static double ObliczDługośćPromienia(double r)
        {
            return Convert.ToDouble(r / (2 * Math.PI));
        }
        static decimal ObliczDługośćPromienia(decimal r)
        {
            return Convert.ToDecimal((decimal)r / (decimal)(2 * Math.PI));
        }
        
        static void Main(string[] args)
        {
            string r;
            
            Console.WriteLine("Podaj długość obwodu koła: ");
            r = Console.ReadLine();
                   
            Console.WriteLine("Wynik to: {0:G17}", ObliczDługośćPromienia(Convert.ToInt32(r)));
            Console.ReadKey();

            Console.WriteLine("Podaj długość obwodu koła: ");
            r = Console.ReadLine();

            Console.WriteLine("Wynik to: {0:G17}", ObliczDługośćPromienia(Convert.ToDouble(r)));
            Console.ReadKey();

            Console.WriteLine("Podaj długość obwodu koła: ");
            r = Console.ReadLine();

            Console.WriteLine("Wynik to: {0:G17}", ObliczDługośćPromienia(Convert.ToDecimal(r)));
            Console.ReadKey();

           
            
        }
    }
}
 

Bardzo dziękuję za pomoc! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1