//Kontrolu Enirojn de Polinomio #include #include #include void kontroluFadenejgrandon(int *fadenejgrando, char *fadenejo, mpq_t numbro){ int bezonasgrandon = mpz_sizeinbase(mpq_numref(numbro), 10) + mpz_sizeinbase(mpq_denref(numbro), 10) + 3; if (bezonasgrandon>(*fadenejgrando)){ fadenejo = (char *) realloc(fadenejo, bezonasgrandon); (*fadenejgrando) = bezonasgrandon; } } int main(int argc, char **argv){ static const char formato_de_eniro[] = "Formato de eniro: ... - ...\n\nA(x) estas numbro en unuvariabla polinoma funkcio, kaj la enirnumbroj estas la eniroj por la variablo \"x\". \n"; if (argc<4){ //se estas malpli ol 3 argumentoj fprintf(stderr, "%s", formato_de_eniro); exit(EXIT_FAILURE); } else if (argc==5){ //se estas nur 4 argumentoj fprintf(stderr, "Ne estas polinomero kiu havus na x. \n"); exit(EXIT_FAILURE); } else if (argc>5){ int fadenejgrando, strekejo, argvejo, i, j, eksp, mr, pndp, pnde, polinomnumbrejgrando, enirnumbrejgrando; char *fadenejo; fadenejgrando = 16; fadenejo = malloc(sizeof(char)*fadenejgrando); for (i=1; i 0){ if (eksp > 1) { //gmp_printf("%Qd(%Qd^%d) + ", polinomnumbroj[j], enirnumbroj[i], eksp); kontroluFadenejgrandon(&fadenejgrando, fadenejo, polinomnumbroj[j]); fadenejo = mpq_get_str(fadenejo, 10, polinomnumbroj[j]); fprintf(stdout, "%s(", fadenejo); kontroluFadenejgrandon(&fadenejgrando, fadenejo, enirnumbroj[i]); fadenejo = mpq_get_str(fadenejo, 10, enirnumbroj[i]); fprintf(stdout, "(%s)^%d) + ", fadenejo, eksp); } else { //gmp_printf("%Qd(%Qd) + ", polinomnumbroj[j], enirnumbroj[i]); kontroluFadenejgrandon(&fadenejgrando, fadenejo, polinomnumbroj[j]); fadenejo = mpq_get_str(fadenejo, 10, polinomnumbroj[j]); fprintf(stdout, "%s(", fadenejo); kontroluFadenejgrandon(&fadenejgrando, fadenejo, enirnumbroj[i]); fadenejo = mpq_get_str(fadenejo, 10, enirnumbroj[i]); fprintf(stdout, "%s) + ", fadenejo); } } else { //gmp_printf("%Qd = ", polinomnumbroj[j]); kontroluFadenejgrandon(&fadenejgrando, fadenejo, polinomnumbroj[j]); fadenejo = mpq_get_str(fadenejo, 10, polinomnumbroj[j]); fprintf(stdout, "%s = ", fadenejo); } if (eksp == 0) { mpq_set(elirernumbroj[j], polinomnumbroj[j]); } else { mpq_set(elirernumbroj[j], enirnumbroj[i]); for (mr = eksp; mr>1; mr--){ mpq_mul(elirernumbroj[j], elirernumbroj[j], enirnumbroj[i]); //fprintf(stderr, "\nmul\n"); } //gmp_printf("\n%Qd\n", elirernumbroj[j]); mpq_mul(elirernumbroj[j], elirernumbroj[j], polinomnumbroj[j]); } if (j>0){ mpq_add(elirernumbroj[0], elirernumbroj[0], elirernumbroj[j]); } } //gmp_printf("%Qd\n", elirernumbroj[0]); kontroluFadenejgrandon(&fadenejgrando, fadenejo, elirernumbroj[0]); fadenejo = mpq_get_str(fadenejo, 10, elirernumbroj[0]); fprintf(stdout, "%s\n", fadenejo); } for (i=0; i