Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задача с периодической функцией (Си)

16K
14 августа 2007 года
Draconit
39 / / 10.08.2007
Задача: Дано действительное число а. Вычислить f(a), где f—периодическая функция с периодом 2, совпадающая на отрезке [—1, 1] с функцией, график которой изображен на рис. 5

Вот мое решение:
Код:
#include <stdio.h>;
#include <math.h>;
#include <conio.h>;
float a,f;
void main()
{
clrscr();
puts("Vvedite a");
scanf("%d",&a);
if (a>1)
 {
  while (a>1) a=a-2;
 }
if (a<-1)
 {
  while (a<-1) a=a+2;
 }
if ((a>=-1) && (a<=0)) f=a+1;
else f=-pow(a,2)+1;
printf("f(a)=%5.5f",f);
getch();
}


Правильно ли я понял суть задания, т.е. правильные ли ответы получаются (вроде бы для отрицательных нет, и для больших чисел программа не очень подходит)? И вообще подскажите какие есть ошибки.
276
14 августа 2007 года
Rebbit
1.1K / / 01.08.2005
1.
 
Код:
scanf("%[COLOR=red]f[/COLOR]",&a);
2. Уравнение круга в начале координат x^2 + y^2 = R^2
y = sqrt(1*1 - x*x)
а у тебя
y = 1*1 - x*x
 
Код:
f=[COLOR=red]pow([/COLOR]-pow(a,2)+1, [COLOR=red]0.5)[/COLOR];
3. Для больших чисел недостаточно точности чтоб отнять или додать "2". Тоесть ти додаеш 2, а оно теряется потому что ему недостаточно бит в float. Сделай double.
63
14 августа 2007 года
Zorkus
2.6K / / 04.11.2006
Вообще, я бы сказал, что задача поставлена некорректно. Функция задается графически, следовательно, я имею полное право предположить,что, например, в правой части не окружность, а дуга какой-то кривой 2-го порядка (эллипс, например).
2.0K
14 августа 2007 года
WidowMaker
212 / / 05.04.2005
Навскидку,
1. не вздумай юзать pow для вычисления квкорня;
2. опять таки вместь pow(a,2), лучше пиши a*a;
ЗЫ: по методу пока ничего, а насчет споров о корректности задачи - мало ли было таких задач;)
16K
14 августа 2007 года
Draconit
39 / / 10.08.2007
to Rebbit а почему именно окружность? Разве я не могу взять к примеру параболу. Ведь значения на (0;1] все равно будут одинаковы. Или нет?
276
14 августа 2007 года
Rebbit
1.1K / / 01.08.2005
Цитата: Draconit
to Rebbit а почему именно окружность? Разве я не могу взять к примеру параболу. Ведь значения на (0;1] все равно будут одинаковы. Или нет?



Значения не будут одинаковы. Если ето у тебя такая парабола, то конечно, но мне по рисунку показалось что ето окружность. Ведь для окружности радиус сразу понятен с рисунка, а для параболи надо степень и коефициент. Через точки (0, 1) и (1, 0) много разных парабол провести можно.

63
14 августа 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: Rebbit
Значения не будут одинаковы. Если ето у тебя такая парабола, то конечно, но мне по рисунку показалось что ето окружность. Ведь для окружности радиус сразу понятен с рисунка, а для параболи надо степень и коефициент. Через точки (0, 1) и (1, 0) много разных парабол провести можно.


А что, окружность двумя точками однозначно задается?;) А про радиус ты сам сказал -- "показалось". Я лично, такую задачу бы решать отказался.С таким условием.

276
14 августа 2007 года
Rebbit
1.1K / / 01.08.2005
Цитата: Zorkus
А что, окружность двумя точками однозначно задается?;) А про радиус ты сам сказал -- "показалось".


Я сам только что с политеха и знаю как точно в ВУЗах условия задают и как от них отказаться просто :)
Окружность задается 3-мя точками.
Зная логику преподавателей - по умолчанию ето круг с центром в начале координат и радиусом 1.
2Draconit Можеш конечно уточнить задание у преподавателя, но думаю что он тоже считает ето колом.

Цитата: Zorkus
Я лично, такую задачу бы решать отказался.С таким условием.


Тебя никто не заставляет.

63
14 августа 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: Rebbit
Я сам только что с политеха и знаю как точно в ВУЗах условия задают и как от них отказаться просто :)


Отказаться от задания и потребовать его переформулировки? Просто. А что, подчиняться во всем логике преподавателей?

Цитата:

Тебя никто не заставляет.


Я вообще, это автору советовал:)

320
14 августа 2007 года
m_Valery
1.0K / / 08.01.2007
На этом остановились.Хватит оффтопить.Высказывайтесь по теме.Все дальнейшие сообщения не по теме буду удалять.
2.0K
14 августа 2007 года
WidowMaker
212 / / 05.04.2005
Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
void main()
{
double a,f;
clrscr();
puts("Vvedite a");
scanf("%lf",&a);
[COLOR=red]a=fmod(a,2.0);[/COLOR]
if (a<=0) f=a+1;
else f=sqrt(1-a*a);
printf("f(%5.5lf)=%5.5lf",a,f);
getch();
}

Никак не пойму почему просто не вычислить остаток от деления на период (правда есть сомнения насчет точности)?
16K
17 августа 2007 года
Draconit
39 / / 10.08.2007
to WidowMaker когда, я начинал решать эту задачу, то мне посоветовали сделать её таким способом, но я тогда ещё не знал как работает fmod, и для чего эта функция, поэтому начал делать по другому.
А за код большое спасибо, помог разобраться!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог