// sezione di include generali #include #include #define MAXLEN 20 // dichiarazione delle funzioni utilizzate int mostraMenu (void); void leggiCoeff (float*, float*, float*, int); void calcolaSol (float, float, float, float, float, float, float*, float*); // VARIABILE GLOBALE int ceEq; // programma principale int main(int argc, char *argv[]) { // dichiarazione variabili locali int scelta; float a, b, c, m; float a2, b2, c2, m2; float x, y; // inizializzazioni scelta = 0; ceEq = 0; do { // ripulisco lo schermo system("CLS"); // chiamo la funzione che crea il menù utente scelta = mostraMenu(); switch (scelta) { case 1: { if (ceEq == 0) { leggiCoeff (&a, &b, &c, 1); printf ("\n\nLA PRIMA RETTA HA COEFFICIENTI: \nA = %f \nB = %f \nC = %f \n", a, b, c); system("PAUSE"); leggiCoeff (&a2, &b2, &c2, 2); printf ("\n\nLA SECONDA RETTA HA COEFFICIENTI: \nA = %f \nB = %f \nC = %f \n", a2, b2, c2); system("PAUSE"); } else { printf ("\n\nOPERAZIONE IMPOSSIBILE: I coefficienti delle rette sono stati già acquisiti\n\n"); system("PAUSE"); } break; } case 2: { if (ceEq == 1) { calcolaSol (a, b, c, a2, b2, c2, &x, &y); } else { printf ("\n\nOPERAZIONE IMPOSSIBILE: I coefficienti delle rette non sono stati acquisiti\n\n"); system("PAUSE"); } break; } case 3: { //riabbasso il flag ceEq = 0; printf ("\n\nReimmettere i coefficienti delle rette da intersecare \n\n"); system("PAUSE"); break; } case 4: { printf ("\n\nGrazie per averci utilizzato CORRETTAMENTE ........ \n\n"); } } } while (scelta != 4); system("PAUSE"); return 0; } // FUNZIONE DI CREAZIONE DEL MENU' UTENTE int mostraMenu (void) { int scelta; do { system("CLS"); printf ("\n\n"); printf ("\t**************************************************************\n"); printf ("\t* INTERSEZIONE DI DUE RETTE NELLA FORMA aX + bY + C = 0 *\n"); printf ("\t**************************************************************\n"); printf ("\n"); printf ("\t**************************************************************\n"); printf ("\t*\t\tMenu' utente principale *\n"); printf ("\t**************************************************************\n"); printf ("\t* \t1 ACQUISIZIONE DELLE 2 RETTE *\n"); printf ("\t* \t2 CALCOLO PUNTO DI INTERSEZIONE *\n"); printf ("\t* \t3 NUOVA INTERSEZIONE *\n"); printf ("\t* \t4 =======> USCITA *\n"); printf ("\t**************************************************************\n\n\n"); printf ("\t\tInserire scelta (1, 2, 3 oppure 4) : "); fflush(stdin); scanf("%d", &scelta); if ((scelta < 1) || (scelta > 4)) { printf ("\n\nERRORE Digitare la scelta corretta.....\n\n"); system("PAUSE"); } else; } while ((scelta < 1) || (scelta > 4)); return scelta; } // FUNZIONE DI LETTURA DEI COEFFICIENTI void leggiCoeff (float* a1, float* b1, float*c1, int i) { char elem[MAXLEN]; int uscita; char segno1, segno2; system ("CLS"); // Acquisizione primo e secondo coefficiente coefficiente della retta uscita = 0; do { printf ("\nInserire il primo coefficiente della %d retta....\n", i); fflush (stdin); scanf("%s", elem); if (strcmp(elem,"0") == 0) { // il primo coefficiente è zero *a1 = 0; printf ("\nPrimo coefficiente della %d retta acquisito correttamente uguale a zero \n", i); } else if (atof(elem) != 0) { uscita = 1; *a1 = atof(elem); printf ("Primo coefficiente della %d retta acquisito correttamente\n", i); } else { uscita = 0; printf ("\nERRORE: Primo coefficiente della %d retta acquisito non numerico\n", i); } if (uscita == 1) { printf ("\nInserire il secondo coefficiente della %d retta....\n", i); fflush (stdin); scanf("%s", elem); if (strcmp(elem,"0") == 0) { *b1 = 0; if ((*b1 == 0) && (*a1 == 0)) { uscita = 0; printf ("\nERRORE: Primo e secondo coefficiente della %d retta entrambi nulli\n",i); } else { uscita = 1; printf ("\nSecondo coefficiente della %d retta acquisito correttamente uguale a zeo\n", i); } } else if (atof(elem) != 0) { uscita = 1; *b1 = atof(elem); printf ("Secondo coefficiente della %d retta acquisito correttamente\n", i); } else { uscita = 0; printf ("\nERRORE: Secondo coefficiente della %d retta acquisito non numerico\n",i); } } else; } while (uscita == 0) ; // Acquisizione terzo coefficiente dell'equazione uscita = 0; do { printf ("\nInserire il termine noto della %d retta....\n",i); fflush (stdin); scanf("%s", elem); if (strcmp(elem,"0") == 0) { uscita = 1; *c1 = 0; printf ("Termine noto della %d retta acquisito correttamente\n",i); } else if (atof(elem) != 0) { uscita = 1; *c1 = atof(elem); printf ("Termine noto della %d retta acquisito correttamente\n",i); } else { printf ("\nERRORE: Termine noto della %d retta acquisito non numerico\n",i); } } while (uscita == 0) ; // i coefficienti sono stati acquisiti tutti pertanto lo segnalo nel flag apposito ceEq = 1; return; } // FUNZIONE DI CALCOLO DELLE SOLUZIONI void calcolaSol (float A, float B, float C, float A2, float B2, float C2, float* px, float* py) { if ((A*B2 - A2*B) != 0) { *px = (B*C2 -B2*C) / (A*B2 - A2*B); *py = (C*A2 -A*C2)/ (A*B2 - A2*B); printf ("\n Il punto di intersezione tra le due rette ha \n ascissa X = %f \n ordinata Y = %f\n\n", *px, *py); } else { printf ("\nIl sistema non ammette soluzioni con il metodo di Kramer \nIl determinante dei coefficienti e' uguale a zero\n"); } system ("PAUSE"); return; }