Programowanie proceduralne
Ćwiczenie 7
Struktury, unie, pola bitowe
Łukasz Sztangret
Katedra Informatyki Stosowanej i Modelowania
Struktury
#include <iostream>
using namespace std;
int main()
{
struct osoba{
char imie[20], nazwisko[20];
int wiek;
};
osoba ktos;
cout << "Podaj imie\n";cin >> ktos.imie;
cout << "Podaj nazwisko\n";cin >> ktos.nazwisko;
cout << "Podaj wiek\n";cin >> ktos.wiek;
cout << "\nNasz ktos to "<<ktos.imie<<" "<<ktos.nazwisko;
cout <<"\ni ma "<<ktos.wiek<<" lat\n\n";
system("pause");
return 0;
}
Wskaźniki do struktur
#include <iostream>
using namespace std;
int main()
{
struct osoba{char imie[20], nazwisko[20];
int wiek;};
osoba ktos, *wsk;
wsk=&ktos;
cout << "Podaj imie\n";cin >> wsk->imie;
cout << "Podaj nazwisko\n";cin >> wsk->nazwisko;
cout << "Podaj wiek\n";cin >> wsk->wiek;
cout << "\nNasz ktos to "<<wsk->imie<<" "<<wsk->nazwisko;
cout <<"\ni ma "<<wsk->wiek<<" lat\n\n";
system("pause");
return 0;
}
Tablice struktur
#include <iostream>
using namespace std;
int main(){
struct osoba{char imie[20], nazwisko[20];
int wiek;};
osoba osoby[3];
for (int i=0; i<3; i++){
cout<<"Podaj imie "<<i+1<<" osoby\n";
cin>>osoby[i].imie;
cin>>osoby[i].imie;
cout<<"Podaj nazwisko "<<i+1<<" osoby\n";
cin>>osoby[i].nazwisko;
cout<<"Podaj wiek "<<i+1<<" osoby\n";
cin>>osoby[i].wiek;}
for (int i=0; i<3; i++){
cout<<i+1<<" osoba nazywa sie "<<osoby[i].imie<<"
"<<osoby[i].nazwisko;
cout<<"\ni ma "<<osoby[i].wiek<<" lat\n\n";}
system("pause");
return 0;}
Struktury
#include <iostream>
using namespace std;
struct osoba {
char imie[20], nazwisko[20];
int wiek;
void wyswietl();
void wprowadz();};
void wprowadz();};
void osoba::wyswietl(){
cout<<imie<<" "<<nazwisko<<" ma "<<wiek<<" lat."<<endl;}
void osoba::wprowadz(){
cout<<"Podaj imie, nazwisko i wiek"<<endl;
cin>>imie>>nazwisko>>wiek;}
int main(){
osoba ktos;
ktos.wprowadz();
ktos.wyswietl();
system("pause");
return 0;}
Zadanie
Stworzyć strukturę graniastosłup z polami: a,
b, c (długości poszczególnych krawędzi) i z
funkcjami liczącymi pole powierzchni i
objętość.
Unia
#include <iostream>
using namespace std;
int main(){
union liczba{
unsigned short int usi;
unsigned int ui;};
unsigned int ui;};
liczba licz;
licz.ui=0xffffffff;
cout << hex << licz.ui << endl;
cout << hex << licz.usi << endl;
licz.usi=0x0000;
cout << hex << licz.ui << endl;
cout << hex << licz.usi << endl;
system("pause");
return 0;}
Unia anonimowa
#include <iostream>
using namespace std;
int main(){
union{
unsigned short int usi;
unsigned int ui;};
unsigned int ui;};
ui=0xffffffff;
cout << hex << ui << endl;
cout << hex << usi << endl;
usi=0x0000;
cout << hex << ui << endl;
cout << hex << usi << endl;
system("pause");
return 0;}
Pola bitowe
#include <iostream>
using namespace std;
int main(){
struct dane{
unsigned short int
a:4,
b:8,
c:4;
};
dane odczyt;
odczyt.a=0x0;
odczyt.b=0xf0;
odczyt.c=0xf;
cout << hex << odczyt.a << odczyt.b << odczyt.c << endl;
system("pause");
return 0;}
Zastosowanie unii i pól bitowych
#include <iostream>
using namespace std;
void wypisz(int a){
for (int i=3; i>=0; i--) cout << (a>>i & 0x01);}
int main(){
struct dane{
unsigned short int
a:4,b:4,c0:1,s:4,c4:1,:2;};
union{
unsigned short int dana;
dane bity;};
cout << "Podaj slowo\n";
cin >> hex >> dana;
bity.s=bity.a+bity.b+bity.c0;
if (bity.a+bity.b+bity.c0>15) bity.c4=1;
else bity.c4=0;
cout<<"\na\t ";wypisz(bity.a);cout<<endl;
cout<<"b\t ";wypisz(bity.b);cout<<endl;
cout<<"c0\t "<<bity.c0<<endl;
cout<<"wynik\t" <<bity.c4<<" ";wypisz(bity.s);
cout<<"\n\n";
system("pause"); return 0;}