Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб.практикум_2

.pdf
Скачиваний:
29
Добавлен:
27.03.2016
Размер:
699 Кб
Скачать
☆

Node *start=First; while(start->next!=NULL)

start=start->next; Node *new_Node=new Node; new_Node->n=k; new_Node->next=NULL; start->next=new_Node; count++;

};

list& list::operator++()

{

Node *start=First; while(start->next!=NULL)

start=start->next; Node *new_Node=new Node; int m=rand()/1000-10; new_Node->n=m; new_Node->next=NULL; start->next=new_Node; count++;

return *this;

};

list& list::operator +( const list &k)

{

Node *start=First,*another=k.First; while(start->next!=NULL)

start=start->next; while(another!=NULL)

{

Node *new_Node=new Node; new_Node->n=another->n; new_Node->next=NULL; start->next=new_Node; start=start->next; another=another->next; count++;

}

return *this;

};

void list::print()

{

Node *start=First; while(start!=NULL)

{

cout<<setw(6)<<start->n; start=start->next;

}

cout<<endl;

};

void list::sub()

{

Node *start=First,*the_end; for(int i=0;i<count-2;i++)

start=start->next; the_end=start->next; start->next=NULL; delete the_end; count--;

};

list::~list()

{

Node *start=First,*follow=First;

41

PDF created with pdfFactory Pro trial version www.pdffactory.com

while(start!=NULL)

{

follow=start; start=start->next; delete follow;

}

};

list &list::operator =( const list &k)

{

this->First=new Node; Node *l=k.First; this->First->n=l->n;; this->First->next=NULL; l=l->next;

Node *sled,*pred=First; while(l!=NULL)

{

sled=new Node; pred->next=sled; sled->n=l->n; sled->next=NULL; l=l->next; pred=sled;

}

this->count=k.count; return *this;

};

Текст основной программы (файл list.cpp):

#include <iostream> #include <fstream> #include <iomanip> #include <clocale> #include <conio.h> #include <string> #include <time.h> #include "list.h" using namespace std; int main()

{

setlocale(LC_CTYPE,"Russian"); srand((unsigned)time(NULL)); int number=rand()/1000-10; list a(number);

cout<<"Список a"<<endl; for(int i=0; i<10; i++)

{

number=rand()/1000-10; a.add(number);

}

a.print();

list b(number); cout<<"Список b"<<endl; for(int i=0; i<10; i++)

{

b++;

}

b.print();

a+b;

cout<<"Список a+b"<<endl; a.print();

cout<<"Количество элементов списка a=" << a.number_list()<<endl;

42

PDF created with pdfFactory Pro trial version www.pdffactory.com

list c(number);

for(int i=0; i<10; i++)

{

number=rand()/1000-10; c.add(number);

}

cout<<"Список с"<<endl; c.print();

c=a;

cout<<"Список с после присваивания"<<endl; c.print();

c++;

cout<<"Список с после ++"<<endl; c.print();

}

Результат работы программы:

Порядок выполнения работы

1.Разработать и выполнить программу в соответствии со своим вариантом задания.

2.Результаты выполнения программы занести в отчет по работе.

3.Показать результаты работы преподавателю.

Требования к отчету

Отчет должен содержать:

1)наименование лабораторной работы;

2)краткие теоретические сведения;

3)схемы алгоритмов;

4)текст программы для своего варианта задания.

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

Написать программу из блока заданий № 1 или № 2 (с использованием перегрузки операторов) в соот- ветствии с номером варианта. Номер варианта задания соответствует номеру компьютера в зале ВЦ, за ко- торым выполняется лабораторная работа.

43

PDF created with pdfFactory Pro trial version www.pdffactory.com

Блок заданий № 1

№

Задание

1Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива, получение значения элемен- та массива по его порядковому номеру, нахождение минималь- ного элемента.

2Определить класс «матрица». В класс включить два конструкто- ра: 1) создание матрицы по количеству столбцов и строк; 2) кон- структор-копию. Определить функции-члены: вывод на экран элементов матрицы, нахождение суммы положительных элемен- тов матрицы, получение значения элемента массива по его ин- дексам.

3Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки, на- хождение самого короткого слова в строке.

4Определить класс «односвязный список». В класс включить два

конструктора: 1) создание списка по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов списка, поиск максимального элемента.

5Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива, получение значения элемен- та массива по его порядковому номеру, нахождение произведе- ния элементов, значения которых по модулю меньше 5.

6 Определить класс «матрица». В класс включить два конструкто- ра: 1) создание матрицы по количеству столбцов и строк; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов матрицы, нахождение наименьшего элемента матрицы среди положительных элементов, получение значения элемента массива по его индексам.

7Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки, конкатенации двух строк.

8Определить класс «односвязный список». В класс включить два

конструктора: 1) создание списка

по количеству

элементов;

2) конструктор-копию. Определить

функции-члены:

вывод на

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

9Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива, сортировки элементов мас- сива по возрастанию.

10Определить класс «матрица». В класс включить два конструкто-

ра: 1) создание матрицы по количеству столбцов

и строк;

2) конструктор-копию. Определить функции-члены:

вывод на

экран элементов матрицы, нахождение количества элементов матрицы, попадающих в заданный интервал [k,m].

11Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки, пе- ревод символов строки в верхний регистр.

12Определить класс «односвязный список». В класс включить два конструктора: 1) создание списка по количеству элементов;

44

PDF created with pdfFactory Pro trial version www.pdffactory.com

2) конструктор-копию. Определить функции-члены: вывод на экран элементов списка, сортировки элементов списка по убы- ванию.

13Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива, поиск максимального эле- мента среди элементов, попадающих в интервал [k,m].

14Определить класс «матрица». В класс включить два конструкто-

ра: 1) создание матрицы по количеству столбцов и строк; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов матрицы, нахождение количества элементов матрицы, не отличающихся от первого элемента более чем на 6.

15Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки, пе- ревод символов строки в нижний регистр.

16Определить класс «односвязный список». В класс включить два

конструктора: 1) создание списка по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов списка, вставки нового элемента Е2 после эле- мента Е1.

17Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива, поиск количества элементов, меньших значения Р, введенного с клавиатуры.

18Определить класс «матрица». В класс включить два конструкто-

ра: 1) создание матрицы по количеству столбцов и строк; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов матрицы, нахождение среднеарифметического среди элементов главной диагонали.

19Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки, ко- личество символов, равных символу S, введенному с клавиату- ры.

20Определить класс «список». В класс включить два конструктора:

1)создание списка по количеству элементов; 2) конструктор- копию. Определить функции-члены: вывод на экран элементов списка, удаления элемента после элемента Е.

21Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива, нахождение среднеарифме- тического среди отрицательных элементов.

22Определить класс «матрица». В класс включить два конструкто-

ра: 1) создание матрицы по количеству столбцов

и строк;

2) конструктор-копию. Определить функции-члены:

вывод на

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

23Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки, на- хождение количества слов в строке.

24Определить класс «односвязный список». В класс включить два

конструктора: 1) создание списка по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов списка, нахождение порядкового номера мини- мального элемента.

25Определить класс «стек». В класс включить два конструктора:

1)создание стека (пустого); 2) конструктор-копию. Определить

45

PDF created with pdfFactory Pro trial version www.pdffactory.com

функции-члены: вывод на экран элементов стека, помещение в стек элемента и удаление элемента из стека.

Блок заданий № 2

№

Задание

1Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива, получение значения элемен- та массива по его порядковому номеру.

Перегрузить оператор:

−−нахождение минимального элемента.

2Определить класс «матрица». В класс включить два конструк- тора: 1) создание матрицы по количеству столбцов и строк;

2)конструктор-копию. Определить функции-члены: вывод на экран элементов матрицы, получение значения элемента масси- ва по его индексам.

Перегрузить оператор:

+ получение новой матрицы, каждый элемент которой равен сумме элементов двух других матриц.

3Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки.

Перегрузить оператор:

−−нахождение самого короткого слова в строке.

4Определить класс «односвязный список». В класс включить два конструктора: 1) создание списка по количеству элементов;

2)конструктор-копию. Определить функции-члены: вывод на экран элементов списка.

Перегрузить оператор:

[] поиск максимального элемента.

5Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива, получение значения элемен- та массива по его порядковому номеру.

Перегрузить оператор:

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

Определить класс «матрица». В класс включить два конструк- тора: 1) создание матрицы по количеству столбцов и строк;

2)конструктор-копию. Определить функции-члены: вывод на экран элементов матрицы, нахождение наибольшего элемента матрицы среди положительных элементов.

Перегрузить оператор:

[] получения значения элемента массива по его индексам.

6Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки.

Перегрузить оператор:

+ конкатенация двух строк .

7Определить класс «односвязный список». В класс включить два конструктора: 1) создание списка по количеству элементов;

2)конструктор-копию. Определить функции-члены: вывод на экран элементов списка.

Перегрузить оператор:

−−нахождение среднеарифметического значения отрицатель- ных элементов.

8Определить класс «одномерный массив». В класс включить два

46

PDF created with pdfFactory Pro trial version www.pdffactory.com

конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива.

Перегрузить оператор:

++ сортировка элементов массива по возрастанию.

9Определить класс «матрица». В класс включить два конструк- тора: 1) создание матрицы по количеству столбцов и строк; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов матрицы.

Перегрузить оператор:

[] нахождение количества нулевых элементов матрицы.

Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки.

Перегрузить оператор:

++ перевод символов строки в верхний регистр.

10Определить класс «односвязный список». В класс включить два конструктора: 1) создание списка по количеству элементов;

2)конструктор копию. Определить функции-члены: вывод на экран элементов списка.

Перегрузить оператор:

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

11Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива.

Перегрузить оператор:

++ поиск максимального элемента.

12Определить класс «матрица». В класс включить два конструк- тора: 1) создание матрицы по количеству столбцов и строк; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов матрицы.

Перегрузить оператор:

+ нахождение количества элементов матрицы, не отличающих- ся от первого элемента более чем на 6.

13Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки.

Перегрузить оператор:

−− перевод символов строки в нижний регистр .

14Определить класс «односвязный список». В класс включить два конструктора: 1) создание списка по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов списка.

Перегрузить оператор:

+ вставка нового элемента Е2 после элемента Е1.

Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива. Перегрузить оператор:

− поиск количества элементов, меньших значения Р, введенно- го с клавиатуры.

15Определить класс «матрица». В класс включить два конструк- тора: 1) создание матрицы по количеству столбцов и строк;

2)конструктор-копию. Определить функции-члены: вывод на экран элементов матрицы.

Перегрузить оператор:

++ нахождение среднеарифметического среди элементов глав- ной диагонали.

16Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки.

47

PDF created with pdfFactory Pro trial version www.pdffactory.com

Перегрузить оператор:

− нахождение количества символов, равных символу S, введен- ному с клавиатуры.

17Определить класс «односвязный список». В класс включить два конструктора: 1) создание списка по количеству элементов;

2)конструктор-копию. Определить функции-члены: вывод на экран элементов списка.

Перегрузить оператор:

− удаление элемента после элемента Е.

18Определить класс «одномерный массив». В класс включить два конструктора: 1) создание одномерного массива по количеству элементов; 2) конструктор-копию. Определить функции-члены: вывод на экран элементов массива.

Перегрузить оператор:

−− нахождение среднеарифметического среди отрицательных элементов.

Определить класс «матрица». В класс включить два конструк- тора: 1) создание матрицы по количеству столбцов и строк; 2) конструктор-копию. Определить функции-члены: вывод на эк- ран элементов матрицы.

Перегрузить оператор:

++ нахождение суммы положительных элементов главной диа- гонали.

19Определить класс «строка символов». В класс включить два конструктора: 1) создание строки символов; 2) конструктор- копию. Определить функции-члены: вывод на экран строки.

Перегрузить оператор:

−−нахождение количества слов в строке.

20Определить класс «односвязный список». В класс включить два конструктора: 1) создание списка по количеству элементов;

2)конструктор-копию. Определить функции-члены: вывод на экран элементов списка.

Перегрузить оператор:

−−нахождение порядкового номера минимального элемента.

21Определить класс «стек». В класс включить два конструктора:

1)создание стека (пустого); 2) конструктор-копию. Определить функции-члены: вывод на экран элементов стека.

Перегрузить операторы:

+ помещение в стек элемента,

−− удаление элемента из стека.

48

PDF created with pdfFactory Pro trial version www.pdffactory.com

Лабораторная работа № 5. Программирование на С++/CLI

Цель работы: изучение особенностей программирования на С++/CLI; получение практических навы- ков программирования в среде CLR Visual Studio 2005.

Теоретические сведения

CLI – Common Language Infrastructure – инфраструктура общего языка.

CLR – стандартизованная среда выполнения программ, написанных на VB, C#, C++.

CLI – это, по сути, спецификация среды виртуальной машины, которая позволяет приложениям, напи- санным на различных высокоуровневых языках программирования, выполняться в различных системах без изменения и перекомпиляции исходного кода.

CLI – спецификация стандарта. CLR – реализация CLI от Microsoft.

Типы данных. Соответствие стандартных типов данных С++ типам данных языка С++/CLI приведено в табл.1.

Таблица 1

Соответствие стандартных типов данных C++/CLI

C++ (стандартный)

C++/CLI

bool

System::Boolean

char

System::Sbyte

int

System::Int32

long

System::Int32

float

System::Single

double

System::Double

wchat_t

System::Char

Чтобы не использовать при описании данных System::, можно воспользоваться using namespace System; Ввод данных с клавиатуры. Для ввода данных с клавиатуры используются функции Console::Read() и Console::ReadLine(). Функция Console::Read() возвращает в качестве значения символ, считанный с клавиа-

туры, а возвращаемым значение функции Console::ReadLine() является строка символов. Примеры использования функций:

char a=Console::Read();

String^ line= Console::ReadLine(); // чтение строки символов

Вывод данных на экран. Вывод на экран можно реализовать с помощью функций Console::WriteLine или Console::Write. Первая функция после вывода данных переведет курсор на следующую строчку, а по- следняя нет.

Примеры использования функций:

Console::WriteLine(L"Текст"); // вывод с переводом курсора на новую строку Console::Write(L"Текст"); // вывод без перевода курсора на новую строку

Console::WriteLine(L"Текст {0} еще текст {1,5:F2} ",a,b); Console::WriteLine(L"Текст {0} еще текст {1:F2} ",a,b);

Символ L перед строкой, заключенной в кавычки, означает, что строка состоит из «широких» симво- лов, где каждый символ занимает 2 байта.

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

49

PDF created with pdfFactory Pro trial version www.pdffactory.com

Console::WriteLine(L"Текст {0} еще текст {1,5:F2} ",a,b); в данном операторе вместе с текстом будут выведены значения переменных a и b. Значение переменной a будет подставлено вместо {0}, а при выводе значения переменной b будет использовано форматирование. Запись {1,5:F2} означает, что значение выво- дится с десятичной точкой, причем, общее число позиций равно 5, а две позиции отводятся на цифры после десятичной точки. 0 и 1 после открывающей фигурной скобки определяют порядковый номер переменных, перечисленных после закрывающей кавычки и запятой. Нумерация начинается с нуля.

Отслеживаемые дескрипторы. Динамическое выделение памяти в CLR работает иначе, чем в кон- сольном приложении. CLR поддерживает свою собственную «кучу» памяти, которая полностью независима от «кучи» родного С++. CLR автоматически очищает память, которая была выделена и необходимость в которой отпала, что позволяет не использовать delete для освобождения памяти. Время от времени CLR упорядочивает память для избежания фрагментации. Процесс автоматического возвращения памяти в «ку- чу» и упорядочивания памяти называется сборкой «мусора».

Для выделения памяти в С++/CLI используется операция gcnew. CLR отслеживает каждую перемен- ную, ссылающуюся на участок памяти в «куче», и когда обнаруживается, что переменная уже не существу- ет, то происходит автоматическое освобождение памяти. Процесс упорядочивания памяти подразумевает изменения адресов для ранее выделенных участков памяти, поэтому указатели стандартного С++ здесь при- меняться не могут. Способ доступа к объектам в куче обеспечивается отслеживаемыми дескрипторами и отслеживаемыми ссылками (аналог ссылок родного С++).

Отлеживаемый дескриптор хранит адрес, который автоматически обновляется сборщиком «мусора». Нельзя применять арифметику адресов к дескрипторам, как это делается в родном С++ при работе с указа- телями. Кроме этого, не разрешается приведение дескрипторов. Все объекты, созданные в «куче» CLR, должны снабжаться дескрипторами. Все объекты ссылочных типов классов сохраняются в «куче» и потому созданные программистом переменные, которые ссылаются на такие объекты, должны быть дескрипторами. Например, класс String – это ссылочный тип класса, поэтому переменные, которые ссылаются на объекты String, должны быть отслеживаемыми дескрипторами.

Общий вид объявления отслеживаемых дескрипторов:

имя_класса^ имя_переменной

Например, String^ stroka;

Для установки дескриптора в ноль служит nullptr: stroka= nullptr;

Можно явно инициализировать дескриптор набором символов: String^ stroka=L''Это строка символов'';

Приведение типов. Очень часто при программировании с использованием С++/CLI применяется при- ведение типов.

Общий вид:

safe_cast тип(имя_переменной)

Ниже приведен пример использования приведения типов: double a=5.6;

double b=7.8;

 

int s=safe_cast<int>(a)+safe_cast<int>(b);

// s=5+7

Отметим, что с клавиатуры можно ввести только символ или строку символов. В случае необходимо-

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

50

PDF created with pdfFactory Pro trial version www.pdffactory.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]