Опять затрону достаточно замусоленную тему насчет логики C языков "если целое делим на целое, то и в результате получим целое". Да, я понимаю, что указав явно при делении Код (C++): int a = 100; int b = 75; float c = (float)b / (float)a; Serial.println(c); получим требуемое. Но я переменную "a" получаю из функции, которая находит в массиве максимальное значение (ах да, в С опять же нет встроенных функций нахождения минимального и максимального значения в массиве, а также sort(), ну и ладно). Ну допустим Код (C++): float maxval(int a[], int size) { int mx = 0; for(int i=0; i<(size-1); i++) { if(a[i] > mx) mx = a[i]; } return mx; } И вот как бы я не указывал при делении и при объявлении этой функции - int, float... - я получаю при делении целое значение - то есть, раз делю меньшее число на большее или равное - либо 1, либо 0. Что происходит с переменной в функции, что я не могу нормально, как гуманоид, а не робот, поделить два числа? Может, мне конвертировать его в string, а потом снова в int, чтобы очистить его карму?
Я не поклонник Си, но не могу въехать: Вы не можете связать сами первую часть своего суперироничного поста со второй?
Отмечу, что на мой взгляд, функция maxval написана неправильно. For пробежит все значения 0...size-2, так как в условии вы поставили оператор "меньше". Стоит либо написать Код (C++): for(int i = 0; i <= (size - 1); i++) либо Код (C++): for(int i = 0; i < size; i++)
Функция действительно написана с ошибкой, но она, в первую очередь, от незнания основ Си а не его операторов.
Во-первых: Код (C++): float maxval(int a[], int size) { float mx = 0.; for(int i=0; i<size; i++) { if(a[i] > mx) mx = a[i]; } return mx; } Во-вторых: Код (C++): float b = 2.5; float a = maxval(...); float result = b/a; // всё должно быть ок. // если не ок, то: result = b/(a*1.0);
Видите. Гуманоиды такие гуманоиды, что стремятся делить как конкретно каждому гуманоиду вздумается. Вот по этому для программирования ввели правила что и как делить правильно. И теперь гуманоидам не надо ссылаться на свою гуманоидность, а учить эти стандарты, даже если это противоречит внутреней гуманоидности конкретного гуманоида.
Arduiner001, DIYMan, спасибо за поправку! А ошибка в моих танцах бубном была в том, что иногда я и получал результат в виде float, но поскольку делил не на то, получал не то, что нужно. Как-то так.
Ваша ошибка в том, что Вы не знаете предназначение float в начале функции и в надежде на то что это приведёт к приведению типа возвращаете из функции int.
ИгорьК, Вы правы. Я привык к "гуманоидному" автоприведению в php, и пока скетчи пишу по наитию, залезая в документацию только при крайнем затыке.
как вариант: Код (C++): int maxval(int a[], int size) { int mx = 0.; for(int i=0; i<size; i++) { if(a[i] > mx) mx = a[i]; } return mx; } И через явное приведение типов Код (C++): float b = 2.5; int a = maxval(...); float result = (float) b/a;