PORTA.ru - on-line магазин ПОРТАтивной техники.PORTA.ru - on-line магазин ПОРТАтивной техники.

Новости
Мои разработки
FAQ
Ссылки
Форум

Возведение в дробную степень

//В диалоговой форме - Лимит, Точность, СамоЧисло(неотрицательное) и //Степень.
//*******************************************
Функция ЦелаяСтепень(а,б)
     Результат=1;
     Для К=1 По б Цикл
          Результат=Результат*а;
     КонецЦикла;
     Возврат Результат;
КонецФункции

Функция
 ЗнаковПослеТочки(Стр)
     Перем К;
     Номер=Найти(Стр,".");
     Если Номер=0 Тогда
          Возврат 0;
     КонецЕсли;
     НачалоНулей=Номер+1;
     Для К=Номер+1 По СтрДлина(Стр) Цикл
          Если Сред(Стр,К,1)<>"0" Тогда
               НачалоНулей=К;
          КонецЕсли;
     КонецЦикла;
     Возврат Макс(НачалоНулей-Номер,0);
КонецФункции

Функция
 Знак(Ч)
     Если Ч=0 Тогда
          Возврат 0;
     ИначеЕсли Ч>0 Тогда
          Возврат 1;
     Иначе
          Возврат -1;
     КонецЕсли;
КонецФункции

Функция
 Корень10ВСтепени(Ч,Степень)
     Перем а,б;
     Если Степень<0 Тогда
          Сообщить("Степень <0");
     КонецЕсли;
     _10ВСтепени=ЦелаяСтепень(10,Степень);
     Если _10ВСтепени>1 Тогда
          а=0;
          б=Лимит;
          РезА=Ч-ЦелаяСтепень(а,_10ВСтепени);
          РезБ=Ч-ЦелаяСтепень(б,_10ВСтепени);
          Пока 1=1 Цикл
               Текущее=(а+б)/2;
               Рез=Ч-ЦелаяСтепень(Текущее,_10ВСтепени);
               Если Знак(Рез)*Знак(РезА)<0 Тогда
                    б=Текущее;
               Иначе
                    а=Текущее;
               КонецЕсли;
               Если (а-б<Точность) И (а-б>-Точность) Тогда
                    Возврат Текущее;
               КонецЕсли;
          КонецЦикла;
     ИначеЕсли Степень=1 Тогда
          Возврат Ч;
     Иначе
          Возврат 1;
     КонецЕсли;
КонецФункции

Функция
 Степень_xyz(f,x,y,z)
     Возврат ЦелаяСтепень(f,x)*ЦелаяСтепень(f,y)/Корень10ВСтепени(f,z);
КонецФункции

Функция
 ПоложительнаяДробнаяСтепень(а,ПоказательСтепени)
     Перем Знак;
     ЦелаяЧасть=Число(Строка(Цел(ПоказательСтепени)));
     ДрЧасть=Сред(ПоказательСтепени,СтрДлина(Строка(ЦелаяЧасть))+2);
     ВерхДробной=Число(СтрЗаменить(ДрЧасть,".",""));
     Если ВерхДробной>0 Тогда
          ДлинаДробной=ЗнаковПослеТочки(Строка(ПоказательСтепени));
     Иначе
          ДлинаДробной=0;
     КонецЕсли;
     x=ЦелаяСтепень(а,ЦелаяЧасть)*Корень10ВСтепени(ЦелаяСтепень(а,ВерхДробной),ДлинаДробной);
     Возврат x;
КонецФункции

Функция
 Степень(а,б)
     Если б<0 Тогда
          НашаА=1/а;
          НашаБ=-б;
     Иначе
          НашаА=а;
          НашаБ=б;
     КонецЕсли;
     Сообщить(ПоложительнаяДробнаяСтепень(НашаА,НашаБ));
     Возврат ПоложительнаяДробнаяСтепень(НашаА,НашаБ);
КонецФункции
Лимит=9999999;
Точность=0.001;
<сообщил Пудель>

- Наверх -

В качестве благодарности за решение проблемы, щелкните здесь.
Поддержите развитие сайта.
Спасибо!
Автор и разработчик: Кайгородов Андрей aka mszsuz. mszsuz@online.sinor.ru ICQ#33993114. Дата последнего обновления страницы: Friday 09.04.2004 16:52
1C:TOP-100 Рейтинг ресурсов 1С
Hosted by uCoz