Iniciante em c. Ajuda para polinomios com estruturas

2 respostas
structcestruturasestrutura
Paulo_Rodrigues2

Boa noite, iniciei os estudos hoje em struct e gostaria de ajuda para desenvolver um exercício que estou tendo bastante dificuldade, que é o seguinte:

Criar uma função chamada criaVetorSoma, que:
–Recebe um primeiro vetor de termos e seu tamanho (representando um
polinômio) e um segundo vetor de termos e seu tamanho (representando um
segundo polinômio). A função recebe também o endereço de uma variável onde
deve ser devolvido o tamanho do novo vetor a ser criado pela função.
–A função deve criar um novo vetor de termos correspondente à soma dos 2
polinômios recebidos, do tamanho exato necessário. A função retorna o novo
vetor, ou seja, o endereço do primeiro elemento desse novo vetor, devolvendo
também o número de elementos desse novo vetor.

por exemplo, tendo como entrada os seguintes polinômios:

5x^6 + 8x^3 + x^2 + 7

2x^4 + 7x^2

O vetor resposta, de tamanho 5, seria:

5x^6 + 2x^4 + 8x^3 + 8x^2 + 7

Eu empaquei e estou com dificuldade de desenvolver, ficarei grato se alguem puder ajudar. valeuu!

(meu codigo onde parei)

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

struct termo {
  int coef;
  int grau;
};
typedef struct termo Termo;

Termo *criaVetorSoma (Termo *v1, int n1, Termo *v2, int n2, int *tamNovoVetor){
    int i;
    Termo *p = (Termo *)malloc(sizeof(Termo));
    for(){
      if (v1[?].grau == v2[?].grau){
        p[?].coef = v1[?].coef + v2[?].coef;
        p[?].grau = v1[?].grau;
      }
    }
    return p;
}

2 Respostas

lvbarbosa

A primeira coisa que você precisa fazer é passar pelos dois vetores de termos e contar quantos graus diferentes os dois tem. Esse número é o tamanho do vetor final. No seu exemplo, o tamanho final é 5 porque tem 5 graus diferentes: 6,4, 3, 2 e 0.

Outra coisa que você precisa saber é qual posição do vetor final representa cada grau do polinômio resultante. Uma forma simples de fazer isso é, ao invés de declarar um vetor final logo de cara, declarar um vetor de inteiros temporário com o tamanho igual ao maior grau dos seus dois polinômios. Nesse caso que você deu de exemplo, o vetor temporário teria 7 posições, uma para cada grau (de 0 a 6). Cada elemento desse vetor representa um termo, onde a posição do vetor representa o grau e o valor dentro da posição representa o coeficiente.

Nesse caso, sua função seria algo assim:

  1. Passa pelos 2 vetores de entrada e determina o maior grau, chama ele de g;
  2. Aloca um vetor de int com tamanho g+1, inicializado com 0 em todas as posições;
  3. Passa pelo primeiro vetor, somando coef ao elemento na posição grau do vetor temporário: temp[t.grau] += t.coef
  4. Repete 3, só que para o segundo vetor;
  5. Aloca o vetor final e preenche ele com os valores do vetor temporário que não são 0: isso você faz com um while e dois ponteiros, um para o vetor temporário e um para o vetor final.
Paulo_Rodrigues2

Opaa, acho que peguei a ideia. Vou tentar implementar aqui, acho que não tem muito mistério. Valeu pelas ferramentas, consegui destravar as ideias com essas dicas. Abraço!!

Criado 16 de fevereiro de 2020
Ultima resposta 17 de fev. de 2020
Respostas 2
Participantes 2