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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
#1

Динамический массив - C++

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

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

Переставить столбцы вещественной квадратной матрицы так, чтобы элементы ее побочной диагонали образовали невозрастающую последовательность
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2011, 13:45     Динамический массив
Посмотрите здесь:

C++ статический массив ----> динамический массив
C++ Динамический массив
Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла C++
динамический массив (Целое число разложить на массив простых множителей) C++
Создать динамический массив (Если чётных чисел больше, то массив должен быть укорочен на 2 элемента) C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив C++
C++ Переделать динамический массив на статический массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.05.2011, 19:26     Динамический массив #2
На примере этой матрицы сможете показать что должно получится?
1 4
5 2
ahamoth
0 / 0 / 0
Регистрация: 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 (невозрастающая последовательность)
вобщем по диагонали элементы массива должны идти по убывающей
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
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-м сообщении.
ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
14.05.2011, 23:06  [ТС]     Динамический массив #5
значит я ошибся , значит теже самые операции нужно проделать с побочной диаганалью которой является :
0 7 3 8 8 6

должно получиться - 6 6 5 5 2 2
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.05.2011, 23:09     Динамический массив #6
ahamoth,
На примере этой матрицы сможете показать что должно получится?
1 4
5 2
ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
14.05.2011, 23:13  [ТС]     Динамический массив #7
valeriikozlov ,
1 4
2 5
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.05.2011, 23:17     Динамический массив #8
Цитата Сообщение от ahamoth Посмотреть сообщение
1 4
2 5
Цитата Сообщение от ahamoth Посмотреть сообщение
Переставить столбцы вещественной квадратной матрицы
Я не вижу здесь перестановки столбцов матрицы. А вижу перестановку элементов в одной строке.
Если переставлять столбцы, то для матрицы, которую я привел решения не существует.
ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
14.05.2011, 23:21  [ТС]     Динамический массив #9
точно , извиняюсь за свою невнимательность . да для подобной матрицы решения не существует.
тогда если нет решения вывести сообщение об ошибке. еще раз извиняюсь за свою невнимательность
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.05.2011, 23:29     Динамический массив #10
Задача не такая и простая как кажется. Например если использовать следующий алгоритм:
- ищем в первой строке максимальный элемент. Столбец с этим элементом ставим самым правым.
- ищем во второй строке максимальный элемент (но меньше, максимального в предыдущей строке). Столбец с этим элементом ставим слева от самого правого.
и т.д.
Этот алгоритм будет иногда давать результат что решения нет (хотя на самом деле оно будет).
Пока вижу только полный перебор.
Сами что-нибудь уже сотворили?
ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
14.05.2011, 23:37  [ТС]     Динамический массив #11
Честно сказать с динамическими массивами не разобрался еще . и не знаю как сделать чтобы столбцы менять местами
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
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;
}
ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
15.05.2011, 00:08  [ТС]     Динамический массив #13
не совсем понятно как програмно реализовать чтобы производился поиск максимального элемента в строке и одновременно максимвльный элемент в i+1 строке ставился по диагонале а вместе с ним и переставлялся нужный столб
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
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;
    }
}
ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
15.05.2011, 17:01  [ТС]     Динамический массив #15
valeriikozlov , программа при компиляции ошибку выдает
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,248
Завершенные тесты: 2
15.05.2011, 17:15     Динамический массив #16
Цитата Сообщение от ahamoth Посмотреть сообщение
valeriikozlov , программа при компиляции ошибку выдает
это не полный листинг.
объяви переменные напиши все это в main и будет работать
ahamoth
0 / 0 / 0
Регистрация: 26.11.2010
Сообщений: 111
15.05.2011, 17:23  [ТС]     Динамический массив #17
да как бе описано все, я программу запускаю , заполняю в ней массив, а дальше программа вылетает
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,248
Завершенные тесты: 2
15.05.2011, 17:28     Динамический массив #18
Цитата Сообщение от ahamoth Посмотреть сообщение
да как бе описано все, я программу запускаю , заполняю в ней массив, а дальше программа вылетает
покажите полный код
ahamoth
0 / 0 / 0
Регистрация: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2011, 17:56     Динамический массив
Еще ссылки по теме:

Двумерный массив (поменять статический массив на динамический) C++
Заполнить динамический массив из файла и записать массив обратно в файл C++
C++ Массив и память. Как создать динамический массив?
Массив фиксированного размера может быть динамическим? Что такое "динамический массив"? C++
C++ Статический массив в динамический массив

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

Или воспользуйтесь поиском по форуму:
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,248
Завершенные тесты: 2
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;
}
может так....
Yandex
Объявления
15.05.2011, 17:56     Динамический массив
Ответ Создать тему
Опции темы

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