Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++v 1.0_студенты.doc
Скачиваний:
7
Добавлен:
03.11.2018
Размер:
626.69 Кб
Скачать

Лабораторная работа № 4. Программирование вложенных циклов и матричных задач

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

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

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

    1. Изучить особенности организации вложенных циклов, принципы работы с многомерными массивами.

    2. Изучить работу оператора break и принципы его применения.

    3. Изучить пример выполнения задания.

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

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

    6. Разработать программу на языке С++ для алгоритма п. 2.4.

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

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

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

Даны натуральные числа n и z, определяющие количество фактических строк и столбцов в матрице соответственно, действительные числа , … ,. Получить в порядке следования все , удовлетворяющие неравенствам .

Метод решения: для каждого элемента матрицы xi,k (начиная с x0,1) проверяется, все ли перед ним стоящие элементы меньше его, при этом каждая следующая строка матрицы считается продолжением предыдущей.

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

// модуль lab4.cpp.

#include "stdafx.h"

#define MAX_SIZE 100;

int main()

{ setlocale(LC_ALL, "RUS");

//фактическое количество элементов в строке - n, в столбце – z

unsigned int n = 0, z = 0;

float x[MAX_SIZE][ MAX_SIZE];

// диалог и ввод данных … (см. пример лаб. раб. № 3)----------------------------------

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

for(unsigned int i = 0; i < n; i++) //внешний цикл – по строкам

for(unsigned int j = 0; j < z; j++) //вложенный цикл – по столбцам

{ //генерация псевдослучайного числа

x[i][j] = ((float)rand()/RAND_MAX+rand()%100 - rand()%50);

}

//вывод матрицы на экран---------------------------------------------------------------------

printf("\n\n");

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

for(unsigned int j = 0; j < z; j++)

printf("[%i][%i] элемент матрицы = %3.2f\n", i, j, x[i][j]);

printf("\n\n");

// решение задачи---------------------------------------------------------------------------------

unsigned int stroka; //строка матрицы, в которой находится найденный

//k элемент, подходящий по условию задачи

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

for(unsigned int k = 0; k < z; k++)

{ //обход матрицы до i строки, в которой находится k элемент bool flag = true; //флаг выполнения условия задачи

for(unsigned int temp_i = 0; temp_i <= i; temp_i++)

{ if (flag == false) break; // выход из ближайшего цикла

unsigned int temp_j = 0; //обнуляем счетчики

unsigned int temp_k = 0;

//обход матрицы (i строки) до k элемента (включительно)

while(temp_j <= temp_k)

{ //анализириуем на какой строке находится k элемент

if (i != temp_i)

//если k элемент находится на отличной от i строки

temp_k = z-1;

else temp_k = k; //если k элемент находится на i строке if (x[i][k] >= x[temp_i][temp_j])

stroka = temp_i;

else {

flag = false; //нарушение условия задачи

break;

}

temp_j++; //увеличиваем счетчик (столбцы)

}//while

}//for

if (flag) //анализируем флаг выполнения заданного условия

printf("x[%i][%i] = %3.2f\n", stroka, k, x[stroka][k]);

}//for

printf("\n\n");

system("pause");

return 0;

}

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

  1. Какова общая схема работы с многомерным массивом?

  2. Каковы правила организации вложенных циклов?

  3. Какие существуют способы объявления массива?

  4. Назовите алгоритм работы и правила использования неструктурного оператора break.

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