Sergey96
09-12-2013, 01:35
когда возможно избавится от 0 все работает а когда нет программа не работает (например матрица 2х2 с 0 не возможно избавится путём перестановки столбцов и рядков матрицы ) вопрос в том как сделать чтоб выводило соответствующие сообщения?
#include <iostream>
#include <time.h>
using namespace std;
int m[10][10];
//===========================================
void set_m (int n)
{
srand((unsigned) time (NULL));
for (int i=0; i<n;i++)
for(int j=0; j<n; j++)
cin>>m[i][j];
for (int i=0; i<n;i++)
{
for(int j=0; j<n; j++)
cout<<m[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}
void look_m(int n) // на осн. диагон. найти 0 и поменять со столбцом или строкой где нет 0
{
for(int i=0, j=0; i<n; i++, j++)
{
if(m[i][j]==0)
{
for(int k=0; k<n; k++)
{
if(m[k][j]!=0)
{
for(int j=0; j<n; j++)
{
int tmp;
tmp=m[i][j];
m[i][j]=m[k][j];
m[k][j]=tmp;
}
}
if(m[i][k]!=0)
{
for(int i=0; i<n; i++)
{
int tmp;
tmp=m[i][j];
m[i][j]=m[i][k];
m[i][k]=tmp;
}
}
}
}
}
}
void look_n(int n) // на побочн. диагон. найти 0 и поменять со столбцом или строкой где нет 0
{
for(int i=n-1, j=0; j<n; i--, j++)
{
if(m[i][j]==0)
{
for(int k=0; k<n; k++)
{
if(m[k][j]!=0)
{
for(int j=0; j<n; j++)
{
int tmp;
tmp=m[i][j];
m[i][j]=m[k][j];
m[k][j]=tmp;
}
//break;
}
if(m[i][k]!=0)
{
for(int i=0; i<n; i++)
{
int tmp;
tmp=m[i][j];
m[i][j]=m[i][k];
m[i][k]=tmp;
//break;
}
}
}
}
}
}
int look(int n) //проверка наличия 0 на диагоналях
{
bool flag=true;
for(int i=0, j=0; i<n; i++, j++)
{
if (m[i][j]==0)
flag=false;
}
for(int i=n-1, j=0; j<n; i--, j++)
{
if (m[i][j]==0)
flag=false;
}
return flag;
}
//==================Output===================================================
void output (int n )
{
for (int i=0; i<n;i++)
{
for(int j=0; j<n; j++)
cout<<m[i][j]<<" ";
cout<<endl;
}
}
int main ()
{
int n;
cin>>n;
set_m(n);
do
{
look_m(n);
look_n(n);
}
while(look(n)==false);
output(n);
system("pause");
}
#include <iostream>
#include <time.h>
using namespace std;
int m[10][10];
//===========================================
void set_m (int n)
{
srand((unsigned) time (NULL));
for (int i=0; i<n;i++)
for(int j=0; j<n; j++)
cin>>m[i][j];
for (int i=0; i<n;i++)
{
for(int j=0; j<n; j++)
cout<<m[i][j]<<" ";
cout<<endl;
}
cout<<endl;
}
void look_m(int n) // на осн. диагон. найти 0 и поменять со столбцом или строкой где нет 0
{
for(int i=0, j=0; i<n; i++, j++)
{
if(m[i][j]==0)
{
for(int k=0; k<n; k++)
{
if(m[k][j]!=0)
{
for(int j=0; j<n; j++)
{
int tmp;
tmp=m[i][j];
m[i][j]=m[k][j];
m[k][j]=tmp;
}
}
if(m[i][k]!=0)
{
for(int i=0; i<n; i++)
{
int tmp;
tmp=m[i][j];
m[i][j]=m[i][k];
m[i][k]=tmp;
}
}
}
}
}
}
void look_n(int n) // на побочн. диагон. найти 0 и поменять со столбцом или строкой где нет 0
{
for(int i=n-1, j=0; j<n; i--, j++)
{
if(m[i][j]==0)
{
for(int k=0; k<n; k++)
{
if(m[k][j]!=0)
{
for(int j=0; j<n; j++)
{
int tmp;
tmp=m[i][j];
m[i][j]=m[k][j];
m[k][j]=tmp;
}
//break;
}
if(m[i][k]!=0)
{
for(int i=0; i<n; i++)
{
int tmp;
tmp=m[i][j];
m[i][j]=m[i][k];
m[i][k]=tmp;
//break;
}
}
}
}
}
}
int look(int n) //проверка наличия 0 на диагоналях
{
bool flag=true;
for(int i=0, j=0; i<n; i++, j++)
{
if (m[i][j]==0)
flag=false;
}
for(int i=n-1, j=0; j<n; i--, j++)
{
if (m[i][j]==0)
flag=false;
}
return flag;
}
//==================Output===================================================
void output (int n )
{
for (int i=0; i<n;i++)
{
for(int j=0; j<n; j++)
cout<<m[i][j]<<" ";
cout<<endl;
}
}
int main ()
{
int n;
cin>>n;
set_m(n);
do
{
look_m(n);
look_n(n);
}
while(look(n)==false);
output(n);
system("pause");
}