Программа, которая вычисляет площадь между квадратичной и осью X в C - PullRequest
1 голос
/ 26 марта 2011

Я новичок во всем этом программировании, так что терпите меня. Я хочу сделать программу, которая могла бы вычислить площадь между квадратичной и осью X. Прямо сейчас мой код предназначен только для функций, где a положительно, а c отрицательно.

#include <stdio.h>


int main()
{

  float a; 
  float b; 
  float c;
  float x; /* this is the zero that is to the right*/
  float y; /* this is the zero that is to the left*/
  float z;

  {

    printf("Consider the function ax^2 + bx + c\n");

    printf("Enter the a value:  \n");
    scanf("%f",&a);

    printf("Enter the b value:  \n");
    scanf("%f",&b);

    printf("Enter the c value:  \n");
    scanf("%f", &c);

    x = (( -b + sqrt(b*b - 4*a*c)) / (2*a));
    y = (( -b - sqrt(b*b - 4*a*c)) / (2*a));

    do {
      z=(((y+0.01)-(y))*((a*(y*y))+(b*y)+(c)));
      y+0.01;} while (x>y);

      if (y>=x) {
        printf("The area is %f", z);
      }

Проблема в том, что программа просто никогда не останавливается. Я пытаюсь сделать маленькие квадраты и измерить их площадь (вспомните LRAM и RRAM). Так что я делаю это (ноль + немного) умноженное на y значение (a * (y * y)) + (b * y) + (c))) `

Есть советы?

Ответы [ 3 ]

2 голосов
/ 26 марта 2011

В

do {
    z=(((y+0.01)-(y))*((a*(y*y))+(b*y)+(c)));
    y+0.01;
} while (x>y);

Вы должны изменить y+0.01 на y += 0.01, если вы используете y+0.01, y никогда не меняются во время цикла.

0 голосов
/ 26 марта 2011

Я понимаю, что это не помогает сразу, но для подобных вещей, Numeric Recipes - лучшая книга.Старая версия C (которая, конечно, до сих пор прекрасно работает на C ++) доступна бесплатно.У них также есть версия C ++, которую можно купить.

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

Ссылка на версию C

0 голосов
/ 26 марта 2011

Увеличивайте z и y в цикле do while.

z = 0; //initialize z to remove any garbage values.
do {
   // here z is NOT getting assigned, but incremented each time this loop runs.
   // NOTE: A += C; is short for A = A + C;
   z += (((y+0.01)-(y))*((a*(y*y))+(b*y)+(c)));
   y += 0.01;
}  
while (x>y);  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...