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

Поиск:

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


Шустрый
*


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

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



Есть функция нахождения минимального элемента в массиве. Как найти минимальный по модулю элемент?

Код

#include <math.h>
#include <stdio.h>
#include <conio.h>

float sum(float *mass, int dat)     //Передаётся указатель на массив и его размер
{float min,sum=0;
 int min_num;

 min=mass[0];
  for(int k=0;k<dat;k++)
  {if (mass[k]<min)
    {min=mass[k];
     min_num=k;
    }
  }

  for(int q=min_num+1;q<dat;q++)
   {sum=sum+mass[q];
   }
  return sum; 
}


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


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


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

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



применить fabs () при получении каждого значения..

Добавлено @ 18:02
Цитата(suse @  27.1.2012,  16:51 Найти цитируемый пост)
 int min_num;

инициализируйте т.е. добавьте =0;

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


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


Шустрый
*


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

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



Эту строчку? 

Код

  {if (mass[k]<fabs(min))


Вычисляет, но неправильно.
PM MAIL   Вверх
arcsupport
Дата 27.1.2012, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуйте вот так:
Код
{if (fabs(mass[k])<fabs(min))

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


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


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

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



Цитата(suse @  27.1.2012,  17:36 Найти цитируемый пост)
Эту строчку? 

и эту:
Цитата(suse @  27.1.2012,  16:51 Найти цитируемый пост)
min=mass[0];




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


Шустрый
*


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

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



Интересный вариант, но не работает!
PM MAIL   Вверх
mes
Дата 27.1.2012, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(suse @  27.1.2012,  16:51 Найти цитируемый пост)
float min,sum=0;
 int min_num;
 min=mass[0];


это выглядит грязно, лучше так :

Код

  int min_num=0;
  float min=...[0];
  for (int k=1; ...
  
  float sum =0;
  for...

 и dat тоже лучше переименовать в что то бплее подходящее, например size

Добавлено через 6 минут и 5 секунд
Цитата(suse @  27.1.2012,  16:51 Найти цитируемый пост)
sum=sum+mass[q];

а и это логичнее когда:
Код

sum+=mass[q];




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


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


Шустрый
*


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

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



Изменил. Вычисляет, но чтото не то... Может что то не то написал?
Код

#include <math.h>
#include <stdio.h>
#include <conio.h>

float sum(float *mass, int dat)     //Передаётся указатель на массив и его размер
{ int min_num=0;
   float min=mass[0];
 for(int k=0;k<dat;k++)
  {if (mass[k]<fabs(min))
    {min=mass[k];
     min_num=k;
    }
  }
float sum=0;
  for(int q=min_num+1;q<dat;q++)
   {sum=sum+mass[q];
   }
  return sum; 
}


PM MAIL   Вверх
volatile
Дата 27.1.2012, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

float sum(float *mass, int dat)     //Передаётся указатель на массив и его размер

   int min_num=0;
   for (int k=1; k<dat; k++)
      if (fabs(mass[k]) < fabs(mass[min_num]))
         min_num=k;

   // дальше не менял --------
   
float sum=0;
  for(int q=min_num+1;q<dat;q++)
   {sum=sum+mass[q];
   }
  return sum; 
}

PM MAIL   Вверх
suse
Дата 27.1.2012, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все работает. Спасибо!

Добавлено через 16 секунд
Закрыто
PM MAIL   Вверх
mes
Дата 28.1.2012, 04:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(suse @  27.1.2012,  20:43 Найти цитируемый пост)
Может что то не то написал?

Цитата(suse @  27.1.2012,  20:43 Найти цитируемый пост)
if (mass[k]<fabs(min))

fabs нужен не у min, а у mass[]



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


Шустрый
*


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

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



Вот рабочий пример:

Код

double Proiz(float *array, int N)
{float max;
 int minnum;

 max=fabs(array[0]);

 for(int k=0;k<N;k++)
 {if(fabs(array[k])>fabs(max))//Поиск наименьшего по модулю элемента массива
    {max=array[k];
    minnum=k;}//Определение его номера
 }

 double sum=0;
 int q;
 for(q=minnum+1;q<N;q++)
  {sum=sum+array[q];
    }
  return sum;
}


Как сделать чтобы произведение, а не сумму искала?


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


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


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

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



Цитата(suse @  28.1.2012,  10:35 Найти цитируемый пост)
Как сделать чтобы произведение, а не сумму искала?

* вместо + , только вот неужто можно о таком спрашивать ?!  smile

Добавлено через 1 минуту и 15 секунд
Цитата(suse @  28.1.2012,  10:35 Найти цитируемый пост)
(max))//Поиск наименьшего по модулю 

как то сомнительно согласуется max и наименьший ..



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


Шустрый
*


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

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



Эта функция уже наибольший ищет smile
Если заменить + на *,  то ничего не вычисляет. Потому то и спрашиваю.

Добавлено через 7 минут и 9 секунд
Сумму вычисляет правильно, а произведение нет (пишет 0.000)
PM MAIL   Вверх
suse
Дата 28.1.2012, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А все понял! 

Код

 double sum=1;


На ноль то нельзя умножать!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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