[C++] Array
In un esercizio che ho quasi completato dovrei aggiungere un void azzera() e un void oddity (int n) , il primo dovrebbe azzerare i valori dell'array inferiori alla media , mentre il secondo chiede l'inserimento di un numero intero e sostituisce i primi 10 e gli ultimi 10 posizioni nell'array con l'intero.
Mi potete aiutare a svolgerli?
Vi ringrazio.
Mi potete aiutare a svolgerli?
Vi ringrazio.
Risposte
Piccolo commento a parte: Perché hai chiamato azzera in italiano e oddity in inglese? I nomi delle funzioni comunque non sono in linea con quello che le funzioni fanno.
Non mi è chiaro comunque come fai ad azzerare qualcosa senza inviare quel qualcosa alla funzione, è una funzione membro di una classe array? Comunque il primo va fatto in 2 tempi, prima calcoli la media e poi elimini gli elementi. Cosa non ti è chiaro del secondo? La dimensione dell'array la conosci?
Non mi è chiaro comunque come fai ad azzerare qualcosa senza inviare quel qualcosa alla funzione, è una funzione membro di una classe array? Comunque il primo va fatto in 2 tempi, prima calcoli la media e poi elimini gli elementi. Cosa non ti è chiaro del secondo? La dimensione dell'array la conosci?
"vict85":
Piccolo commento a parte: Perché hai chiamato azzera in italiano e oddity in inglese? I nomi delle funzioni comunque non sono in linea con quello che le funzioni fanno.
Non mi è chiaro comunque come fai ad azzerare qualcosa senza inviare quel qualcosa alla funzione, è una funzione membro di una classe array? Comunque il primo va fatto in 2 tempi, prima calcoli la media e poi elimini gli elementi. Cosa non ti è chiaro del secondo? La dimensione dell'array la conosci?
Quello che ho scritto è stato dettato dal prof, non ho scelto io.
La dimensione dell'array è 120 comunque.
Potresti impostarmi le due cose?
Fatto pero' non mi pare vi sia l'azzeramento dei valori del'array inferiori alla media....
Poi se provo a mettere 1 in "array in kelvin".. viene 1 poi 10 volte 0 poi vari valori e dieci volte 0, se poi metto 1 in "selezione il mese" 1 mi viene 0.....
Poi se provo a mettere 1 in "array in kelvin".. viene 1 poi 10 volte 0 poi vari valori e dieci volte 0, se poi metto 1 in "selezione il mese" 1 mi viene 0.....
#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(); void fillUpArray(){ for(int i=0; i<dim; i++) T[i]=rand()%51-10; } void printArray(){ for(int i=0; i<dim; i++) cout<<T[i]<<endl; } void averagedTperMonth(){ int cont=0; int offset=0; while(cont<12) { double somma=0; for(int i=0; i<10; i++) { somma=somma+T[i+offset]; } cout<<somma/10.0<<endl; offset=offset+10; cont++; } } /*restituisce la temperatura media del mese passato come parametro */ double averagedT(int n) { double somma=0; for(int i=0; i<10; i++) somma=somma+T[i+((n-1)*10)]; return somma/10.0; } /* converte le temperature modificando l'arra richiamando */ void converToKelvin() { for (int i=0;i<dim;i++) { T[i]=T[i]+ 273,15; } } bool isitKelvin() { if(T[0]>40) { return true; } } //si dovrebbero azzerare i valori dell'array inferiori alla media , void azzera () { double media=0; for (int i=0; i<dim ; i++) { media=media+ T[i]; } media =media/dim; for (int i=0; i<dim ; i++) { if ( media > T[i]) T[i]=0 ; } } //chiede l'inserimento di un numero intero e sostituisce i primi 10 e gli ultimi 10 posizioni nell'array con l'intero. void oddity (int n) { for (int i=0; i<10; i++) { T[i]=n; } for (int i=dim-10;i<dim; i++) { T[i]=n; } } int main() { srand(time(NULL)); int m; int n; fillUpArray(); printArray(); cout<<endl; averagedTperMonth(); converToKelvin(); cout<<"array in Kelvin"<<endl; cin >>n; oddity (n); azzera (); printArray(); while(true) { cout<<"Seleziona il mese [1;12]: "; cin>>m; cout<<averagedT(m)<<endl; } return 0; }
Quelle due funzioni sono scritte correttamente. Ci sono però altri problemi, primo fra tutti il fatto che nel main hai un ciclo infinito:
Inoltre in converToKelvin hai messo una virgola invece che un punto. Se formatti con un formattatore automatico diventa immediatamente visibile (ma mi aspetterei almeno un warning dal compilatore).
Usare così tanto le variabili globali è comunque visto come una cattiva prassi nel C++. Similmente dovresti sempre mettere le parentesi negli if e nei for: sembra inutile ma può evitarti numerosi errori. Altra cosa che dovresti fare è aggiungere dei controlli a ciò che ricevi come input.
while (true) { cout << "Seleziona il mese [1;12]: "; cin >> m; cout << averagedT(m) << endl; }
Inoltre in converToKelvin hai messo una virgola invece che un punto. Se formatti con un formattatore automatico diventa immediatamente visibile (ma mi aspetterei almeno un warning dal compilatore).
Usare così tanto le variabili globali è comunque visto come una cattiva prassi nel C++. Similmente dovresti sempre mettere le parentesi negli if e nei for: sembra inutile ma può evitarti numerosi errori. Altra cosa che dovresti fare è aggiungere dei controlli a ciò che ricevi come input.