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

двумерный массив - C++

Восстановить пароль Регистрация
 
Blacktender
0 / 0 / 0
Регистрация: 14.05.2010
Сообщений: 21
04.06.2010, 11:55     двумерный массив #1
Найти минимальный элемент среди максимальных элементов строк матрицы. Вывести номер строки и столбца для такого элемента(Размерность матрицы задаётся пользователем)

прошу помощи.)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
enigmatic
46 / 29 / 2
Регистрация: 27.02.2010
Сообщений: 202
04.06.2010, 13:24     двумерный массив #2
как-то так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    x=a[1][1];
    z=a[1][1];
    for (i=1; i<6; i++)
        for (j=1; j<6; j++) 
        {
            if (a[i][j]>x) 
            {
                x=a[i][j];
                k=i;
                l=j;
            } 
            if (a[i][j]<z) 
            {
                z=a[i][j];
                m=i;
                n=j;
            }
    }
    cout<<"максимальный элемент "<< a[k][l] <<"\n";
    cout<<"минимальный элемент "<< a[m][n] <<"\n";
тут совмещенное, ну думаю сможете вычленить необходимое
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.06.2010, 17:52     двумерный массив #3
о, как!
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
73
74
75
76
77
#include <iostream>
#include <iomanip>
#include <set>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <ctime>
 
template <typename T>
class Element {
    T _value;
    int _row;
    int _column;
public:
    Element(T v, int r, int c) : _value(v), _row(r), _column(c) {}
    Element() : _value(), _row(-1), _column(-1) {}
    ~Element() {}
    bool operator == (const Element & another) const {
        return _value == another._value;
    }
    bool operator < (const Element & another) const {
        return _value < another._value;
    }
    friend std::ostream & operator << (std::ostream & ost, const Element & e) {
        ost << std::left << std::setw(6) << e._value << std::setw(4) << e._row << e._column;
        return ost;
    }
};
 
int rand_num(){
    return rand() % 100;
}
 
int main(){
    int rows;
    int columns;
    int **matrix;
 
    std::cout << "Rows: ";
    std::cin >> rows;
    std::cout << "Columns: ";
    std::cin >> columns;
 
    srand(time(NULL));
 
    matrix = new int * [ rows ];
    for ( int i = 0; i < rows; ++i ){
        matrix[i] = new int [ columns ];
        std::generate_n(matrix[i], columns, rand_num);
    }
    std::cout << "Matrix:" << std::endl;
    std::cout << std::right;
    for ( int i = 0; i < rows; ++i ){
        for ( int j = 0; j < columns; ++j )
            std::cout << std::setw(2) << std::setfill('0') << matrix[i][j] << ' ';
        std::cout << std::endl;
    }
 
    std::cout << "Maximum elements in ascendant order:" << std::endl;
    std::cout << "(indexes of row and column starts by 0)" << std::endl;
    std::cout << "Value Row Column" << std::endl << "------------------------------" << std::endl;
 
    std::multiset<Element<int> > set;
    for ( int i = 0; i < rows; ++i ){
        int * mxe = (int*)std::max_element(matrix[i], matrix[i] + columns);
        set.insert(Element<int>(*mxe, i, mxe - matrix[i]));
    }
 
    std::cout << std::setfill(' ');
    std::copy(set.begin(), set.end(), std::ostream_iterator<Element<int> >(std::cout, "\n"));
 
    for ( int i = 0; i < rows; ++i )
        delete [] matrix[i];
    delete [] matrix;
 
    return 0;
}
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
04.06.2010, 17:56     двумерный массив #4
31 строка:
C++
1
return rand() % 100;
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.06.2010, 18:03     двумерный массив #5
neske, Спасибо, поправил. Интересно, почему и так работало?
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
04.06.2010, 18:06     двумерный массив #6
в Code Blocks не работало)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.06.2010, 18:09     двумерный массив #7
Цитата Сообщение от easybudda Посмотреть сообщение
Интересно, почему и так работало?
А вот, почему!
man random
RANDOM(3) BSD Library Functions Manual RANDOM(3)

NAME
random, srandom, srandomdev, initstate, setstate -- better random number
generator; routines for changing generators

LIBRARY
Standard C Library (libc, -lc)

SYNOPSIS
#include <stdlib.h>

long
random(void);

void
srandom(unsigned long seed);
...
тоесть было даже лучше... %)

Добавлено через 1 минуту
Цитата Сообщение от neske Посмотреть сообщение
в Code Blocks не работало)
если бы не это...
Blacktender
0 / 0 / 0
Регистрация: 14.05.2010
Сообщений: 21
04.06.2010, 18:31  [ТС]     двумерный массив #8
ребят, у меня после ввода размерности матрицы программа вылетает.
что сделать?
Blacktender
0 / 0 / 0
Регистрация: 14.05.2010
Сообщений: 21
04.06.2010, 18:59  [ТС]     двумерный массив #9
=)
блин, у меня тоже самое, вылетает(
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.06.2010, 19:03     двумерный массив #10
Blacktender, что вылетает? куда вылетает? на трёх разных ОС проверял, включая винду. за исключением косяка с выводом (к однозначным числам ноль не с той стороны пририсовывался) всё работает. Мало того - в винде мелкомягким компилятором компилил от MSVS 2005. Пишите подробнее по пунктам, что делаете, что происходит. И кстати среду разработки упомянуть не забудьте...
Blacktender
0 / 0 / 0
Регистрация: 14.05.2010
Сообщений: 21
04.06.2010, 19:06  [ТС]     двумерный массив #11
borland!
компилирует, вылазает окошко (как обычно ) где идет выполнение задачи, ввожу rows и column >enter и всё окошечко исчезает..=(

Добавлено через 22 секунды
раньше такого не было
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.06.2010, 19:08     двумерный массив #12
День догадок у меня сегодня...

Blacktender, Отсортировать массив по убыванию и по возрастанию - Ваш случай!
А вообще http://www.cyberforum.ru/cpp-beginners/thread10807.html прям в шапке висит, чтоб все видели...
Blacktender
0 / 0 / 0
Регистрация: 14.05.2010
Сообщений: 21
04.06.2010, 19:21  [ТС]     двумерный массив #13
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
73
74
75
76
77
#include <iostream>
#include <iomanip>
#include <set>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <ctime>
 
template <typename T>
class Element {
    T _value;
    int _row;
    int _column;
public:
    Element(T v, int r, int c) : _value(v), _row(r), _column(c) {}
    Element() : _value(), _row(-1), _column(-1) {}
    ~Element() {}
    bool operator == (const Element & another) const {
        return _value == another._value;
    }
    bool operator < (const Element & another) const {
        return _value < another._value;
    }
    friend std::ostream & operator << (std::ostream & ost, const Element & e) {
        ost << std::left << std::setw(6) << e._value << std::setw(4) << e._row << e._column;
        return ost;
    }
};
 
int rand_num(){
    return rand() % 100;
}
 
int main(){
    int rows;
    int columns;
    int **matrix;
 
    std::cout << "Rows: ";
    std::cin >> rows;
    std::cout << "Columns: ";
    std::cin >> columns;
 
    srand(time(NULL));
 
    matrix = new int * [ rows ];
    for ( int i = 0; i < rows; ++i ){
        matrix = new int [ columns ];
        std::generate_n(matrix, columns, rand_num);
    }
    std::cout << "Matrix:" << std::endl;
    std::cout << std::right;
    for ( int i = 0; i < rows; ++i ){
        for ( int j = 0; j < columns; ++j )
            std::cout << std::setw(2) << std::setfill('0') << matrix[j] << ' ';
        std::cout << std::endl;
    }
 
    std::cout << "Maximum elements in ascendant order:" << std::endl;
    std::cout << "(indexes of row and column starts by 0)" << std::endl;
    std::cout << "Value Row Column" << std::endl << "------------------------------" << std::endl;
 
    std::multiset<Element<int> > set;
    for ( int i = 0; i < rows; ++i ){
        int * mxe = (int*)std::max_element(matrix, matrix + columns);
        set.insert(Element<int>(*mxe, i, mxe - matrix));
    }
 
    std::cout << std::setfill(' ');
    std::copy(set.begin(), set.end(), std::ostream_iterator<Element<int> >(std::cout, "\n"));
 
    for ( int i = 0; i < rows; ++i )
        delete [] matrix;
    delete [] matrix;
 
    return 0;
}
теперь вообще ошибку выдает =( в этой строчке: matrix = new int [ columns ];

([C++ Error] Unit1.cpp(48): E2034 Cannot convert 'int *' to 'int * *')
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.06.2010, 19:41     двумерный массив #14
Цитата Сообщение от Blacktender Посмотреть сообщение
теперь вообще ошибку выдает =( в этой строчке: matrix = new int [ columns ];
Это Вы как копировали?
Цитата Сообщение от easybudda Посмотреть сообщение
C++
1
2
3
4
matrix = new int * [ rows ]; 
for ( int i = 0; i < rows; ++i ){
  matrix[i] = new int [ columns ];
...
Добавлено через 10 минут
Цитата Сообщение от Blacktender Посмотреть сообщение
C++
1
2
for ( int i = 0; i < rows; ++i )
 delete [] matrix;
Опять косяк! У меня вот, как:
Цитата Сообщение от easybudda Посмотреть сообщение
C++
1
2
for ( int i = 0; i < rows; ++i )
 delete [] matrix[i];
Действительно проблема отсюда скопировать, добавить к заголовкам
C++
1
#include <conio.h>
а перед
C++
1
return 0;
вставить
C++
1
getch();
?
Blacktender
0 / 0 / 0
Регистрация: 14.05.2010
Сообщений: 21
04.06.2010, 20:00  [ТС]     двумерный массив #15
(((((

set.insert(Element<int>(*mxe, i, mxe - matrix));

[C++ Error] Unit1.cpp(79): E2034 Cannot convert 'int * *' to 'int *'

Добавлено через 5 минут
ну я наверно надоела с этой задачей=(
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.06.2010, 20:04     двумерный массив #16
Цитата Сообщение от Blacktender Посмотреть сообщение
ну я наверно надоела с этой задачей=(
да, есть немного
вот
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
73
74
75
76
77
78
79
#include <iostream>
#include <iomanip>
#include <set>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <ctime>
#include <conio.h>
 
template <typename T>
class Element {
    T _value;
    int _row;
    int _column;
public:
    Element(T v, int r, int c) : _value(v), _row(r), _column(c) {}
    Element() : _value(), _row(-1), _column(-1) {}
    ~Element() {}
    bool operator == (const Element & another) const {
        return _value == another._value;
    }
    bool operator < (const Element & another) const {
        return _value < another._value;
    }
    friend std::ostream & operator << (std::ostream & ost, const Element & e) {
        ost << std::left << std::setw(6) << e._value << std::setw(4) << e._row << e._column;
        return ost;
    }
};
 
int rand_num(){
    return rand() % 100;
}
 
int main(){
    int rows;
    int columns;
    int **matrix;
 
    std::cout << "Rows: ";
    std::cin >> rows;
    std::cout << "Columns: ";
    std::cin >> columns;
 
    srand(time(NULL));
 
    matrix = new int * [ rows ];
    for ( int i = 0; i < rows; ++i ){
        matrix[i] = new int [ columns ];
        std::generate_n(matrix[i], columns, rand_num);
    }
    std::cout << "Matrix:" << std::endl;
    std::cout << std::right;
    for ( int i = 0; i < rows; ++i ){
        for ( int j = 0; j < columns; ++j )
            std::cout << std::setw(2) << std::setfill('0') << matrix[i][j] << ' ';
        std::cout << std::endl;
    }
 
    std::cout << "Maximum elements in ascendant order:" << std::endl;
    std::cout << "(indexes of row and column starts by 0)" << std::endl;
    std::cout << "Value Row Column" << std::endl << "------------------------------" << std::endl;
 
    std::multiset<Element<int> > set;
    for ( int i = 0; i < rows; ++i ){
        int * mxe = (int*)std::max_element(matrix[i], matrix[i] + columns);
        set.insert(Element<int>(*mxe, i, mxe - matrix[i]));
    }
 
    std::cout << std::setfill(' ');
    std::copy(set.begin(), set.end(), std::ostream_iterator<Element<int> >(std::cout, "\n"));
 
    for ( int i = 0; i < rows; ++i )
        delete [] matrix[i];
    delete [] matrix;
 
    getch();
    return 0;
}
мышкой выделяйте копируйте, вставляйте в свой редактор, ничего не меняя сохраняйте, компилируйте, запускайте.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2010, 20:09     двумерный массив
Еще ссылки по теме:

Двумерный массив.упорядочить массив по убыванию C++
Двумерный массив C++

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

Или воспользуйтесь поиском по форуму:
Blacktender
0 / 0 / 0
Регистрация: 14.05.2010
Сообщений: 21
04.06.2010, 20:09  [ТС]     двумерный массив #17
я так и копировала мышом

Теперь всё идеально работает!!
Очень вам благодарна!!слов нет!!
Yandex
Объявления
04.06.2010, 20:09     двумерный массив
Ответ Создать тему
Опции темы

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