Problema di accesso ad un campo di una struttura definita

di il
3 risposte

Problema di accesso ad un campo di una struttura definita

Salve vi propongo questo esercizio che dev mi fa compilare senza errori ma all'atto dell'esecuzione non riesco ad accedere al campo int temperatura della struttura creata per poi calcolare la media (in realtà il programma nell'eseguire le istruzioni del ciclo for nella funzione calcolo_media si arrestava,ma inserendo una variabile x da me inventata e senza un'utilità per implementare il codice, sono giunto alla conclusione che il problema della funzione era l'accesso al campo della struttura): ciò che non capisco è il perchè di questo mancato accesso ad un campo della struttura; qualcuno può aiutarmi?

traccia:Sia dato il file di testo dati.txt che contiene (come da esempio) per ogni riga due stringhe (che rappresentano il nome di una città ed un mese) ed un numero intero (che rappresenta la temperatura massima registrata in quella città durante quel mese).
Si progettino quattro funzioni:
- leggi_dati, che legge dal file dati.txt i nomi di città e mesi e le relative temperature, e li memorizza in un vettore di strutture (vett_temperature). Ciascuna struttura conterrà quindi tre campi: due stringhe, per memorizzare il nome della città ed il mese, ed un intero, per memorizzare la temperatura massima;
- calcola_media_temp che riceve in ingresso un vettore di strutture (vett_temperature), il suo riempimento (riemp) ed una stringa (citta) che rappresenta il nome di una città, e restituisce come valore di ritorno la media delle temperature rilevate in quella città durante i vari mesi;
- calc_temp_maggiori che riceve in ingresso un vettore di strutture (vett_temperature), il suo riempimento (riemp) ed una temperatura (temp) e restituisce come parametro di uscita un vettore contenente tutte le temperature maggiori di temp;
- stampa_vett che stampa a video un vettore di interi;
e si scriva un programma che, utilizzando la funzioni sopra descritte, legga dal file dati.txt le temperature registrate in varie città in diversi mesi dell'anno e da tastiera il nome di una città, calcoli la media delle temperature rilevate nei vari mesi per quella città, ottenga il vettore delle temperature maggiori di tale media, e stampi a video con un opportuno messaggio (si veda l'esempio) la media calcolata e gli elementi del vettore che contiene i valori superiori alla media.
Il programma dovrà essere suddiviso in moduli, uno contenente prototipi e dichiarazioni, uno contenente (almeno) le funzioni leggi_dati, calcola_media_temp, calc_temp_maggiori e stampa_vett ed un terzo contenente il main


#include<iostream>
#include<string.h>
#define N 10
#define D 10
using std::cin;
using std::cout;

typedef struct griglia{
	                    char city[N],mese[D];
	                     int temperatura;
                                                  }griglia;
                                                  
void  acquisizione(int q,griglia *array)
                                         {int j;
                                          for(j=0;j<q;j++)
                                                   {cout<<"\n inserire la città associata alla rilevazione effettuata   ";
                                                    cin>>array[q].city;
                                                    cout<<"\n inserire il mese nel quale è stata effettuata la rilevazione   ";
                                                    cin>>array[q].mese;
                                                    cout<<"\n inserire la temperatura rilevata  ";
                                                    cin>>array[q].temperatura;
                                                                                }}

int calcolo_media_temperature(int q,griglia *array)
                     {int s,x=0,k,y=1;
                     float media;
                      char w[N];
                       cout<<"\n inserire il nome della città di cui si vuole calcolare la media delle temperature   \n";
                       cin>>w;
                       for(k=0;k<q;k++)
                                        {if(array[k].city == w)
                                                     { s=array[k].temperatura; //linea di codice incriminata
                                                     x+=s;
                                                       ++y;
                                                                 }
                                                                   }
                      media=(x)/(y);
                      cout<<"\n la media delle temperature inerente alla città  "<<w<<"  è di: "<<media;
                      return media;                                           
                         }


int calcolo_temperature_maggiori(int q,griglia *array,int media)
                                                 {int u;
                                                  cout<<"\n di seguito si elencano le temperature superiori alla media nelle altre città: ";
                                                  for(u=0;u<q;u++)
                                                                 {if(array[u].temperatura >= media)
                                                                               {cout<<"\n "<<array[u].city<<"  "<<array[u].temperatura<<" *C \n";
                                                                                                                                                  }}}





int main()
           {int q;
           float media;
            cout<<"\n quanti rilevazioni di temperatura si vuole inserire?  \n";
           cin>>q;
           griglia array[q];
           acquisizione(q,array);
           calcolo_media_temperature(q,array);
           calcolo_temperature_maggiori(q,array,media);//il discriminante è la media delle temperature
           
            
     
} 
grazie mille in anticipo per la pazienza =)

3 Risposte

  • Re: Problema di accesso ad un campo di una struttura definita

    Il problema sta in

    if(array[k].city == w)

    In C non si confrontano così le atringhe.

    Devi usare funzioni apposite comw la strcmp

    Dovresti saperle queste cose prima di acrivwre codice simile.
  • Re: Problema di accesso ad un campo di una struttura definita

     int calcolo_media_temperature(int q,griglia *array)
                         {int s,x=0,k,y=0,esito;
                         float media;
                          char w[N];
                           cout<<"\n inserire il nome della città di cui si vuole calcolare la media delle temperature   \n";
                           cin>>w;
                           for(k=0;k<q;k++)
                                            {esito=strcmp(array[k].city,w);
    										  if(esito == 0)
                                                         { s=array[k].temperatura;
                                                           x+=s;
                                                           ++y;
                                                                     }
                                                                       }
                          media=x/y;
                          cout<<"\n la media delle temperature inerente alla città  "<<w<<"  è di: "<<media;
                          return media;                                           
                             } 
    come potrai constatare semplicemente dando in pasto il codice ad un compilatore,anche con le modifiche giustamente da te evidenziate,si blocca allo stesso punto...insomma se si fanno dei piccoli controlli inserendo variabili intermedie si capisce che il programma si blocca all'atto della somma di array[k].temperatura

    non so come poter risolvere =)
  • Re: Problema di accesso ad un campo di una struttura definita

    Chiedo scusa per il tempo che ti ho fatto perdere oregon :come un pollo nell'acquisizione dei campi della struttura ho usato come indice dell'array la dimensione massima dello stesso..un sacrilegio in piena regola
Devi accedere o registrarti per scrivere nel forum
3 risposte