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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
#1

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

15.06.2011, 02:40. Просмотров 3888. Ответов 20
Метки нет (Все метки)

ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ!!! ОЧЕНЬ НАДО!!!
Условие следующие:
Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине - в позиции (2,2), следующий по величине- в позиции (3,3) и т.д. , заполнив таким образом всю главную диагональ. Найти номер первой из строк, не содержащих ни одного положительного элемента.



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

Переставляя строки матрицы добиться результата - C++
С помощью перестановки элементов матрицы добиться того, что бы ее максимальный элемент находился на позиции в позиции (0,n), следующий по...

Переставляя строки и столбцы матрицы, добиться, чтобы наибольший элемент оказался в верхнем левом углу - C++
Дана вещественная матрица A размером 7*4. Переставляя ее строки и столбцы,добиться того,чтобы наибольший элемент (один из них) оказался в...

Переставляя строки и столбцы, добиться того, чтобы наибольший элемент матрицы оказался в правом нижнем углу - C++
Сформировать матрицу B(M,N) элементами которой являются случайные числа, равномерно распределённые в интервале (-5,7). Переставляя её...

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

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

Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, распол - C++
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 05:08 #2
смотри здесь
1
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 05:37  [ТС] #3
soon, спасибо большое))) только не подскажешь, что там за 2 ошибки при запуске выдает?
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 05:48 #4
напиши, какие ошибки и строки
0
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)
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 06:06 #6
объявите i и j в самом начале, затем, во всех последующих циклах уберите перед i и j int
0
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, Вы извините , если я вас сильно загрузила, просто я в этом плохо разбираюсь(а если точнее, то почти совсем не разбираюсь), а задание сдать надо.
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 07:54 #8
Цитата Сообщение от nuri Посмотреть сообщение
если я вас сильно загрузила
нет, что вы
напишите, какой у вас компилятор, мой код, который вы исправили, и любой свой работающий код.
0
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 минуту
а какой любой работающий код? по другому заданию?
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 08:22 #10
а где во второй задаче заголовочный файл iostream?
он вообще подключен?
0
nuri
0 / 0 / 0
Регистрация: 01.05.2011
Сообщений: 63
15.06.2011, 08:30  [ТС] #11
soon, да подключен просто я плохо скопировала.
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2011, 08:33 #12
скиньте любой работающий у вас код.
ps/ Странно... У меня все вводит и выводит...
0
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 секунды
может вы мне еще раз скинете тот код который вы вводите и я его попробую снова запустить
0
soon
2540 / 1305 / 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()
0
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 менять не надо, а то тоже ошибку выдает
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2011, 09:02
Привет! Вот еще темы с ответами:

Отсортировать массив по возрастанию, не переставляя элементы - C++
Имеется массив А из n чисел. Вам нужно всего лишь отсортировать его(строго по возрастанию). Правда, вы не можете менять местами элементы,...

Динамический массив. Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы - C++
#include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;string.h&gt; int kol_vo(int **a, int n, int m); int main() { int...

Переставляя столбцы матрицы расположить по росту характеристик - C++
характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. переставляя столбцы матрицы...

Переставляя столбцы матрицы, расположить их по росту характеристик - C++
Сделал программу по заданию&quot;характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.06.2011, 09:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru