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

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

Войти
Регистрация
Восстановить пароль
 
No0b41k
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 68
#1

матрицы - C++

01.12.2010, 01:27. Просмотров 313. Ответов 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++ Будем называть соседями элемента с индексами ij некоторой матрицы такие элементы этой матрицы, соответсвующие индексы которых отличаются от i и j не..
C++ Работа с матрицами (Получить элементы квадратной матрицы, где элементы матрицы зависят от параметров)
Заданы матрицы А, В, С, D, каждая из которых содержит по три строчки и по три столбца. Перемножить матрицы Р и Q C++
Графы: матрицы соединений и матрицы связей C++
C++ Разложение матрицы A на треугольные матрицы
C++ Даны целочисленные матрицы A (4×5) и B (5×7). В первой строке матрицы A найти число нулевых элементов
C++ Поменять местами элементы верхнего сектора матрицы с элементами правого сектора второй матрицы и наоборот
C++ Из матрицы n-го порядка получить матрицу порядка n-1, удалив из исходной матрицы указанные строки и столбцы
Для заданной матрицы найти такие k, что k-ая строка матрицы совпадает с k-ым столбцом C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2917 / 1346 / 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     матрицы
Ответ Создать тему
Опции темы

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