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

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

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

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

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

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

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

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

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

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

В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали - C++
Помогите пожалуйста, написать программу в с++. А то я чайник, ничего не понимаю... Соседями элемента А с индексом ij в матрице назовем...

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

Найти сумму элементов матрицы размещеных ниже главной диагонали в строках начинающихся с отрицательного числа - C++
1)Для матрицы размером m*m найти сумму элементов которые размещены ниже главной диагонали в рядках которые начинаются на отрицательный...

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

Прочитать матрицу из файла и посчитать сумму элементов на главной диагонали - C++
Двухмерные массивы, прочитать их из файла. Посчитать сумму элементов по главной диагонале.


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

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

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