[C++] Array

Messaggioda mpg » 03/12/2018, 19:21

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.
mpg
Average Member
Average Member
 
Messaggio: 202 di 654
Iscritto il: 28/11/2017, 09:35

Re: [C++] Array

Messaggioda vict85 » 03/12/2018, 19:37

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?
vict85
Moderatore
Moderatore
 
Messaggio: 9445 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C++] Array

Messaggioda mpg » 03/12/2018, 19:42

vict85 ha scritto: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?
Ultima modifica di mpg il 05/12/2018, 14:59, modificato 1 volta in totale.
mpg
Average Member
Average Member
 
Messaggio: 203 di 654
Iscritto il: 28/11/2017, 09:35

Re: [C++] Array

Messaggioda mpg » 05/12/2018, 14:23

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.....



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();

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;
}
mpg
Average Member
Average Member
 
Messaggio: 204 di 654
Iscritto il: 28/11/2017, 09:35

Re: [C++] Array

Messaggioda vict85 » 05/12/2018, 22:04

Quelle due funzioni sono scritte correttamente. Ci sono però altri problemi, primo fra tutti il fatto che nel main hai un ciclo infinito:
Codice:
    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.
vict85
Moderatore
Moderatore
 
Messaggio: 9446 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite