Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2019, 04:36   #1
Haberman
Форумчанин
 
Регистрация: 01.05.2018
Сообщений: 104
Вопрос некорректно сравниваются отрицательные числа

сначала пробовал на С
Код:
int adjacentElementsProduct(int inputArray[], size_t input_size) 
{long long int larg=0; long long int summ=0; 
 for (int i=0; i<input_size-1; i++){
summ=inputArray[i]*inputArray[i+1];
    if(larg<summ ){larg=summ;}  }
return larg;
прокололось на тесте :
{-23, 4, -5, 99, -27, 329, -2, 7, -921},9), -14);
сделал на другом языке:
Код:
function adjacentElementsProduct($array) {
  $larg =0;   $summ =0; 
   for ($i=0; $i<count($array);$i++){
    $summ=$array[$i]*$array[$i+1];
    if ($summ>$larg) {$larg=$summ;}  
   }
return  $larg;  
}
прокололось на том же тесте - {-23, 4, -5, 99, -27, 329, -2, 7, -921},9), -14);
Haberman вне форума Ответить с цитированием
Старый 15.08.2019, 05:59   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. У вас разные границы в цикле в кодах
2. Какое задание?
3. В чем некорректность?
p51x вне форума Ответить с цитированием
Старый 15.08.2019, 09:24   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от Haberman Посмотреть сообщение
сначала пробовал на С
Код:
int adjacentElementsProduct(int inputArray[], size_t input_size) 
{long long int larg=0; long long int summ=0; 
 for (int i=0; i<input_size-1; i++){
summ=inputArray[i]*inputArray[i+1];
    if(larg<summ ){larg=summ;}  }
return larg;
- так нужно сначала программировать научиться, а потом уже программы писать.
Там не сума, а просто перемножение двух последних чисел массива. Сравнения отрицательных здесь нет. Просто ноль сравниваете с суммой.
Результат: полный бред.
Cuprum5 вне форума Ответить с цитированием
Старый 15.08.2019, 15:31   #4
Haberman
Форумчанин
 
Регистрация: 01.05.2018
Сообщений: 104
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
Там не сума, а просто перемножение двух последних чисел массива. Сравнения отрицательных здесь нет.
Цитата:
Сообщение от p51x Посмотреть сообщение
2. Какое задание?
3. В чем некорректность?
задание - перемножить каждые 2 соседних числа из массива и вернуть наибольшее, для массива:
{-23, 4, -5, 99, -27, 329, -2, 7, -921} наибольшее должно получится -2*7=-14

код проходит тесты где все положительные числа и числа с нулем, всего 107 тестов проходит!
Haberman вне форума Ответить с цитированием
Старый 15.08.2019, 15:36   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. Нет проверки, что элементов >= 2
2. Если вы хотите искать минимум/максимум при наличии отрицательных чисел, то 0 не может быть начальным элементом. Обычно берут первое значение.
3. Если
Цитата:
Сообщение от Haberman Посмотреть сообщение
вернуть наибольшее
то почему вы делаете ровно наоборот. Проверяете, что получившиеся значение меньше суммы?
p51x вне форума Ответить с цитированием
Старый 15.08.2019, 15:40   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
if(larg<summ ){larg=summ;}
Когда в массиве знакочередующие, то тот 0 в larg всегда будет больше отрицательного числа. Начальное значение larg должно быть не 0, а наименьшее отрицательное для long long int
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.08.2019, 15:54   #7
Haberman
Форумчанин
 
Регистрация: 01.05.2018
Сообщений: 104
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Когда в массиве знакочередующие, то тот 0 в larg всегда будет больше отрицательного числа. Начальное значение larg должно быть не 0, а наименьшее отрицательное для long long int
Ариґато ґозаимас!
Haberman вне форума Ответить с цитированием
Старый 16.08.2019, 21:11   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Аватар
Цитата:
Начальное значение larg должно быть не 0, а наименьшее отрицательное для long long int
Думаю, что это ошибочный посыл, учитывая, что у разных машин это значение может зависеть от реализации.
Правильно это у
p51x
Цитата:
Обычно берут первое значение.
Есть существующий набор данных. Берём первый элемент и далее остальные рассматриваем относительно него так, как это следует по алгоритму.
Выполнять сравнения с нулём, максимальным или минимально возможным, это вводить в набор дополнительные значения, которых там может и не быть.
И в таком действии нет необходимости.
Как-то так, ...
ViktorR на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обрабатывать отрицательные вещественные числа? lichking Общие вопросы Delphi 5 07.11.2016 10:24
С++ Как вывести только отрицательные числа Катя08 Общие вопросы C/C++ 3 23.02.2016 09:46
Как сложить отрицательные числа как положительные F.Zhukov Microsoft Office Excel 18 06.08.2015 22:31
Assembler не сортирует отрицательные числа Arquiero Помощь студентам 0 11.03.2015 16:41
Random. отрицательные и положительные числа Seran4ek Общие вопросы Delphi 10 18.03.2014 22:16