Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 4
1

Сложение двух матриц

26.09.2015, 01:55. Просмотров 2282. Ответов 7
Метки нет (Все метки)

В общем скажу сразу: обращаюсь я к вам не из-за лени, а из-за недостатка идей и соответсвенно знаний (на данном этапе). Перебробовал "добрую" кучу вариантов решения, но все четно.
Условие задачи: "Реализовать алгоритм нахождения суммы двух прямоугольный матриц размером nхm. Значение n и m определяются пользователем". Использовать можно только то, что имеется в моем варианте кода.
З.Ы. Не ругайте за неграмотность кода, только учусь =)
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
 
int main(int argc, char *argv[]) {
const int n,m;
 
int i,j,i1,j1,i2,j2; 
 
printf("Enter the size n:");
scanf("%d",&n);
printf("n must = m\n");
printf("Enter 2 number of size m:");
scanf("%d",&m);
if(n!=m || n<0 || m<0){
printf("ERROR");
return 0;
}
 
int array[n][m];
for(i=0; i<n; i++){
for(j=0; j<m; j++){
 
array[i][j] = rand()%10;
printf("%10d",array[i][j]);
 
}
printf("\n");
}
 
printf("\n");
for(i1=0; i1<n; i1++){
for(j1=0; j1<m; j1++){
 
array[i1][j1] = rand()%10;
printf("%10d",array[i1][j1]);
 
}
printf("\n");
}
for(i2=0; i2<n; i2++){
for(j2=0; j2<m; j2++){
 
array[i2][j2]=array[i][j] + array[i1][j1];
printf("%10d",array[i2][j2]); 
}
printf("\n");
}
 
return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2015, 01:55
Ответы с готовыми решениями:

Сложение двух матриц
помогите найти ошибку в матрице. не чо непонемаю, откуда ошибка??? ТОЛЬКО С КОДОМ С!!!!!!!!!!!!!...

Осуществить сложение двух случайных матриц
1. Осуществить сложение двух случайных матриц 2. Задать массив случайных чисел размера M на М....

Сложение 2ух матриц
Добрый день, Нужно сделать программку на Си для сложения 2 матриц, Макс число 0-9,9. Нужно...

Не работает сложение матриц
Доброго времени суток. Написала программу для сложения 2х матриц на С. Проблема такая: внутри...

7
R0
17 / 17 / 13
Регистрация: 06.08.2015
Сообщений: 73
26.09.2015, 06:18 2
Цитата Сообщение от Nakers Посмотреть сообщение
if(n!=m || n<0 || m<0){ printf("ERROR"); return 0; }
Зачем вводить n и m если по этому условию они должны быть равны? или они не должны быть равны?
тогда так
C
1
if(n==m || n<0 || m<0){ printf("ERROR"); return 0; }
0
6 / 6 / 2
Регистрация: 15.01.2015
Сообщений: 27
26.09.2015, 11:40 3
int array[n][m]; - задать размерность такого массива в зависимости от какого-то условия или по решению пользователя невозможно. Это приведет к ошибке на этапе компиляции.
Если вы проходили динамический массив , то проблему можно решить так .
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
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
int **createArray(int , int );
void setRandArray(int**, int, int);
void showArray(int**,int, int);
void delArray(int**p, int m);
 
int main(int argc, char *argv[]) {
    int n, m;   
 
    printf("Enter the size n:");
    scanf("%d", &n);
    
    printf("Enter 2 number of size m:");
    scanf("%d", &m);
    if ( n<=0 || m<=0){
        printf("ERROR");
        return 0;
    }
    
    int **array_1 = createArray(n, m);
    int **array_2 = createArray(n, m);
    int **array_Res = createArray(n, m);
 
    setRandArray(array_1, n, m);
    setRandArray(array_2, n, m);
 
    showArray(array_1,n, m);
    printf("\n");
    showArray(array_2, n, m);   
 
    printf("\n");
    
    for (int i = 0; i<n; i++){
        for (int j = 0; j<m; j++){
 
            array_Res[i][j] = array_1[i][j] + array_2[i][j];            
        }
        
    }
    showArray(array_Res, n, m);
 
    delArray(array_1, n);
    delArray(array_2, n);
    delArray(array_Res,n);
 
    return 0;
}
/************************************************************/
int **createArray(int n, int m){
    int **p = new int*[n];
    for (int i = 0; i < n; i++)
    {
        p[i] = new int[m];
    }
    
    return p;
}
/************************************************************/
void setRandArray(int**p, int n, int m){
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            p[i][j] = rand() % 10;
        }
    }
}
/************************************************************/
void showArray(int**p, int n, int m){
    for (int i = 0; i < n; i++)
    {
        for (int j= 0; j < m; j++)
        {
            printf("%10d\t", p[i][j]);
        }
        printf("\n");
    }
}
/************************************************************/
void delArray(int**p, int n){
    for (int i = 0; i < n; i++)
    {
        delete[]p[i];
    }
    delete[]p;
}
Убрал проверку m!=n так как матрица в условии прямоугольная .Убрал int i,j,i1,j1,i2,j2; так как можно использовать локальные переменные в for.Ну и для того чтобы в коде не было повторов ввел функции.
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 4
26.09.2015, 11:56  [ТС] 4
Благодарю за ответы. Но использовать динамические массивы по условию задания нельзя. Извиняюсь, что не предупредил раньше.
0
6 / 6 / 2
Регистрация: 15.01.2015
Сообщений: 27
26.09.2015, 12:16 5
Тогда можно задать в начале программы массив например array[100][100] и сказать пользователю чтобы не выходил за 100 при установке размера массива.
0
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 4
26.09.2015, 14:57  [ТС] 6
Цитата Сообщение от Freerider Посмотреть сообщение
Тогда можно задать в начале программы массив например array[100][100] и сказать пользователю чтобы не выходил за 100 при установке размера массива.
И как мне это поможет?
0
6 / 6 / 2
Регистрация: 15.01.2015
Сообщений: 27
26.09.2015, 18:30 7
Лучший ответ Сообщение было отмечено Nakers как решение

Решение

Вот так поможет?
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
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
#define SIZE_LINE 100
#define SIZE_CLM 100
void setRandArray(int*, int, int);
void showArray(int*,int, int);
 
 
int main(int argc, char *argv[]) {
        
    int array_1[SIZE_LINE][SIZE_CLM];
    int array_2[SIZE_LINE][SIZE_CLM];
    int array_Res[SIZE_LINE][SIZE_CLM];
 
    int n, m;
    setlocale(0, "rus");    
    printf("Введите количество строк, но не больше %d n:", SIZE_LINE);
    scanf("%d", &n);
    
    printf("Введите количество столбцов, но не больше %d m:", SIZE_CLM);
    scanf("%d", &m);
 
    if (n>SIZE_LINE || m>SIZE_CLM||n <= 0 || m <= 0){
        printf("Ошибка,выход за границы");
        return 0;
    }
    
    
 
    setRandArray(&array_1[0][0], n, m);
    setRandArray(&array_2[0][0], n, m);
 
    showArray(&array_1[0][0], n, m);
    printf("\n");
    showArray(&array_2[0][0], n, m);
 
    printf("\n");
    
    for (int i = 0; i<n; i++){
        for (int j = 0; j<m; j++){
 
            array_Res[i][j] = array_1[i][j] + array_2[i][j];            
        }
        
    }
    showArray(&array_Res[0][0], n, m);
 
 
    return 0;
}
 
/************************************************************/
void setRandArray(int*p, int n, int m){
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            *(p + i*SIZE_CLM + j) = rand() % 10;
        }
    }
}
/************************************************************/
void showArray(int*p, int n, int m){
    for (int i = 0; i < n; i++)
    {
        for (int j= 0; j < m; j++)
        {
            printf("%10d\t", *(p + i*SIZE_CLM + j));
        }
        printf("\n");
    }
}
Других вариантов я не вижу .Ну а так почитайте про массивы вот тут http://itedu.ru/faq/kak-pereda... massiv-v-c или посмотрите видео вот нашел https://www.youtube.com/watch?v=Q1aRdHT7jmw
1
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 4
26.09.2015, 22:26  [ТС] 8
Спасибо. Буду пробовать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2015, 22:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сложение матриц - найти ошибки в коде
пожалуйста посмотрите код не могу найти ошибку! #include &lt;stdio.h&gt; #include &lt;conio.h&gt;...

Сложение двух матриц
есть класс, в котором создаётся матрица посредством рандомного заполнения чисел или рандомного...

Сложение двух матриц
Здраствуйте помогите с решением программы Сложение двух матриц в WinForm C#.

Сложение двух матриц
В задании матрицы записываются в файл (файлы), считываются из файла (-ов) и результат выводится в...

Сложение двух матриц
Здравствуйте, по лабе задали создать класс, который выполняет сложение двух матриц с заданным типо...

Сложение двух матриц
Ребят помогите, нужно написать код для сложения двух матриц. Только без заморочек, простой обычный...


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

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

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