Dev - C++ - Como evaluar el polinomio con memoria dinamica, corregir errores.

 
Vista:
sin imagen de perfil
Val: 15
Ha disminuido su posición en 6 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Como evaluar el polinomio con memoria dinamica, corregir errores.

Publicado por Luis (5 intervenciones) el 12/02/2020 04:32:55
no se si genere bien la memoria dinamica, el punto es que al compilar aveces suma uno o dos datos mas, y aveces ya no eleva X a la 0, simplemtente almacena un cero

por decir

3x^2+2x^1+2x^0 = 17
pero el programa me hace esto

3x^2+2x^1+2x^2=16


/**EJERCICIO 5. Memoria dinámica
Haciendo uso de memoria dinámica realice un programa que pueda crear un vector
dinámico de tipo float. El vector dinámico almacenará los coeficientes de un polinomio de
grado N, crear las siguientes funciones:
a) Leer vector
b) Imprimir el polinomio de grado N
c) Que evalúe la función solicitando el valor de x, imprimir el resultado.*/


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
using namespace std;
#include <math.h>
 
void Leer_vector(int*,int);
void Imprimir_polinomio(int *, int);
int evalua_poli(int *,int,int);
 
 
int main()
{
    int *vec,n,x;
 
    cout<<"ingresa el grado del polinomio: ";
    cin>>n;
    vec=NULL;
    vec=new int[n];
 
    cout<<"ingresa los valores de el vector:"<<endl;
    Leer_vector(vec,n);
 
    cout<<"ingresa el valor de x: ";
    cin>>x;
 
    cout<<"-------------------------------------------------"<<endl;
 
    cout<<"El polinomio de grado n es: ";
    Imprimir_polinomio(vec,n);
 
    cout<<endl<<"el polinomio evaludado da como resultado: "<<evalua_poli(vec,n,x);
 
    return 0;
}
 
void Leer_vector(int *vec1,int N)
{
 
    for(int i=0;i<=N;i++)
    {
        cin>>vec1[i];
    }
 
}
void Imprimir_polinomio(int *vec1,int N)
{
 
    for(int i=0;i<=N;i++)
    {
        cout<<vec1[i]<<"x^"<<N--<<" + ";
    }
}
 
int evalua_poli(int *vec1, int N, int X)
{
    int total;
    int cont=N;
    for(int i=0;i<=N;i++)
    {
        total+=vec1[i]*pow(X,N--);
    }
    return total;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.517
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Como evaluar el polinomio con memoria dinamica, corregir errores.

Publicado por Rodrigo (424 intervenciones) el 12/02/2020 15:35:07
Si el grado del polinomio es n, tienes que leer n+1 factores, pero el vector que los contiene solo tiene espacio solo para n factores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 499
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Como evaluar el polinomio con memoria dinamica, corregir errores.

Publicado por Thanatos (189 intervenciones) el 12/02/2020 18:03:59
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <cstddef>   // size_t
#include <cmath>     // pow()
#include <iostream>
 
using namespace std;
 
void leerCoeficientes(float *const *, const int);
void mostrarPolinomio(const float *, const int);
float evaluarPolinomio(const float *, const int, const float);
 
int main()
{
    float *coefs;
    float x;
    int grado;
 
    cout << "Ingrese el grado del polinomio: ";
    cin >> grado;
 
    if (grado < 0)
    {
        cerr << "\n* El grado debe ser positivo *\n";
        return -1;  // Error.
    }
 
    size_t size = static_cast<size_t> (grado + 1);
    coefs = new float[size];
 
    cout << "Ingrese los coeficientes: ";
    leerCoeficientes(&coefs, grado);
 
    cout << "Ingrese el valor de x: ";
    cin >> x;
 
    cout << "\nEl polinomio de grado " << grado << " es: ";
    mostrarPolinomio(coefs, grado);
 
    cout << "Evaluado para x = " << x << " da como resultado: "
         << evaluarPolinomio(coefs, grado, x) << '\n';
 
    delete[] coefs;
    coefs = NULL;
 
    return 0;
}
 
void leerCoeficientes(float *const *coefs, const int grado)
{
    for (int i = grado; i >= 0; --i)
    {
        cin >> (*coefs)[i];
    }
}
 
void mostrarPolinomio(const float *coefs, const int grado)
{
    for (int i = grado; i >= 0; --i)
    {
        cout << coefs[i] << "x^" << i;
 
        if (i != 0)
        {
            cout << " + ";
        }
    }
    cout << '\n';
}
 
float evaluarPolinomio(const float *coefs, const int grado, const float x)
{
    float resultado = 0.0f;
 
    for (int i = grado; i >= 0; --i)
    {
        float exponente = static_cast<float>(i);
        resultado += coefs[i] * pow(x, exponente);
    }
 
    return resultado;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar