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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> максимальный по модулю элемент, поиск максимального по модулю элемента  
:(
    Опции темы
suse
Дата 28.5.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



есть функции определения максимального и минимального элемента в матрице
Как сделать функцию определения максимального по модулю элемента?
Код

//Функция определения индекса большего элемента
int S_max(float *M,int N)
{int i,max_n=0;
 float max=M[0];
 for(i=1;i<N;i++)
    {if (*(M+i)>max)
    {max=*(M+i);
       max_n=i;}
   }return max_n;
}
//Функция определения индекса меньшего элемента
int S_min(float *M,int N)
{int i,min_n=0;
 float min=M[0];
for(i=1;i<N;i++)
    {if (*(M+i)<min)
    {min=*(M+i);
       min_n=i;}
   }return min_n;
}


Добавлено через 13 минут и 40 секунд
Ну можно их сравнить конечно по fabs
PM MAIL   Вверх
mes
Дата 28.5.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(suse @  28.5.2009,  19:36 Найти цитируемый пост)
Как сделать функцию определения максимального по модулю элемента?

Цитата(suse @  28.5.2009,  19:36 Найти цитируемый пост)
сравнить ... по fabs 

 smile , 
если уже известны минимальное и максимальное, то достаточно сравнить по фабс только их. smile



Это сообщение отредактировал(а) mes - 28.5.2009, 22:59


--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 29.5.2009, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



с давних пор прекратил собирать корявые велосипеды и другим не рекомендую. граждане! товарищи! братцы! используйте STL!

Код

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath> 

float modul(float x)
{
    return fabs(x);
} 

int main()
{
 float arr[] = {/*исходный массив - заполняем сами*/};
 std::vector<float>v;
 std::transform(arr, arr+ARRAYSIZE(arr), std::inserter(v,v.begin()), modul);
 std::cout << "Max element: " << * std::max_element(v.begin(),v.end()) << std::endl; 
 std::cin.get(); 
 return 0; 
}

PM MAIL   Вверх
mes
Дата 29.5.2009, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(mrbrooks @  29.5.2009,  07:06 Найти цитируемый пост)
с давних пор прекратил собирать корявые велосипеды и другим не рекомендую. граждане! товарищи! братцы! используйте STL!

так категорично ?! a где то сказано или хотя бы есть намек, что это С++, а не С ?  smile 


Это сообщение отредактировал(а) mes - 29.5.2009, 08:55


--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 29.5.2009, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(mes @  29.5.2009,  08:54 Найти цитируемый пост)
так категорично ?! a где то сказано или хотя бы есть намек, что это С++, а не С ? 

 smile 
ммм. ну только то что код у автора имеет подпись код С++  smile 

PM MAIL   Вверх
mes
Дата 29.5.2009, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(mrbrooks @  29.5.2009,  08:00 Найти цитируемый пост)
ммм. ну только то что код у автора имеет подпись код С++

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




--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 29.5.2009, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(mes @  29.5.2009,  09:24 Найти цитируемый пост)
это действительно может сбить с толку,  хотя и дается по умолчанию, при нажатии на кнопку без выбора.

да блин камрад я это прекрасно знаю. должен же я хоть как то отбрехаться  smile 
хотя конечно в таких вопросах стоит всетаки указывать на чем пишешь - что бы путаницы не было.
PM MAIL   Вверх
math64
Дата 29.5.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mrbrooks @  29.5.2009,  08:06 Найти цитируемый пост)
с давних пор прекратил собирать корявые велосипеды и другим не рекомендую. граждане! товарищи! братцы! используйте STL!

Программа выдает 2 когда максимальный элемент -2.0! (и пришлось дописывать ARRAYSIZE)
И вроде бы автору нужен ИНДЕКС максимального по модулю элемента, судя по его коду.

Добавлено через 2 минуты и 13 секунд
Цитата(mes @  29.5.2009,  09:24 Найти цитируемый пост)
нда.. это действительно может сбить с толку,  хотя и дается по умолчанию, при нажатии на кнопку без выбора.

А выбора "C" нет, есть "C++" и "C++ Borland"
PM   Вверх
kamre
Дата 29.5.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mrbrooks @ 29.5.2009,  08:06)
с давних пор прекратил собирать корявые велосипеды и другим не рекомендую. граждане! товарищи! братцы! используйте STL!

[code=cpp]
 ...
 float arr[] = {/*исходный массив - заполняем сами*/};
 std::vector<float>v;
...
code]

Так здесь же в два раза больше памяти отхватили для такой примитивной задачки. Разве это нормальное решение?
PM MAIL   Вверх
mes
Дата 29.5.2009, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(math64 @  29.5.2009,  08:30 Найти цитируемый пост)
А выбора "C" нет, есть "C++" и "C++ Borland" 

ух .. точно.. это же дискриминация  ! smile  smile 

Это сообщение отредактировал(а) mes - 29.5.2009, 09:36


--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 29.5.2009, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(math64 @  29.5.2009,  09:30 Найти цитируемый пост)
Программа выдает 2 когда максимальный элемент -2.0! (и пришлось дописывать ARRAYSIZE)
И вроде бы автору нужен ИНДЕКС максимального по модулю элемента, судя по его коду.


камрад! внимательно почитаем, что пишет тс. я конечно понимаю твое стремление уличить меня в не правоте, но все же. то что он наваял - это уже другая песня.

Цитата(suse @  28.5.2009,  20:36 Найти цитируемый пост)
есть функции определения максимального и минимального элемента в матрице
Как сделать функцию определения максимального по модулю элемента?



Цитата(math64 @  29.5.2009,  09:30 Найти цитируемый пост)
А выбора "C" нет, есть "C++" и "C++ Borland" 

smile Вот с одной стороны смысла нет, а с другой есть.

Добавлено через 1 минуту и 40 секунд
Цитата(kamre @  29.5.2009,  09:35 Найти цитируемый пост)
Так здесь же в два раза больше памяти отхватили для такой примитивной задачки. Разве это нормальное решение? 


что еще скажешь? это идея, а не готовая реализация.

PM MAIL   Вверх
math64
Дата 29.5.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mrbrooks @  29.5.2009,  09:38 Найти цитируемый пост)
камрад! внимательно почитаем, что пишет тс. я конечно понимаю твое стремление уличить меня в не правоте, но все же. то что он наваял - это уже другая песня.
Цитата(suse @  28.5.2009,  20:36)
есть функции определения максимального и минимального элемента в матрицеКак сделать функцию определения максимального по модулю элемента?

максимального по модулю элемента а не модуля максимального по модулю элемента!

PM   Вверх
zim22
Дата 29.5.2009, 09:52 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(kamre @  29.5.2009,  09:35 Найти цитируемый пост)
Так здесь же в два раза больше памяти отхватили для такой примитивной задачки. Разве это нормальное решение?

Код

bool predicate(float lhs, float rhs) {
  return fabs(lhs) < fabs(rhs);
}

float a[] = {3, -5, 1, -3, 4};
float *res = std::max_element(a, a + 5, predicate);



--------------------
PM MAIL   Вверх
math64
Дата 29.5.2009, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



решение zim22 правильное, и позволяет найти индекс:
Код

cout << "Index of the element: " << (res -a);

PM   Вверх
kamre
Дата 29.5.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mrbrooks @ 29.5.2009,  09:38)
Цитата(kamre @  29.5.2009,  09:35 Найти цитируемый пост)
Так здесь же в два раза больше памяти отхватили для такой примитивной задачки. Разве это нормальное решение? 


что еще скажешь? это идея, а не готовая реализация.

Странная идея заводить вектор и хранить в нем модули элементов массива. Посмотрите на решение у zim22, библиотеку stl также нужно уметь применять правильно.
PM MAIL   Вверх
mrbrooks
Дата 29.5.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(math64 @  29.5.2009,  09:51 Найти цитируемый пост)
максимального по модулю элемента а не модуля максимального по модулю элемента!

значит ты хочешь сказать, что знак нужно сохранить в итоге? ну в принципе логично.

zim22, оптимизатор. предикаты наше все. smile 
PM MAIL   Вверх
mes
Дата 29.5.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(mrbrooks @  29.5.2009,  08:38 Найти цитируемый пост)
это идея, а не готовая реализация

немножко подправленная идея :
Код

bool modul_less (float a, float b) { return fabs( a ) < fabs( b ); }

int main(void)
{
 float arr[] = { 0.3, 4.5, 5.6, -7.4, -0.5, 2.4 };
 float * const arr_end = arr +sizeof(arr)/sizeof(*arr);

 float * max_el = std::max_element(arr, arr_end);
 float * min_el = std::min_element(arr, arr_end);

 float * max_mod_el = std::max_element(arr, arr_end, modul_less);
 float * min_mod_el = std::min_element(arr, arr_end, modul_less);

/* if (max_el<arr_end)*/ std::cout<<"Max element : "<< *max_el << " id: " << max_el-arr << std::endl;
/* if (min_el<arr_end)*/ std::cout<<"Min element : "<< *min_el << " id: " << min_el-arr << std::endl;

/* if (max_mod_el<arr_end)*/ std::cout<<"Max modul element : "<< *max_mod_el << " id: " << max_mod_el-arr << std::endl;
/* if (min_mod_el<arr_end)*/ std::cout<<"Min modul element : "<< *min_mod_el << " id: " << min_mod_el-arr << std::endl;

 return 0;

}


zim22 успел раньше подправить идею ;)

Это сообщение отредактировал(а) mes - 29.5.2009, 10:10


--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 29.5.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(kamre @  29.5.2009,  10:02 Найти цитируемый пост)
Странная идея заводить вектор и хранить в нем модули элементов массива. 

согласен.

Цитата(kamre @  29.5.2009,  10:02 Найти цитируемый пост)
Посмотрите на решение у zim22, библиотеку stl также нужно уметь применять правильно. 

дык кто спорит то.
PM MAIL   Вверх
azesmcar
Дата 29.5.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



ошибка

Это сообщение отредактировал(а) azesmcar - 29.5.2009, 11:45
PM   Вверх
zim22
Дата 29.5.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(azesmcar @  29.5.2009,  10:43 Найти цитируемый пост)
std::sort имеет логаритмическую сложность

Цитата(azesmcar @  29.5.2009,  10:43 Найти цитируемый пост)
 Approximately N log N 

 smile 
логарифмическая сложность - это logN. когда N равно 1 миллион, logN равен 20
NlogN: когда N равно 1 миллион, NlogN около 20 миллионов. Когда N удваивается, тогда время выполнения более чем удваивается.

Это сообщение отредактировал(а) zim22 - 29.5.2009, 11:04


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


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



zim22

да верно, не подумал над этим. Этот вариант будет медленее.
мне самому стало интересно каким образом я смог представить логаритмический алгоритм сортировки smile 
хочу в отпуск


Это сообщение отредактировал(а) azesmcar - 29.5.2009, 11:47
PM   Вверх
suse
Дата 30.5.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо всем! Но я уже сравнил по fabs! Ну а код на C... 

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

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

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

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

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


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

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


 




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


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

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