Форум программистов, компьютерный форум CyberForum.ru

Квадратная матрица ! - C++

Восстановить пароль Регистрация
 
Pasha10
0 / 0 / 0
Регистрация: 01.07.2010
Сообщений: 36
03.07.2010, 09:55     Квадратная матрица ! #1
Дана квадратная матрица размерности n × n . Найти максимальный элемент
каждой строки и поменять его с элементом этой строки, стоящим в
последнем столбце.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2010, 09:55     Квадратная матрица !
Посмотрите здесь:

C++ квадратная матрица
Квадратная матрица C++
C++ Квадратная матрица
C++ квадратная матрица
C++ Квадратная матрица
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Demihalf
Унылый школьник
 Аватар для Demihalf
126 / 60 / 3
Регистрация: 06.11.2009
Сообщений: 354
03.07.2010, 10:26     Квадратная матрица ! #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
 
int main()
{
    const int n = 5;
    int matrix[5][5];
    // Инициализируем генератор случайных чисел
    srand(time(0));
 
    // Заполняем массив и выводим его
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            matrix[i][j] = rand() % 10;
            cout << matrix[i][j] << '\t';
        }
        cout << endl;
    }
 
    // Находим максимальный элемент каждой строки
    int max, // Индекс максимального элемента в строке
        tmp;
    for (int i = 0; i < n; i++) {
        max = 0;
        for (int j = 0; j < n; j++) {
            if (matrix[i][j] > matrix[i][max])
                max = j;
        }
        // Меняем местами максимальный и последний
        tmp = matrix[i][max];
        matrix[i][max] = matrix[i][n - 1];
        matrix[i][n - 1] = tmp;
    }
 
    // Выводим результат
    cout << endl;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)
            cout << matrix[i][j] << '\t';
        cout << endl;
    }
 
    return 0;
}
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
03.07.2010, 11:03     Квадратная матрица ! #3
лучше сделать так

C++
1
max=matrix[0][0];
прировнять элементу матрицы
[Freeman]
34 / 34 / 6
Регистрация: 07.06.2010
Сообщений: 118
03.07.2010, 11:30     Квадратная матрица ! #4
Я немного усложнил, переменную i_max можно было и не вводить, но рас уж написал то вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#define n 4
using namespace std;
int main()
{
    //обьявление и заполнение
    int arr[n][n]={{6,2,1,0},
                   {4,20,0,5},
                   {8,3,10,1},
                   {2,6,7,12}};
    // вывод матрицы
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++)
            cout<<arr[i][j]<<" ";
        cout<<endl; 
    }
// обработка
    int max,tmp,i_max,j_max;
    for(int i=0;i<n;i++)
    {
        max=arr[i][0]; i_max=i; j_max=0;
        for(int j=0;j<n;j++)
            if(arr[i][j]>max)
            {
                max=arr[i][j];
                i_max=i; j_max=j;
            }
        tmp=arr[i_max][j_max];
        arr[i_max][j_max]=arr[i][n-1];
        arr[i][n-1]=tmp;
    }
cout<<endl;
// повторный вывод с изменеиями
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++)
            cout<<arr[i][j]<<" ";
        cout<<endl; 
    }
return 0;
}
pannaruto
 Аватар для pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
03.07.2010, 23:54     Квадратная матрица ! #5
Вот думаю лучше разделить программу на функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <iomanip>
using namespace std;
 
#define max 50
 
// Нахождение наивольшего элемента в одной строке
int findPosBiggestNumberOfRow( int Array[][max], const int& n, const int& row )
{
    int pos = 0;
 
    for( int col = 1; col < n; col++ )
        if( Array[row][col] > Array[row][pos] )
            pos = col;
    return pos;
}
 
// Обмен двух целых чисел
void swap( int& a, int& b )
{
    int tmp = a;
    a = b;
    b = tmp;
}
 
// Вывод матрицы
void displayArray( int matrix[][max], const int& size )
{
    for( int row = 0; row < size; row++ )
    {
        for( int col = 0; col < size; col++ )
            cout << setw(4) << matrix[row][col];
        cout << endl;
    }
}
 
int main()
{
    int matrix[max][max];
    int size;
 
    // Инициализация матрицы
    cout << "Enter size of Matrix : ";
    cin >> size;
 
    for( int row = 0; row < size; row++ )
        for( int col = 0; col < size; col++ )
        {
            cout << "matrix[" << row << "][" << col << "] : ";
            cin >> matrix[row][col];
        }
 
    // Вывод дальной матрицы на экран
    cout << "\nInitial matrix :\n";
    displayArray( matrix, size );
 
    // Обмен элементов
    int pos;
    for( int row = 0; row < size; row++ )
    {
        pos = findPosBiggestNumberOfRow( matrix, size, row );
        if( pos != size - 1 )
            swap( matrix[row][pos], matrix[row][size - 1]);
    }
    
    // Вывод измененной матрицы 
    cout << "\nModified matrix\n";
    displayArray( matrix, size );
 
    system("pause");
    return 0;
}
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
04.07.2010, 01:44     Квадратная матрица ! #6
pannaruto, во-первых дефайнить нехорошо, во вторых зачем значения передавать по ссылке?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.07.2010, 05:50     Квадратная матрица ! #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <ctime>
    
inline int rand_num() { return rand() % 100; }
    
int main(){
    int ** matrix, size;
    std::cout << "Size: ";
    std::cin >> size;
    
    srand(time(NULL));
    std::cout << "Original matrix:" << std::endl;
    matrix = new int * [ size ];
    for ( int i = 0; i < size; ++i ){
        matrix[i] = new int [ size ];
        std::generate_n(matrix[i], size, rand_num);
        for ( int j = 0; j < size; ++j )
            std::cout << std::setw(2) << std::setfill('0') << std::right << matrix[i][j] << ' ';
        std::cout << std::endl;
    }
    
    std::cout << "Swap max and last elements:" << std::endl;
    for ( int i = 0; i < size; ++i ){
        int * last = matrix[i] + size - 1;
        int * me = (int*)std::max_element(matrix[i], matrix[i] + size);
        if ( me != last )
            std::swap(*me, *last);
        for ( int j = 0; j < size; ++j )
            std::cout << std::setw(2) << std::setfill('0') << std::right << matrix[i][j] << ' ';
        std::cout << std::endl;
    }
    
    for ( int i = 0; i < size; ++i )
        delete [] matrix[i];
    delete [] matrix;
    
    return 0;
}
pannaruto
 Аватар для pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
04.07.2010, 22:38     Квадратная матрица ! #8
Цитата Сообщение от fasked Посмотреть сообщение
во вторых зачем значения передавать по ссылке?
+ Функция swap() обменивает значения параметров поэтому необходимо передавать аргументы по ссылке
+ Остальные функции имеют два или три параметра и передаются параметры по ссылке чтобы избежать копирования данных и следовательно, чуть чуть повышается производительность. Так делать не очень нужно ну просто моя привычка ^_^. Однако, чтобы исключать изменения, например размеров матрицы, надо объявить их как константные.

Жду у всех идеи об этой проблемме !!!
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.07.2010, 23:25     Квадратная матрица ! #9
Цитата Сообщение от pannaruto Посмотреть сообщение
Остальные функции имеют два или три параметра и передаются параметры по ссылке чтобы избежать копирования данных и следовательно, чуть чуть повышается производительность.
При передаче int'а хоть по ссылке, хоть по значению будет передано 4 байта (обычно на 32-разрядных системах).
Цитата Сообщение от pannaruto Посмотреть сообщение
Однако, чтобы исключать изменения, например размеров матрицы, надо объявить их как константные.
Нет смысла передавать элементарные типы (char, int, double и т.п.) по константной ссылке, это, во-первых бесмысленно, а во-вторых, не принято. Передавай по значению. Не злоупотребляй ссылками и константами.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
05.07.2010, 00:28     Квадратная матрица ! #10
долго перечитывал пост CyBOSSeR, а потом посмотрел
Цитата Сообщение от pannaruto Посмотреть сообщение
const int& size
боже правый, const int size; делайте так как написали только для объектов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2010, 10:11     Квадратная матрица !
Еще ссылки по теме:

Квадратная матрица C++
C++ Квадратная матрица

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
pannaruto
 Аватар для pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
05.07.2010, 10:11     Квадратная матрица ! #11
Ой, CyBOSSeR, alex_x_x,всем огромное спасибо. Я ошибся.
Yandex
Объявления
05.07.2010, 10:11     Квадратная матрица !
Ответ Создать тему
Опции темы

Текущее время: 21:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru