Задача №6. Дано некоторое число длиной от 1 до 5 символов, вывести все его "нечётные" цифры в обратном порядке

Задача из этого списка.

<?php
/* Дано некоторое число длиной от 1 до 5 символов, вывести все его "нечётные" цифры в обратном порядке, 
 * если же таких цифр не найдёт, вывести сообщение "Нечетных цифр не обнаружено!" */
 
 function invertNumbers($num) {
	echo "$num=<br>";
	$del = 10;
	$count = 0;
	$amountNum = strlen($num); //подсчёт количества цифр в числе
	while($amountNum > 0) {
		$moduloNum = $num % $del;
		$num /= 10; //переносим запятую в числе влево
		$amountNum--;
		if($moduloNum % 2) { //считает количество нечётных чисел
			echo $moduloNum, "<br>";
			$count += 1;
        }
	}
	if($count == 0) {
		echo "Нечетных цифр не обнаружено!<br>";
	}
}
invertNumbers(12345);
?>

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

ключевые слова не указаны

_____________
матфак вгу и остальная классика =)

Sver4ok's picture

Точно, забыл. Добавил.

melisa's picture

С точки зрения поддержки проектов очень важно уметь "правильно" называть переменные и функции.
Правильно - это так, чтобы по называнию было понятно, что делает функция и что лежит в переменной. И часто, если вам кажется, что понятно, то это совсем не означает, что понятно тому, кто будет работать с вашим кодом. Короче, навык именования жизненно важен))

  1. function invertNumbers()

    Точно также называлась функция из 5 задачи. Нет никаких отличий?

  2. $num

    Уточните.

  3. $count = 0

    count чего именно?

  4. $amountNum = strlen($num); //подсчёт количества цифр в числе

    Дополнительные комментарии - это очень хорошо, но постарайтесь немного открыть смысл переменной с помощью её имени.

  5. $moduloNum = $num % $del;

    Поясните, пожалуйста, как сложилось это название. Неочевидное.

Sver4ok's picture

Мде, я и сам не понял что я там под переменными имел ввиду,
действительно лучше не экономить на словах. Может так?

<?php
/* Дано некоторое число длиной от 1 до 5 символов, вывести все его "нечётные" цифры в обратном порядке, 
 * если же таких цифр не найдёт, вывести сообщение "Нечетных цифр не обнаружено!" */
  
 function OutputOddNumbersInReverseOrder($inputNumber) {
    echo "$inputNumber=<br>";
    $countOddNumbers = 0;
    $amountNumbersInTheInputNumber = strlen($inputNumber); //подсчёт количества цифр в числе
    while($amountNumbersInTheInputNumber > 0) {
        $divisionModuloInputNumber = $inputNumber % 10;
        $inputNumber /= 10; //переносим запятую в числе влево
        $amountNumbersInTheInputNumber--;
        if($divisionModuloInputNumber % 2) { //считает количество нечётных чисел
            echo $divisionModuloInputNumber, "<br>";
            $countOddNumbers += 1;
        }
    }
    if($countOddNumbers == 0) {
        echo "Нечетных цифр не обнаружено!<br>";
    }
}
OutputOddNumbersInReverseOrder(12345);
?>
melisa's picture

Хорошо. Теперь имнование буквальное, отражает, как формируется переменная. А непохо бы было, чтобы больше внимание уделилось тому, что она обозначает.

Например:

  1. $countOddNumbers = 0;

    $countOddNumbers - это, конечно, количество нечётных цифр, но по сути данная переменная "считает". Чтобы дать больше информации, назовём её $oddNumbersCounter.

  2. Аналогично с
    $amountNumbersInTheInputNumber = strlen($inputNumber); //подсчёт количества цифр в числе
  3. $divisionModuloInputNumber - это конечно модульное деление введённого числа на 10, но в функции оно играет роль основного, активного числа, по которому производится сравнение, поэтому, можно назвать его $currentNumber

К примеру, может получиться как-то так:

<?php   
 function OutputOddNumbersInReverseOrder($inputNumber) {
    echo "$inputNumber=<br>";
    $oddNumbersCounter = 0;
    $numbersInTheInputNumberCounter = strlen($inputNumber); //подсчёт количества цифр в числе
    while($numbersInTheInputNumberCounter > 0) {
        $currentNumber = $inputNumber % 10;
        $inputNumber /= 10; //переносим запятую в числе влево
        $numbersInTheInputNumberCounter--;
        if($currentNumber % 2) { //считает количество нечётных чисел
            echo $currentNumber, "<br>";
            $oddNumbersCounter++;
        }
    }
    if($oddNumbersCounter == 0) {
        echo "Нечетных цифр не обнаружено!<br>";
    }
}
OutputOddNumbersInReverseOrder(12345);
melisa's picture

  1. вот это
    $countOddNumbers += 1;

    можно написать сокращённо, как вы сделали здесь:

    $amountNumbersInTheInputNumber--;
  2. ?>

    Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Почитайте про это в официальной документации PHP.

Sver4ok's picture

$divisionModuloInputNumber - это конечно модульное деление введённого числа на 10, но в функции оно играет роль основного,
активного числа, по которому производится сравнение, поэтому, можно назвать его $currentNumber

А, count - это количество, а counter счётчик? Английский у меня плоховат просто, потому пишу как гугол скажет.
Ну тогда так, да) Только у меня переменные в последующих задачах записаны по старинке все.

<?php   
/* Дано некоторое число длиной от 1 до 5 символов, вывести все его "нечётные" цифры в обратном порядке, 
 * если же таких цифр не найдёт, вывести сообщение "Нечетных цифр не обнаружено!" */
function OutputOddNumbersInReverseOrder($inputNumber) {
	echo "$inputNumber=<br>";
    $oddNumbersCounter = 0;
    $numbersInTheInputNumberCounter = strlen($inputNumber); //подсчёт количества цифр в числе
    while($numbersInTheInputNumberCounter > 0) {
        $currentNumber = $inputNumber % 10;
        $inputNumber /= 10; //переносим запятую в числе влево
        $numbersInTheInputNumberCounter--;
        if($currentNumber % 2) { //считает количество нечётных чисел
			echo $currentNumber, "<br>";
            $oddNumbersCounter++;
        }
    }
    if($oddNumbersCounter == 0) {
        echo "Нечетных цифр не обнаружено!<br>";
	}
}
OutputOddNumbersInReverseOrder(12345);
melisa's picture

Предложения по именованию это скорее для упражнения. Чтобы попробовать себя в этом.
Здесь всего лишь одна задача, кода мало, запутаться сложно, поддерживать код никто не будет. Так что не критично)