[ Pobierz całość w formacie PDF ]
.Tablice dynamiczneW Delphi 4 wprowadzono tablice dynamiczne.Tablica taka jest deklarowana bezpodania jej rozmiaru i nie przydziela siê dla niej pocz¹tkowo ¿adnej pamiêci.Wczasie wykonywania programu pamiêæ dla tej tablicy mo¿e byæ przydzielonapoprzez wywo³anie funkcji SetLength.Oto przyk³adowy kod wykorzystuj¹cy tablicedynamiczne:varDuzaTablica : array of Integer; { Nie podano rozmiaru }X : Integer;beginX :=.// tu wylicza siê potrzebny rozmiarSetLength(DuzaTablica, X);{ Teraz mo¿na do DuzaTablica wpisywaæ wartoœci }end;Tablica dynamiczna jest to tablica, dla której pamiêæ przydziela siê w czasiewykonania programu.Mo¿na powiêkszaæ lub zmniejszaæ jej rozmiar zale¿nie odpotrzeb.Jest to bardzo wygodne, poniewa¿ umo¿liwia deklarowanie tablic dok³adnietakich, jakie s¹ w danych okolicznoœciach potrzebne.Mo¿e to dawaæ du¿eoszczêdnoœci pamiêci.Za³Ã³¿my, ¿e potrzebna jest Ci tablica liczb typu Integer.Czasami trzeba w niej zapamiêtaæ 10 liczb, a czasami 1000.Gdyby nie by³otablic dynamicznych, musia³byœ za ka¿dym razem przydzielaæ pamiêæ na tablicê1000-elementow¹ nawet, gdybyœ potrzebowa³ w niej umieœciæ zaledwie 10.W czasie wykonywania siê programu mo¿na zmieniaæ wielkoœæ tablic.Umo¿liwia tofunkcja Copy.Powiedzmy, ¿e na pocz¹tku utworzy³eœ tablicê o rozmiarze 100.Chcesz jednak powiêkszyæ j¹ do 200.Powinieneœ wówczas zastosowaæ funkcjê Copyjak w poni¿szym przyk³adzie:Copy(DuzaTablica, 200);Dotychczasowa zawartoœæ tablicy jest zachowana z tym, ¿e jej rozmiar zwiêkszy³siê do 200.Mo¿na równie¿ deklarowaæ wielowymiarowe tablice dynamiczne.Dla 2-wymiarowejtablicy kod wygl¹da³by nastêpuj¹co:varDuzaTablica2D : array of array of Integer;beginSetLength(DuzaTablica2D, 20, 20);DuzaTablica2D[0][0] := 200;.end;Po utworzeniu tablicy dynamicznej (funkcj¹ SetLength) do jej elementów mo¿nasiê odwo³ywaæ tak samo, jak do elementów zwyk³ej tablicy.£añcuchy£añcuchy znaków (ang.strings) s¹ bardzo czêsto u¿ywane w programowaniu.ObjectPascal posiada trzy odrêbne typy ³añcuchów: tradycyjne ³añcuchy pascalowe(short strings), typowe dla 32-bitowych Delphi d³ugie ³añcuchy (long strings)oraz z³o¿one z dwubajtowych znaków wide strings.Oprócz tego w Pascalu istniej¹tak¿e ³añcuchy z zerowym ogranicznikiem (ang.null-terminated strings).Omówiêkrótko te wszystkie typy, a nastêpnie przejdê do omówienia funkcji operuj¹cychna ³añcuchach.Krótki ³añcuch (Shortstring)Typ ten jest ³añcuchem znaków o sta³ej (w czasie wykonania programu) d³ugoœcinie przekraczaj¹cej 255 znaków.Krótkie ³añcuchy deklaruje siê na dwa sposoby.Pierwszy to u¿ycie s³owa kluczowego ShortString.D³ugoœæ takiego ³añcuchabêdzie zawsze wynosiæ 255 znaków.Drugi sposób to zastosowanie operatoraindeksu z podaniem d³ugoœci ³añcucha.varS1 : ShortString; { d³ugoœæ – 255 znaków }S2 : string[20]; { d³ugoœæ – 20 znaków }Operacje na ³añcuchach typu ShortString s¹ szybkie, poniewa¿ ich po³o¿enie irozmiar w pamiêci s¹ sta³e.Jednak typ ten uwa¿any jest ju¿ za przestarza³y –zaleca siê u¿ywanie ³añcuchów typu long strings.Pierwszy element krótkiego³añcucha zawiera zawsze bajt okreœlaj¹cy jego bie¿¹c¹ d³ugoœæ (liczbê znaków).Tym samym d³ugoœæ ³añcucha mo¿na okreœliæ odczytuj¹c jego pierwszy bajt.Naprzyk³ad:varS : ShortString; {o d³ugoœci 255 znaków}Len : Integer; {zmienna do przechowywania d³ugoœci ³añcucha}beginS := 'Hello';Len := Ord(S[0]); {w zmiennej Len zapamiêtana jest teraz d³ugoœæ{³añcucha, czyli 5}end;Do okreœlenia d³ugoœci ³añcucha mo¿na u¿yæ tak¿e funkcji Length.Objaœniê toszerzej ju¿ wkrótce.Funkcja Ord zamienia wartoœæ typu Char na Integer.Jest ona tak¿e u¿ywana przytypach wyliczeniowych.Gdy zachodzi taka koniecznoœæ, mo¿na tak¿e wpisywaæ wartoœci do pierwszegobajtu krótkiego ³añcucha.Jest to jednak sztuczka stosowana przezzaawansowanych programistów.D³ugi ³añcuchD³ugi ³añcuch jest typem ³añcuchowym, którego d³ugoœæ jest okreœlanadynamicznie i graniczona jedynie dostêpn¹ pamiêci¹.Przydzielanie i zwalnianiepamiêci dla d³ugich ³añcuchów odbywa siê w miarê potrzeb.S¹ one przez tobardziej elastyczne, jednak kosztem mniejszej szybkoœci, zw³aszcza gdywykonywanych jest na nich wiele operacji.We wszystkich tych przypadkach, gdyszybkoœæ dzia³ania programu nie jest decyduj¹ca, powinieneœ generalnie stosowaæw³aœnie d³ugie ³añcuchy
[ Pobierz całość w formacie PDF ]