Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [c++] dato un vettore, trovare un valore piu vicino alla media dei valori

    Buonasera, ho bisogno di una mano per capire come scrivere un codice che mi dica quale valore di un vettore è più vicino al valore della media generale degli elementi.
    Non ho veramente idea di come fare, credo di dover controllare ogni valore con gli altri e vedere se sono più vicini o più lontani, tuttavia non so come scriverlo.

    codice:
    void inputnumerosita (int &n)   //CHIEDO QUANTI VALORI CONTERRA IL VETTORE
    {
     cout<<"Inserisci il numero dei pezzi: ";
     cin>>n;
     while (n<0 or n>100)
     {
      cout<<"Errore, reinserisci il numero dei pezzi";
      cin>>n;
     }
    }
    void caricavettore (int v[], int n)   //INSERISCO I VALORI NEL VETTORE 
    {
     for(int i=0;i<n;i++)
     {
      cout<<"Inserisci il prezzo del " << i+1 << " ^ articolo: ";
      cin>>v[i];
     }
    }
    float prezzomedio (int v[], int n)  //CALCOLO LA MEDIA GENERALE DEGLI ELEMENTI
    {
     float m=0;
     int s=0;
     for(int i=0;i<n;i++)
     {
      s=s+v[i];
     }
     m=s/n;
     return m;
    }
    void visuavettore (int v[], int n)  //VISUALIZZAZIONE ELEMENTI
    {
     cout<<"Questi sono i nuovi valori del vettore: "<<endl;
     for(int i=0;i<n;i++)
     {
      cout<<v[i]<<"\t";
     }
    }
    void valorevicino (int v[], int n)  //AIUTO :(
    {
     
    }
    int main()
    {
     const int dim=100;
     int v[dim];
     int n,medio;
     cout.precision(2);
     inputnumerosita(n);
     caricavettore(v,n);
     medio=prezzomedio(v,n);
     cout<<"Il prezzo medio e' : "<<fixed<<medio<<endl;
     visuavettore(v,n);
     valorevicino(v,n);
     return 0;
    }

    Grazie a tutti in anticipo.
    Ultima modifica di LeleFT; 12-10-2016 a 09:02 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Trova la media e poi calcola il valore assoluto della differenza di ogni valore e tale media. Di queste differenze prendi la minima e ottieni l'elemento di partenza che cercavi.

    Prova a scrivere il codice secondo queste indicazioni (e utilizza i tag CODE ! )
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    In effetti senza il tag code e' difficile leggerlo.
    Tuttaiva non riesco a capire esattamente cosa intendi con "piu vicino".
    Interni piu vicino in termini di valore o piu vicino in termine di posizione all'interno dell'array? (immagino il primo ma melgio chiedere).

    Nel primo caso cosi come primo pensiero, in special modo se l'array e' piuttosto grosso, suggerirei di eseguire l'ordinamento; potrebbe permetterti di guadagnare tempo nelle successive ricerche.
    Una volta ordinato l'array calcolarne il valore medio diventa facile: l'ultimo valore e' il più grosso.
    Fatto questo dividi in due l'array, controlli i due valori più vicino alla metà e vedi quale dei due e' più vicino al valore medio (ovvero compari le differenze tra il valore e la media).

    Tutto questo ovviamente presuppone che prima l'array sia stato ordinato; se l'array non e' molto grosso (e qui mi pare parliamo di 100 elementi) anche un semplice ordinamento per sostituzione dovrebbe andar bene.
    Presuppone anche io abbia capito correttamente quale sia il tuo problema.


    Devo cmq dire che questo tuo problema mi "piace", penso lo proporro' ad uno dei miei allievi.
    Giorgio Mermet
    Sviluppo software & formazione

    Pagina Personale

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Quote Originariamente inviata da Gades Visualizza il messaggio
    Una volta ordinato l'array calcolarne il valore medio diventa facile: l'ultimo valore e' il più grosso.
    Fatto questo dividi in due l'array, controlli i due valori più vicino alla metà e vedi quale dei due e' più vicino al valore medio (ovvero compari le differenze tra il valore e la media).
    Attenzione che questa cosa può non dare il risultato corretto. Se l'array è particolarmente sbilanciato, non è detto che il valore più vicino alla media stia nel mezzo (mi sto riferendo all'array ordinato). Un esempio:

    codice:
    Numero  Differenza dalla media
    ------------------------------
    1       42
    2       41
    3       40
    4       39
    5       38
    6       37
    7       36
    8       35
    200     157
    201     158
    La colonna di sinistra rappresenta i valori di un array da 10 elementi. La colonna di destra è la differenza di ciascun valore dalla media (43, arrotondamento di 43,7).

    Il risultato corretto è 8 (il valore con la minore differenza)... col tuo metodo verrebbero confrontati il 5 e il 6 e si restituirebbe 6.


    Ciao.
    Ultima modifica di LeleFT; 12-10-2016 a 14:39
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Vero, pensandolo cosi al momento non avevo valuato questa possibilità.

    A questo punto l'utilità del'ordinamento si riduce al solo calcolo della media, il valore piu vicino poi potrebbe essere relativamente ovunque, richiedendo un controllo su tutto l'array.

    Volendo si potrebbe scrivere una funzione di controllo che determini si si verica un caso come quelo che hai menzionato ma mi chiedo se "valga la candela".
    Ultima modifica di Gades; 13-10-2016 a 17:59
    Giorgio Mermet
    Sviluppo software & formazione

    Pagina Personale

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.