Určte počet slov, v ktorých súčet ASCII kódov znakov je deliteľný dvoma
pocet tlacte osmickovo
no neviem jak to ani len zacat ...nejake navody ?
Ahoj.
Algoritmus by som riesil takto:
-nacitam znak po znaku, a pripocitam ku nejakej premennej (register) kod znaku. *
-ak znak bola medzera, tak som nacital slovo, urcim ci je sucet delitelny dvoma
- ak ano, pripocitam k pocitadlu spravnych slov 1.
- robim to pokial som nestlacil enter.
- vypis v osmickovej : na to uz urcite najdes priklad ako na to.
*pretoze sucet ascii kodov znakov moze byt dost velka, (>255, teda aspon registrovy par (16bitov) potrebujes na ulozenie), mozes vyuzit taku fintu, ze budes mat len jeden register 8 bitovy, ku ktoremu furt pripocitas kod znaku, a seres na to ci sa to pretecie ci ne (ci sucet je viac ako sa zmesti do 8 bit.)
Pri parnosti ta aj tak zaujima, ci 0-ty bit cisla je 1 (neparnost) alebo 0 (parnost)
napr
5 binarne je 101 (neparne)
6 binarne je 110 (parne)
==================
Pri programovani v asembleru (a v programovani hocicoho) majte na mysli ze je to len stroj, ktory robi prave to co ste mu napisali.
Ak mate ulohu, ktoru ma program riesit, skuste ulohu rozbit na malicke veci co sa ma udiat - teda co presne sa ma urobit, pre riesenie:
napr.
nacitanie slov:
urcite budes potrebovat nacitat znaky
budes potrebovat zistit koniec slov(medzera), a koniec vstupu(enter)
...
Pri asembleru vsak ste blizsie k hardveru pocitaca. Tu musite rozbit ulohy este jemnejsie:
nacitanie znaku uz tu nemate ,,jednoduche ako v C'' ze readchar();
tu uz musite nastavovat nejake registre, citat vstupnovystupne porty, atd.
(pravda, ze sa mozete stretnut uz s implementovanou funkcionalitou nacitania znaku, ktore uz zavolate s CALL, podobne ako dajaku funkciu)
Druha vec ze tu uz lepsie je vyuzit vlastnosti dvojkovej sustavy:
napr:
-parnost neparnost na zaklade 0-teho bitu cisla
-prevod z dvojkovej do osmickovej sustavy: napr 01100110: rozdelis na 01 | 100 | 110 - kazda trojica je vlastne cislica v osmickovej sustave
-prevod do hexa: 01100110: rozdelis na - 0110 | 0110 - kazda stvorica tvori cislicu v hexadecimalnej sustave.
pre vyuzitie tychto vlastnosti mozete pouzit teda rotacie registrov (z 1001 sa stane 0011 (rotoval som dolava o 1 bit))
maskovanie operaciou AND
napr mam 11000111 a potrebujem len dolne 4 bity:
11000111 AND 00001111 => 00000111
atd atd atd...
A ano venujte trocha (zopar hodin?) casu na lustenie inych programov. (dobre okomentovanych)
urcite vam pomoze.