Názory ke článku Turbo Pascal - 8. lekce
22. 12. 2005
Program SekniPC; {maka ve W9x a DOS}
Uses Crt;
Procedure FuckIt; Assembler;
Asm
@1:
cli
jmp @1
End;
Var
Key : Char;
Begin
Asm
Mov Ax, 03h
Int 10h
End;
WriteLn (' Smim ti dnes seknout PC (A/N)?");
Repeat
Key := ReadKey;
If Key = #0
Then Key := ReadKey;
Key := UpCase (Key);
Until (Key = 'A') or (Key = 'N');
If Key = 'A'
Then FuckIt
Else WriteLn ('Ty srabe !');
End;
Aaaale, ze by konecne prvni pozitivni komentar? No a bolelo to tolik? I ty predchozi komentare mohly byt trochu vice na urovni, ne? :)
25. 12. 2005
Nebolelo to, Tomas napsal uz nyni ve svych prikladech readkey namisto readln a konecne lze programy odklepavat treba mezernikem, to se mi zalibilo natolik ze jsem ho proste musel ihned pochvalit, no tato lekce jek proste supr, pokud by takto programovali vsichni, mely by jsme krasne, rychle a malo zabirajici programy. Jedina nesrovnalost je >= 100, nahradil bych < 101 a usetrilo by se par instrukci.
TIP: zkuste si nekdy zkompilovany program otevrit v TD (turbo debuggeru) a podivat se jak ho pascal prelozil do ASM, take se tam okamzite pozna, co a jak zoptimalizovat.
Zde je neco, co by se mohlo vam i Autorovi hodit, napsal jsem to uz strasne davno ale svuj ucel to splni;
Function KeyPressed : Boolean; Assembler;
{Toto nacita znak z klavesnicoveho bufferu, vraci True pri uspechu, kterym rozumejte ze nekdo stiskl klavesu}
Asm
mov ax, 40h
mov es, ax
mov dx, es:[1ah]
mov bx, es:[1ch]
xor ax, ax
cmp dx, bx
je @E
mov al, 1
@E:
End;
Function ReadKey : Char; Assembler;
Asm
Mov ah, 8 {Cekani na klavesu}
Int 21h {Preruseni DOS}
Xor ah, ah {Vynulovani registru ah}
End;
Tak a nyni jsem vyvratil tvrzeni, ze pro ReadKey nebo KeyPressed je potreba pripojit unitu CRT.
Na co potrebujete CRT ted? Samozrejme na oblibeny ClrScr,
Ten lze nahradit bud jednoduse nebo sloziteji, vzhledem k tomu ze se mi ted nechce prohrabavat me zdrojaky, tak to napisu jednodusim zpusobem z hlavy
Procedure ClrScr; Assembler;
Asm
Mov Ax, 03h {Rezim obrazovky 3h = 80x25 radku}
Int 10h {Preruseni obrazovky}
End;
Nechci se Ti do toho plest Tomasi, ale s temito ReadKey a KeyPressed bude program daleko rychleji reagovat na klavesy, vsichni pascal experti si jednou neco takoveho napisi, kdyz by mi tohle nekdo dal v dobe, kdyz jsem v pascalu zacinal, mel bych radost, doufam ze vy z toho mate take radost.
PS: Unitu CRT snad zase nejakou dobu nebudete potrebovat,
ona je pomala a program pak zbytecne zabira o mnoho vic.
25. 12. 2005
Sorry za toho netmana, priste az se budu chtit vydavat za nekoho jineho pouziji proxy, kterou si zmenim IP adresu, tu IP adresu ktera se u vas loguje. :-)
Uz se tesim na dalsi lekci, treba se naucim alespon 1 novy prikaz ci algoritmus/postup.
Tomasi chystas zde ucit i BGI ?
26. 12. 2005
Jestli myslis ze readkey sem tam psal jen kvuli tobe tak te musim zklamat jelikoz ta lekce byla napsana hned po vydani 7 a tos tam jeste nic nepsal. Kdybys cetl poradne rikal sem ze readkey sam pouzivam, ale pro potrebytohoto kurzu ZATIM staci readln. Ten program v asiku co si poslal je hezkej , aale zajimalo by me kdy konecne pochopis ze tem lidem to vubec nic nerika. Chapej ja ucim lidi uplne od 0 ani nevedi co jsou programovaci jazyky vyssi a nizsi urovne natoz abvy vedeli co kterej prikaz v asiku znamena. Myslim ze je lepsi kdyz sami vsichni vsechno pochopej nez aby slepe neco opisovali. Timpadem te zklamu ponevadz jednotku crt budu pouzivat porad.
BGI vyucovat budu ale je na to este spousta casu.
A nakonec... Neznam te a ani nepatris do seznamu mych pratel proto mi rikej treba Carixi, Gryfine to je jedno jak ale ne jmenem diky.
26. 12. 2005
Carixi: k tomu BGI, je to pomale, ma to maximalne 256 barev a je to K NICEMU, pokud mas zajem, dam ti link na unitu, psanou prevazne v ASM, ta unita je rychla a pouzitelna, ma take jen 256 barev ale je na 90% kompatibilni s BGI.
Chces ji teda? Jinak sam jsem si napsal unitu pro High Color a True Color, obe jsou rychlejsi minimalne o 300% nez je BGI, muzu take v zajmu kursu dodat. Jinak...v Pascalu lze take velmi jednoduse prehravat WAV,XM,MP3, ... Mam program ktery pod dosem rozjede AVI i se zvukem a dalsi vychytavky, takze kdyz by jsi neco v zajmu kursu potreboval tak dej vedet a ja to dodam.
3. 1. 2006
Text tohoto komentáře byl vymazán, jelikož porušoval publikační pravidla našeho e-zinu! Redakce
8. 1. 2006
Vazena redakce, timto se omlouvam za poruseni publikacnich pravidel, uz se to vicekrat nestane
u programu dvojnasobky moc nechapu deklarovani promene 'i' kdyz v programu neni vubec vyuzita a bez ni slape program stejne???
19. 7. 2007
Nechci rypat Tome, ale mas tam chybu. Na radku 7 ma byt readln. Mozna se malo soustredis na psani lakci a vic na dopisovani se zmatenymi individui ve foru. Jinak te chci pochvalit delas to super DIKY.
17. 11. 2007
Zní to asi hloupě, ale můžu se prosím zeptat, jak do zdrojového kódu napíšu to "nerovná se" nebo "je mensí nebo rovná se"???
24. 11. 2007
To Martin:
nerovná se se zapíše jako <>
je menší rovno se zapíše jako <= atd.
26. 11. 2007
To dzaruska: to vim :) ale nevím jak to naťukat do klávesnice, když mi v pascalu nejde přehodit na anglickou klávesnici.
chci se zeptat čím docílíme toho že přidáme hodnotu funkcni, konkrétně tady pocitani:=cislo;
mě to jde stejně i bez tohoto,prosím o nějaké vysvětlení moc to nechápu,prostě co to dělá.děkuju
Reagoval na komentář od uživatele vq|idu :
Promenna i je v tomto pripade skutecne zbytecna.Smysl ma pouze v pripade, ze by si zadaval cislo na vstupu(readln(i)).
1. 12. 2008
není mi trochu jasné, proč se vypisuje výsledek jako 128, když nesplňuje to, že výsledek(cislo) má být menší nebo rovno 100.. stejně jako když se dá cislo<=50 se vypíše 64,což je ale zase víc než 50 a rozhodně to není rovno 64.
Vysvětlí to někdo?
Reagoval na komentář od uživatele sath :
Protože v cyklu
# while cislo<=100 do
# begin
# cislo:=cislo*2; (* Telo funkce *)
# writeln(cislo);
# end;
se budou generovat takový čísla který jsou menší než těch 100, a jakmile tam ,,vběhne" číslo větší jak 100, tak je jasný že podmínka while není splněna, a rovnou to jde až za ni
# writeln;
# write('Vysledek je: ',cislo);
# pocitani:=cislo; (* Prirazeni funkci hodnoty *)
# end;