2016-10-23 32 views
0

Я попросил значения коэффициентов, сохранив их в динамически распределенном массиве, значение переменной и степень многочлена, но значение переменной p, которое должно содержать значение многочлена, не получается обновляется после того, как я его инициализирую. Я пытался со значениями х = 3, п = 3 (п ... 0) = {3,3,3,3}, а возвращаемое значение равно 3 я использовал метод Горнера для вычисленияОценка полинома, используя динамически распределенный массив для коэффициентов, что я делаю неправильно?

#include <stdio.h> 
#include <stdlib.h> 

struct dynamic_arr 
{ 
    int nelem; 
    double arr[1]; 
}; 
double polynomial(struct dynamic_arr *a,int n, double x); 


int main() 
{ 
    struct dynamic_arr *a; 
    int n; 
    double pl; 
    double x = 2; 
    int scancount; 
    do 
    { 
     printf("enter the degree of the polynomial: "); 
     scancount = scanf("%d", &n); 
    } 
    while (scancount == 0); 
    a = malloc(sizeof(struct dynamic_arr)+sizeof(int)*(n+1)); 
    if (a == NULL) 
    { 
     exit(EXIT_FAILURE); 
    } 
    a->nelem == n; 
    do 
    { 
     printf("enter the coefficient of the %d degree monomial:", n); 
     scancount = scanf("%lf", &a->arr[n]); 
     while(getchar() != '\n') 
      ; 
    } 
    while (scancount == 0 || n-- > 0); 
    do 
    { 
     printf("enter x :"); 
     scancount = scanf("%lf", &x); 
    } 
    while (scancount != 1); 

     pl = polynomial(a,a->nelem,x); 
    printf("%f", pl); 
     free(a); 
    return 0; 
} 

double polynomial(struct dynamic_arr *a,int n, double x) 
{ 
    double p; 
    p= a->arr[2]; 
    while (--n >= 0) 
    { 
     p = p*x+a->arr[n]; 
    } 

    return p; 
} 

ответ

0
a->nelem == n; 

- сравнение с неиспользованным значением, а не заданием.


p= a->arr[2]; 

должно быть

p= a->arr[n]; 

a = malloc(sizeof(struct dynamic_arr)+sizeof(int)*(n+1)); 

не хватает памяти, так как массив используется имеет в качестве типа данных 8byte double, не int длину 4 байта.

+0

второй был фактически значением, которое я заменил на n во время отладки. – MatSiv97

+0

в любом случае спасибо, я забыл – MatSiv97

+0

изменить тип данных в sizeof (int) после изменения типа коэффициентов от int до double (я не знаю, почему я не могу редактировать свой предыдущий комментарий, даже если я его отправил по ошибке) – MatSiv97

 Смежные вопросы

  • Нет связанных вопросов^_^