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

Скопировать первую матрицу во вторую - C++

Восстановить пароль Регистрация
 
variant1
0 / 0 / 0
Регистрация: 12.12.2012
Сообщений: 3
12.12.2012, 23:29     Скопировать первую матрицу во вторую #1
Здравствуйте,помогите с написанием кода.
Задача в том что,создаем первый двумерный массив из введеных значений M и K,заполняем некоторыми значениями,выводим.Аналогично построить и вывести двумерный массив из M1 и К1.Копируем первую матрицу во вторую с учением либо дополняя нулями.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
12.12.2012, 23:51     Скопировать первую матрицу во вторую #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const int n = 3;
int m1 [n][n];
for (int i = 0; i < n; i++)
{
for {int j = 0; j < n; j++)
{
cin >> m1[i][j];
}
}
 
int k2[n][n];
 
for (int i = 0; i < n; i++)
{
for {int j = 0; j < n; j++)
{
k2[i][j] = m1[i][j];
}
}
variant1
0 / 0 / 0
Регистрация: 12.12.2012
Сообщений: 3
13.12.2012, 00:39  [ТС]     Скопировать первую матрицу во вторую #3
Это,как я понял,мы заполняем два массива,а как же копирование с одного на другой?
Xunnapb
1 / 1 / 0
Регистрация: 07.12.2012
Сообщений: 8
13.12.2012, 03:13     Скопировать первую матрицу во вторую #4
Вот так можно сделать заполнение и копирование. Возможно код можно сделать короче (не пинайте, сам только начинаю в этом разбираться)
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
#include <stdio.h>
#include <process.h>
#include <locale.h>
#include <conio.h>
 
void main()
{
    setlocale(LC_CTYPE,"Russian");
    //Объявление переменных для размера массивов
    int m,k,m1,k1;
    //Объявление вспомогательных переменных
    int i,j;
    //Объявления указателей на указатели для динамического выделения памяти под массивы
    int **A,**B;
 
    //Ввод размеров первого массива
    puts("Введите размер первого массива (m x k): ");
    scanf_s("%d %d",&m,&k);
    //Очистка буфера ввода
    fflush(stdin);
    //Динамическое выделение памяти под первый массив
    if (!(A=new int*[m]))
    {
        printf_s("Недостаточно памяти!\n");
        exit(1);
    }
    for(i=0;i<k;i++)
        if (!(*(A+i)=new int[k]))
        {
            printf_s("Недостаточно памяти!\n");
            A=NULL;
            exit(1);
        }
    //Заполнение массива. Можно сделать случайными числами при необходимости.
    for (i=0;i<m;i++)
    {
        printf_s("\nВведите строку номер %d (%d элементов): ",i+1,k);
        for (j=0;j<k;j++)
            scanf_s("%d",*(A+i)+j);
        //Очистка буфера ввода
        fflush(stdin);
    }
 
    //Ввод размеров второго массива
    puts("");
    puts("Введите размер второго массива (m1 x k1): ");
    scanf_s("%d %d",&m1,&k1);
    //Динамическое выделение памяти под второй массив
    if (!(B=new int*[m1]))
    {
        printf_s("Недостаточно памяти!\n");
        exit(1);
    }
    for(i=0;i<m1;i++)
        if (!(*(B+i)=new int[k1]))
        {
            printf_s("Недостаточно памяти!\n");
            A=NULL;
            exit(1);
        }
    
    i=0;
    j=0;
    while (i<m1)
    {
        while (j<k1)
        {
            //Проверка. Если индекс элемента не превышает индекс первого
            //массива, то значение второго массива равно первому, иначе 0
            if (i<m&&j<k) *(*(B+i)+j)=*(*(A+i)+j);
            else *(*(B+i)+j)=0;
            j++;
        }
        i++;
        j=0;
    }
 
    //Вывод первого массива
    system("cls");
    printf_s("Первый массив размером %d строк x %d столбцов:\n",m,k);
    for (i=0;i<m;i++)
    {
        for (j=0;j<k;j++)
            printf_s("%d ",*(*(A+i)+j));
        printf_s("\n");
    }
    //Вывод второго массива
    printf_s("\nВторой массив размером %d строк x %d столбцов:\n",m1,k1);
    for (i=0;i<m1;i++)
    {
        for (j=0;j<k1;j++)
            printf_s("%d ",*(*(B+i)+j));
        printf_s("\n");
    }
    _getch();
}
PS Сделано динамическое выделение памяти под массивы (размеры ведь вводятся с клавиатуры). Поэтому в конце кода надо добавит освобождение памяти:
C++
1
2
3
4
5
6
7
8
    //Освобождение памяти первого массива
    for(i=0;i<m;i++)
        delete [](*(A+i));
    delete []A;
    //Освобождение памяти второго массива
    for(i=0;i<m1;i++)
        delete [](*(B+i));
    delete []B;
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
13.12.2012, 03:39     Скопировать первую матрицу во вторую #5
C++
1
2
std::vector <std::vector<int> > A (M, std::vector<int> (N));
auto B = A;
Yandex
Объявления
13.12.2012, 03:39     Скопировать первую матрицу во вторую
Ответ Создать тему
Опции темы

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