Проблем със задача Even Number на PHP
Здравейте. Имам малък проблем със задачата Even Number от лаба "Basic Syntax, Conditional Statements and Loops". Условието е:
12. Even Number
Take as an input an even number and print its absolute value. If the number is odd, print Please write an even number. and continue reading numbers while you receive even number and stop the program.
Output
If you receive even number print: The number is: {number} and finish the program, otherwise print Please write an even number.
Реших я на C# и Java без никакви проблеми, но на PHP една от проверките (по-точно първата) гърми. Използвал съм абсолютно същия алгоритъм, както при C# и Java. Пробвах парсването да бъде intval, след това floatval, но резултатът е същият. Моля за помощ. Ето го и кода ми:
https://pastebin.com/wpTSXMe2
Ето и задачата в Judge: https://judge.softuni.bg/Contests/Practice/Index/1191#11
Благодаря предварително за отделеното време.
Благодаря. Твоят код работи и дава 100/100. Но така и не разбирам каква е разликата в имплементацията на моя и твоя код? И защо същият алгоритъм работи на C# да речем, а тук - не. Би трябвало да има, ако не логическа, то поне техническа причина за това.
Честно казано, аз за първи път виждам проверка за четно/нечетно число направена по този начин. Кой ти каза да я правиш така!? Обикновено е % 2 == 0. Ако го преправиш на (% 2 != 0), твоят код също ще мине!
Кодът ми може да не е изряден, но въпросът си остава - защо "докато числото а е нечетно" (while (a % 2 == 1)) и "докато числото а не е четно" (while (a % 2 != 0)) са две различни неща (защото излиза, че отттам идва проблемът)?
P. S. Сега видях, че в C# съм я решил с a % 2 != 0, явно заради това там имам 100 точки. Там също a % 2 == 1 не работи. Изглежда има граничен случай където (a % 2 != 0) не е еквивалентно на (a % 2 == 1).
Ако числата са с плаваща запетая, нормално да не дава остатък 1. Например колко е остатъкът от 2.5 като го разделиш на 2? :)
Разбирам. Не бях обмислил този вариант, понеже по спомен реалните числа не се делят на четни и нечетни и в главата ми беше идеята, че се подават само цели числа. Благодаря за помощта!
Аз никъде не правя оценка на кода ти. Просто, тъй като ти беше попитал, аз се опитах да обясня защо моят код минава, а твоят не. Съжалявам, ако си ме разбрал погрешно!
Е аз нали точно това имах предвид в предишния ми коментар...
Всичко е точно, колега. Вторият ми коментар целеше да те попитам откъде идват различията в резултата, не съм влагал нищо повече :). Благодаря отново за помощта. Лека вечер.