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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 5.00
J__S(Юляшка)
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 22
#1

Построить динамический одномерный массив из элементов матрицы - C++

28.01.2010, 06:54. Просмотров 2923. Ответов 12
Метки нет (Все метки)

Дана динамическая целочисленная матрица.Построить динамический одномерный массив,каждый эллемент которого равен сумме элементов одной строки исходной матрицы.
Освободить память от матрицы,найти произведение эллементов одномерного массива и записать его как динамическую переменную.
Все исходные данные,результаты и соответсвующие адреса распечатать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2010, 06:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построить динамический одномерный массив из элементов матрицы (C++):

Массив: Построить из динамического одномерный массив,каждый элемент, которого равен сумме элементов одной строки исходной матрицы. - C++
Помогите решить. Как можно проще, только начали изучать указатели. Дана динамическая целочисленная матрица.Построить динамический...

Построить одномерный вещественный массив X из n элементов - C++
Помогите пожалуйста!!! Построить одномерный вещественный массив X из n элементов (n - константа): X=1 X=/ X= / ...

Как преобразовать массив в динамический? Массив вычисляет сумму элементов каждой диагонали матрицы - C++
Ошибка : Вызвано исключение по адресу 0x00BB2F4F в Проект6.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFE05. #...

Сформировать одномерный массив из диагональных элементов матрицы. Найти след матрицы - C++
Для заданной квадратной матрицы сформировать одномерный массив из ее диагональных элементов. Найти след матрицы, суммируя элементы...

Дан двумерный массив 3х3. Получить одномерный массив из из отрицательных элементов матрицы. - C++
Пожалуйста, помогите решить простым методом задачку, просто не могу понять смысл ее выполнения. Дан двумерный массив 3х3.Получить...

Динамический массив. Определить количество различных элементов матрицы - C++
Помогите ребята! Задана символьная матрица размером N×M, N,M<50. Определить k - количество различных элементов матрицы (т.е....

12
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.01.2010, 07:08 #2
Декларации классов матрицы и одномерного массива у тебя есть? И каков принят порядок индексов? Первый индекс номер строки, а второй столбца, или наоборот? Достаточно ли сделать код, который будет, юзя методы и операторы, делать то, что ты хочешь, или надо реализовать и сами классы?
0
J__S(Юляшка)
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 22
28.01.2010, 07:15  [ТС] #3
Вообще задача находится из раздела указатель,т.е. самая первая....
обозначения вводятся такие i-сторока j-столбец
Программу надо по простому написать,без всяких замудрений..))

Добавлено через 1 минуту
Декларации классов матрицы и одномерных массивов у меня нет....да и просто достаточно сделать код..
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.01.2010, 07:20 #4
Цитата Сообщение от J__S(Юляшка) Посмотреть сообщение
без всяких замудрений
. Как? Вот же:
Цитата Сообщение от J__S(Юляшка) Посмотреть сообщение
Дана динамическая целочисленная матрица. Построить динамический одномерный массив
... Значит уже придётся работать через их интерфейсы.

Добавлено через 2 минуты
Порядок индексов ты дала. А где читать размеры матрицы? Готовые размеры не давай. Так как матрица динамическая, то её размеры могут меняться и прога должна их прочитать из методов самой матрицы. Какие есть конструкторы массива? Как задаётся его размер? Как вообще названы классы матрицы и массива?

Добавлено через 1 минуту
Цитата Сообщение от J__S(Юляшка) Посмотреть сообщение
Декларации классов матрицы и одномерных массивов у меня нет....да и просто достаточно сделать код..
Если нет даже декларации, то нет и классов, а без ниъх такой код работать не будет. Я задекларирую и реализую классы, если ты хоть как то ответишь на вопросы:
1. Как назвать классы?
2. Должны ли их конструкторы иметь параметры и какие именно?
3. Нужны ли дефолтные конструкторы?
4. Как задаются размеры матрицы и одномерного массива?
5. Как назвать методы для чтения этих размеров?
Декларацией называются все эти ответы вместе, записанные согласно правилам языка c++ (а не русского языка, как скорее всего будет в оригинале) + запись на языке c++ самого факта, что это массивы и один из них двумерный.
0
J__S(Юляшка)
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 22
28.01.2010, 07:24  [ТС] #5
Вот смотри я что-то пыталась набрать,но эт только фрагменты,да и то не полностью...
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
#include<stdio.h>
#include<stdlib.h>
#include<alloc.h>
    int main()
    {
    
        int n,m,i,j,s,a;
        int *mp;
        printf("\n Vvedite chislo strok i stolbcov matrici:");
        scanf("%d%d",&n,&m);
        mp=(int*)calloc(n*m,sizeof(int));
        printf("\nVvedite celuy matricy(%d*%d) postrochno:\n",n,m);
        //------------ввод двумерного  массива-----------------
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
                scanf("%d",mp+i*m+j);
    
//-------------------------------ввод динамического одномерного массива---------------------
    {
        printf("\nVvedite kol-vo elementov massiva:");
    scanf("%d",&m);
    mp=(int*)calloc(m,sizeof(int));
    fflush(stdin);
    printf("\nVvedite massiv iz %d 'ktvtynjd:\n",m);
    for(i=0;i<m;i++)
        scanf("%d",mp+i);
    
        s=0;
        for(j=0;j<m;j++)
            s=s+a;
        printf("%d",s);
        
    printf("\nelementi massiva i ih adresa\n");
    for(i=0;i<m;i++)
        printf("%2%p",*(mp+i),mp+i);
    }
    }
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.01.2010, 07:30 #6
А надо что то типа:
C++
1
2
3
4
5
6
7
8
9
10
11
class TArray // Класс массива
{
 protected:
  int *Data; // Данные
  int  Number; // Число элементов
 public:
  TArray (int Number); // Конструктор с параметром-числом элементов
  int GetNumber (); // Функция, читающая размер массива
  int & operator [] (int i);
 ~TArray();
};
0
J__S(Юляшка)
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 22
28.01.2010, 07:35  [ТС] #7
Это ты уже в глубь полез,более так граматно делаешь.....
Если смотреть по методичке,то мы еще классы не проходили.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.01.2010, 07:54 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я думал массив так массив. А у тебя блок в качестве массива? Ну в принципе адресовать его как массив можно, а значит и называть блок массивом в принципе тоже. Разница не принципиальна, просто у тебя код методов, конструкторов, деструкторов и операторов будет валяться инлайном прямо в проге. Тогда так:
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 <iostreem.h> // Так кажется
int main()
{
 int n,m;
 int i,j;
 int **a=NULL;
 int *b=NULL;
 cout<<"Введи число строк";
 cin>>n;
 a=new int * [n] ;
 if (a)
 { cout<<"Введи число столбцов";
  cin>>m;
  for (i=n-1 ;i>=0; --i)
  {
    a[i]=new int [m];
    if (a[i]==NULL)
    {
     cout<<"Не хватает памяти";
     for (j=n-1; j>=i; --j)
     {
      delete []a[j];
     }
     delete [] a;
     return 0;
    }
  }
  for (i=0 ;i<n; ++i)
  {
   for (j=0 ;j<m; ++j)
   {
    count<<"a[";
    count<<i+1;
    count<<",";
    count<<j+1;
    count<<"]=";
    cin>>a[i][j];
    count<<" ";
   }
   count<<"\n";
  }
  b=new int [n];
  if (b)
  {
   for (i=0; i<n; ++i)
   {
    b[i]=0;
    for (j=m-1; j>=0; --j)
    {
     b[i]+=a[i][j];
    }
    cout<<"b[";
    cout<<"i";
    cout<<"]=";
    cout<<b[i];
   }
  }
  else
  {
   cout<<"Не хватает памяти";
  }
 }
 else
 {
  cout<<"Не хватает памяти";
 }
 if (a)
 {
  for (i=n-1; i>=0; --i)
  {
   delete []a[i];
  }
  delete []a;
 }
 if (b)
 {
  delete []b;
 }
 return 0;
}
Добавлено через 5 минут
Если надо именно со scanf и printf, то можно переделать и под них.
0
J__S(Юляшка)
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 22
28.01.2010, 07:57  [ТС] #9
Да надо с использованием scanf и Printf
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.01.2010, 08:11 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include<stdio.h>
#include<stdlib.h>
#include<alloc.h>
int main()
{
 int n,m;
 int i,j;
 int **a=NULL;
 int *b=NULL;
 printf("Введи число строк");
 scanf("%d",&n);
 a=new int * [n] ;
 if (a)
 {
  printf("Введи число столбцов");
  scanf ("%d",&m);
  for (i=n-1 ;i>=0; --i)
  {
    *(a+i)=new int [m];
    if ((*a+i)==NULL)
    {
     cout<<"Не хватает памяти";
     for (j=n-1; j>=i; --j)
     {
      delete []*(a+i);
     }
     delete [] a;
     return 0;
    }
  }
  for (i=1 ;i<=n; ++i)
  {
   for (j=1 ;j<=m; ++j)
   {
    printf ("a[%d,%d]=",&i,&j);
    scanf("%d",*(a+i-1)+j-1;
    printf (" ");
   }
   printf ("\n");
  }
  b=new int [n];
  if (b)
  {
   for (i=1; i<=n; ++i)
   {
    b[i]=0;
    for (j=m-1; j>=0; --j)
    {
     b[i]+=a[i][j];
    }
    printf("b[%d]="%d,&i,b+i-1);
   }
  }
  else
  {
   printf("Не хватает памяти");
  }
 }
 else
 {
  printf("Не хватает памяти");
 }
 if (a)
 {
  for (i=n-1; i>=0; --i)
  {
   delete []*(a+i);
  }
  delete []a;
 }
 if (b)
 {
  delete []b;
 }
 return 0;
}
Добавлено через 2 минуты
Можно оставить и адресацию массива, будет просто медленнее. Поэтому даже массивы рекомендуется адресовать как блоки. Это называется "использовать арифметику указателей".
0
J__S(Юляшка)
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 22
28.01.2010, 08:16  [ТС] #11
Да-Да именно,с использованием арифметики указателя!!!!!!
Спасибочки,большое очень благодарна!!)))
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.01.2010, 08:19 #12
Но эта рекомендация касается только статических массивов, и кода операторов динамических массивов. Прога с динамическим массивом, реализованным в виде класса, работает только как с массивом, но не как с блоком. И ещё. Блок - единственное быстрое внутренне представление массива. Даже статический массив на самом джеле указатель на блок.

Добавлено через 2 минуты
В 67 строке пропустил замену оператора индексации на арифметику указателя. Щас исправил. Смотри последний вариант 10 поста.
1
L45
0 / 0 / 1
Регистрация: 13.10.2012
Сообщений: 33
28.03.2013, 11:22 #13
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Добавлено через 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
#include <iostream.h>
#include <windows.h>
using namespace std;
 
int main()
{
   int n, m, n1, m1;
   cout<<"Enter number of strok of matrix"<<endl;
   cin >> n;
   cout<<"Enter number of stolbzov of matrix"<<endl;
   cin >> m;
 
   int** matrix;
   matrix=new int * [n];
   for (n1 = 0; n1 < n; n1++)
   {
      matrix[n1] = new int [m];
   }
 
   cout<<"Enter a matrix postrochno"<<endl;
   for (n1 = 0; n1 < n; n1++)
   {
      for (m1 = 0; m1 < m; m1++)
      {
         cin >> matrix[n1][m1];
      }
   }
   char*vector;
  vector=new char [n];
   int i, j;
   for (j = 0; j < m; j++)
   {
      vector[j] = 0;
      for (i = 0; i < n; i++)
      {
         vector[j] += matrix[j][i];
      }
   }
 
   for (j = 0; j < n; j++)
   {
      delete []matrix[j];
   }
   delete []matrix;
 
 int* val;
   val= new int [1];
   for (j = 0, *val = 1; j < m; j++)
   {
      *val *= vector[j];
   }
 
   cout<<"\n";
   for (i = 0; i < m; i++)
   {
      cout<<"adress : vector"; 
   }
   cout<<"adress : Res_val"; 
 
   delete []vector;
   delete []val;
   system("pause");
   return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2013, 11:22
Привет! Вот еще темы с ответами:

Динамический массив. Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы - C++
#include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;string.h&gt; int kol_vo(int **a, int n, int m); int main() { int...

Сформировать одномерный массив из элементов матрицы - C++
помогите решить задачу,пожалуйста: Дан двумерный массив размерностью 4*6, заполненный целыми числами с клавиатуры. Сформировать...

Сформировать одномерный массив из элементов матрицы - C++
Есть двумерный массив, 5*6 Сформировать одномерный массив, каждый элемент которого равен наибольшему по модулю элементу соответствующего...

Сформировать одномерный массив Х из элементов матрицы А... - C++
помогите пожалуйста! никак не получается сделать основную задачу. остановился на этом варианте, но все равно не получается - записываю...


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
28.03.2013, 11:22
Ответ Создать тему
Опции темы

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