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