TlačiťTlačiť Slovenčina English Hľadať RSS

© 2005 – 2024 Roman Horváth, všetky práva vyhradené. Dnes je 20. 4. 2024.

Stránka sa načítava, prosím čakajte…

Dátum: 5. 9. 2021, pred tromi rokmi

Tento článok sa zaoberá výpisom znakov s pomocou ASCII kódov (a naopak). Problematika tabuľky znakov je v súčasnosti omnoho komplikovanejšia v porovnaní s časom, kedy vznikla. Súčasné aplikácie používajú „nadstavbu“ tejto tabuľky zvanú Unicode. S používaním tohto štandardu je spojených mnoho komplikácií, ktorými sa však nebudeme zaoberať. Len pre zaujímavosť, pozrite si informácie v týchto zdrojoch:

Cieľové zadanie

Napíšte krátky program, ktorý vypíše tabuľku znakov v rozsahu ASCII kódov 32 až 126. (Bude riešené nižšie, po malom spresnení.)

Prípravné zadania

  1. Vypíšte jeden náhodne zvolený znak z rozsahu ASCII 32 až 126.

~

long číslo = náhodnéCeléČíslo(32, 126);
vypíšRiadok("Znak č. ", číslo, " – " , (char)číslo);

Príklad výsledku

Znak č. 44 – ,
  1. Vypíšte všetky znaky z rozsahu ASCII 32 až 126.

~

for (int kód = 32; kód <= 126; ++kód)
	vypíšRiadok(kód + " – " + (char)kód);

Výsledok

32 –  
33 – !
34 – "
35 – #
36 – $
37 – %
38 – &

(skrátené)

120 – x
121 – y
122 – z
123 – {
124 – |
125 – }
126 – ~

Spresnené cieľové zadanie

Vypíšte všetky znaky z rozsahu ASCII 32 až 126 tak, aby boli rozmiestnené v šiestich stĺpcoch.

 

Riešiť to môžeme rôzne. Napríklad dvomi cyklami (pričom posledných päť znakov musíme vypísať zvlášť, inak by sme vypísali aj znak číslo 127):

~

for (int kód = 32; kód <= 121; kód += 6)
{
	for (int i = 0; i < 6; ++i)
		vypíš((kód + i), " : ", (char)(kód + i), "\t\t");
	vypíšRiadok();
}

for (int kód = 122; kód <= 126; ++kód)
	vypíš(kód, " : ", (char)kód, "\t\t");

vypíšRiadok('\n');

Výsledok

32 :        33 : !      34 : "      35 : #      36 : $      37 : %      
38 : &      39 : '      40 : (      41 : )      42 : *      43 : +      
44 : ,      45 : -      46 : .      47 : /      48 : 0      49 : 1      
50 : 2      51 : 3      52 : 4      53 : 5      54 : 6      55 : 7      
56 : 8      57 : 9      58 : :      59 : ;      60 : <      61 : =      
62 : >      63 : ?      64 : @      65 : A      66 : B      67 : C      
68 : D      69 : E      70 : F      71 : G      72 : H      73 : I      
74 : J      75 : K      76 : L      77 : M      78 : N      79 : O      
80 : P      81 : Q      82 : R      83 : S      84 : T      85 : U      
86 : V      87 : W      88 : X      89 : Y      90 : Z      91 : [      
92 : \      93 : ]      94 : ^      95 : _      96 : `      97 : a      
98 : b      99 : c      100 : d     101 : e     102 : f     103 : g     
104 : h     105 : i     106 : j     107 : k     108 : l     109 : m     
110 : n     111 : o     112 : p     113 : q     114 : r     115 : s     
116 : t     117 : u     118 : v     119 : w     120 : x     121 : y     
122 : z     123 : {     124 : |     125 : }     126 : ~     

Alebo s pomocou počítania zvyškov po delení:

~

for (int kód = 32; kód <= 126; ++kód)
{
	vypíš(kód, " : ", (char)kód, "\t\t");
	if (kód % 6 == 1) vypíšRiadok();
}

vypíšRiadok('\n');

Výsledok

32 :        33 : !      34 : "      35 : #      36 : $      37 : %      
38 : &      39 : '      40 : (      41 : )      42 : *      43 : +      
44 : ,      45 : -      46 : .      47 : /      48 : 0      49 : 1      
50 : 2      51 : 3      52 : 4      53 : 5      54 : 6      55 : 7      
56 : 8      57 : 9      58 : :      59 : ;      60 : <      61 : =      
62 : >      63 : ?      64 : @      65 : A      66 : B      67 : C      
68 : D      69 : E      70 : F      71 : G      72 : H      73 : I      
74 : J      75 : K      76 : L      77 : M      78 : N      79 : O      
80 : P      81 : Q      82 : R      83 : S      84 : T      85 : U      
86 : V      87 : W      88 : X      89 : Y      90 : Z      91 : [      
92 : \      93 : ]      94 : ^      95 : _      96 : `      97 : a      
98 : b      99 : c      100 : d     101 : e     102 : f     103 : g     
104 : h     105 : i     106 : j     107 : k     108 : l     109 : m     
110 : n     111 : o     112 : p     113 : q     114 : r     115 : s     
116 : t     117 : u     118 : v     119 : w     120 : x     121 : y     
122 : z     123 : {     124 : |     125 : }     126 : ~     

Doplňujúce zadanie

Vykonajte výpis ASCII kódov ku znakom z rozsahu ' ''~' v šiestich stĺpcoch.

~

for (char znak = ' '; znak <= '~'; ++znak)
{
	vypíš(znak, " : ", (int)znak, "\t\t");
	if (znak % 6 == 1) vypíšRiadok();
}

vypíšRiadok('\n');

Výsledok

  : 32      ! : 33      " : 34      # : 35      $ : 36      % : 37      
& : 38      ' : 39      ( : 40      ) : 41      * : 42      + : 43      
, : 44      - : 45      . : 46      / : 47      0 : 48      1 : 49      
2 : 50      3 : 51      4 : 52      5 : 53      6 : 54      7 : 55      
8 : 56      9 : 57      : : 58      ; : 59      < : 60      = : 61      
> : 62      ? : 63      @ : 64      A : 65      B : 66      C : 67      
D : 68      E : 69      F : 70      G : 71      H : 72      I : 73      
J : 74      K : 75      L : 76      M : 77      N : 78      O : 79      
P : 80      Q : 81      R : 82      S : 83      T : 84      U : 85      
V : 86      W : 87      X : 88      Y : 89      Z : 90      [ : 91      
\ : 92      ] : 93      ^ : 94      _ : 95      ` : 96      a : 97      
b : 98      c : 99      d : 100     e : 101     f : 102     g : 103     
h : 104     i : 105     j : 106     k : 107     l : 108     m : 109     
n : 110     o : 111     p : 112     q : 113     r : 114     s : 115     
t : 116     u : 117     v : 118     w : 119     x : 120     y : 121     
z : 122     { : 123     | : 124     } : 125     ~ : 126     

Bonusové zadanie

Vypíšte reťazec zadaný používateľom po znakoch. Najskôr presne tak, ako bol zadaný a potom ešte raz, ale zväčšite všetky malé písmená na veľké. Najprv zrealizujte zväčšovanie písmen cez ASCII kódy (v rozsahu anglickej abecedy) a potom cez preddefinované metódy Javy (čo je všeobecnejšie riešenie, pretože pracuje aj s diakritickými znakmi).

~

String reťazec = zadajReťazec("Zadaj reťazec");

// Výpis po znakoch:
for (int i = 0; i < reťazec.length(); ++i)
	vypíš(reťazec.charAt(i));

vypíšRiadok();

// Zväčšovanie malých písmen anglickej abecedy:
for (int i = 0; i < reťazec.length(); ++i)
{
	if (reťazec.charAt(i) >= 'a' && reťazec.charAt(i) <= 'z')
		vypíš((char)(reťazec.charAt(i) - 32));
	else
		vypíš(reťazec.charAt(i));
}

vypíšRiadok();

// Zväčšovanie všetkých malých písmen:
for (int i = 0; i < reťazec.length(); ++i)
{
	if (Character.isLowerCase(reťazec.charAt(i)))
		vypíš(Character.toUpperCase(reťazec.charAt(i)));
	else
		vypíš(reťazec.charAt(i));
}

vypíšRiadok();

Možný výsledok

(Po zadaní „Zadaný reťazec.“)

Zadaný reťazec.
ZADANý REťAZEC.
ZADANÝ REŤAZEC.

Ďalším krokom môže byť grafická tabuľka znakov.