Професионална програма
Loading...
+ Нов въпрос
medical_boy_sf avatar medical_boy_sf 10 Точки

Проблем със задача 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

Благодаря предварително за отделеното време.

Тагове:
0
PHP Basics 01/01/2019 13:08:51
The_assassin avatar The_assassin 158 Точки

Лека преработка:

<?php

while (TRUE) {
    $a = intval(readline());
    if ($a % 2 == 0) {
        break;
    } else {
    echo "Please write an even number.".PHP_EOL;
    }
}
echo "The number is: " . abs($a);
?>

 

0
medical_boy_sf avatar medical_boy_sf 10 Точки

Благодаря. Твоят код работи и дава 100/100. Но така и не разбирам каква е разликата в имплементацията на моя и твоя код? И защо същият алгоритъм работи на C# да речем, а тук - не. Би трябвало да има, ако не логическа, то поне техническа причина за това. 

0
The_assassin avatar The_assassin 158 Точки

Честно казано, аз за първи път виждам проверка за четно/нечетно число направена по този начин. Кой ти каза да я правиш така!? Обикновено е % 2 == 0. Ако го преправиш на (% 2 != 0), твоят код също ще мине!

0
medical_boy_sf avatar medical_boy_sf 10 Точки

Кодът ми може да не е изряден, но въпросът си остава - защо "докато числото а е нечетно" (while (a % 2 == 1)) и "докато числото а не е четно" (while (a % 2 != 0)) са две различни неща (защото излиза, че отттам идва проблемът)? 

P. S. Сега видях, че в C# съм я решил с a % 2 != 0, явно заради това там имам 100 точки. Там също a % 2 == 1 не работи. Изглежда има граничен случай където (a % 2 != 0) не е еквивалентно на (a % 2 == 1). 

0