Darmowe Forum
Grudzieñ 22, 2024, 02:55:14 *
Witamy, Go¶æ. Zaloguj siê lub zarejestruj.
Czy dotar³ do Ciebie email aktywacyjny?

Zaloguj siê podaj±c nazwê u¿ytkownika, has³o i d³ugo¶æ sesji
Aktualno¶ci: Forum zosta³o uruchomione!
 
   Strona g³ówna   Pomoc Zaloguj siê Rejestracja  
Strony: [1]
  Drukuj  
Autor W±tek: Struktury i Unie  (Przeczytany 3509 razy)
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« : Styczeñ 16, 2013, 08:48:00 »


W pojedynczej tablicy o nazwie np. Adam mo¿na zgrupowaæ tylko zmienne jednego typu. Np. tablica  char Adam [10][10] mo¿e przechowywaæ tylko zmienne znakowe. Co zrobiæ je¿eli pod jedn± nazw± chcemy przechowaæ kilka zmiennych ró¿nych typów. W Pascalu istnieje struktura która nazywa siê record i pozwala przechowywaæ ró¿ne typy zmiennych (np. imie, nazwisko, wiek, nr telefonu). W Jêzyku C i C++ odpowiednikiem pascalowskiego rekordu jest konstrukcja programistyczna nazywana struktur±.
Struktura to powi±zane ze sob± dane ró¿nych typów. Nazwê struktury deklaruje siê podobnie jak zmienn± pisz±c przed nazw± s³owo struct.
struct Adam

Ka¿da struktura mo¿e zawieraæ ró¿ne pola ale nie  jest obiektem (!) lecz jest bardziej z³o¿onym uk³adem  ni¿ pojedyncza zmienna i sk³ada siê z pól.
Poni¿ej przyk³ad deklaracji struktury o nazwie Adam sk³adaj±cej siê z pól : wiek, wzrost, nazwisko. Strukturê mo¿na wykorzystaæ do tworzenia bazy danych osób o imieniu Adam.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct Adam {int wzrost;
             int wiek;
             char nazwisko[20];};

    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #1 : Styczeñ 16, 2013, 08:50:53 »

Samo zadeklarowanie struktury, okre¶la tylko szkielet tego co ma siê w niej znale¼æ. Szkielet trzeba wype³niæ tre¶ci±. Do tego s³u¿y deklaracja zmiennych strukturalnych. Mo¿na to porównaæ do projektu samochodu, wszystkie maj± mieæ 4 ko³a, kabinê chroni±c± przed deszczem i silnik. Jaki konkretnie to bêdzie samochód zale¿y od tego jakiego rozmiaru bêd± ko³a , jak wygl±daæ bêdzie kabina  itd...
W naszym przypadku nale¿y zadeklarowaæ zmienne strukturalne które bêd± ju¿ konkretnymi wykonaniami struktury Adam. W skrypcie poni¿ej przedstawiono trzy zmienne a1,a2,a3 bêd±ce typami struktury Adam.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct Adam {int wzrost;
             int wiek;
             char nazwisko[20];};
             struct Adam a1,a2,a3;

    system("PAUSE");
    return EXIT_SUCCESS;
}
 
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #2 : Styczeñ 16, 2013, 08:53:11 »

Ka¿da ze zmiennych a1, a2 i a3 posiada takie same pola jak struktura Adam. Dlatego mo¿na do tych zmiennych wpisaæ ju¿ konkretne dane. Np. je¿eli chcemy wpisaæ do zmiennej a1 wiek, wzrost nazwisko trzeba wpisaæ:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct Adam {int wzrost;
             int wiek;
             char nazwisko[120];};
             struct Adam a1,a2,a3;
a1.wzrost=123;
a1.wiek=99;
strcpy(a1.nazwisko,"Miller");
    system("PAUSE");
    return EXIT_SUCCESS;
}
------------------------------------------------------------------------------------------------------------------

Mo¿liwe jest zadeklarowanie struktury (a4) ju¿ z gotowymi, wype³nionymi polami. Je¿eli pola maj± byæ zadeklarowane, to konieczne jest zbudowanie struktury statycznej czyli poprzedzonej s³owem static.

Wy¶wietlenie okre¶lonego pola jest mo¿liwe je¿eli do nazwy struktury po kropce umieszczona zostanie nazwa pola.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct Adam {int wzrost;
             int wiek;
             char nazwisko[120];};
             struct Adam a1,a2,a3;
static struct Adam a4={22,123," Piramodopolopirynowicz"};
a1.wzrost=123;
a1.wiek=99;
strcpy(a1.nazwisko,"Miller");
a2=a1;
cout<<a2.wiek<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Styczeñ 16, 2013, 08:56:24 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #3 : Styczeñ 16, 2013, 08:58:16 »

Wska¼nik i operator ->, polecenie strcpy();
To trudny temat, ale warto o nim popisaæ. Wska¼nik * mo¿e wskazywaæ strukturê w ca³o¶ci lub element struktury . Operator -> pozwala na odwo³anie siê do elementów struktury.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct Adam {int wzrost;
             int wiek;
             char nazwisko[120];};
             struct Adam a1,a2,a3;
static struct Adam a4={22,123," Piramodopolopirynowicz"};
struct Adam *miecio; /* *miecio to wska¼nik na strukturê*/
miecio=&a1;
miecio->wzrost=345;
cout<<a1.wzrost<<endl;
a1.wzrost=123;
a1.wiek=99;
strcpy(a1.nazwisko,"Miller");
a2=a1;
cout<<a2.wiek<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

Patrz wyt³uszczony tekst:
linia1: zadeklarowano wska¼nik struktury Adam, wska¼nik nazywa siê miecio, oznacza to tylko tyle,¿e pod nazw± miecio trzeba zarezerwowaæ tyle adresów ile jest pól w strukturze Adam.
linia2: Do wska¼nika miecio przypisywane s± adresy poszczególnych pól zmiennej strukturalnej a1.
linia3: do adresu wskazywanego przez wska¼nik miecio opisuj±cego pole wzrost wpisaæ liczbê 345.
linia4: wy¶wietliæ pole a1.wzrost
« Ostatnia zmiana: Styczeñ 16, 2013, 09:01:28 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #4 : Styczeñ 16, 2013, 10:34:34 »

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   
struct czolg{ int lufa; int masa; int szybk;};
czolg t,s;
t.lufa=5; t.masa=30; t.szybk=65;
s.lufa=7;s.masa=40; s.szybk=30;

    system("PAUSE");
    return EXIT_SUCCESS;
}

---------------------------------------------------------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct auta {char nazwa[10];int szybk; int zp;};
auta polskie[10];

for(int x=0;x<5;x++){
 cout << endl<<x+1<<" Podaj nazwê polskiego samochodu: ";cin>>polskie[ x ].nazwa; 
 cout <<endl<<" Podaj szybko¶æ "<<polskie[ x ].nazwa<< " :";cin>>polskie[ x ].szybk;
 cout <<endl<<" Podaj zuzycie paliwa "<<polskie[ x ].nazwa<< " :";cin>>polskie[ x ].zp;
};
    system("PAUSE");
    return EXIT_SUCCESS;
}

---------------------------------------------------------------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct auta {char nazwa[20];int mieszk; char rzeka[20];};
auta polskie[10];

for(int x=0;x<5;x++){
 cout<<endl<<x+1<<" Podaj nazwe miasta ";cin>>polskie[ x ].nazwa; 
 cout<<endl<<" Podaj liczbe mieszk miasta "<<polskie[ x ].nazwa<< " :";
 cin>>polskie[ x].mieszk;
 cout<<endl<<" Podaj rzeke na ktora lezy "<<polskie[ x ].nazwa<< " :";
 cin>>polskie[ x].rzeka;
};


int z=0, i=0;
for(int y=0;y<5;y++)
{if (polskie[ y].mieszk>z){z=polskie[y].mieszk; i=y;};

       
};cout<<"najwieksza liczba mieszkancow = "<<z<<"jest w : "<<polskie[ i ].nazwa<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}


---------------------------------------------------------------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;


int main(int argc, char *argv[])
{struct pracownik {char imie[20];char nazwisko[20];int pensja;};
int a;
int b[10];
pracownik ckr[100];
cout<<endl<<"Podaj imie ";cin>>ckr[0].imie;
    system("PAUSE");
    return EXIT_SUCCESS;
}
-------------------------------------------------------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct chusteczka {
        int liczba;
        float grubosc;
        char nazwa[255];};
       
        struct chusteczka polpapier[10];
    for( int i=0;i<3; i++)
    {cout<<endl<<"podaj nazwe: ";cin>> polpapier[ i ].nazwa;
cout<<endl<<"podaj grubosc chusteczki: ";cin>> polpapier[ i ].grubosc; 
 cout<<endl<<"podaj liczbe chusteczek w opakowaniu: ";cin>> polpapier[ i ].liczba;
    };   
system("cls");   
for(int i=0;i<3;i++){
cout<<endl<<polpapier[ i ].nazwa;
cout<<polpapier[ i ].grubosc<<"   ";
cout<<polpapier[ i ].liczba<<"   "<<endl;}
    system("PAUSE");
    return EXIT_SUCCESS;
}
------------------------------------------------------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct chusteczka {
        int liczba;
        float grubosc;
        char nazwa[255];};
       
        struct chusteczka polpapier[10];
    for( int i=0;i<3; i++)
    {cout<<endl<<"podaj nazwe: ";cin>> polpapier[ i ].nazwa;
cout<<endl<<"podaj grubosc chusteczki: ";cin>> polpapier[ i ].grubosc; 
 cout<<endl<<"podaj liczbe chusteczek w opakowaniu: ";cin>> polpapier[ i ].liczba;
    };   
system("cls");   
cout.width(10); cout<<" Nazwa"; cout.width(10);cout<<"Grubosc"; cout.width(10);cout<<"Liczba";cout<<endl;
for(int i=0;i<3;i++){cout.width(10);
cout<<endl<<polpapier[ i ].nazwa;cout.width(10);
cout<< polpapier[ i ].grubosc;cout.width(10);
cout<<polpapier[ i ].liczba<<endl;}
    system("PAUSE");
    return EXIT_SUCCESS;
}
--------------------------------------------------------------------------



#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{struct chusteczka {
        int liczba;
        float grubosc;
        char nazwa[255];};
        int i=0;
        struct chusteczka polpapier[10];
    do
    {cout<<endl<<"podaj nazwe: ";cin>> polpapier[ i ].nazwa;
cout<<endl<<"podaj grubosc chusteczki: ";cin>> polpapier[ i ].grubosc; 
 cout<<endl<<"podaj liczbe chusteczek w opakowaniu: ";cin>> polpapier[ i ].liczba;
    i++;} while (i<3);   
system("cls");   
cout.width(10); cout<<" Nazwa"; cout.width(10);cout<<"Grubosc";
cout.width(10);cout<<"Liczba";cout<<endl;
i=0;
do{cout.width(10);
cout<<endl<<polpapier.nazwa;cout.width(10);
cout<< polpapier[ i ].grubosc;cout.width(10);
cout<<polpapier[ i ].liczba<<endl;i++;} while(i<3);
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Luty 13, 2013, 11:32:30 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #5 : Luty 13, 2013, 10:56:59 »

Unia - krótko o strukturze przypominaj±cej typ struct.
Unia jest zmienn±, która w ró¿nych momentach mo¿e przechowywaæ w tym samym miejscu pamiêci obiekty ró¿nych typów.
Obiekty typu unia wymagaj± do zapisu tyle bajtów pamiêci ile wynosi liczba bajtów potrzebna na przechowanie najd³u¿szego elementu unii.
Deklaracja unii podobna jest do deklaracji struktury, tyle tylko, ¿e dokonuje siê jej przy pomocy s³owa kluczowego union.

Operacje dozwolone na strukturach s± dozwolone na uniach : kopiowanie i przypisywanie unii traktowanych jako ca³o¶æ, pobieranie adresu, dostêp do ich sk³adowych.

Nale¿y pamiêtaæ o tym, aby do przypisywania sk³adników unii zadeklarowaæ tak± zmienn±, która bêdzie mog³a przechowaæ najd³u¿sz± sk³adowa unii.



Sposób deklaracji i operowania uniami przedstawimy na przyk³adzie:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
union {int licz;
char slowo[25];
} to_unia;
char znak=0;
system("cls");
cout<<"Duze A  umozliwia wyjscie z petli";
while (znak!='A'){
      cout<<endl<<"Podaj cyfre: ";znak=getchar();
if (znak>47&&znak<58){to_unia.licz=znak-48;}
else {to_unia.slowo[0]=znak;
to_unia.slowo[1]='\0';}
cout<<endl<<"Pole jako cyfra/liczba:  Pole jako napis:"<<endl;
cout<<to_unia.licz<<"  "<<to_unia.slowo;
}
    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | Sitemap

Polityka cookies
Darmowe Fora | Darmowe Forum

articz spw blackmoon moikrewni polski-serwer-rpg