- •Int fact(int n)
- •Int fact(int n)
- •Void main()
- •Void main()
- •Void main()
- •Int AkkR(int m, int n);
- •Int main()
- •Int AkkR(int m, int n)
- •Int main()
- •Int smacc(int, int);
- •Int test(char *s, char *r)
- •Void main() { Stepp(""); }
- •Int step(int X, int y)
- •If (step(X-1, y))
- •If (step(X, y-1))
- •Void main(void)
- •Void main()
- •Int rings;
- •Init(rings);
- •Void convert (int z)
- •Void f(struct man *q)
- •Int mark[4];
- •Void main()
- •Void proc(man *p)
- •Void main()
- •Void main()
- •Int telephon;
- •Void main()
- •Void fNumber(number * const doc)
- •Void main()
- •Int main()
- •Void main()
- •Void main()
- •Void main()
- •Int fgets (char *s, int m, file *f);
- •Int fputs (char *s, file *f);
- •Void main()
- •Int fread( void *ptr, int size, int n,
- •Int fwrite( void *ptr, int size, int n,
- •Int rate;
- •Void main()
- •Int fseek(file *fp, long pos, int mode);
- •Void main()
- •Int np, n, I; long p[5]; char str[80];
- •Void main()
- •Int main() {
- •Int fread (void *buf, int size, int nrec, file *fd);
- •Int fwrite (void *buf, int size, int nrec, file *fd);
- •Int main()
- •Int main()
- •Infl.Open(“a.Txt”);
- •If (!infl) … //открытие успешно
- •Int main()
- •Inout.Seekg(0);
- •Int main()
- •Void main()
- •Void main()
- •Void main(void)
- •Ifstream prm2("a.Txt") ;
- •If (prm2.Fail())
Void fNumber(number * const doc)
{ for (int i = 0; i <= 99; i++)
{ doc[i].group = i % 3 + 9;
doc[i].department = 5;
doc[i].course = 1;
}
}
Допустимы неименованные поля; они не влияют на смысл именованных полей, но с ними можно улучшить размещение. Если Имя пропущено, то соответствующее количество бит не используется (пропускается ).
struct { unsigned a1 : 4;
unsigned : 2;
unsigned a3 : 5;
unsigned a4 : 2;
} prim1;
Длина структуры всегда кратна восьми.
Поле нулевой длины обозначает выравнивание на границу следующего слова:
struct { unsigned b1 : 1;
unsigned : 0;
unsigned b3 : 5;
unsigned b4 : 2;
} prim2;
В структуре могут быть смешаны обычные переменные и поля бит
struct man
{ // 31 18 17 10 9 0
char name[20]; // ----------------------------------
unsigned dd : 10; // | yy | mm | dd |
unsigned mm: 8; // ----------------------------------
unsigned yy : 14;
char *address; // 32 22 |21 16| 15 6|5 0
int xx : 6; // ---------------------------------
int : 10; // | | zz | ... | xx |
int zz : 6; // ---------------------------------
};
. . . . . . . . . . . . .
man A;
A.dd = 12;
A.mm = 5;
A.yy = 96;
A.dd++;
A.zz = A.xx;
Пример
Битовые поля удобно использовать для решения задач, связанных с булевой логикой. Напр., представление цветов, шифрование данных, перевод чисел в двоичную систему счисления и т.п.
Хотя битовые поля сокращают требования к памяти, их использование может привести к тому, что компилятор будет генерировать машинный код, выполняющийся с низкой скоростью, т.к. придется использовать дополнительные операции машинного языка для получения доступа к отдельным частям адресуемых элементов памяти.
Пример. Ввод и печать информации о сотрудниках
# include <iostream>
using namespace std;
enum Dep // список отделов
{ Manag = 1 , Law, Des, Prog } deps;
struct Date
{ unsigned short nDay : 5; // 5 битов - 32
unsigned short nMonth : 4; // 4 бита - 16
unsigned short nYear : 11; // 11 бит - 2048
} ;
struct Sotr // структура для сотрудника
{ char Name[30]; // ФИО
int Dep; // Отдел
Date Priem; // Дата найма
};
Sotr S[50]; // массив сотрудников
char *NameDep(int n) //название отдела по номеру
{ char* dep;
switch(n)
{ case 1: dep="Менеджеры"; break;
case 2: dep="Юристы"; break;
case 3: dep="Дизайнеры"; break;
case 4: dep="Программисты"; break;
}
return dep;
}