Darmowe Forum
Grudzieñ 22, 2024, 08:19:36 *
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 -czyli "niepe³ne" obiekty  (Przeczytany 12997 razy)
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« : 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;
}
« Ostatnia zmiana: Styczeñ 26, 2011, 08:21:47 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #1 : 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;
}
 
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #2 : 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;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #3 : 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;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #4 : 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
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #5 : 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;
}

Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #6 : 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;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #7 : 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;
}
« Ostatnia zmiana: Styczeñ 26, 2011, 10:37:21 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #8 : 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;
}
« Ostatnia zmiana: Styczeñ 26, 2011, 12:57:22 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #9 : 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;
}
« Ostatnia zmiana: Luty 02, 2011, 10:50:14 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #10 : 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
  • .nazwisko;
cout<<"Podaj imie "<<x+1<<" ucznia: ";
cin>>klasa
  • .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
  • .przedmiot1[y].ocena[z];}     
      ;break;}
case 1:{for(z=0;z<5;z++){
cout<<"Podaj "<<z+1<<" ocene z przedmiotu UTK: ";
cin>>klasa
  • .przedmiot1[y].ocena[z];};break;} 

 case 2:{for(z=0;z<5;z++){
cout<<"Podaj "<<z+1<<" ocene z przedmiotu Multimedia: ";
cin>>klasa
  • .przedmiot1[y].ocena[z];};break;} 
default: {cout<<"blad";}
   
   
   
    }}}
int min=0,os;
for (x=0;x<3;x++){int b=0;int c=0;
    for(z=0;z<5;z++){ if (klasa
  • .przedmiot1[0].ocena[z]!=0){++c;}
                     b= b+klasa
  • .przedmiot1[0].ocena[z];};b=b/c;
if (b>min){min=b;os=x;}} 
 cout<<"Osoba "<<klasa[os].imie<<" "
 <<klasa[os].nazwisko<<"ma najwyzsza srednia= "<<min;

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


Email
« Odpowiedz #11 : 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
  • .imie<<endl; 
    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

gang-nd articz zlotasiodemka mylittlepony blackmoon