Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 1
Регистрация: 26.11.2010
Сообщений: 111
1

Динамический массив

14.05.2011, 13:45. Показов 2169. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста решить следующую задачу с применением динамичкского массива:

Переставить столбцы вещественной квадратной матрицы так, чтобы элементы ее побочной диагонали образовали невозрастающую последовательность
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2011, 13:45
Ответы с готовыми решениями:

Динамический массив при наследовании, элементами которого являются объекты класса наследника динамический массив
Попробовал создать динамический массив, у которого элементы - объекты класса динамический массив,...

Динамический массив ,элементами которого являются объекты класса динамический массив
Доброго времени суток, захотел создать динамический массив ,элементами которого являются объекты...

Создать динамический класс Book, содержащий динамический массив Authors
Мне нужно написать программу,а я не знаю как ее написать. Знаю, тут люди за кого-то не делают,...

Создать динамический класс Book, содержащей динамический массив Authors
всем привет. может кто-то набросать код для такой вот задачи: Создать динамический класс Book,...

20
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
14.05.2011, 19:26 2
На примере этой матрицы сможете показать что должно получится?
1 4
5 2
0
0 / 0 / 1
Регистрация: 26.11.2010
Сообщений: 111
14.05.2011, 22:37  [ТС] 3
1 2 3 4 5 6
4 5 6 7 8 9
1 2 3 8 5 7
2 2 3 6 5 9
1 7 8 9 0 2
0 2 3 8 8 8
например задано,
побочная диагональ этой матрицы : 1 5 3 6 0 8
после обработки(перестановки элементов в строках) масив должен принять след-й вид :
6 1 2 3 4 5
4 5 6 7 8 9
1 2 5 3 8 7
2 2 3 5 6 9
1 7 8 9 2 0
0 3 8 8 8 2
побочная диагональ : 6 5 5 5 2 2 (невозрастающая последовательность)
вобщем по диагонали элементы массива должны идти по убывающей
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
14.05.2011, 22:52 4
Цитата Сообщение от ahamoth Посмотреть сообщение
1 2 3 4 5 6
4 5 6 7 8 9
1 2 3 8 5 7
2 2 3 6 5 9
1 7 8 9 0 2
0 2 3 8 8 8
например задано,
побочная диагональ этой матрицы : 1 5 3 6 0 8
Это на самом деле главная диагональ.
http://ru.wikipedia.org/wiki/Диагональ раздел "Матрицы".

И еще раз возвращаюсь к вопросу во 2-м сообщении.
0
0 / 0 / 1
Регистрация: 26.11.2010
Сообщений: 111
14.05.2011, 23:06  [ТС] 5
значит я ошибся , значит теже самые операции нужно проделать с побочной диаганалью которой является :
0 7 3 8 8 6

должно получиться - 6 6 5 5 2 2
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
14.05.2011, 23:09 6
ahamoth,
На примере этой матрицы сможете показать что должно получится?
1 4
5 2
0
0 / 0 / 1
Регистрация: 26.11.2010
Сообщений: 111
14.05.2011, 23:13  [ТС] 7
valeriikozlov ,
1 4
2 5
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
14.05.2011, 23:17 8
Цитата Сообщение от ahamoth Посмотреть сообщение
1 4
2 5
Цитата Сообщение от ahamoth Посмотреть сообщение
Переставить столбцы вещественной квадратной матрицы
Я не вижу здесь перестановки столбцов матрицы. А вижу перестановку элементов в одной строке.
Если переставлять столбцы, то для матрицы, которую я привел решения не существует.
0
0 / 0 / 1
Регистрация: 26.11.2010
Сообщений: 111
14.05.2011, 23:21  [ТС] 9
точно , извиняюсь за свою невнимательность . да для подобной матрицы решения не существует.
тогда если нет решения вывести сообщение об ошибке. еще раз извиняюсь за свою невнимательность
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
14.05.2011, 23:29 10
Задача не такая и простая как кажется. Например если использовать следующий алгоритм:
- ищем в первой строке максимальный элемент. Столбец с этим элементом ставим самым правым.
- ищем во второй строке максимальный элемент (но меньше, максимального в предыдущей строке). Столбец с этим элементом ставим слева от самого правого.
и т.д.
Этот алгоритм будет иногда давать результат что решения нет (хотя на самом деле оно будет).
Пока вижу только полный перебор.
Сами что-нибудь уже сотворили?
0
0 / 0 / 1
Регистрация: 26.11.2010
Сообщений: 111
14.05.2011, 23:37  [ТС] 11
Честно сказать с динамическими массивами не разобрался еще . и не знаю как сделать чтобы столбцы менять местами
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
14.05.2011, 23:44 12
создание и заполнение значениями вещественной квадратной матрицы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int N, i, j;
cout<<"N= ";
cin>>N;
double **mas=new double*[N];
for(i=0; i<N; i++)
{
    mas[i]=new double[N];
    for(j=0; j<N; j++)
    {
        cout<<"["<<i"]["<<j"]= ";
        cin>>mas[i][j];
    }
}
Обмен значений столбцов с индексом w и индеком q:
C++
1
2
3
4
for(int i=0; i<N; i++)
{
    double tmp=mas[i][q]; mas[i][q]=mas[i][w]; mas[i][w]=tmp;
}
1
0 / 0 / 1
Регистрация: 26.11.2010
Сообщений: 111
15.05.2011, 00:08  [ТС] 13
не совсем понятно как програмно реализовать чтобы производился поиск максимального элемента в строке и одновременно максимвльный элемент в i+1 строке ставился по диагонале а вместе с ним и переставлялся нужный столб
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
15.05.2011, 00:49 14
Цитата Сообщение от ahamoth Посмотреть сообщение
не совсем понятно как програмно реализовать чтобы производился поиск максимального элемента в строке и одновременно максимвльный элемент в i+1 строке ставился по диагонале а вместе с ним и переставлялся нужный столб
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
for(int i=0; i<N; i++)// перебираем строки
{
    int tmp=-1;
    if(i==0)
        tmp=0;
    for(j=0; j<N; j++)
    {
        if(mas[i][j]>mas[i][tmp])
        {
            if(i==0)
                tmp=j;
            else
                if(mas[i][j]<=mas[i-1][n-1-i])
                    tmp=j;
        }
    }
    //теперь в tmp номер столбца с максимальным элементом
    // меняем столбцы
    double temp;
    for(j=0; j<N; j++)
    {
        temp=mas[j][N-1-i];
        mas[j][N-1-i]=mas[j][tmp];
        mas[j][tmp]=temp;
    }
}
1
0 / 0 / 1
Регистрация: 26.11.2010
Сообщений: 111
15.05.2011, 17:01  [ТС] 15
valeriikozlov , программа при компиляции ошибку выдает
0
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
15.05.2011, 17:15 16
Цитата Сообщение от ahamoth Посмотреть сообщение
valeriikozlov , программа при компиляции ошибку выдает
это не полный листинг.
объяви переменные напиши все это в main и будет работать
0
0 / 0 / 1
Регистрация: 26.11.2010
Сообщений: 111
15.05.2011, 17:23  [ТС] 17
да как бе описано все, я программу запускаю , заполняю в ней массив, а дальше программа вылетает
0
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
15.05.2011, 17:28 18
Цитата Сообщение от ahamoth Посмотреть сообщение
да как бе описано все, я программу запускаю , заполняю в ней массив, а дальше программа вылетает
покажите полный код
0
0 / 0 / 1
Регистрация: 26.11.2010
Сообщений: 111
15.05.2011, 17:29  [ТС] 19
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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{int N, i, j,n;
cout<<"N= ";
cin>>N;
double **mas=new double*[N];
for(i=0; i<N; i++)
{
        mas[i]=new double[N];
        for(j=0; j<N; j++)
        {
                //cout<<"["<<i"]["<<j"]= ";
                cin>>mas[i][j];
        }
}
 
for(i=0; i<N; i++)
  {for(j=0; j<N; j++)
    cout<<mas[i][j];
    cout<<endl;
}
for(int i=0; i<N; i++)// ïåðåáèðàåì ñòðîêè
{
        int tmp;
        if(i==0)
                tmp=0;
        for(j=0; j<N; j++)
        {
                if(mas[i][j]>mas[i][tmp])
                {
                        if(i==0)
                                tmp=j;
                        else
                                if(mas[i][j]<=mas[i-1][n-1-i])
                                        tmp=j;
                }
        }
        //òåïåðü â tmp íîìåð ñòîëáöà ñ ìàêñèìàëüíûì ýëåìåíòîì
        // ìåíÿåì ñòîëáöû
        double temp;
        for(j=0; j<N; j++)
        {
                temp=mas[j][N+1+i];
                mas[j][N+1+i]=mas[j][tmp];
                mas[j][tmp]=temp;
        }
}
 
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
15.05.2011, 17:56 20
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 <cstdlib>
#include <iostream>
#include <iomanip>
using namespace std;
 
int main(int argc, char *argv[])
{
    int N, i, j,n = 0;
    cout<<"N= ";
    cin>>N;
    double **mas=new double*[N];
    for(i=0; i<N; i++)
    {
            mas[i]=new double[N];
            for(j=0; j<N; j++)
            {
                    //cout<<"["<<i"]["<<j"]= ";
                    cin>>mas[i][j];
            }
    }
     
    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)
        {
            cout<<setw(5)<<mas[i][j];
        }
        cout<<endl;
    }
    cout<<endl;
    int tmp=-1;
    for(int i=0; i<N; i++)// перебираем строки
    {
            
            if(i==0)
                    tmp=0;
            for(j=0; j<N; j++)
            {
                    if(mas[i][j]>mas[i][tmp])
                    {
                            if(i==0)
                                    tmp=j;
                            else
                                    if(mas[i][j]<=mas[i-1][n-1-i])
                                            tmp=j;
                    }
            }
            //теперь в tmp номер столбца с максимальным элементом
            // меняем столбцы
            double temp;
            for(j=0; j<N; j++)
            {
                    temp=mas[j][N-1-i];
                    mas[j][N-1-i]=mas[j][tmp];
                    mas[j][tmp]=temp;
            }
    }
 
    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)
        {
            cout<<setw(5)<<mas[i][j];
        }
        cout<<endl;
    }
    for(i=0; i<N; i++)
        delete []mas[i];
    delete []mas;
    system("PAUSE");
    return EXIT_SUCCESS;
}
может так....
0
15.05.2011, 17:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2011, 17:56
Помогаю со студенческими работами здесь

Скопировать динамический массив в другой массив только с положительными элементами из первого
Пользователь вводит размер массива и сам массив. Программа копирует в другой массив только...

Можно ли в классе создавать массив переменной длинны. Например динамический массив?
Динамические массивы привлекают больше. :)

Динамический массив: целое число разложить на массив простых множителей
Доброго времени суток всем. Целое число необходимо разложить на массив простых множителей....

Написать функцию принимающую массив и возвращающую указатель на динамический массив
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru