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

Лабораторная работа № 6. Процедуры и функции

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

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

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

    1. Изучить принципы организации модульности в С++ (заголовочные файлы - .h и файлы реализации - .cpp), изучить организацию подпрограмм в С++, особенности связей по управлению и по данным.

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

    3. Изучить работу оператора return, тип void, операторов *, &.

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

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

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

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

    8. Требования к проекту. Сформировать по одному или несколько заголовочных модулей и файлов реализации, которые будут содержать разработанные функции. Написать главную функцию main, используя правила структурного подхода: она должна содержать в основном только вызов функций, все вычисления должны быть внутри разработанных функций.

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

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

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

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

Даны целые числа a1, … , an, b1, …, bm, k. Если в последовательности a1, … , an нет ни одного члена со значением k, то первый по порядку член этой последовательности, не меньший всех остальных членов, заменить на значение k. По такому же правилу преобразовать последовательность b1, …, bm применительно к 10.

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

58

59

60

61

62

63

64

65

// модуль lab6.cpp

#include "stdafx.h"

#include "func.h"

int arr_a[100], arr_b[100]; //объявление массивов

int main()

{ setlocale(LC_ALL, "RUS");

int a_size = 0, b_size = 0; //кол-во элементов в массиве a и b

cout << "Данные для первого массива a" << endl;

menu(a_size, arr_a); out(a_size, arr_a);

cout << "Данные для второго массива b" << endl;

menu(b_size, arr_b); out(b_size, arr_b);

int k = 8; //число для сравнения (исходные данные)

cout << "Обработка первого массива a" << endl;

mission(a_size, arr_a, k);

cout << "Обработка второго массива b" << endl;

mission(b_size, arr_b, 10);

system("pause");

return 0;

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

//модуль func.h

//в этом файле описаны все интерфейсы подпрограмм

#pragma once; // директива – «включать один раз»

#include "stdafx.h"

void enter (int, int *); //функция ввода эл-ов массива (ввод с клавиатуры)

void genm (int size, int * arr); //функция иниц. массива случайными числами

void out (int size, int * arr); //функция вывода массива на экран

void menu (int &size, int * arr); //функция отображения меню на экране

bool InMas(int size, int * arr, int y); //функция проверки вхождения элемента в мас.

void task(int size, int arr[], int y); //функция преобразования массива по заданию

void mission(int size, int * arr, int &y);//функция вызова преобразования массива

//============================================================

//модуль func.cpp (представлена только часть функций)

//функция проверки вхождения элемента в массив

bool InMas(int size, int * arr, int y)

{ for(unsigned int i = 0; i < size; i++)

if (arr[i] == y)

return false;

return true;

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

//функция преобразования массива по заданию

void task(int size, int arr[], int y)

{ int i = 0; //счетчик

while(arr[i+1] > arr [i]) i++;

arr[i] = y;

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

//функция вызова преобразования массива

void mission(int size, int * arr, int &y)

{ cout << "Введите число для сравнения: ";

cin >> y;

if (mas(size, arr, y))

{ cout << "В последовательности нет элемента со значением k" << endl;

cout << "Преобразованный массив:" << endl;

task(size, arr, y);

out(size, arr);

}

else

cout << "В последовательности есть элемент со значением k" << endl

<< "Массив не преобразуется" << endl;

}

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

1. Что такое подпрограмма? Каково ее назначение?

2. Назовите основные принципы модульности и как они реализованы в С++.

3. Что такое область видимости и время жизни объекта программы?

4. Глобальные и локальные переменные.

5. Формальные и фактические параметры.

6. Назовите основные принципы структурного программирования.

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

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

9. Что такое синоним переменной, чем он отличается от указателя?

10. Для чего нужно предварительное объявление функции?

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

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