example of course exercises

For helping beginners, here some exercises to learnig a bit more of c++

Realizar una función que reciba:
1) por referencia constante un vector de enteros.
2) por referencia un vector de enteros (mayores).
3) por referencia un vector de enteros (menores).
4) un entero (pivote).
y devuelva en mayores los elementos que son mayores que pivote, en menores los que son menores y como parámetro de salida el número de los que son iguales.
En el programa principal se leerán los datos de un fichero cuyo nombre se pasará como primer
parámetro al programa. El segundo parámetro será el valor del pivote, si no está disponible, el pivote valdrá 10.
Por salida estándar, con un mensaje adecuado, se mostrarán los elementos mayores, los menores y el número de iguales.
Se utilizará la salida de error para mostrar los mensajes de depuración.
los vectores de elementos mayores y menores escribirán en sendos
ficheros que tengan el mismo nombre que el de entrada, pero terminado en '_mayores.dat' y '_menores.dat' respectivamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <vector>
#include <stdlib.h>

std :: vector <int> compara(int pivo, const std :: vector <int> &dat, std :: vector <int> &may, std :: vector <int> &men){
	
	std :: vector <int> iguales;
	for(unsigned int i = 0; i < dat.size(); i++){
		if(dat[i] == pivo){
			iguales.push_back(dat[i]);
std :: cerr << "iguales" << iguales[i];
		}
		else if(dat[i] > pivo){
			may.push_back(dat[i]);
std :: cerr << "mayores" << may[i];
		}
		else if(dat[i] < pivo){
			men.push_back(dat[i]);
std :: cerr << "menores" << men[i];
		}
	}	
	
	return iguales;
}

int main(int argc, char *argv[]){
	
	int pivote = atoi(argv[2]);
	std :: vector<int> v1, mayores, menores;
	std :: string nombre(argv[1]), extension(".dat"), filemayo(argv[1]), filemeno(argv[1]);
	std :: size_t found = nombre.find(extension);
	if (found == std :: string :: npos){
		nombre += extension;
		filemayo += "_mayores.dat";
		filemeno += "_menores.dat";
	}
	else {
	 	filemeno.replace(found, found+4,"_menores.dat");
	 	filemayo.replace(found, found+4,"_mayores.dat");
	}
	 	
	std :: ifstream Fichero(nombre.c_str());
	
	if (pivote == 0){
		pivote = 10;
	}
	
	std :: cerr <<"\n\n\nEl Fichero de datos es: " << nombre;
	std :: cerr <<"\n\n\nEl Pivote es: " << pivote;
	
	while(Fichero.good()){
		int dato;
		Fichero >> dato;
		v1.push_back(dato);
	}
	
	std :: cout <<"\n\n\nLos numeros iguales del archivo son: \n\n\n";	
	for(unsigned int i = 0; i < compara(pivote,v1, mayores, menores).size(); i++){	
		std :: cerr << compara(pivote,v1, mayores, menores)[i] <<", ";
	}
	
	std :: ofstream mayo (filemayo.c_str(), std :: ofstream :: out);
	std :: cout <<"\n\n\nLos numeros mayores del archivo son: \n\n\n";
	for(unsigned int i = 0; i < mayores.size(); i++){
		std :: cerr << mayores[i] <<", ";
		mayo << mayores[i];
		mayo << " ";
	}
	mayo.close();
	
	std :: ofstream meno (filemeno.c_str(), std :: ofstream :: out);
	std :: cout <<"\n\n\nLos numeros menores del archivo son: \n\n\n";
	for(unsigned int i = 0; i < menores.size(); i++){
		std :: cerr << menores[i] <<", ";
		meno << menores[i];
		meno << " ";
	}
	meno.close();
	
return 0;
}


Realizar una función que, dado un parámetro entero, devuelva el número de bits a 1 que tiene su representación binaria.
En el programa principal leerá los datos desde entrada estándar, mostrando el resultado de la función junto con la representación hexadecimal del número, hasta que el usuario introduzca un 0.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
int binario(const int &entero){	
	int v = entero, cuenta = 0;	
	while(v != 0){
		if((v&1) == 1){
			cuenta++;
		}
		v >>= 1;
	}	
	return cuenta;
}
int main (){	
	int numero;
	std :: cout <<"\n\n\nIntrodusca el numero: \n\n";	
	do {
		std :: cin >> numero;
		std :: cout <<"\n\nSu numero en binario tiene: " <<binario(numero) <<"... unos.\n\n";
		std :: cout <<"Su numero en representacion Hexadecimal es: " 
		<< std :: hex << numero << std :: dec << std :: endl;
		} while (numero != 0);		
}

Realizar una función que reciba:
1) por referencia constante un vector de bool.
2) un entero sin signo como índice inicial.
3) un entero sin signo como índice final.
y devuelva un entero sin signo que tenga sus bits a 1 ó 0 dependiendo de si el valor booleano es verdad o falso. El valor del bit 0 corresponderá al elemento inicial, el bit 1 al inicial+1 y así sucesivamente hasta el final.
Realizar otra función a la que se le pasa un entero sin signo y devuelve un string con la representación binaria del número.
Al programa principal se le pasarán como parámetros en línea de comandos: el nombre del fichero de datos (añadir .dat si no tiene esa extensión), el índice inicial y el índice final. Si no se indican los índices se utilizarán los límites del vector.
Mostrará por salida estándar el entero en hexadecimal y la representación binaria del entero generado.
El fichero de datos tendrá en cada línea alguna de las siguientes palabras “verdad”, “si”, “true”, “1”,
“falso”, “no”, “false”, “0”.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <stdlib.h>

int funcion(const std :: vector <bool> &datos, unsigned int &inicial, unsigned int &final){
	int r = 0;
	for(int i = final; i >= inicial; i--){
		r <<= 1;
		if(datos[i] == true){
			r |= 1;
		}	
		else if(datos[i] == false){
			r |= 0;
		}
	}
 	return r;
}
std :: vector <int> binario(int &entero){
	std :: vector <int> cadena;
	int v = entero, cuenta = 0;
	while(v != 0){
		if((v&1) == 1){
			cadena.push_back(1);
		}
		else if((v&1) == 0){
			cadena.push_back(0);
		}
		v >>= 1;
	}
	return cadena;
}
int main(int argc, char *argv[]){
	unsigned int inicial, final;
	std :: vector <bool> dato;
	std :: string archivo, nombre(argv[1]), extension(".dat");
	std :: size_t found = nombre.find(extension);
	if (found == std :: string :: npos){
		archivo += nombre;
		archivo += extension;
	}
	else {
	 	archivo += nombre;
	}
	std :: ifstream Fichero(archivo.c_str());
	while(Fichero.good()){
		std :: string dat;
		Fichero >> dat;
		if (dat == "verdad" | dat == "si" | dat == "true" | dat == "1"){
			dato.push_back(true);
		}
		else if (dat == "falso" | dat == "no" | dat == "false" | dat == "0"){
			dato.push_back(false);
		}
	}
	if(argc == 3){
		final = dato.size();
		}
	else if(argc == 2){
		final = dato.size();
		inicial = 0;
	}
	else{
		inicial = atoi(argv[2]);
		final = atoi(argv[3]);
	}
	int enter = funcion(dato,inicial,final);
	std :: cerr <<"\n\n\nEl numero es: " << enter;
	std :: cerr <<"\n\n\nEn hexadecimal es: " 
	<< std :: hex << enter << std :: dec;
	
	std :: cerr <<"\n\n\nY en binario es: ";
	for(int i = (binario(enter).size() - 1); i >= 0; i--){
		std :: cerr <<	binario(enter)[i];
	}
}

Last edited on
You might get more responses if you provide the English translation of your problem description/question.
Topic archived. No new replies allowed.