Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Dydoser_228
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 13
#1

Динамически выделить память под массив - C++

15.01.2017, 17:00. Просмотров 393. Ответов 7
Метки нет (Все метки)

Задание было в следующем: дан вещественный двумерный массив А. Поменять местами максимальный элемент главной и побочной диагоналей с элементом, расположенным на пересечении диагоналей, при этом память под массивы выделять динамически. Программу составить в двух вариантах: с использованием индексации и без применения индексов для обращения к элементам динамических массивов. Сделал рабочую программу по этой задаче, но память под массив выделена не динамически, как мне сказали - нужен указатель. И не пойму как сделать с индексацией и без. Я в с++ прям начинающий-начинающий.
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 <iostream>
#include <time.h>
#include <stdlib.h>
#include <cmath>
#include <Windows.h>
#include <tchar.h>
#include <iomanip>
 
using namespace std;
 
int main()
{
    srand(time(0));
    int a[30][30];
    unsigned short i, j, n, m;
    
    do
    {
             cout << "Vvedi razmer (2 <= N <= 30) N = ";
             cin >> n;
    }
    while ((n < 2) || (n > 30));
    
    if (n % 2 == 0)
    {
          cout << endl << "Reshenii net!" << endl << "Davi na ENTER!";
          cin.get();
          cin.get();
          return 1;
    }
    
    cout << endl << "Ishodnaya matricza:" << endl << endl;
    int max = -50;
    unsigned short maxi, maxj;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            a[i][j] = rand() % 100 - 50;
            cout << setw(4) << a[i][j];
            if ((j == i) || (j == n-1-i))
                  if (max < a[i][j])
                  {
                        max = a[i][j];
                        maxi = i;
                        maxj = j;
                  }   
        }
        cout << endl;
    }
    
    cout << endl << "max = " << max << endl << "Poluchennaya matricza:" << endl << endl;
    
    int tmp;
    m = n / 2;
    tmp = a[m][m];
    a[m][m] = a[maxi][maxj];
    a[maxi][maxj] = tmp;
    
    
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            cout << setw(4) << a[i][j];
        cout << endl;   
    }
    
    cout << endl << "Davi na ENTER!";
    cin.get();
    cin.get();
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2017, 17:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамически выделить память под массив (C++):

Динамически выделить память под массив
Добрый день форусчани Как можно выделить память под массив объекта класса...

Динамически выделить память под массив функций
QByteArray (SerfingThread::*lp_GetRequest)(const QByteArray&amp; ,const...

Можно ли динамически выделить память под массив указателей, на объекты класса?
Прошу прощения если не правильно назвал вопрос. Не знаю как правильно...

Динамически выделить память под верхний треугольник квадратной матрицы
прога все считает, но в конце выдается системная ошибка... я пришел к выводу,...

Не могу удалить динамически выделенную память под массив
Здравствуйте. Изучил сегодня динамическое выделение памяти и не могу ее...

Выделить память под динамический массив указателей
Нужно выделить память вот под такое дело. Для примера n=5 . Ничего нагуглить...

7
Nojabr
10 / 10 / 1
Регистрация: 13.06.2016
Сообщений: 62
Завершенные тесты: 2
15.01.2017, 17:16 #2
C++
1
  int a[30][30];
заменить на:
C++
1
  int **a;
и где-нибудь в начале программы написать что-то вроде этого:

C++
1
2
3
4
5
a = new int *[30];
for (int i = 0; i < 30; i ++)
{
a[i] = new int [30];
}
это уже будет динамический массив. далее?
1
Nemovok
237 / 84 / 86
Регистрация: 30.10.2015
Сообщений: 521
Завершенные тесты: 1
15.01.2017, 17:30 #3
Цитата Сообщение от Nojabr Посмотреть сообщение
и где-нибудь в начале программы написать что-то вроде этого:
И где-нибудь в конце программы написать что-то вроде этого:
C++
1
2
3
for(int i=0; i<n; ++i)
  delete[] a[i];
delete [] a;
0
Dydoser_228
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 13
15.01.2017, 17:39  [ТС] #4
Цитата Сообщение от Nojabr Посмотреть сообщение
далее?
далее... я не совсем понял: нужно сделать код с теми же функциями, но : с использованием индексации и без применения индексов для обращения к элементам динамических массивов
и нужен двумерный массив
0
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
15.01.2017, 17:46 #5
Лучший ответ Сообщение было отмечено Dydoser_228 как решение

Решение

как-то так: http://ideone.com/Q6S7B7

Добавлено через 1 минуту
а для понимания указателей, советую изучить этот сайт http://cppstudio.com/cat/274/ в своё время тоже читал, очень понятно написано
0
Dydoser_228
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 13
16.01.2017, 15:09  [ТС] #6
Цитата Сообщение от DevAlone Посмотреть сообщение
понятно написано
окей, динамический массив с использованием индексации есть, как теперь сделать программу, выполняющую ту же задачу но без использования индексов?
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 <iostream>
#include <time.h>
#include <stdlib.h>
#include <cmath>
#include <Windows.h>
#include <tchar.h>
#include <iomanip>
 
using namespace std;
 
int main()
{
   unsigned short i, j, n, m;
        
    cout << "Vvedite razmer massiva:" << endl;
    cout << "N = ";
    cin >> n;
    
    srand(time(0));
    double** a = new double*[n];
    for (int i = 0; i < n; i++)
    {
        a[i] = new double[n];
    }
   
       
    if (n % 2 == 0)
    {
          cout << endl << "Reshenii net!" << endl << "Davi na ENTER!";
          cin.get();
          cin.get();
          return 1;
    }
    
    cout << endl << "Ishodnaya matricza:" << endl << endl;
    int max = -50;
    unsigned short maxi, maxj;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            a[i][j] = rand() % 100 - 50;
            cout << setw(4) << a[i][j];
            if ((j == i) || (j == n-1-i))
                  if (max < a[i][j])
                  {
                        max = a[i][j];
                        maxi = i;
                        maxj = j;
                  }   
        }
        cout << endl;
    }
    
    cout << endl << "max = " << max << endl << "Poluchennaya matricza:" << endl << endl;
    
    int tmp;
    m = n / 2;
    tmp = a[m][m];
    a[m][m] = a[maxi][maxj];
    a[maxi][maxj] = tmp;
    
    
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            cout << setw(4) << a[i][j];
        cout << endl;   
    }
    
    cout << endl << "Davi na ENTER!";
    cin.get();
    cin.get();
    
    for(int i=0; i<n; ++i)
   delete[] a[i];
   delete [] a; 
    
    return 0;
}
0
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
16.01.2017, 16:02 #7
Цитата Сообщение от Dydoser_228 Посмотреть сообщение
окей, динамический массив с использованием индексации есть, как теперь сделать программу, выполняющую ту же задачу но без использования индексов?
я же скинул ссылку на ideone
1
Dydoser_228
0 / 0 / 0
Регистрация: 14.01.2017
Сообщений: 13
18.01.2017, 11:43  [ТС] #8
Цитата Сообщение от DevAlone Посмотреть сообщение
ссылку на ideone
все, заработало, спс
0
18.01.2017, 11:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2017, 11:43
Привет! Вот еще темы с решениями:

Выделить и удалить память под 4 мерный массив
пацаны помогите.. Добавлено через 1 час 11 минут .помогите..не могу вобще...

Выделить память под массив классов заранее
Можно ли скажем так выделить память под массив классов с участием конструктора...

Выделить память под массив размера 2^64 байтов
Требуется выделить память под массив размера 2^64 байтов. Как порекомендуете...

Как выделить память под массив в структуре?
Здравствуйте , воnрос конечно глуnый , но голову я сижу ломаю долго , есть...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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