Перейти к содержимому

Фото
- - - - -

C, программа запускается но не выполняет правильно.


  • Вы не можете создать новую тему
  • Please log in to reply
15 ответов в этой теме

#1 Alko

Alko
  • Постоялец
  • 1 709 сообщений

Отправлено 12 Октябрь 2006 - 21:20

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



#include <stdio.h>
int main(void)

{
int x;
int y;
printf("Type X");
scanf("%d", &x);
y = (x*x*x + sqrt(4 + x*x))/(x*x + 8*x + 1);
printf("%d", y);

getch();
return 0;

}
  • 0

#2 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 12 Октябрь 2006 - 21:35

вот уравнение, компилируется, запускается но считает не правильно. Помогите найти где ошибка
#include <stdio.h>
int main(void)

{
int x;
int y;
printf("Type X");
scanf("%d", &x);
y = (x*x*x + sqrt(4 + x*x))/(x*x + 8*x + 1);
printf("%d", y);

getch();
return 0;

}

а какое уравнение считается правилным?
btw. sqrt в math.h, getch в conio.h
  • 0
int main(void)

#3 OzzY

OzzY

    Великий и Ужасный

  • Пользователь
  • 461 сообщений

Отправлено 12 Октябрь 2006 - 21:51

в С разве есть sqrt? помниццо у меня на солярисе ошибку давал.
  • 0

#4 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 12 Октябрь 2006 - 21:54

в С разве есть sqrt? помниццо у меня на солярисе ошибку давал.

в стандартной библиотеке, в хеадере math.h
  • 0
int main(void)

#5 Alko

Alko
  • Постоялец
  • 1 709 сообщений

Отправлено 12 Октябрь 2006 - 22:01

c math.h тоже не правильно считает.

вот задание с правильным уравнением

Прикрепленные файлы

  • Прикрепленный файл  f.JPG   18,73К   66 Количество загрузок

Сообщение изменено: ValkVol (12 Октябрь 2006 - 22:06 )

  • 0

#6 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 12 Октябрь 2006 - 23:01

y= (x*x*x - sqrt(4-x*x)) / (x*x + 8*x + 1);
  • 0
int main(void)

#7 Alko

Alko
  • Постоялец
  • 1 709 сообщений

Отправлено 12 Октябрь 2006 - 23:08

если заменить на минус ответы выдает все равно не те, где ошибка
?
  • 0

#8 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 12 Октябрь 2006 - 23:33

может быть потому что ты задаешь значение x, при котором функциа y не определена. по области определеия, х принадлежит множеству [-2, 2] , x != -4 + sqrt(15) (x != ~ -0.127).
лучше сделать x double, иначе правильными значениями будут только -2, -1, 0, 1, 2
  • 0
int main(void)

#9 Alko

Alko
  • Постоялец
  • 1 709 сообщений

Отправлено 12 Октябрь 2006 - 23:55

#include <stdio.h>
#include <math.h>
int main(void)
{
double x;
int y;

printf("Type X");
scanf("%d, &x");
y = (x*x*x - sqrt(4 - x*x))/(x*x + 8x + 1);
printf("%d, y");

getch();
return 0;
}

даже если вводить разные числа из области определения ( 1 и 2 ), то ответ один и тот же, что то не то
  • 0

#10 Davix

Davix

    Майский СЭлвер

  • S-Модератор
  • 7 427 сообщений
  • Откуда:Tallinn, EU

Отправлено 13 Октябрь 2006 - 01:12

подели формулу на части проверь, где именно ошибка появляется. Попробуй заменить корень на отрицательную степень двух через логарифмы (не помню, как-то делал давно).
  • 0
Music ::: davix.pdj.ru

Photo ::: davix.eu

#11 Cryptoboy

Cryptoboy
  • Пользователь
  • 280 сообщений

Отправлено 13 Октябрь 2006 - 10:00

scanf("%d, &x");
.
printf("%d, y");

кавычки не правильно стоят
  • 0

#12 Alko

Alko
  • Постоялец
  • 1 709 сообщений

Отправлено 13 Октябрь 2006 - 11:53

написал все степени через pow и все стало считать правильно.

как записать область определения ( что при таком то х нет решений) через while и if ?

как добавить чтобы x*H потом на H2 и так 15 раз, то есть чтоб в ответе выдало 15 разных y

Сообщение изменено: ValkVol (13 Октябрь 2006 - 12:39 )

  • 0

#13 OzzY

OzzY

    Великий и Ужасный

  • Пользователь
  • 461 сообщений

Отправлено 13 Октябрь 2006 - 13:09

написал все степени через pow и все стало считать правильно.


ха! нету в С sqrt...!
  • 0

#14 Alko

Alko
  • Постоялец
  • 1 709 сообщений

Отправлено 13 Октябрь 2006 - 13:15

в math.h есть sqrt и все считает правильно теперь.
  • 0

#15 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 13 Октябрь 2006 - 14:00

написал все степени через pow и все стало считать правильно.

вот правильная прога sqrt
#include <stdio.h>
#include <math.h>

int main(void)
{
  double x;
  double y;

  printf("Type X:\n");
  scanf("%lf", &x);
  y = (x*x*x - sqrt(4 - x*x)) / (x*x + 8*x + 1);
  printf("%lf", y);

  return 0;
}
ты считывал х как int а не double, потом присваивал int y значение double.
  • 0
int main(void)

#16 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 13 Октябрь 2006 - 19:38

#include <stdio.h>

#include <math.h>



double fnc(double x);

int  chk(double x);



int main()

{

  double A, H, YM, x, y;

  int i;

  int const N = 15;



  printf("Enter A (algvaartus) ");

  scanf("%lf", &A);



  printf("Enter YM (ylempiir) ");

  scanf("%lf", &YM);



  printf("Enter H (samm) ");

  scanf("%lf", &H);





  for (i = 0; i < N; i++)

  {

	x = A + i*H;



	if (chk(x))

	{

	  y = fnc(x);

	  if (y - YM > 0.1e-20) 

		printf("x = %lf\t|\t%s", x, "yletab YM-piiri");

	  else

		printf("x = %lf\t|\ty = %lf", x, y);

	}

	else

	  printf("x = %lf\t|\t%s", x, "puudub");

	putchar('\n');

  }



  return 0;

}



double fnc(double x)

{

  return (x*x*x - sqrt(4.0f - x*x)) / (x*x + 8.0f*x + 1.0f);

}

	  

int chk(double x)

{

	if (x + 2.0 > -0.1e-20 && x - 2.0f < 0.1e-20 && !(fabs(x - (-4.0f + sqrt(15.0f))) < 0.1e-20) )

		return 1;



	return 0;

}


  • 0
int main(void)