Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MUProgramm_C++.doc
Скачиваний:
50
Добавлен:
21.03.2015
Размер:
604.16 Кб
Скачать

Лабораторная работа № 8. Алгоритмизация задач обработки динамических массивов

1. Цель работы

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

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

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

    2. Изучить построение и параметризацию шаблонов функций.

    3. Изучить работу операторов new и delete, операции над указателями. Изучить синтаксис описания шаблона функции (template).

    4. Изучить пример выполнения задания. Обратите внимание на описание шаблонов функций и их параметризацию в точках вызова фактическими типами. Обратите внимание на тип формального параметра в шаблоне функции creat (модуль func.h).

    5. Разработать алгоритм решения индивидуального задания, удовлетворяющий требованиям из пунктов 2.6, используя метод пошаговой детализации.

    6. Требования к алгоритму. Алгоритм должен соответствовать требованиям структурного подхода. Необходимо организовать интерфейс ввода – вывода всех требуемых данных, организовать проверку входных данных на допустимые значения. Считать максимальное количество элементов массива неизвестным, организовать массив в динамической памяти. Предусмотреть решение задачи для разных типов элементов массива (int, float, пользовательский тип и т.п.). Алгоритм решения задачи разбить на функциональные блоки – функций. Определить функции, отличающиеся только типами формальных параметров, разработать шаблоны для этих функций с последующей параметризацией фактическими типами.

    7. Разработать программу на языке С++ для алгоритма п. 2.5, используя модульный подход (см. п. 2.8 лаб. раб. № 6).

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

    9. Выполнить тестирование программы несколькими наборами входных данных.

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

3. Пример выполнения задания

Даны действительные числа a, b, c, d,n. Если abcd…≤ n, то каждое число заменить наибольшим из них; если a > b > c > d >…> n, то оставить без изменений; в противном случае все числа заменяются их квадратами.

3.1 Текст программы на С++ (часть).

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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

//модуль func.h (представлена только часть шаблонов)

// шаблоны функций для работы с динамическим массивом

#pragma once

//создание массива в динамической памяти

template <typename T>

void CreateMas(int n, T * &mas)

{ mas = new T[n];

}//-------------------------------------------------------------------------------------------------

//инициализация динамического массива псевдослучайными числами

template <typename T>

void GenMas(int n, T * mas)

{ for(int i = 0; i < n; i++)

*(mas+i) = ((T)rand()/RAND_MAX+rand()%50-rand()%30);

}//-------------------------------------------------------------------------------------------------

//определение является ли массив упорядоченным по убыванию

template <class T>

bool IsToSmall(int n, T * mas)

{ bool flag = true;

for(int i = 0; i < n-1; i++)

if (mas[i] <= mas[i+1]) ;

else

{ flag = false; break;

}

return flag;

}//-------------------------------------------------------------------------------------------------

//присвоение всем элементам массива значения последнего элемента массива

template <class T>

void ResSmall(int n, T * mas)

{ for(int i = 0; i < n-1; i++)

*(mas+i) = *(mas+n-1);

}//-------------------------------------------------------------------------------------------------

//удаление массива из динамической памяти

template <typename T>

void DelMas(T *mas)

{ delete [] mas;

}//===========================================================

//модуль lab8.cpp (часть)

#include "stdafx.h"

#include "func.h"

int main()

{ setlocale(LC_ALL, "RUS");

int n;

cout << "Введите кол-во элементов в массиве: "; cin >> n;

cout << "Вещественные числа:" << endl;

float * fmas; //параметризируем вещественными числами

//… CreateMas(n, fmas);

GenMas(n, fmas);

OutMas(n, fmas);

if (IsToSmall(n, fmas))

ResSmall(n, fmas);

OutMas(n, fmas);

DelMas(fmas);

//… cout << "Целые числа:" << endl;

int * imas; //параметризируем целыми числами

CreateMas(n, imas);

//… system("pause"); return 0;

}

4. Контрольные вопросы

1. Какие виды памяти Вы знаете? Каково их назначение?

2. Что такое динамическая память? В чем заключается ее особенность? Правила работы с динамической памятью.

3. Как работают операторы new и delete?

4. Что такое шаблон функции? Для чего он используется?

5. На каком механизме базируется реализация шаблонов функций?

6. Что такое параметризация шаблона? Чем он параметризируется?

7. В чем заключается параметризация шаблона?

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