Composition86
12-12-2008, 22:38
Salve a tutti, sto cercando di passare il vettore "determinante" alla procedura "cramer" sfruttando la procedura "determinanteQuadrato" (in fondo al programma).
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
typedef struct {
int numeratore;
int denominatore;
} tipoRazionale;
void init (tipoRazionale equazionelineare [2][3]);
void stampaMatrice (tipoRazionale equazionelineare [2][3]);
tipoRazionale differenza (tipoRazionale v1, tipoRazionale v2 );
tipoRazionale prodotto (tipoRazionale v1, tipoRazionale v2 );
tipoRazionale divisione (tipoRazionale v1, tipoRazionale v2 );
void determinanteQuadrato (tipoRazionale equazionelineare [2][3], int i, int j, tipoRazionale *determinante);
void cramer (tipoRazionale equazionelineare [2][3], tipoRazionale soluzione[2], tipoRazionale determinante[1]);
void stampaSoluzione (tipoRazionale soluzione[2]);
void main (void)
{
tipoRazionale equazioneLineare [2][3], Soluzione[2], Determinante[1];
char scelta;
do {
init (equazioneLineare);
stampaMatrice (equazioneLineare);
cramer (equazioneLineare, Soluzione, Determinante);
stampaSoluzione (Soluzione);
printf ("\nVuoi ripetere il programma? (Digita 'n' per terminare) ");
scelta=getche();
} while (tolower(scelta) != 'n');
}
void init (tipoRazionale equazionelineare [2][3])
{
int i, j, contatore=1;
printf ("Digitare gli elementi della matrice (numeratore e denominatore non nullo):\n\n");
for (i=0 ; i<=1 ; i++) {
for (j=0 ; j<=2 ; j++, contatore++) {
printf ("Elemento %d:\n", contatore);
printf ("Numeratore: ");
scanf ("%d", &equazionelineare [i][j].numeratore );
printf ("Denominatore: ");
scanf ("%d", &equazionelineare [i][j].denominatore );
printf ("\n");
}
}
}
void stampaMatrice (tipoRazionale equazionelineare [2][3])
{
int i, j;
printf ("\nLa matrice inizializzata e':\n\n");
for (i=0 ; i<=1 ; i++) {
for (j=0 ; j<=2 ; j++) {
printf ("%d/%d ", equazionelineare[i][j].numeratore, equazionelineare[i][j].denominatore );
}
printf ("\n");
}
printf ("\nEquivalente al sistema:\n\n");
printf ("(%d/%d)X + (%d/%d)Y = %d/%d \n", equazionelineare[0][0].numeratore, equazionelineare[0][0].denominatore , equazionelineare[0][1].numeratore, equazionelineare[0][1].denominatore, equazionelineare[0][2].numeratore, equazionelineare[0][2].denominatore);
printf ("(%d/%d)X + (%d/%d)Y = %d/%d \n", equazionelineare[1][0].numeratore, equazionelineare[1][0].denominatore , equazionelineare[1][1].numeratore, equazionelineare[1][1].denominatore, equazionelineare[1][2].numeratore, equazionelineare[1][2].denominatore);
}
tipoRazionale differenza (tipoRazionale v1, tipoRazionale v2)
{
tipoRazionale v;
v.numeratore = v2.denominatore * v1.numeratore - v1.denominatore * v2.numeratore;
v.denominatore = v1.denominatore * v1.denominatore;
return v;
}
tipoRazionale prodotto (tipoRazionale v1, tipoRazionale v2)
{
tipoRazionale v;
v.numeratore = v2.numeratore * v1.numeratore;
v.denominatore = v1.denominatore * v1.denominatore;
return v;
}
tipoRazionale divisione (tipoRazionale v1, tipoRazionale v2)
{
tipoRazionale v;
v.numeratore = v1.numeratore * v2.denominatore;
v.denominatore = v1.denominatore * v2.numeratore;
return v;
}
void determinanteQuadrato (tipoRazionale equazionelineare [2][3], int i, int j, tipoRazionale *determinante)
{
differenza ( prodotto(equazionelineare[0][i], equazionelineare [1][j]) , prodotto(equazionelineare[0][j], equazionelineare [1][i]) );
}
void cramer (tipoRazionale equazionelineare [2][3], tipoRazionale soluzione[2], tipoRazionale determinante[1])
{
soluzione[0] = divisione ( determinanteQuadrato( equazionelineare, 2, 1, determinante) , determinanteQuadrato( equazionelineare, 0, 1, determinante) );
soluzione[1] = divisione ( determinanteQuadrato( equazionelineare, 0, 2, determinante) , determinanteQuadrato( equazionelineare, 0, 1, determinante) );
}
void stampaSoluzione (tipoRazionale soluzione[2])
{
printf ("\nLe soluzioni del sistema sono X = %d/%d ed Y = %d/%d. \n", soluzione[0].numeratore, soluzione[0].denominatore, soluzione[1].numeratore, soluzione[1].denominatore);
}
Ottengo errori di questo tipo (tutti interni alla procedura "cramer"):
E2342 Type mismatch in parameter 'v1' (wanted 'tipoRazionale', got 'undefined')
E2468 Value of type void is not allowed
Mi sapreste aiutare? Grazie in anticipo.
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
typedef struct {
int numeratore;
int denominatore;
} tipoRazionale;
void init (tipoRazionale equazionelineare [2][3]);
void stampaMatrice (tipoRazionale equazionelineare [2][3]);
tipoRazionale differenza (tipoRazionale v1, tipoRazionale v2 );
tipoRazionale prodotto (tipoRazionale v1, tipoRazionale v2 );
tipoRazionale divisione (tipoRazionale v1, tipoRazionale v2 );
void determinanteQuadrato (tipoRazionale equazionelineare [2][3], int i, int j, tipoRazionale *determinante);
void cramer (tipoRazionale equazionelineare [2][3], tipoRazionale soluzione[2], tipoRazionale determinante[1]);
void stampaSoluzione (tipoRazionale soluzione[2]);
void main (void)
{
tipoRazionale equazioneLineare [2][3], Soluzione[2], Determinante[1];
char scelta;
do {
init (equazioneLineare);
stampaMatrice (equazioneLineare);
cramer (equazioneLineare, Soluzione, Determinante);
stampaSoluzione (Soluzione);
printf ("\nVuoi ripetere il programma? (Digita 'n' per terminare) ");
scelta=getche();
} while (tolower(scelta) != 'n');
}
void init (tipoRazionale equazionelineare [2][3])
{
int i, j, contatore=1;
printf ("Digitare gli elementi della matrice (numeratore e denominatore non nullo):\n\n");
for (i=0 ; i<=1 ; i++) {
for (j=0 ; j<=2 ; j++, contatore++) {
printf ("Elemento %d:\n", contatore);
printf ("Numeratore: ");
scanf ("%d", &equazionelineare [i][j].numeratore );
printf ("Denominatore: ");
scanf ("%d", &equazionelineare [i][j].denominatore );
printf ("\n");
}
}
}
void stampaMatrice (tipoRazionale equazionelineare [2][3])
{
int i, j;
printf ("\nLa matrice inizializzata e':\n\n");
for (i=0 ; i<=1 ; i++) {
for (j=0 ; j<=2 ; j++) {
printf ("%d/%d ", equazionelineare[i][j].numeratore, equazionelineare[i][j].denominatore );
}
printf ("\n");
}
printf ("\nEquivalente al sistema:\n\n");
printf ("(%d/%d)X + (%d/%d)Y = %d/%d \n", equazionelineare[0][0].numeratore, equazionelineare[0][0].denominatore , equazionelineare[0][1].numeratore, equazionelineare[0][1].denominatore, equazionelineare[0][2].numeratore, equazionelineare[0][2].denominatore);
printf ("(%d/%d)X + (%d/%d)Y = %d/%d \n", equazionelineare[1][0].numeratore, equazionelineare[1][0].denominatore , equazionelineare[1][1].numeratore, equazionelineare[1][1].denominatore, equazionelineare[1][2].numeratore, equazionelineare[1][2].denominatore);
}
tipoRazionale differenza (tipoRazionale v1, tipoRazionale v2)
{
tipoRazionale v;
v.numeratore = v2.denominatore * v1.numeratore - v1.denominatore * v2.numeratore;
v.denominatore = v1.denominatore * v1.denominatore;
return v;
}
tipoRazionale prodotto (tipoRazionale v1, tipoRazionale v2)
{
tipoRazionale v;
v.numeratore = v2.numeratore * v1.numeratore;
v.denominatore = v1.denominatore * v1.denominatore;
return v;
}
tipoRazionale divisione (tipoRazionale v1, tipoRazionale v2)
{
tipoRazionale v;
v.numeratore = v1.numeratore * v2.denominatore;
v.denominatore = v1.denominatore * v2.numeratore;
return v;
}
void determinanteQuadrato (tipoRazionale equazionelineare [2][3], int i, int j, tipoRazionale *determinante)
{
differenza ( prodotto(equazionelineare[0][i], equazionelineare [1][j]) , prodotto(equazionelineare[0][j], equazionelineare [1][i]) );
}
void cramer (tipoRazionale equazionelineare [2][3], tipoRazionale soluzione[2], tipoRazionale determinante[1])
{
soluzione[0] = divisione ( determinanteQuadrato( equazionelineare, 2, 1, determinante) , determinanteQuadrato( equazionelineare, 0, 1, determinante) );
soluzione[1] = divisione ( determinanteQuadrato( equazionelineare, 0, 2, determinante) , determinanteQuadrato( equazionelineare, 0, 1, determinante) );
}
void stampaSoluzione (tipoRazionale soluzione[2])
{
printf ("\nLe soluzioni del sistema sono X = %d/%d ed Y = %d/%d. \n", soluzione[0].numeratore, soluzione[0].denominatore, soluzione[1].numeratore, soluzione[1].denominatore);
}
Ottengo errori di questo tipo (tutti interni alla procedura "cramer"):
E2342 Type mismatch in parameter 'v1' (wanted 'tipoRazionale', got 'undefined')
E2468 Value of type void is not allowed
Mi sapreste aiutare? Grazie in anticipo.