Ripropongo il codice aggiornato funzionante.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int N;
int NN;
//creare un programma in cui viene calcolata la temperatura media di 5 comuni in una settimana ,
//indicare QUANTI comuni sono sotto la media e QUANTI sono sopra la media
//utilizzare caricamento, calcolo e stampa
struct _comuni
{
char nome[50];
float temperatura;
};
void Inserimento(struct _comuni [][NN]);
void Stampa(struct _comuni [][NN]);
float Media(struct _comuni [][NN]);
void UpAndDown(struct _comuni [][NN],float *);
int main()
{
printf("Inserisci quanti comuni analizzare : ");
scanf("%d",&N);
printf("Inserisci quanti giorni analizzare : ");
scanf("%d",&NN);
struct _comuni comuni[N][NN];
float media,*puntatore_media=&media;
Inserimento(comuni);
Stampa(comuni);
*puntatore_media=Media(comuni);
UpAndDown(comuni,puntatore_media);
return 0;
}
void Inserimento(struct _comuni comuni[][NN])
{
for (int i=0;i<N;i++)
{
for(int j=0;j<NN;j++)
{
if(j==0)
{
printf("Inserisci nome comune %d : ",i+1);
scanf("%s",&comuni[i][0].nome);
for(int k=1;k<NN;k++)
{
strcpy(comuni[i][k].nome,comuni[i][0].nome);
}
}
printf("Inserisci temperatura %d del giorno %d al comune %s : ",i+1,j+1,comuni[i][j].nome);
scanf("%f",&comuni[i][j].temperatura);
}
}
}
void Stampa(struct _comuni comuni[][NN])
{
for(int i=0;i<N;i++)
{
for(int j=0;j<NN;j++)
{
printf("Nome comune %d : %s\t\ttemperatura : %.2f\t\tnel giorno %d\n",i+1,comuni[i][j].nome,comuni[i][j].temperatura,j+1);
}
}
}
float Media(struct _comuni comuni[][NN])
{
float media=0;
float a=0;
for(int i=0;i<N;i++)
{
for(int j=0;j<NN;j++)
{
media=media + comuni[i][j].temperatura;
}
}
for (int i=0;i<N;i++)
{
for(int j=0;j<NN;j++)
{
a++;
}
}
media =media/a;
return media;
}
void UpAndDown(struct _comuni comuni[][NN],float *media)
{
int differenza_positiva=0,differenza_negativa=0;
for(int i=0;i<N;i++)
{
for(int j=0;j<NN;j++)
{
if(comuni[i][j].temperatura >= *media)
{
differenza_positiva++;
printf("Il comune %d: %s\t\tcon temperatura : %.2f\t\te' superiore alla media : %.2f\t\tnel giorno %d\n",i+1,comuni[i][j].nome,comuni[i][j].temperatura,*media,j+1);
}
else
{
differenza_negativa++;
printf("Il comune %d: %s\t\tcon temperatura : %.2f\t\te' inferiore alla media : %.2f\t\tnel giorno %d\n",i+1,comuni[i][j].nome,comuni[i][j].temperatura,*media,j+1);
}
}
}
printf("I comuni superiori alla media sono : %d\ngli inferiori alla media sono : %d\n",differenza_positiva,differenza_negativa);
}
Funzione per inserire una volta il nome del comune in una matrice:
strcpy serve per copiare un variabile stringa su un altra variabile, l'assegnamento classico da errore.
void Inserimento(struct _comuni comuni[][NN])
{
for (int i=0;i<N;i++)
{
for(int j=0;j<NN;j++)
{
if(j==0)
{
printf("Inserisci nome comune %d : ",i+1);
scanf("%s",&comuni[i][0].nome);
for(int k=1;k<NN;k++)
{
strcpy(comuni[i][k].nome,comuni[i][0].nome);
}
}
printf("Inserisci temperatura %d del giorno %d al comune %s : ",i+1,j+1,comuni[i][j].nome);
scanf("%f",&comuni[i][j].temperatura);
}
}
}
Media della matrice
float Media(struct _comuni comuni[][NN])
{
float media=0;
float a=0;
for(int i=0;i<N;i++)
{
for(int j=0;j<NN;j++)
{
media=media + comuni[i][j].temperatura;
}
}
for (int i=0;i<N;i++)
{
for(int j=0;j<NN;j++)
{
a++;
}
}
media =media/a;
return media;
}
funzione per controllare se maggiore o minore della matrice
void UpAndDown(struct _comuni comuni[][NN],float *media)
{
int differenza_positiva=0,differenza_negativa=0;
for(int i=0;i<N;i++)
{
for(int j=0;j<NN;j++)
{
if(comuni[i][j].temperatura >= *media)
{
differenza_positiva++;
printf("Il comune %d: %s\t\tcon temperatura : %.2f\t\te' superiore alla media : %f\t\tnel giorno %d\n",i+1,comuni[i][j].nome,comuni[i][j].temperatura,*media,j+1);
}
else
{
differenza_negativa++;
printf("Il comune %d: %s\t\tcon temperatura : %.2f\t\te' inferiore alla media : %f\t\tnel giorno %d\n",i+1,comuni[i][j].nome,comuni[i][j].temperatura,*media,j+1);
}
}
}
printf("I comuni superiori alla media sono : %d\ngli inferiori alla media sono : %d\n",differenza_positiva,differenza_negativa);
}
La soluzione al tuo problema e' una matrice con cicli nidificati.
Con questo codice non puoi inserire spazzi nel nome del comune, siccome gets non funziona, e devo ancora aggiornarmi al c11 per fgets e testare se funziona sulla struttura.
Spero di esserti d'aiuto.
volevo utilizzare il puntatore anche per la struttura, ma ho avuto non pochi problemi con la matrice che non era utilizzabile.