Media della temperatura di TOT comuni per TOT giorni

TheorLaw

Utente Iron
15 Maggio 2020
19
6
2
16
Ultima modifica:
C:
#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);
}

Spero che possa essere d'aiuto per qualcuno che inizia.
 
  • Mi piace
Reazioni: gerasia
carino, però un consiglio. Al posto di definire N come una macro, passala al programma come variabile di ambiente o fallo inserire a mano durante l'esecuzione, diventa più dinamico.
 
C:
int Media(struct _comuni comuni[][N])
{
    float media=0;
    int a=0;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
        media=media + comuni[i][j].temperatura;
        }
    }
    for (int i=0;i<N;i++)
    {
        a=a+N;
    }
    media = media/a;
    return media;
}
La variabile a contiene N+N+...+N per N volte, ovvero sta sommando N volte N e potresti semplicemente scrivere int a = N*N, ma sei sicuro che il calcolo della media aritmetica sia matematicamente corretto?

PS. Nel tag CODE puoi usare anche il syntax highlighting, prova a dare un'occhiata ai tre puntini e codice nell'editor dei messaggi (affianco alle emoticon).
 
La variabile a contiene N+N+...+N per N volte, ovvero sta sommando N volte N e potresti semplicemente scrivere int a = N*N, ma sei sicuro che il calcolo della media aritmetica sia matematicamente corretto?

PS. Nel tag CODE puoi usare anche il syntax highlighting, prova a dare un'occhiata ai tre puntini e codice nell'editor dei messaggi (affianco alle emoticon).
Ho aggiunto il tag code con il c, quel ciclo serve in caso si aggiungessero ulteriori giorni, poi ho provato, a controllare con la calcolatrice la media, sembra buona.
 
Ah okay, my bad, devo aver interpretato male la consegna dell'esercizio.
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
Tralasciando i 5 comuni e 7 giorni (sono solo numeri), pensavo che dovevi calcolare sia la media per ogni comune che la media complessiva e poi vedere se un comune fosse mediamente più caldo degli altri. Ho letto meglio la soluzione e ho capito il perché di quel calcolo: stai vedendo se la temperatura di un singolo giorno è più alta dela media complessiva. Il for resta superfluo, così come quel puntatore nel main, ma vabbé... adesso ho capito cosa hai fatto. Se è un esercizio scolastico, assicurati di aver ben compreso la traccia perché io pensavo a tutt'altro.
 
Ah okay, my bad, devo aver interpretato male la consegna dell'esercizio.

Tralasciando i 5 comuni e 7 giorni (sono solo numeri), pensavo che dovevi calcolare sia la media per ogni comune che la media complessiva e poi vedere se un comune fosse mediamente più caldo degli altri. Ho letto meglio la soluzione e ho capito il perché di quel calcolo: stai vedendo se la temperatura di un singolo giorno è più alta dela media complessiva. Il for resta superfluo, così come quel puntatore nel main, ma vabbé... adesso ho capito cosa hai fatto. Se è un esercizio scolastico, assicurati di aver ben compreso la traccia perché io pensavo a tutt'altro.
Ho solo rubato la traccia a qualcuno, sto alle superiori sto solo studiando in autonomo, però domani cercherò di sistemarlo per inserire i giorni e comuni da inserire, e se ne ho voglia aggiungo pure la media del giorno.
 
Pedantic mode on.

char nome[20];
Secondo questo sito un nome di comune accettabile più lungo tra quelli italiani è di 34 caratteri, non 20. Magari potresti poi pure star desto nel caso che venissero immessi in input più di 34 caratteri.
1589921733_2255_19.05.2020_1920x1080.png

Riguardo alla media, potresti stampare un valore float più intellegibile della media con lo specificatore di formato %g con printf():
C:
float temperatura = 36.0;
printf("Temperatura: %f\n", temperatura);
printf("Temperatura: %g\n", temperatura);
/* output:
Temperatura: 36.000000 -> %f
Temperatura: 36  -> %g */
 
Pedantic mode on.


Secondo questo sito un nome di comune accettabile più lungo tra quelli italiani è di 34 caratteri, non 20. Magari potresti poi pure star desto nel caso che venissero immessi in input più di 34 caratteri.

Riguardo alla media, potresti stampare un valore float più intellegibile della media con lo specificatore di formato %g con printf():
C:
float temperatura = 36.0;
printf("Temperatura: %f\n", temperatura);
printf("Temperatura: %g\n", temperatura);
/* output:
Temperatura: 36.000000 -> %f
Temperatura: 36  -> %g */
aggiusto l'array del carattere a 50, il mio libro non ha ancora parlato di %g, conosco solo %.2f che mi diminuisce la precisione.
comunque c'è un errore non da poco, non puoi inserire spazzi nell'array, devo ancra aggiornarmi al c11. per fgets.