[ Pobierz całość w formacie PDF ]
.Jak to mo¿liwe ? Otó¿ ograniczyliœmy zakresposzczególnych pól.Zastanówmy siê, ile potrzeba miejsca w pamiêci, abyprzechowaæ informacjê o fakcie wyposa¿enia, b¹dŸ nie, samochodu w ABS ? S¹ dwamo¿liwe stany - jest lub nie ma.Czyli innymi s³owy jedynka, albo zero -wystarczy jeden bit ! To samo tyczy siê szyberdachu.Jeœli chodzi o liczbêmiejsc to w tym przypadku ograniczy³em liczbê mo¿liwych wartoœci do 16 - poprostu przeznaczy³em na to pole cztery bity (a 2^4 = 16).W ten sposób zamiastu¿wyaæ trzech, struktura ta u¿ywa zaledwie jednego bajtu.Od strony sk³adniowej dostêp do pól bitowych jest identyczny, jak do tych"normalnych".Jedyn¹ ró¿nic¹ jest sposób ich deklaracji - tzn.deklaruje siê jetak samo, ale po typie i nazwie pola podaje siê dodatkowo, po dwukropku, iloœæbitów, które zamierzamy przeznaczyæ na dane pole.14.TablicePoniewa¿ istotê tablic naj³atwiej jest pokazaæ na przyk³adach, to w nastêpnychkilku podpunktach zostan¹ zaprezentowane przyk³adowe programy.Jednak zanim donich dojdziemy przedstawiê ich podstawowe cechy.Tablic u¿ywa siê w przypadku, gdy chcemy przechowywaæ du¿¹ iloœæ danych tegosamego typu przy zachowaniu ³atwego do nich dostêpu.Mimo tego, ¿e tablica mo¿eprzechowywaæ wiele danych jednego typu, odwo³ujemy siê do niej za pomoc¹ jednejnazwy.Jednak aby móc okreœliæ, o który dok³adnie element nam chodzi, musimyu¿yæ dodatkowo indeksu, czyli kolejnego (liczonego od zera) numeru elementu.Kolejne elementy s¹ umiejscowione w pamiêci komputera jeden za drugim.Abylepiej to zobrazowaæ przedstawiê na rysunku piêcioelementow¹ tablicê, którejelementy s¹ typu float:Jak widzimy na rysunku pocz¹tek tablicy jest umiejscowiony w pamiêci komputerapod adresem 1000 (to oczywiœcie jest tylko przyk³ad, tablica ta mo¿e znajdowaæsie pod zupe³nie innym adresem).W³aœnie pod tym adresem znajduje siê elementtablicy o numerze zero - w naszym przypadku ma on wartoœæ trzy.Nastêpnyelement o numerze jeden, który zawiera wartoœæ piêæ, znajduje siê pod adresem1004.Zapewne powiesz: "Zaraz, zaraz - przecie¿ elementy w tablicy mia³y byæumiejscowione w pamiêci jeden za drugim.Dlaczego wiêc nie znajduje siê on podadresem 1001 ?".Otó¿ dlatego, ¿e tablica ta zawiera elementy typu float.A jakzapewne pamiêtasz z punktu trzeciego, na przechowanie danej tego typu potrzebaa¿ czterech bajtów pamiêci.Z tego te¿ powodu mamy do czynienia z tak¹sytuacj¹, ¿e kolejne elementy tablicy s¹ umiejscowione w pamiêci pod adresamiró¿ni¹cymi siê o cztery.Na zakoñcaenie tego punktu podam jeszcze jedn¹ wa¿n¹cechê tablic - adres tablicy jest sta³y.Raz przydzielony nie zmienia siê przezca³y czas dzia³ania programu.I jeszcze jedna informacja dla osób znaj¹cychpascala - odpowiednikiem konstrukcji u¿ytych w nastêpnych podpunktach jestkonstrukcja "array [0.x] of typ".14.1.Tablice o elementach typu prostegoW poprzednim punkcie zosta³y przedstawione ogólne informacje dotycz¹ce tablic.Poniewa¿ jednak suchy tekst nigdy nie wyjaœni tematu tak dobrze jak przyk³ad,pos³u¿ymy siê w³aœnie tym narzêdziem.Za³Ã³¿my, ¿e chcemy napisaæ program, któryobliczy nam œredni¹ z piêciu ocen.Bêdzie on wygl¹da³ nastêpuj¹co:#include <stdio.h>void main(void) {float srednia;int i;float oceny[5];// wpisujemy do tablicy przykladowe oceny z pieciu przedmiotowoceny[0] = 3; oceny[1] = 5; oceny[2] = 5; oceny[3] = 3.5; oceny[4] = 3;// sumujemy wszystkie ocenysrednia = 0;for(i=0; itypedef struct {int nr_id;float pensja;} PRACOWNIK;void main(void) {float suma_wyplat;int i;PRACOWNIK kadra[3]={ {25803, 1299.10}, {25809, 2100}, {7, 1500} };// wyswietlamy informacje o pracowniku - jego nr id, oraz pensjefor(i=0; ivoid main(void) {int plansza[10][10];int i, j;// wyczyszczenie planszy - wypelnienie jej zeramifor(i=0; itypedef struct {int nr_id;float pensja;} PRACOWNIK;void main(void) {int i;PRACOWNIK *kadra;// przydzielamy pamiec na dynamiczna tablicekadra = (PRACOWNIK*) malloc(3 * sizeof(PRACOWNIK));// sprawdzenie czy udalo sie zaalokowac pamiecif(kadra != NULL) {printf("Brak pamieci !"); exit(0);}// wpisujemy wartosci dla poszczegolnych pracownikowkadra-nr_id = 25803; kadra-pensja = 1299.10;(kadra+1)-nr_id = 25809; (kadra+1)-pensja = 2100;(kadra+2)-nr_id = 7; (kadra+2)-pensja = 1500;// wyswietlamy informacje o pracowniku - jego nr id, oraz pensjefor(i=0; i
[ Pobierz całość w formacie PDF ]
Darmowy hosting zapewnia PRV.PL