Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи icon

Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи



НазваниеЛабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи
страница4/5
Дата конвертации10.09.2012
Размер0.53 Mb.
ТипЛабораторная работа
1   2   3   4   5
1. /C++ - лабы.docЛабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи

Лабораторная работа №8

Перегрузка операций


Постановка задачи

Перегрузить операции для контейнерного класса, разработанного в лабораторной работе №7. Варианты заданий приведены в таблице 7. Добавить в контейнерный класс операторы-функции, перегружающие операции, или заменить ими соответствующие компонентные функции класса. Добавить в класс конструктор копирования.

Таблица 7.


Варианты заданий



Перегруженная операция

Использование

1

+

*

-

=

Сложение векторов

Скалярное произведение векторов

Изменение знака элементов вектора

Присваивание вектора

2

= =

+

-

=

Проверка равенства двух матриц

Сложение двух матриц

Изменение знака элементов матрицы

Присваивание матрицы

3

+

*

-

+

=

Объединение множеств

Пересечение множеств

Удаление элемента из множества

Добавление элемента в множество

Присваивание множества

4

+

*

*

=

Сложение полиномов

Произведение полиномов

Умножение полинома на число

Присваивание полинома

5

+

!

= =

=

Добавление элемента в конец списка

Реверс всех элементов списка

Проверка равенства двух списков

Копирование списка

6

[]

=

- =

+ =

Доступ к элементу массива

Присваивание массива

Уменьшение размера массива на целое число

Увеличение размера массива на целое число

7

+

*

-

+

!=

=

Объединение множеств

Пересечение множеств

Удаление элемента из множества

Добавление элемента в множество

Проверка множеств на неравенство

Присваивание множества

8

[]

=

= =

!

Доступ к элементу массива

Присваивание массива

Проверка массивов на равенство

Удаление всех данных из массива

9

= =

+

-

--

=

Проверка равенства двух матриц

Сложение двух матриц

Разность матриц

Уменьшение всех элементов матрицы на 1

Присваивание матрицы

10

+ +

- -

&

=

Добавление элемента в очередь

Удаление элемента из очереди

Сцепление очередей

Присваивание очереди

11

-

+

=

&

Удаление элемента из начала дека

Добавление элемента в конец дек а

Копирование дека

Сцепление деков

12

+

-

&

=

Добавление элемента в очередь

Удаление элемента из очереди

Сцепление двух очередей

Копирование очереди

13

-

= =

=

+

Удаление первого элемента

Проверка равенства двух списков

Копирование списка

Добавление элемента в конец списка

14

= =

!=

*

+

=

Проверка равенства двух матриц

Проверка неравенства двух матриц

Произведение двух матриц

Сложение двух матриц

Присваивание матрицы

15

+


-


= =

=

Увеличение количества строк матрица на заданную величину

Уменьшение количества строк матрицы на заданную величину

Сравнение двух матриц на равенство

Присваивание матрицы

16

[]

=

= =

!=

Доступ к элементу массива

Присваивание массива

Проверка равенства двух массивов

Проверка неравенства двух массивов

17

+

-

-

=

Сложение векторов

Разность векторов

Изменение знаков коэффициентов

Присваивание вектора

18

+

-

&

=

Добавление элемента в стек

Удаление элемента из стека

Конкатенация двух стеков

Копирование стека

19

+

-

&

= =

=

Добавление элемента

Удаление элемента

Объединение двух очередей

Проверка очередей на равенство количеств элементов

Копирование очереди

20

[]

=

!=

= =

Доступ к элементу массива

Присваивание массива

Проверка массивов на неравенство

Проверка массивов на равенство


Методические указания

В табл. 8 приведены операции С++, которые могут быть перегружены. Операции расположены в порядке убывания приоритета

Таблица 8

Операции, которые могут быть перегружены

Приоритет операций

Операции

Арность операций

Ассоциативность операций


1

() [] ->

бинарные




2

! ~ + - ++ -- & * тип() new delete

унарные




3

->*

бинарная




4

* / %

бинарные




5

+ -

бинарные




6

<< >>

бинарные




7

< > <= >=

бинарные




8

== !=

бинарные




9

&

бинарная




10

^

бинарная




11

|

бинарная




12

&&

бинарная




13

||

бинарная




14

= *= /= %= += -= &= ^= |= <<= >>=

бинарные




15

,

бинарная





Пример реализации перегрузки операции + для сцепления двух очередей (класс queue описан в предыдущей работе) приведен на рис. 12. Для перегрузки используется функция-компонент класса. Правый операнд операции + передается в функцию по константной ссылке. Левый операнд операции – текущий объект. Результат операции – объект класса queue.


queue queue::operator + (const queue &qq1)

{

int i;

if (n+qq1.n>maxsize)

{ cout<<"Queue is full"; getch(); exit(1); }

for (i=0; i
q[n+i]=qq1.q[i];

n+=qq1.n; //увеличение текущего размера очереди

return *this; //возвращение текущей очереди

}

Рис. 12. Перегрузка операции + для сцепления очередей


Лабораторная работа №9

Шаблоны классов


Постановка задачи.

Описать шаблон контейнерного класса, разработанного в лабораторной работе №8. Протестировать шаблон для различных типов данных, хранящихся в контейнере. Варианты заданий приведены в табл.9.

Таблица 9

Варианты заданий



Типы данных контейнерных классов

1

int, float, комплексные числа

2

int, float, комплексные числа

3

int, short, char

4

int, float, short

5

int, float, структура с полями: шифр группы, средний балл

6

int, float, структура с полями: шифр группы, средний балл

7

int, структура с полями: шифр книги (уникальное значение), авторы, название

8

double, структура с полями: шифр книги, авторы, название

9

int, float, комплексные числа

10

int, float, структура с полями: возраст, температура, фио (приоритет определяется наибольшей температурой пациента)

11

int, строка, структура с полями: шифр книги, авторы, название

12

int, short, строка с максимальной длиной 20 символов

13

int, char, структура с полями: шифр книги, авторы, название

14

int, short, комплексные числа

15

int, char, строка с максимальной длиной 20 символов

16

int, float, структура с полями: шифр книги, авторы, название

17

int, short, float

18

int, строка с максимальной длиной 20 символов

19

int, float, структура с полями: шифр книги, авторы, название

20

int, строка с максимальной длиной 200 символов


Методические указания

Синтаксис объявление шаблона класса

template <список параметров шаблона>

объявление класса;

Объявление шаблона класса queue приведено на рис. 13. В шаблоне элементы очереди имеют тип t. Внутри шаблона параметр t используется в объявлениях компонентных функций.


template

class queue

{

private:

int l; //позиция последнего элемента очереди

int n; //количество элементов в очереди

t q[maxsize]; //массив для хранения элементов очереди

public:

queue(void); //конструктор

void qinsert(t x); //включение элемента х в очередь

t qdelete(void); //исключение элемента из очереди

t qget(void); //получение элемента из начала очереди

void qprint(void); //вывод очереди

queue operator+ (const queue &qq1);

};

Рис. 13. Объявление шаблона класса queue


При реализации компонентные функции и перегруженные операции шаблона класса должны быть определены как шаблоны функций. Реализация шаблона операции-функции operator+ приведена на рис. 14.


template

queue queue::operator+(const queue &qq1)

{

int i;

if (n+qq1.n>maxsize)

{

cout<<"Queue is full";

getch();

exit(1);

}

for (i=0;i
q[n+i]=qq1.q[i];

n+=qq1.n;

return *this;

}

Рис.14. Реализация операции-функции operator+ шаблона класса queue


Пример использования шаблона класса queue для очередей, содержащих элементы с данными типа int, char и student, приведен на рис. 15. Тип student является структурой вида:

struct student

{

char name[20];

int ball;

};


void main(void)

{

queue q1,q2; // очереди с элементами int

queue c1,c2; // очереди с символьными элементами

queue s1; // очередь со структурными элементами

q1.qinsert(5); //добавление элементов в очередь q1

q1.qinsert(3);

q1.qprint(); //вывод очереди q1

q2.qinsert(2); // добавление элементов в очередь q2

q2.qinsert(9);

q2.qprint(); // вывод очереди q2

q1=q1+q2; // сцепление очередей

q1.qprint();

c1.qinsert('A'); //добавление элементов в очередь c1

c1.qinsert('B');

c1.qprint(); //вывод очереди c1

c2.qinsert('C'); // добавление элементов в очередь с2

c2.qinsert('D');

c2.qprint();

c1=c1+c2;

c1.qprint();

student stud1={"Ivanov",5}; //объявление структуры

student stud2={"Petrov",3};

s1.qinsert(stud1); //добавление элемента

s1.qinsert(stud2 ); //еще добавляется элемент

s1.qprint(); //вывод очереди студентов

getch();

}

Рис. 15. Тестирующая шаблон функция main


При использовании шаблона queue для объектов нечисловых типов, например, структур или строк, необходимо перегрузить для этих типов те операции, которые применяются к параметризованному типу в функциях шаблона, но не определены для этих типов в С++. Например, для элементов очереди типа student, надо предусмотреть в программе перегрузку операции потокового вывода << (так как она используется в шаблоне в функции qprint). Перегрузка операции << для типа student, реализованная в виде внешней функции, приведена на рис. 16. Описание нестандартного типа (например, типа student), который используется как параметр шаблона, должно быть глобальным.


ostream &operator<<(ostream& ostr, student &ob)

{

ostr<
return ostr;

}

Рис. 16. Перегрузка операции << потокового вывода для структуры student


Результаты тестирования шаблона queue приведены на рис. 17.


5 3

2 9

5 3 2 9

A B C D

Ivanov 5 Petrov 3

Рис. 17. Результаты тестирования шаблона


Лабораторная работа №10

Файловый ввод – вывод в С++


Постановка задачи.

Разработать программу, выполняющую следующие функции:

  • поэкранный вывод текстового файла

  • преобразование текстового файла в двоичный файл

  • вывод двоичного файла

  • выполнение дополнительной операции с двоичным файлом

Для работы с файлами использовать библиотеку классов потокового ввода – вывода fstream.h.Текстовый файл создать с помощью любого текстового редактора, записав в каждую строку файла информацию об одном экземпляре объекта. Варианты заданий приведены в табл.11

Таблица 11

Варианты заданий



Объект

Дополнительная операция с двоичным файлом

1

ФИО, номер подразделения, зарплата

Добавление информации о работнике в конец файла

2

Табельный номер, ФИО, номер подразделения

Удаление записи о работнике с заданным табельным номером

3

Наименование товара, цена, количество

Поиск товара с заданным наименованием

4

Телефон, ФИО, адрес

Изменение информации о владельце данного телефона

5

Шифр студента, ФИО, группа

Подсчет количества студентов в заданной группе

6

Шифр студента, ФИО, средний балл

Удаление записей о студентах, со средним баллом<3

7

Табельный номер, ФИО, кафедра

Изменение кафедры у работника с заданным табельным номером

8

Наименование товара, цена, количество

Добавление информации о товаре в конец файла

9

Шифр студента, год поступления. специальность

Запись информации о студентах с заданной специальностью в новый файл

10

Шифр студента, четыре оценки

Формирование нового файла, каждая запись которого содержит шифр студента и средний балл

11

ФИО, год рождения, пол

Копирование файла в другой файл

12

Номер заказа, ФИО и телефон заказчика

Поиск номеров заказа данного заказчика

13

Шифр группы, средний балл

Поиск лучшей группы

14

Номер заказа, цена заказа, заказчик

Добавление нового заказа

15

Автор, название и год издания книги

Удаление книги с заданным названием и заданного автора

16

Номер задания, имя задания, количество страниц

Формирование нового файла, из заданий с числом страниц, большим заданного

17

Код работника, профессия, опыт работы

Изменение опыта работы у работника с заданным кодом на новое значение

18

Код детали, наименование детали

Добавление новой детали

19

Табельный номер, должность, подразделение

Подсчет работников из заданного подразделения

20

Авторы, название, специальность для учебного пособия

Копирование файла в другой файл

1   2   3   4   5




Похожие:

Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconДокументы
1. /OOP/Лабораторная работа ь00-Введение.doc
2. /OOP/Лабораторная...

Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconЛабораторная работа: создание мини-презентации «Памятники Кремля»
Лабораторная работа проводится в компьютерном классе, с подключением к сети Internet
Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconДокументы
1. /Базовые задачи на обработку массива.doc
2. /ЗадачиНаЛиниВетвление.doc
Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconДокументы
1. /Lab1/Лабораторная работа 1.doc
2. /Lab2/Лабораторная...

Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconИ я забуду Покажи мне и я запомню, Дай мне действовать самому и я научусь. Китайская мудрость Тема: Лабораторная работа
Тема: «Лабораторная работа «Измерение работы и мощности тока в электрической лампочке»
Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconДокументы
1. /C++Builder/15.doc
2. /C++Builder/Алфавитный...

Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconЦелью дипломного проекта является разработка базы данных для сотрудников Красногорского управления внутренних дел
Данная пояснительная записка состоит из четырёх основных разделов, которые в общей сложности занимает 83 печатных листов. В состав...
Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconДокументы
1. /Nash/lab1/Лабораторная работа ь1.doc
2. /Nash/lab10/Лабораторная...

Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconЛабораторная работа Цель работы: научиться создавать при помощи excel базу данных, содержащую различные сведения о работе фирмы. Задачи: Создание списков
Списком называют таблицу, обязательным атрибутом которой является строка заголовков. Требования к оформлению списка следующие
Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconЛабораторная работа №2 «Система безопасности Windows xp»
Лабораторная работа №2 «Система безопасности Windows xp» Цель работы: Изучить систему безопасности Windows xp
Лабораторная работа №1 Разработка консольного приложения в С++ Builder Постановка задачи iconЛабораторная работа Тема: «Приспособление растений к совместному существованию» Задачи: Рассмотреть примеры приспособлений растений к условиям освещённости
Растения, а в частности, деревья полностью приспособились к условиям окружающей среды и поэтому им совсем стало легко выживать в...
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов