programy wypisujący cyfry liczby całkowitej od najmniejszej do najwiekszej

0

Hej, możecie mi wyjaśnić o co chodzi z tym odejmowaniem 48 w wartości tablicy zliczania w poniższym kodzie? Jestem początkujący, wybaczcie jeśli to głupie pytanie, ale nie mogę tego rozkminić.

ROGRAM WYPISUJACY CYFRY ZADANEJ LICZBY OD NAJMNIEJSZEJ DO NAJWIEKSZEJ

 
string x;
			int[] zliczanie = new int [10];
			Console.Write("Podaj swoja liczbe: ");
			x = Console.ReadLine();
			Console.Write("\n");
			Console.Write("Posortowane rosnaco cyfry Twojej liczby to: ");
			for (int i = 0; i < x.Length; i++) 
			{
				zliczanie [x [i] - 48]++;
			}
			for (int i = 0; i < 10; i++)
			{
				while (zliczanie[i] != 0)
				{
					Console.Write("{0}", i);
					zliczanie[i]--;
				}
			}
			Console.Write("\n");  
			Console.ReadKey();

0

Zerknij na tablicę ASCII i zobacz jaką wartość dziesiętną ma "0" - https://pl.wikipedia.org/wiki/ASCII

Cyfrę którą podajesz z klawiatury nie traktujesz jako liczbę, tylko jako ciąg znaków.

0

Ok, to już rozumiem, dzięki. Ale mam problem z resztą kodu. Byłbym wdzięczny za jakiekolwiek komentarze opisujące kod. :)

1

Na początku tworzysz sobie tablicę 10 elementową (wartości od 0 do 9)
int[] zliczanie = new int [10];

Następnie następuje pobranie wartości (ciąg znaków) od użytkownika
Console.Write("Podaj swoja liczbe: ");
x = Console.ReadLine();
Console.Write("\n");
Console.Write("Posortowane rosnaco cyfry Twojej liczby to: ");

I teraz w pierwszej pętelce liczymy sobie ile razy dana cyfra wystąpiła.
Jeżeli wpisałeś np. "3", to w ASCII jest to 51 (DEC). Odejmujesz od tego 48 i masz 3.
Następnie w tablicy zliczanie inkrementujesz to co jest w trzecim elemencie (miałeś na początku 0, więc teraz masz 1).
for (int i = 0; i < x.Length; i++)
{
zliczanie [x [i] - 48]++;
}

I teraz kolejna pętla w której lecisz od wartości 0 do 9.
Chodzi w niej o to, że jeżeli dana liczba wystąpiła (zliczenie[i] != 0) to zostanie wykonany kod w środku.
Np. cyfry 0,1,2 nie wystąpiły w naszym przykładzie (wpisaliśmy tylko '3'), zatem w tablicy zliczanie pod indeksami 0,1 oraz 2 masz wartość 0, w indeksie 3 masz wartość 1, a w kolejnych masz 0.

        for (int i = 0; i < 10; i++)
        {
            while (zliczanie[i] != 0)
            {
                Console.Write("{0}", i);
                zliczanie[i]--;
            }
        }

Pętla while (zliczanie[i] != 0) oraz zliczanie[i]--; służy do tego aby wyświetlić wszystkie wprowadzone cyfry.
Np. jak podczas testów wpiszesz 13324 to wyświetli ci 12334 (czyli dwa razy wyświetli liczbę '3').
Najlepiej będzie jak sobie weźmiesz kartkę w kratkę oraz ołówek i sobie to rozrysujesz dla dwóch przykładów : '3' oraz '1332'.

0

Bardzo wielkie dzięki, wszystko rozumiem :)

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