LINUX.ORG.RU

Задача на сравнение 3х чисел

 , , ,


0

2

Чтобы попрактиковаться в питоне, друг предложил сделать «простую задачку». Простой она оказалась только на его словах… Он говорит, что в 5-6 строк делается. Можно использовать только if, сравнения и арифметические операторы, все остальное нельзя. Нельзя использовать готовые функции.

Задача такая. Вводим 3 числа, далее программа выводит их на экран в порядке возрастания. Плюс учитываем возможность того, что какие-то из них (или даже все) равны.

Сначала я потратил целый день, и получилось больше 100 строк. Все это время меня не покидало неприятное ощущение, что такого бреда быть не может. Я навелосипедил все возможные варианты и проверки, и получилась неприлично громадная программа. Но вроде кое-как работало… На следующий день я переделал, но получилось все-равно строк на 50. Потом я представил, а что если мне придется сравнивать 4 числа? А если 5? Это же тогда моя программа вообще разростется до миллиона строк. Но ведь друг сказал «всего 5 строк».

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

Перемещено leave из general


Ответ на: комментарий от anonymous

Там было потом уточнение про только арифметические действия, так что битовые операции, видимо, нельзя. Но, полагаю, можно модуль напрямую. На худой конец, sqrt(a^2)

kss ★★★★★
()
Ответ на: комментарий от anonymous

можно мне зачёт?

Возьми пирожок. Это ж надо из задачи с тремя числами написать портянку, когда все решается в баше… нет в cmd.

anonymous
()
Ответ на: комментарий от kss

sqrt(a^2)

я об этом подумал, но почему-то не стал делать. наверное по тому, что не знаю как на самом деле корень вычиляется. какие-то ряды тейлора чи как? мне показалось проще битик обнулить.

anonymous
()
Ответ на: комментарий от vitruss

Просто высшая математика!

это что! а вот кто решит такую задачку: сложить два целых числа, используя только битовые операции (в том числе сдвиги), условия и циклы.

anonymous
()
Ответ на: комментарий от vel

А на big-endian платформах этот фокус прокатит?

а почему нет? мы же не в отдельном байте бит меняем, а во всём числе. однако это не сработает, если на платформе размер float и int будут отличаться, очевидно.

anonymous
()
Ответ на: комментарий от anonymous

У меня вопрос: на каком по счету сообщении дойдём до задачи написать без ошибок «мама мыла раму»? Ну или на каком по счету литре C2H5OH.

anonymous
()
Ответ на: комментарий от vel

на википедии вычитал, что в ieee754 endianness не определена и на большинстве систем для float’ов и int’ов она совпадает, но бывают и исключения, да. причём очень «интересные».

on modern standard computers (i.e., implementing IEEE 754), one may in practice safely assume that the endianness is the same for floating-point numbers as for integers

anonymous
()

Прочитал, что такие задачи на сортировку чисел надо решать с помощью алгоритмов, а самый простой - метод пузырька. Пока пытаюсь вникнуть, но уже примеры выглядят странно - какие-то массивы, которые я пока даже не знаю (у меня всего 3 числа на входе), потом «первый, второй, третий… проходы», обрабатываемые в цикле, а цикл пока тоже нельзя. Можно ли воспользоваться методом пузырька без цикла, если чисел всего 3?

utrack
() автор топика
Ответ на: комментарий от utrack

За две недели мог бы что-то поинтереснее выдумать.

anonymous
()
Ответ на: комментарий от utrack

Как оказалось, можно. В 15 строк получилось. Но для 4х и более чисел наверно без циклов не обойтись.

utrack
() автор топика

Если записать в компактный вид (а if вроде как позволяет), то можно и еще немного сжать. Вобщем пузырьковый метод это тема.

utrack
() автор топика

Может кому-то тоже поможет.

https://habr.com/ru/post/204600/

Кстати, не подскажете, как и на чем делаются такие анимации? В какой программе на Linux можно делать такие примеры в виде анимации?

https://hsto.org/getpro/habr/post_images/187/5a3/929/1875a3929dd14c8ea5ff4ccc3d0db9bd.gif

utrack
() автор топика
Ответ на: комментарий от utrack

питон и в строки код сжирает, но по красивому если развернуть в 8 стк вушло.

anonymous
()
Ответ на: комментарий от utrack

В какой программе на Linux можно делать такие примеры в виде анимации?

Гифки? В Gimp.
На счет пузырькового метода, как его реализовать только с if и только с операторами сравнения больше, меньше, равно? Получается развесистое дерево вложенных if.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.