Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > матрицы


Автор: mego4el 1.12.2010, 01:27
Доброй ночи, помогите пожалуйста упростить\оптимизировать\изменить(в лучшую сторону) код следующей программы:

Код

#include <iostream>
#include <ctime> 
#include <cmath>
 
using std::cout;
using std::cin;
using std::endl;

int sr_geo(int **arr, int n)
{
        int sr_geo=0;
        float pr=1;
        for(int i=0; i<n; i++)
        {
                pr*=abs(arr[i][i]);
        }
        sr_geo = (int)exp(log((float)pr)/n);
        return sr_geo;
}
 
int main()
{    
         srand((unsigned)time(NULL)); // Функция, которая устанавливает зерно генерации случайных чисел (аргумент - время), из <ctime>.
         int n,i,j;
         int sr;
         int **arr;
         cout<<"Vvedite razmer massiva: ";
         cin>>n;
         arr = new int*[n];
         cout<<"Massiv: "<<endl;
         for(i=0; i<n; i++)
         {
                  arr[i] = new int[n];
                  for(j=0; j<n; j++)
                   {
                     arr[i][j]=rand()%9+1;
                     cout<<arr[i][j]<<"  ";
                        }
            cout<<endl;
         }
         sr = sr_geo(arr,n); // Присвоим переменой sr результат выполнения функции sr_geo() (функция поиска среднего геометрического)
         cout<<endl;
         cout<<"Sformirovannaya matrica:"<<endl;
         for(i=0; i<n; i++)
         {
                 for(j=0; j<n; j++)
                 {
                         if((i+j)%2==0)
                         {
                                 arr[i][j]= sr;
                         }
                         cout<<arr[i][j]<<"  ";
                 }
                 cout<<endl;
         }
 
         delete arr;
         system("pause");
   return 0;
}


Когда показал код преподавателю, он сказал что все сделано через ж, и сказал все переделать, но я не понимаю что я не так сделал(

а само задание к этой программе звучит так:

Дано действительную квадратную матрицу порядка n. Получить новую матрицу путем замены элементов, сумма индексов которых четная на среднее геометрическое модулей элементов, находящихся на главной диагонали.

Автор: Incinerated 1.12.2010, 15:32
честно говоря странный преподаватель, он бы уточнил что конкретно его не устраивает, и тогда можно было бы думать как это упростить, с виду все вроде нормально.

Автор: RastaDja 1.12.2010, 15:53
Может он хотел функцию?
Код

void ReversMatr(const int **arr, int **outarr, int razmer){
    int sum, srArifm;
    for(int j=0;j<razmer;j++)
          sum+=abs(mt[j][j]);
    srArifm = sum/razmer;

   for(int i=0;i<razmer;i++){
      for(int j=0;j<razmer;j++){
         if((i+j)%2==0){
              outarr[i,j] = srArifm;
         }else{
              outarr[i,j] = arr[i,j];
         }
           
      }
   }
       
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)