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

Копирование элементов из старой матрицы в новую. Динамическое распределение памяти - C++

Восстановить пароль Регистрация
 
Quest10n
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 2
08.06.2014, 22:19     Копирование элементов из старой матрицы в новую. Динамическое распределение памяти #1
Столкнулся с такой задачей : Вводится матрица. Если в матрице наибольший элемент находится над главной диагональю, то программа формирует новую матрицу, удалив из исходной столбец и строку, на пересечении которых находится наибольший элемент.
Распределение памяти - динамическое.

Вот мой код (MVS 2008):
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
129
130
131
132
133
134
135
136
137
138
139
140
141
// vvod.cpp   ФУНКЦИЯ ВВОДА
 
#include <iostream>
using namespace std;
 
float* vvod(int n)
{   
    float* mas = new float [n];
    for (int i =0 ; i<n; i++)
    {   
        cout<<"Vvedite "<<i+1<<" element"<<endl;
        cin>>*(mas+i);
    }
    return mas;
}
 
float** vvod(int m, int n)
{   
    float** mas = new float* [m];
    for (int i=0;i<m;i++)
    {   
        cout<<i+1<<"stroka"<<endl;
        mas[i]=vvod(n);
    }
    return mas;
}
 
 
//vivod.cpp    ФУНКЦИЯ ВЫВОДА
 
#include <iostream>
using namespace std;
void vivod (float**newMatr, int m, int n)
{
    cout<<endl;
    for (int i=0; i<m; i++)
    {
        for (int j=0; j<n; j++)
            cout<<newMatr[i][j]<<" ";
        cout<<endl;
    }
}
 
// func.cpp ФУНКЦИИ АНАЛИЗА И СОЗДАНИЯ
 
int analizMatr (float**matr,int m,int n,int&x,int&y)
{
    float max=0; 
    for (int i=0; i<m; i++)
    {
        for (int j=0; j<n; j++)
          if (matr[i][j]>max) 
          { max=matr[i][j];
            x=i; y=j;
          }
    }
    if (x>=y) return 0;
    return 1;
}
 
float**formMatr (float**matr, int m, int n,int&a, int&b)
{   int x,y;
    if (analizMatr(matr, m, n, x, y)==0)
        return 0;
    float**newMatr=new float*[n]; 
    a=0;
    for (int i=0; i<m; i++)
    {   b=0; 
        if (i!=x)
        { for (int j=0; j<n; j++)
          { if (j!=y)
            {   newMatr[b]=new float[n];
                newMatr[a][b]=matr[i][j];
              b++;
            }
          } 
        a++;
    
        }
    }
    return newMatr;
}
 
void del(float**matr,int m)
{
    for(int i=0;i<m;i++)
        delete [] matr[i];
    delete [] matr;
}
 
 
// main.cpp 
 
#include <iostream>
#include <conio.h>
using namespace std;
float**vvod(int m,int n);
void vivod (float**newMatr, int m, int n);
int analizMatr (float**matr,int m,int n,int&x,int&y);
float**formMatr (float**matr, int m, int n,int&a, int&b);
void del(float**matr,int m);
int main()
{
 int m,n,z,x,y,b,a;
 do 
 {
  do
  {
   cout<<"Vvedite kol-vo strok m="; cin>>m;
   cout<<endl;
  }while (m<0 || m==0 || m>10);
   do
  {
   cout<<"Vvedite kol-vo stolbcov n="; cin>>n;
   cout<<endl;
  }while (n<0 || n==0 || n>10);
 
  float**matr=vvod(m,n);
  float**newMatr=formMatr(matr,m,n,a,b);
  int q=analizMatr(matr,m,n,x,y);
  cout<<endl<<"q="<<q<<endl<<"x="<<x<<" , y="<<y<<endl
      <<"a="<<a<<" , b="<<b<<endl;
  
  if (newMatr)
     {
         cout<<endl<<"Matrica:"<<endl;
         vivod (matr,m,n);
         cout<<"Novaya matrica:"<<endl;
         vivod (newMatr,a,b);
         del(matr,m);
         del(newMatr,a);
     }
  else {
        cout<<"Matrica ne sozdavalas"<<endl;
        del(matr,m);
       }
 
  cout<<endl<<"Repeat? (0-for exit) "; cin>>z;
 }while (z!=0);
return (0);
}
В общем, сама проблема заключается в формировании новой матрицы (функция formMatr), не понимаю, как сделать правильный код..

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

Динамическое распределение памяти C++
C++ Динамическое распределение памяти
C++ Динамическое распределение памяти
C++ Динамическое распределение памяти.
C++ Динамическое распределение памяти
C++ Динамическое распределение памяти
C++ Динамическое распределение памяти
Динамическое распределение памяти C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tuma
59 / 40 / 18
Регистрация: 28.09.2013
Сообщений: 186
08.06.2014, 22:45     Копирование элементов из старой матрицы в новую. Динамическое распределение памяти #2
Вам наверное лучше создать 2 переменные типа bool(при объявлении инициализировать их как false),и вот идет у вас цикл,как только встретил нашу строку или столбец(я надеюсь вы их уже нашли), переменной присваиваем значение true,а теле цикла мы делаем проверку является ли наша переменная true,если да,то мы будем обращаться не к a[i],а к a[i-1].
Quest10n
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 2
09.06.2014, 02:33  [ТС]     Копирование элементов из старой матрицы в новую. Динамическое распределение памяти #3
Я не очень Вас понимаю, но мне кажется, что это более относится к статическому распределению памяти. Мне бы исправить этот цикл..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 float**newMatr=new float*[n]; 
    a=0;
    for (int i=0; i<m; i++)
    {   b=0; 
        if (i!=x)
        { for (int j=0; j<n; j++)
          { if (j!=y)
            {   newMatr[b]=new float[n];
                newMatr[a][b]=matr[i][j];
              b++;
            }
          } 
        a++;
    
        }

Для матриц, допустим, {1 3}{1 1} и {1 3 1}{1 1 1} он работает , а вот уже для {1 3}{1 1}{1 1} нет - выдаёт ошибку "Необработанное исключение"
и показывает на строку "newMatr[a][b] = matr[i][j]"

Добавлено через 17 минут
UP

Добавлено через 45 минут
Неужели никто не знает

Добавлено через 2 часа 13 минут
UP!
Yandex
Объявления
09.06.2014, 02:33     Копирование элементов из старой матрицы в новую. Динамическое распределение памяти
Ответ Создать тему
Опции темы

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