4. naloga

Iglični tiskalnik

Na nekaterih starejših računalnikih je bil vsak znak predstavljen s črno-belo sliko veli- kosti 8 × 8 točk. Vsaka slika je bila v pomnilniku predstavljena s tabelo 8 bajtov, pri čemer je n-ti bajt vseboval opis n-te vrstice (gledano od zgoraj navzdol). Vsaka točka (piksel) v vrstici je imela svojo utež, uteži posameznih točk od desne proti levi so bile potence števila 2, torej 1, 2, 4, 8, 16, 32, 64, 128. Vrstica je bila predstavljena z vsoto uteži črnih točk.

Znaki 0, 1, x in y so recimo predstavljeni takole:

0, 1, x in y

V tretji vrstici (od zgoraj navzdol) slike znaka 0 so druga, tretja in sedma točka (od desne proti levi) črne. Skupna vsota njihovih uteži je 2+4+64 = 70, zato ima tretji bajt v opisu znaka 0 vrednost 70. Znak 0 je bil torej predstavljen z naslednjim zaporedjem 8 bajtov: 0, 60, 70, 74, 82, 98, 60, 0.

Napiši podprogram Izpisi(s), ki izpiše bitno sliko niza s. Pri tem naj predpostavi, da so bitne slike vseh možnih znakov že pripravljene in shranjene v globalni spremenljivki znaki; to je tabela 256 × 8 števil, pri čemer je prvi indeks številka znaka (od 0 do 255), drugi indeks pa številka vrstice (od 0 do 7). Podprogram naj niz izpiše tako, da vse črne točke v bitnih slikah izpiše kot znak ”#“, vse bele točke pa kot pike ”.“. Tako bi podprogram Izpisi na primer izpisal niz 001xy kot

........................................
..####....####......#...................
.#...##..#...##....##....#...#....#..#..
.#..#.#..#..#.#...#.#.....#.#.....#..#..
.#.#..#..#.#..#.....#......#......#..#..
.##...#..##...#.....#.....#.#......###..
..####....####.....###...#...#.......#..
..................................###...

Še deklaracije v raznih programskih jezikih:

unsigned char znaki[256][8];                       /* v C/C++ */
void Izpisi(char *s);                              /* v C/C++ */
void Izpisi(string s);                             // v C++

var znaki: array [0..255, 0..7] of byte;           { v pascalu }
procedure Izpisi(s: string);

public static byte[ , ] znaki = new byte[256, 8];  // v C#
public static void Izpisi(string s);

public static byte[ ][ ] znaki = new byte[256][8]; // v javi
public static void Izpisi(String s);

znaki = [[...], [...], ...]                        # v pythonu
def Izpisi(s): ...

Nasvet: v pythonu in pascalu lahko številsko kodo znaka c dobiš tako, da pokličeš standardno funkcijo ord(c).