Cvičné zadania pred druhou písomkou

Riešenia zverejním vo štvrtok 8.12.2005



Vyhodnocovanie karetnej hry Očko pre dvoch hráčov.
type tKarty = array [1..10] of byte;
Pole tKarty obsahuje informáciu o kartách, ktoré má jeden hráč v ruke. Prvky poľa od začiatku znamenajú bodové hodnoty kariet. Za poslednou použitou hodnotou je nula a zvyšné prvky poľa za nulovým prvkom môžu mať nedefinovanú hodnotu.
Naprogramujte assemblerovú funkciu
function vysledokOcka(hrac1,hrac2:tKarty):byte;
Výsledok je 1 ak vyhral prvý hráč, 2 ak vyhral druhý hráč a 0 ak je výsledok nerozhodný.
Pomôcka: v očku vyhrá ten, kto má viac bodov ale nepresiahol 21. Nerozhodne je (pre naše účely) keď obaja presiahnu 21 alebo ak majú rovnaký počet bodov.



Mierou podobnosti dvoch hodnôt typu byte nazveme počet bitov v ktorých sa zhodujú.
Naprogramujte assemblerovú funkciu
type tPole = array [1..10] of byte;
function najpodobnejsie(var p1,p2:tPole):integer;
Výsledkom je index p do polí p1 a p2 taký, že p1[p] a p2[p] majú najväčšiu mieru podobnosti zo všetkých indexov 1 <= p <= 10. Ak takých indexov p existuje viac, výsledkom je ľubovoľný z nich.



Naprogramujte assemblerovú funkciu
type pole = аrray[1..10000] of byte;
function usekJedniciek(var P:tPole; N:integer):integer;
N je počet prvkov, ktoré sú v poli P použité, teda pracujeme len s indexami 1..N, ostatné prvky si nevšímame.
Hodnoty použitých prvkov poľa P sa spolu chápu ako jeden reťazec bitov dĺžky 8*N bitov, ktorý je poskladaný z hodnôt P[1] až P[N] zľava doprava.
Výstupom funkcie je číslo vyjadrujúce najväčší počet za sebou idúcich jedničiek v bitovom reťazci P

Príklad:
Prvky poľa P sú zapísané v dvojkovej sústave a sú uvedené len hodnoty do N-tého prvku.
Vstup:
N = 4
P[1] = 11110101, P[2] = 11010011, P[3] = 11101101, P[4] = 00001111
Výstup:
EAX = 5
Miesto, kde sa vyskytuje 5 za sebou idúcich jedničiek je podčiarknuté

Poznámka: Tento príklad je asi ťažší než budú na písomke, ale vyskúšajte si svoje sily!



Naprogramujte assemblerovú funkciu
type retazec = аrray[1..10000] of char;
function jePalyndrom(P:retazec; N:integer):Boolean;
Výsledkom je hodnota logická hodnota tvrdenia: "Prvých N znakov poľa P je palyndróm".
Hodnota poľa P sa nesmie zmeniť.
Poznámky:
Typ char je na úrovni strojového kódu uložený do jedného bajtu. S poľom P teda narábate rovnako akoby bolo deklarované ako аrray[1..10000] of byte, kde každý bajt obsahuje kód jedného písmena.
Typ Boolean je na úrovni strojového kódu uložený do jedného bajtu. Hodnota 0 znamená False, hodnota 1 znamená True.

Príklady:
Vstup:
N = 5
P = ('Ť', 'A', 'H', 'A', 'Ť',....)
Výstup:
AL = 1

Vstup:
N = 5
P = ('M', 'A', 'K', 'A', 'Ť',....)
Výstup:
AL = 0