- •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 proc(man *p)
{ cout<< p->name;
cout<< p->d<<'.'<< p->m<<'.'<< p->y;
}
Void main()
{
proc (&B);
}
Передача структур вызовом по ссылке является более эффективной, чем передача структур вызовом по значению, при которой надо копировать всю структуру.
Указатель на структуру как результат функции
Объекты типа структур можно передавать в качестве результата.
man *find(man *p, int n)
{ int i;
for(i = 0; i<n; i++)
if(p[i].name[0] =='\0')
return(&p[i]); //или return(p+i);
return(NULL);
}
(&p[i]) - результат
Вложенные структуры
Структуры могут быть вложенными, т.е. поле структуры может быть связующим полем с внутренней структурой, описание которой должно предшествовать по отношению к основной структуре:
#include <iostream>
using namespace std;
struct Date //вложенная структура
{ int day, month, year; };
struct student
{ char *name;
Date bd;
};
struct puple
{ char *name;
Date *bd;
};
Void main()
{ student *pA; int c, d;
student A = {"Петров", 1, 03, 2000};
pA = &A;
c = A.bd.day;
cout << c << endl; //c = 1
d = pA -> bd.day;
cout << d <<endl; //d = 1
puple *pB;
Date f = {2, 10, 20101};
puple B = {"Сидоров", &f};
pB = &B;
c = B.bd -> day;
cout << c << endl; //c = 2
d = pB -> bd -> day;
cout << d << endl; //d = 2
}
Cоздание псевдонима с помощью typedef
Typedef позволяет определить производный тип данных и использовать его аналогично базовым типам
Объединения
Объединение – это поименованная совокупность данных разных типов, размещаемых в одной и той же области памяти, размер которой достаточен для хранения наибольшего элемента.
Объединение подобно структуре, однако в каждый момент времени может использоваться только один из элементов объединения.
В разные отрезки времени выполнения программы некоторые объекты могут быть не нужны. Вместо того, чтобы впустую растрачивать память на объекты, которые используются не постоянно, можно поместить их в объединение, где они будут делить между собой одну и ту же область памяти.
union идентификатор_объединения
{ описание элемента 1;
………………….
описание элемента n
};
Когда исп. элемент меньшей длины, то перем. типа объединения м. содержать неиспользуемую память.
union Info
{ char name[30];
int age;
Int telephon;
} Inf ;
using namespace std;
Void main()
{ Inf.telephon = 1234567;
Inf.age = 20;
cout<<Inf.age<<endl;
cout<<Inf.telephon<<endl;
}
При использовании объекта Inf типа union можно обрабатывать только тот элемент, который получил значение, т.е. после присвоения значения элементу Information.age не имеет смысла обращаться к другим элементам.
Надо сначала присвоить им значения.
Inf.telephon = 1234567;
Допустимые операции:
операция присваивания значения одного объединения другому объединению того же типа;
операция вычисления адреса объединения (&);
доступ к элементу объединения при помощи операций . и –>
Над объединениями нельзя выполнять операции сравнения.
Свойства объединений:
размещение всех членов объединения начинается с одного и того же адреса;
в любой момент времени можно присвоить значение лишь одному члену;
не бывает статических членов;
не бывает членов, являющихся ссылками.
Типичной ошибкой является инициализация объединения при его объявлении значением или выражением, тип которого отличается от типа первого элемента объединения.
Можно вместо трех структур:
создать одну
Перечисления
Перечисление это объект, значения которого выбираются из фиксированного множества идентификаторов, называемых константами перечислимого типа.
enum Lang
{ C, Java, Ada, PHP, Basic
} mr;
Здесь определяется новый перечислимый тип Lang с пятью целыми константами, называемыми перечислителями, и присваиваются им значения.
Значения перечислителей по умолчанию начинаются с 0 в порядке возрастания, т.е. это эквивалентно записи: const C = 0; const Java = 1; const Ada = 2; и т.д.
Имя перечисления становится синонимом int, а не новым типом.
enum key{ A, B, C };
……………………
key n;
switch (n)
{ case A: …….. break;
case B: ……. break;
. . . . . . . . . . . . . . . . . . .
}
Задавать значения перечислителей можно явно:
enum Lang
{ C = 0, Java = 2,
Ada, PHP = 9
} ;
Тем константам, значения которых явно не заданы, присваивается значение предшествующей константы, увеличенное на единицу.
Т.о., константе Java соотв. значение 2, а константе Ada – знач. 3. Разным константам перечислимого типа м. соотв. одно и то же значение.
Объекты перечислимого типа, которым присвоены значения констант перечислимого типа, м. исп. в любом выражении вместо целых констант. Вместо них подставляются соответствующие им целые значения. Им м. присваивать любой класс хранения, кроме register.
Практическое назначение перечисления – определение множества различающихся символических констант целого типа.
Битовые поля
Битовые поля - это специальный тип структуры, в котором определено, из скольких бит состоит каждое поле.
Они позволяют рационально использовать память с помощью хранения данных в минимально требуемом количестве битов, позволяют работать с отдельными битами и их группами (полями) внутри переменных.
Элементы битового поля должны быть объявлены как тип int или unsigned.
Вне структур битовые поля объявлять нельзя.
Нельзя также организовывать массивы битовых полей и нельзя применять к полям операцию определения адреса &.
struct
{ unsigned идентификатор 1 : длина_поля_1;
unsigned идентификатор 2 : длина_поля_2;
}
Длина-поля задается целым выражением или константой. Эта константа определяет число битов, отведенное соответствующему полю.
Битовое поле рассматривается как целое число, максимальное значение которого определяется длиной поля.
struct number
{ unsigned group: 4; // 4 бита – числа от 0 до 15
unsigned department: 3; // 3 бита – числа от 0 до 7
unsigned course: 3; // 3 бита – числа от 0 до 7
}
Это описание включает три битовых поля типа unsigned: group, department и course, используемых для предст. номера зачетки. При объявл. битового поля вслед за unsigned или int ставится двоеточие (:) и пишется целочисл. константа, задающая ширину поля (т.е. число битов, в кот. хранится этот член структуры).
Для хранения члена group выделено 4 бита, для department – 3 бита и для course – 3 бита. Колич. битов определяется ожидаемым диапазоном значений для каждого члена структуры. Член структуры group хранит значения от 0 до 12 в области памяти размером 4 бита (4 бита, выдел. для элемента group, м. хранить значения от 0 до 15). Член структуры department м. хранить значения от 0 до 8 (факультеты). Область памяти размером 3 бита, выделенная для члена course, б. хранить значения от 0 до 4 (диапазон от 0 до 8).
Сгенерируем номера зачеток:
number Fit[90];
……………………………….