/*
 *  * Lê os coeficientes e imprime um polinômio de grau
 *   * máximo igual a 25.
 *    *
 *     * Re-estruture este programa utilizando funções.
 *      *
 *       */

#include <stdio.h>

void le_polinomio(float *coef, int *grau)
{
  int i;
  printf("Grau do polinômio (grau máximo = 25): ");
  scanf("%d", grau);

  if (*grau < 0 || *grau > 25) {
    printf("Grau inválido\n");
  }
    
  for (i = *grau; i >= 0; i--) {
    printf("coeficiente de x^%d: ", i);
    scanf("%f", &coef[i]);
  }

}

void calcula_derivada(float *coef, int *grau)
{
    int i;
    for (i = 1; i <= *grau; i++) {
      coef[i-1] = coef[i]* i;
    }
    *grau=*grau-1;
}

imprime_polinomio(float*coef, int *grau) {
   int i;
    printf("%.1fx^%d", coef[*grau], *grau);  
    for (i = *grau - 1; i >= 0; i--) {
      if (coef[i] != 0) {
	if (coef[i] >= 0) {
	  printf(" + %.1fx^%d", coef[i], i);
	} else {
	  printf(" - %.1fx^%d", -coef[i], i);
	}
      }
    }
   printf("\n");
}



int main() {
  float coef[26];
  int grau, i;
  
 le_polinomio(coef, &grau);
 imprime_polinomio(coef,&grau);
 while(grau > 0) {
	 calcula_derivada(coef, &grau);
	 imprime_polinomio(coef, &grau);
 }

  return 0;
}