View Single Post
Old 21-12-2008, 22:08   #4
Composition86
Senior Member
 
L'Avatar di Composition86
 
Iscritto dal: Jul 2005
Messaggi: 406
Ok, ho ricontrollato e c'era anche quell'erorre che hai segnalato. Ho apportato alcune modifiche e funziona tutto, riporto il codice per completezza. Grazie di nuovo.

Codice:
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#define DIM 50

typedef struct {
float media;
float deviazionestandard;
int minimo;
int massimo;
} tipoStatistica ;

void init (int mat[DIM][DIM], int *);
void stampaMatrice (int mat[DIM][DIM], int *);
void diagonale (int mat[DIM][DIM], int *, int *);
float media (int v[DIM], int *);
float deviazione (int v[DIM], int *);
int min (int v[DIM], int *);
int max (int v[DIM], int *);
void statisticaDiagonale (int mat[DIM][DIM], tipoStatistica *stat, int *Diag, int *);
void stampaStatistica (tipoStatistica *stat);


int main (void)
{
  int Mat[DIM][DIM], Diag[DIM], D;
  tipoStatistica Stat;
  char scelta;

  do {
      init (Mat, &D);
      stampaMatrice (Mat, &D);
      statisticaDiagonale (Mat, &Stat, Diag, &D);
      stampaStatistica (&Stat);

      printf ("\nVuoi ripetere il programma? (Digita 'n' per terminare) ");
      scelta=getche();
     } while (tolower(scelta) != 'n');
}

void init (int mat[DIM][DIM], int *d)
{
  int i, j;
  printf ("Inserire la dimensione della matrice quadrata: ");
  scanf ("%d", d);

  printf ("Digitare dei numeri interi, elementi della matrice, distribuendoli sulle righe:\n");

  for (i=0 ; i<= *d-1 ; i++) {
     for (j=0 ; j<= *d-1 ; j++) {
        scanf ("%d", &mat[i][j]);
     }
  }
}

void stampaMatrice (int mat[DIM][DIM], int *d)
{
  int i, j;

  printf ("\nEcco la matrice inizializzata:\n\n");

  for (i=0 ; i<= *d-1 ; i++) {
     for (j=0 ; j<= *d-1 ; j++) {
        printf ("%d ", mat[i][j]);
     }
     
     printf ("\n");
  }
}

void diagonale (int mat[DIM][DIM], int *diag, int *d) //Il vettore diag è l'output della funzione
{
  int i;

  for (i=0 ; i<= *d-1 ; i++) {
     diag[i]=mat[i][i];
  }
}

float media (int v[DIM], int *d)
{
  int k, somma=0;
  float medium;

  for (k=0 ; k<= *d-1 ; k++) {
     somma+=v[k];
  }
  medium = (float) somma/(*d);

  return medium;
}

float deviazione (int v[DIM], int *d)
{
  int k, somma=0;
  float standardeviation;
  
  for (k=0 ; k<= *d-1 ; k++) {
     somma+= pow (v[k] - media(v, d), 2);
  }

  standardeviation = sqrt ((float) somma/(*d) );

  return standardeviation;
}

int min (int v[DIM], int *d)
{
  int k, minimum=v[0];

  for (k=1 ; k<= *d-1 ; k++) { //Inizia da k=1 per risparmiare un ciclo
     if (v[k] < minimum)
        minimum = v[k];
  }

  return minimum;
}

int max (int v[DIM], int *d)
{
  int k, maximum=v[0];

  for (k=1 ; k<= *d-1 ; k++) {
     if (v[k] > maximum)
        maximum = v[k];
  }

  return maximum;
}

void statisticaDiagonale (int mat[DIM][DIM], tipoStatistica *stat, int *diag, int *d) //stat è una variabile ed è l'output
{
  diagonale (mat, diag, d); //Prima viene costruita la diagonale, le funzioni sotto utilizzano il vettore 'diag': è un calcolo intermedio
  stat->media = media(diag, d);
  stat->deviazionestandard = deviazione(diag, d);
  stat->minimo = min(diag, d);
  stat->massimo = max(diag, d);
}

void stampaStatistica (tipoStatistica *stat)
{
  printf ("\nSi ricavano adesso alcune informazioni relative alla DIAGONALE PRINCIPALE della matrice:");
  printf ("\nLa media degli elementi e': %.2f", stat->media);
  printf ("\nLa deviazione standard e': %.2f", stat->deviazionestandard);
  printf ("\nL'elemento minimo e': %d", stat->minimo);
  printf ("\nL'elemento massimo e': %d", stat->massimo);
  printf ("\n");
}
Composition86 è offline   Rispondi citando il messaggio o parte di esso