Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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.
Codice sorgente - presumibilmente C++
#include<stdio.h>
#include<stdlib.h>
#define DAYS 31
#define MONTHS 12
typedefstruct{
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);
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 ).
Codice sorgente - presumibilmente C++
#include<stdio.h>
#include<stdlib.h>
#define DAYS 31
#define MONTHS 12
typedefstruct{
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
printf("\nI giorni con temperatura maggiore rispetto alla media del mese sono: %d\n", w);
}
printf("\n");
system("pause");
return0;
}
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 il 05/01/2010 alle 0:07
Uh che sbadato! Grazie mille! 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...
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 il 05/01/2010 alle 11:07
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):
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?
Codice sorgente - presumibilmente C++
#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);
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!
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 il 05/01/2010 alle 13:03
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?
Codice sorgente - presumibilmente C++
#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);
allora, il tuo programma dovrebbe funzionare correttamente solo se i caratteri che tu inserisci in input non sono separati da uno spazio (giusto, no?).
ad es:
input "bf"
output "1" (corretto)
input "b f"
output "-1" (errato)
quindi o ti adegui a scrivere i due caratteri senza separarli dallo spazio altrimenti, invece di leggere in input due caratteri come hai fatto tu
Codice sorgente - presumibilmente Plain Text
printf("Inserire due caratteri separati da spazio: ");
scanf("%c%c", &car1, &car2);
ne leggi tre (il secondo, quello intermedio, è lo spazio). quindi:
Codice sorgente - presumibilmente Plain Text
printf("Inserire due caratteri separati da spazio: ");
scanf("%c%c%c", &car1, &car2, &car3);
il programma risulterà quindi questo (basta sostituire car3 a car2):
Codice sorgente - presumibilmente C++
#include<stdio.h>
#include<stdlib.h>
int Vocali(char c1, char c2);
main()
{
char car1, car2, car3;
int voc;
printf("Inserire due caratteri separati da spazio: ");
scanf("%c%c%c", &car1, &car2, &car3);
voc=Vocali(car1, car3);
printf("\nIl numero di vocali tra i due caratteri e': %d", voc);