Exemple #1
0
		void EliminaSecuencia( SecuenciaEnteros elimina ){
			int long_elimina = elimina.Utilizados();
			int pos_escritura = 0;

			bool esta = false;

			// Recorremos los números de este vector.
			for(int i = 0; i < total_utilizados; i++){

				for(int j = 0; j < long_elimina && !esta; j++){

					if( Elemento(i) == elimina.Elemento(j)){
						esta = true;
					}

				}

				// Si está lo borramos.
				if( !esta ){
					Modifica( pos_escritura, Elemento(i) );
					pos_escritura++;
				}
				else{
					esta = false;
				}

			}

			total_utilizados = pos_escritura;
		}
		SecuenciaEnteros RecuperaFila(int n){

			SecuenciaEnteros fila;

			for(int i; i < columnas_util; i++){

				fila.Aniade(Elemento(n, i));

			}

			return fila;

		}
int main(){
	SecuenciaEnteros entero;
	int enterillo;
	const int TERMINADOR = 0;
	
	cout << "Introduzca un entero: ";
	cin >> enterillo;
	
	while (enterillo != TERMINADOR){
		entero.Aniade(enterillo);
		
		cout << "\nIntroduzca otro: ";
		cin >> enterillo;
	}
	
	cout << "\n\nSe han introducido " << entero.SecuenciasAscendentes() << " secuencias en forma ascendente.";
}
Exemple #4
0
int main(){
	/*
	 * Lattice paths
	 *
	 * ( a + b )
	 * (	 b   )
	 *
	 */
	const int MAX = 20;

	SecuenciaEnteros caminos;

	uint64_t resultado;

	resultado = caminos.Combinatorio( 2*MAX, MAX);


	cout << resultado;
}
int main(){
   SecuenciaEnteros secuencia;
   secuencia.Aniade(2);
   secuencia.Aniade(4);
   secuencia.Aniade(1);
   secuencia.Aniade(1);
   secuencia.Aniade(7);
   secuencia.Aniade(2);
   secuencia.Aniade(1);

   cout << "\nHay " << secuencia.NumeroSecuencias() << " secuencias.";

   cout << "\n\n";
}
Exemple #6
0
		uint64_t Combinatorio( int a, int b){
			uint64_t combinatorio;
			SecuenciaEnteros simplificador;
			int resta = a - b;
			int numero_primero,
				 numero_segundo;
			bool mayor = resta > b;
			bool simplificado = false;

			EliminaTodos();

			AniadeFactorial(a);

			// Nos quedamos con la secuencia más larga.
			if( mayor ){
				simplificador.AniadeFactorial(resta);
			}
			else{
				simplificador.AniadeFactorial(b);
			}
			// Simplificamos
			EliminaSecuencia(simplificador);

			// Actualizamos
			simplificador.EliminaTodos();
			if( mayor ){
				simplificador.AniadeFactorial(b);
			}
			else{
				simplificador.AniadeFactorial(resta);
			}

			// Simplificamos los factores
			/*
			 * Recorremos los elementos del denominador y buscamos factores.
			 */

			for(int i = 0; i < simplificador.Utilizados() ; i++){
				numero_primero = simplificador.Elemento(i);
				for(int j = numero_primero; j >= 2; j--){

					if( numero_primero % j == 0 ){

						for(int k = 0; k < total_utilizados && !simplificado; k++){
							numero_segundo = Elemento(k);

							if( numero_segundo % j == 0 ){
								numero_primero = numero_primero / j;
								numero_segundo = numero_segundo / j;

								simplificador.Modifica(i, numero_primero);
								Modifica(k, numero_segundo);
								simplificado = true;
							}

						}

						simplificado = false;

					}

				}
			}

			numero_primero = Factorial();
			numero_segundo = simplificador.Factorial();

			// Calculamos
			combinatorio = Factorial() / simplificador.Factorial();

			return combinatorio;
		}
int main(){

	int numero;
	MatrizRectangularEnteros matriz, matriz1;
	SecuenciaEnteros fila;
	int cuantos;
	bool son_iguales;

	cout << "\n\nIntroduce el numero de filas: ";
	cin >> cuantos;

	for(int i = 1; i <= cuantos; i++){

		cout << "\n\nIntroduce una fila (-1 para terminar): ";


		while( numero != -1){

			cin >> numero;

			if (numero != -1){

				fila.Aniade(numero);

			}
		}

		matriz.AniadeFila(fila);
		fila.Inicializa();

		numero = 0;

	}

	cout << endl << endl;

	cout << "\n\nD A T O S  M A T R I Z  P R I N C I P A L" << endl;

	for(int i = 0; i < matriz.GetFilas(); i++){

		for(int j = 0; j < matriz.GetColumnas(); j++){

			cout << matriz.Elemento(i, j);

		}

		cout << endl;

	}

	cout << "\n\n R E C U P E R A R  F I L A";

	cout << "\n\nfila a recuperar: ";
	cin >> numero;

	SecuenciaEnteros FilaR(matriz.RecuperaFila(numero));
	
	for (int i = 0; i < FilaR.TotalUtilizados(); i++){

		cout << FilaR.Elemento(i) << " ";

	}

	cout << "\n\nC O M P A R A C I O N  D E  M A T R I C E S" << endl;

	cout << "\n\nIntroduzca los datos de una segunda matriz a comparar: ";

	cout << "\n\nIntroduce el numero de filas: ";
	cin >> cuantos;

	for(int i = 1; i <= cuantos; i++){

		cout << "\n\nIntroduce una fila (-1 para terminar): ";

		while( numero != -1){

			cin >> numero;

			if (numero != -1){

				fila.Aniade(numero);

			}
		}

		matriz1.AniadeFila(fila);
		fila.Inicializa();

		numero = 0;

	}

	son_iguales = matriz.Compara(matriz1);

	if (son_iguales){

		cout << "\n\nLas matrices son iguales";

	}

	else{

		cout << "\n\nLas matrices no son iguales";

	}


	cout << "\n\n T R A N S P U E S T A  D E  L A  P R I M E R A  M A T R I Z" << endl;

	MatrizRectangularEnteros traspuesta(matriz.Traspuesta());

	for(int i = 0; i < traspuesta.GetFilas(); i++){

		for(int j = 0; j < traspuesta.GetColumnas(); j++){

			cout << traspuesta.Elemento(i, j);

		}

		cout << endl;

	}

	cout << "\n\nC O M P R O B A C I O N  S I M E T R I A";

	son_iguales = matriz.Compara(traspuesta);

	if (son_iguales){

		cout << "\n\nLas matrices son simétricas";

	}

	else{

		cout << "\n\nLas matrices no son simétricas";

	}

	cout << "\n\nM E T O D O  2";

	son_iguales = matriz.ComparaSimetrica(traspuesta);

	if (son_iguales){

		cout << "\n\nLas matrices son simétricas";

	}

	else{

		cout << "\n\nLas matrices no son simétricas";

	}

	cout << "\n\nM U L T I P L I C A C I O N" << endl;


	if (matriz.GetColumnas() == matriz1.GetFilas()){

		MatrizRectangularEnteros operacion(matriz.Multiplica(matriz, matriz1));

		//cout << "\n\n-->" << operacion.GetFilas() << " " <<  operacion.GetColumnas();


		for(int i = 0; i < operacion.GetFilas(); i++){

			for(int j = 0; j < operacion.GetColumnas(); j++){

				cout << operacion.Elemento(i, j) << " ";

			}

		cout << endl;

		}

	}

	else{

		cout << "\n\nLas matrices no pueden multiplicarse";

	}

	cout << endl << endl;
}