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."; }
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"; }
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; }