
Министерство образования Республики Беларусь
Учреждение образования
«Белорусский государственный университет информатики
и радиоэлектроники»
Контрольная работа по курсу
Объектно-ориентированное программирование
вариант № 16
Минск, 2011г.
Содержание
1 ЗАДАЧА 1............................................................................................................3
Условие задачи ......................................................................................3
Блок-схема алгоритма функции ..........................................................3
Текст программы ...................................................................................4
Скриншоты с результатами работы.....................................................7
2 ЗАДАЧА 2 ..........................................................................................................8
2.1 Условие задачи .....................................................................................8
2.2 Блок-схема алгоритма функции...........................................................8
2.3 Текст программы...................................................................................9
2.4 Скриншоты с результатами работы...................................................13
3 ЗАДАЧА 3..........................................................................................................14
3.1 Условие задачи ....................................................................................14
3.2 Блок-схема алгоритма функции..........................................................14
3.3 Текст программы..................................................................................16
3.4 Скриншоты с результатами работы...................................................19
4 ЗАДАЧА 4..........................................................................................................20
4.1 Условие задачи ....................................................................................20
4.2 Блок-схема алгоритма функции..........................................................20
4.3 Текст программы..................................................................................21
4.4 Скриншоты с результатами работы...................................................24
Заключение...........................................................................................................25
Список литературы
1 Задача 1
Условие задачи
Создать 2 объекта разработанного класса. Класс – динамический вектор (одномерный массив). В результате выполнения программы в первом объекте должны содержаться все четные, а во втором все нечетные числа исходных векторов. Содержимое объектов (их векторов) до и после обмена вывести на экран.
Блок-схема алгоритма функции get
Функция get возвращает элемент с индексом index из вектора.
Текст программы
#include <iostream>
using namespace std;
#define MAX_VECTOR_SIZE 1000
class MyVector {
int *_data; // указатель на начало данных вектора
unsigned int _max_size; // максимальный количество элементов вектора
unsigned int _end; // индекс на конец данных вектора
// выделение памяти под данные вектора
void init(unsigned int size) {
_max_size = size;
_data = new int[_max_size];
_end = 0;
}
public:
// конструктор по умолчанию, выделяет место под вектор на MAX_VECTOR_SIZE элементов
MyVector() {
init(MAX_VECTOR_SIZE);
}
// конструктор с параметрами, выделяет место под вектор на size элементов
MyVector(unsigned int size) {
init(size);
}
// конструктор копирования
MyVector(MyVector const & copy) {
delete _data;
init(copy.max_size());
int i;
for (i = 0; i < copy.size(); i++) {
push_to_end(copy.get(i));
}
};
// деструктор, высвобождает выделенную память
~MyVector() {
delete _data;
};
// возвращает элемент с индексом index из вектора
int get(unsigned int index) const {
if (index < _end)
return _data[index];
else {
cout << "oshibka, previshen index massiva" << endl;
return 0;
}
}
// возвращает количество элементов векторе
int size() const {
return _end;
}
// возвращает максимально возможное количество элементов
int max_size() const {
return _max_size;
}
// добавляет элемент в конец вектора
void push_to_end(int element) {
if (_end < _max_size) {
_data[_end] = element;
_end++;
}
}
// удаляет элемент с индексом из вектора
void remove(int index) {
if (index < _end) {
memmove(_data + index, _data + index + 1, (_end - index - 1) * sizeof (int));
_end--;
} else
cout << "oshibka, previshen index massiva" << endl;
}
// выводит на экран содержимое вектора
void show() const {
int index;
cout << "[ ";
for (index = 0; index < _end; index++) {
cout << _data[index];
if ((index + 1) != _end) {
cout << ", ";
}
}
cout << " ]" << endl;
}
};
int main() {
MyVector v1;
MyVector v2;
// заполняем элементами исходные вектора
v1.push_to_end(10);
v1.push_to_end(3);
v1.push_to_end(6);
v1.push_to_end(45);
v1.push_to_end(67);
v1.push_to_end(23);
v1.push_to_end(22);
v1.push_to_end(21);
v1.push_to_end(10);
v2.push_to_end(11);
v2.push_to_end(32);
v2.push_to_end(75);
v2.push_to_end(41);
v2.push_to_end(62);
v2.push_to_end(13);
v2.push_to_end(12);
v2.push_to_end(200);
v2.push_to_end(11);
v2.push_to_end(12);
cout << "ZADACHA 1" << endl;
cout << "V1 ";
v1.show();
cout << "V2 ";
v2.show();
// удаляем нечетные элементы
int index;
for (index = 0; index < v1.size();) {
if (v1.get(index) % 2 != 0) {
v1.remove(index);
} else {
index++;
}
}
cout << "V1 tolko chetnie ";
v1.show();
// удаляем четные элементы
for (index = 0; index < v2.size();) {
if (v2.get(index) % 2 == 0) {
v2.remove(index);
} else {
index++;
}
}
cout << "V2 tolko nechetnie ";
v2.show();
return 0;
}
Скриншоты с результатами работы
Скриншот на котором изображены исходные объекты, и объекты после сортировки:
Если мы превысим индекс массива, то получим такой результат: