Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Матрица произведения элементов 
V
    Опции темы
Jater
Дата 14.9.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 1.11.2008

Репутация: 1
Всего: 1



Помогите пожалуйста придумать алгоритм нахождения максимума среди произведений элементов диагоналей, параллельных главной диагонали матрицы.
не надо весь код писать! я чисто не могу догадаться как в for' ах для i и j придумать формулу!!
может у кого есть светлые идеи!
спасибо.
PM MAIL   Вверх
bsa
Дата 14.9.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Jater, напиши функцию расчета произведения элементов диагоналей, параллельных главной (параметр: 0 - главная, 1 - чуть выше, -1 - чуть ниже, 2 - через одну вверх...). Затем будет уже понятно.
PM   Вверх
Jater
Дата 14.9.2009, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 1.11.2008

Репутация: 1
Всего: 1



Честно говоря немного не понял!
т.е. если, к примеру, у меня матрица 5х5, то произведений нужно 8 штук! пусть я их буду хранить в массиве.. не важно
не понимаю,как мне перескакивать с одной диагонали на другую,т.к. в левом верхнем треугольнике 4 диагонали и получается,что  умножение надо начинать
4 раза с нулевой строки ! короче говоря как for организовать?((
или хотя бы подскажите какой заголовок ф-ии.
PM MAIL   Вверх
Dov
Дата 15.9.2009, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Код
int main()
{
    srand((unsigned)time(NULL));

    const int SIZE   = 5;
    int       max    = INT_MIN;
    int       val;
    int       matr[SIZE][SIZE];
    int       i, j, row, col;

    for( i = 0; i < SIZE; i++ )
        for( j = 0; j < SIZE; j++ )
            matr[i][j] = rand() % 30 + 1;

    for( i = 0; i < SIZE; i++ )
    {
        for( j = 0; j < SIZE; j++ )
            cout << setw( 3 ) << matr[i][j];
        cout << endl;
    }

    for( i = 0; i < SIZE - 1; i++ )
    {
        for( j = i + 1; j < SIZE - ( i == 0 ); j++ )
        {
            val = matr[i][j] * matr[j][i];
            if( val > max )
            {
                max = val;
                row = i;
                col = j;
            }
        }
    }
    cout << "\nmax  value = " << max;
    cout << "\nmatr["  << row << "][" << col << "] = " << matr[row][col];
    cout << "\nmatr["  << col << "][" << row << "] = " << matr[col][row] << endl << endl;

    return 0;
}


Это сообщение отредактировал(а) Dov - 15.9.2009, 01:15


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Jater
Дата 15.9.2009, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 1.11.2008

Репутация: 1
Всего: 1



по-моему код неверный!
объсню почему!
при матрице:  4  1  4
                        1  -1 1
                        2   1 -1
должно выдавать 4, 1, 1, 2
а выдает 8,1 ! просто я на c# валю код! и это часть задачи тока! так вот я циклы взял,где считаются произвдения!!!
короче все еще need help!
PM MAIL   Вверх
Dov
Дата 15.9.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



А, извиняюсь. Я не верно понял задание. Я думал, что нужно перемножать зеркальные, по отношению к главной диагонали, элементы. 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Dov
Дата 15.9.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Код
int main()
{
    srand((unsigned)time(NULL));

    const int SIZE   = 5;
    int       max    = INT_MIN;
    int       val;
    int       matr[SIZE][SIZE];
    int       i, j, k;

    for( i = 0; i < SIZE; i++ )
        for( j = 0; j < SIZE; j++ )
            matr[i][j] = rand() % 19 - 9;

    for( i = 0; i < SIZE; i++ )
    {
        for( j = 0; j < SIZE; j++ )
            cout << setw( 4 ) << matr[i][j];
        cout << endl;
    }
    cout << "\nvalue:       diagonals:\n";

    for( k = 1; k < SIZE; k++ )
    {
        val = 1;                
        for( i = 0, j = k; i < SIZE - k; i++, j++ )
            val *= matr[i][j];
        cout << setw( 5 ) << val << "\t";

        for( i = 0, j = k; i < SIZE - k; i++, j++ )
            cout << setw( 4 ) << matr[i][j];
        cout << endl;

        if( val > max )
            max = val;                
    }

    for( k = SIZE - 1; k > 0; k-- )
    {
        val = 1;                
        for( i = SIZE - 1, j = k - 1; i >= SIZE - k; i--, j-- )
            val *= matr[i][j];
        cout << setw( 5 ) << val << "\t";

        for( i = SIZE - 1, j = k - 1; i >= SIZE - k; i--, j-- )
            cout << setw( 4 ) << matr[i][j];
        cout << endl;

        if( val > max )
            max = val;                
    }
    cout << "\nmax  value = " << max << endl;

    return 0;
}


Работает так:
Сначала в первом цикле вычисляет произведение элементов диагонали, находящейся над главной в направлении сверху - вниз и все, что над ней, а потом в другом цикле вычисляет произведение элементов диагонали, находящейся под главной в направлении снизу - вверх и все, что под ней.


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Jater
Дата 15.9.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 1.11.2008

Репутация: 1
Всего: 1



спасибо большое!! работает!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.