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

Переставляя элементы матрицы, добиться результата - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 02:40     Переставляя элементы матрицы, добиться результата #1
ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ!!! ОЧЕНЬ НАДО!!!
Условие следующие:
Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине - в позиции (2,2), следующий по величине- в позиции (3,3) и т.д. , заполнив таким образом всю главную диагональ. Найти номер первой из строк, не содержащих ни одного положительного элемента.



P.S: Напишите, если не сложно код данной программы, буду очень признательна) А то если честно я и задание плохо понимаю
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2011, 02:40     Переставляя элементы матрицы, добиться результата
Посмотрите здесь:

Переставляя столбцы матрицы расположить по росту характеристик C++
Переставляя строки и столбцы матрицы, добиться, чтобы наибольший элемент оказался в верхнем левом углу C++
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, распол C++
Переставляя строки матрицы добиться результата C++
Добиться того, чтобы один из элементов матрицы, обладающий наибольшим по модулю значением, располагался в левом верхнем углу матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 05:08     Переставляя элементы матрицы, добиться результата #2
смотри здесь
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 05:37  [ТС]     Переставляя элементы матрицы, добиться результата #3
soon, спасибо большое))) только не подскажешь, что там за 2 ошибки при запуске выдает?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 05:48     Переставляя элементы матрицы, добиться результата #4
напиши, какие ошибки и строки
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 06:02  [ТС]     Переставляя элементы матрицы, добиться результата #5
soon, там по моему дело не в программе. Выдает вот что:
-------------------Configuration: l_4v17 - Win32 Debug--------------------
Compiling...
4.cpp
g:\лабораторные работы с+++\l_4v17\4.cpp(41) : error C2374: 'i' : redefinition; multiple initialization
g:\лабораторные работы с+++\l_4v17\4.cpp(11) : see declaration of 'i'
g:\лабораторные работы с+++\l_4v17\4.cpp(47) : error C2374: 'i' : redefinition; multiple initialization
g:\лабораторные работы с+++\l_4v17\4.cpp(11) : see declaration of 'i'
Error executing cl.exe.

l_4v17.exe - 2 error(s), 0 warning(s)
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 06:06     Переставляя элементы матрицы, добиться результата #6
объявите i и j в самом начале, затем, во всех последующих циклах уберите перед i и j int
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 06:29  [ТС]     Переставляя элементы матрицы, добиться результата #7
soon, объявила,убрала, теперь всего одна ошибка: error C2065: 'count' : undeclared identifier

Добавлено через 15 минут
soon, я задала переменную count, ошибок нет но после запуска он ничего вводить не дает

Добавлено через 1 минуту
soon, Вы извините , если я вас сильно загрузила, просто я в этом плохо разбираюсь(а если точнее, то почти совсем не разбираюсь), а задание сдать надо.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 07:54     Переставляя элементы матрицы, добиться результата #8
Цитата Сообщение от nuri Посмотреть сообщение
если я вас сильно загрузила
нет, что вы
напишите, какой у вас компилятор, мой код, который вы исправили, и любой свой работающий код.
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 08:18  [ТС]     Переставляя элементы матрицы, добиться результата #9
soon, это ваш код:
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <iostream>
#include <iomanip>
 
int main()
{
    int n;
    std::cin >> n;
    float** arr = new float* [n];
    float max;
    int i_max, j_max;
    for (int i = 0; i < n; ++i)
    {
        arr[i] = new float [n];
        for (int j = 0; j < n; ++j)
        {
            std::cin >> arr[i][j];
            if (((!i) && (!j)) || (arr[i][j] > max))
            {
                max = arr[i][j];
                i_max = i;
                j_max = j;
            }
        }
    }
    arr[i_max][j_max] = arr[0][0]; 
    arr[0][0] = max;
    for (int count = 1; count < n; ++count)
    {
        max = arr[0][1];
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < n; ++j)
                if (((i != j) || ((i >= count) && (j >= count))) && (arr[i][j] > max))
                {
                    max = arr[i][j];
                    i_max = i;
                    j_max = j;
                }
        arr[i_max][j_max] = arr[count][count]; 
        arr[count][count] = max;
    }
    for (int i = 0; i < n; ++i)
    {
            for (int j = 0; j < n; ++j)
                std::cout << std::setw(5) << arr[i][j];
            std::cout << std::endl;
    }
    for (int i = 0; i < n; ++i)
    {
        int count = 0;
            for (int j = 0; j < n; ++j)
                if (arr[i][j] < 0)
                    ++count;
            if (count == n)
            {
                std::cout << "line #" << i + 1 << " has no positive numbers\n";
                system("pause");
                return 0;
            }
    }
    std::cout << "all lines have positive numbers\n";
    system("pause");
    return 0;
}
 
[size="1"][color="grey"][I]Добавлено через 1 минуту[/I][/color][/size]
[b]soon[/b], мой(точнее ваш) исправленный код:
#include <iomanip>
 
int main()
{
    int n,i,j;
    std::cin >> n;
    float** arr = new float* [n];
    float max;
    int i_max, j_max,count;
    for ( i = 0; i < n; ++i)
    {
        arr[i] = new float [n];
        for ( j = 0; j < n; ++j)
        {
            std::cin >> arr[i][j];
            if (((!i) && (!j)) || (arr[i][j] > max))
            {
                max = arr[i][j];
                i_max = i;
                j_max = j;
            }
        }
    }
    arr[i_max][j_max] = arr[0][0]; 
    arr[0][0] = max;
    for ( count = 1; count < n; ++count)
    {
        max = arr[0][1];
        for ( i = 0; i < n; ++i)
            for ( j = 0; j < n; ++j)
                if (((i != j) || ((i >= count) && (j >= count))) && (arr[i][j] > max))
                {
                    max = arr[i][j];
                    i_max = i;
                    j_max = j;
                }
        arr[i_max][j_max] = arr[count][count]; 
        arr[count][count] = max;
    }
    for ( i = 0; i < n; ++i)
    {
            for ( j = 0; j < n; ++j)
                std::cout << std::setw(5) << arr[i][j];
            std::cout << std::endl;
    }
    for ( i = 0; i < n; ++i)
    {
        int count = 0;
            for ( j = 0; j < n; ++j)
                if (arr[i][j] < 0)
                    ++count;
            if (count == n)
            {
                std::cout << "line #" << i + 1 << " has no positive numbers\n";
                system("pause");
                return 0;
            }
    }
    std::cout << "all lines have positive numbers\n";
    system("pause");
    return 0;
}
Добавлено через 1 минуту
а какой любой работающий код? по другому заданию?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 08:22     Переставляя элементы матрицы, добиться результата #10
а где во второй задаче заголовочный файл iostream?
он вообще подключен?
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 08:30  [ТС]     Переставляя элементы матрицы, добиться результата #11
soon, да подключен просто я плохо скопировала.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 08:33     Переставляя элементы матрицы, добиться результата #12
скиньте любой работающий у вас код.
ps/ Странно... У меня все вводит и выводит...
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 08:39  [ТС]     Переставляя элементы матрицы, добиться результата #13
soon, например вот этот:
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
80
#include "math.h"
#include "iostream.h"
#include "stdlib.h"
#include "time.h"
void main ()
{
const int n=10, m=10;
int arr [n][m];
int i, j;
int iCountLM=0;
bool flag;
int iSummAbsUpMain=0;
srand(time(NULL));
cout << "\n matrica randomnay obyknovennaya\n";
for (i=0 ; i<n; i++)
{
for (j=0; j<m; j++)
{
arr[i][j]= -100+rand()%201;
cout << arr[i][j] << " ";
}
cout << endl;
}
for (i=0 ; i<n; i++)
{
for (j=0; j<m; j++)
{
flag = true; 
if (!(i-1<0))
{
if (arr[i][j]>=arr[i-1][j-1]) flag = false;
}
// up
if (!(i-1<0))
{
if (arr[i][j]>=arr[i-1][j]) flag = false;
}
//right up
if (!(j>m-1))
{
if (arr[i][j]>=arr[i-1][j+1]) flag = false;
}
//right
if (!(j+1>m-1))
{
if (arr[i][j]>=arr[i][j+1]) flag = false;
}
//ritht down
if (!(j+1>m-1))
{
if (arr[i][j]>=arr[i+1][j+1]) flag = false;
}
//down
if (!(i+1>n-1))
{
if (arr[i][j]>=arr[i+1][j]) flag = false;
}
//left down
if (!(i+1>n-1))
{
if (arr[i][j]>=arr[i+1][j-1]) flag = false;
}
//left
if (!(j<0))
{
if (arr[i][j]>=arr[i][j-1]) flag = false;
}
if (flag) iCountLM+=1;
}
}
cout << "\n koli4estvo lok min  " << iCountLM<< endl;
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
if (j>i) iSummAbsUpMain+=abs(arr[i][j]);
}
}
cout << "\n summa nad glav diagon  " << iSummAbsUpMain<< endl;
}
Добавлено через 52 секунды
может вы мне еще раз скинете тот код который вы вводите и я его попробую снова запустить
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 08:41     Переставляя элементы матрицы, добиться результата #14
ага
меняйте в моем коде следующее
1) <iostream> на "iostream.h" (аналогично iomanip)
2) уберите все std:: (перед cin, cout, endl)
3) замените int main() на void main()
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 09:02  [ТС]     Переставляя элементы матрицы, добиться результата #15
soon, я вроде сделала как вы сказали вот код:
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
#include <iostream.h>
#include <iomanip.h>
 
int main()
{
    int n,i,j;
    cin >> n;
    float** arr = new float* [n];
    float max;
    int i_max, j_max,count;
    for ( i = 0; i < n; ++i)
    {
        arr[i] = new float [n];
        for ( j = 0; j < n; ++j)
        {
            cin >> arr[i][j];
            if (((!i) && (!j)) || (arr[i][j] > max))
            {
                max = arr[i][j];
                i_max = i;
                j_max = j;
            }
        }
    }
    arr[i_max][j_max] = arr[0][0]; 
    arr[0][0] = max;
    for ( count = 1; count < n; ++count)
    {
        max = arr[0][1];
        for ( i = 0; i < n; ++i)
            for ( j = 0; j < n; ++j)
                if (((i != j) || ((i >= count) && (j >= count))) && (arr[i][j] > max))
                {
                    max = arr[i][j];
                    i_max = i;
                    j_max = j;
                }
        arr[i_max][j_max] = arr[count][count]; 
        arr[count][count] = max;
    }
    for ( i = 0; i < n; ++i)
    {
            for ( j = 0; j < n; ++j)
                cout << setw(5) << arr[i][j];
            cout << endl;
    }
    for ( i = 0; i < n; ++i)
    {
        int count = 0;
            for ( j = 0; j < n; ++j)
                if (arr[i][j] < 0)
                    ++count;
            if (count == n)
            {
                cout << "line #" << i + 1 << " has no positive numbers\n";
                system("pause");
                return 0;
            }
    }
    cout << "all lines have positive numbers\n";
    system("pause");
    return 0;
}

Но выдает одну ошибку:error C2065: 'system' : undeclared identifier

Добавлено через 55 секунд
main на void main менять не надо, а то тоже ошибку выдает
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 09:03     Переставляя элементы матрицы, добиться результата #16
уберите system("pause")
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 09:11  [ТС]     Переставляя элементы матрицы, добиться результата #17
soon, спасибо огромное все работает!
У меня еще одна просьба не могли бы вы скинуть(если вам не сложно) результат программы, а то я не до конца понимаю, какие элементы матрицы я должна ввести и какой результат должен быть
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 09:15     Переставляя элементы матрицы, добиться результата #18
к примеру вот такие:
Миниатюры
Переставляя элементы матрицы, добиться результата  
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 09:20  [ТС]     Переставляя элементы матрицы, добиться результата #19
soon, Еще раз огромное спасибо, все поняла!!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2011, 09:42     Переставляя элементы матрицы, добиться результата
Еще ссылки по теме:

C++ Дана (построчно) вещественная матрица размером МхН. Переставляя ее строки и столбцы, добиться того, чтобы наибольший
Переставляя строки и столбцы, добиться того, чтобы наибольший элемент матрицы оказался в правом нижнем углу C++
Отсортировать массив по возрастанию, не переставляя элементы C++

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

Или воспользуйтесь поиском по форуму:
Петр91
4 / 4 / 1
Регистрация: 17.05.2010
Сообщений: 108
15.06.2011, 09:42     Переставляя элементы матрицы, добиться результата #20
Народ, не пойму в чем дело!!!?? Не хочет сравнивать элемент массива!
Код
int i=0;
double x,a=0;
double be[101][2];
for (i=0;i<101;i++)
{
	be[i][0]=a;
	a=a+0.1;
}
Создал двумерный массив, забил первую строку числами. Теперь проверяю кое что
cout<<be[10][0]; - Выводит единицу, обычную простую единицу.
Пишy:
if (be[10][0]==1)
cout<<"Winner!';
И не работает мать его! Как так??
Yandex
Объявления
15.06.2011, 09:42     Переставляя элементы матрицы, добиться результата
Ответ Создать тему
Опции темы

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