Нахождение максимума из двух чисел без условных операторов и операторов сравнения

Оглавление (нажмите, чтобы открыть):

Найти минимум из двух положительных целых чисел без операций сравнения

Одна очень уважаемая компания просит желающих в ней работать решить перед собеседованием ряд задач. Вот одна из них.

Дополнительный код это используемый в современных компьютерах способ кодирования целых чисел, при котором неотрицательное число X представляется «как есть» а отрицательное число X как

(|X|-1). Таким образом, максимальное неотрицательное число, которое может быть представлено 32-мя разрядами дополнительного кода, есть 2 31 -1. Для любого неотрицательного числа в дополнительном коде старший разряд равен нулю, а для любого отрицательного — единице.

Найдите метод поиска минимума из двух положительных 32-разрядных целых чисел представленных в дополнительном коде не использующий операций сравнения и условных переходов.

Естественно интересен метод, использующий минимальное число операций и не использующий никаких вспомогательных таблиц. Вы можете пользоваться следующими 32-разрядными операциями:

Мнемоника Эквивалентная
операция языка Си
Комментарий
add(x, y) x + y сложение в дополнительном коде
sub(x, y) x — y вычитание в дополнительном коде
mul(x, y) x * y умножение в дополнительном коде
sdiv(x, y) ((signed)x) / ((signed)y) знаковое деление в дополнительном коде
udiv(x, y) ((unsigned)x) / ((unsigned)y) беззнаковое деление в дополнительном коде
or(x, y),
xor(x, y),
and(x, y)
x | y
x ^ y
x & y
логические операции
orn(x, y),
xorn(x, y),
andn(x, y)
x |

y

логические операции с инверсией второго аргумента
shl(x, y) x > y арифметический сдвиг вправо (с распространением знакового разряда)
shrl(x, y) ((unsigned)x) >> y логический сдвиг вправо (с распространением нуля)

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

Интересная задача. Ниже в рамке приведено её решение 5 операциями на Си (4 операциями не осилил). Поскольку не интересно решать задачу, видя перед собой готовое решение, то это решение спрятано. Т.е. текст записан цветом фона. Если хотите текст увидеть, выделите его мышкой.

Опубликовано: 2012.09.25, последняя правка: 2020.10.29 15:55

Оцените Оценки посетителей
Нравится ████████████████████ 7 (46.6%)
Неплохо ███ 1 (6.66%)
Так себе ███ 1 (6.66%)
Не нравится █████████████████ 6 (40%)

Отзывы

Не совсем то, но вот ещё решение:

2014/06/04 16:48, Автор сайта #

Операции ABS нет в перечне «позволенного». Но её можно заменить на AND:
Итого 5 операций: «-», «&», «+», «-», «/».

Только зря он в этом решении декларирует аргументы у функции min как без знаковые. Правильнее было бы как со знаком, ведь работать этот код верно будет только как раз для чисел со знаком. А потом ещё говорят, что си небезопасный язык.

Объясните этот фрагмент, который находит максимум два целых числа без использования if-else или любого другого оператора сравнения?

Найдите максимум двух чисел. Вы не должны использовать if-else или любой другой оператор сравнения. Я нашел этот вопрос на онлайн-доске объявлений, поэтому я подумал, что должен спрашивать в StackOverflow

Пример Вход: 5, 10 Выход: 10

Я нашел это решение, может ли кто-нибудь помочь мне понять эти строки кода

Разрежьте это. Кажется, что эта первая строка проста: она сохраняет разницу a и b . Это значение отрицательно, если a и в противном случае неотрицательно. На самом деле здесь есть ошибка: если разница чисел a и b настолько велика, что не может вписаться в целое число, это приведет к поведению undefined — oops! Поэтому допустим, что этого не происходит.

В следующей строке, которая

идея состоит в том, чтобы проверить, является ли значение c отрицательным. Практически во всех современных компьютерах цифры хранятся в формате, называемом двумя дополнениями, в котором старший бит числа равен 0, если число положительное и 1, если число отрицательное. Более того, большинство int 32 бит. (c >> 31) сдвигает число вниз на 31 бит, оставляя наивысший бит числа в пятне для младшего бита. Следующий шаг для этого числа и ANDing с 1 (чье двоичное представление равно 0 всюду, кроме последнего) стирает все более высокие биты и просто дает вам самый младший бит. Так как младший бит c >> 31 является самым старшим битом c , это означает, что старший бит c равен 0 или 1. Поскольку старший бит равен 1, если f c равно 1, это способ проверяя, является ли c отрицательным (1) или положительным (0). Объединив это рассуждение с приведенным выше, k равно 1, если a и в противном случае равно 0.

Последний шаг заключается в следующем:

Если a , то k == 1 и k * c = c = a — b , и поэтому

Какой правильный макс, так как a . В противном случае, если a >= b , то k == 0 и

Это также правильный макс.

Здесь мы идем: (a + b) / 2 + |a — b| / 2

Использовать побитовые хаки

Если вы знаете, что INT_MIN , то вы можете использовать следующее, которое выполняется быстрее, потому что (x — y) нужно оценивать только один раз.

Это основано на том же методе, что и mike.dld решение, но здесь менее очевидно, что я делаю. Операция «abs» выглядит так, будто вы сравниваете знак чего-то, но я здесь воспользовался тем фактом, что sqrt() всегда вернет вам положительный квадратный корень, поэтому я возлагаю квадрат (ab), записывая его полностью, укореняя его снова, добавив a + b и разделив на 2.

Вы увидите, что он всегда работает: например, пример пользователя 10 и 5 вы получаете sqrt (100 + 25 — 100) = 5, а затем добавьте 10 и 5 дает вам 20 и деление на 2 дает вам 10.

Если мы будем использовать 9 и 11 в качестве наших чисел, мы получим (sqrt (121 + 81 — 198) + 11 + 9)/2 = (sqrt (4) + 20)/2 = 22/2 = 11

Самый простой ответ ниже.

Это решение позволяет избежать умножения. m будет либо 0x00000000, либо 0xffffffff

Использование смещающей идеи для извлечения знака, опубликованного другими, здесь другим способом:

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

  • Разница (a — b ) может переполняться.
  • Если числа без знака и оператор >> ссылается на логический сдвиг вправо, & 1 не требуется.

Вот, как я думаю, я бы сделал эту работу. Это не так читаемо, как вам может понравиться, но когда вы начинаете с «как мне сделать X, не используя очевидный способ делать X, вы должны ожидать от этого. Теоретически это также приводит к некоторой переносимости, но вам нужно найти довольно необычную систему, чтобы увидеть проблему.

Это имеет некоторые преимущества по сравнению с показанным в вопросе. Прежде всего, он вычисляет правильный размер сдвига, вместо того, чтобы быть жестко запрограммированным для 32-битных int. Во-вторых, с большинством компиляторов мы можем ожидать, что всякое умножение произойдет во время компиляции, поэтому все, что осталось во время выполнения, — это тривиальная манипуляция бит (вычитание и сдвиг), за которой следуют загрузка и возврат. Короче говоря, это почти наверняка будет довольно быстрым даже на самом маленьком микроконтроллере, где оригинальное используемое умножение, которое должно было произойти во время выполнения, поэтому, хотя это, вероятно, довольно быстро на настольной машине, часто будет довольно бит медленнее на небольшом микроконтроллере.

Вот что делают эти строки:

c является a-b. если c отрицательно, a = b, поэтому max является a — 0 * c = a. Если c равно 1, это означает, что a

Функция getMax() без какой-либо логической операции —

Пояснение:

Позволяет разбить «max» на куски,

Таким образом, функция должна выглядеть так:

В целочисленном положительном числе первый бит (знаковый бит) — ; в отрицательном — 1. Перемещая биты вправо ( → ), можно записать первый бит.

Во время правого сдвига пустое пространство заполняется знаковым битом. Итак 01110001 → 2 = 00011100, а 10110001 → 2 = 11101100.

В результате для 8-битного сдвига числа 7 бит будет либо выражать- 1 1 1 1 1 1 1 [0 или 1] для отрицательных, либо 0 0 0 0 0 0 0 [0 или 1] для положительного.

Теперь, если операция ИЛИ выполняется с 00000001 (= 1), отрицательное число дает 11111111 (= -1) и положительный 00000001 (= 1).

static int mymax (int a, int b)

Если b > a, то (ab) будет отрицательным, знак вернет -1, добавив 1, мы получим индекс 0, который является b, если b = a, тогда ab будет 0, +1 даст 1 индекс, чтобы он неважно, вернем ли мы a или b, когда a > b тогда ab будет положительным, а знак вернет 1, добавив 1, мы получим индекс 2, где a сохраняется.

Код, который я предоставляю, заключается в поиске максимума между двумя числами, числа могут быть любого типа данных (целочисленные, плавающие). Если входные числа равны, функция возвращает номер.

Описание

  • Первое, что функция принимает аргументы как double и имеет тип возврата как double. Причина этого заключается в том, что для создания единственной функции, которая может найти максимум для всех типов. Когда заданы числа целочисленного типа, или одно целое, а другое — это плавающая точка, то также из-за неявного преобразования функция также может использоваться для нахождения max для целых чисел.
  • Базовая логика проста: допустим, что мы имеем два числа a и b, если ab > 0 (т.е. разность положительна), тогда a является максимумом else, если ab == 0, то оба равны, и если a-b b, тогда a-b > 0, т.е. + ve, поэтому результат равен 0 (т.е. r = 0). Итак, a- (a-b) * r = > a- (a-b) * 0, что дает «a» как максимум.
  • если a a- (a-b) * 1 = > a-a + b = > b, что дает «b» как максимум.

Теперь есть две оставшиеся точки 1. использование цикла while и 2. Почему я использовал переменную ‘int_diff’ как целое число. Чтобы правильно ответить на них, мы должны понять некоторые моменты:

  • Значения плавающего типа не могут использоваться в качестве операнда для побитовых операторов.
  • Из-за вышеизложенного нам нужно получить значение в целочисленном значении, чтобы получить знак различия, используя побитовые операторы. Эти две точки описывают необходимость переменной ‘int_diff’ как целочисленный тип.
  • Теперь скажем, что мы находим разницу в переменной «diff», теперь есть три возможности для значений «diff» независимо от знака этих значений. (А). | diff | >= 1, (b). 0 0 (т.е. 1,2. ). Для других двух случаев int_diff = 0.
  • Условие (temp_diff-int_diff) || 0.0 проверяет, если diff == 0, поэтому оба числа равны.
  • Если diff!= 0, то мы проверяем, истинно ли int_diff | 0, т.е. case (b) истинно
  • В цикле while мы пытаемся получить значение int_diff как ненулевое, так что значение int_diff также получает знак diff.

Максимум четыре числа без использования условного или побитового оператора

Учитывая четыре числа, выведите максимум из 4 введенных чисел без использования условного или побитового оператора (даже не троичных операторов).

Рекомендуется: Пожалуйста, сначала попробуйте подход , прежде чем переходить к решению.

Мы используем тот факт, что значение «(x — y + abs (x — y))» будет равно 0 из x меньше или равно y. Мы используем это значение в качестве индекса в массиве размера 2, чтобы выбрать максимум. Как только мы нашли максимум двух элементов, мы можем использовать одну и ту же технику, чтобы найти максимум из всех.

ссылка на сайт
brightness_4
код

Эта статья предоставлена Аркайоти Банерджи . Если вы хотите GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Найти максимум три числа в C без использования условного оператора и тройного оператора

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

Но снова его ограничил использование тернарного оператора. Теперь я не понимаю, как это сделать?

c algorithm conditional-statements

13 ответов

67 Решение Nawaz [2011-08-16 08:44:00]

Использование короткого замыкания в булевых выражениях:

Объяснение:

В логической операции AND , такой как x && y , y оценивается тогда и только тогда, когда x истинно. Если x является ложным, то y не оценивается, потому что все выражение будет ложным, которое можно вывести, даже не оценивая y . Это называется короткозамкнутым, когда значение логического выражения можно вывести без оценки всех операндов в нем.

Примените этот принцип к вышеуказанному коду. Первоначально m a . Теперь, если (m истинно, то это означает, что b больше, чем m (на самом деле это a ), поэтому второе подвыражение (m = b) оценивается и m устанавливается на b . Если, однако, (m является ложным, то второе подвыражение не будет оцениваться, а m останется a (что больше, чем b ). Аналогичным образом оценивается второе выражение (на следующей строке).

Короче говоря, вы можете прочитать выражение (m следующим образом: установите m в x тогда и только тогда, когда m меньше x , т.е. (m равно правда. Надеюсь, это поможет вам понять код.

Тестовый код:

Вывод:

Обратите внимание, что реализация max дает предупреждения, поскольку оцениваемые выражения не используются:

prog.c: 6: предупреждение: вычисленное значение не используется
prog.c: 7: предупреждение: вычисленное значение не используется

Чтобы избежать этих (безобидных) предупреждений, вы можете реализовать max как:

19 Foo Bah [2011-08-16 08:52:00]

Предполагая, что вы имеете дело с целыми числами, как насчет:

Просто добавьте еще одну альтернативу, чтобы избежать условного выполнения (это не тот, который я бы использовал, но, казалось, отсутствовал из набора решений):

Этот подход использует (как и большинство других) тот факт, что результат булевого выражения при преобразовании в int дает либо 0, либо 1. Упрощенная версия для двух значений будет:

Если выражение a верно, вернем b , тщательно сохраненный в первом индексе массива поиска. Если выражение дает false, мы возвращаем a , который хранится как элемент 0 массива lookup. Используя это как строительный блок, вы можете сказать:

Который может быть тривиально преобразован в код выше, избегая второго вызова внутреннего max , используя результат, уже сохраненный в lookup[0] , и вставляя исходный вызов max(int,int) .

(Эта часть — просто еще одно доказательство, которое вы должны измерить, прежде чем перейти к выводам, см. редактирование в конце)

Что касается того, что я бы на самом деле использовал. ну, возможно, тот, что @Foo Baa здесь изменен, чтобы использовать встроенную функцию, а не макрос. Следующий вариант будет либо здесь, либо с помощью @MSN здесь.

Общий знаменатель этих трех решений, не присутствующих в принятом ответе, состоит в том, что они не только избегают синтаксической конструкции if , либо тройного оператора ?: , но что они вообще избегают ветвления и могут иметь влияние на производительность. Прогнозирующий ветвь в CPU не может отсутствовать, когда нет ветвей.

При рассмотрении производительности сначала измерьте, а затем подумайте

Я фактически реализовал несколько различных вариантов для 2-way max и проанализировал сгенерированный код компилятором. Следующие три решения генерируют один и тот же код сборки:

Это не удивительно, так как все три представляют собой ту же самую операцию. Интересный бит информации состоит в том, что сгенерированный код не содержит никакой ветки. Реализация проста с инструкцией cmovge (тест, выполненный с помощью g++ на платформе Intel x64):

Фокус в условной инструкции перемещения, что позволяет избежать любой потенциальной ветки.

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

ОБНОВЛЕНИЕ: Глядя на это через 4 года, я вижу, что это плохо, если два или более значений оказываются равными. Замена > на >= изменяет поведение, но не устраняет проблему. Он все еще может быть спасен, поэтому я еще не удалю его, но не использую его в производственном коде.

Хорошо, здесь моя:

Обратите внимание, что использование & , а не && исключает любой условный код; он полагается на то, что > всегда дает 0 или 1. (Код, сгенерированный для a > b , может включать условные переходы, но они не видны с C.)

Найти максимальное число из трех

Задача

Определить какое из трех, введенных пользователем, чисел максимальное и вывести его на экран.

Решение

В программе будет три переменные для чисел, вводимых пользователем: n1, n2, n3. Также для упрощения алгоритма введем четвертую переменную, в которую по ходу выполнения кода будет помещено максимальное значение: max.

Алгоритм решения задачи:

  1. Сравнить первое и второе число (n1 и n2). Переменной max присвоить значение переменной, содержащей большее значение.
  2. Сравнить значение переменной max с третьим числом, введенным пользователем (n3). Если значение n3 окажется больше, чем max, то присвоить max значение третьего числа. Если же значение max окажется больше, то ничего не делать.

Программа на языке Паскаль:

Три числа не обязательно могут быть разными. Достаточно предусмотреть вариант равенства значений только в первом операторе if.

Найти максимальное число из трех

Вводятся три целых числа. Определить какое из них наибольшее.

Пусть a, b, c — переменные, которым присваиваются введенные числа, а переменная m в конечном итоге должна будет содержать значение наибольшей переменной. Тогда алгоритм программы сведется к следующему:

  1. Сначала предположим, что переменная a содержит наибольшее значение. Присвоим его переменной m .
  2. Если текущее значение m меньше, чем у b , то следует присвоить m значение b . Если это не так, то не изменять значение m .
  3. Если текущее значение m меньше, чем у c , то присвоить m значение c . Иначе ничего не делать.

Данную задачу можно решить и без использования четвертой переменной, однако программа будет логически сложнее:

  1. Если a больше b , то проверить больше ли a , чем c . Если это так, то максимальное число содержит переменная a . Если a больше b , но при этом меньше c , то максимальным является значение c .
  2. Иначе (когда a меньше b ) сравнить значения b и c . Большее из них и есть максимальное.

var
a , b , c , max : integer ;
begin
readln ( a , b , c ) ;
max : = a ;
if max then max : = b ;
if max then max : = c ;
writeln ( max ) ;
end .

var
a , b , c : integer ;
begin
readln ( a , b , c ) ;
if a > b then
if a > c then writeln ( a )
else writeln ( c )
else
if b > c then writeln ( b )
else writeln ( c ) ;
end .

main ( ) <
int a , b , c , m ;
scanf ( «%d%d%d» ,& a ,& b ,& c ) ;
m = a ;
if ( m b ) m = b ;
if ( m c ) m = c ;
printf ( «%d \n » , m ) ;
>

main ( ) <
int a , b , c ;
scanf ( «%d%d%d» ,& a ,& b ,& c ) ;

if ( a > b )
if ( a > c ) printf ( «%d \n » , a ) ;
else printf ( «%d \n » , c ) ;
else
if ( b > c ) printf ( «%d \n » , b ) ;
else printf ( «%d \n » , c ) ;
>

a = int ( input ( ) )
b = int ( input ( ) )
c = int ( input ( ) )

m = a
if m b:
m = b
if m c:
m = c

a = int ( input ( ) )
b = int ( input ( ) )
c = int ( input ( ) )

if a > b:
if a > c:
print ( a )
else :
print ( c )
else :
if b > c:
print ( b )
else :
print ( c )

алг максимум из трех
нач
цел a , b , c , m
ввод a , b , c
m := a
если b > m то m := b все
если c > m то m := c все
вывод m
кон

алг максимум из трех
нач
цел a , b , c
ввод a , b , c
если a > b то
если a > c то
вывод a
иначе
вывод c
все
иначе
если b > c то
вывод b
иначе
вывод c
все
все
кон

input a
input b
input c
max = a
if max then max = b
if max then max = c
print max

input a
input b
input c
if a > b then
if a > c then
print a
else
print c
endif
else
if b > c then
print b
else
print c
endif
endif

Как сравнить два вещественных числа без if?

Собственно, надо сравнить два числа, не используя условных операторов и операций сравнения. Язык — Java.
Для целых чисел проблем никаких нет, все делается в одну строку. Проблемы начинаются, если числа вещественные. Вообще, мой алгоритм такой: отнять одно число от другого и посмотреть на знак получившегося выражения. Но это не сработает для double, так как знак можно получить операциями сдвига, которые определены только для целых чисел. привести к целому тоже нельзя, потому что если разница чисел меньше единицы, то алгоритм отработает не верно. Придумал такой трюк:

Условные операторы: (if), (?:)

Условный оператор ветвления (if) реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true . Тернарный оператор (?:) является альтернативным вариантом конструкции if…else , позволяющим сократить ваш код, фактически записывая условие в одну строчку.

Инструкция if

Условный оператор if (в переводе с англ. — «если») реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true .

Условие в этой конструкции может быть любым выражением. JavaScript автоматически преобразует результат выра­жения в логическое значение, вызывая для него функцию Boolean(). Если условие эквивалентно true , выполняется инструкция, в противном случае – нет.

Выполняемая инструкций может быть представлена одной строкой или блоком кода (группой строк в фигурных скобках), например:

Примечание: Рекомендуется всегда использовать фигурные скобки, даже если нужно вы­полнить всего одну строку кода. Это ясно показывает, что должно быть выполнено в каждом случае и улучшает читаемость кода.

Конструкция if. else

Следующий пример выведет соответствующее окно приветствия в зависимости от текущего времени в вашем браузере:

Инструкция else if

Инструкция else if используется в случае, если требуется выполнить один из многих фрагментов кода. Формально это не JavaScript-инструкция, а лишь распространенный стиль программирования, который заключается в применении повторяющихся инструкций if/else :

Приведенный выше код – это всего лишь последователь­ность инструкций if . Каждая следующая if является частью else предыдущей инструкции if . Запись else if более удобная, чем ее синтаксически эквивалентная форма, показывающая вложенность инструкций if :

В следующем примере, благодаря применению конструкции else if , будет выведено одно из четырех окон приветствия в зависимости от времени суток:

Тернарный оператор (?:)

Условный оператор (?:) – это единственный тернарный (от лат. ternarius — «тройной») оператор с тремя операндами в JavaScript. Тернарный оператор возвращает свой второй или третий операнд в зависимости от значения логического выражения, заданного первым операндом.

Первый операнд используется в качестве условия, он вычисляется и преобразуется, при необходимо, в булево значение. Если условие верно true , то вычисляется и возвращается значение1. Если условие неверно false , то вычисляется и возвращается значение2:

Читается этот код так: если а больше b, то c = a, иначе c = b.

Можно записать тоже самое через if/else:

Вложенные инструкции if/else, так же можно заменить последовательностью из тернарных операторов:

Условный оператор ?: имеет ассоциативность справа налево, поэтому следующие две инструкции эквивалентны:

В предыдущем примере оператор && снача­ла проверяет выполняется ли временное условие (чему равна переменная time). Если условие выполняется, то в переменную message будет записа­на соответствующая строка приветствия. В противном случае, в силу побочного эффекта, связанного с неполным вычислением, оператор && выведет false и т.д. Этот метод используется не очень часто, но если вам встретится нечто подобное, то вы теперь знаете, как работают подобные инструкции.

Вам даны две переменные x и y, менять их не нужно. При помощи тернарного оператора сравните их и если x больше, чем y, то выведите фразу: «x больше, чем y», иначе выведите фразу: «x не больше, чем y».

Ответ: «x больше, чем y».

Четное или нечетное число

Пользователь вводит какое-то число (num). Используя конструкцию if..else, напишите код, который делает запрос: «Введите число».
Если посетитель вводит четное число, то выводить «»Число » + num + » четное»», если нечетное: «Число » + num + » нечетное».

Суть решения заключается в том, что проверяется остаток от деления числа на 2. Если остаток равен , значит число чётное, иначе – нечётное. Получить остаток от деления в можно с помощью оператора %.

Сколько цифр в числе и его знак

Напишите код, который предлагает пользователю ввести целое число. Нужно вывести на экран сколько в этом числе цифр, а также положительное оно или отрицательное. Например, «Число » + num + » однозначное положительное». Достаточно будет определить, является ли число однозначным, двухзначным или трехзначным и более.

Алгоритм решения задачи:

  1. Проверяем, не является ли число нулем. Ноль не является ни положительным, ни отрицательным.
  2. После этого проверяем количество знаков в в положительном числе и выводим на эран соответствующее сообщение.
  3. Проверяем количество знаков в отрицательном числе, выводим сообщение.

Принадлежность точки окружности

Даны координаты точки A(x = 4, y = 9) и радиус окружности (R = 10) с центром в начале координат. Используя тернарный оператор напишите код, который будет выводить сообщение о том, лежит ли данная точка внутри окружности или за её пределами. Для извлечения квадратного корня из числа z вам понадобится метод Math.sqrt(z) .

Следует рассмотреть прямоугольный треугольник, один катет которого лежит на любой оси, а другой является перпендикуляром к этой оси из заданной точки A. В этом случае длины катетов треугольника равны значениям x и y, а гипотенуза L является отрезком, соединяющим начало координат O с точкой A. Если этот отрезок L больше радиуса круга R, то значит точка лежит вне окружности.

Длина гипотенузы находится по теореме Пифагора: L = Math.sqrt(x*x + y*y).

Определить существование треугольника по трем сторонам

У треугольника сумма любых двух сторон должна быть больше третьей. Иначе две стороны просто на третью и треугольника не получится.
Пользователь вводит поочерёдно через prompt длины трех сторон. Используя конструкцию if..else, напишите код, который должен определять, может ли существовать треугольник при таких длинах. Т. е. нужно сравнить суммы двух любых строн с оставшейся третьей стороной. Чтобы треугольник существовал, сумма всегда должна быть больше отдельной стороны.

Поскольку у треугольника три стороны, то можно составить три варианта сложения двух сторон: a + b, b + c, a + c. Первую сумму сравниваем с оставшейся стороной c, вторую — с a и третью — с b. Если хотя бы в одном случае сумма окажется не больше третьей стороны, то можно сделать вывод, что треугольник не существует.

Найти максимальное число из трех

Определить какое из трех, введенных пользователем, чисел максимальное и вывести его на экран.
Пользователь вводит поочерёдно через prompt числа. Используя конструкцию if..else, напишите код, который должен определять, какое из введенных чисел является наибольшим.

Найти сумму или произведение цифр трехзначного числа

Пользователь вводит через prompt трёхзначное число. Проверить трехзначное число на четность и найти сумму его цифр, если число четное, или произведение его цифр, если число нечетное.

Чтобы извлечь первую цифру трехзначного числа, надо его разделить на 100 и округлить воспользовавшись побитовыми операторами.
Чтобы извлечь вторую цифру трехзначного числа, можно пойти разными способами. Например, найти остаток от деления на 100, потом разделить на 10 и снова округлить.
Последняя цифра любого числа, обозначающая единицы, извлекается путем нахождения остатка от деления на 10: n % 10.

Проверить число на четность. Найти остаток от деления числа на 2. Для этого использовать оператор %. Если результат равен нулю, значит число четное. Иначе – нечетное.

Нахождение максимума и минимума из двух целых чисел

Здравствуйте, мне нужно сравнить 2 введенных с клавиатуры числа, допустим, M1 и M2. Сравнить их между собой и выдать текст: «Число M1 > M2» или «Число M1 | улучшить этот вопрос

4 ответа 4

Вы забыли считать числа с консоли:

  1. Не происходит считывания введенных пользователем чисел a и b .
  2. Нигде не вычисляется max .
  3. В конце условия if не стоит ; .

у вас отсутствует само чтение a & b:

затем в if-else, если хотите проверить в else, что b>a — допишите if после else:

и переменная max, у вас остаеться не инициализированной, в ветках выполнения if, произведите присваивание значения нужной переменной max:

Нахождение наибольшего числа из двух

Найти наибольшее число из двух. Если числа равны, то вывести любое из них.

Входные данные

В единственной строке входного файла INPUT.TXT записано 2 числа через пробел. Оба числа целые, не меньше -10000 и не больше 10000.

Выходные данные

В файл OUTPUT.TXT выведите единственное число.

Пример

При копировании материалов обратная ссылка обязательна

Мастер Йода рекомендует:  ТОП-9 фреймворков для веб-разработки, Java и Big Data в 2020 году
Добавить комментарий
Подготовка к олимпиадам по информатике
Методика подготовки
«Золотые» алгоритмы
Простые задачи для начинающих
Олимпиадные задачи с решениями
Книги
Среда программирования
Обучение программированию на С++
Справочник по языку Pascal
Обучение
Подготовка к ЕГЭ
Создание сайтов
Уроки FrontPage
Уроки Word 2003
Создание игр на Delphi
Печатаем вслепую