Контрольная работа по "Программированию на языке СИ++"
Министерство образования и науки
Сарапульский политехнический институт (филиал)
Государственного
Высшего профессионального образования
«Ижевский государственный технический университет»
Кафедра КИПР
КОНТРОЛЬНАЯ РАБОТА
по дисциплине: Программирование на языке СИ++
Выполнит студент группы 261ЗДУ Пастухов Р.В.
Проверил преподаватель
Сарапул 2010
Лабораторная работа №1.
Цель. Получить практические навыки реализации классов на C++.
Основное содержание работы.
Написать программу, в
которой создаются и
Порядок выполнения работы.
1.Определить пользовательский
класс в соответствии с
2.Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.
3.Определить в классе деструктор.
4.Определить в классе компоненты-функции для просмотра и установки полей данных.
5.Определить указатель на компоненту-функцию.
б.Определить указатель на экземпляр класса.
7.Написать демонстрационную
программу, в которой
8.Показать в программе
использование указателя на
Приложение 1 Файл ceh.h
#ifndef ceh_h
#define ceh_h
class ceh{//Объявление цеха
public:
ceh();//Конструктор без параметров
cehf(char *n1, char *n2, int n3);//Конструктор с параметрами
ceh(const ceh& op2);//Конструктор копирования
~ceh();
ceh& operator=(const ceh& op2);//Оператор присваивания (аналогично копированию) х=у
void show();//Функция вывода на экран
void input();//Функция ввода
private:
char name[25], nach[25];//Имя и начальник
int num;//Количество работающих
};
#endif
Файл ceh.cpp
#include "ceh.h"
#include <string>
ceh::ceh(){//Конструктор без параметров ceh x;
printf("Call constructor\n");
this->name[0] = NULL; this->nach[0] = NULL; this->num =0;
}
ceh::ceh(char *n1, char *n2, int n3){//Конструктор с параметрами ceh x(...)
strcpy(this->name, n1); strcpy(this->nach, n2); this->num = n3;
}
ceh::ceh(const ceh& op2){//Конструктор копирования
ceh x = у
strcpy(this->name, op2.name); strcpy(this->nach, op2.nach); this->num = op2.num;
}
ceh::~ceh(){//Деструктор
printf("Call destructor\n");
}
ceh& ceh::operator = (const ceh& op2){//Оператор присваивания (аналогично копированию) х = y
strcpy(this->name, op2.name); strcpy(this->nach, op2.nach); this->num = op2.num;
return *this;
}
void ceh::show(){//Вывод на экран
printf("Name: %s\nNach: %s\nNumber of workers: %i\n\n",this->name, this->nach,
this->num);
}
void ceh::input(){//3aпись данных
printf("Input name: "); scanf("%s",this->name); printf("Input nach: "); scanf("%s",this->nach);
printf("Input number: "); scanf("%i",&this->num);
}
Приложение 2 Файл.срр
#include "ceh.h"
ceh c1; //Вызов конструктора без параметров
ceh c2("Avia", "Gorbunov", 150); //Вызов конструктора с параметрами
ceh с3[3] = {ceh(“Mulitary", "Popov", 140), ceh("HQ","Ovechkin",132), ceh("System", "Himkin"., 164)};
ceh c4 = c2; //Вызов конструктора копирован
void main(){
ceh *c = new ceh[2];// Массив цех размещается в динамической памяти
c1.input();
c1.show();
c3[1].show();
с[0] = сЗ[2];с[1] = с4;
c[1].show();//Использование
void (ceh::*pf)();
pf=&ceh::show;
c3[0].*pf)();//Вызов функции
}
Лабораторная работа №2
Цель. Получить практические навыки создания иерархии классов и использования статических компонентов класса.
Основное содержание работы.
Написать программу, в которой создается иерархия классов. Включить полиморфные объекты в связанный список, используя статические компоненты класса. Показать использование виртуальных функций.
Порядок выполнения работы.
1.Определить иерархию
классов (в соответствии с
2.Определить в классе статическую компоненту - указатель на начало связанного списка объектов и статическую функцию для просмотра списка.
3.Реализовать классы.
4.Написать демонстрационную
программу, в которой
5.Сделать соответствующие методы не виртуальными и посмотреть, что будет.
6.Реализовать вариант, когда объект добавляется в список при создании, т.е. в конструкторе.
Перечень классов: квитанция, накладная, документ, чек
Приложение 1 Файл document.h
#ifndef document_h
#define document_h
class document{//Базовый класс
public:
virtual void add() = 0;//Чистая виртуальная функция добавления элемента в список
virtual void show() = 0;//Чистая виртуальная
функция просмотра элемента спи
static void print();//Статическая функция для просмотра списка
protected:
char name[25];
document *пеxt;//Указатель на
};
class kvit: virtual public document{//Производный класс квитанция
public:
kvit();// конструктор по умолчанию
kvit(char *n, int s);
kvit(const kvit& tmp); // конструктор копирования
virtual ~kvit();// виртуальный деструктор
void add();
void show();// чистая виртуальная функция
private:
int sum;//Количество мест
};
class nakl: virtual public document{//Производный класс накладная
public:
nakl();
nakl(char *n, int s);
nakl(const nakl& tmp);
virtual ~nakl();
void add();
void show();
private:
int sum;
};
class check: virtual public document{//Производный класс чек
public:
check();
check(char *n, int s);
check(const check& tmp);
virtual ~check();
void add();
void show();
private:
int sum;
};
#endif
Файл document.cpp
#include "document.h"
#include <stdio.h>
#include <string.h>
kvit::kvit(char *n, int s){
strcpy(this->name, n); this->sum = s;
}
kvit::kvit(const kvit& tmp){
strcpy(this->name, tmp.name); this->sum = tmp.sum;
}
kvit::~kvit(){
}
void kvit: :аdd(){//Добавление элемента в список
this->next - document::begin; //2 элементом в списке является текущее начало
document::begin = this; //Задаем новое начало списка
}
void kvit::show(){//Вывод на экран документа
printf("Name: %s\nSum: %i\n\n",this->name, this->sum);
}
nakl::nakl(char *n, int s){
strcpy(this->name, n); this->sum = s;
}
nakl::nakl(const nakl& tmp){
strcpy(this->name, tmp.name); this->sum = tmp.sum;
}
nakl::~nakl(){
}
void nakl::add(){
this->next = document::begin;
document::begin = this;
}
void nakl::show(){
printf("Name: %s\nSum: %i\n\n",this->name> this->sum);
}
check::check(char *n, int s){
strcpy(this->name, n); this->sum - s;
}
check::check(const checks tmp){
strcpy(this->name, tmp.name); this->sum = tmp.sum;
}
check::~check(){
}
void check::add(){
this->next = document::begin;
document::begin = this;
}
void check::show(){
printf("Name: %s\nSum: %i\n\n",this->name, this->sum);
}
Приложение 2 Файл.срр
#include "document.h"
document *document::begin = 0;//Инициализация вне класса
void document: :print(){//Просмотр списка
document *tmp = document::begin;
while(tmp){//Пока не найден
tmp->show();//Выводим на экран
tmp = tmp->next;
}
}
void main(){
check d1("IzhCom",125); nakl d2("SPI",150); kvit d3("MVD",300);
d1.add;(); d2.add(); d3.add();//Добавление в список
document::print();//Просмотр
Лабораторная работа №5
Цель. Получить практические навыки работы в среде ВС++5.02 и создания EasyWin программы. Получить практические навыки создания абстрактных типов данных и перегрузки операций в языке C++.
Основное содержание работы.
Определить и реализовать класс set - абстрактный тип данных. Определить и реализовать операции над данными этого класса. Написать и выполнить EasyWin программу полного тестирования этого класса.
Порядок выполнения работы.
1 .Выбрать класс АТД в
2.Определить и реализовать в классе конструкторы, деструктор, функции Input (ввод с клавиатуры) и Рrint (вывод на экран), перегрузить операцию присваивания.
3.Написать программу
4.Дополнить определение
5.Реализовать эти операции. Выполнить тестирование.
Приложение 1. Файл set_int.h
#include<malloc.h>
#include<stdio.h>
class set{//Множество
public:
set(){
thls->current_size=0;//
this->mas=(int*)malloc(sizeof(
}
set(int n, ...){
int *p=&n, *tmp, i;
this->max_size = 5; this->current_size=0;
//Для дальнейшего изменения
mas = (int*)malloc(sizeof(int));
tmp = (int*)malloc(sizeof(int));
//Считываем все
While(*p){
if(this->current_size){
for(i=0;i<this->current_size;
tmp[this->current_size]=(*р);/
mas=(int*)realloc(&mas[0],(
for(i=0;i<this->current_size+
} else this->mas[this->current_size++
p++;
}
free(&tmp[0]);
}
set(const set& tmp){//Копирование
this->current_size=tmp.
this->mas=(int*)realloc(&mas[
for(int i=0;i<this->current_size;i++)
this->mas[i]=tmp.mas[i];
this->max_size=tmp.max_size;
}
set& operator=(const set& tmp){//Присваивание
if(this==&tmp) return *this;
this->current_size = tmp.current_size;
this->mas=(int*)realloc(&mas[
for(int i=0;i<this->current_size;i++) this->mas[i] = tmp.mas[i];
this->max_size = tmp.max_size;
return *this;
}
set& operator*(const set& ор2){//Пересечение
set*x = new set; int *tmp;
x->mas = (int*)malloc(sizeof(int));
tmp=(int*)malloc(sizeof(int));
x->current_size=0;
x->max_size = 5;
for(int i=0;i<this->current_size;i++)
for(int j=0;j<op2.current_size;j++)
if(this->mas[i] == op2.mas[j]){
tmp = (int*)realloc(&tmp[0],(x-
>current_size+1)*sizeof(int));
>current_size+1)*sizeof(int));
for(int k=0;k<x->current_size;k++) x->mas[k]=tmp[k];
break;
free(&tmp[0]);
return *x;
}
bool operator > (const int& ор){//Принадлежность
for(int i=0;i<this->current_size;i++)
if(this->mas[i] == op) return true;
return false;
}
bool operator < (const set& tmp){//Подмножество
bool b;
for (int i=0;i<tmp.current_size;i++){
b = false;
for(int j=0;j<this->current_size;j++)
if(!b) return false;
}
return true;
}
~set(void){//Деструктор
free(&mas[0]);
}
void print(void){
printf(“Size: %i\nSet:”,this->current_size);
for(int i=0;i<this->current_size;i++) printf(“%i”,this->mas[i]);
printf(“\n”);
}
void input(void){
printf(“Enter
size of set:”); scanf(“%i”,&this->current_
mas=(int*)realloc(&mas[0],(
printf(“Enter set:”);
for(int i=0;i<this->current_size;i++) scanf(“%i”,&this->mas[i]);
}
void set_max_size(int max_size){
this->max_size = max_size;
if(this->current_size > this->max_size){
int*tmp=(int*)malloc((this->
for(int i=0;i<this->max_size;i++) tmp[i]=this->mas[i];
this->mas = (int*)realloc(&this->mas[0],(
>max_size)*sizeof (int));
}
this->current_size=this->max_
}
private:
int mах_size, current_size, *mas;
};
Приложение 2. Файл 10.срр
#include”set_int.h”
set A(1,2,3);//Конструктор с
set В(2,3,4);
set С(3,4,5);
void main(){
A.print(); B.print(); C.print();//Вывод множества на экран
(A*B*C).print();//Пересечение
}
Лабораторная работа №6
Цель. Получить практические навыки создания шаблонов и использования их в программах С++.
Основное содержание работы.
Создать шаблон заданного класса и использовать его для данных различных типов.
Порядок выполнения работы.
1.Создать шаблон заданного класса. Определить конструкторы, деструктор, перегруженную операцию присваивания (“=”) и операции, заданные в варианте задания.
2.Написать программу тестирования, в которой проверяется использование шаблона для стандартных типов данных.
3.Выполнить тестирование.
4.Определить пользовательский
класс, который будет
5.Написать программу тестирования, в которой проверяется использование шаблона для пользовательского типа.
6.Выполнить тестирование.
Приложение 1. Файл set.h
#include<inalloc.h>
#lnclude “ship.h”
template <class T> class set{
public:
set(void){//Конструктор без параметров
max_size = 5;
current = 0;
mas = (T*)malloc(sizeof(T));
}
set(int num, T n, …){//Конструктор с параметрами
T *p=&n; T *tmp; int i;
this->max_size=5; this->current = 0;
//Для дальнейшего изменения
this->mas = (T*)malloc(sizeof(T));
tmp = (T*)malloc(sizeof(T));
if(num>this->max_size) num = this->max_size;
//Считываем все
for(int i=0; i<=num;i++){
if(this- >current){
>mas[i];//Записываем во
}
free(&tmp[0]);
}
set(const set<T>& tmp){//Копирования
this->current=tmp.current;
this->mas = (T*)realloc(&mas[0],(current)*
for(int i=0;i<current;i++) this->mas[i] = tmp.mas[i];
this->max_size = tmp.max_size;
}
set& operator = (const set& tmp){//Присваивание
if(this==&tmp) return*this;
this->current = tmp.current;
this->mas = (T*)realloc(&mas[0],(current)*
for(int i=0; i<current; i++) this->mas[i] = tmp.mas[i];
this->max_size = tmp.max_size;
return *this;
}
set& operator * (const set& ор2){//Пересечение
set<T> *x = new set<T>; T *tmp;
x->mas=(T*)malloc(sizeof(T));
tmp=(T*)malloc(sizeof(T));
x->current=0;
x->max_size = 5;
for(int i=0;i<this->current; i++)
x->mas = (T*)realloc(&x->mas[0],
(x->current+1)*sizeof(T));
for(int k=0;k<x->current;k++) x->mas[k] = tmp[k];
break;
}
free(&tmp[0]);
return *x;
}
bool operator > (const T& ор){//Принадлежность
for(int i=0;i<this->current;i++)
if(this->mas[i] == op) return true;
return false;
}
bool operator < (const set& tmp){//Подмножество
bool b;
for(int i=0;i<tmp.current;i++){
b = false;
for(int j=0;j<this->current;j++)
if(this->mas[j] == tmp.mas[i]) b = true;
if(!b) return false;
}
return true;
}
~set(void){//Деструктор
free(&mas[0]);
}
void print(void){
printf("Size: %i\nSet: ",current);
for(int i=0;i<current;i++) printf("%i ",mas[i]);
prlntf("\n");
}
void input(void){
printf("Enter size of set: "); scanf("%i",¤t);
mas = (T*)realloc(&mas[0],(current)*
printf("Enter set: ");
for(int i=0;i<current;i++) scanf("%i",&mas[i]);
}
void set_max_size(int max_size){
this->max_size = max_size;
if(this->current > this->max_size){
T *tmp = (T*)malloc((this->max_size)*
for(int i=0;i<this->max_size;i++) tmp[i] = this->mas[i];
this->mas = (T*)realloc(&this->mas[0],(
for(int i=0;i<this->max_size;i++) this->mas[i] = trmp[ i ];
free(&tmp[0]);
}
this->current = this->max_size;
}
private:
T *mas;//Указатель на начало
int max_size;//Максимальный размер
int current;//Текущий размер
Приложение 2. Файл 10.срр
#include<stdio.h>
#include”set.h”
#include”ship.h”
set<int> s1(3, 1,2,3), s2(2, 2,3), s3;
set<ship> ss1(2,ship(1000, “TITANIK”, “PASSENGER”), ship(115, “St.George”, “MILITARY”));
ship ss2(1000, “TITANIK”, “PASSENGER”);
set<int> A(3, 1,2,3),B(3, 2,3,4),C(3, 3,4,5);
void main(){
(A*B*C).print();
s1.print();
s3.input();//Проверка ввода
(s1*s2).print();//Проверка
if(s1<s2) printf(“i n\n”);//Проверка подмножества
if(s1<s3) printf(“i n\n”); else printf(“out\n”);
if(s3>(int)2) printf(“in\n”); else printf(“out\n”);//Проверка вхождения
if(ss1>ss2) printf(“i n\n”); else printf(“out\n”);//
}

- Контрольная работа по "Программному обеспечению компьютерных сетей"
- Контрольная работа по «Программные средства автоматизации бухгалтерского учета»
- Контрольная работа по «Программные средства офисного назначения»
- Контрольная работа по "Программные средства офисного назначения"
- Контрольная работа по «Программным средствам офисного назначения»
- Контрольная работа по «Программометрика»
- Контрольная работа по «Продаже продовольственных товаров»
- Контрольная работа по "Программированию и компьютерам"
- Контрольная работа по "Программированию и компьютерам"
- Контрольная работа по "Программированию и компьютерам"
- Контрольная работа по "Программированию и компьютерам"
- Контрольная работа по «Программированию и компьютерам»
- Контрольная работа по "Программированию и компьютеру"
- Контрольная работа по "Программированию и компьютеру"