Embora isso devesse ter sido postado em outro lugar, esta é a solução:
Sempre inicialize!
Você não está inicializando a matriz coe[100]
de todos os elementos em seu struct poly*
.
Em seus loops, você só define algumas das entradas, no entanto, sua função mul também acessa as não inicializadas.
Eu suponho que o gcc no linux de alguma forma cuida disso, ao inviabilizá-los como 0 por padrão, no entanto, o padrão define o valor de um inteiro não inicializado como indefinido.
O MinGW não o intitula para você, então o que estiver na memória naquele momento atrapalha seus resultados.
Edit: É claro que você também deve liberar a memória alocada com free(p);
!
Veja como você pode corrigir isso:
#include <stdio.h>
#include <stdlib.h>
struct poly{
int coe[100];
};
void mul(struct poly *pr, int a, struct poly *p){
struct poly res;
int i;
for(i = 0; i < 100; i++){
res.coe[i] = 0;
int j;
for(j = 0; j <= i; j++){
res.coe[i] += ((*pr).coe[j])*((*(p + a)).coe[i - j]);
}
}
*pr = res;
}
void main(){
struct poly *p;
p = (struct poly *)malloc(100*sizeof(struct poly));
for(int k = 0; k < 100; k++)
for(int l = 0; l < 100; l++)
p[k].coe[l] = 0;
int n;
printf("no. of poly :");
scanf("%d", &n);
int i; int max = 0;
for(i = 0; i < n; i++){
int de;
printf("deg? of %d:", i+1);
scanf("%d", &de); max += de;
int j;
for(j = 0; j <= de; j++){
printf("co-eff of deg %d:", j);
scanf("%d", &p[i].coe[j]);
}
}
struct poly res;
struct poly *pr;
res = p[0];
pr = &res;
int fi;
for(fi = 1; fi < n; fi++){
mul(&res, fi, p);
}
for(i = 0; i < (max + 1); i++){
printf("%d\n", res.coe[i]);
}
free(p);
}