
- •Рязанская государственная радиотехническая академия Объектно-ориентированное программирование
- •Рязань 2003
- •390005, Рязань, ул. Гагарина, 59/1.
- •1. Программирование линейных алгоритмов Основные понятия
- •Идентификаторы
- •Объявление переменных
- •Стандартные типы данных
- •Представление констант
- •Символьные константы
- •Строковые константы
- •Ввод – вывод данных
- •Математические функции
- •Контрольные вопросы
- •Варианты заданий
- •2. Программирование алгоритмов разветвляющейся структуры Операторы управления
- •Контрольные вопросы
- •Цикл с параметром
- •Контрольные вопросы
- •Варианты заданий
- •4. Массивы. Классы памяти переменных Классы памяти переменных
- •Распределение памяти
- •Массивы
- •Инициализация
- •Указатели
- •Связь одномерных массивов с указателями
- •Связь двумерных массивов с указателями
- •Динамические массивы
- •Контрольные вопросы
- •Варианты заданий
- •5. Функции пользователя
- •Передача параметров в функции
- •Шаблоны функций
- •Контрольные вопросы
- •Варианты заданий
- •6. Структуры, объединения, битовые поля Структуры
- •Объединение
- •Битовые поля
- •Контрольные вопросы
- •Варианты заданий
- •7. Файлы
- •Типовые операции с файлами
- •Функции форматного ввода и вывода данных
- •Определение длины файла:
- •Спецификаторы доступа
- •Конструкторы и деструкторы
- •Наследование
- •Наследование и контроль доступа
- •Указатель this
- •Перегрузка операций
- •Константные объекты и константные методы
- •Статические элементы класса
- •Виртуальные функции
- •Абстрактные классы
- •9. Варианты заданий на курсовое проектирование
- •Оглавление
Битовые поля
Битовые поля – это тип данных, позволяющий экономить память. Используется для хранения целых значений в малых объемах памяти.
Пример описания структуры:
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<<”Памяти нет!”;}