LINUX.ORG.RU

Как бы вы решили

 


0

2

Даны две переменные (X,Y) в которых содержатся числа. Надо написать алгоритм после выполнения которого в X будет наименьшее значение в Y наибольшее. Можно использовать только математические функции и арифметические действия. Нельзя использовать языки программирования и вводить дополнительные переменные.


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

Скорее всего, твой препод имел ввиду «не использовать условный оператор», но ты, по своей безграмотности запомнил это так.

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

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

Напиши эти любые числа до работы алгоритма и после работы алгоритма.

I-Love-Microsoft ★★★★★
()

x:=x-H(x-y)*(x-y) дает в x наименьшее из x и y. H - функция Хэвисайда, получается из функции sign: H(x)=(sign(x)+1)/2. А функция sign в свою очередь получается как x/|x|. Надо только случай x=y отдельно вычленить кажись.

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)

написать алгоритм

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

А по сабжу, тебе тут уже все правильно ответили

buddhist ★★★★★
()
Последнее исправление: buddhist (всего исправлений: 1)
Ответ на: комментарий от anonymous

Нет. То что спросили то и скопипастил.

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

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

(c) wikipedia

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

Все пацаны пишут, а он вдруг не сможешь? Из всех адептов «алгоритмов» язык знает от силы 10-15% и то эти знания уровня начальных курсов.

registrant27492
()

математические функции

f: R^2 -> R^2
f = Id on {(a,b) | a=<b}
f(x,y) = (y,x) on {(a,b) | a>b}

А теперь сформулируй условие нормально.

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

естественно можешь. ЯП относятся к реализации а не к алгоритму.

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

Во второй строчке x уже может быть равно y и ответ неверным будет.

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

на самом деле, твою синтетику невозможно написать as is без дополнительных переменных (свопов). На момент вычисления второго выражения x имеет уже другое значение. Можно ли считать *нереализуемый* алгоритм алгоритмом — большой вопрос. Описать то ты вроде описал, но описание не содержит времени. Это вообще самый большой отсос математики в контексте программирования.

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

А у тебя тут используются дополнительные переменные, просто «нетрадиционно». Ты используешь доступ по численному ключу массива.

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

1)Это решение в рамках какой формальной системы? 2)Жгулева «Страж перевала» читал?(сори за оффтоп)

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

Прости, в своем «Карманном кодексе программиста» не нашел пункт, где говориться, что ЯП обязательно должен выражать программу для машины фон Неймана или хотя бы Тьюринга

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

Я бы предложил ТС такое наглухо императивное решение, без дополнительных переменных, правда непонятно насчет запрета использовать языки программирования, когда «переменные» (исходные) использовать можно.

x = (x + y) / 2
y = abs(x - y)
x = x - y
y = x + 2*y

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

Это решение в рамках какой формальной системы?

Это определение функции.

математические функции

Сам же сказал.

формальной системы?

Это не к математикам.

2)Жгулева «Страж перевала» читал?(сори за оффтоп)

Нет, а что? Стоит почитать?

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

Да мне больше всего нравятся Зыков(только чет политики много стало) и Жгулев. У жгулева 2 версии книги,надо последнюю читать. http://samlib.ru/z/zhgulew_p_n/sp.shtml

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

А вы что порекомендуете почитать? Я такое чувство уже все перечитал, остался один шлак, вот уже литрпг читать начал.

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

Из непопулярных - Роман Артемьев, Анджей Ясинский.

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

x = (x + y - abs(x - y)) / 2
y = (x + y + abs(x - y)) / 2

Во втором вычислении «x» может оказаться совсем не тем, что был на входе.

andreyu ★★★★★
()
Ответ на: комментарий от Ivana
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    for(int a = -2; a < 2; a++)
    {
        for(int b = -2; b < 2; b++)
        {
            int x = a;
            int y = b;
            printf("a = %3d , b = %3d -> ", x, y);

            x = (x + y) / 2;
            y = abs(x - y);
            x = x - y;
            y = x + 2 * y;

            printf("x = %3d , y = %3d\n", x, y);
        }
    }

    return 0;
}
a =  -2 , b =  -2 -> x =  -2 , y =  -2
a =  -2 , b =  -1 -> x =  -1 , y =  -1
a =  -2 , b =   0 -> x =  -2 , y =   0
a =  -2 , b =   1 -> x =  -1 , y =   1
a =  -1 , b =  -2 -> x =  -2 , y =   0
a =  -1 , b =  -1 -> x =  -1 , y =  -1
a =  -1 , b =   0 -> x =   0 , y =   0
a =  -1 , b =   1 -> x =  -1 , y =   1
a =   0 , b =  -2 -> x =  -2 , y =   0
a =   0 , b =  -1 -> x =  -1 , y =   1
a =   0 , b =   0 -> x =   0 , y =   0
a =   0 , b =   1 -> x =  -1 , y =   1
a =   1 , b =  -2 -> x =  -2 , y =   2
a =   1 , b =  -1 -> x =  -1 , y =   1
a =   1 , b =   0 -> x =   0 , y =   0
a =   1 , b =   1 -> x =   1 , y =   1
andreyu ★★★★★
()

Ммм, детские упражнения для школьников по алгоритмам (у Шеня кажется это видел), вся суть /dev...

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

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

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

Я не помню названия, а автор - А. Шень. Можешь попробовать гуглить «Шень алгоритмы», «Шень программирование».

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

В том, что оно работает. А если кто-то решил потроллить с целочисленным делением в Си, то это его личные проблемы. В конце концов сказано же, «нельзя использовать языки программирования» )

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

Но это же своп, а надо, чтобы в первой был максимум, а во второй — минимум

Softwayer ★★
()

min это коньюнкция (И) в троичной логике, max — дизьюнкция (ИЛИ).

если числа — то типа интервальной арифметики. или если число <=N, то И/ИЛИ в N-значной логике.

так что обходим в цикле и заменяем логическими функциями в многозначных логиках.

а так, да:

Можно использовать только математические функции и арифметические действия.

да всё точно так же, как обычно, только SWAP реализовал бы через XOR или +=, -=.

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

композицию коньюнкций/дизьюнкций можно вычислить как умножение булевых матриц, степени булевых матриц (моноид с умножением AND или со сложением OR).

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

Я хочу понять как эту задачу можно решить не использую яп.

как уравнения с моноидами. погугли про «моноиды на верёвках», статью с fprog.ru

Числа любые.

если не целые, многозначные логики не прокатят. fixed point ещё можно изобразить, а вот float вряд ли.

ну тогда типа интервальной арифметики, на моноидах. и оператор в N-ой степени (N-ая степень матриц), где операторы — MIN/AND, MAX/OR.

где N-максимальное число шагов, за которые ты точно найдёшь MIN/MAX.

вообще можно на этом свой язык программирования запилить

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

язык программирования: РАЯ vs. АДА, ДССП

а меня чото вдруг на Сетунь Брусенцова потянуло, с троичной логикой. перечитал инфу, прослезился.

Сетунь-70 — фактически форт-процессор с двумя (тремя) стеками — операндов, адресов возвратов и системный прерываний/макросов, причём с 27 макропроцедурами, задаваемыми пользователем.

далее в 70-х поверх этого строили структурное программирование, ветвление/цикл/вызов не операторов, а процедур (слов форта).

потом в 80-х поверх этого строили ДССП — форт-систему и язык РАЯ (расширяемый адаптивный язык), и обуачающую систему «Наставник», например.

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

другая находка месяца — MiST FPGA, на хабре исходники на верилоге 20+ архитектур компов 80-х..90-х для этой борды.

радость, счастье, просветление.

разве что Project Oberon для этой борды не хватает, для полного щастя.

машина фон Неймана так себе поделочка,кстати. он со своими зондами в конце концов от неё с боттлнеками отказался же.

anonymous
()
x = x + y;
y = (x - abs(x - 2 * y)) / 2;
x = x - y;
f1u77y ★★★★
()

Можно использовать только математические функции и арифметические действия
написать алгоритм после выполнения которого в X будет наименьшее значение в Y наибольшее

В математике переменные - константы, переприсваивания там нет.

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

Так ты подумай головой, и переспроси что непонятно.

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

он же всё-таки сказал составить алгоритм, но с математическими функциями, что вообще говоря неправильно, но понять. что имелось в виду, можно

только вот дать определение «математической функции» в понимании ТСа не осилил, хоть и понимаю, что он имеет в виду(в основном потому что сталкивался с такими же долбанутыми тасками)

а «не использовать язык программирования», похоже, означает «не использовать ничего в языке программирования, кроме оператора присваивания, арифметических операторов и „математических функций“»

f1u77y ★★★★
()
Последнее исправление: f1u77y (всего исправлений: 1)
Ответ на: комментарий от Matfix

в школке(это нечто вроде физмат лицея, только ещё углублённое изучение информатики) иногда давали нечто подобное

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