Menú principal

jueves, 3 de septiembre de 2020

Histograma de un vector - C++

Se realizará un programa el cual lea un fichero realizado por el usuario con una serie de números como el que se muestra a continuación. Es importante que el archivo se encuentre guardado en la carpeta donde esté alojado el proyecto. Para trabajar con ficheros necesitaremos la librería #include <fstream>.


En primer lugar se leerá el fichero vector y se irán introduciendo todos los números en el vector v. Posteriormente se declara otro fichero como salida, ofstream histo("histograma.txt"); .En dicho fichero será almacenado el histograma final. Para obtenerlo, será necesario crear un vector histograma con el mismo tamaño al de v. Finalmente, mediante un bucle for y un contador se irán contabilizando las veces que aparece cada número.

Además se ha implementado una función que calculará la media de dicho vector y devolverá con el fin de sacar el resultado por pantalla.

 1 ///HISTOGRAMA DE UN VECTOR
 2  #include <iostream>
 3  #include <vector>
 4  #include <fstream>
 5  using namespace std;
 6  double calcula_media(vector<int>);
 7  
 8  int main()
 9  {
10      vector<int> v;
11      ifstream fich("vector.txt");
12      int dato;
13  
14      ///Intro datos de fichero a vector
15      while(fich >> dato)
16          v.push_back(dato);
17  
18      ofstream histo("histograma.txt");
19  
20      for(size_t j=0; j<v.size(); j++)
21          histo << j << "  ";
22      histo << endl;
23  
24      //Crear vector histograma con mismo tamaño al de v
25      vector<int> histograma(v.size());
26  
27      //Contabilizar
28      for(size_t i=0; i<v.size(); i++)
29          histograma.at(v.at(i))++;
30  
31      for(auto x:histograma)
32          histo << x << "  ";
33      histo << endl;
34  
35      double media=calcula_media(v);
36      histo << "Media: " << media;
37  }
38  
39  double calcula_media(vector<int> v)
40  {
41      double suma=0;
42      for(size_t j=0; j<v.size(); j++)
43          suma+=v.at(j); //suma=suma+v.at(j)
44      double media=suma/v.size();
45      return media;
46  }

El resultado final para el fichero mostrado anteriormente es:


No hay comentarios:

Publicar un comentario