admin
|
 |
« : 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
|
 |
« 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
|
 |
« 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
|
 |
« 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
|
 |
« 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
|
 |
« 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
|
|
|
|
|