Консультация № 160286
12.02.2009, 12:53
0.00 руб.
0 1 1
Уважаемые, Товарищи.. прошу помощи с программой на VC++2008

Объявляем число строк Целочисленная прямоугольная матрица, найти номера первых столбцов, не содержащих ни одного отрицательного элемента, со статическим раcпределением, код разбить на функции.

Заранее благодарен

Обсуждение

Неизвестный
12.02.2009, 17:51
общий
это ответ
Здравствуйте, Степанов Андрей Сергеевич!
Программа:
Код:

#include <locale>
#include <limits>
#include <iostream>
#include <iomanip>
#include <wchar.h>

// Максимальные значения для размерности матрицы
const int MaxDimension=100;
// Матрица. Память распределяется статически.
double matrix[MaxDimension][MaxDimension];

using namespace std;

unsigned int inputDimension(const wchar_t* const);
bool isCont();
void printMatrix(unsigned int,unsigned int);
void inputMatrix(unsigned int,unsigned int);

int main()
{
locale::global(locale("rus_rus.866"));
do
{
// Вводим количество строк матрицы
unsigned int N=inputDimension(L"Количество строк матрицы");
// Вводим количество столбцов матрицы
unsigned int M=inputDimension(L"Количество столбцов матрицы");
// Вводим матрицу
inputMatrix(N,M);
// Выводим матрицу для контроля
printMatrix(N,M);
// Ищем столбцы без отрицательных
wcout<<L"Столбцы не содержащие ни одного отрицательного элемента:";
// Счетчик столбцов
unsigned int cnt=0;
for(unsigned int j=0;j<M;j++)
{
for(unsigned int i=0;i<N;i++)
{
// Проверка
if(matrix[i][j]<0)goto is_not_it;
}
cnt++;
// Выводим номер столбца. Нумеруем с единицы
wcout<<j+1<<L',';
is_not_it:;
}
if(cnt)wcout<<L"\b ";
else wcout<<L"Отсутствуют";
wcout<<endl;
wcout<<L"Найдено "<<cnt
<<(cnt<5&&cnt>1?L" столбца":(cnt==1?L" столбец":L" столбцов"))
<<L" не содержащих отрицательных."<<endl;
}while(isCont());
return 0;
}

unsigned int inputDimension(const wchar_t* const msg)
{
unsigned int dim=0;
while(!dim)
{
wcout<<msg<<L'('<<1<<L".."<<MaxDimension<<L"):";
wcin>>dim;
if(wcin.fail())
{
wcout<<L"Ошибка ввода!"<<endl;
wcin.clear();
}
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
if(dim>MaxDimension)
{
wcout<<L"Размер не может быть больше "<<MaxDimension<<endl;
dim=0;
}
}
return dim;
}

bool isCont()
{
// Вопрос о продолжении
while(1)
{
wcout<<L"Желаете еще раз(Y/N)?:";
wchar_t reply=_getwche();
wcout<<endl;
switch(reply)
{
case L'Y':case L'y':case L'Д':case L'д':
return true;
case L'N':case L'n':case L'Н':case L'н':
return false;
default:
wcout<<L"Будьте внимательней!"<<endl;
continue;
}
break;
}
}

void printMatrix(unsigned int N,unsigned int M)
{
wcout<<L"Исходная матрица:"<<endl;
for(unsigned int i=0;i<N;i++)
{
for(unsigned int j=0;j<M;j++)
wcout<<setw(7)<<matrix[i][j]<<L' ';
wcout<<endl;
}
}

void inputMatrix(unsigned int N,unsigned int M)
{
for(unsigned int i=0;i<N;i++)
{
for(unsigned int j=0;j<M;j++)
{
// Вводим элемент
while(1)
{
// Хотя в C++ индексы начинаются с нуля, для удобства пользователя нумеруем с единицы
wcout<<L'['<<i+1<<L"]["<<j+1<<L"]=";
wcin>>matrix[i][j];
if(wcin.fail())
{
wcout<<L"Ошибка ввода!"<<endl;
wcin.clear();
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
}
else
{
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
break;
}
}
}
}
}


Результат:
Код:

Количество строк матрицы(1..100):3
Количество столбцов матрицы(1..100):4
[1][1]=23
[1][2]=34
[1][3]=45
[1][4]=6
[2][1]=3
[2][2]=-6
[2][3]=34
[2][4]=2
[3][1]=-5
[3][2]=23
[3][3]=45
[3][4]=67
Исходная матрица:
23 34 45 6
3 -6 34 2
-5 23 45 67
Столбцы не содержащие ни одного отрицательного элемента:3,4
Найдено 2 столбца не содержащих отрицательных.
Желаете еще раз(Y/N)?:
Форма ответа