Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задание_лабы_иус_cpp_2сем.doc
Скачиваний:
16
Добавлен:
16.04.2015
Размер:
252 Кб
Скачать
☆

Int Func( int * Array, int Dim1, int Dim2, ...).

Методические указания решения задачи приведены в лекции 4 (разработка функции print_arr).

Второй вариант функции должен являться чисто формальным преобразованием

выражений с индексами в выражения с указателями (как это делает компилятор).

Необходимо ответить на вопросы, поставленные в лекции 4:

print_arr((int*)m,10,10);

или

print_arr(*m,10,10);

print_arr(m[0],10,10);

print_arr(&m[0][0],10,10);

print_arr(&**m,10,10);

Почему выполнение этих фрагментов дает одинаковый результат?

1

Вычислить сумму всех элементов главной диагонали

2

Вычислить сумму элементов заданной строки

3

Вычислить сумму элементов заданного столбца

4

Найти наибольший элемент главной диагонали

5

Найти наибольший элемент в заданной строке

6

Найти первый отрицательный элемент в заданной строке

7

Найти наибольший элемент в заданном столбце

8

Найти первый отрицательный элемент в заданном столбце

9

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

10

Переставить заданные столбцы

11

Найти количество положительных элементов главной диагонали

12

Определить количество нулевых элементов главной диагонали

13

Определить количество отрицательных элементов в заданной строке

14

Определить количество элементов, превышающих некоторое значение,

в заданном столбце

15

Определить количество положительныых элементов главной диагонали

превышающих заданное значение

16

Найти сумму абсолютных значений элементов главной диагонали

17

Найти сумму элементов заданных столбцов

18

Найти сумму элементов заданных строк

19

Найти сумму матриц

20

Найти произведение элементов главной диагонали

21

Найти произведение матрицы на число

22

Найти разность матриц

23

Найти произведение элементов заданной строки

24

Найти произведение элементов заданного столбца

25

Обнулить отрицательные элементы главной диагонали

26

Обнулить заданную строку

27

Обнулить заданный столбец

28

Найти среднее значение элементов в заданном столбце

29

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

30

Найти среднее значение элементов главной диагонали

Задание N 3

Выполнить задачу из задания 1 с вводом данных из командной строки (не с клавиатуры!).

Методические указания к решению задачи - конец 4-ой лекции.

Задание N 4

Выполнить задачу из задания 2 с использованием шаблона (template).

Методические указания к решению задачи - 12-ая лекция (параграф - шаблоны функций).

Задание № 5

При написании функций можно использовать только следующее:

- целочисленные константы;

- целочисленные аргументы функций и автоматические (локальные)переменные;

- операции ~ ! + - (тип) << >> & ^ | . Группы операций расположены в порядке убывания приоритета.

Запрещается:

- использовать такие операторы как if, do, while, for, switch и т.п. ;

- использовать макросы или какие либо функции;

- использовать другие операции такие как &&, ||, or ?: ;

- использовать типы данных кроме целочисленных;

- использовать массивы, структуры и объединения.

Примеры, иллюстрирующие стиль написания функций:

pow2plus1 - возвращает 2^x + 1, где 0 <= x <= 15 (или 31)

int pow2plus1(int x)

{

return (1 << x) + 1;

}

-------------------------------

pow2plus4 - возвращает 2^x + 4, где 0 <= x <= 15 (или 31)

int pow2plus4(int x)

{

int result = 1 << x;

result+=4;

return result;

}

-------------------------------

conditional - выполняет то же, что и операция x ? y : z

int conditional(int x, int y, int z)

{

int r1=!!x, r2;

r1=(r1<<15)>>15;

r2=~r1;

return (y&r1)|(z&r2);

}

********************************************************

№ 1

int bitAnd(int x, int y);

bitAnd – возвращает x&y

Пример: bitAnd(6, 5) = 4

Допустимые операции: ~ |

Подсказка: использовать закон Де Моргана

№ 2

int nthBit(int x, int n);

nthBit – возвращает значение n-го бита x; нумерация бит начинается с 0

Нумерация бит начинается с 0

Пример: nthBit(4, 0) = 0, nthBit(4, 2) = 1

№ 3

int SetFirstNBits(int n);

SetFirstNBits - возвращает максимальное число, задаваемое n битами

Пример: SetFirstNBits(3) = 7, SetFirstNBits(0) = 0

№ 4

int FromNtoMBits(int x, int n, int m);

fromNtoMBits - возвращает число, составленное из бит от n до m;

Нумерация бит начинается с 0

Пример: FromNtoMBits(4, 2, 4) = 1, FromNtoMBits(12, 2, 4) = 3

№5

int bitXor(int x, int y);

bitXor возвращает x^y (исключающее или)

Пример: bitXor(4, 5) = 1

Допустимые операции: ~ & |

№ 6

int MoveLeftWithAdd (int x, int y, int n);

ChangeGroupBits(int x, int y, int n1, int n2) –возвращает х, содержимое которого сдвинуто влево на n разрядов, а освободившиеся разряды заполнены старшими разрядами y.

MoveLeftWithAdd(0x1234,0x5678,8) = 3456

№ 7

int getByte(long x, int n);

getByte - возвращает n-ый байт из x

Байты нумеруются on 0 до 3

Пример: getByte(0x12345678,1) = 0x56

№ 8

int logicalShift(int x, int n) ;

logicalShift - возвращает x, сдвинутое вправо на n разрядов

Пример: logicalShift(0x87654321,4) = 0x08765432

№ 9

int MoveRightWithAdd (int x, int y, int n);

ChangeGroupBits(int x, int y, int n1, int n2) –возвращает х, содержимое которого сдвинуто вправо на n разрядов, а освободившиеся разряды заполнены старшими разрядами y.

MoveRightWithAdd(0x1234,0xABCD,8) = AB12

№10

int MoveRightWithAdd (int x, int y, int n);

ChangeGroupBits(int x, int y, int n1, int n2) –возвращает х, содержимое которого сдвинуто вправо на n разрядов, а освободившиеся разряды заполнены инвертированными младшими разрядами y.

MoveRightWithAdd(0x1234,0xABCD,8) = 3212

№11

int MoveLeftWithAdd (int x, int y, int n);

ChangeGroupBits(int x, int y, int n1, int n2) –возвращает х, содержимое которого сдвинуто влево на n разрядов, а освободившиеся разряды заполнены инвертированными старшими разрядами y.

MoveLeftWithAdd(0x1234,0x5678,8) = 34A9

№ 12

int MoveRight(int x, int n);

int MoveRight –сдвигает х вправо на n разрядов с заполнением 1 освободившихся разрядов

Пример: MoveRight(0x123,4) = 0xF012

№13

int RetGroupBits(int x, int n1, int n2);

RetGroupBits – возвращает значение, представленное заданной группой бит

Разряды нумеруются с 0

Пример: RetGroupBits(0xF75A, 2, 6) = 0x16

№ 14

int WriteGroupBits(int x, int n1, int n2, int y);

int WriteGroupBits – возвращает значение, полученное записью у в заданную группу разрядов x.

Разряды нумеруются с 0

Пример: WriteGroupBits(0xFFFF,4,7,0x6) = 0xFF6F

№ 15

int MoveRight(int x, int n, int onebit);

MoveRight - сдвигает х вправо на n разрядов с заполнением значением onebit (только 0 или 1) освободившихся разрядов

Примеры: MoveRight(0x123,4,1) = 0xF012

MoveRight(0x123,4,0) = 0x12

№ 16

int EraseGroupBits(int x, int n1, int n2);

EraseGroupBits – возвращает x с обнуленной группой разрядов с n1 по n2

Разряды нумеруются с 0

Пример: EraseGroupBits(0xFFFF,4,7) = 0xFF0F

№ 17

Write1toGroupBits(int x, int n1, int n2);

Write1toGroupBits –заполняет группу разрядов с n1 по n2 единицами

Разряды нумеруются с 0

Пример: Write1ToGroupBits(0x1111,4,7) = 0x11F1

№ 18

MovtLeft(int x, int n, int bit);

MoveLeft - сдвигает х влево на n разрядов с заполнением значением onebit (только 0 или 1) освободившихся разрядов

Примеры: MoveLeft(0x123,4,1) = 0x123F

MoveLeft(0x123,4,0) = 0x1230

№ 19

ChangeBits(int x, int y);

Есди в четных разрядах у стоит 1. то соответствующие разряда х инвертируются.

Разряды нумеруются с 0

Пример: ChangeBits(0xFFFF,0xF541) = 0xAABE

№ 20

int CicleMoveBitsLeft(int x, int n);

CicleMoveBitsLeft – осуществляет циклический сдвиг влево на n разрядов

Пример: CicleMoveBitsLeft(0xABCD,4) = 0xBCDA

№ 21

int CicleMoveBitsRight(int x, int n);

CicleMoveBitsRight – осуществляет циклический сдвиг вправо на n разрядов

Пример: CicleMoveBitsRight(0xABCD,4) = 0xDABC

№ 22

int ChangeGroupBits(int x, int y, int n1, int n2);

ChangeGroupBits(int x, int y, int n1, int n2) –возвращает х, в котором заданная группа разрядов получается исключающим или соответствующих групп х и у

Разряды нумеруются с 0

ChangeGroupBits(0xFFFF,0xFFA5,1,7) = FF5B

№ 23

int MoveGroupBits(int x, int y, int n1, int n2);

MoveGroupBits – заменяет группу разрядов х с n1 по n2 соответствующей группой разрядов из у и возвращает полученное значение

Разряды нумеруются с 0

Пример: MoveGroupBits(0xABCD,0x1234,4,7) = 0xAB3D

№ 24

unsigned char ReverseByte(unsigned char c);

ReverseByte – реверсирует биты данного типа char

Примеры: ReverseByte(0xAB) - 0x D5

ReverseByte(0x1B) - 0x D8

Примечание: вывод осуществлять с помощью printf(), например

printf("%X\n",ReverseByte(0xAB));

№ 25

int ReverseTetrads(int x);

ReverseTetrads - возвращает х с реверсированными тетрадами

Пример: ReverseTetrads(0xABCD) = DCBA

№ 26

int InversionGroupBit(int x, int n1, int n2);

InversionGroupBit - меняет значения бит на противоположные в заданной группе разрядов

Разряды нумеруются с 0

Пример: InversionGroupBit(0xABCD,4,7) = 0xAB3D

№ 27

int ChangeBits(int x, int y);

ChangeBits – возвращает значение х, в котром занулены те нечетные биты, которые в у равны 1. Четные биты не изменяются.

Разряды нумеруются с 0

Пример: ChangeBits(0x6FFF,0x00F0) = 0x6F5F

№ 28

int ChangeBits(int x, int y);

ChangeBits – возвращает значение х, в котром установлены в 1 те четные биты, которые в у равны 0. Нечетные биты не изменяются.

Разряды нумеруются с 0

Пример: ChangeBits(0x0003,0x04F9) = 5107

№ 29

int EraseExceptGroupBits(int x, int n1, int n2);

EraseExceptGroupBits -возвращает х с обнуленными разрядами, за исключением заданной группы

Разряды нумеруются с 0

Пример: EraseExceptGroupBits(0xABCD,4,7) = 0xC0

№30

int ChangeGroupBits(int x, int y, int n1, int n2);

ChangeGroupBits(int x, int y, int n1, int n2) –возвращает х, в котором заданная группа бит заменяется соответствующей инвертированной группой бит из у

Разряды нумеруются с 0

ChangeGroupBits(0xFFFF,0xFF8A,1,7) = FF75

№31

int sign(int x);

sign - возвращает 1, если х>0, 0(x==0), -1(x<0)

Пример: sign(130) = 1 ; sign(-23) = -1

№ 32

int addOK(int x, int y);

addOK - возвращает 1, если x+y не дает переполнения

Пример: addOK(0x80000000,0x80000000) = 0,

addOK(0x80000000,0x70000000) = 1,

№ 33

int bang(int x);

bang - возвращает !x без использования !

Пример: bang(3) = 0, bang(0) = 1

Задание N 6

Создать класс визуальной компоненты с необходимым набором конструкторов, деструктором, соответствующими методами и операциями.

Спроектированный интерфейс класса (набор методов, предоставляемый пользователю для работы с объектом) перед реализацией обсудить с преподавателем. Реализация, не согласованная с преподавателем, к рассмотрению приниматься не будет.

Текстовый режим.

Пример реализации в Visual Studio приведен директории CONSOLE APPLICATION.

Коды псевдографических символов:

Одинарная линия Двойная линия

Левый верхний угол 0xDA Левый верхний угол 0xС9

Правый верхний угол 0xBF Правый верхний угол 0xBB

Левый нижний угол 0xC0 Левый нижний угол 0xC8

Правый нижний угол 0xD9 Правый нижний угол 0xBC

Горизонтальная линия 0xC4 Горизонтальная линия 0xCD

Вертикальная линия 0xD3 Вертикальная линия 0xBA

******************** Пример описания класса RadioButton ********************

enum BOOL {FALSE,TRUE};

class RadioButton

{

struct BUTTON

{

int x,y;

char * Label;

};

int xLeft, yTop, xRight, yBottom;

int xTitle, yTitle;

COLORS colorBk, colorTitle, colorLabel;

int nAllBtn, nChkBtn;

BOOL lShow;

BUTTON *aButton;

char *Title;

void Refresh(void);

//******************Интерфейс***************************

public:

RadioButton(int x, int y, int nAllButton, char *Label[], char *Title);

~RadioButton(void);

void Show(void);

BOOL CheckClick(int x, int y);

int RetCheckButton(void);

};

****************************************************************************

№ 1

class Message.

Окно с сообщением (различные варианты оформления: ни pамки, ни тени, одинаpная pамка , одинаpная pамка с тенью, двойная pамка, двойная pамка с тенью).

№ 2

class Button.

Именованная кнопка с привязкой функции (различные варианты оформления: ни pамки - ни тени, одинаpная pамка , одинаpная pамка с тенью, двойная pамка, двойная pамка с тенью).

№ 3

class DialogButton.

Именованное диалоговое окно с наличием 2-ух кнопок, определяющих разветвление процесса. Кнопки имеют названия, например: Да, Нет. Названия определяются через параметры конструктора.

№ 4

class RadioButton.

Именованная визуальная компонента. Смотри преамбулу к заданию.

№ 5

class CheckListBox.

Именованная визуальная компонента

№ 6

class DateField.

Именованная визуальная компонента для ввода даты (с контролем правильности ввода). Должна быть обеспечена возможность корректировки с помощью клавиш: Left, Right, Del, BackSpace, Homt, End)/

№ 7

class FloatField.

Именованная визуальная компонента для ввода вещественного (с контролем правильности ввода). Должна быть обеспечена возможность корректировки с помощью клавиш: Left, Right, Del, BackSpace, Homt, End)/

№ 8

class TemplateField.

Именованная визуальная компонента для ввода по шаблону:

A - буквенный символ,

N - буквенный или цифровой символ,

X - любой символ,

9 - цифровой символ,

№ 9

class StringField.

Именованная визуальная компонента для ввода строки со скроллингом.

№ 10

class ChoiceBySpace.

Именованная визуальная компонента для выбора строки из массива с помощью пробела.

№ 11

class ListBox.

Именованная визуальная компонента для выбора из выпадающего списка с помощью курсора или клавиш Left, Right или Enter.

№ 12

class HorisMenu.

Горизонтальное меню с выбором с помощью клавиш Left, Right, Enter.

№ 13

class HorisMenu.

Горизонтальное меню с выбором с помощью курсора.

№ 14

class VertMenu.

Вертикальное меню с выбором с помощью клавиш Left, Right, Enter)

№ 15

class VertMenu.

Вертикальное меню с выбором с помощью курсора.

№ 16

Class Diagram.

Именованная визуальная компонента для рисования столбчатых диаграмм с возможной детализацией.

№ 17

class HorisProgressBar.

Горизонтальный прогресс бар.

№ 18

class VertProgressBar.

Вертикальный прогресс бар.

№ 19

class Play9.

Игра 9. Управление клавишами Left, Right, Up, Down.

№ 20

class HorisTrackBar.

Горизонтальный трек бар.

№ 21

class VertTrackBar.

Вертикальный трек бар.

№ 22

class HorisProgressBar.

Горизонтальный прогресс бар «бегущая волна».

№ 23

class VertProgressBar.

Вертикальный прогресс бар «бегущая волна».

№ 24

class RunString.

Визуальная компонента «бегущая строка».

№ 25

class Time.

Визуальная компонента «часы». Должна быть обеспечена возможность обновления показаний.

№ 26

class Window.

Именованная визуальная компонента окна с различными вариантами оформления: ни pамки - ни тени, одинаpная pамка , одинаpная pамка с тенью, двойная pамка, двойная pамка с тенью.

№ 27

class TextWindow.

Именованная визуальная компонента окна для вывода текста. Должен быть обеспечен корректный перенос строки (по пробелу).

№ 28

class GrapicDiagram

Именованная визуальная компонента окна для вывода графика (во весь экран, с названием, с оцифрованными осями).

№ 29

class UpDown.

Именованная визуальная компонента для ввода числового значения с помощью визуальных кнопок < , > и клавиши Enter.

№ 30

class Table

Именованная визуальная компонента для вывода таблицы.

Задание N 7

Создать следующие классы. В каждом классе должны быть наборы

конструкторов (в том числе по умолчанию и копирования), деструктор.

Пример разработки подобного класса приведен в приложении 08.

1

Класс "Товар".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать: название товара, название модели,

название фирмы-изготовителя, цена, количество, произвольное количество

характеристик (примечаний).

Должен быть написан метод(ы) корректировки.

2

Класс "Книга".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

автор, название, год издания, число страниц, тематика, произвольное количество ключевых слов.

Должен быть написан метод(ы) корректировки.

3

Класс "Поезд".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

Номер, тип поезда, время отправления, время в пути, перечень остановок (любой длины).

Должен быть написан метод(ы) корректировки.

4

Класс "Оборудование".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название подразделения, инвентарный номер, название оборудования, год производства, первоначальная стоимость, процент амортизации за год, текущая стоимость, произвольное число примечаний.

Должен быть написан метод(ы) корректировки.

5

Класс "Обменный пункт (ОП)".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название банка, номер, адрес, перечень валют с указанием курсов покупки-продажи произвольной длины.

Должен быть написан метод(ы) корректировки.

6

Класс "Студент".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

ФИО студента, номер группы, произвольное количество данных о пропусках занятий (номер недели, количество пропущенных часов, количество оправданных часов).

Должен быть написан метод(ы) корректировки.

7

Класс "Студент".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

ФИО студента, номер группы, дата рождения, адрес, перечень результатов

сдач экзаменов произвольной длины (номер семестра, название дисциплины, оценка).

Должен быть написан метод(ы) корректировки.

8

Класс "Учебная дисциплина".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название дисциплина, номер семестра, тип занятий, часы, вид контроля, список преподавателей (которые могут вести данный вид занятий) .

Должен быть написан метод(ы) корректировки.

9

Класс "Преподаватель".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

ФИО преподавателя, должность, звание, стаж, зарплата, список нагрузки (семестр, название дисциплины, тип занятий, часы).

Должен быть написан метод(ы) корректировки.

10

Класс "Мастерская".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название, район, адрес, телефон, список возможных услуг.

Должен быть написан метод(ы) корректировки.

11

Класс "Автомобиль".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

регистрационный номер, марка, год производства, ФИО шофера, дата очередного ТО, история неисправностей.

Должен быть написан метод(ы) корректировки.

12

Класс "Автомобиль".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

регистрационный номер, марка, год производства, ФИО владельца, штрафная история произвольной длины.

Должен быть написан метод(ы) корректировки (исправление сведений,

добавление штрафа, стирание штрафа).

13

Класс "Недвихимость".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

тип дома, район, адрес, количество комнат, стоимость, ФИО владельца, перечень примечаний произвольной длины.

Должен быть написан метод(ы) корректировки.

14

Класс "Футбольный матч".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название первой команды, название второй команды, дата, количество забитых мячей первой командой, количество забитых мячей второй командой,

перечень штрафов первой команды, перечень штрафов второй команды.

15

Класс "Сотрудник".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

ФИО, год рождения, название подразделения, зарплата, должностная история

произвольной длины.

Должен быть написан метод(ы) корректировки.

16

Класс "Клиент Петроэлектросбыта".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

ФИО клиента, адрес, список платежей (дата оплаты, показания счетчика, сумма).

Должен быть написан метод корректировки.

17

Класс "Детская игрушка".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название игрушки, цена, наименьший возраст, наибольший возраст, список

магазинов (район, адрес).

Должен быть написан метод(ы) корректировки.

18

Класс "Собака".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

кличка, порода, дата рождения, ФИО хозяина, список дипломов (зверь, степень диплома, когда, где).

Должен быть написан метод(ы) корректировки.

19

Класс "Рекламное объявление".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

номер рубрики (название рубрики), текст, количество необходимых публикаций,

количество сделанных публикаций, перечень дат сделанных публикаций.

Должен быть написан метод(ы) корректировки.

20

Класс "Болезнь".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название болезни, перечень возрастов (молодой, средний, пожилой), перечень

симптомов (температура, кашель, головная боль, тошнота ...).

Должен быть написан метод корректировки.

21

Класс "Блюдо".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название блюда, номер (первое, второе, третье), калорийность, перечень продуктов (мясо, лук, ...)

Должен быть написан метод корректировки.

22

Класс "Товар для доставки".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название товара, вес, количество единиц объема, дата, район, адрес, отметка о доставке.

Должен быть написан метод(ы) корректировки.

23

Класс "Сотрудник-отпуск".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

ФИО, название подразделения, должность, список отпусков (дата начала, дата окончания) произвольной длины.

Должен быть написан метод(ы) корректировки.

24

Класс "Запись в записной книжке".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название, дата, время, содержание, признак выполнения.

Должен быть написан метод(ы) корректировки.

25

Класс "Трудовая вакансия".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

профессия, квалификация, зарплата, мин. возраст, макс. возраст, адрес, телефон, перечень доп. требований произвольной длины.

Должен быть написан метод(ы) корректировки.

26

Класс "Улица".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название улицы, район, список номеров трамваев, список номеров троллейбусов, список номеров автобусов.

Должен быть написан метод(ы) корректировки.

27

Класс "Лекарство".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название лекарства, список болезней, список аптек (номер, район, улица, номер дома, телефон).

Должен быть написан метод(ы) корректировки.

28

Класс "Телефон".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

номер телефона, ФИО, адрес, список примечаний.

Должен быть написан метод(ы) корректировки.

29

Класс "Театр".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

название театра, район, адрес, список спектаклей (жанр, название, дата).

Должен быть написан метод(ы) корректировки.

30

Класс "Загородный дом".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

район, нас. пункт, тип строения, площадь дома, площадь участка, цена.

Должен быть написан метод(ы) корректировки.

31

Класс "Маршрут".

Должны быть перегружены операции: =, ==, !=, <<.

Объект данного класса должны содержать:

Тип транспортного средства, номер, интервал следования в зависимости от времени суток, перечень улиц.

Должен быть написан метод(ы) корректировки.

Задание N 8

Написать шаблоны классов на основе классов Vector или List из приложения 10.

Каждый класс должен содержать следующие методы:

- набор конструкторов (в том числе и конструктор копирования);

- деструктор.

- iterator begin(void);

- iterator end(void);

- void clear(void);

- bool empty(void);

- size_type size(void); //количество элементов

Во всех контейнерах для итераторов реализованы операции:

=, ==, !=, *, ++(префиксная и постфиксная)

Кроме того каждый класс должен содержать свой специфический набор

методов.

Рзработанный класс использовать при решении 9 задания.

1

class Vector

На основе динамического массива.

Дополнительный набор методов:

void push_back(T &value);

void pop_back(void);

T& back(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

T& operator[](int i);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

2

class List

На основе списка.

Дополнительный набор методов:

void push_back(T &value);

void push_front(T &value);

void pop_back(void);

void pop_front(void);

T& back(void);

T& front(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

3

class Deque

На основе динамического массива.

Дополнительный набор методов:

void push_back(T &value);

void push_front(T &value);

void pop_back(void);

void pop_front(void);

T& back(void);

T& front(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

T& operator[](int i);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

4

class Deque

На основе списка.

Дополнительный набор методов:

void push_back(T &value);

void push_front(T &value);

void pop_back(void);

void pop_front(void);

T& back(void);

T& front(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

5

class Stack

На основе списка.

Дополнительный набор методов:

void push(T &value);

void pop(void);

value_type& top();

void erase (iterator p);

iterator insert(iterator position, const T& value);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

6

class Stack

На основе динамического массива.

Дополнительный набор методов:

void push(T &value);

void pop(void);

value_type& top();

void erase (iterator p);

iterator insert(iterator position, const T& value);

T& operator[](int i);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

7

class Queue

На основе динамического массива.

Дополнительный набор методов:

void push_back(T &value);

void pop_front(void);

T& front(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

T& operator[](int i);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

8

class Queue

На основе списка.

Дополнительный набор методов:

void push_back(T &value);

void pop_front(void);

T& front(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

9

class Map

На основе динамического массива.

Дополнительный набор методов:

T& operator[](const Key& x);

iterator find(const Key& x);

size_type count(const Key& x);

pair<iterator, bool> insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

10

class Map

На основе списка.

Дополнительный набор методов:

T& operator[](const Key& x);

iterator find(const Key& x);

size_type count(const Key& x);

pair<iterator, bool> insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

11

class MultiMap

На основе динамического массива.

Дополнительный набор методов:

iterator find(const Key& x);

iterator lower_bound(const Key& x);

iterator upper_bound(const Key& x);

size_type count(const Key& x);

pair<iterator, bool> insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

12

class MultiMap

На основе списка.

Дополнительный набор методов:

iterator find(const Key& x);

iterator lower_bound(const Key& x);

iterator upper_bound(const Key& x);

size_type count(const Key& x);

pair<iterator, bool> insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

13

class Set

На основе списка.

Дополнительный набор методов:

iterator find(const Key& x);

size_type count(const Key& x);

iterator insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

bool operator==(контейнер& that);

bool operator!=(контейнер& that);

14

class Set

На основе динамического массива.

Дополнительный набор методов:

iterator find(const Key& x);

size_type count(const Key& x);

iterator insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

T& operator[](int i);

bool operator==(контейнер& that);

bool operator!=(контейнер& that);

15

class MultiSet

На основе динамического массива.

Дополнительный набор методов:

iterator find(const Key& x);

iterator lower_bound(const Key& x);

iterator upper_bound(const Key& x);

size_type count(const Key& x);

iterator insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

T& at(int i);

16

class MultiSet

На основе списка.

Дополнительный набор методов:

iterator find(const Key& x);

iterator lower_bound(const Key& x);

iterator upper_bound(const Key& x);

size_type count(const Key& x);

iterator insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

17

class Vector

На основе динамического массива.

Дополнительный набор методов:

void push_back(T &value);

void pop_back(void);

T& back(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

T& at(int i);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

18

class List

На основе списка.

Дополнительный набор методов:

void push_back(T &value);

void push_front(T &value);

void pop_back(void);

void pop_front(void);

T& back(void);

T& front(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

19

class Deque

На основе динамического массива.

Дополнительный набор методов:

void push_back(T &value);

void push_front(T &value);

void pop_back(void);

void pop_front(void);

T& back(void);

T& front(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

T& at(int i);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

20

class Deque

На основе списка.

Дополнительный набор методов:

void push_back(T &value);

void push_front(T &value);

void pop_back(void);

void pop_front(void);

T& back(void);

T& front(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

21

class Stack

На основе списка.

Дополнительный набор методов:

void push(T &value);

void pop(void);

value_type& top();

void erase (iterator p);

iterator insert(iterator position, const T& value);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

22

class Stack

На основе динамического массива.

Дополнительный набор методов:

void push(T &value);

void pop(void);

value_type& top();

void erase (iterator p);

iterator insert(iterator position, const T& value);

T& at(int i);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

23

class Queue

На основе динамического массива.

Дополнительный набор методов:

void push_back(T &value);

void pop_front(void);

T& front(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

T& at(int i);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

24

class Queue

На основе списка.

Дополнительный набор методов:

void push_back(T &value);

void pop_front(void);

T& front(void);

void erase (iterator p);

iterator insert(iterator position, const T& value);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

25

class Map

На основе динамического массива.

Дополнительный набор методов:

struct pair - смотри сpp14.txt

T& operator[](const Key& x);

iterator find(const Key& x);

size_type count(const Key& x);

pair<iterator, bool> insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

26

class Map

На основе списка.

Дополнительный набор методов:

struct pair - смотри сpp14.txt

T& operator[](const Key& x);

iterator find(const Key& x);

size_type count(const Key& x);

pair<iterator, bool> insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

27

class MultiMap

На основе динамического массива.

Дополнительный набор методов:

struct pair - смотри сpp14.txt

iterator find(const Key& x);

iterator lower_bound(const Key& x);

iterator upper_bound(const Key& x);

size_type count(const Key& x);

pair<iterator, bool> insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

28

class MultiMap

На основе списка.

Дополнительный набор методов:

struct pair - смотри сpp14.txt

iterator find(const Key& x);

iterator lower_bound(const Key& x);

iterator upper_bound(const Key& x);

size_type count(const Key& x);

pair<iterator, bool> insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

void swap(контейнер& that);

контейнер& operator=(контейнер& that);

29

class Set

На основе списка.

Дополнительный набор методов:

iterator find(const Key& x);

size_type count(const Key& x);

iterator insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

bool operator==(контейнер& that);

bool operator!=(контейнер& that);

30

class Set

На основе динамического массива.

Дополнительный набор методов:

iterator find(const Key& x);

size_type count(const Key& x);

iterator insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

T& operator[](int i);

T& at(int i);

bool operator==(контейнер& that);

bool operator!=(контейнер& that);

31

class MultiSet

На основе динамического массива.

Дополнительный набор методов:

iterator find(const Key& x);

iterator lower_bound(const Key& x);

iterator upper_bound(const Key& x);

size_type count(const Key& x);

iterator insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

T& at(int i);

bool operator==(контейнер& that);

32

class MultiSet

На основе списка.

Дополнительный набор методов:

iterator find(const Key& x);

iterator lower_bound(const Key& x);

iterator upper_bound(const Key& x);

size_type count(const Key& x);

iterator insert(const value_type& x);

void erase(iterator position);

size_type erase(const Key& x);

bool operator==(контейнер& that);

Задание N 9

Программа должна содержать меню. Меню, помимо дополнительных пунктов, определяемых заданием, должно содержать пункты:

- открытие базы данных (БД)

- ввод новой записи

- корректировка записи,

- стирание записи

- выход.

При открытии БД должно запрашиваться имя файла с БД (при этом должен осуществляться контроль повторного открытия БД).

При выполнении пунктов меню должна быть проверка открытия БД.

БД представляет из себя обыкновенный текстовый файл. Каждая запись этого файла состоит из фиксированного числа слов с заранее определенным смысловым значением.

БД изначально закачивается в контейнер и уже с ним в дальнейшем ведется вся работа.

В контейнере должны храниться объекты, разработанные в задании 7.

Понятие "произвольный запрос" обозначает запрос на ввод некоторого фиксированного количества ключевых значений. Если при вводе значение

некоторого ключа (ключей) пропускается, то считается, что все записи

соответствуют этому ключу (ключам).

Должен быть предусмотрен постраничный вывод данных с возможностью

отказа от дальнейшего вывода.

Методические указания в приложениях 08. 09, 10.

№ 1

БД - товары на складе магазина. Поля записей: название товара, название модели, название фрмы-изготовителя, цена, количество.

Дополнительные пункты меню:

- сводная таблица с колонками: название товара, название модели, название фирмы-изготовителя, цена, количество;

- сводная таблица для произвольного запроса; название товара, название модели, название фирмы-изготовителя;

- общая стоимость.

№ 2

БД - данные о книгах в библиотеке. Поля записей: тематика,

ключевое слово1, ключевое слово2, ключевое слово3, ключевое слово4, название книги, автор, год издания, количество страниц.

Дополнительные пункты меню:

- ввод релевантности (процент совпадения ключевых слов запроса);

- печать данных по всем книгах;

- печать данных по книгам удовлетворяющих введенному произвольному

запросу по тематике и ключевым словам..

№ 3

БД - расписание поездов. Поля записей: номер поезда,тип поезда, время отправления, время в пути, перечень остановок (любой длины).

Дополнительные пункты меню:

- все расписание;

- перечень поездов, удовлетворяющих введенному произвольному

запросу (тип, пункт назначения, период времени).

№ 4

БД - данные об основных средствах (ОС) предприятия. Поля записей:

название подразделения, инвентарный номер, название оборудования, год производства, первоначальная стоимость, процент амортизации за год, текущая стоимость, произвольное число примечаний.

Дополнительные пункты меню:

- печать ОС по данному подразделению;

- печать ОС с процентом износа больше заданного.

- начисление очередной годовой амортизации.

№ 5

БД - данные об обменных пунктах (ОП). Поля записей:

название банка, номер ОП, адрес, перечень валют с указанием курсов

покупки-продажи произвольной длины.

Дополнительные пункты меню:

- сведения по всем ОП;

- сведения об ОП по произвольному запросу (район, улица);

- адрес ОП по запросу (наивыгодный курс покупки или продажи для

выбранной валюты).

№ 6

БД - данные о пропусках занятий студентами. Поля записей:

ФИО студента, номер группы, произвольное количество данных (номер недели, количество пропущенных часов, количество оправданных часов).

Дополнительные пункты меню:

- сводная таблица по всем студентамы. Колонки таблица: группа, ФИО, кол. проп. часов, кол. оправд. часов, % часов пропущенных по неуважительным

причинам;

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

№ 7

БД - сведения о студентах. Поля записей:

ФИО студента, номер группы, дата рождения, адрес, перечень результатов сдач экзаменов (номер семестра, название дисциплины, оценка).

Дополнительные пункты меню:

- печать сводной таблицы;

- печать таблицы по произвольному запросу.

№ 8

БД - рабочий учебный план кафедры. Поля записей:

название дисциплина, номер семестра, тип занятий, часы, вид контроля, список преподавателей (которые могут внсти даннй вид занятий) .

Дополнительные пункты меню:

- печать сводного рабочего плана;

- печать рабочего плана по произвольному запросу.

№ 9

БД - информационная система "Преподаватель". Поля записей:

ФИО преподавателя, должность, звание, стаж, зарплата, список нагрузки (семестр, название дисциплины, тип занятий, часы).

Дополнительные пункты меню:

- печать сводной таблицы;

- печать таблицы по произвольному запросу.

№ 10

БД - сведения о мастерских бытовых услуг. Поля записей:

название, район, адрес, телефон, список возможных услуг.

Дополнительные пункты меню:

- печать сводной таблицы;

- печать таблицы по произвольному запросу.

№ 11

БД - сведения об автомобилях в гараже. Поля записей:

регистрационный номер, марка, год производства, ФИО шофера, дата очередного ТО, история неисправностей.

Дополнительные пункты меню:

- печать сводной таблицы;

- печать таблицы товаров по произвольному запросу.

№ 12

БД - сведения об автомобилях в ГАИ. Поля записей:

регистрационный номер, марка, год производства, ФИО владельца, штрафная история произвольной длины.

Дополнительные пункты меню:

- печать данных о всех автомобилях;

- печать сведений по автомобилям по произвольному запросу.

№ 13

БД - сведения о недвижимости. Поля записей:

тип дома, район, адрес, количество комнат, стоимость, ФИО владельца, перечень примечаний произвольной длины.

Дополнительные пункты меню:

- печать сводной таблицы;

- сведения о недвижимости, удовлетворяющей произвольному запросу

тип дома, район, количество комнат, максимальная стоимость);

- печать всех данных по максимальной стоимости квартиры.

№ 14

БД - сведения о проведенных футбольных матчах.

Поля записей:

название первой команды, название второй команды, дата, количество забитых

мячей первой командой, количество забитых мячей второй командой, перечень штрафов первой команды, перечень штрафов второй команды.

Дополнительные пункты меню:

- печать сводной таблицы;

- печать таблицы по произвольному запросу;

- общий итог игр выбранной команды.

№ 15

БД - сведения о сотрудниках. Поля записей:

ФИО, год рождения, название подразделения, зарплата, должностная история

произвольной длины.

Дополнительные пункты меню:

- распечатка данных о всех сотрудниках;

- печать данных сотрудников по произвольному запросу.

№ 16

БД - данные об оплате электроэнергии. Поля записей:

ФИО клиента, адрес, льгота, список платежей (дата оплаты, показания счетчика, сумма).

Дополнительные пункты меню:

- печать сводной таблицы;

- печать данных произвольному запросу; ФИО, адрес, дата (если дата введена, то последний платеж с меньшей или равной датой);

- все проплаты по выбранному клиенту.

№ 17

БД - данные по детским игрушкам. Поля записей:

название игрушки, цена, наименьший возраст, наибольший возраст, список магазинов (район, адрес).

Дополнительные пункты меню:

- данные по всем игрушкам;

- данные об игрушках по произвольному запросу (название игрушки,

максимальная цена, возраст).

№ 18

БД - данные о собаках. Поля записей:

кличка, порода, дата рождения, ФИО хозяина, список дипломов (зверь, степень диплома, когда).

Дополнительные пункты меню:

- данные по всем собакам;

- данные по произаольному запросу.

№ 19

БД - данные рекламной газеты. Поля записей:

номер рубрики (название рубрики), текст, количество необходимых публикаций,

количество сделанных публикаций, перечень дат сделанных публикаций.

Дополнительные пункты меню:

- печать сводной таблицы, отсортированной по рубрикам;

- печать таблицы по выбранной рубрике;

- отметка публикации (уменьшение количества публикаций на 1).

№ 20

БД - данные о болезнях. Поля записей:

название болезни, перечень возрастов (молодой, средний, пожилой), перечень

симптомов (температура, кашель, головная боль, тошнота ...).

Дополнительные пункты меню:

- печать сводной таблтцы;

- поиск таблицы по произвольному запросу;

- печать симптомов выбранной болезни.

№ 21

БД - перечень блюд повара-диэтолога. Поля записей:

название блюда, номер (первое, второе, третье), калорийность, перечень

продуктов (мясо, лук, ...)

Дополнительные пункты меню:

- печать данных о всех блюдах;

- печать данных о блюдах по произвольному запросу.

№ 22

БД - заказы на доставку товаров на дом. Поля записей:

название товара, вес, количество единиц объема, дата, район, адрес, отметка о доставке.

Дополнительные пункты меню:

- печать данных о всех заказах;

- печать данных о заказах по произвольному запросу: название товара,

дата, район;

- формирование пакета груза для лоставки (с контролем по весу

и объему).

№ 23

БД - график отпусков сотрудников. Поля записей:

ФИО, название подразделения, должность, список отпусков (дата начала - дата окончания) произвольной длины.

Дополнительные пункты меню:

- печать сводной таблицы;

- печать таблицы по призвольному запросу (ФИО, отдел, специализация,).

№ 24

БД - записная книжка. Поля базы данных:

название, дата, время, признак выполнения.

Дополнительные пункты меню:

- печать записей по произвольному запросу: дата, время, признак выполнения;

- печать всех просроченных записей.

№ 25

БД - трудовые вакансии. Поля базы данных:

профессия, квалификация, зарплата, мин. возраст, макс. возраст, адрес, телефон, перечень доп. требований произвольной длины.

Дополнительные пункты меню:

- печать всех вакансий;

- печать вакансий по произвольному запросу.

№ 26

БД - справочник улмц. Поля базы данных:

название улицы, район, список номеров трамваев, список номеров троллейбусов, список номеров автобусов.

Дополнительные пункты меню:

- распечатка сводной таблицы;

- распечатка транспорта для выбранной улицы;

- распечатка всех улиц для выбранного транспорта.

№ 27

БД - справочник лекарств. Поля базы данных:

название лекарства, список болезней, список аптек (номер, район, улица, номер дома, телефон).

Дополнительные пункты меню:

- распечатка сводной таблицы;

- распечатка таблицы для произвольного запроса.

№ 28

БД - данные о телефонах. Поля базы данных:

номер телефона, ФИО, адрес, список примечаний.

Дополнительные пункты меню:

- распечатка сводной таблицы;

- распечатка данных по ФИО;

- распечатка данных по адресу.

№ 29

БД - театральный справочник. Поля базы данных:

название театра, район, адрес, список спектаклей (жанр, название, дата).

Дополнительные пункты меню:

- распечатка сводной таблицы;

- печать сведений по произвольному запросу: театр, жанр, дата.

№ 30

БД - сведения о загородной недвижимости. Поля базы данных:

район, нас. пункт, тип строения, площадь дома, площадь участка, цена.

Дополнительные пункты меню:

- распечатка сводной таблицы;

- печать всех предложений по произвольному запросу (в запросе

указывать мин. площади и макс. цену).