ОФФ: v77 Арифметика. Ряды чисел. Написать кратчайшуу ф-цию. Для тех, кому не лень размяться в арифметике - Задача : Составить наикратчайшую функцию, вычисляющую У от Х. Имеем Таблицу значений из двух колонок Х, У . У= f(x); Написать ф-цию на 1Сv77. А можно и на любом языке, важен алгоритм. Сравнивать длину кода будем по коду в 77. |
[url=https://cloud.mail.ru/public/41KG/UkKPLUoLn]Таблица[/url] Параметр (х) - может принимать целые положительные значения от 0 до бесконечности. Дополнительные условия задачи, вся функция должна уместиться в одну строку, т.е использовать ";" для разделения операторов в середине строки нельзя пример: в=10;а=в+1;у=а*х; // не зачет. Надо так: у = х*(а+в) ; У кого код окажется самый короткий, значит у того самый длинный [img]http://pl1c.org/.s/sm/1/smile.gif[/img] Кто решит, тоже не показывает свое решение до поры до времени, просто сообщает сколько символов вся строка СтрДлина("у = х*(а+в) ;"); ? p.s. знакомым с решением этой задачи по публикации на другом форуме просьба не выдавать решение. |
Начнем пожалуй так: Я угадаю эту формулу со 100 букв :) |
Ничего не понял, как можно что-то написать не имея конкретных значений пар {x,y**? Про что ваще речь ? Самое короткое это y = x. |
3-USSR > конкретные значения в [b]Таблица[/b] Там ссылка спрятана. Плоховасто отображаются ссылки. [url]https://cloud.mail.ru/public/41KG/UkKPLUoLn[/url] |
Оформление не считаем, типа Функция Перем .... // и так далее [b]у=f(x);[/b] КонецФункции считаем длину (кол-во символов без пробел) самой формулы. [b]у=f(x);[/b] |
Ты точно уверен в таблице? У меня вопрос вызывают значения у при х= 43, 44, 45 а также при х = 56, 57, 58 так то формула бы получилась несложная, но вот эти две ... "триады".. хм.. выбиваются из ряда... или это правильно, чтобы не было так уж легко? |
[quote=Блондинка в шок;44237103]выбиваются из ряда...[/quote] Ты это товой, "выбиваются", сейчас удалят тему за политику :) Все там цифры правильные, утвержденные Верховным советом и одобренные правительством. Задача имеет вполне себе прикладное применение. А вот логику ряда многим бы хотелось понять, но не только лишь все это могут. |
эх.. а жаль.. ладно, завтра подумаем еще. |
Исходники, можно сверить цифры а то мало ли чего Шух с недоперепития напечатал :) [url]https://cloud.mail.ru/public/2MB5/xzW7mYrbU[/url] |
Я не понял... надо написать функцию именно и только для данной таблички? |
Я несколько упростил задачу, чтобы не париться с округлением. Округлять-то мы умеем. Или нет? На самом деле параметр х - не из натурального ряда чисел, и может принимать дробные положительные значения с округлением вверх, те есть х = 30.01 должен округлиться до 31. |
10-Гена > да, именно для этой Для тех, кто не понял, написать ф-цию для этой же таблички с округлением вверх :) Параметр (х) может принимать положительные значения, но до сотых :) например при х = 45.01, вычислить у. |
Я не одноэсник, поэтому в экселе: =ЕСЛИ(ОКРУГЛВВЕРХ(A1;0)>61;256;ЕСЛИ(ОКРУГЛВВЕРХ(A1;0)>44;ОКРУГЛВНИЗ(3,52*ОКРУГЛВВЕРХ(A1;0)+37,85;0);ЕСЛИ(ОКРУГЛВВЕРХ(A1;0)<29;0;ОКРУГЛВНИЗ(3,5*ОКРУГЛВВЕРХ(A1;0)+38;0)))) |
13-Гена >это конечно круто, но даже без "у=" у тебя уже 172 символа получилось :) [quote=Шухер;44236708]Начнем пожалуй так: Я угадаю эту формулу со 100 букв :) [/quote] |
Гена, ты напиши алгоритм просто. Как физик |
14-Шухер > можно сначала определить в ячейке B1 =ОКРУГЛВВЕРХ(A1;0) тогда в С1: =ЕСЛИ(B1>61;256;ЕСЛИ(B1>44;ОКРУГЛВНИЗ(3,52*B1+37,85;0);ЕСЛИ(B1<29;0;ОКРУГЛВНИЗ(3,5*B1+38;0)))) |
16-Гена >Принимается округление вверх в другой ячейке. Итак, Гена может угадать формулу с 97 букв :) 97 букв раз, 97 букв ... Кто меньше 97 предложит ? |
Решение у Гены, переписанное на v77, выглядит покороче, чем в екселе. При проверке обнаружил, что 1С и Ексель по разному трактует ф-цию округления вниз. в 1С так посчитает: окр(3.52*[b]46[/b]+37.85,0,0) = 200 ОКРУГЛВНИЗ(3,52*[b]46[/b]+37,85;0) =199 Зато замена в 1С ф-ции Окр() на Цел(), которая соответствует ексельской ОКРУГЛВНИЗ, позволила укоротить нашу формулу еще на 4 символа. |
Алгоритм Гены, переписанный из Ехеля на 1С, уложился в 66 символов. (Переписав её немного по другому, можно еще выиграть несколько символов, но я его оставляю, как у Гены, естественно - в переводе с иностранного ) Итак, Гена угадает слово с 66 букв. [b]66 букв раз ...[/b] Кто меньше? |
[quote=Гена;44237595]тогда в С1: =ЕСЛИ(B1>61;256;ЕСЛИ[/quote] Задача была написать в 1С, пока программисты вникали в тех задание, непрограммист Гена глянул, и с лёту написал функцию в С1. p.s. Ирли Бёрд, тимбукту, ну типа уже можно смеяться, каламбурчик :) |
Без использования логических операторов если(), можно описать данный ряд чисел? Так сказать чиста научно, существует математическая модель этого набора цифр? Вот так например,- достали свои логарифмические линейки, поелозили ползунками и высчитали, чему равен У при Х таком-то, без всяких условных переходов. |
[quote=Шухер;44239788]Без использования логических операторов если(), можно описать данный ряд чисел?[/quote] Может, и можно, но овчинка явно не стоит выделки. Очевидно можно избавиться лишь от первого "ЕСЛИ", воспользовавшись тем, что значения в таблице не должны превышать 256: =МИН(256;ЕСЛИ(B1>44;ОКРУГЛВНИЗ(3,52*B1+37,8 5;0);ЕСЛИ(B1<29;0;ОКРУГЛВНИЗ(3,5*B1+38;0)))) Но это так, косметическая правка, основная заслуга все равно принадлежит Гене. |
[b]?(f,F1,F2)[/b] |
Йес, кэп! |
[quote=Ткачик;44240451]=МИН(256;[/quote] Этот элегантный трюк позволяет выиграть три символа. |
110 + x + <некая подфункция (x-29)/2> 7.7 нет под рукой как-то так подумалось |
что-то в этом роде, проверить не могу y=?(X>28,?(x>62,256,Окр(2,5*(x-29))+110+29,0); |
точнее вот y=?(X>28,?(x>62,256,Окр(2,5*(x-29))+110+X,0); |
а, не. в конце чегой-то заколбасилось не туда. |
[quote=Зелёный тролль;44241707]7.7 нет под рукой[/quote] Пиши, мы переведем :) Можешь как Гена в С1 писать :) |
вместо 2.5 подставить 2.5345 |
31-Зелёный тролль > вроде правильно считает, щас проверю кавычку одну пропустил закрывающую |
31-Зелёный тролль > Круто! Работает, молодец Итак, Зеленый может угадать Слово [b]с 50-ти букв[/b]! [b]50 букв Раз! ...[/b] |
Небольшой недочет с Окр() Надо указывать жестко параметры округления - Окр(ч, 0, 1) а то можно нарваться на ошибку, из за нестандартных настроек пользователя. |
[quote=Шухер;44239788]Вот так например,- достали свои логарифмические линейки, поелозили ползунками и высчитали, чему равен У при Х таком-то, без всяких условных переходов.[/quote] ну... если ты так настаиваешь елозь. у=0,0009х^2+3.4519х+38,307 естественно, результат не забыть округлить. по обычным правилам математики |
одно ЕСЛИ все равно остается, тут я пас. ну в общем как-то так: Y=ОКР(МИН(256,?(X>28,0.0009*X*X+3.4519*X+38.307,0))) |
2.5345 на 2.535 ещё символ сэкономится ))) |
36-Блондинка в шок > да, а то у тебя везде >0 результат и растет без ограничений. Сейчас проверим, что дает квадратное уравнение |
36-Блондинка в шок > ого! :-) |
Текущее время: 14:55. Часовой пояс GMT +3. |