PDA

Visualizza la versione completa : [C]Minimo complementare


21Edoardo96
18-03-2013, 16:07
Ciao,
devo fare un programma che inserita una matrice quadrata calcoli il minimo complementare.
Il problema è che il compilatore mi da 2 problemi sulla funzione mc:
1) incompatible type for argument 1 of `mc'
2) conflicting types for 'mc'
3) previous declaration of 'mc' was here


#include<stdio.h>
void mc(float, int, int, int);
int main()
{
float mat[100][100];
int x,y,i,er,ec;
printf("Inserisci il numero di righe e colonne della matrice quadrata:");
scanf("%d", &i);
for(y=0;y<i;y++)
{
for(x=0;x<i;x++)
{
printf("Inserisci il valore della matrice in posizione %d %d ", x+1, y+1);
scanf("%f", &mat[x][y]);
}
}
for(y=0;y<i;y++)//Matrice prima di essere modificata
{
printf("\n");
for(x=0;x<i;x++)
printf("%f", mat[x][y]);
}
printf("Inserisci il numero della riga che vuoi eliminare");
scanf("%d", &er);
printf("Inserisci il numero della colonna che vuoi eliminare");
scanf("%d", &ec);
mc(mat,er,ec,i);
for(y=0;y<i-1;y++)//Matrice dopo essere stata modificata
{
printf("\n");
for(x=0;x<i-1;x++)
printf("%f", mat[x][y]);
}
system("pause");
return 0;
}
//Implementazione della funzione per il minore complementare
void mc(float matrice [][100], int eriga, int ecolonna, int i)
{
float matriceap [100][100];
int x,y,j=0,k=0; //j è il numero della riga della matrice d'appoggio - k il numero della colonna della matrice d'appoggio
for(y=0;y<i;y++)
{
for(x=0;x<i;x++)
{
if(x!=eriga-1 && y!=ecolonna-1)
{
matrice[x][y]=matriceap[j][k];
j++;
k++;
}
}//chiusura for della x
}//chiusura for della y
for(y=0;y<i-1;y++)//copiatura della matrice dappoggio nella matrice originale
{
for(x=0;x<i-1;x++)
{
matrice[x][y]=matriceap[x][y];
}
}
}


Ciao e grazie in anticipo dell'aiuto

Marco1995
18-03-2013, 18:15
La prima cosa che mi è saltata all'occhio è che nel prototipo come primo argomento ti aspetti un float...nel main gli dai una matrice di float...coerentemente con la funzione che hai scritto,quindi devi modificare il prototipo della funzione

21Edoardo96
18-03-2013, 18:59
Grazie,
non l'avevo visto, ora il compilatore non mi da più errori di compilazione.


#include<stdio.h>
void mc(float[][], int, int, int);
int main()
{
float mat[100][100];
int x,y,i,er,ec;
printf("Inserisci il numero di righe e colonne della matrice quadrata:");
scanf("%d", &i);
for(y=0;y<i;y++)
{
for(x=0;x<i;x++)
{
printf("Inserisci il valore della matrice in posizione [%d] [%d]: ", x+1, y+1);
scanf("%f", &mat[x][y]);
}
}
for(y=0;y<i;y++)//Matrice prima di essere modificata
{
printf("\n");
for(x=0;x<i;x++)
printf("%4.2f ", mat[x][y]);
}
printf("\nInserisci il numero della riga che vuoi eliminare: ");
scanf("%d", &er);
printf("Inserisci il numero della colonna che vuoi eliminare: ");
scanf("%d", &ec);
mc(mat,er,ec,i);
for(y=0;y<i-1;y++)//Matrice dopo essere stata modificata
{
printf("\n");
for(x=0;x<i-1;x++)
printf("%4.1f ", mat[x][y]);
}
printf("\n");
system("pause");
return 0;
}
//Implementazione della funzione per il minore complementare
void mc(float matrice [][100], int eriga, int ecolonna, int i)
{
float matriceap [100][100];
int x,y,j=0,k=0; //j è il numero della riga della matrice d'appoggio - k il numero della colonna della matrice d'appoggio
for(y=0;y<i;y++)
{
for(x=0;x<i;x++)
{
if(x!=eriga-1 && y!=ecolonna-1)
{
matrice[x][y]=matriceap[j][k];
j++;
k++;
}
}//chiusura for della x
}//chiusura for della y
for(y=0;y<i-1;y++)//copiatura della matrice dappoggio nella matrice originale
{
for(x=0;x<i-1;x++)
{
matrice[x][y]=matriceap[x][y];
}
}
}


Il problema è che la nuova matrice è composta solo da zeri, cosa devo modificare?

Ciao e grazie

Marco1995
18-03-2013, 19:08
La risposta è semplice...nella funzione assegni alla matrice i valori della matrice d'appoggio...non riesco a capire ancora il motivo :/
Probabilmente quando dichiari un qualsiasi tipo di variabili il tuo compilatore le inizializza a 0,e quando fai queste istruzioni:


matrice[x][y] = matriceap[x][y]

non fai altro che copiare degli 0

21Edoardo96
18-03-2013, 19:21
Giusto,
ho modificato il codice


#include<stdio.h>
void mc(float[][], int, int, int);
int main()
{
float mat[100][100];
int x,y,i,er,ec;
printf("Inserisci il numero di righe e colonne della matrice quadrata:");
scanf("%d", &i);
for(y=0;y<i;y++)
{
for(x=0;x<i;x++)
{
printf("Inserisci il valore della matrice in posizione [%d] [%d]: ", x+1, y+1);
scanf("%f", &mat[x][y]);
}
}
for(y=0;y<i;y++)//Matrice prima di essere modificata
{
printf("\n");
for(x=0;x<i;x++)
printf("%4.2f ", mat[x][y]);
}
printf("\nInserisci il numero della riga che vuoi eliminare: ");
scanf("%d", &er);
printf("Inserisci il numero della colonna che vuoi eliminare: ");
scanf("%d", &ec);
mc(mat,er,ec,i);
for(y=0;y<i-1;y++)//Matrice dopo essere stata modificata
{
printf("\n");
for(x=0;x<i-1;x++)
printf("%4.1f ", mat[x][y]);
}
printf("\n");
system("pause");
return 0;
}
//Implementazione della funzione per il minore complementare
void mc(float matrice [][100], int eriga, int ecolonna, int i)
{
float matriceap [100][100];
int x,y,j=0,k=0; //j è il numero della riga della matrice d'appoggio - k il numero della colonna della matrice d'appoggio
for(y=0;y<i;y++)
{
for(x=0;x<i;x++)
{
if(x!=eriga-1 && y!=ecolonna-1)
{
matriceap[j][k]=matrice[x][y];
j++;
k++;
}
}//chiusura for della x
}//chiusura for della y
for(y=0;y<i-1;y++)//copiatura della matrice dappoggio nella matrice originale
{
for(x=0;x<i-1;x++)
{
matrice[x][y]=matriceap[x][y];
}
}
}


Ora il problema è che metà dei numeri sono uguali a zero e metà no.

Marco1995
18-03-2013, 19:31
Potresti prima dirmi cosa deve fare il programma...perchè non so proprio cosa sia il minimo complementare :dhò: poi vedrò di aiutarti..

21Edoardo96
18-03-2013, 19:41
Matrice originale
1 2 3
4 5 6
7 8 9
L'utente dice di eliminare la riga e la colonna che vuole (esempio riga 1 e colonna 2)
4 6
7 9

Quindi ha eliminato la riga con 1 2 3 e la colonna che conteneva 2
5

21Edoardo96
18-03-2013, 19:42
Con la colonna che conteneva:
2
5
8

Questo codice mi servirà più avanti per calcolare il determinate di una matrice

Scusami se non ti ho detto in anticipo cosa doveva fare il codice

Marco1995
18-03-2013, 19:48
Ok adesso ho capito...comunque mea culpa dovevo capirlo dal codice.. :D comunque appena ho un attimo ci do un occhiata

21Edoardo96
18-03-2013, 19:52
OK
Grazie mille dell'aiuto

Loading