Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с++ метода3511.doc
Скачиваний:
47
Добавлен:
15.04.2015
Размер:
409.6 Кб
Скачать

Битовые поля

Битовые поля – это тип данных, позволяющий экономить память. Используется для хранения целых значений в малых объемах памяти.

Пример описания структуры:

struct B

{ int a:3; // В данном примере 3 описанных подряд битовых

int b:3; // поля будут помещены в один байт

int d:2; };

Пример работы со структурой:

#include <iostream.h>

#include <string.h>

//Описание структуры «человек»

struct man { char fam[15];//фамилия

char name[10];//имя

int vozr;//возраст

int wes;//вес

int rost;//рост

};

//Функция ввода компонентов структуры «человек»

// x- указатель на структуру «человек», n- кол-во человек

void vvod(man* x, int n)

{int i;

for(i=0;i<=n-1;i++)

{cout<<" Номер студента "<<i+1;

cout<<" Фамилия "; cin>>(x+i)->fam;

cout<<" Имя "; cin>>(x+i)->name;

cout<<" Возраст "; cin>>(x+i)->vozr;

cout<<" Рост "; cin>>(x+i)->rost;

cout<<" Вес "; cin>>(x+i)->wes;

} return ;

}

//Функция вывода компонентов структуры «человек»

// x- указатель на структуру «человек», n- кол-во человек

void vivod(man* x, int n)

{int i;

for(i=0;i<=n-1;i++)

{cout<<" Номер студента "<<i+1;

cout<<" Фамилия "<<(x+i)->fam;

cout<<" Имя "<<(x+i)->name;

cout<<" Возраст "<<(x+i)->vozr;

cout<<" Рост "<<(x+i)->rost;

cout<<" Вес "<<(x+i)->wes<<'\n';

} return ;

}

//Функция вывода компонентов структуры «человек»

// x- указатель на структуру «» человек, i- номер человека

void vivod1(man* x, int i)

{cout<<" Номер студента "<<i+1;

cout<<" Фамилия "<<(x+i)->fam;

cout<<" Имя "<<(x+i)->name;

cout<<" Возраст "<<(x+i)->vozr;

cout<<" Рост "<<(x+i)->rost;

cout<<" Вес "<<(x+i)->wes<<'\n';

return ;

}

//Функция поиска человека по заданной фамилии

// x- указатель на структуру «человек», n- кол-во человек

// st- искомая фамилия

int Findfam(man* x, int n, char* st)

{int i, flag=0;

for(i=0;i<=n-1;i++)

if(strcmp((x+i)->fam,st)==0)// если человек с такой фамилией есть,

{ flag=1; return i;} // возвращаем его номер

if (flag==0)

{cout<<"Человека с такой фамилией нет!"<<’\n’; return -1;}

}

//Функция поиска людей ростом выше заданного

// x- указатель на структуру «человек», n- кол-во человек

// trost- сравниваемый рост

void Findlong(man* x, int n, int trost)

{int i, flag=0;

for(i=0;i<=n-1;i++)

if((x+i)->rost>trost) //если есть человек ростом выше заданного,

{flag=1; vivod1(x,i); }// производим вывод этого человека

if (flag==0)

cout<<" Людей ростом выше, чем "<<trost<<" нет!"<<’\n’;

return ;

}

void main()

{int i, k, tr;

char tempfam[20];// некоторая фамилия

man* a;// указатель на массив структур

cout<<"Кол-во студентов: "<<’\n’;

cin>>i;

a=new man[i]; // выделение памяти под массив из i структур

if (a!=0)// если есть память

{vvod(a,i); vivod(a,i);//вызов функций ввода и вывода

cout<<"Введите фамилию студента, которого будем искать: "<<’\n’;

cin>>tempfam;

k=Findfam(a,i,tempfam);//номер студента с искомой фамилией

if(k!=-1) vivod1(a,k);

cout<<"Введите рост, c которым будем сравнивать студентов:"<<’\n’;

cin>>tr;

Findlong(a,i,tr);//вызов функции поиска людей по росту

delete a;//освобождение выделенной памяти

} else cout<<”Памяти нет!”;}