C# - wczytaj liczbę od 1 do 1 000 000 i przedstaw ją słownie

C# - wczytaj liczbę od 1 do 1 000 000 i przedstaw ją słownie
0

Witam, ostatnio rozkminiam zadanie: podaj liczbę arabską od 1 do 1 000 000 i wypisz ją słownie. Użyj If oraz switch.

Zadanie raczej jedno z prostszych, ale mam problem z umieszczeniem słowa "tysiąc", ponieważ: 112 001 - sto dwanaście TYSIĘCY jeden, 100 015 - sto TYSIĘCY piętnaście itd.

Skoro przypiszę do dziesiątek i setek tysięcy dopisze końcówkę TYSIĘCY, to będzie się ona pojawiać podwójnie: sto TYSIĘCY dwanaście TYSIĘCY; dalej już dobrze.

JAK WPLEŚĆ W PONIŻSZY KOD (między a>=4000 && a<1 000 000) SŁOWO TYSIĘCY?:

Kopiuj
        static void Main(string[] args)
        {
            int a;
            Console.Write("Podaj liczbę arabską od 1 do 1 000 000, którą program wypisze słownie na ekranie: ");
            a = Convert.ToInt32(Console.ReadLine());

            //miliony
            if (a >= 1000000) { a -= 1000000; Console.Write("Milion "); }

            //setki tysięcy
            if (a >= 900000) { a -= 900000; Console.Write("dziewięćset "); }
            else if (a >= 800000) { a -= 800000; Console.Write("osiemset "); }
            else if (a >= 700000) { a -= 700000; Console.Write("siedemset "); }
            else if (a >= 600000) { a -= 600000; Console.Write("sześćset "); }
            else if (a >= 500000) { a -= 500000; Console.Write("pięćset "); }
            else if (a >= 400000) { a -= 400000; Console.Write("czterysta "); }
            else if (a >= 300000) { a -= 300000; Console.Write("trzysta "); }
            else if (a >= 200000) { a -= 200000; Console.Write("dwieście "); }
            else if (a >= 100000) { a -= 100000; Console.Write("sto "); }

            
            //dziesiątki i nastki tysięcy
            if (a >= 90000) { a -= 90000; Console.Write("dziewięćdziesiąt "); }
            else if (a >= 80000) { a -= 80000; Console.Write("osiemdziesiąt "); }
            else if (a >= 70000) { a -= 70000; Console.Write("siedemdziesiąt "); }
            else if (a >= 60000) { a -= 60000; Console.Write("sześćdziesiąt "); }
            else if (a >= 50000) { a -= 50000; Console.Write("pięćdziesiąt "); }
            else if (a >= 40000) { a -= 40000; Console.Write("czterdzieści "); }
            else if (a >= 30000) { a -= 30000; Console.Write("trzydzieści "); }
            else if (a >= 20000) { a -= 20000; Console.Write("dwadzieścia "); }
            else if (a >= 19000) { a -= 19000; Console.Write("dziewiętnaście "); }
            else if (a >= 18000) { a -= 18000; Console.Write("osiemnaście "); }
            else if (a >= 17000) { a -= 17000; Console.Write("siedemnaście "); }
            else if (a >= 16000) { a -= 16000; Console.Write("szesnaście "); }
            else if (a >= 15000) { a -= 15000; Console.Write("piętnaście "); }
            else if (a >= 14000) { a -= 14000; Console.Write("czternaście "); }
            else if (a >= 13000) { a -= 13000; Console.Write("trzynaście "); }
            else if (a >= 12000) { a -= 12000; Console.Write("dwanaście "); }
            else if (a >= 11000) { a -= 11000; Console.Write("jedenaście "); }
            else if (a >= 10000) { a -= 10000; Console.Write("dziesięć "); }

            //tysiące
            if (a >= 9000) { a -= 9000; Console.Write("dziewięć tysięcy "); }
            else if (a >= 8000) { a -= 8000; Console.Write("osiem tysięcy "); }
            else if (a >= 7000) { a -= 7000; Console.Write("siedem tysięcy "); }
            else if (a >= 6000) { a -= 6000; Console.Write("sześć tysięcy "); }
            else if (a >= 5000) { a -= 5000; Console.Write("pięć tysięcy "); }
            else if (a >= 4000) { a -= 4000; Console.Write("cztery tysiące "); }
            else if (a >= 3000) { a -= 3000; Console.Write("trzy tysiące "); }
            else if (a >= 2000) { a -= 2000; Console.Write("dwa tysiące "); }
            else if (a >= 1000) { a -= 1000; Console.Write("tysiąc "); }

            //setki
            if (a >= 900) { a -= 900; Console.Write("dziewięćset "); }
            else if (a >= 800) { a -= 800; Console.Write("osiemset "); }
            else if (a >= 700) { a -= 700; Console.Write("siedemset "); }
            else if (a >= 600) { a -= 600; Console.Write("sześćset"); }
            else if (a >= 500) { a -= 500; Console.Write("pięćset "); }
            else if (a >= 400) { a -= 400; Console.Write("czterysta "); }
            else if (a >= 300) { a -= 300; Console.Write("trzysta "); }
            else if (a >= 200) { a -= 200; Console.Write("dwieście "); }
            else if (a >= 100) { a -= 100; Console.Write("sto "); }
          
            //dziesiątki i nastki
            if (a >= 90) { a -= 90; Console.Write("dziewięćdziesiąt "); }
            else if (a >= 80) { a -= 80; Console.Write("osiemdziesiąt "); }
            else if (a >= 70) { a -= 70; Console.Write("siedemdziesiąt "); }
            else if (a >= 60) { a -= 60; Console.Write("sześćdziesiąt "); }
            else if (a >= 50) { a -= 50; Console.Write("pięćdziesiąt "); }
            else if (a >= 40) { a -= 40; Console.Write("czterdzieści "); }
            else if (a >= 30) { a -= 30; Console.Write("trzydzieści "); }
            else if (a >= 20) { a -= 20; Console.Write("dwadzieścia "); }
            else if (a >= 19) { a -= 19; Console.Write("dziewiętnaście "); }
            else if (a >= 18) { a -= 18; Console.Write("osiemnaście "); }
            else if (a >= 17) { a -= 17; Console.Write("siedemnaście "); }
            else if (a >= 16) { a -= 16; Console.Write("szesnaście "); }
            else if (a >= 15) { a -= 15; Console.Write("piętnaście "); }
            else if (a >= 14) { a -= 14; Console.Write("czternaście "); }
            else if (a >= 13) { a -= 13; Console.Write("trzynaście "); }
            else if (a >= 12) { a -= 12; Console.Write("dwanaście "); }
            else if (a >= 11) { a -= 11; Console.Write("jedenaście "); }
            else if (a >= 10) { a -= 10; Console.Write("dziesięć "); }

            //jedności
            switch (a)
            {
                case 1: Console.Write("jeden "); break;
                case 2: Console.Write("dwa "); break;
                case 3: Console.Write("trzy "); break;
                case 4: Console.Write("cztery "); break;
                case 5: Console.Write("pięć "); break;
                case 6: Console.Write("sześć "); break;
                case 7: Console.Write("siedem "); break;
                case 8: Console.Write("osiem "); break;
                case 9: Console.Write("dziewięć "); break;
                case 10: Console.Write("dziesięć "); break;
                default: Console.Write(""); break;
            }

            Console.ReadKey(true); //pauza
        }
    }
}
edytowany 1x, ostatnio: Ktos
CeKa
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Gdańsk
  • Postów:204
0
DibbyDum napisał(a):

na końcu?

Kopiuj
if ( a>=4000 && a<1000000 ) { Console.Write("TYSIĘCY"); }
Console.ReadKey(true); //pauza

Dodając drugą zmienną, która trzyma liczbę wpisaną na początku. I ten kod umieścić pod blokiem //tysiące

Kopiuj
static void Main(string[] args)
        {
            int a,b;
            Console.Write("Podaj liczbę arabską od 1 do 1 000 000, którą program wypisze słownie na ekranie: ");
            b = a = Convert.ToInt32(Console.ReadLine());

            //miliony
            if (a >= 1000000) { a -= 1000000; Console.Write("Milion "); }

            //setki tysięcy
            if (a >= 900000) { a -= 900000; Console.Write("dziewięćset "); }
            else if (a >= 800000) { a -= 800000; Console.Write("osiemset "); }
            else if (a >= 700000) { a -= 700000; Console.Write("siedemset "); }
            else if (a >= 600000) { a -= 600000; Console.Write("sześćset "); }
            else if (a >= 500000) { a -= 500000; Console.Write("pięćset "); }
            else if (a >= 400000) { a -= 400000; Console.Write("czterysta "); }
            else if (a >= 300000) { a -= 300000; Console.Write("trzysta "); }
            else if (a >= 200000) { a -= 200000; Console.Write("dwieście "); }
            else if (a >= 100000) { a -= 100000; Console.Write("sto "); }


            //dziesiątki i nastki tysięcy
            if (a >= 90000) { a -= 90000; Console.Write("dziewięćdziesiąt "); }
            else if (a >= 80000) { a -= 80000; Console.Write("osiemdziesiąt "); }
            else if (a >= 70000) { a -= 70000; Console.Write("siedemdziesiąt "); }
            else if (a >= 60000) { a -= 60000; Console.Write("sześćdziesiąt "); }
            else if (a >= 50000) { a -= 50000; Console.Write("pięćdziesiąt "); }
            else if (a >= 40000) { a -= 40000; Console.Write("czterdzieści "); }
            else if (a >= 30000) { a -= 30000; Console.Write("trzydzieści "); }
            else if (a >= 20000) { a -= 20000; Console.Write("dwadzieścia "); }
            else if (a >= 19000) { a -= 19000; Console.Write("dziewiętnaście "); }
            else if (a >= 18000) { a -= 18000; Console.Write("osiemnaście "); }
            else if (a >= 17000) { a -= 17000; Console.Write("siedemnaście "); }
            else if (a >= 16000) { a -= 16000; Console.Write("szesnaście "); }
            else if (a >= 15000) { a -= 15000; Console.Write("piętnaście "); }
            else if (a >= 14000) { a -= 14000; Console.Write("czternaście "); }
            else if (a >= 13000) { a -= 13000; Console.Write("trzynaście "); }
            else if (a >= 12000) { a -= 12000; Console.Write("dwanaście "); }
            else if (a >= 11000) { a -= 11000; Console.Write("jedenaście "); }
            else if (a >= 10000) { a -= 10000; Console.Write("dziesięć "); }

            //tysiące
            if (a >= 9000) { a -= 9000; Console.Write("dziewięć "); }
            else if (a >= 8000) { a -= 8000; Console.Write("osiem "); }
            else if (a >= 7000) { a -= 7000; Console.Write("siedem "); }
            else if (a >= 6000) { a -= 6000; Console.Write("sześć "); }
            else if (a >= 5000) { a -= 5000; Console.Write("pięć "); }
            else if (a >= 4000) { a -= 4000; Console.Write("cztery "); }
            else if (a >= 3000) { a -= 3000; Console.Write("trzy "); }
            else if (a >= 2000) { a -= 2000; Console.Write("dwa "); }
            else if (a >= 1000) { a -= 1000; Console.Write("tysiąc "); }

            if(b >= 2000 && b < 1000000) {
                Console.Write("tysięcy ");
            }

            //setki
            if (a >= 900) { a -= 900; Console.Write("dziewięćset "); }
            else if (a >= 800) { a -= 800; Console.Write("osiemset "); }
            else if (a >= 700) { a -= 700; Console.Write("siedemset "); }
            else if (a >= 600) { a -= 600; Console.Write("sześćset"); }
            else if (a >= 500) { a -= 500; Console.Write("pięćset "); }
            else if (a >= 400) { a -= 400; Console.Write("czterysta "); }
            else if (a >= 300) { a -= 300; Console.Write("trzysta "); }
            else if (a >= 200) { a -= 200; Console.Write("dwieście "); }
            else if (a >= 100) { a -= 100; Console.Write("sto "); }

            //dziesiątki i nastki
            if (a >= 90) { a -= 90; Console.Write("dziewięćdziesiąt "); }
            else if (a >= 80) { a -= 80; Console.Write("osiemdziesiąt "); }
            else if (a >= 70) { a -= 70; Console.Write("siedemdziesiąt "); }
            else if (a >= 60) { a -= 60; Console.Write("sześćdziesiąt "); }
            else if (a >= 50) { a -= 50; Console.Write("pięćdziesiąt "); }
            else if (a >= 40) { a -= 40; Console.Write("czterdzieści "); }
            else if (a >= 30) { a -= 30; Console.Write("trzydzieści "); }
            else if (a >= 20) { a -= 20; Console.Write("dwadzieścia "); }
            else if (a >= 19) { a -= 19; Console.Write("dziewiętnaście "); }
            else if (a >= 18) { a -= 18; Console.Write("osiemnaście "); }
            else if (a >= 17) { a -= 17; Console.Write("siedemnaście "); }
            else if (a >= 16) { a -= 16; Console.Write("szesnaście "); }
            else if (a >= 15) { a -= 15; Console.Write("piętnaście "); }
            else if (a >= 14) { a -= 14; Console.Write("czternaście "); }
            else if (a >= 13) { a -= 13; Console.Write("trzynaście "); }
            else if (a >= 12) { a -= 12; Console.Write("dwanaście "); }
            else if (a >= 11) { a -= 11; Console.Write("jedenaście "); }
            else if (a >= 10) { a -= 10; Console.Write("dziesięć "); }

            //jedności
            switch (a)
            {
                case 1: Console.Write("jeden "); break;
                case 2: Console.Write("dwa "); break;
                case 3: Console.Write("trzy "); break;
                case 4: Console.Write("cztery "); break;
                case 5: Console.Write("pięć "); break;
                case 6: Console.Write("sześć "); break;
                case 7: Console.Write("siedem "); break;
                case 8: Console.Write("osiem "); break;
                case 9: Console.Write("dziewięć "); break;
                case 10: Console.Write("dziesięć "); break;
                default: Console.Write(""); break;
            }

            Console.ReadKey(true); //pauza
        }
edytowany 1x, ostatnio: CeKa
0

Dzięki za odpowiedź!

No chyba nie w tym miejscu, bo jak tak zrobię to będzie kolizja z numeracją od 1 do 4 TYSIĄCE (nie TYSIĘCY);
czyli 102 210: sto dwa TYSIĄCE dwieście dziesięć.

W przypadku gdy powyższy zapis ((a>=5000) && (a<1 000 000)) z IF wplotę między wierszem z liczbami 4000 a 5000 pojawia się błąd.

MI
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:29
0

Kolizja występuję, no ale już @CeKa podrzucił Ci rozwiązanie, to skoro masz jak to nazywa kolizje pomiędzy 1000 -4000 to nie możesz dodać drugiego if-a? Typu:

Kopiuj
 if (b >= 4000 && b < 1000000)
            {
                Console.Write("tysięcy ");
            }
            if (b > 1000 && b < 4000)
            {
                Console.Write("tysiace");
            }
CeKa
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Gdańsk
  • Postów:204
0
michta napisał(a):

Kolizja występuję, no ale już @CeKa podrzucił Ci rozwiązanie, to skoro masz jak to nazywa kolizje pomiędzy 1000 -4000 to nie możesz dodać drugiego if-a? Typu:

Kopiuj
 if (b >= 4000 && b < 1000000)
            {
                Console.Write("tysięcy ");
            }
            if (b > 1000 && b < 4000)
            {
                Console.Write("tysiace");
            }

Ja bym to zrobił w ten sposób:

Kopiuj
if (b >= 1000 && b < 1000000)
{
	if (b < 4000)  
		Console.Write("tysiące ");
	else
		Console.Write("tysięcy ");
}

Bo ten kod co podałeś nie wykona się właściwie.

edytowany 1x, ostatnio: CeKa
MI
W sumie nie bardzo widzę czym one się różnią w wyniku końcowym ;) zarówno u Ciebie jak i u mnie "b" musi być większe od 1000 a mniejsze od 100000, tylko że ja rozbiłem na 2 if-y, a Ty zagnieździłeś if-a. Jak się mylę to mnie proszę popraw, bo na szybko tylko okiem rzuciłem ;) PS. a chyba u Ciebie załapie się dodatkowo liczba 1000 i wtedy gdy wczytasz a = 1000 wyświetlisz dla niej "tysiące" ;)
CeKa
Twoja druga instrukcja warunkowa wykona się tylko dla liczb pomiędzy 1000, a 4000. A nie o to chodzi :) Faktycznie, powinno być pomiędzy 2k a milion
MI
Masz racje, zwracam honor! ;) faktycznie rozpatrujemy liczby w większym zakresie ;)
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:34 minuty
0
Kopiuj
            else if (a >= 80000) { a -= 80000; Console.Write("osiemdziesiąt "); }

            else if (a >= 80) { a -= 80; Console.Write("osiemdziesiąt "); }

Napisy trzymaj w tablicach, żeby ich dwa razy nie pisać w kodzie.

Zauważ też, że w języku polskim długą liczbę można podzielić na grupy po trzy (o wartości od 000 do 999), po czym przedzielać je dodatkowymi słowami jak miliony czy tysiące.
Napisz więc najpierw funkcję działającą od 0 do 999, i tę samą wykorzystasz do jedności i do tysięcy.

edytowany 1x, ostatnio: Azarien
0

Niestety, efektem jest:

120 000 - sto dwadzieścia TYSIĘCY - OK, ale
102 000 - sto dwa TYSIĘCY - nie OK

Szukam dalej...

0

Jakieś pomysły?

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:34 minuty
0

ale tu nie ma co "szukać dalej", tylko trzeba zaprogramować algorytm. o formie liczby mnogiej decydują cyfry dziesiątek i jedności, bez setek.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.