All pastes #757459 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-11-01 11:32 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define DEGREE 10

int readPoly(int coef[], int *degree)
{
    int i;

    printf("Degree of polynomial: ");

    if ( 1 == scanf("%d", degree) )
    {
        if (*degree <= 0 || *degree > DEGREE)
        {
            fprintf(stderr, "Bad degree value %d\n", *degree);
            return 0;
        }
    }
    else
    {
        fprintf(stderr, "Bad format...\n");
        return 0;
    }

    while (getchar() != '\n'); // ignore all other chars on this line
    getchar(); // swallow new line

    printf("Type the coefficients separated by a space, starting with the free term.\n");
    printf("End with ENTER.\n");

    for (i = 0; i <= *degree; i++)
    {
        if ( 1 != scanf("%d", &coef[i]) )
        {
            fprintf(stderr, "Bad format for coeficient %d.", i);
            return 0;
        }
    }

    //check for free term and last degree
    if (coef[0] == 0)
    {
        fprintf(stderr, "Free term is 0.\n");
        return 0;
    }

    if (coef[*degree] == 0)
    {
        fprintf(stderr, "Polynomial is not of degree %d.\n", *degree);
        return 0;
    }

    return 1;
}

int evalPoly(int coef[], int degree, int val)
{
    int i, sum = 0;

    for (i = 0; i <= degree; i++)
    {
        sum += coef[i] * (int)pow(val, i);
    }

    return sum;
}

int main()
{
    int coef[DEGREE + 1];
    int degree, i;

    if ( readPoly(coef, &degree) )
    {
        for (i = 0; i <= degree; i++)
        {
            if (evalPoly(coef, degree, i) == 0)
                printf("%d is a root\n", i);

            if (evalPoly(coef, degree, -i) == 0)
                printf("%d is a root\n", -i);
        }
    }
    else printf("Could not read polynomial.");

    return 0;
}