Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Процедурный подход к разработке программ



В качестве примера рассмотрим следующую задачу.

Имеется числовая матрица размера n на m. Необходимо вывести на экран индексы всех седловых точек. Седловой точкой является элемент матрицы со значением минимальным в строке и максимальным в столбце, в котором находится элемент, или наоборот – максимальным в строке и минимальным в столбце.

Общий план решения этой задачи может быть, например, таким:

1. Подготовка данных для решения задачи.

2. Решение задачи и вывод результатов.

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

#include "stdafx.h"

#include <iostream>

using namespace std;

const int n = 5, m = 5; // n - количество строк, m - количество столбцов матрицы

int A[n][m]; // А - исходная матрица

void Подготовка_данных()

{

}

void Решение_и_вывод_результатов()

{

}

int _tmain(int argc, _TCHAR* argv[])

{

Подготовка_данных();

Решение_и_вывод_результатов();

system("Pause");

return 0;

}

Теперь можно перейти к последовательной реализации каждой из этих функций.

Для подготовки исходных данных необходимо:

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

2. вывести содержимое матрицы на экран, для того чтобы в дальнейшем проконтролировать правильность решения задачи.

Реализуем эти действия также с помощью соответствующих функций:

void Заполнение_массива()

{

}

void Вывод_массива()

{

}

void Подготовка_данных()

{

Заполнение_массива();

Вывод_массива();

}

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

void Заполнение_массива()

{

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

for (int j = 0; j < m; ++j)

A[i][j] = rand() % 3; // Генерация сл. чисел в диапазоне [0, 2]

}

Здесь мы заполнили матрицу значениями 0, 1 и 2. При таких значениях элементов матрицы легче получить матрицу, содержащую седловые точки.

Вывод значений двумерного массива на экран также не должно вызывать затруднений:

void Вывод_массива()

{

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

{

for (int j = 0; j < m; ++j)

cout << setw(4) << right << A[i][j];

cout << endl;

}

}

Вывод значений матрицы мы оформили в виде таблицы. Для задания ширины каждого столбца этой таблицы использован манипулятор вывода setw. Для использования этого манипулятора необходимо включить заготовочный файл iomanip.

Теперь мы получили следующую программу:

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

const int n = 5, m = 5; // n - количество строк, m - количество столбцов матрицы

int A[n][m]; // А - исходная матрица

void Заполнение_массива()

{

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

for (int j = 0; j < m; ++j)

A[i][j] = rand() % 3;

}

void Вывод_массива()

{

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

{

for (int j = 0; j < m; ++j)

cout << setw(4) << right << A[i][j];

cout << endl;

}

}

void Подготовка_данных()

{

Заполнение_массива();

Вывод_массива();

}

void Решение_и_вывод_результатов()

{

}

int _tmain(int argc, _TCHAR* argv[])

{

Подготовка_данных();

Решение_и_вывод_результатов();

system("Pause");

return 0;

}

Если запустить эту программу на выполнение, на экран будет выведена матрица, содержащая 5 строк и 5 столбцов с элементами, значения которых принадлежат диапазону [0, 2].

Переходим к реализации функции Решение_и_вывод_результатов (). Общий алгоритм работы этой функции: необходимо выполнить проверку каждого элемента исходной матрицы – является ли этот элемент седловой точкой. Если проверяемый элемент является седловой точкой, то вывести на экран значения индексов этого элемента. Если проверяемый элемент не является седловой точкой, то перейти к проверке следующего элемента.

Перебор элементов матрицы можно выполнить с помощью двух вложенных циклов.

Предположим, что имеется функция bool Это_седловая_точка(int i, int j), которая возвращает значение true, если элемент матрицы А [i] [j] является седловой точкой. Тогда реализация функции Решение_и_вывод_результатов() будет выглядеть так:

void Решение_и_вывод_результатов()

{

cout << endl;

int Счетчик = 0; // Счетчик седловых точек

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

for (int j = 0; j < m; ++j)

if (Это_седловая_точка(i, j))

{

cout << setw(4) << i << setw(4) << j << endl;

++ Счетчик;

}

cout << "\nКоличество седловых точек: " << Счетчик << endl;

}

Реализуем функцию Это_седловая_точка. Для того чтобы определить является ли элемент матрицы с индексами i и j седловой точкой, необходимо знать минимальное и максимальное значения в строке с индексом i значения, а также минимальное и максимальное значения в столбце с индексом j. Допустим, что у нас имеются четыре функции:





Дата публикования: 2014-11-28; Прочитано: 266 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...