Aiuto per programma in C

di il
54 risposte

Aiuto per programma in C

Salve a tutti, sono nuovo del forum e colgo l'occasione per presentarmi. sto studiando il linguaggio C e ho un problema con questo programma:
#include<stdio.h>
#define SIZE 9

double compessione( double xx[3][3] );
void printArray( const int zz[][SIZE] );

int main()
{
double aa[3][3];
const int array[][SIZE] = { { 91, 92, 93, 94, 95, 96, 97, 98, 99 }, { 11, 12, 13, 14, 15, 16, 17, 18, 19 },
{ 21, 22, 23, 24, 25, 26, 27, 28, 29 }, { 31, 32, 33, 34, 35, 36, 37, 38, 39 },
{ 41, 42, 43, 44, 45, 46, 47, 48, 49 }, { 51, 52, 53, 54, 55, 56, 57, 58, 59 },
{ 61, 62, 63, 64, 65, 66, 67, 68, 69 }, { 71, 72, 73, 74, 75, 76, 77, 78, 79 },
{ 81, 82, 83, 84, 85, 86, 87, 88, 89 } };

printf("la matrice e':\n");
printArray( array );

printf("\nla sottomatrice e':\n");
compressione( xx[3][3]);

return 0;


}

double compressione( double xx[3][3] )
{
double yy[3][3];

int h, k;
int i, j;

for( i = 0; i < 3; i++ )
{
for( j = 0; j < 3; j++ )
{
h = 2*i + 1;
k = 2*j + 1;
yy[j] = (xx[h - 1][k - 1] + xx[h - 1][k] + xx[h - 1][k + 1] + xx[h][k - 1] + xx[h][k]
+ xx[h][k + 1] + xx[h + 1][k - 1] + xx[h + 1][k] + xx[h + 1][k + 1]) / 9;
}
}
return yy[j];
}

void printArray( const int zz[][SIZE] )
{
int i;
int j;

for( i = 0; i < 9; i++ )
{
for( j = 0; j < 9; j++ )
{
printf("%d ", zz[ i ][ j ]);
}
printf("\n");
}

}
non so dove sbaglio.. qualcuno mi potrebbe dare una mano? non mi funziona la funzione(scusate il gioco di parole) compressione.. grazie in anticipo ciao

54 Risposte

  • Re: Aiuto per programma in C

    non mi funziona la funzione
    cosa significa? Da output errato, va in crash(hai provato sotto debugger?), cos'altro?
  • Re: Aiuto per programma in C

    Allora quando compilo il programma mi dice che c'è un errore nella chiamata alla funzione compressione all'interno del metodo main.. il programma senza la chiamata alla funzione mi parte correttamente, solo che non capisco quale errore faccio..
  • Re: Aiuto per programma in C

    Xx[3][3] non esiste nel main. Attenzione anche alla funzione compresione. Stai faccendo il return di non so che cosa yy[j] sarà yy[3][3] (posizione non valida). Spiegati cosa vorresti fare a parole poi vediamo se si riesce a trasformarlo in codice C. Così come l'hai scritto ha troppi errori.
  • Re: Aiuto per programma in C

    Allora l'esercizio del prof. è:
    "considerando una matrice 9x9 double costituita da 9 sottomatrici di 3x3 double scrivere una funzione C che permetta di costruire una nuova matrice 3x3 elementi i cui valori dovranno essere uguali alla media dei valori presenti nelle sottomatirci."

    io ho pensato di fare la funzione comprimi che mi fa la media dei valori della matrice in ingresso e una funzione printarray che la stampa. non sono ancora molto pratico con vettori e matrici, quindi mi confondo con le grandezze..
  • Re: Aiuto per programma in C

    Allora la matrice 9x9 dev'essere un double e tu l'hai definito come int (const va bene in quanto non vai a modificare i suoi valori - questo è un punto al tuo favore). La matrice 3x3 deve essere recuperata dalla funzione comprensione (e va bene) ma x recuperarla dovresti passare una matrice vuota (per riferimento) alla funzione compresione. come si fa:
    
    void compressione(double & result[][], double & matriceIniziale[][]);
    
    questa sarà la definizione della funzione compressione. Ho messo dentro anche la matriceIniziale in quanto la tua funzione compressione di adesso non ha nessun dato certo su cui lavorare da ricavare le medie.

    nel main oltre a definire la matriceIniziale (o array come l'hai definito tu) devi creare una matrice temporanea da riempire dalla funzione compressione.
    
    double result[3][3];
    
    compressione(result,matriceIniziale);
    
    alla fine sta matrice result terrà i valori da te voluti.
  • Re: Aiuto per programma in C

    Grazie per l'aiuto solo che volevo chiederti un'altra cosina...
    double & result[][], double & matriceIniziale[][]
    in questo modo cosa faccio?? ti ripeto non sono per nulla bravo e ho l'esame tra una settimana
  • Re: Aiuto per programma in C

    Leggi quì:
    http://programmazione.html.it/guide/lezione/1175/chiamata-per-valore-e-per-indirizzo/

    una presunta soluzione potrebbe essere:
    
    #include<stdio.h>
    #define SIZE 9
    
    void compressione( double (*xx)[3],const  double  (*matriceIniziale)[9]);
    void printArray( const double (*zz)[9]);
    void printSottoMatrice(double (*xx)[3]);
    
    const double matriceIniziale[SIZE][SIZE] = { { 91, 92, 93, 94, 95, 96, 97, 98, 99 }, { 11, 12, 13, 14, 15, 16, 17, 18, 19 },
    { 21, 22, 23, 24, 25, 26, 27, 28, 29 }, { 31, 32, 33, 34, 35, 36, 37, 38, 39 },
    { 41, 42, 43, 44, 45, 46, 47, 48, 49 }, { 51, 52, 53, 54, 55, 56, 57, 58, 59 },
    { 61, 62, 63, 64, 65, 66, 67, 68, 69 }, { 71, 72, 73, 74, 75, 76, 77, 78, 79 },
    { 81, 82, 83, 84, 85, 86, 87, 88, 89 } };
    
    int main()
    {
      double aa[3][3];
    
    
    printf("la matrice e':\n");
    printArray(matriceIniziale);
    
    printf("\nla sottomatrice e':\n");
    compressione(aa, matriceIniziale);
    
    printSottoMatrice(aa);
    
    return 0;
    
    
    }
    
    void compressione( double (*xx)[3],const  double  (*matriceIniziale)[9])
    {
    	int h, k;
    	int i, j;
    
    	for( i = 0; i < 3; i++ )
    	{
    		for( j = 0; j < 3; j++ )
    		{
    			h = 2*i + 1;
    			k = 2*j + 1;
    			xx[i][j] = (double)((matriceIniziale[h - 1][k - 1] + matriceIniziale[h - 1][k] + matriceIniziale[h - 1][k + 1] + matriceIniziale[h][k - 1] + matriceIniziale[h][k]
    			+ matriceIniziale[h][k + 1] + matriceIniziale[h + 1][k - 1] + matriceIniziale[h + 1][k] + matriceIniziale[h + 1][k + 1]) / 9);
    		}
    	}
    }
    
    void printArray( const double zz[9][9])
    {
    	int i;
    	int j;
    
    	for( i = 0; i < 9; i++ )
    	{
    		for( j = 0; j < 9; j++ )
    		{
    			printf("%.2f ", zz[ i ][ j ]);
    		}
    		printf("\n");
    	}
    }     
          
    
    void printSottoMatrice(double xx[3][3])
    {
    	int i;
    	int j;
    
    	for( i = 0; i < 3; i++ )
    	{
    		for( j = 0; j < 3; j++ )
    		{
    			printf("%.2f ", xx[ i ][ j ]);
    		}
    		printf("\n");
    	}
    }
    
  • Re: Aiuto per programma in C

    Allora ho provato a modificare un pò il codice ma avrò combinato qualche casino in più...
    #include<stdio.h>
    #define SIZE 9

    void compressione(double result[3][3], double matriceIniziale[SIZE][SIZE]);
    void printArray( const int zz[][SIZE] );

    int main()
    {

    double risultato[3][3];
    const int array[][SIZE] = { { 91, 92, 93, 94, 95, 96, 97, 98, 99 }, { 11, 12, 13, 14, 15, 16, 17, 18, 19 },
    { 21, 22, 23, 24, 25, 26, 27, 28, 29 }, { 31, 32, 33, 34, 35, 36, 37, 38, 39 },
    { 41, 42, 43, 44, 45, 46, 47, 48, 49 }, { 51, 52, 53, 54, 55, 56, 57, 58, 59 },
    { 61, 62, 63, 64, 65, 66, 67, 68, 69 }, { 71, 72, 73, 74, 75, 76, 77, 78, 79 },
    { 81, 82, 83, 84, 85, 86, 87, 88, 89 } };

    printf("la matrice e':\n");
    printArray( array );

    printf("la matrice media e':\n");
    compressione(risultato);

    return 0;


    }

    void compressione(double result[3][3], double matriceIniziale[SIZE][SIZE])
    {
    double result[3][3];

    int h, k;
    int i, j;

    for( i = 0; i < 3; i++ )
    {
    for( j = 0; j < 3; j++ )
    {
    h = 2*i + 1;
    k = 2*j + 1;
    result[j] = (matriceIniziale[h - 1][k - 1] + matriceIniziale[h - 1][k]
    + matriceIniziale[h - 1][k + 1] + matriceIniziale[h][k - 1] + matriceIniziale[h][k]
    + matriceIniziale[h][k + 1] + matriceIniziale[h + 1][k - 1] + matriceIniziale[h + 1][k]
    + matriceIniziale[h + 1][k + 1]) / 9;
    }
    }
    return result[j];
    }

    void printArray( const int zz[][SIZE] )
    {
    int i;
    int j;

    for( i = 0; i < 9; i++ )
    {
    for( j = 0; j < 9; j++ )
    {
    printf("%d ", zz[ i ][ j ]);
    }
    printf("\n");
    }

    }

    continua a non fungere e ho tolto i due & perchè mi diceva che non sono corretti...
  • Re: Aiuto per programma in C

    Soluzione finale.Controlla la dichiarazione delle funzioni e il passaggio dei variabili.
    
    #include<stdio.h>
    #define SIZE 9
    
    void compressione( double (&xx)[3][3],const  double  (&matriceIniziale)[9][9]);
    void printArray( const double (&zz)[9][9]);
    void printSottoMatrice(double (&xx)[3][3]);
    
    const double matriceIniziale[SIZE][SIZE] = { { 91, 92, 93, 94, 95, 96, 97, 98, 99 }, { 11, 12, 13, 14, 15, 16, 17, 18, 19 },
    { 21, 22, 23, 24, 25, 26, 27, 28, 29 }, { 31, 32, 33, 34, 35, 36, 37, 38, 39 },
    { 41, 42, 43, 44, 45, 46, 47, 48, 49 }, { 51, 52, 53, 54, 55, 56, 57, 58, 59 },
    { 61, 62, 63, 64, 65, 66, 67, 68, 69 }, { 71, 72, 73, 74, 75, 76, 77, 78, 79 },
    { 81, 82, 83, 84, 85, 86, 87, 88, 89 } };
    
    int main()
    {
      double aa[3][3];
    
    
    printf("la matrice e':\n");
    printArray(matriceIniziale);
    
    printf("\nla sottomatrice e':\n");
    compressione(aa, matriceIniziale);
    
    printSottoMatrice(aa);
    
    return 0;
    
    
    }
    
    void compressione( double (&xx)[3][3],const  double  (&matriceIniziale)[9][9])
    {
    	int h, k;
    	int i, j;
    
    	for( i = 0; i < 3; i++ )
    	{
    		for( j = 0; j < 3; j++ )
    		{
    			h = 2*i + 1;
    			k = 2*j + 1;
    			xx[i][j] = (double)((matriceIniziale[h - 1][k - 1] + matriceIniziale[h - 1][k] + matriceIniziale[h - 1][k + 1] + matriceIniziale[h][k - 1] + matriceIniziale[h][k]
    			+ matriceIniziale[h][k + 1] + matriceIniziale[h + 1][k - 1] + matriceIniziale[h + 1][k] + matriceIniziale[h + 1][k + 1]) / 9);
    		}
    	}
    }
    
    void printArray( const double (&zz)[9][9])
    {
    	int i;
    	int j;
    
    	for( i = 0; i < 9; i++ )
    	{
    		for( j = 0; j < 9; j++ )
    		{
    			printf("%.0f ", zz[ i ][ j ]);
    		}
    		printf("\n");
    	}
    }     
          
    
    void printSottoMatrice(double (&xx)[3][3])
    {
    	int i;
    	int j;
    
    	for( i = 0; i < 3; i++ )
    	{
    		for( j = 0; j < 3; j++ )
    		{
    			printf("%.0f ", xx[ i ][ j ]);
    		}
    		printf("\n");
    	}
    }
    
  • Re: Aiuto per programma in C

    Grazie per l'aiuto
  • Re: Aiuto per programma in C

    Hai imparato qualcosa almeno? Se no la prossima volta sei di nuovo da queste parti.
  • Re: Aiuto per programma in C

    Sisi adesso devo fare altri esercizi di questo genere e credo di riuscire a farli.. grazie tantissimo
  • Re: Aiuto per programma in C

    Rieccomi con un altro problemino... questa volta dovrei fare un programma che mi inverta le diagonali di una matrice. come faccio a creare un file temporaneo? mi spiego meglio.. io voglio fargli prendere in ingresso la matrice, in questo caso di numeri complessi, e attraverso una funzione fargli fare l'inversione. il codice che ho usato è questo:
    int i, j;
    
       for( i = 0; i < 9; i++ )
       {
          for( j = 0; j < 9; j++ )
          {
               if(i == j)
               {
                    xx[i][j] = matriceIniziale[i][9 - 1 -j];
               }               
          }
       }
    solo che in out mi da una cosa immonda...
  • Re: Aiuto per programma in C

    Il tuo codice va bene. magari è l'input che sbagliato. poi che sono sti numeri complessi (della forma 3+2i x dire?). Come li rappresenti nella matrice sti numeri.
Devi accedere o registrarti per scrivere nel forum
54 risposte