Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Borland C++] Функция "Шапочка"


Автор: ausar 10.8.2007, 09:15
Чтож дальше больше. Моя сеструха меня окончательно убила
Ей на лето в универе задали на Borland C вот такое. А я вообще не понимаю о чем речь идет. 

Написать функцию “шапочка” f(x), зависящую от параметров a и b: если |x| >a то f(x)=0 иначе f(x)=b*exp(-a2/(a2-|x|2)). В качестве параметров передать a,b,x.

Что это за шапочка такая да еще и от параметров зависящая :( Как этоу метафору в код то превратить
Подсобите люди добрые а?


Автор: VictorTsaregorodtsev 10.8.2007, 09:42
Детский сад, чесслово...
Программируете эти условия/формулу и всё. Тело функции - 4 строки. Аргументы функции (a,b,x) - числа с плавающей точкой.

Код

#include <math.h>
float f(float a, float b, float x)
{
   if ( fabs(x)>a )
       return 0;
   else
       return b*exp(-a/(a-fabs(x)));
}


Двойки из формулы f(x)=b*exp(-a2/(a2-|x|2)) сокращаются, поэтому в коде я их и не писал. "Шапочка" - это просто субъективное название для графика функции f(x) от x при некоторых заданных a,b и ничего здесь к процессу программирования не добавляет

Автор: Guedda 10.8.2007, 09:54

M
Guedda
Название темы не соответствует правилам раздела. Отредактировал.


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

Автор: volvo877 10.8.2007, 10:36
Цитата(VictorTsaregorodtsev @  10.8.2007,  09:42 Найти цитируемый пост)
Двойки из формулы f(x)=b*exp(-a2/(a2-|x|2)) сокращаются

Вообще-то это квадраты, если что... 

Автор: VictorTsaregorodtsev 11.8.2007, 09:28
Цитата(volvo877 @  10.8.2007,  10:36 Найти цитируемый пост)
Вообще-то это квадраты, если что... 

тогда н@х модуль у икса, если возводится в квадрат? Ладно, автор темы разберется

Автор: ausar 21.8.2007, 10:08
Должно получиться чтото в этом роде на сколько я понял
А через что выводится результат, через какую переменную. 

Код

#include <math.h>
#include <stdio.h>
#include <conio.h>
main()
float f(float a, float b, float x)
{
printf("\nВведите значение для a:");
scanf("%f",&a);
printf("\nВведите значение для b:");
scanf("%f",&b);
printf("\nВведите значение для x:");
scanf("%f",&x);
{
   if ( fabs(x)>a )
       return 0;
   else
       return b*exp(-a/(a-fabs(x)));
}
getch();
}

Автор: JackYF 21.8.2007, 19:37
ausar, построение программы не верно. Ты в функцию должен передавать параметры, а не из консоли их считывать. Считывать ты их должен раньше. Допустим, так где-то:

Код

#include <math.h>
#include <stdio.h>
#include <conio.h>
float f(float a, float b, float x)
{
{
   if ( fabs(x)>a )
       return 0;
   else
       return b*exp(-a/(a-fabs(x)));
}

int main()
{
  float a,b,x;
    
  printf("\nВведите значение для a:");
  scanf("%f",&a);
  printf("\nВведите значение для b:");
  scanf("%f",&b);
  printf("\nВведите значение для x:");
  scanf("%f",&x);
  
  float res = f(a,b,x);  

  printf("\n\nРезультат: %f", res);
  getch();
}

Автор: ausar 22.8.2007, 03:04
Declaration was expected?

Автор: JackYF 22.8.2007, 14:16
Мне за телепатию не платят, между прочим. Это же была наводка... Так, вот тебе рабочий код:
Код

#include <math.h>                                                                                                                                                                  
#include <stdio.h>                                                                                                                                                                 
float f(float a, float b, float x)                                                                                                                                                 
{                                                                                                                                                                                  
   if ( fabs(x)>a )                                                                                                                                                                
       return 0;                                                                                                                                                                   
   else                                                                                                                                                                            
       return b*exp(-a/(a-fabs(x)));                                                                                                                                               
}                                                                                                                                                                                  
int main()                                                                                                                                                                         
{                                                                                                                                                                                  
  float a,b,x;                                                                                                                                                                     
                                                                                                                                                                                   
  printf("\nВведите значение для a:");                                                                                                                                             
  scanf("%f",&a);                                                                                                                                                                  
  printf("\nВведите значение для b:");                                                                                                                                             
  scanf("%f",&b);                                                                                                                                                                  
  printf("\nВведите значение для x:");                                                                                                                                             
  scanf("%f",&x);                                                                                                                                                                  
                                                                                                                                                                                   
  float res = f(a,b,x);                                                                                                                                                            
  printf("\n\nРезультат: %f\n", res);                                                                                                                                              
  getchar();                                                                                                                                                                       
}       

Автор: ausar 23.8.2007, 01:39
Прошу прощения. Впредь буду деталней излагать мысли

И попутно вопрос:

Почему то если вводить мелкие значения типа 3.1 ,4.2 ,2.5
ответ получается такой 0.00000. 
С чем это может быть связано? Не хватает точности?

Мне кажется не правильно написана формула вычисления
вместо
f(x)=b*exp(-a2/(a2-|x|2))

должно быть так
f(x)=b*exp(-a^2/(a^2-|x|^2))

А как возвести в степени?

Автор: JackYF 23.8.2007, 02:04
Цитата(JackYF @  22.8.2007,  14:16 Найти цитируемый пост)
return b*exp(-a/(a-fabs(x)));                   

в данном случае - умножать само на себя:

Код

return b*exp(-a*a/(a*a-fabs(x)*fabs(x)));

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)