#include <fstream>
#include <string>
#include <vector>
#include <iostream>
void mirardatos (const std::vector<int>& datos, int m, int n, std::vector<bool>& vecbool){
int dato = 0;
for(std::size_t i=0 ; i <= datos.size()-1 ; i++){
if ((i % n) == 0){
dato = datos[i];
dato = dato >> m;
if(dato & 1){
vecbool.push_back(true);}
else{
vecbool.push_back(false);}} } }
int main (int argc, char* argv[]){
//Leemos el nombre del archivo
if(argc<2){
std::cerr << "Hace falta el nombre de un fichero" << std::endl;
return 1;}
char* nombre = argv[1];
std::string nombrestring = nombre;
//Comoprobamos si el nombre tiene en su inicio datos y acaba por .dat, en caso de no tenerlos se lo añadimos
std::size_t encontrardatos = nombrestring.find("datos");
std::size_t encontrardat= nombrestring.find(".dat");
if(encontrardat == std::string::npos){
nombrestring = nombrestring + ".dat";}
if(encontrardatos == std::string::npos){
nombrestring = "datos" + nombrestring;}
std::cout << "El fichero seleccionado es: " << nombrestring << std::endl;
//Leemos n y m
if (argc < 3){
std::cerr << "Es necesario que se introduzca el bit a considerar" << std::endl;
return 2;}
int m = 0;
if (argc >=3){
m = std::stoi(argv[2]);}
int n = 2;
if (argc >= 4){
n = std::stoi(argv[3]);}
std::cout << "El valor del bit a considerar será: " << m << std::endl;
std::cout << "El valor n de la función será: " << n << std::endl;
//Leemos el archivo y volcamos los datos en un vector de enteros
std::vector<int> datos;
std::ifstream fent(nombrestring);
int valor=0;
fent >> valor;
if(fent.fail()){
std::cout << "Fallo de lectura del documento" << std::endl;
return 3;}
while (fent.good()){
datos.push_back(valor);
fent >> valor;}
//Ejecutamos el programa
std::vector<bool> vecbool;
vecbool.clear();
mirardatos(datos, m, n, vecbool);
for (std::size_t i = 0; i <= vecbool.size()-1 ; i++){
if(i==0){
std::cout << "(";}
if ( i > 0){
if ( i <= vecbool.size()-1){
std::cout << ", ";}}
if (vecbool[i] == true){
std::cout << "V";}
if (vecbool[i] == false){
std::cout << "F";}}
std::cout << ")" << std::endl;}
S
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
std::vector<int> mayores (const std::vector<std::string> &dat, int pivote){
//Primero vamos a pasar el string numeros enteros
std::vector<int> entero;
for(size_t i=0; i < dat.size(); i++){
int numero = 0;
for(size_t j = 0; j < dat[i].size(); j++){
std::string cadena = dat[i];
if(cadena[j] == 1){
numero |= 1;}
if(cadena[j] == 0){
numero |= 0;}
numero <<= 1;}
entero.push_back(numero);}
//ya tenemos el vecto de enteros
std::vector<int> mayores;
for(size_t n = 0; n < entero.size(); n++){
if(entero[n] > pivote);
mayores.push_back(entero[n]);}
return mayores;}
int main (int argc, char* argv[]){
std::cerr << "El numero de parametros de entrada es de: " << argc << std::endl;
if (argc < 2){
std::cerr << "Falta definir el fichero de datos. Terminamos" << std::endl;
return 1;}
std::string nombreArchivo= argv[1];
//Comprobamos el nombre del archivo
if(nombreArchivo.find(".dat", nombreArchivo.length() - 4) == std::string::npos){
nombreArchivo = nombreArchivo + ".dat";}
std::ifstream fichDatos(nombreArchivo);
if (fichDatos.fail()){
std::cerr << "No se pudo abrir el fichero. Terminamos"
<< std::endl;
return 2;}
//Si todo está correcto comenzamos a leer del fichero
std::vector<std::string> dat;
std::string cad;
fichDatos >> cad;
while(fichDatos.good()){
dat.push_back(cad);
fichDatos >> cad;}
for(size_t i = 0; i < dat.size(); i++){
std::cout << dat[i] << std::endl;}
int pivote = 8;
if(argc >= 3){
pivote = std::stoi(argv[2]);}
//Recibimos el vector de enteros de la funcion pasaentero
std::vector<int> enteros = mayores(dat, pivote);
std::cout << "El vector de numeros mayores que el " << pivote
<< " es el siguiente:" << std::endl;
for(size_t i = 0; i < enteros.size(); i++){
std::cout << enteros[i] << " (" << std::hex << enteros[i]
<< "), ";}
return 0;}
SA
#include <iostream> //std::cout std::cerr std::endl
#include <fstream> //std::ifstream
#include <vector> //std::vector<>
#include <string> //std::string
std::vector<int> mayoresPivote
(const std::vector<int> &enteros, int m, int pivote){
//declaramos las variables a usar
std::vector<int> mayores;
for(std::size_t i = 0; i < enteros.size(); i ++){
//Recorremos el vector
if (enteros[i] & (1 << m)) {
//si su m-esimo bit esta a uno
std::cerr << "Su valor m-esimo es " << m << std::endl;
std::cerr << "el numero " << enteros[i]
<< " tiene su bit m-esimo a 1 " << enteros[i] << std::endl;
if(enteros[i] > pivote){
//si es mayor que pivote guardamos el numero en el vector de
//mayores
mayores.push_back(enteros[i]);
std::cerr << "El numero " << enteros[i]<< " es mayor que pivote"
<< std::endl;}}
else{
std::cerr << "El numero " << enteros[i]
<< " no tiene su bit m-esimo a uno " << std::endl;}}
return mayores;}
int main (int argc, char* argv[]){
//primero comprobaremos que se ha pasado el nombre del fichero y el
//numero de bits a considerar
if (argc <= 2) {
std::cerr
<< "Falta especificar el nombre del fichero y/o el numero de bits"
<< std::endl;
return 1;}
std::string nombre = argv[1];
std::string nombreSinDat;
if (nombre.find(".dat", nombre.size() - 4) == std::string::npos){
//El usuario no puso el .dat
nombreSinDat = nombre;}
else {
//el usuario si puso el .dat
nombreSinDat = nombre.substr (0, nombre.size()- 4);
//le quitamos el .dat
}
//El nombre sin el .dat le añadimos el .dat
nombre = nombreSinDat + ".dat";
if(nombre.find ("datos", 0) == std::string::npos){
//el usuario no puso datos antes del nombre del archivo
nombre = "datos" + nombre;}
std::cerr << "El nombre del archivo es " << nombre << std::endl;
int numeroDeBit;
numeroDeBit = std::stoi (argv[2]);
std::cerr << "El numero de bit a considerar es " << numeroDeBit
<< std::endl;
int pivote = 0;
if(argc >= 4){
pivote = std::stoi (argv[3]);
}
std::cerr << "el pivote sera " << pivote << std::endl;
//abrimos el fichero
std::ifstream fichDatos(nombre);
if(fichDatos.fail()){
std::cerr << "Se ha producido un erro al abrir el archivo"
<< std::endl;
return 2;
}
std::vector<int> vDatos;
int valor;
//leemos un valor
fichDatos >> valor;
while (fichDatos.good()){
std::cerr << "Se ha leido el valor " << valor << std::endl;
//introducimos los valores en el vector
vDatos.push_back(valor);
//leemos el siguiente valor
fichDatos >> valor;}
//llamamos a la funcion que comparara los datos con pivote
std::vector<int> resultado = mayoresPivote
(vDatos, numeroDeBit, pivote);
std::cout << "Los numeros mayores que pivote son: ";
for(std::size_t i =0; i < resultado.size(); i ++){
//mostramos por pantalla los numeros mayores que pivote
std::cout << resultado[i] << ", " ;}
std::cout << std::endl;}