Oppure

Loading
04/01/10 15:06
Astaroth
Ciao. Dovrei svolgere il seguente esercizio:

Ho la temperatura media e la temperatura del giorno per ogni mese dell'anno. Devo stampare a video il numero di giorni che hanno temperatura maggiore della temperatura media del relativo mese.

Io ho creato una struttura con due campi: tempmedia (che contiene la temperatura media del mese) e tempgiorno[31] (un vettore che contiene le temperature di ogni singolo giorno del mese, supponendo che ogni mese sia di 31 giorni, per semplicità;). A questo punto una volta istanziata la struttura, creo un vettore della struttura: temperatura tempmese[12]. Inserisco i dati con due cicli for annidati e calcolo la temperatura media... in seguito cerco di leggere i dati contenuti nel vettore e se la temperatura del giorno è maggiore della temperatura media, allora incremento un contatore... ma sembra che il contatore non conti poi così bene... che errore ho commesso? Grazie in anticipo.

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w=0;
    float temptot=0;

    for(i=0; i<MONTHS; i++)
    {
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del giorno %d del mese %d: ", j, i);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}


Per far delle prove ho assegnato a DAYS il valore 4 e a mese il valore 2...
Ultima modifica effettuata da Astaroth 04/01/10 22:44
aaa
04/01/10 23:03
Zonzo
Codice efficiente e devo dire corretto e leggibile.
Però ti sei scordato una piccola formalità che ti ha causato grossi problemi, e devo dire che capita con una certa frequenza durante la prima fase di sviluppo di molti programmi (a volte anche i miei :D).
#include<stdio.h> 
#include<stdlib.h> 

#define DAYS 31 
#define MONTHS 12 

typedef struct { 
    float tempmedia; 
    float tempgiorno[DAYS]; 
}temperatura; 

main() 
{ 
    temperatura tempmese[MONTHS]; 
    int i, j, w; 
    float temptot; 

    for(i=0; i<MONTHS; i++) 
    {   
        temptot=0; //Azzera il contatore prima di effettuare il ciclo nidificato
        for(j=0; j<DAYS; j++) 
        { 
            printf("Inserire la temperatura del giorno %d del mese %d: ", j+1, i+1); 
            scanf("%f", &tempmese[i].tempgiorno[j]); 
            temptot+=tempmese[i].tempgiorno[j]; 
        } 
        tempmese[i].tempmedia=temptot/DAYS;
    } 
     
    for(i=0; i<MONTHS; i++) 
    {   
        w=0; //Azzera il contatore prima di effettuare il ciclo nidificato
        for(j=0; j<DAYS; j++) 
        { 
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia) 
                w++; 
        } 
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w); 
    } 

    printf("\n"); 
     
    system("pause"); 
    return 0; 
} 


Basta azzerare i contatori che utilizzi nei tuoi sotto-cicli.
Altrimenti la media non sarà calcolata per i soli valori del mese specifico, ma sarà una somma di tutti i mesi, vale lo stesso discorso anche per il conteggio dei giorni con temperatura maggiore alla media mensile.
Ultima modifica effettuata da Zonzo 04/01/10 23:07
aaa
05/01/10 9:57
Astaroth
Uh che sbadato! :-| Grazie mille! :k: Non avendo per il momento la possibilità di eseguire il debug ho pensato che il problema fosse un altro e mi sono incaponito sul vettore di struttura... :rofl:

Ma se al posto dei numeri dei mesi volessi scrivere i nomi "Gennaio", "Febbraio", ecc., c'è un modo per sostituire un numero con una determinata stringa?
Ultima modifica effettuata da Astaroth 05/01/10 10:07
aaa
05/01/10 10:38
riccardobucco
Postato originariamente da Astaroth:
Ma se al posto dei numeri dei mesi volessi scrivere i nomi "Gennaio", "Febbraio", ecc., c'è un modo per sostituire un numero con una determinata stringa?


beh, fatti una funzione che, dato in input un numero che vada da 1 a 12 (x), restitutisca il nome del mese corrispondente (y) no?

Molto banalmente (forse sbagliando, del C conosco molto poco anche le basi):

if(x==1) char y[]= "gennaio" else
  if (x==2) then char y[]= "febbraio" else
    if (x==3) then char y[]= "marzo" else
      ...
        ...
          ...
aaa
05/01/10 10:58
Astaroth
Sì, hai ragione, grazie. Forse con uno switch?
Ultima modifica effettuata da Astaroth 05/01/10 11:09
aaa
05/01/10 11:32
Astaroth
Questa volta devo scrivere una funzione che visualizzi le vocali comprese tra due caratteri inseriti dall'utente e il loro numero. Se i caratteri non sono inseriti nell'ordine corretto (ad esempio se 'z' è inserito prima di 'a'), la funzione restituisce il valore -1. Se dovessi inserire due caratteri separati da uno spazio, come dovrei modificare il codice?

#include<stdio.h>
#include<stdlib.h>

int Vocali(char c1, char c2);

main()
{
    char car1, car2;
    int voc;
    
    printf("Inserire due caratteri separati da spazio: ");
    scanf("%c%c", &car1, &car2);
    
    voc=Vocali(car1, car2);
    
    printf("\nIl numero di vocali tra i due caratteri e': %d", voc);
    
    printf("\n");
    
    system("pause");
    return 0;   
}

int Vocali(char c1, char c2)
{
    int dif=c2-c1;
    int i;
    int v=0;
    
    if(dif>0)
    {
        for(i=0; i<dif; i++)
        { 
            if(c1=='a' || c1=='e' || c1=='i' || c1=='o' || c1=='u' || c1=='A' || c1=='E' || c1=='I' || c1=='O' || c1=='U')
            {
                printf("%c", c1);
                
                v++;
            }c1++;
                
        }
        return v;
    }
    else
        return -1;
}
Ultima modifica effettuata da Astaroth 05/01/10 12:05
aaa
05/01/10 11:33
Zonzo
Secondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"GennaioSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.


Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
", "FebbraioSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
", "MarzoSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
", "AprileSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
" "MaggioSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
" "GiugnoSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
" "LuglioSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
" "AgostoSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
" "SettembreSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
" "OttobreSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
" "NovembreSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
" "DicembreSecondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.

Così:

#include<stdio.h>
#include<stdlib.h>

#define DAYS 31
#define MONTHS 12

typedef struct {
    float tempmedia;
    float tempgiorno[DAYS];
}temperatura;

main()
{
    temperatura tempmese[MONTHS];
    int i, j, w;
    float temptot;
    char *Mesi[] = {"Gennaio{parsed_message}",
                    "Febbraio{parsed_message}",
                    "Marzo{parsed_message}",
                    "Aprile{parsed_message}"
                    "Maggio{parsed_message}"
                    "Giugno{parsed_message}"
                    "Luglio{parsed_message}"
                    "Agosto{parsed_message}"
                    "Settembre{parsed_message}"
                    "Ottobre{parsed_message}"
                    "Novembre{parsed_message}"
                    "Dicembre{parsed_message}"};

    for(i=0; i<MONTHS; i++)
    {  
        temptot=0;
        for(j=0; j<DAYS; j++)
        {
            printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]);
            scanf("%f", &tempmese[i].tempgiorno[j]);
            temptot+=tempmese[i].tempgiorno[j];
        }
        tempmese[i].tempmedia=temptot/DAYS;
    }
    
    for(i=0; i<MONTHS; i++)
    {  
        w=0;
        for(j=0; j<DAYS; j++)
        {
            if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia)
                w++;
        }
        printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
    }

    printf("\n");
    
    system("pause");
    return 0;
}
"}; for(i=0; i<MONTHS; i++) { temptot=0; for(j=0; j<DAYS; j++) { printf("Inserire la temperatura del %d %s: ", j+1, Mesi[i]); scanf("%f", &tempmese[i].tempgiorno[j]); temptot+=tempmese[i].tempgiorno[j]; } tempmese[i].tempmedia=temptot/DAYS; } for(i=0; i<MONTHS; i++) { w=0; for(j=0; j<DAYS; j++) { if(tempmese[i].tempgiorno[j]>tempmese[i].tempmedia) w++; } printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w); } printf("\n"); system("pause"); return 0; }
aaa
05/01/10 11:35
Astaroth
Postato originariamente da Zonzo:

Secondo me invece di uno switch o una cascata di if, sarebbe più corretto e più veloce dichiararsi un vettore di stringhe con i nomi dei mesi.


Grazie mille! :D

Nel post precedente ho inserito un altro quesito... ho scoperto proprio pochi istanti fa che il codice è corretto. Scusa se approfitto della tua disponibilità, ma lo spazio è considerato come un carattere... se volessi inserire i due caratteri separati da uno spazio, come dovrei modificare la funzione? Grazie ancora!
Ultima modifica effettuata da Astaroth 05/01/10 12:03
aaa