L'algoritmo sembra essere corretto. Ho fatto anche una simulazione su carta e funziona bene...penso debba essere un problema di codice!
Non far caso al nome della funzione "caccolo " xDcodice:#include<stdio.h> #include<stdlib.h> #define c 4 #define m 30 #include<math.h> int lettura(int mat[][c]); void derivata(int mat[][c], float deriv[][c],int r); void caccolo(float soluzioni[][2], float deriv[][c], int r); void stampa( int mat[][c], float deriv[][c], float soluzioni[][2], int r); main() { int colonne,righe; int prima[m][c], matder[m][c]; float zeri[m][2], dopo[m][c];; righe=lettura(prima); derivata(prima, dopo, righe); caccolo(zeri,dopo,righe); stampa(prima, dopo, zeri, righe); system("pause"); } int lettura(int mat[][c]) { int r,i,k; printf("Inserire il numero di polinomi\n"); scanf("%d", &r); printf("inserire i coefficienti del polinomio di terzo grado\n"); for(i=0;i<r;i++) { for(k=0;k<c;k++) { scanf("%d", &mat[i][k]); } } return r; } void derivata(int mat[][c],float deriv[][c], int r) { int i,k; int z; for(i=0;i<r;i++) { z=3; for(k=0;k<c;k++) { deriv[i][k]=z*mat[i][k]; z=z-1; } } } void caccolo(float soluzioni[][2], float deriv[][c], int r) { int i,k; float delta; for(i=0;i<r;i++) { delta=(deriv[i][1]*deriv[i][1])-4*(deriv[i][0]*deriv[i][2]); if(delta<0) { soluzioni[i][0]=0; soluzioni[i][1]=0; } else { if(delta>0) { soluzioni[i][0]=(deriv[i][1]*(-1)-sqrt(delta))/(2*deriv[i][0]); soluzioni[i][1]=(deriv[i][1]*(-1)+sqrt(delta))/(2*deriv[i][0]); } else { soluzioni[i][0]=(deriv[i][1]*(-1))/(2*deriv[i][0]); soluzioni[i][1]=(deriv[i][1]*(-1))/(2*deriv[i][0]); } } } } void stampa( int mat[][c], float deriv[][c], float soluzioni[][2], int r) { int i; for(i=0;i<r;i++) { printf("Polinomio di terzo grado\t"); printf("(%d)x^3+(%d)x^2+(%d)x+(%d)\n", mat[i][0],mat[i][1],mat[i][2],mat[i][3]); printf("Derivata prima:\t"); printf("(%d)x^2+(%d)x+(%d)\n", deriv[i][0],deriv[i][1],deriv[i][2]); if(((deriv[i][1]*deriv[i][1])-4*(deriv[i][0]*deriv[i][2]))>=0) { printf("Le soluzioni sono:\t"); printf("%f %f", soluzioni[i][0], soluzioni[i][1]); } else { printf("Non ci sono massimi e minimi\n"); } } }

Rispondi quotando