C/Visual C - polinomios con listas ¡URGENTE!

 
Vista:

polinomios con listas ¡URGENTE!

Publicado por Jorge Castillo (2 intervenciones) el 01/10/2001 00:29:15
Necesito un poco de ayuda, de como sumar dos polinomios utilizando listas enlazadas, agradeceria mucho que me enviaran algun fragmento de codigo para orientarme. Gracias
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 Alejandro

Sumar dos polinomios utilizando listas enlazadas

Publicado por Alejandro (913 intervenciones) el 16/10/2024 16:56:42
Para sumar dos polinomios utilizando listas enlazadas, puedes representar cada término del polinomio como un nodo en una lista enlazada. Cada nodo contendrá el coeficiente y el exponente del término. A continuación, te muestro un ejemplo de cómo implementar esto en C++.

Estructura del nodo



Primero, definimos la estructura del nodo:

1
2
3
4
5
6
7
struct Nodo {
    int coeficiente; // Coeficiente del término
    int exponente;   // Exponente del término
    Nodo* siguiente; // Puntero al siguiente nodo
 
    Nodo(int c, int e) : coeficiente(c), exponente(e), siguiente(nullptr) {}
};

Función para sumar polinomios



A continuación, implementamos una función que suma dos polinomios representados como listas enlazadas:

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
Nodo* sumarPolinomios(Nodo* p1, Nodo* p2) {
    Nodo* resultado = nullptr; // Lista para almacenar el resultado
    Nodo** ultimo = &resultado; // Puntero al último nodo de la lista resultado
 
    while (p1 != nullptr || p2 != nullptr) {
        int coeficiente = 0;
        int exponente;
 
        if (p1 != nullptr && (p2 == nullptr || p1->exponente > p2->exponente)) {
            // Tomar el término de p1
            coeficiente = p1->coeficiente;
            exponente = p1->exponente;
            p1 = p1->siguiente;
        } else if (p2 != nullptr && (p1 == nullptr || p2->exponente > p1->exponente)) {
            // Tomar el término de p2
            coeficiente = p2->coeficiente;
            exponente = p2->exponente;
            p2 = p2->siguiente;
        } else {
            // Los exponentes son iguales, sumar los coeficientes
            coeficiente = p1->coeficiente + p2->coeficiente;
            exponente = p1->exponente;
            p1 = p1->siguiente;
            p2 = p2->siguiente;
        }
 
        // Solo agregar el término si el coeficiente no es cero
        if (coeficiente != 0) {
            *ultimo = new Nodo(coeficiente, exponente);
            ultimo = &((*ultimo)->siguiente);
        }
    }
 
    return resultado; // Retorna la lista resultado
}

Función para imprimir el polinomio



También puedes implementar una función para imprimir el polinomio:

1
2
3
4
5
6
7
8
9
10
void imprimirPolinomio(Nodo* polinomio) {
    while (polinomio != nullptr) {
        std::cout << polinomio->coeficiente << "x^" << polinomio->exponente;
        polinomio = polinomio->siguiente;
        if (polinomio != nullptr) {
            std::cout << " + ";
        }
    }
    std::cout << std::endl;
}

Ejemplo de uso



Aquí tienes un ejemplo de cómo usar las funciones anteriores:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main() {
    // Crear el primer polinomio: 3x^2 + 2x + 1
    Nodo* p1 = new Nodo(3, 2);
    p1->siguiente = new Nodo(2, 1);
    p1->siguiente->siguiente = new Nodo(1, 0);
 
    // Crear el segundo polinomio: 4x^2 + 3x + 2
    Nodo* p2 = new Nodo(4, 2);
    p2->siguiente = new Nodo(3, 1);
    p2->siguiente->siguiente = new Nodo(2, 0);
 
    // Sumar los polinomios
    Nodo* resultado = sumarPolinomios(p1, p2);
 
    // Imprimir el resultado
    std::cout << "Resultado: ";
    imprimirPolinomio(resultado);
 
    // Liberar memoria (no olvides liberar la memoria de los nodos)
    // Aquí deberías implementar una función para liberar la memoria de la lista enlazada
 
    return 0;
}

Notas:


- Liberación de memoria: Asegúrate de liberar la memoria de los nodos después de usarlos para evitar fugas de memoria.
- Orden de los términos: Este ejemplo asume que los polinomios están ordenados por exponente de mayor a menor. Si no es así, deberías ordenarlos antes de sumarlos.

¡Buena suerte, Jorge!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar