L'algoritmo sembra essere corretto. Ho fatto anche una simulazione su carta e funziona bene...penso debba essere un problema di codice!
codice:
#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");
}
}
}
Non far caso al nome della funzione "caccolo " xD