ЗАДАЧА 4.2. НОМЕР СТОЛБЦА ИЗ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ

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

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

Эта логика реализуется с помощью переменной-флага all_posit, которая перед началом просмотра каждого столбца устанавливается в значение true ЗАДАЧА 4.2. НОМЕР СТОЛБЦА ИЗ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ, а при на­хождении отрицательного элемента «опрокидывается» в false. Если все элементы столбца положительны, флаг не опрокинется и останется истинным, что будет яв­ляться признаком присутствия в матрице искомого столбца.

Если столбец найден, просматривать матрицу дальше не имеет смысла, поэтому выполняется выход из цикла и вывод результата.

#include

#include

int main(){

int nrow, ncol;

cout << “Введите количество строк и столбцов: “;
cin >> nrow >> ncol; // ввод размерности массива

int 1, j;

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

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

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

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

for (j = 0; j ЗАДАЧА 4.2. НОМЕР СТОЛБЦА ИЗ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ > 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 = 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;

}

В программе необходимо предусмотреть случай, когда ни один столбец не удов­летворяет условию. Для этого переменной num, в которой будет храниться номер искомого столбца, присваивается начальное значение, не входящее в ЗАДАЧА 4.2. НОМЕР СТОЛБЦА ИЗ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ множество значений, допустимых для индекса, например -1. Перед выводом результата его значение анализируется[1]. Если оно после просмотра матрицы сохранилось неиз­менным, то есть осталось равным -1, то столбцов, удовлетворяющих заданному условию, в матрице нет.

Можно обойтись без анализа переменной num, да и вообще без этой переменной, если вывести номер столбца сразу после его определения, после чего завершить программу. Этот вариант приведен ниже. Заодно продемонстрированы простей­шие способы работы с файлами.

СОВЕТ:Текстовые файлы очень удобно использовать для отладки программ, требующих ввода хотя бы нескольких величин, – ведь, как правило, программу не удается написать сразу без оши­бок, а многократный ввод одних и тех же ЗАДАЧА 4.2. НОМЕР СТОЛБЦА ИЗ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ значений замедляет процесс отладки и может сильно испортить настроение. Кроме того, при подготовке данных в файле до выполнения про­граммы можно спокойно продумать тестовые примеры для исчерпывающей проверки пра­вильности программы.

Рис. 4.Блок-схема алгоритма решения задачи 4.2



#include

#include

int main(){

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];

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

for ЗАДАЧА 4.2. НОМЕР СТОЛБЦА ИЗ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ (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 << endl; }

bool all_posit;

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

all_posit = true;

for (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, рас­положенного в том же каталоге, что и программа, а результаты выводятся в файл output ЗАДАЧА 4.2. НОМЕР СТОЛБЦА ИЗ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ.txt. В программе определены объект fin класса входных файловых потоков и объект fout класса выходных файловых потоков. Файловые потоки описаны в заголовочном файле . Работа с этими объектами аналогична работе со стандартными объектами cin и cout, то есть можно пользоваться теми же операци­ями помещения в поток <>.

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

ifstream fin(“c:\\prim\\cpp\\input.txt”, 1os::1n | ios::nocreate);

После определения объектов проверяется успешность их создания. Это ЗАДАЧА 4.2. НОМЕР СТОЛБЦА ИЗ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ особенно важно делать для входных файлов, чтобы исключить вероятность ошибки в имени или местоположении файла. На следующей лабораторной работе мы рассмотрим файловые потоки более подробно.

Если программа завершается успешно, то на экран выводится сообщение «Работа завершена». Благодаря этому пользователь вашей программы поймет, что она все же что-то сделала. Еще более гуманным было бы вывести дополнительное сооб­щение типа «Результаты смотрите в файле output.txt».

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


documentalxvgkf.html
documentalxvnun.html
documentalxvvev.html
documentalxwcpd.html
documentalxwjzl.html
Документ ЗАДАЧА 4.2. НОМЕР СТОЛБЦА ИЗ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ