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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Вывод в ексель http://www.cyberforum.ru/cpp-beginners/thread996350.html
Помогите вывести в эксель массив. #include "stdafx.h" #include <iostream> #include <iomanip> #include <fstream> #include <math.h> using namespace std; using namespace std; fstream f; int main(){
C++ Написать программу с функцией, которая вычисляет оптимальный вес пользователя Написать программу с функцией, которая вычисляет оптимальный вес пользователя, сравнивает его с реальным, и выдает сообщение нада ему похудать или поправиться? Оптимальный вес вычисляется за формулой рост(см)-100. http://www.cyberforum.ru/cpp-beginners/thread996344.html
getline() (не получается считать информацию с файла) C++
Здравствуйте. У меня есть файл вида: volleyball 1 sports.ru 500 volleyball football Первая строка - искомый тег, вторая - количество сайтов. Задача в том, чтобы вывести имя самого популярного сайта с нужным тегом. Начиная с третьей строки, записи в таком порядке: имя сайта, популярность и список тегов. Пытаюсь считать эту информацию из файла и вывести в консоль, но что-то ничего не...
C++ Работа с файлами и предложениями
Помогите выполнить задание по структурному програмированию. Написать программу, которая считывает текст из файла и выводит на экран только предложения, состоящие из заданного числа слов. Текст созданной программы: #include<fstream.h> #include<stdio.h> #include<conio.h> int main(){
C++ Проиллюстрируйте работу простейщего класса итератора http://www.cyberforum.ru/cpp-beginners/thread996328.html
Дан класс, представляющий собой векторную таблицу. Как будет выглядеть для него класс итератор. Если можно, покажите, как перебираются элементы с помощью этого класса. class Item{ public: int key; char *info; }; Item table;
C++ Чтение с файла (FILE) Добрый день. Программа не до конца правильно работает. Не видит первую букву первого слова, если сделать в файле пробел, а только потом слово, то все нормально. Пример: В файле: Привет 34 Пока 134 Вывод на экран: ривет 34 Пока 134 Как это исправить? #include "stdafx.h" подробнее

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

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

Соседями элемента А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 минуту
Требуется реализовать программу именно через функции.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru