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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа со scanf() http://www.cyberforum.ru/cpp-beginners/thread1203020.html
Добрый день! Столкнулась с проблемой при работе с функцией scanf(). Особенно не получается, если тип вводимых данных char. Не работают пункты выбора 3 (RekordBase()), 4(NewFileText()), 5(Reload())....
C++ Чтение из текстового файла Здравствуйте, Уважаемые форумчане. Возникла такая проблема. Надо считать из файла(внешнего) данные тип int и char- это 2 разных файла, в одном только int, в другом char. Я никак не могу это... http://www.cyberforum.ru/cpp-beginners/thread1203016.html
Быстрая сортировка двумерного массива C++
Возникла проблема с програмой в которой применяется быстрая сортировка двумерного массива. При попытке скомпилировать выдает ошибку: 1>c:\users\serv\documents\visual studio...
Вывести слова из заданной строки, имеющие больше одной буквы «е» C++
Дана строка. На печать выдать слова, имеющие больше одной буквы «е». С++ Помогите пожалуйста Добавлено через 7 минут help Добавлено через 4 минуты help
C++ Не работает прогр. Ошибки! http://www.cyberforum.ru/cpp-beginners/thread1202956.html
Помогите исправить ошибки.
C++ Поменять местами max и min четных строк матрицы (без функции) Сделать двумерный массив без функции на С++. Дана квадратная матрица. Размерность вводится. Поменять местами max и min четных строк. Вот программа с функцией: #include<stdio.h>... подробнее

Показать сообщение отдельно
Quest10n
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 2

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

08.06.2014, 22:19. Просмотров 231. Ответов 2
Метки (Все метки)

Столкнулся с такой задачей : Вводится матрица. Если в матрице наибольший элемент находится над главной диагональю, то программа формирует новую матрицу, удалив из исходной столбец и строку, на пересечении которых находится наибольший элемент.
Распределение памяти - динамическое.

Вот мой код (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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru