Aiuto per codice - acquisire dei nomi e media

di il
32 risposte

Aiuto per codice - acquisire dei nomi e media

Ciao ragazzi, ho fatto un codice assegnatomi che ora vi condivido, che serve a ricavare la temperatura media di 5 comuni per una settimana e di farne la media totale, poi scoprire quale dei comuni è sopra e quale sotto. Questo l'ho già fatto, ma non riesco a capire come fare per

1 - acquisire un nome ad ogni passaggio di ciclo (in questo momento posso acquisire solo numeri), perché ho provato ad integrare la libreria stringhe e ad usare i comandi necessari ma non funge;
2 - ho un problema con la media poiché ogni volta che faccio il build e avvio, e arrivo al punto in cui devo calcolarla, mi da una cosa come "inf" quindi suppongo che il denominatore sia in qualche modo zero ma non riesco a capire l'errore.

#include <iostream>
#include <string>

//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
using namespace std;




typedef struct comuni{
    char nome;
    float temperatura;
    
}comuni;//definizione della struttura contenente nome e temperatura.

void caricamento (comuni comuni[])//caricamento dei nomi delle città.
{
    
    int i=0;
    for (i=0;i<5;i++)
    {
        cout << "inserisci il comune numero "<<i+1<<"(non inserire nomi)"<<endl;
        cin >> comuni[i].nome;
    }
    
}

void inserimentotemperature(int Vet[],comuni comuni[])
{
    int i=0;
    int j=0;
    double mediacomunitotale=0;
    int contasu=0;
    int contagiu=0;

    double mediavoidtot=0;
    for(i=0;i<5;i++){
        for(j=0;j<7;j++){
        
           
    
       
                                cout <<"inserire temperatura numero"<<j+1<<"del comune"<<comuni[i].nome<<endl;
                                cin >> comuni[j].temperatura;
                            mediavoidtot=(mediavoidtot+comuni[j].temperatura)/(j+1); //media delle temperature del comune in 7 giorni, da sommare alla fine del while alla media TOTALE di tutti i 5 comuni.
   
                                    

                        }
   
        if(mediavoidtot>mediacomunitotale)
            contasu=contasu+1;
                else  (contagiu=contagiu+1);
      
        
        
        mediacomunitotale=(mediacomunitotale+mediavoidtot)/(i+1);
       
      
    
    }
    cout << "media totale "<<mediacomunitotale<<"quanti sopra:"<<contasu<<"quanti sotto:"<<contagiu<<endl;
   
}





int main()
{
    comuni comuni[5];
    caricamento(comuni); //vengono caricati i nomi dei 5 comuni.
    int temperature[100];
    inserimentotemperature(temperature,comuni);
    
}

32 Risposte

  • Re: Aiuto per codice - acquisire dei nomi e media

    Che hai fatto con le stringhe? Non si è capito ... mostralo
  • Re: Aiuto per codice - acquisire dei nomi e media

    Comunque il nome di una struttura deve essere al singolare… e in C++ non si utilizza typedef poiché la dichiarazione di una struttura crea già un tipo.
  • Re: Aiuto per codice - acquisire dei nomi e media

    oregon ha scritto:


    Che hai fatto con le stringhe? Non si è capito ... mostralo

    Ciao, avevo pensato di mettere
      int i=0;
        for (i=0;i<5;i++)
        {
            cout << "inserisci il comune numero "<<i+1<<endl;
            cin >> gets(comuni[i].nome);
        }
    però non funziona.
  • Re: Aiuto per codice - acquisire dei nomi e media

    _Achille ha scritto:


    Comunque il nome di una struttura deve essere al singolare… e in C++ non si utilizza typedef poiché la dichiarazione di una struttura crea già un tipo.
    Grazie, modificherò al più presto il codice.
  • Re: Aiuto per codice - acquisire dei nomi e media

    frekkzz ha scritto:


    oregon ha scritto:


    Che hai fatto con le stringhe? Non si è capito ... mostralo

    Ciao, avevo pensato di mettere
      int i=0;
        for (i=0;i<5;i++)
        {
            cout << "inserisci il comune numero "<<i+1<<endl;
            cin >> gets(comuni[i].nome);
        }
    però non funziona.
    La funzione gets() ultimamente è stata sostituita con la funzione fgets(), prova con quella
  • Re: Aiuto per codice - acquisire dei nomi e media

    Sbaglio o comune.nome è un carattere?
    Non dovrebbe essere puntatore a carattere e puntare a spazio allocato dinamicamente?
    Oppure array di caratteri allocato staticamente?
  • Re: Aiuto per codice - acquisire dei nomi e media

    StandardOil ha scritto:


    Sbaglio o comune.nome è un carattere?
    Non dovrebbe essere puntatore a carattere e puntare a spazio allocato dinamicamente?
    Oppure array di caratteri allocato staticamente?
    Ciao, comune.nome(i) è un vettore di struct in cui c'è la temperatura del comune N, quindi dovrebbe essere già di suo "passato" in riferimento, spero di non sbagliare.
  • Re: Aiuto per codice - acquisire dei nomi e media

    orion99 ha scritto:


    frekkzz ha scritto:


    oregon ha scritto:


    Che hai fatto con le stringhe? Non si è capito ... mostralo

    Ciao, avevo pensato di mettere
      int i=0;
        for (i=0;i<5;i++)
        {
            cout << "inserisci il comune numero "<<i+1<<endl;
            cin >> gets(comuni[i].nome);
        }
    però non funziona.
    La funzione gets() ultimamente è stata sostituita con la funzione fgets(), prova con quella
    provo e ti faccio sapere


    per la media invece come risolvo?
  • Re: Aiuto per codice - acquisire dei nomi e media

    No, comuni[] è un vettore sarebbe passato per riferimento

    Ma comuni[indice].nome è un elemento di tipo carattere, sarebbe passato per valore
    E comunque dovrebbe essere un array di char, non un singolo char
  • Re: Aiuto per codice - acquisire dei nomi e media

    StandardOil ha scritto:


    No, comuni[] è un vettore sarebbe passato per riferimento

    Ma comuni[indice].nome è un elemento di tipo carattere, sarebbe passato per valore
    E comunque dovrebbe essere un array di char, non un singolo char
    giusto, proverò a scrivere ciò che mi ha detto orion e aggiungere un puntatore

    per la media invece? come risolvo?
  • Re: Aiuto per codice - acquisire dei nomi e media

    Ok ragazzi per la media ho risolto da solo, grazie mille per l'aiuto.
  • Re: Aiuto per codice - acquisire dei nomi e media

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 3
    
    //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[20];
        float temperatura;
    };
    void Inserimento(struct _comuni [][N]);
    void Stampa(struct _comuni [][N]);
    int Media(struct _comuni [][N]);
    void UpAndDown(struct _comuni [][N],float *);
    int main()
    {
        struct _comuni comuni[N][N];
        float media,*puntatore_media=&media;
        Inserimento(comuni);
        Stampa(comuni);
        *puntatore_media=Media(comuni);
        UpAndDown(comuni,puntatore_media);
    
        return 0;
    }
    void Inserimento(struct _comuni comuni[][N])
    {
        for (int i=0;i<N;i++)
        {
            for(int j=0;j<N;j++)
            {
                if(j==0)
                {
                    printf("Inserisci nome comune %d  : ",i+1);
                    scanf("%s",&comuni[i][0].nome);
                    for(int k=1;k<N;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[][N])
    {
        for(int i=0;i<N;i++)
        {
            for(int j=0;j<N;j++)
            {
                printf("Nome comune %d : %s\ttemperatura : %f\tdella settimana %d\n",i+1,comuni[i][j].nome,comuni[i][j].temperatura,j+1);
            }
        }
    }
    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;
    }
    void UpAndDown(struct _comuni comuni[][N],float *media)
    {
        int differenza_positiva=0,differenza_negativa=0;
        for(int i=0;i<N;i++)
        {
            for(int j=0;j<N;j++)
            {
                if(comuni[i][j].temperatura >= *media)
                {
                    differenza_positiva++;
                    printf("Il comune %d: %s con temperatura : %f e' superiore alla media : %f nel giorno %d\n",i+1,comuni[i][j].nome,comuni[i][j].temperatura,*media,j+1);
                }
                else
                {
                    differenza_negativa++;
                    printf("Il comune %d: %s con temperatura : %f e' inferiore alla media : %f nel 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);
    
    }
    
    
    lo so e' in c, ma potrebbe esserti d'aiuto
  • Re: Aiuto per codice - acquisire dei nomi e media

    Se scrivi

    float media;

    e poi fai

    media=media+...

    stai sicuramente sbagliando e stai facendo sbagliare chi ha aperto il thread.
  • Re: Aiuto per codice - acquisire dei nomi e media

    oregon ha scritto:


    Se scrivi

    float media;

    e poi fai

    media=media+...

    stai sicuramente sbagliando e stai facendo sbagliare chi ha aperto il thread.
    hai ragione, non si sa mai cosa può succedere, ho corretto e' ho aggiunto una miglioria.
Devi accedere o registrarti per scrivere nel forum
32 risposte