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

матрицы - C++

Восстановить пароль Регистрация
 
No0b41k
 Аватар для No0b41k
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 68
01.12.2010, 01:27     матрицы #1
Доброй ночи, помогите пожалуйста упростить\оптимизировать\изменить(в лучшую сторону) код следующей программы:

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

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
01.12.2010, 02:01     матрицы #2
В чем оценивается "черезжопность"?
Маловероятно, что среднее геометрическое будет целым числом.
Вычисление дробной степени через экспоненту и логарифм... неочевидно?
В задании сказано "получить новую матрицу", а программа модифицирует существующую?

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
#include <iostream>
#include <iomanip>
#include <time.h>
#include <math.h>
 
int main()
{
    const int n = 3;
 
    srand((unsigned int)time(0));
    float **source = new float* [n];
    for (int i=0; i<n; i++)
    {
        source[i] = new float[n];
        for (int j=0; j<n; j++)
        {
            source[i][j] = (rand() % 100 + 1)/10.0;
            std::cout << std::setw(5) << std::fixed 
                << std::setprecision(2) << source[i][j];
        }
        std::cout << std::endl;
    }
 
    float **result = new float*[n];
    for (int i=0; i<n; i++)
        result[i] = new float[n];
 
    // вычисление среднего геометрического
    // главной диагонали
    float sr_geom = 0.0;
    float mult = 1;
    for (int i=0; i<n; i++)
        mult *= abs(source[i][i]);
    sr_geom = pow(mult, float(1.0/n));
    std::cout << "Srednee geoetricheskoe: " << sr_geom << std::endl;
 
    // получение результирующей матрицы
    for (int i=0; i<n; i++)
        for (int j=0; j<n; j++)
            if ((i+j)%2==0)
                result[i][j] = sr_geom;
            else
                result[i][j] = source[i][j];
 
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<n; j++)
            std::cout << std::setw(5) << std::fixed 
                << std::setprecision(2) << result[i][j];
        std::cout << std::endl;
    }
 
    for (int i=0; i<n; i++)
    {
        delete [] source[i];
        delete [] result[i];
    }
    delete [] source;
    delete [] result;
 
    system("pause");
}
Yandex
Объявления
01.12.2010, 02:01     матрицы
Ответ Создать тему
Опции темы

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