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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Zion3439
2 / 2 / 0
Регистрация: 04.03.2009
Сообщений: 30
#1

Вычисление разности двумерных массивов. - C++

06.03.2009, 17:11. Просмотров 1401. Ответов 12
Метки нет (Все метки)

Дано два произвольны двумерных массива A,B с одинаковыми размерностями. Нужно написать функцию нахождения разности их элементов. Сама задача проста но возникает ряд проблем =).
1)Как сделать чтобы размерность массивов мог задавать пользователь?
2)Как в теле функции int mass(int *x,int *y,int dim1,int dim2) создать двумерный массив Z размерностью Z[dim1][dim2]?
3)Как возвратить рещультатом функции mass созданный двумерный массив Z[dim1][dim2]?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream.h>
#include <conio.h>
 
int mass(int *x,int *y,int dim1,int dim2) \\Разность матриц
{
 int i=0;
 int*z=new int[dim1*dim2]; \\Тут надо создать двумерный массив, но у меня получилось создать только одномерный и то непойми как.
 while(i!=dim1*dim2)
 {
  z[i]=x[i]-y[i]; \\разность матриц
  i++
 }
 return;
}
 
void main(void)
{
 clrscr();
 int a[3][3] = {{19,29,30},{19,29,30},{39,49,32}}; \\Создание двух двумерных массивов, хотелось бы вместо размера [3][3] писать [f][g] где f и g задаётся пользователем, заработает ли это?
 int b[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
 mass(&a[0][0],&b[0][0],3,3);
}
Я прекрасно понимаю что тут в последнее время большая активность по части двумерных массивов =) но ответов на свои вопросы я не нашол.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2009, 17:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычисление разности двумерных массивов. (C++):

Вычисление разности двух массивов с помощью функции - C++
написать прогу для вычисления разности двух массивов с помощью функции.

Какие есть виды массивов (кроме одномерных, двумерных и двумерных ступенчатых массивов)? - C++
Какие есть виды массивов (кроме одномерных, двумерных и двумерных ступенчатых массивов)? И почему такая вот запись является &quot;чуть&quot;...

Обработка двумерных массивов - C++
Всем доброй ночи. Решаю задачу по информатике, на обработку двумерных массивов. Программу написал, ошибок нет, но когда начинаю вводить...

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

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

Использование двумерных массивов - C++
вроде компилируется, но когда программа загружается, то она выбивает, пишет остановка #include &lt;iostream&gt; using namespace std; main...

12
Gravity
564 / 558 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
06.03.2009, 17:32 #2
1)Как сделать чтобы размерность массивов мог задавать пользователь?
C++
1
2
3
4
5
6
7
8
int i, n, m, **a;
 
printf("Vvedite razmernost' MxN: );
scanf("%d%d", &m, &n);
 
a = new int*[m];
for(i=0; i<m; i++)
   a[i] = new int[n];
UPD. отредактировал.
1
ISergey
Maniac
Эксперт С++
1395 / 906 / 56
Регистрация: 02.01.2009
Сообщений: 2,706
Записей в блоге: 1
06.03.2009, 18:25 #3
Не забывай потом память освободить
C++
1
2
3
for(i=0; i<m; i++)
   delete[] a[i];
delete[] a;
1
Zion3439
2 / 2 / 0
Регистрация: 04.03.2009
Сообщений: 30
06.03.2009, 18:56  [ТС] #4
Цитата Сообщение от ISergey Посмотреть сообщение
Не забывай потом память освободить
А что может быть если не освобождать? разве послы выполнения программы она сама не освобождается?
0
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
06.03.2009, 19:03 #5
высвобождается, но хороший тон программирования требует высвобождать ее явно
1
Zion3439
2 / 2 / 0
Регистрация: 04.03.2009
Сообщений: 30
06.03.2009, 19:23  [ТС] #6
А как возвратить полученый двумерный массив из функции? return .....;
0
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
06.03.2009, 19:27 #7
Создай его в вызвающей функции и передай вызванной, тогда и возвращать его не придется
1
Zion3439
2 / 2 / 0
Регистрация: 04.03.2009
Сообщений: 30
06.03.2009, 19:38  [ТС] #8
Ну хотелось бы чтобы возвращалось именно через return.
0
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
06.03.2009, 19:40 #9
Тогда создай его в структуре и возвращай структуру. Но по-моему правильнее будет первый вариант.
1
ISergey
Maniac
Эксперт С++
1395 / 906 / 56
Регистрация: 02.01.2009
Сообщений: 2,706
Записей в блоге: 1
06.03.2009, 19:47 #10
шото вроде этого
C++
1
2
3
4
5
6
int **foo(..)
{
    int **arr;
    ...........
    return arr;
}
1
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
06.03.2009, 19:50 #11
А что значат звездочки?
1
ISergey
Maniac
Эксперт С++
1395 / 906 / 56
Регистрация: 02.01.2009
Сообщений: 2,706
Записей в блоге: 1
06.03.2009, 20:01 #12
Цитата Сообщение от Бартимеус Посмотреть сообщение
А что значат звездочки?
то что ф-ция возвращает указатель на указатель(2х мерный массив)
вот для примера рабочий код
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
#include <iostream>
using namespace std;
 
template<typename T> inline int arrlen(T *arr)
{
    return static_cast<int>(_msize(arr)/sizeof(T));
}
 
int **arrCreate( const int,const int );
void arrFree( int** );
void arrInput( int** );
void arrOut( int** );
 
 
int main ()
{
    const int row = 2;
    const int col = 2;
 
    int **arr = arrCreate(row,col);
    arrInput(arr);
    arrOut(arr);
    arrFree(arr);
 
    return 0;
}
 
int **arrCreate(const int row,const int col)
{
    if((row > 0))
    {
        int **arr = new int*[row];
        for(int i = 0; i < row; ++i)
        {
            arr[i] = new int[col];
        }
        return arr;
    }
    else
        return 0;
}
void arrFree(int **arr)
{
    if(arr != 0)
    {
        int lenrow = arrlen(arr);;
        for(int i = 0; i < lenrow; ++i)
            delete[] arr[i];
        delete[] arr;
    }
}
void arrInput(int **arr)
{
    if(arr != 0)
    {
        int lenrow  = arrlen(arr);
        int lencol  = arrlen(arr[0]);
        for(int i = 0; i < lenrow; ++i)
        {
            for(int j = 0; j < lencol; ++j)
            {
                cout<<"arr["<<i<<"]"<<"["<<j<<"] = ";
                cin>>arr[i][j];
            }
 
        }
    }
}
void arrOut(int **arr)
{
    if(arr != 0)
    {
        int lenrow  = arrlen(arr);
        int lencol  = arrlen(arr[0]);
        for(int i = 0; i < lenrow; ++i)
        {
            cout<<"[ ";
            for(int j = 0; j < lencol; ++j)
                cout<<arr[i][j]<<" ";
            cout<<"]"<<endl;
        }
    }
}
2
Zion3439
2 / 2 / 0
Регистрация: 04.03.2009
Сообщений: 30
07.03.2009, 02:03  [ТС] #13
Добавлено через 1 час 33 минуты 23 секунды
А как реализовать эту процедуру с помощью указателей вместо индексов?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int **mass(int *x,int *y,int dim1,int dim2)
{
 int **z,i=0,j=0,l=0;
 z=new int*[dim1];
 for(i=0;i<dim1;i++)
  z[i]=new int[dim2];
 i=0;
 j=0;
 cout<<"Raznost':\n";
 for(i=0;i<dim1;i++)
 for(j=0;j<dim2;j++)
 {
  z[i][j]=x[l]-y[l];
  cout<<x[l]<<"-";
  cout<<y[l]<<"=";
  cout<<z[i][j]<<" \n";
  l++;
 }
 return z;
}
как и когда првельно надо Z наращивать?

Добавлено через 4 часа 4 минуты 21 секунду
пп
0
07.03.2009, 02:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2009, 02:03
Привет! Вот еще темы с ответами:

Обработка двумерных массивов. Указатели - C++
Найти наименьший элемент матрицы X (mn) и записать нули в ту строку и столбец, где он находится.

Склеивание двух двумерных массивов - C++
Всем привет, нужна помощь, не могу понять как сделать склеивание двух двумерных массивов. Кто нибудь пожалуйста помогите это реализовать)) ...

Обработка двумерных динамических массивов - C++
1. Составить программу в которой для введенного пользователем двумерного массива, выводится сумма всех четных чисел 2. Составить...

Обработка двумерных массивов. Указатели. - C++
помогите сделать. буду благодарен с алгоритмами(блок-схемами)


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

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

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