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

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

Восстановить пароль Регистрация
 
Анатолий_95
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 10
03.11.2013, 17:27     Сгладить двумерную матрицу, подститать сумму элементов ниже главной диагонали #1
Помогите, пожалуйста исправить ошибки и разобраться в них.

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

Соседями элемента А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 минуту
Требуется реализовать программу именно через функции.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 17:27     Сгладить двумерную матрицу, подститать сумму элементов ниже главной диагонали
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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