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

lab-01

.pdf
Скачиваний:
13
Добавлен:
20.04.2015
Размер:
261.97 Кб
Скачать

ООП - лабораторные работы (весна 2012), Release 0

1.1Пример - cоздание проcтого консольного приложения c выводом в консоль

1/**

2 \ le lab-01-00.cpp

3\brief короткое приложение "Hello, world!"

4\author Полевой Дмитрий

5 \date 05.02.2012

6*/

7#include <iostream>

8

9using namespace std;

10

11int main()

12{

13

14

cout << "Hello, world!";

15return 0;

16}

Результаты работы программы (lab-01-00.exe)

1.1. Пример - cоздание проcтого консольного приложения c выводом в консоль

2

ООП - лабораторные работы (весна 2012), Release 0

1.2 Пример - печать таблицы функции

Задача - написать консольное приложение, которое печатает таблицу значений функции:

для нечетных x

f(x) = x=2

для четных x

f(x) = x ïðè x < 9

f(x) = 10 x при остальных x

1/**

2 \ le lab-01-01.cpp

3\brief печать таблицы функции

4\author Полевой Дмитрий

5 \date 01.02.2012

6*/

7#include <iostream>

8#include <iomanip>

9#include <cassert>

10

11

using namespace std;

12

13double f(const int arg)

14{

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

double funcValue(0.0); switch (arg % 2)

{

case 0:

if (arg < 9)

{

funcValue = arg;

}

else

{

funcValue = 10 - arg;

}

break; case 1:

funcValue = -arg / 2.0; break;

default: assert(0);

}

return funcValue;

35 }

36

37int main()

38{

39

40

41

42

43

44

45

46

const int N_ROW(10);

cout << setw(3) << 'x' << '|' << setw(5) << "f(x)" << endl; cout << "------------\n";

for (int iRow(0); iRow < N_ROW; ++iRow)

{

cout << setw(3) << iRow << '|' << setw(5) << f(iRow) << endl;

}

47return 0;

48}

1.2. Пример - печать таблицы функции

3

ООП - лабораторные работы (весна 2012), Release 0

Результаты работы программы (lab-01-01.exe)

1.2. Пример - печать таблицы функции

4

ООП - лабораторные работы (весна 2012), Release 0

1.3Пример - обработка последовательности (на примере использование std::vector)

Задача - написать консольное приложение, которое:

считывает с консоли последовательность целых чисел (длинна последователности от 1 до 10);

находит индекс минимального и максимального элемента в последовательности;

показывает индексы и значения минимального и максимального элементов;

показывает все элементы последовательности.

1/**

2 \ le lab-01-02.cpp

3\brief печать таблицы функции

4\author Полевой Дмитрий

5 \date 01.02.2012

6*/

7#include <iostream>

8#include <vector>

9

10

using namespace std;

11

 

12

bool get(vector<int>& data);

13

14void ndMinMaxIdx(const vector<int>& data, int& iMin, int& iMax)

15{

16

17

18

19

20

21

22

23

24

25

26

27 }

28

iMin = 0; iMax = 0;

for (size_t i(1); i < data.size(); ++i) // по всем элементам

{

if (data.at(i) < data.at(iMin))

{

iMin = i;

}

iMax = (data.at(i) > data.at(iMax)) ? i : iMax;

}

29int main()

30{

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

cout << "Please, enter number of elements (from 1 to 10) > "; int n(-1);

cin >> n;

if ((n < 1) || (10 < n))

{

cout << "Invalid size " << n << "\nTry again later\n";

}

else

{

vector<int> data(n); if (get(data))

{

int iMin(0); int iMax(0);

ndMinMaxIdx(data, iMin, iMax);

cout << "min index is " << iMin << " and value is " << data.at(iMin) << endl;

cout << "max index is " << iMax << " and value is " << data[iMax]; cout << "\nall values - ";

1.3. Пример - обработка последовательности (на примере использование std::vector)

5

ООП - лабораторные работы (весна 2012), Release 0

50for (vector<int>::iterator it(data.begin()), itEnd(data.end());

51it != itEnd; ++it)

52{

53cout << *it << ' ';

54}

55}

56}

57

58return 0;

59}

60

61bool get(vector<int>& data)

62{

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85 }

//результат работы функции - все ли значения введены правильно bool res(true);

//очередное значение последовательности

int val(0);

for (size_t i(0); ((i < data.size()) && res); ++i) // по элементам массива

{

cout << "Please enter element with index " << i << " > "; cin >> val;

if (cin.good())

//введено число

{

data.at(i) = val;

}

else

//ошибка разбора числа

{

cout << "Invalid element value, please, try again later"; res = false;

}

}

return res;

1.3.1 Тестирование решения (lab-01-02.exe)

Проверим нижнюю границу размеров и зададим заведомо неправильное значение 0.

Проверим верхнюю границу размеров и зададим заведомо неправильное значение 11.

Введем заведомо неправильный вариант значения элемента последовательности.

1.3. Пример - обработка последовательности (на примере использование std::vector)

6

ООП - лабораторные работы (весна 2012), Release 0

Введем корректные данные.

1.3. Пример - обработка последовательности (на примере использование std::vector)

7

ООП - лабораторные работы (весна 2012), Release 0

1.4 Задания (лабораторная работа 1)

1.4.1 Копирование примеров

Для каждого примера:

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

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

1.4.2Изучение и модификация программы печать таблицы функции

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

Todo

сформулирвать разумные варианты

Модифицировать программу печати функции так, чтобы выводить

1=x в диапазоне [ 1; 1] с шагом 0.1

1=x2 в диапазоне [ 1; 1] с шагом 0.1

1=sin(x) в диапазоне [ pi=2; pi=2] с шагом pi/24

1=sin2(x) в диапазоне [ pi=2; pi=2] с шагом pi/24

1=sin(x2) в диапазоне [ pi=2; pi=2] с шагом pi/24

1=cos(x) в диапазоне [ pi=2; pi=2] с шагом pi/24

1=cos2(x) в диапазоне [ pi=2; pi=2] с шагом pi/24

1=cos(x2) в диапазоне [ pi=2; pi=2] с шагом pi/24

1.4. Задания (лабораторная работа 1)

8

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