Darmowe Forum
Kwiecień 16, 2025, 20:03:46 *
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 3733 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

polski-serwer-rpg mylittlepony zlotasiodemka blackmoon spw