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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Матрица, максимальный элемент, задачка.. 
V
    Опции темы
Matt
Дата 3.6.2008, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



просьба помочь правильно решить эту наверно простую для вас, но пока что не для меня задачу):
Задать матрицу размером NxN и найти максимальный по модулю элемент данной матрицы...
+
Переставить строки и стобцы данной матрицы так, чтобы максимальный по модулю элемент находился на пересечении k-ой строки и k-ого столбца...


Заранее спасибо, очень хотелось бы решить данную задачу) О способе задачи матрицы ничего не сказано (рандом или с клавы - так что без разницы, лучше наверно всетаки вводить числа самому))
PM MAIL   Вверх
JackYF
Дата 3.6.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Попытки кода от тебя будут? Если нет, то переношу в центр Помощи.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Rififi
Дата 3.6.2008, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



Matt, 
Цитата(Matt @  3.6.2008,  01:39 Найти цитируемый пост)
Задать матрицу размером NxN и найти максимальный по модулю элемент данной матрицы...

с C++ многомерные массивы распологаются в памяти упорядоченно. благодаря этой особенности многомерный массив можно представить как одномерный, и тогда:

Код
#include <stdlib.h>
#include <functional>
#include <algorithm>

// сравнение модулей элементов
template <typename T>
struct abs_pred : public std::binary_function<T, T, bool>
{
    typedef std::binary_function<T, T, bool> base_type;
    typedef typename base_type::first_argument_type first_argument_type;
    typedef typename base_type::second_argument_type second_argument_type;
    typedef typename base_type::result_type result_type;
    
    result_type operator()(const first_argument_type& v1, const second_argument_type& v2) const
    {
        return std::abs(v1) < std::abs(v2);
    }
};

// Обобщенный поиск максимума с предикатом
template <typename T, const size_t N, typename Pred>
T max_element(const T (&m)[N][N], Pred _P)
{
    return std::max_element(&m[0][0], &m[0][0] + N*N, _P);
}

// поиск максимума по модулю
template <typename T, const size_t N>
T max_element(const T (&m)[N][N])
{
    return *std::max_element(&m[0][0], &m[0][0] + N*N, abs_pred<T>());
}

template <typename T, const size_t N>
void test()
{
    // заполнение массива случайными числами
    int m[N][N];
    std::generate_n(&m[0][0], N*N, &rand);

    int maximum = max_element(m);
}

PM MAIL   Вверх
Matt
Дата 3.6.2008, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



не компилица..не знаю в чем причина/
missing subscript в двух строках с T max_element(const T (&m)[N][N])...

и сложновато как-то, неужто легче нельзя сделать?)

и еще больше интересует вторая часть задачи..
Переставить строки и стобцы данной матрицы так, чтобы максимальный по модулю элемент находился на пересечении k-ой строки и k-ого столбца...
PM MAIL   Вверх
IKM2007
Дата 3.6.2008, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


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

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



Цитата(Matt @  3.6.2008,  20:11 Найти цитируемый пост)
и сложновато как-то, неужто легче нельзя сделать?)

Код

#include <iostream.h>
#include <math.h>
//n-число строк,m-число столбцов,s-номер столбца максимал. элемента,
//t-число строки максимал. элемента, fabs() функция из math.h вычисляет абсольютное значение
//числа типа double
void main()
{
double **a,*p,h;
int n,m,i,j,k;
cin>>n>>m;
a=new double *[n];
for(i=0;i<n;i++)
a[i]=new double[m];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>a[i][j];
//-------found max----------------
double l=fabs(a[0][0]);
int s=0,t=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(fabs(a[i][j])>l)
{
l=fabs(a[i][j]);
t=i;
s=j;
}

cout<<"Enter k->";
cin>>k;
//-------Переставить строки и стобцы----------------
p=a[k-1];
a[k-1]=a[t];
a[t]=p;
for(i=0;i<n;i++)
{
h=a[i][k-1];
a[i][k-1]=a[i][s];
a[i][s]=h;
}

//--------print---------------
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
//---------освобождаем память---------
for(i=0;i<n;i++)
delete [] a[i];
delete [] a;
}



--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
bronislav
Дата 3.6.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Matt @  3.6.2008,  19:11 Найти цитируемый пост)
и еще больше интересует вторая часть задачи..

Цитата(Matt @  3.6.2008,  19:11 Найти цитируемый пост)
Переставить строки и стобцы данной матрицы так, чтобы максимальный по модулю элемент находился на пересечении k-ой строки и k-ого столбца... 

Ну что-то и ты должен сделать, не всеж за тебя писать будут.

Это сообщение отредактировал(а) bronislav - 3.6.2008, 23:29


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Rififi
Дата 3.6.2008, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



Цитата(Matt @  3.6.2008,  20:11 Найти цитируемый пост)
не компилица..не знаю в чем причина/

даже не знаю что и подумать... а вот у меня - без единой ошибки. мистика, не иначе. :horror:

Цитата(Matt @  3.6.2008,  20:11 Найти цитируемый пост)
и сложновато как-то, неужто легче нельзя сделать?)

дык, батенька. Это ведь C++,а не Basic.. это тебе не козявки трескать (как говаривал один мой знакомый, бывший паскалист) :gigi: сложновато кажется потому, что ты не знаком со стандартной библиотекой шаблонов.

Цитата(Matt @  3.6.2008,  20:11 Найти цитируемый пост)
и еще больше интересует вторая часть задачи..

а вторую часть мне делать лень. :doze:
PM MAIL   Вверх
Matt
Дата 4.6.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасиб большое to IKM2007 )) вот, чуть подулучшил и подоформил его код - может кому пригодица)) спасиб))

Код

#include <iostream.h>
#include <math.h>
//n-число строк,m-число столбцов,s-номер столбца максимального элемента,
//t-номер строки максимального элемента, fabs() - функция из math.h - вычисляет
// абсолютное значение числа типа double.
void main()
{
double **a,*p,h;
int n,m,i,j,k;
cout << "Nahodim maximalniy element matricy NxN"<< endl;
cout << "--------------------------------------"<< endl;
cout << "Vvedite kol-vo stolbcov i strok:" << endl;
cin  >> m;
n=m;
cout << "Vvedite elementy matricy:" << endl;
a=new double *[n];
for(i=0;i<n;i++)
a[i]=new double[m];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>a[i][j];
//-------Находим максимум----------------
double l=fabs(a[0][0]);
int s=0,t=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(fabs(a[i][j])>l)
{
l=fabs(a[i][j]);
t=i;
s=j;
}
cout <<"Maximalniy po modulyu element matricy  =  ";
cout <<l<<endl;
cout<<" "<<endl;

cout<<"Vvedite nomer stroki(stolbca) na peresechenii kotoryh budet max element:"<< endl;
cin>>k;
cout<<"Matrica prinyala vid:"<<endl;
cout << "---------------------"<< endl;
//-------Переставляем строки и столбцы----------------
p=a[k-1];
a[k-1]=a[t];
a[t]=p;
for(i=0;i<n;i++)
{
h=a[i][k-1];
a[i][k-1]=a[i][s];
a[i][s]=h;
}

//--------Вывод на экран матрицы---------------
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}

//---------Освобождаем память---------
for(i=0;i<n;i++)
delete [] a[i];
delete [] a;
}

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

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

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

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

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


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

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


 




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


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

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