Пример 6.2. Номер столбца из положительных элементов

Написать программку, которая для прямоугольной целочисленной матрицы опреде­ляет номер самого левого столбца, содержащего только положительные элементы. Если такового столбца нет, вывести сообщение.

UML-диаграмма метода приведена на рисунке 6.3. Для решения этой задачки матрицу нужно просматривать по столбцам. При всем этом резвее изменяется 1-ый ин­декс (номер строчки). Прийти к Пример 6.2. Номер столбца из положительных элементов выводу о том, что какой-нибудь столбец содержит толь­ко положительные элементы, можно только после просмотра столбца полностью; зато если в процессе просмотра повстречался отрицательный элемент, можно сходу пере­ходить к последующему столбцу.

Набросок 6.3 - UML-диаграмма деятельности для примера 6.2

Эта логика реализуется при помощи переменной-флага allposit, которая до просмотра Пример 6.2. Номер столбца из положительных элементов каждого столбца устанавливается в значение true, а при на­хождении отрицательного элемента «опрокидывается» в false. Если все элементы столбца положительны, флаг не опрокинется и остается настоящим, что будет яв­ляться признаком присутствия в матрице искомого столбца. Если столбец найден, просматривать матрицу далее не имеет смысла, потому производится Пример 6.2. Номер столбца из положительных элементов выход из цикла и вывод результата.

Листинг 6.2

#include

#include

int main()

{

int nrow, ncol;

setlocale( LC_ALL, "Russian" );

cout << “Введите количество строк и столбцов:”;

cin >> nrow >> ncol; //ввод размерности массива

int i, j;

int **a = new int *[nrow]; /* выделение памяти под массив */

for(i = 0; i < nrow; i++) a[i] = new Пример 6.2. Номер столбца из положительных элементов int[ncol];

cout << “Введите элементы массива:” << endl;

for(i = 0; i < nrow; i++)

for(j = 0; j > a[i][j]; // ввод массива

for(i = 0; i < nrow; i++)

{

for(j = 0; j < ncol; j++) cout << setw(4) << a[i][j] << “ ”;

cout << endl;

}

int num = -1;

bool all_posit;

for (j = 0; j< ncol; j++) // просмотр по столбцам

{

all_posit = true;

for (i Пример 6.2. Номер столбца из положительных элементов = 0; i < nrow; i++) /* анализ частей столбца */

if (a[i][j]<0)

{

all_posit = false;

break;

}

if (all_posit)

{

num = j;

break;

}

}

if (-1 == num ) cout << “ Столбцов нет ” << endl;

else cout << “ Номер столбца: ” << num << endl;

return 0;

}

В программке нужно предугадать случай, когда ни один столбец не удов­летворяет условию. Для этого переменной Пример 6.2. Номер столбца из положительных элементов nun, в какой будет храниться номер искомого столбца, присваивается изначальное значение, не входящее в огромное количество значений, допустимых для индекса, к примеру -1. Перед выводом результата его значение анализируется. Если оно после просмотра матрицы сохранилось неиз­менным, другими словами осталось равным -1, то столбцов, удовлетворяющих данному условию, в матрице нет Пример 6.2. Номер столбца из положительных элементов.

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

Текстовые файлы очень комфортно использовать для отладки программ, требующих ввода хотя бы нескольких величин, - ведь, обычно, программку не удается написать Пример 6.2. Номер столбца из положительных элементов сходу без оши­бок, а неоднократный ввод одних и тех же значений замедляет процесс отладки и может очень попортить настроение. Не считая того, при подготовке данных в файле до выполнения про­граммы можно расслабленно обмыслить тестовые примеры для исчерпающей проверки пра­вильности программки.

Листинг 6.3

#include

#include

int main()

{

setlocale( LC_ALL Пример 6.2. Номер столбца из положительных элементов, "Russian" );

ifstream fin(“input.txt” , ios :: in | ios :: nocreate);

if (!fin)

{

cout << “ Файл input.txt не найден.” << endl;

return 1;

}

ofstream fout (“output.txt”);

if (!fout)

{

cout << “ Нереально открыть файл для записи. ” << endl;

return 1;

}

int nrow, ncol;

fin >> nrow >> ncol;

int i, j;

int **a = new int *[nrow Пример 6.2. Номер столбца из положительных элементов];

for(i = 0; i < nrow; i++) a[i] = new int[ncol];

for (i = 0; i < nrow; i++)

for(j = 0; j > a[i][j];

for (i = 0; i < nrow; i++)

{

for(j = 0; j < ncol; j++) fout << setw(4) << a[i][j] << “ ”;

fout << end l;

}

bool all_posit;

for (j = 0; j < ncol; j++)

{

all_posit = true;

for Пример 6.2. Номер столбца из положительных элементов (i = 0; i < nrow; i++)

if (a[i][j] < 0)

{

all_posit = false; break;

}

if (all_posit)

{

fout << “ Номер столбца: ” << j;

cout << “ Работа завершена ” << endl;

return 0;

}

}

fout << “ Столбцов нет ”;

cout << “ Работа завершена ” << endl;

return 0;

}

Ввод размерности массива и его частей производится из файла input.txt, рас­положенного в Пример 6.2. Номер столбца из положительных элементов том же каталоге, что и программка, а результаты выводятся в файл output. txt. В программке определены объект fin класса входных файловых потоков и объект fout класса выходных файловых потоков. Файловые потоки описаны в заголовочном файле . Работа с этими объектами подобна работе со стандартными объектами cin и cout.

Подразумевается, что файл с Пример 6.2. Номер столбца из положительных элементов именованием 1 nput. txt находится в том же каталоге, что и текст программки, по другому следует указать полный путь, дублируя знак оборотной косой черты, потому что по другому он будет иметь особое значение, на­пример:

ifstream fin("c:\\prim\\cpp\\input.txt", ios::in | ios::nocreate);

После определения объектов проверяется удачливость Пример 6.2. Номер столбца из положительных элементов их сотворения. Это в особенности принципиально делать для входных файлов, чтоб исключить возможность ошибки в имени либо местоположении файла.

Если программка заканчивается удачно, то на экран выводится сообщение «Работа завершена».

Входной файл input.txt можно сделать в любом редакторе текста. Он должен существовать до первого пуска программки. На размещение Пример 6.2. Номер столбца из положительных элементов и формат начальных данных в файле никаких ограничений не накладывается.


primenenie-yadernih-tehnologij-v-medicine-organizovannogo-v-ramkah-vistavki-dostizhenij-predprinimatelstva.html
primenenie-zabalansovih-schetov.html
primenenie-zakona-hardi-vajnberga.html