Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - избавится от 0 на главной и побочной диагоналях матрицы

Ответить
Настройки темы
C/C++ - избавится от 0 на главной и побочной диагоналях матрицы

Аватара для Sergey96

Новый участник


Сообщения: 32
Благодарности: 1

Профиль | Цитировать


Изменения
Автор: Drongo
Дата: 09-12-2013
Описание: #
когда возможно избавится от 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");
}

Отправлено: 01:35, 09-12-2013

 

Ветеран


Сообщения: 1405
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

-------
Ehhh.. what's up, doc?..


Отправлено: 19:36, 09-12-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - избавится от 0 на главной и побочной диагоналях матрицы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] как избавится от ошибок DNS на DC? dimV Microsoft Windows NT/2000/2003 3 01-03-2011 14:24
Помогите избавится от вирусов! Lilblaw Лечение систем от вредоносных программ 4 04-12-2010 23:06
Прочее - Помогите избавится от роутера :) slipslot Сетевые технологии 8 05-08-2009 00:45
избавится от Microsoft Oulook BYBY Хочу все знать 4 12-03-2005 00:35
Как избавится от транслита Ereza О сайте и форуме 2 30-07-2002 17:11




 
Переход