DOMANDA Programma Temperatura C++

Stato
Discussione chiusa ad ulteriori risposte.

MPG

Utente Attivo
544
4
Scusate dovrei completare questo programma e francamente non ci capisco molto perchè è stato dato per casa ma alcune cose tipo void fillUpArray, yearAveragedT, getMaxT, getMin non le ho mai fatte, pero' è cosi'......
Mi fate capire un attimo il tutto?
Grazie come al solito.

Codice:
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;

//dimensione ed array globali
const int dim=120;
double T[dim];

//prototipo della funzione
//temperature casuali [-10;40]
void fillUpArray();
void printArray();
double yearAveragedT();
double getMaxT();
double getMinT();
void averagedTperMonth();
/*restituisce la temperatura media del
mese passato come parametro
*/
double averagedT(int);

int main()
{
  srand(time(NULL));


    return 0;
}
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
fillUpArray -> devi rimpire l'array di valori casuali ( da -10 a 40 )
printArray -> stampi l'array
yearAveragedT -> temperatura media annuale
getMaxT e getMinT -> ritorna il max e il min dell'array
Suppongo che l'array abbia 10 valori per ogni mese ( 120 valori /12 mesi ). Quindi per accedere alle temperature di marzo farai dalla posizione 20 alla 29.
 

MPG

Utente Attivo
544
4
fillUpArray -> devi rimpire l'array di valori casuali ( da -10 a 40 )
printArray -> stampi l'array
yearAveragedT -> temperatura media annuale
getMaxT e getMinT -> ritorna il max e il min dell'array
Suppongo che l'array abbia 10 valori per ogni mese ( 120 valori /12 mesi ). Quindi per accedere alle temperature di marzo farai dalla posizione 20 alla 29.

Sinceramente non so proprio svolgerlo.....puoi aiutarmi , l'informatica come si saprà non è il mio forte...
Da cosa supponi che l'array abbia 10 valori per ogni mese?
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Sinceramente non so proprio svolgerlo.....puoi aiutarmi , l'informatica come si saprà non è il mio forte...
Da cosa supponi che l'array abbia 10 valori per ogni mese?
const int dim=120;
double T[dim];
Crei un array di 120 elementi, contando che ti chiede di fare le medie per anno e mese, penso sia sensato che sia 120/12.
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Son tutti cicli, per riempirlo cicli su tutti gli elementi e assegni un valore casuale con rand();
Per la print, stesso ciclo ma ci fai il cout, per la media annuale stesso ciclo, sommi tutti i valori e poi il totale lo dividi per 120. Max e Min penso tu abbia già fatto qualche esercizio per trovare massimo e minimo di una funzione (direi di evitare di usare std::min_element()). Per gli ultimi due metodi, cicli da 0+(i*10) a 0+(i*10) e fai i calcoli, dove i è il mese che gli passi (o comunque l'identificatore del mese i=0 è gennaio);
 

MPG

Utente Attivo
544
4
Son tutti cicli, per riempirlo cicli su tutti gli elementi e assegni un valore casuale con rand();
Per la print, stesso ciclo ma ci fai il cout, per la media annuale stesso ciclo, sommi tutti i valori e poi il totale lo dividi per 120. Max e Min penso tu abbia già fatto qualche esercizio per trovare massimo e minimo di una funzione (direi di evitare di usare std::min_element()). Per gli ultimi due metodi, cicli da 0+(i*10) a 0+(i*10) e fai i calcoli, dove i è il mese che gli passi (o comunque l'identificatore del mese i=0 è gennaio);

Caspita è tutto semplice come dici tu, per me no caspita.....

Post unito automaticamente:

Ho provato a mettere giu' qualcosa cosa vi sembra e dove vedete errori?

Codice:
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;

//dimensione ed array globali
const int dim=120;
double T[dim];

//prototipo della funzione
//temperature casuali [-10;40]
void fillUpArray();
{
for (int=0;i<dim;i++)
T[i]= rand ()% 51-10;
}

void printArray();
{
for (int=0;i<dim;i++)
cout<<T[i];
}

double yearAveragedT();
{
double yearAveragedT=0;
for (int i=0; i<dim; i++)
{
yearAverageT=yearAverageT +  T[i];
}
yearAverageT=yearAverageT/dim;
return yearAverageT;
}

double getMaxT();
{
int getMax=-10;
for (int i=0; i<dim;i++)
{
if(T(i)>getMax)
    getMax=T[i];
return getMax;
}
}

double getMinT();
{
int getMin=40;
for (int i=0; i<dim;i++)
{
if(T(i)<getMIn)
    getMin=T[i];
return getMin;
}

void averagedTperMonth();
{
int averageTperMonth=0;
double temp;                                 //variabile per calcolare la somma delle temperature
for (i = 0; i<120; i+=10) {              //cicli 12 volte
temp = 0;                                       //resettato a 0 per ogni mese
for(j=i; j < i+10; j++) {                   //cicli per i 10 valori di ogni mese
  temp += t[j];                                  //temp per calcolare la somma di un dato mese
}
cout<<temp/10;                         //stampi la media della temperatura per ogni mese ( sono dieci valori quindi diviso 10
}

}
/*restituisce la temperatura media del
mese passato come parametro
*/
}

double averagedT(int index) ;      //gli passi il mese es. 2 per marzo
{     
double temp = 0;
for(j=index; j < 10+index*10; j++)    //cicli da 20 a 29, ovvero i valori relativi a marzo
{      
  temp += t[j];
}
return temp/10;
}


int main()
{
  srand(time(NULL));


    return 0;
}
 
Ultima modifica:

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Caspita è tutto semplice come dici tu, per me no caspita.....

Post unito automaticamente:

Ho provato a mettere giu' qualcosa cosa vi sembra e dove vedete errori?

Codice:
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;

//dimensione ed array globali
const int dim=120;
double T[dim];

//prototipo della funzione
//temperature casuali [-10;40]
void fillUpArray();
{
for (int=0;i<dim;i++)
T[i]= rand ()% 51-10
}
void printArray();
{
for (int=0;i<dim;i++)
cout<<T[i]
}
double yearAveragedT();
{
int yearAveragedT=0
for (int i=0; i<dim; i++)
{yearAverageT=yearAverageT +  T[i];
}
yearAverageT=yearAverageT/dim
}
double getMaxT();
{
int getMax;
for (int i=0; i<dim;i++)
{if(T(i)>getMax)
    getMax=A[i];
}
double getMinT();
{
int getMin;
for (int i=0; i<dim;i++)
{if(T(i)>getMIn)
    getMin=T[i];
}
void averagedTperMonth();
{
int TperMonth=0
{for (int i=0; i< dim/12; i++}
{TperMonth =TperMonth + T[i];
}
TperMonth=dim/12
/*restituisce la temperatura media del
mese passato come parametro
*/
}
double averagedT(int);

int main()
{
  srand(time(NULL));


    return 0;
}
Mancano dei ; e i return nelle funzioni non void. int yearAveragedT=0 deve essere di tipo double. int getMax devi porlo = -10, getMin invece devi porlo = 40 e la condizione dell'if deve essere il contrario ( < e non > ).
averagedTperMonth() è sbagliato (cicli solo fino a 10), qui devi fare il cout per ogni mese. In pratica
for (i = 0; i<120; i+=10) {
for(j=i; j < i+10; j++) {
temp += t[j];
}cout<<temp/10;
}
per averagedT(int) modifichi il codice di sopra togliendo il for più esterno e l'i nel ciclo interno sarà il valore che passi alla funzione.
 

MPG

Utente Attivo
544
4
for (i = 0; i<120; i+=10) {
for(j=i; j < i+10; j++) {
temp += t[j];
}cout<<temp/10;
}
per averagedT(int) modifichi il codice di sopra togliendo il for più esterno e l'i nel ciclo interno sarà il valore che passi alla funzione.


Non ho capito
Codice:
for (i = 0; i<120; i+=10) {
for(j=i; j < i+10; j++) {
temp += t[j];
}cout<<temp/10;
}
tradotta in parole povere come funziona? Crei un'altra variabile non ho ben capito il meccanismo.... anche quando hai usato +=
MI spieghi anche la parte dell' averagedT(int) , magari se puoi postare la parte corretta come tu dici.
Ti ringrazio.
 
Ultima modifica:

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Non ho capito
Codice:
for (i = 0; i<120; i+=10) {
for(j=i; j < i+10; j++) {
temp += t[j];
}cout<<temp/10;
}
tradotta in parole povere come funziona? Crei un'altra variabile non ho ben capito il meccanismo.... anche quando hai usato +=
MI spieghi anche la parte dell' averagedT(int) , magari se puoi postare la parte corretta come tu dici.
Ti ringrazio.
Codice:
double temp;                                 //variabile per calcolare la somma delle temperature
for (i = 0; i<120; i+=10) {              //cicli 12 volte
 temp = 0;                                       //resettato a 0 per ogni mese
 for(j=i; j < i+10; j++) {                   //cicli per i 10 valori di ogni mese
  temp += t[j];                                  //temp per calcolare la somma di un dato mese 
 }
 cout<<temp/10;                         //stampi la media della temperatura per ogni mese ( sono dieci valori quindi diviso 10 ).
}
Codice:
double averagedT(int index) {
 double temp = 0;
 for(j=index; j < 10+index*10; j++) {
  temp += t[j];
 }
 return temp/10;
}
Tutto qui
 

MPG

Utente Attivo
544
4
Il tutto qui è ripeto semplice per te..:):):)
Nemmeno qui capisco, non ho mai visto int index e quello che fai dopo..
Inoltre qui non vedo la i....


Codice:
double averagedT(int index) {
double temp = 0;
for(j=index; j < 10+index*10; j++) {
  temp += t[j];
}
return temp/10;
}
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Il tutto qui è ripeto semplice per te..:):):)
Nemmeno qui capisco, non ho mai visto int index e quello che fai dopo..
Inoltre qui non vedo la i....


Codice:
double averagedT(int index) {      //gli passi il mese es. 2 per marzo
double temp = 0;
for(j=index; j < 10+index*10; j++) {      //cicli da 20 a 29, ovvero i valori relativi a marzo
  temp += t[j];
}
return temp/10;
}
Codice:
double averagedT(int index) {      //gli passi il mese es. 2 per marzo
double temp = 0;
for(j=index; j < 10+index*10; j++) {      //cicli da 20 a 29, ovvero i valori relativi a marzo
  temp += t[j];
}
return temp/10;
}

int index è la variabile che passi alla funzione, puoi chiamarla come vuoi (i, pippo, indexMonth). Non vedi la i perchè è sostituita da "index", e ricorda che i è semplicemente un modo per chiamare una variabile, nel codice sopra sostituisci index con i ovunque ci sia ed è uguale.
 

MPG

Utente Attivo
544
4
Ma index in questo caso in pratica è il numero del mese che scegli?
Questo
10+index*10
non l'ho mai fatto non capisco come si interpreta terra terra e come fa a significare ciclo da 20 a 29 e perchè poi da 20 a 29?
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Ma index in questo caso in pratica è il numero del mese che scegli?
Questo
10+index*10
non l'ho mai fatto non capisco come si interpreta terra terra e come fa a significare ciclo da 20 a 29 e perchè poi da 20 a 29?
Intanto mi scuso, ma mi son dimenticato di far partire il ciclo dalla giusta posizione (è for(int j = 0+index*10) perdono :cav:)
Fondamentalmente, tu devi assegnare un numero ad ogni mese. Per comodità facciamo da 0 (gennaio) a 11 (dicembre). Ora, a te interessa ciclare l'array solo per i valori contenuti in quel mese. Fare 10+index*10 significa ciclare 10 volte, ma partendo dal mese corrispondente (index*10).
Il mio era un semplice esempio con marzo, prendi il mese corrente (novembre - 10), significa iniziare il ciclo alla posizione 100 fino ad arrivare a 109 compreso.
 

MPG

Utente Attivo
544
4
Intanto mi scuso, ma mi son dimenticato di far partire il ciclo dalla giusta posizione (è for(int j = 0+index*10) perdono :cav:)
Fondamentalmente, tu devi assegnare un numero ad ogni mese. Per comodità facciamo da 0 (gennaio) a 11 (dicembre). Ora, a te interessa ciclare l'array solo per i valori contenuti in quel mese. Fare 10+index*10 significa ciclare 10 volte, ma partendo dal mese corrispondente (index*10).
Il mio era un semplice esempio con marzo, prendi il mese corrente (novembre - 10), significa iniziare il ciclo alla posizione 100 fino ad arrivare a 109 compreso.

Qundi è cosi':
Codice:
double averagedT(int index) 
{ 
double temp = 0;
for(int j = 0+index*10)
{
  temp += t[j];        // dovrebbe essere quindi come temp= temp+t[j];
}
return temp/10;
}

Pero' scusa ma non ci arrivo..
"Fare 10+index*10 significa ciclare 10 volte, ma partendo dal mese corrispondente (index*10)."
Io ho capito che terra terra bisogna trovare 10 valori di temperatura di ogni mese , è questo il "ciclare 10 volte" che intendi?
Inoltre index*10 non l'ho mai visto se fosse novembre sarebbe per te il 10 mese dell'anno .. non capisco bene questi passaggi..
poi mi dici
" prendi il mese corrente (novembre - 10), significa iniziare il ciclo alla posizione 100 fino ad arrivare a 109 compreso"
continuo a non capire perchè da 100 a 109 in questo caso...

Ultima cosa... i return che ho messo sono posizionati in maniere errata?
 
Ultima modifica:
Stato
Discussione chiusa ad ulteriori risposte.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili