art1








O jeden bajt za dużo





O jeden bajt za dużo

W poniższym arcie chciałbym poruszyć pewną ciekawą kwestię. Nie codzi mi o
kompilacje plików itp tylko o sposób programowania a raczej unikanie błędów. Czasem
pomysłka o jedną drobną cyferkę może być katastrofalna w skutkach. To nie żart !!!
Prosty przykład : napisz Label1.BackColor=&H0000FF (kolor niebieski) ale
Label1.BackColor=&H0000EF już wygląda nieco inaczej. Takich drobnych pułapek jest
wiele. Głównie są to różne skomplikowane pętle instrukcje wyboru itp. Nie dotyczy to
wcale programistów piszących skompilowane gry czy ine skomplikowane programy (np Pakery,
języki programowania) Oto prosty przykład :

Y=Int(rnd*50)
Z=Int(rnd*50)+1

Jak widać te 2 instrukcje różnią się nieznacznie, ale bardziej niż myślisz !!! Y
może osiągnąć wartość równą 0 ale nie może osiągnąć wartości
50 natomiast Z nie może osiągnąć wartości 0
(najmniejsza wartość jaką może osiągnąć to 1) ale za to osiąga
wartość 50 I pewnie pomyślisz, że głupotami się zajmuję ??? Niby
drobny szczegół, jedna z pierwszych lekcji programowania a ... No właśnie taki
szczegół jest trudny do wykrycia i może on nas zgubić. Pisząc gry używamy wartości
losowych (załóżmy, że piszemy jednorękiego bandytę) No i jest taki kawałek kodu :

Z=Int(rnd*50)+1
IF Z=0 then call głównaWygrana

No i co ??? Osiągnięcie głównej wygranej jest niemożliwe !!! Niby taki drobiazg, a
cała gra jest do kitu. Biada nam jeśli piszemy to dla firmy na zlecenie (lub jeśli to
ma być plugin do JackPot'a więcej o JackPot jednorękim bandycie www.zarabianie.siec.prv.pl) Wiem, że raczej
nie piszesz dla poważnych firm aplikacji w których jeden błąd może byc watr milion
dolarów jak w Jackpocie, no ale potrafi to ze;psuć niejednemu progrmiście humor.
Gorzej, gdy napiszmy coś takiego :

Z=Int(rnd*50)
IF Z<2 then call GłównaWygrana

W tym wypadku jeśli Z=1 to jest główna wygrana, ale Z może być równe zero i też
spełni to warunek (jak widać mała, rzecz a ile zamiesznia)

Jednak kiedyś próbowałem rozgryźć zapis formatu BMP. Nie rozgryzłem,
zdenerwowałem się i napisałem konwerter BMP na mój własny format pliku graficznego
(chciałem w Pascal'u napisać programik, który wyświetla określony plik BMP) no i w VB
FORM1.Picture = ten plik BMP i wprowadziłem taki kod :

FOR a=0 to 639
FOR b=0 to 99
Y=Point(a,b)
.... tutaj procedura konwertująca kolor z RGB (np &H00FF00) na 16 kolorów (dla
instrukcji PutPixel w Pascalu)
Next b
Next a

No i zapisuje do jakiegoś pliku DAT zawartość pliku BMP. W Pascalu napisałem coś
takiego :

for w:=0 to 640 do Begin
for r:=380 to 479 do Begin {chcę ten pasek wyświetlić na
samym dole i dlatego zaczynam od 380 a nie od 0}
read(P,D);

... Tutaj procedura konwerująca text na liczbę ...
putpixel(w,r,cyfra3);
putpixel(w,r-380,cyfra3);
end;end;

OK, spoko teraz odczyta mi plik i go wyświetli (miałem gdzieś na dysku pliki TPU
które automatycznie odczytywały pliki BMP i wyświetlały na ekranie, ale je gdzieś
zapodziałem i musiałem pisać takie procedury) Wszystko było OK, ale obraz był jakby
skrzywiony o 30 stopni (proponuję jako rysunek dać text i wyglądało to w Pascalu jakby
text był pisany kursywą) Co to był za błąd ??? Pół dnia szukałem błędu byłem
wkurzony a okazało się że to co zaznaczyłem pogrubioną czcionką było źle : otóż
w procedurze z VB było 439 a w procedurze Pascal'owej 640 I pomyśleć, o 1 się
pomyliłem a jaki efekt !!! Niby 1 bajt a praktycznie całkiem źle wyświetlane są pliki
graficzne !!! Pisząc ten art chcę abyś zwrócił uwagę na takie "drobiazgi"

Jelcyn






Wyszukiwarka

Podobne podstrony:
ART1 (18)
art1 (16)
ART1 (17)
art1
ART1 (10)
art1
ART1 (6)
ART1 (4)
art1
slowa klucz mec art1
art1

więcej podobnych podstron