Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2015, 14:31   #1
Ponch_Begginer
Пользователь
 
Регистрация: 04.01.2015
Сообщений: 71
Радость задача с матрицОй )

Задача:
Задана матрица размером NxN. Поменять местами строку с максимальным элементом матрицы и строку с минимальным эле-ментом.

Мой код:
Код:
#include <iostream>

using namespace std;

const int NUM(4); 

int main()
{
    int mat[NUM][NUM];

    int _max(0), _min(0), mxline(0), mnline(0);

    for(int i(0);i<=NUM-1;i++)		
        for(int j(0);j<=NUM-1;j++)	
        {
            cout << "mat[" << i << "][" <<j<< "] = ";
            cin >> mat[i][j];
            if(i==0)
               _min = _max = mat[0][0];		
            else
            {
                if(mat[i][j]>_max)	
                {
                    _max = mat[i][j];
                    mxline = i;
                }
                if((mat[i][j]<_min))	
                {
                    _min = mat[i][j];
                    mnline = i;
                }
            }

    	}

    	    for(int i(0);i<=NUM-1;i++)
    {
        for(int j(0);j<=NUM-1;j++)
            cout << mat[i][j] << " | ";
        cout << endl;
	}

    int temp;

    for(int i(0);i<=NUM-1;i++)	
    {
        temp = mat[mxline][i];
        mat[mxline][i] = mat[mnline][i];
        mat[mnline][i] = temp;
    }

    for(int i(0);i<=NUM-1;i++)
    {
        for(int j(0);j<=NUM-1;j++)
            cout << mat[i][j] << " | ";
        cout << endl;
	}
    return 0;
}
Правильно-ли я сделал?
Что исправить?
Готов к разумной критике .

Последний раз редактировалось Stilet; 08.11.2015 в 16:05.
Ponch_Begginer вне форума Ответить с цитированием
Старый 08.11.2015, 14:41   #2
temaps
Форумчанин
 
Регистрация: 15.05.2011
Сообщений: 160
По умолчанию

сходу:
Код:
if(i==0&&j==0)
_min = _max = mat[0][0];
глубоко не разбирался, но на первый взгляд остальное верно
temaps вне форума Ответить с цитированием
Старый 08.11.2015, 15:41   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Я надеюсь, ты учёл, что строк с минимальным и/или максимальным элементом матрицы может быть несколько?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.11.2015, 15:42   #4
Ponch_Begginer
Пользователь
 
Регистрация: 04.01.2015
Сообщений: 71
По умолчанию

Спасибо.
Меня интересуют не только ошибки, но советы по улучшению.
Ponch_Begginer вне форума Ответить с цитированием
Старый 08.11.2015, 16:02   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

и не надо пихать всё хозяйство в main(), ибо свыше 20 строк - уже жуть и смотреть страшно. разнеси по функциям, выполняющим свои чиста-конкретные задачи.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.11.2015, 16:02   #6
Ponch_Begginer
Пользователь
 
Регистрация: 04.01.2015
Сообщений: 71
По умолчанию

Я не стал учитывать возможность нескольких строк, так-как в условии ничего на счет этого ничего не говорится)
Ponch_Begginer вне форума Ответить с цитированием
Старый 08.11.2015, 16:12   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Улучшений хочешь? - Сократи код:
Код:
#include <iostream>

using namespace std;

const int NUM(4); 

void Write(int **a, int N){

 for(int i(0);i<N;i++)
    {
        for(int j(0);j<N;j++)  cout << mat[i][j] << " | ";
        cout << endl;
     }
 cout << endl;
}

int main()
{
    int mat[NUM][NUM];

    int _max(0), _min(0), mxline(0), mnline(0);

    for(int i(0);i<NUM;i++)		
        for(int j(0);j<NUM;j++)	
        {
            cout << "mat[" << i << "][" <<j<< "] = ";
            cin >> mat[i][j];
            if(mat[i][j]>mat[_max][j]) _max=i;
            if(mat[i][j]<mat[_min][j]) _min=i;
    	}
    Write(&mat,NUM);

    int temp;
    for(int i(0);i<NUM;i++)	
    {
        temp = mat[_max][i];
        mat[_max][i] = mat[_min][i];
        mat[_min][i] = temp;
    }

    Write(&mat,NUM);

    cin.get();
    return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.11.2015, 16:12   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Я не стал учитывать возможность нескольких строк, так-как в условии ничего на счет этого ничего не говорится)
однако, в условии и обратное не оговорено. если препод нетрадиционно сексуально ориентированный - может сыграть с тобой в игру "я начальник - ты дурак". ибо в реальных условиях таки максимумов/минимумов может быть больше 1, как ни крути.

Мне-то пох, тебе сдавать-то...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.11.2015, 16:42   #9
Ponch_Begginer
Пользователь
 
Регистрация: 04.01.2015
Сообщений: 71
По умолчанию

Да спасибо, учту на будущее)
Ponch_Begginer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача с матрицой (Pascal) Luci4er Помощь студентам 0 18.05.2013 17:24
Задача с матрицой на Си glebast Помощь студентам 3 15.10.2012 16:48
Работа с матрицой (Си) Roll1n Общие вопросы C/C++ 1 20.04.2010 21:28
Задача с матрицой maziLa Помощь студентам 1 09.02.2009 01:54