Модераторы: Poseidon, Rodman
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Borland C++] Функция "Шапочка" 
:(
    Опции темы
ausar
Дата 10.8.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



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

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

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


PM MAIL   Вверх
VictorTsaregorodtsev
Дата 10.8.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 1
Всего: 8



Детский сад, чесслово...
Программируете эти условия/формулу и всё. Тело функции - 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:55
PM MAIL WWW   Вверх
Guedda
Дата 10.8.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 6
Всего: 78




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


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


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
volvo877
Дата 10.8.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

Репутация: 34
Всего: 116



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

Вообще-то это квадраты, если что... 
PM MAIL   Вверх
VictorTsaregorodtsev
Дата 11.8.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 1
Всего: 8



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

тогда н@х модуль у икса, если возводится в квадрат? Ладно, автор темы разберется
PM MAIL WWW   Вверх
ausar
Дата 21.8.2007, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



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

Код

#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();
}


Это сообщение отредактировал(а) Guedda - 21.8.2007, 10:12
PM MAIL   Вверх
JackYF
Дата 21.8.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Модератор
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



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();
}



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ausar
Дата 22.8.2007, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Declaration was expected?

PM MAIL   Вверх
JackYF
Дата 22.8.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Модератор
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



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

#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();                                                                                                                                                                       
}       



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ausar
Дата 23.8.2007, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Прошу прощения. Впредь буду деталней излагать мысли

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

Почему то если вводить мелкие значения типа 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))

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

PM MAIL   Вверх
JackYF
Дата 23.8.2007, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Модератор
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



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

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

Код

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



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1395 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.