Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2009, 08:05   #1
klepan
Пользователь
 
Регистрация: 07.06.2009
Сообщений: 32
По умолчанию Помогите пожалуйста

Есть программный код, нужно прокаментировать каждую строку
Задание:
Соседями элемента Аij в матрице назовем элементы Akl c i-l ≤ k ≤ i+l, j-l ≤ l ≤ j+l,(k, l)≠(i, j).
Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент
которой получается как среднее арифметическое имеющихся соседей соответствующего
элемента исходной матрицы. Построить результат сглаживания заданной вещественной
матрицы размером 10 на 10.
В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной
диагонали.

Программный код:
Код:
#include <vcl.h>
#pragma hdrstop
#include <conio.h>

#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <iostream>
#pragma argsused

int main(int argc, char* argv[])
{

using namespace std;

 srand((unsigned) time(NULL));

 int n = 10;
 int m = 10;

 int r_limit = 10;

 vector<vector<double> > matrix;

 int i, j;
 for(i=0; i<n; i++) {

  vector<double> v;

  for(j=0; j<m; j++)
   v.push_back((rand()%2) ? (static_cast<double>(rand()%r_limit) + 1./static_cast<double>(rand()%r_limit + 1.)) :
         -(static_cast<double>(rand()%r_limit) + 1./static_cast<double>(rand()%r_limit + 1.)));

  matrix.push_back(v);
 }

 cout << "Initial matrix:" << endl;

 for(i=0; i<n; i++) {

  for(j=0; j<m; j++)
   cout << matrix[i][j] << " ";

  cout << endl;
 }

 vector<vector<double> > smooth_matrix;

 for(i=0; i<n; i++) {

  vector<double> v;

  for(j=0; j<m; j++) {
  
   double avg = 0.;
   int elements_count = 0;
    
   if(j-1 >= 0) {

    if(i-1 >= 0) {
     avg += matrix[i-1][j-1];
     elements_count++;
    }

    avg += matrix[i][j-1];
    elements_count++;
    
    if(i+1 < n) {
     avg += matrix[i+1][j-1];
     elements_count++;
    }
   }

   if(i-1 >= 0) {
    avg += matrix[i-1][j];
    elements_count++;
   }

   if(i+1 < n) {
    avg += matrix[i+1][j];
    elements_count++;
   }

   if(j+1 < m) {

    if(i-1 >= 0){
     avg += matrix[i-1][j+1];
     elements_count++;
    }

    avg += matrix[i][j+1];
    elements_count++;
    
    if(i+1 < n) {
     avg += matrix[i+1][j+1];
     elements_count++;
    }
   }

   if(elements_count != 0)
    avg /= static_cast<double>(elements_count);

   v.push_back(avg);
  }

  smooth_matrix.push_back(v);
 }

 cout << endl << "Smooth matrix:" << endl;

 for(i=0; i<n; i++) {

  for(j=0; j<m; j++)
   cout << smooth_matrix[i][j] << " ";

  cout << endl;
 }

 double summ = 0;

 for(i=0; i<n; i++)
  for(j=0; j<i; j++)
   summ += fabs(smooth_matrix[i][j]);

 cout << endl << "Summ of elements modules at main diagonal in smooth matrix is: " << summ << endl;

 getch();
 return 0;
}
зарание спасибо
klepan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сколько раз элемент C[i,i] двухмерного массива C(N,N) встречается в этом массиве kirillbobo Паскаль, Turbo Pascal, PascalABC.NET 3 19.06.2009 20:44
Помогите Помогите Пожалуйста Решить Одну Задачку в Паскале!!! VisTBacK Помощь студентам 6 19.09.2008 13:44
Помогите пожалуйста Rifel Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 19.12.2006 14:13