11 septiembre 2023

Ordenando vectores

Hace unos días les mostré como "revolver" el contenido en un vector en C++ (después de haber explicado, hace mucho, como usar vectores y luego iteradores), pero para otro problema tenía que ordenar un vector.

Encontré esta página que lo explica muy bien, y luego lo apliqué a un ejemplo práctico que ordena un vector que tiene datos de diferente tipo. De esta manera pueden ver cómo funciona el método sort con mis propias funciones de comparación.

Te aconsejo de leer el post que explica el sort y aquí te dejo mi código de ejemplo:


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 85 86 87 88 89 90 91 92 93 94
/* ***
 * Ordena.cpp - Ejemplifica como usar el sort en vectores
 * ***/
 
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Prueba {
	public:
		int datoEntero;
		float datoFlotante;
		string datoString;
		Prueba();		//	 Constructor default
		Prueba(int,float,string);	// Constructor sobrecargado
		string MuestraDatos();
};

// Constructor default
Prueba::Prueba() {
	datoEntero = 0;
	datoFlotante = 0.0f;
	datoString = "";
}

// Constructor sobrecargado
Prueba::Prueba(int entero,float numDecimal,string texto) {
	datoEntero = entero;
	datoFlotante = numDecimal;
	datoString = texto;
}

// Devuelve una cadena con los valores en el objeto
// Salida: una cadena con los valores
string Prueba::MuestraDatos(){
	string x = to_string(datoEntero).append(" - ").append(to_string(datoFlotante)).append(" - ").append(datoString);
	return x;
}

// Función para comparar (usado en el sort)
bool compara1(Prueba a,Prueba b) {
	return a.datoEntero < b.datoEntero;
}

bool compara2(Prueba a,Prueba b) {
	return a.datoFlotante < b.datoFlotante;
}

bool compara3(Prueba a,Prueba b) {
	// compareTo devuelve un número, hagoa la expdresión para que devuelva
	// True o False.
	return (a.datoString.compare(b.datoString) < 0);
}

int main () {
	// Declarar el vector
	vector<Prueba> lista;
	// Lleno el vector con datos
	lista.push_back(Prueba(1,2.0f,"primero"));
	lista.push_back(Prueba(7,2.5f,"segundo"));
	lista.push_back(Prueba(4,4.5f,"tercero"));
	lista.push_back(Prueba(3,6.33f,"cuarto"));
	lista.push_back(Prueba(5,1.8f,"quinto"));
	lista.push_back(Prueba(2,8.45f,"sexto"));
	
	// Muestro el contenido del vector
	cout << "Lista de elementos\n";
	for (Prueba xx : lista) {
		cout << xx.MuestraDatos() << endl;
	}
	
	// Ordeno la lista usando mi función para comparar
	// y muestro la lista ordenada
	sort(lista.begin(),lista.end(),compara1);
	cout << "Lista de elementos ordenados por el dato entero\n";
	for (Prueba xx : lista) {
		cout << xx.MuestraDatos() << endl;
	}
	
	// Ordeno la lista de nuevo usando mis otras funciones
	// para comparar y muestro las listas resultantes
	sort(lista.begin(),lista.end(),compara2);
	cout << "Lista de elementos ordenados por el dato flotante\n";
	for (Prueba xx : lista) {
		cout << xx.MuestraDatos() << endl;
	}
	sort(lista.begin(),lista.end(),compara3);
	cout << "Lista de elementos ordenados por el texto\n";
	for (Prueba xx : lista) {
		cout << xx.MuestraDatos() << endl;
	}
}

Espero que te sea útil. ¡Hasta la próxima!

05 septiembre 2023

Revolviendo un vector en C++

Hace tiempo escribí sobre cómo usar vectores en C++ y como usar iteradores. Sin embargo, el otro día quise "revolver" (hacer un shuffle) a un vector y se me complicó un poquito encontrar la solución.

En Java existe Collections.shuffle y quería algo similar para un vector. Y, después de experimentar un rato y leer varias páginas, encontré que existe una función shuffle que recibe dos iteradores (del inicio y final del vector) y un motor de generador de números aleatorios. Aquí les dejo el ejemplo simple que hice:


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
/* ***
 * AzarVector.cpp - Ejemplo de cómo "revolver" un vector en C++
 * ***/
 
#include <vector>		// Para usar el vector
#include <iostream>	
#include <random>		// Para el default_random_engine
#include <algorithm>	// Para el shuffle

using namespace std;

int main() {
	vector<int> lista;
	
	// Lleno la lista
	cout << "Llenando el vector con 100 enteros...\n";
	for (int i=0;i<100;i++) {
		lista.push_back(i);
	}
	
	// Muestro la lista
	cout << "\nLos elementos dados de alta...\n";
	for (int i : lista) {
		cout << i << endl;
	}
	
	// "Revuelvo" la lista
	shuffle(lista.begin(),lista.end(),default_random_engine());
	
	// Muestro la lista
	cout << "\nLos elementos mezclados...\n";
	for (int i : lista) {
		cout << i << endl;
	}
}
Espero que esto les sirva en sus proyectos. ¡Saludos!

04 septiembre 2023

Instalando Python

Empezaré a escribir un poco sobre Python, un lenguaje de alto nivel que se ha vuelto sumamente popular en los últimos años. Pero antes de empezar, es necesario tener las herramientas necesarias para poder crear y ejecutar programas hechas en este lenguaje.

Voy a mostrar una configuración mínima, que solo tenga lo necesario e indispensable para embarcar esta aventura. Así que solo necesitamos dos cosas: un editor de texto y el compilador/intérprete de Python.

Para editor de texto, podrías usar hasta el bloc de notas que viene en Windows, pero hay cosas mejores. Yo generalmente uso Notepad++ pero mejor decidí usar otro editor, llamado Brackets porque funciona igual en Windows, Mac y Linux. Además, está muy padre.

Instalar Python

Primero voy a instalar el intérprete de Python. Para eso, primero hay que visitar la página www.python.org como se ve en la siguiente imagen:

De allí, pon tu mouse sobre el botón Downloads:

Debería reconocer tu sistema operativo y sugerir el que te corresponde. Como yo estoy haciendo todo sobre Windows, doy clic sobre el botón gris que dice Python 3.11.5 (que es la versión actual del intérprete de Python cuando escribí esto. Tal vez aparezca una versión más reciente). Descarga el archivo y ejecútalo. Debería aparecer una ventana como ésta:

Si deseas instalar con las opciones default (que generalmente está muy bien), dale clic sobre Install Now. Si quieres cambiar la carpeta donde se va a instalar o alguna otra opción, haz clic sobre Customize Installation y en las ventanas siguientes seleccionas las opciones personalizadas. Cuando termines, te aparece la siguiente ventana. Presiona el botón Close para terminar.


¡Felicidades! Ya instalaste Python. ahora instalemos Brackets.

Instalar Brackets

Para instalar Brackets, ve a la página brackets.io. Y te lleva a esta página:


Y presiona el botón que dice Download. Guarda el archivo y ejecútalo. Cuando lo corres, aparece esta ventana:


Dile que estás de acuerdo y presiona el botón Siguiente. En la siguiente ventana, selecciona Típico (si quieres instalarlo de forma default) o Personalizada (hay un par de opciones que puedes cambiar).


Espera un momento y cuando termines, aparece la ventana que te permite abrir Brackets o Finalizar. Sé feliz y haz lo que quieras porque ya tienes todo listo para trabajar con Python. ¡Felicidades!


En un futuro cercano seguiré escribiendo sobre Python para que sigas por aquí . ¡Saludos!

El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...