#include //#include /* Per time() */ //#include /* Per rand */ /* Costanti */ //Grado massimo del polinomio = MAXEL-1 #define MAXEL 100 /* Strutture dati */ typedef struct { double re; double im; } complex; /* Prototipi delle funzioni */ void readN(complex*); //legge numero complesso void readP(complex*, int n); //legge polinomio di grado n void showN(complex); //visualizza numero complesso int zeroN(complex c); //restituisce 1 se numero in argomento == 0, 0 altrimenti void showP(complex*, int n); //visualizza polinomio di grado n a coeff complessi int monomio(complex*, int n); //restituisce 1 se il polinomio e' un monomio, 0 altrimenti int realeN(complex); //restituisce 1 se l'argomento e' reale, 0 altrimenti int realeP(complex*, int n); //restituisce 1 se il polinomio e reale, 0 altrimenti void deriva(complex*, int *n); //deriva il polinomio corrente /* Implementazioni */ int main(int argc, char* argv[]) { complex c[MAXEL]; //coefficienti polinomio di grado MAXG-1 int ins=0; //0 se non inserito alcun polinomio, !=0 altrimenti int cont=1; //0 se esce dal menu, !=0 altrimenti //menu per l'utente: char menu[] = "1. Inserisci nuovo polinomio.\n2. Visualizza polinomio corrente.\n3. E' un monomio?\n4. E' reale?\n5. Deriva.\n6. Esci.\nScelta: "; int sc; //scelta dell'utente int n; //grado del polinomio do{ printf("%s", menu); scanf("%d",&sc); //legge scelta getchar(); // rimuove '\n' switch (sc) { case 1: printf("Grado del polinomio (>= -1).\n"); do { scanf("%d",&n); getchar(); //rimuove '\n' if (n<-1) printf("Il grado deve essere >= -1. Reinserire.\n"); } while (n<-1); // forza reinserimento se grado minore di -1 readP(c,n); ins=1; break; case 2: if (ins) { showP(c,n); putchar('\n'); } else printf("Nessun polinomio inserito.\n"); break; case 3: if (ins) { printf("Il polinomio:\n"); showP(c,n); putchar('\n'); if (monomio(c,n)) printf("e' un monomio.\n"); else printf("non e' un monomio.\n"); } else printf("Nessun polinomio inserito.\n"); break; case 4: if (ins) { printf("Il polinomio:\n"); showP(c,n); putchar('\n'); if (realeP(c,n)) printf("e' reale.\n"); else printf("non e' reale.\n"); } else printf("Nessun polinomio inserito.\n"); break; case 5: deriva(c,&n); break; case 6: cont=0; printf("Programma terminato.\n"); break; default: printf("Scelta inesistente.\n"); break; } } while (cont); return 0; } void showP(complex* c, int n) //visualizza polinomio di grado n a coeff complessi { switch(n) { //polinomio nullo case -1: putchar('0'); break; //polinomio costante case 0: showN(c[0]); break; //caso generico n >= 1 default: if (!zeroN(c[0])) //se termine noto non nullo... { showN(c[0]); putchar('+'); } for (int i=1; i0) printf("%g+%gi",c.re,c.im); else if (c.im<0) printf("%g%gi",c.re,c.im); else printf("%g",c.re); } void readN(complex* c) //legge numero complesso { printf("Parte reale: "); scanf("%lf", &(c->re)); getchar(); //rimuove '\n' printf("Parte immaginaria: "); scanf("%lf", &(c->im)); getchar(); //rimuove '\n' } void readP(complex* c, int n) // legge polinomio complesso di grado n { if (n<0) { for (int i=0;i