codigo con numeros aleatorios #include #include #include #include using namespace std; int main(){ int numeros[100],cantidad,pos,aux,aleatorio; coutcantidad; srand(time(NULL)); for(int i=0;i
Fua, gracias loco! Me sirvió un montón, además de que lo explicas de una manera super simple, me complementa algunas partes de la teoría que no termino de entender. Genio!
Comparando un elemento con todos los elementos del vector de una tirada supongo el de inserción: int Numeros[] = { 5,3,4,2,1 }; int i, j, aux; for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { if (Numeros[ i ] < Numeros[ j ]) { aux = Numeros[ i ]; Numeros[ i ] = Numeros[ j ]; Numeros[ j ] = aux; } } } También se puede con el bucle for como con el Burbuja pero cambiando la comparación entre los elementos. Buenos vídeos y gracias.
Yo también lo realice con 2 ciclos for :D, pero cambiando la condición a algo más parecida a la que se usa en el while del video, gracias por ayudarme a corroborar que es un método alternativo, saludos. for(int i=1;i
Es un poco complicado de recordar. Pero lo importante es que sepan de su existencia y mas importante aun que sepan como corre, lo memorizaran con el tiempo.
Ale, una pregunra: ¿Sería incorrecto dejarle solo la "i" en lugar de "pos?, por ejemplo dentro del 'while' que dijera (i>0) ?
8 лет назад
Hola :) para el algoritmo seria correcto, ya que si omites la variable pos, y utilizas solo la i, funcionaría igual, solo que para hacer más entendible el código, utilice otra variable llamado pos.
creo que no seria correcto por que restarias la i dentro del bucle y cuando saliera afuera no cogeria el numero que corresponde para analizar dentro del bucle
Mi propia versión del algoritmo: // Ordenamiento por inserción #include using namespace std; int main(){ int Numeros[100]; int N, Auxiliar = 0; int Contador = 0; cout > N; for (int i = 0; i < N; i++){ cout 0){ Auxiliar = Numeros[Contador]; Numeros[Contador] = Numeros[Contador - 1]; Numeros[Contador - 1] = Auxiliar; Contador -= 1; } } cout
Aquí se los dejo el "Ordenamiento por inserción" con Python: from random import * def generar_matriz(cant, inicio, fin): matriz = [] for i in range(cant): matriz.append(randint(inicio, fin)) return matriz matriz = generar_matriz(10,0,20) print(f"No ordenado: {matriz}") for i in range(len(matriz)): pos = i #Posicion en la matriz aux = matriz[i] #Variable Auxiliar while pos > 0 and matriz[pos - 1] > aux: #While solo cuando Posicion > 0 matriz[pos] = matriz[pos - 1] #Matriz[posicion - 1] > auxiliar pos -= 1 #Le resta uno a la posicion matriz[pos] = aux #Se le asigna "aux" a la matriz[pos] print(f"Ordenado: {matriz}")
No me gustó el i=0 dentro del bucle for, ya que las condiciones en el ciclo while hacen que en la primera iteracion el arreglo sea numeros[-1] , esto deberia marcar un error pero no lo hace, en cambio si el i dentro del for es = 1 el algoritmo se mantiene, con esto la primera iteracion se puede comprobar adecuadamente.
no entiendo este código le hice una prueba de escritorio y todo marcha bien hasta que llega cuando i = 3 el números [pos] = números [pos - 1] con esto números [i] y números [i-1] quedan con el valor de 4, ya no cumple la condición números [pos-1] > aux después sale del siclo while números [pos] = aux, queda números {2,3,1,4,5} la inquietud es como ordena el 1 si ya salio del siclo while que no pasaría a seguir el siclo for e incrementar la i lo que pasaría a el ultimo ordenamiento i=4 , como pasa de salir del while y pasa a entrar de nuevo al siclo while ???????
Recuerdas que para aumentar tu contador colocabas "contador++" eso significa que tu contador aumenta en uno.. como es un ciclo se va aumentando hasta que llegue a cierto numero.. Bueno en este caso disminuye así que sería "pos- -". Además en el minuto --6:58-- explica porque pone "pos- - " .
Como un reto a mi mismo decidí hacer el algoritmo sin ver el video, y creo que hice algo un poco mas simple #include int main(){ int insercion[5], aux; for(int i=0; i
Hola, si alguien sería tan amable de aclararme esta duda me haría un gran favor: En el bucle while, por que se debe utilizar el aux y no directamente numeros[pos], porque estuve probando y funciona mal con el numeros [pos], pero valen lo mismo. Muchas gracias
Yo en realidad no utilicé el pos, simplemente utilicé la variable i, ahora adejo mi programa #include} #include using namespace std; int main(){ int numeros[]={3,4,5,1,2},aux,i; for(i=0;i0) && (numeros[i-1] > numeros[i])){ numeros[i] = numeros[i-1]; i--; } numeros[i]=aux; } for(i=0;i
@@JuanManuelJuradoRubik Si puedes ver dentro del bucle while a numeros[i] le asignas el valor de numeros[i-1], esto causa que tu bucle solo se ejecute una sola vez, por esta razon es importante la variable aux. Espero haberte ayudado
Si te fijas el while es un bucle, y dentro de el, el pos es pos--, cambia su valor en cada repeticion del while, mientras el while sigua cumpliendo su condicion el for no continua sus repeticiones. por eso es aux ya que no cambia el valor sin antes concluir el while
hola muchas gracias por tu tiempo y explicacion en los videos son muy entendible pero mi duda es la siguiente en vez de tener los valores en el arreglo como seria si fuesen valores introducidos directamente por el usuario es posible.? podria explicarme.
Buenas ... Comparto. Solo agregué la interacción con el usuario con ingreso de datos ideales (sin errores de entradas): /*Ordenamientos Ordenamiento por inserción */ #include #include using namespace std; int main(){ int numeros[100]; int cantNum; int i, pos, aux; cout
Otrod modo de codificacion usando FOR: #include using namespace std; int main() { int A[]={3,1,9,5,6,4,7,2,8,10}; int aux; for (int i = 0; i < 10; ++i) { aux = A[i]; for (i; i > 0 && A[i-1] > aux; --i) { A[i] = A[i-1]; } A[i] = aux; } for (int k = 0; k < 10; ++k) { cout
tendrías que calcular la longitud del arreglo, luego la longitud la tendrías que almacenar en una variable, esa variable es la que tienes que condicinoar en el bucle. longitud=strlen(arreglo); for(int i=0;i
Yo no entendí muy bien si la variable pos tenía algún uso específico y lo intenté sin la variable pos. #include #include #include using namespace std; int main(){ int num[]={4,2,3,1,5}; int i,pos,aux; for(i=0; i0) && num[i-1]>num[i]){ num[i]=num[i-1]; num[i-1]=aux; i--; } } cout
For y While son bucles, ambos. Pero el for más se utiliza para una iteración con una condición más sencilla, en cambio while se utiliza cuando la condición es más compleja, ambos cumplen con crear un bucle, pero ahí está la diferencia como lo entiendo uo.
aqui dejo el codigo un poco modificado para que muestre como lo va haciendo (obviamente va dentro del main nosea pendejo) int numeros[]={4,2,3,1,5}; int i,k,pos,aux; for(i=0;i0 && numeros[pos-1]>aux) { numeros[pos]=numeros[pos-1]; pos--; } numeros[pos]=aux; for(k=0;k
yo lo hago igual pero dentro del bucle utilizo el metodo de la burbuja no se si esto todabia sera por inserccion //ordenamiento por inserccion #include #include using namespace std; int main(){ int numero[]={2,5,1,4,3}; int i,j,x,aux; for(i=0;i0)&&(numero[x-1]
Ese codigo esta algo confuso, yo hice este como lo pude entender: #include using namespace std; main() { int numeros[]={4,2,3,1,5}; int i,j,aux; for(i=0;i0 && numeros[j-1]>numeros[j]) { aux=numeros[j]; numeros[j]=numeros[j-1]; numeros[j-1]=aux; j--; } } for(i=0;i
//Ordenamiento por insercion //Para mi es mas entendible el codigo de esta forma: #include #include using namespace std; int main() { int num[] = {4,1,2,3,5}; int aux=0; for(int i=1;i
Este video de esta plataforma me ayudo a retomar temas que no sabía y mejorar un poco en mi programación respecto a este programa aplicarlo en mis actividades CECyT_14_4IV5_Ivan_Emmanuel_S
El mismo código pero pidiendo valores. #include #include #include using namespace std; int main (){ char n[5]; int i,pos,aux; //Algortimo del ordenamiento por inserción si el numero de la izquierda es mayor que el numero //actrual se cambia de lugar niz>nactual cambian cout
//Ordenamiento por insercion #include #include using namespace std; int main(){//pos=i 0 1 2 3 4. o una felcha que recorre los valores. int numeros[]={4,2,3,1,5}; // aux=numeros{i}= (4,2,3,1,5) valores del arreglo. int i, pos, aux;// iteradores, axuliar guarda valores < // 0) 4 2 3 1 5 for(i=0;i 0 . si numeroAlaizquierda > numeroActual (cambio); numero(i=1,(2) > aux (i=1, (2) siempre sera igual while((pos>0) && (numeros[pos-1] > aux)){ //, pero si a numero le -1, es la posicion antes o sea numeros(i=0 (4)->aux(i=1(2) entonces 4>2 (cambio) 2 4 numeros[pos] = numeros [pos-1];//numeros(0) |guarda| numerosPost-1(0) 4), = numeros(0) 4) 0 pos--; // post i= 4-3-2-1-0 } numeros[pos] = aux; // almacena auxiliar para que obtenga el valor en el bucle de que numeros vamos. } cout
Pasos del algoritmo de ordenamiento por insercion: 1) Si el elemento es el primero i=0, ya esta ordenado 2) Pasar al siguiente elemento 3) Guardar en una variable el indice anterior i-1 4) Guardar en una variable temporal el numero actual 5) (numero izquierda) > (numero actual) SI el numero q esta a la izquierda es mayor q el numero actual (temporal) entonces intercambiar numeros, repetir este paso 5) hasta que NO se cumpla mas esta condicion 6) Continuar iteracion en el elemento actual i 7) Repetir pasos 1) hasta 6) hasta q todos los numeros esten ordenados 8) Después de los pasos anteriores el array se ordena de menor a mayor (ascendente).
intente hacer el método de inserción a mi manera y me salio así v: #include #include using namespace std; int main(){ int aux,c,d,var[4]={3,1,4,5}; for(c=0;cvar[c+1]){ aux=var[c+1]; var[c+1]=var[c]; var[c]=aux; c--; } } for(d=0;d
Ey man porque subis el curso de c++ .Que siga la promocion pues
6 лет назад
Hola :) estoy agregando mucho más contenido al curso premium de C++ :) en total serán más de 200 vídeos extras y capítulos mucho más avanzados, Un saludo
//Ordenamiento por insercion #include #include using namespace std; int main(){//pos=i 0 1 2 3 4. o una felcha que recorre los valores. int numeros[]={4,2,3,1,5}; // aux=numeros{i}= (4,2,3,1,5) valores del arreglo. int i, pos, aux;// iteradores, axuliar guarda valores < // 0) 4 2 3 1 5 for(i=0;i 0 . si numeroAlaizquierda > numeroActual (cambio); numero(i=1,(2) > aux (i=1, (2) siempre sera igual while((pos>0) && (numeros[pos-1] > aux)){ //, pero si a numero le -1, es la posicion antes o sea numeros(i=0 (4)->aux(i=1(2) entonces 4>2 (cambio) 2 4 numeros[pos] = numeros [pos-1];//numeros(0) |guarda| numerosPost-1(0) 4), = numeros(0) 4) 0 pos--; // post i= 4-3-2-1-0 } numeros[pos] = aux; // almacena auxiliar para que obtenga el valor en el bucle de que numeros vamos. } cout
mi propuesta con petición datos: #include #include using namespace std; int main(){ int numeros[50]={}; int tam=0,pos=0,aux=0; //petición tamaño vector couttam; //petición datos cout