
s12-lab-book
.pdf
ООП - лабораторные работы (весна 2012), Release 0
4.3 Задания (лабораторная работа 4)
4.3.1 Матрица на динамическом массиве
Задача - реализовать класс матрицы с использованием ручного управления памятью (new[]/delete[]) и провести тестирование.
4.3.2 Реализация матричных операций (дополнительное задание)
Задача - для созданного класса матрицы реализовать матричные операции:
•умножение матрицы на число
•сложение двух матриц
•умножение двух матриц
•транспонирование матрицы
4.3. Задания (лабораторная работа 4) |
38 |

CHAPTER
FIVE
ЛАБОРАТОРНАЯ РАБОТА (ТЕСТИРОВАНИЕ РАЗНЫХ ВАРИАНТОВ РЕАЛИЗАЦИИ СТЕКА)
Теория
•понятие сложности алгоритмов
•функции работы со временем в стандартной библиотеке С++
•случайные и псевдослучайные числа, функции генерации псевдослучайных чисел в стандартной библиотеке С++
•адаптеры (шаблонные классы STL, например std::stack<>)
•умолчательные параметры шаблонов
•отладочная (debug) и продуктовая (release) версии программы
39

ООП - лабораторные работы (весна 2012), Release 0
5.1 Пример - генерирование псевдослучайной последовательности
Исходный текст (файл lab-05-00.cpp).
1#include <iostream>
2#include <cstdlib>
3#include <ctime>
4#include <cassert>
5
6using namespace std;
7
8int getRand(const int rst, const int last)
9{
10assert( rst < last);
11const int n(last - rst);
12return ( rst + rand() % (n + 1));
13}
14
15int main()
16{
17
18
srand(static_cast<unsigned int>(time(0)));
19
20
21
22
23
24
25
cout << "Let's generate (pseudo)random binary sequence:" << endl; for (int i(0); i < 40; ++i)
{
cout << getRand(0, 1);
}
cout << endl << endl;
26cout << "Let's generate (pseudo)random sequence with values from -9 to 9:\n";
27for (int i(0); i < 20; ++i)
28{
29cout << showpos << getRand(-9, 9);
30}
31cout << endl;
32
33
return 0;
34 }
Результаты работы программы (lab-05-00.exe) для нескольких запусков
Обратите внимание, что каждый раз результат различный.
5.1. Пример - генерирование псевдослучайной последовательности |
40 |

ООП - лабораторные работы (весна 2012), Release 0
5.2 Пример - измерение времени выполнения (части) программы
Исходный текст (файл lab-05-01.cpp).
1#include <iostream>
2//#include <cstdlib>
3#include <ctime>
4#include <cmath>
5
6using namespace std;
7
8int main()
9{
10cout << "Let's do something..." << endl;
11const double tBeg(static_cast<double>(clock()));
12for (int i(0); i < 5000; ++i)
13{
14for (int j(0); j < 5000; ++j)
15{
16pow(sqrt(static_cast<double>(i)), log(static_cast<double>(i + j)));
17}
18}
19const double tEnd(clock());
20double tDelta(tEnd - tBeg);
21cout << "It takes us " << (tDelta / CLOCKS_PER_SEC) << " sec" << endl;
22
23
return 0;
24 }
Результаты работы программы (lab-05-01.exe)
5.2. Пример - измерение времени выполнения (части) программы |
41 |

ООП - лабораторные работы (весна 2012), Release 0
5.3 Задания (лабораторная работа 5)
Написать программу оцеки среднего времени выполнения операций для самописных классов и различных вариантов stl стека.
Провести исследование оценки сренег времени выполнения операций для debug/release версий и разных распределений операций.
5.3. Задания (лабораторная работа 5) |
42 |

CHAPTER
SIX
ЛАБОРАТОРНАЯ РАБОТА (ЗАМЕНА СЛОВ В ТЕКСТОВЫХ ФАЙЛАХ)
Теория
•параметры командной строки и функция main
•абстрактный типа данных Строка (АТД Строка)
•C-строки
•std::string
•работа с потоками
•обработка текстовых файлов
•абстрактный типа данных Ассоциативный массив
•std::map<>
43

ООП - лабораторные работы (весна 2012), Release 0
6.1 Пример - анализ параметров командной строки
1#include <iostream>
2
3using namespace std;
4
5int main(int argc, char* argv[])
6{
7
8
9
10
11
12
cout << "Number of arguments: " << argc << endl; for (int i(0) ; i < argc; ++i)
{
cout << "arg[" << i << "]: " << argv[i] << endl;
}
13return 0;
14}
Результаты работы программы (lab-06-00.exe) Запуск без дополнительных параметров:
Запуск с дополнительными параметрами: test 0 1
Запуск с дополнительными параметрами: 0 string with spaces
6.1. Пример - анализ параметров командной строки |
44 |

ООП - лабораторные работы (весна 2012), Release 0
6.2 Пример - посимвольная обработка текстового файла
1#include <iostream>
2
3using namespace std;
4
5int main(int argc, char* argv[])
6{
7
8
9
10
11
12
cout << "Number of arguments: " << argc << endl; for (int i(0) ; i < argc; ++i)
{
cout << "arg[" << i << "]: " << argv[i] << endl;
}
13return 0;
14}
Результаты работы программы (lab-06-01.exe) Для текстового файла
6.2. Пример - посимвольная обработка текстового файла |
45 |

ООП - лабораторные работы (весна 2012), Release 0
1
2
3
4
5
6
7
8
6.3 Пример - составление частотного словаря слов
#include <iostream>
using namespace std;
int main()
{
return 0;
}
Результаты работы программы (lab-06-02.exe)
6.3. Пример - составление частотного словаря слов |
46 |

ООП - лабораторные работы (весна 2012), Release 0
6.4 Задания (лабораторная работа 6)
Задача:
1.реализовать консольное приложение для замены слов в текстовом файле
2.исходный файл, файл результата и список замен являются параметрами командной строки
3.список замен предоставляется в текстовом файле, каждая строка которого состоит из разделенных пробелом заменяемого и подставляемого слов
4.словом считается последовательность символов между двух разделителей, разделителями являются начало файла, пробелы и табуляции, знаки препинания, конец строки, конец файла
5.в случае успешной работы приложение выводит сообщение о том, сколько успешных замен оно сделало
6.4. Задания (лабораторная работа 6) |
47 |