Tytu³: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Styczeñ 25, 2011, 13:24:20 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 powinna zawieraæ ró¿ne pola ale nie jest obiektem (!) bardziej z³o¿onym 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; } Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Styczeñ 25, 2011, 13:33:10 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; } Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Styczeñ 25, 2011, 13:43:16 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,"Bielomuslikajewicius"); system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Styczeñ 25, 2011, 13:55:24 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,"Bielomuslikajewicius"); a2=a1; cout<<a2.wiek<<endl; system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Styczeñ 25, 2011, 14:11:37 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,"Bielomuslikajewicius"); 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 Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Styczeñ 25, 2011, 17:28:19 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("clr"); 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; } Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Styczeñ 26, 2011, 08:35:33 #include <cstdlib>
#include <iostream> using namespace std; int main(int argc, char *argv[]) {struct Adam{int wzrost; int wiek; char nazwisko[120];}; struct Ewa{ char imie[120]; char nazwisko[120]; int wymiary[3];}; system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Styczeñ 26, 2011, 09:23:23 #include <cstdlib>
#include <iostream> using namespace std; int main(int argc, char *argv[]) {struct Adam{int wzrost; int wiek; char nazwisko[120];}; struct Ewa{ char imie[120]; char nazwisko[120]; int wymiary[3];}; struct a1 {int wzrost; int wiek; char nazwisko[120];}; system("PAUSE"); return EXIT_SUCCESS; } -------------------------------------- deklaracja potomków Ewy -------------------- #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) {struct Adam{int wzrost; int wiek; char nazwisko[120];}; struct Ewa{ char imie[120]; char nazwisko[120]; int wymiary[3];}; struct Ewa adam1,adam2,adam3,magda; struct a1 {int wzrost; int wiek; char nazwisko[120];}; system("PAUSE"); return EXIT_SUCCESS; } --------------------------------- Zadanie Rysi-Zdzisio --------------------------------- #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) {struct Adam{int wzrost; int wiek; char nazwisko[120];}; struct rysio {char imie[20]; char nazwisko[20]; int pesel;}; struct rysio zdzisio; system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Styczeñ 26, 2011, 12:27:33 Zadanie 1. Napisaæ program deklaruj±cy strukturê o nazwie klasa, w której zadeklarowano pola: imie, nazwisko, ocena. Zadeklarowaæ strukturê tablicow± potomn± do struktury klasa o nazwie PSI i rozmiarze 20. Nastêpnie umie¶ciæ kod pozwalaj±cy na wpisywanie do kolejnych pól struktury, danych o uczniach klasy PSI..
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) {struct klasa{ string imie; string nazwisko; int ocena;}; struct klasa psi[20]; for(int a=0;a<20;a++){ cout<<endl<<"Nr w dzienniku."<<a+1<<" podaj imie ucznia :";cin>>psi[a].imie; cout<<endl<<" podaj nazwisko ucznia :";cin>>psi[a].nazwisko; cout<<endl<<" podaj ocene :";cin>>psi[a].ocena; } system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Luty 02, 2011, 09:19:00 Zadanie 2.
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { struct przedmiot{ string nazwa; int ocena[5];}; struct uczen { string imie; string nazwisko; struct przedmiot przedmiot1; }; struct uczen psi[20]; cout<<psi[1].przedmiot1.ocena[1]; system("PAUSE"); return EXIT_SUCCESS; } --------------------------------- ver.2---------------------------------------------------- #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { struct przedmiot{ string nazwa; int ocena[5];}; struct uczen {string imie; string nazwisko; string przedmiot; struct przedmiot przedmiot1[3]; }; int a,y,z; struct uczen klasa[20]; for (a=0; a<3;a++){ cout<<"Podaj nazwisko "<<a+1<<" ucznia: "; cin>>klasa[a].nazwisko; cout<<"Podaj imie "<<a+1<<" ucznia: "; cin>>klasa[a].imie; for (y=0; y<3;y++){ switch (y) {case 0:{ for(z=0;z<5;z++){ cout<<"Podaj "<<z+1<<" ocene z przedmiotu PSiO: "; cin>>klasa[a].przedmiot1[y].ocena[z];} ;break;} case 1:{for(z=0;z<5;z++){ cout<<"Podaj "<<z+1<<" ocene z przedmiotu UTK: "; cin>>klasa[a].przedmiot1[y].ocena[z];};break;} case 2:{for(z=0;z<5;z++){ cout<<"Podaj "<<z+1<<" ocene z przedmiotu Multimedia: "; cin>>klasa[a].przedmiot1[y].ocena[z];};break;} default: {cout<<"blad";} }}} cin>>klasa[0].przedmiot1[0].nazwa; cin>>klasa[0].przedmiot1[0].ocena[0]; system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Luty 02, 2011, 13:24:02 #include <cstdlib>
#include <iostream> using namespace std; struct przedmiot{ string nazwa; int ocena[5];}; struct uczen {string imie; string nazwisko; string przedmiot; struct przedmiot przedmiot1[3]; }; int x,y,z; struct uczen klasa[20]; void ame(uczen x[20]){}; int main(int argc, char *argv[]) { for (x=0; x<3;x++){ cout<<"Podaj nazwisko "<<x+1<<" ucznia: "; cin>>klasa
cin>>klasa
switch (y) {case 0:{ for(z=0;z<5;z++){ cout<<"Podaj "<<z+1<<" ocene z przedmiotu PSiO: "; cin>>klasa
case 1:{for(z=0;z<5;z++){ cout<<"Podaj "<<z+1<<" ocene z przedmiotu UTK: "; cin>>klasa
case 2:{for(z=0;z<5;z++){ cout<<"Podaj "<<z+1<<" ocene z przedmiotu Multimedia: "; cin>>klasa
}}} int min=0,os; for (x=0;x<3;x++){int b=0;int c=0; for(z=0;z<5;z++){ if (klasa
cout<<"Osoba "<<klasa[os].imie<<" " <<klasa[os].nazwisko<<"ma najwyzsza srednia= "<<min; system("PAUSE"); return EXIT_SUCCESS; } Tytu³: Odp: Struktury -czyli "niepe³ne" obiekty Wiadomo¶æ wys³ana przez: admin Luty 21, 2013, 13:10:49 #include <cstdlib>
#include <iostream> using namespace std; int main(int argc, char *argv[]) {struct szkola { char imie[255]; char nazwisko [255]; float wiek; }; struct szkola psi2[16]; for (int i=0; i<3;i++) {cout<<endl<<"podaj imie: ";cin>>psi2.imie; cout<<endl<<"podaj nazwisko ";cin>>psi2.nazwisko; cout<<endl<<"podaj wiek: ";cin>>psi2.wiek; } int x; for( int i=0; i<2;i++) { if(psi2.wiek>psi2[i+1].wiek){x= i;} else {x=i+1;};}; cout<<endl<<"najstarszym uczniem jest: "<< psi2
return EXIT_SUCCESS; } |