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

О задаче:
[свернуть]

По книге:C/C++ Программирование на языке высокого уровня: Учебник для вузов
Автор книги: Павловская Татьяна Александровна
Задача на тему: Двумерные массивы — (на странице 139)
Вариант задачи: 1 — (на странице 139)’ style=’default’ collapse_link=’true’]
Условия задачи:
[свернуть]

Дана целочисленная прямоугольная матрица. Определить:

  1. количество строк, не содержащих ни одного нулевого элемента;
  2. максимальное из чисел, встречающееся в заданной матрице более одного раза.

‘ style=’default’ collapse_link=’true’]

Листинг(исходник) программы:
[свернуть]

 
#include <iostream> 
#include <stdlib.h> 
#include <locale> 
#include <conio.h> 
using namespace std; 
void main() 
{ 
setlocale(LC_ALL,"Rus"); 
int n, m; 
cout<<"Введите количество строк: ";	cin >> n; 
cout<<"Введите количество столбцов: ";	cin >> m; 

//Формирование Массива 
int **Massiv = new int* [n]; // Выделение памяти под массив указателей для строк 
for(int i=0; i<n; i++) 
Massiv[i] = new int [m]; // Выделение памяти под массив столбцов 

//Заполнение матрицы случайными числами 
srand((int)time(NULL)); // Инициализация 
for(int i(0); i<n; i++ ) 
for(int j(0); j<m; j++) 
Massiv[i][j] = rand() % 100 + -50 ; // Присваивание случайного числа элементу матрицы[i][j] в диопазоне от -50 до 50 

// Вывод сформированной матрицы 
for(int i(0); i<n; i++ ) 
{ 
cout<<"Строка "<<i+1<<" ["; 
for(int j(0); j<m; j++) 
{ 
if(j == m-1) 
{ 
cout<<Massiv[i][j]<<\']\'<<endl; 
break; 
} 
else cout<<Massiv[i][j]<<\',\'; 
} 
} 
cout<<endl; 
system("pause"); // Пауза 


// Поиск строк не содержащих ни одного нулевого элемента 
int count(0); //count - количество строк без нулей 
int* maxNumbers = new int [n*m]; // Массив хранения всех чисел из Massiv , кроме нуля. 
bool found(0); 
for(int i(0); i<n*m; i++) maxNumbers[i] = 0; // Обнуление всего массива чисел 
for(int i(0), k(0); i<n; i++, found=0 ) // found- Флаг ответа о нахождении , 
{ 
for(int j(0); j<m; j++) 
{ 
if( !Massiv[i][j] ) found = true; // Переключаем флаг если найден нулевой элемент 
else 
{ 
maxNumbers[k] = Massiv[i][j]; // Занесение числа в массив maxNumbers 
k++; 
} 
} 
if(!found) count++; // Инкрементируем счетчик строк без нулей, если такая найдена 
} 
cout<<"Найдено строк без нулевых элементов "<<count<<endl; 

// Сортировка по возрастанию 
for(int i(0); i<n*m; i++) 
{ 
for(int j(0); j<n*m; j++) 
{ 
if( maxNumbers[i] < maxNumbers[j]) swap(maxNumbers[i],maxNumbers[j]); 
} 

} 

//Поиск Максимального числа встречающийся в массиве больше 1 раза 
for(int i(n*m-1); i>=0; i--) 
{ 
if(maxNumbers[i] == maxNumbers[i-1]) 
{ 
cout<<"Максимально число встречающееся в массиве больше одного раза: "<<maxNumbers[i]<<endl; 
break; 
} 
} 

// Освобождение памяти 
delete [] maxNumbers; // Освобождение памяти от массива всех чисел 
for(int i=0; i<n; i++) 
{ 
delete [] Massiv[i]; // Освобождение памяти по столбцам 
} 
delete [] Massiv; // Освобождение памяти по строкам 
_getch(); 
} 

‘ style=’default’ collapse_link=’true’]

Автор:Павел Кадыров

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *