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

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

Войти
Регистрация
Восстановить пароль
 
Анатолий_95
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 10
#1

Сгладить двумерную матрицу, подститать сумму элементов ниже главной диагонали - C++

03.11.2013, 17:27. Просмотров 317. Ответов 0
Метки нет (Все метки)

Помогите, пожалуйста исправить ошибки и разобраться в них.

Текст задания.

Соседями элемента Аij в матрице назовеи элементы Аkl с i-1<=k<=i+1,
j-1<=l<=j+1, (k,l) != (i,j). Операция сглаживания матрицы дает новую матрицу того же размера,
каждый элемент которой получается как среднее арифметическое имеющихся соседей
соответствующего элемента исходной матрицы. Построить результат сглаживания заданной
вещественной матрицы размером 10 на 10.
В сглаженной матрице найти сумму модулей, расположенных ниже главной дигонали.

Ниже текст программы.
Она работает, создает исходную и сглаженную матрицу, но при этом в сглаженной матрице
выдает не те результаты, а сумму элементов не считает, всегда 0.
В программе матрицу я задал динамически, а не как в условии.
Подобные задачи на форуме видел, но хочу разобраться именно с этим вариантом программы.

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
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include <math.h>
 
//prototype functions
 
//functions vivoda matrix
void Vyvod (float **a, int nrow,int ncol);
void Vyvod1(float **a1,int nrow,int ncol);
 
//function sglazivaniya matrix
void Smooth_matrix(float **a,int nrow,int ncol,float **a1);
 
 
//function summ fabs elements down main diagonal
void Summ_fabs(float **a1,int nrow,int ncol,float summ);
 
int main()
{
int   nrow,// number row in starting matrix
      ncol,// number column in starting matrix
      i,j, // index of starting matrix
      m,n; // index of smooth matrix
float summ;// summ elements
 
clrscr();// clear screan
 
cout<<"Enter number row and column starting matrix: ";
cin>>nrow>>ncol;// enter number row and column of starting matrix
 
cout<<"Enter elements in matrix. It is size "<<nrow
    <<" on "<<ncol<<". "<<endl;
 
float **a=new float *[nrow];  // pick out memory for starting matrix
for (i=0;i<nrow;i++)
        a[i]=new float[ncol];
 
 
 
for (i=0;i<nrow;i++)      // enter matrix user
     for(j=0;j<ncol;j++)
        cin>>a[i][j];
 
float **a1=new float *[nrow];// pick out memory for smooth matrix
for (m=0;m<nrow;m++)
        a1[m]=new float[ncol];
 
cout<<"Starting matrix: "<<endl;
Vyvod(a,nrow,ncol);       // control print starting matrix
Smooth_matrix(a,nrow,ncol,a1);
cout<<"Smooth matrix is: "<<endl;
Vyvod1(a1,nrow,ncol);     // control print smooth matrix
Summ_fabs(a1,nrow,ncol,summ);
cout<<"Summ of elements down at main diagonal"
    <<"in smooth matrix is: "<<summ<<endl;
 
cout<<"For exit programm press any key...";
getch();
return 0;
}
 
void Vyvod(float **a,int nrow,int ncol){
        int i,j;
    cout.precision(3),cout.setf(ios::showpoint);
    cout.setf(ios::left,ios::adjustfield);
    cout.setf(ios::fixed,ios::floatfield);
    for(i=0;i<nrow;i++){
            for(j=0;j<ncol;j++)
                cout<<setw(4)<<a[i][j]<<" ";
        cout<<endl;
    }
}
 
void Vyvod1(float **a1,int nrow,int ncol){
        int m,n;
    cout.precision(3),cout.setf(ios::showpoint);
    cout.setf(ios::left,ios::adjustfield);
    cout.setf(ios::fixed,ios::floatfield);
    for(m=0;m<nrow;m++){
        for(n=0;n<ncol;n++)
        cout<<setw(4)<<a1[m][n]<<" ";
        cout<<endl;
    }
}
 
void Smooth_matrix (float **a,int nrow,int ncol,float **a1){
int i,j,m,n;
for (i=0,m=0;i<nrow,m<nrow;i++,m++){
    for (j=0,n=0;j<ncol,n<ncol;j++,n++){
    if(i==0||j==0)           a[i][j]=(a[i+1][j]+a[i][j+1])/2;
    if(i==0||j==ncol)        a[i][j]=(a[i+1][j]+a[i][j-1])/2;
    if(i==nrow||j==0)        a[i][j]=(a[i-1][j]+a[i][j+1])/2;
        if(i==nrow||j==ncol)     a[i][j]=(a[i-1][j]+a[i][j-1])/2;
    if(i==0||j>0||j<ncol)    a[i][j]=(a[i][j-1]+a[i][j+1]+a[i+1][j])/3;
    if(i==nrow||j>0||j<ncol) a[i][j]=(a[i][j-1]+a[i][j+1]+a[i-1][j])/3;
    if(i>0||i<nrow||j==0)    a[i][j]=(a[i-1][j]+a[i+1][j]+a[i][j+1])/3;
    if(i>0||i<nrow||j==ncol) a[i][j]=(a[i-1][j]+a[i+1][j]+a[i][j-1])/3;
    else if(i>0||i<nrow||j>0||j<ncol) a[i][j]=(a[i-1][j]+a[i][j+1]+a[i+1][j]+a[i][j-1])/4;
   a1[m][n]=a[i][j];
   }
  }
  return;
}
 
void Summ_fabs(float **a1,int nrow,int ncol,float summ)
{
int m,n;
summ=0;
for(m=1;m<nrow;m++){
   for(n=0;n<m;n++)
     summ+=fabs(a1[m][n]);
   }
}
Добавлено через 1 минуту
Требуется реализовать программу именно через функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 17:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сгладить двумерную матрицу, подститать сумму элементов ниже главной диагонали (C++):

Ввести матрицу и определить произведение полож. элементов ниже главной диагонали - C++
Помогите . Ввести матрицу размером N x M. Память для массива выделить динамически. Определить произведение положительных...

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

Найти сумму элементов матрицы ниже главной диагонали, и произведение элементов выше нее - C++
Добрый день, помогите найти ошибку в коде, вот задание: В матрице размером n х n найти сумму элементов, лежащих ниже главной...

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

В квадратной матрице найти сумму элементов ниже главной диагонали - C++
В квадратной матрице найти сумму элементов ниже главной диагонали Надо программу на си++

В матрице размером n х n найти сумму элементов, лежащих ниже главной диагонали, и произведение элементов, леж - C++
В матрице размером n х n найти сумму элементов, лежащих ниже главной диагонали, и произведение элементов, лежащих выше главной диагонали.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 17:27
Привет! Вот еще темы с ответами:

Наидите сумму всех элементов, расположенных на главной диагонали и ниже ее в матрице - C++
2. Наидите сумму всех элементов, расположенных на главной диагонали и ниже ее, матрицы размером 6х6, состоящей из элементов целого типа.

Найти сумму всех элементов матрицы, расположенных ниже главной диагонали - C++
Дан массив A(n,n) найти сумму всех его элементов, расположенных ниже главной диагонали Название темы должно отражать ее суть

Подпрограмма, вычисляющая сумму элементов матрицы, лежащих ниже главной диагонали - C++
Добрый день! Требуется написать программу на С++ с помощью подпрограмм. Прошу помощи мне в этом. Условие задачи: Если наибольший...

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


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

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

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