26 de junio de 2016

Reto_11: Nubes y lluvia: clonación

La tormenta perfecta

 

En esta pantalla aparecen muchas nubes y muchas gotas de lluvia. Pero sólo hay un objeto de cada. Para que aparezcan muchos deberás COPIARLOS y moverlos de forma independiente. Intenta hacer una "tormenta perfecta" . Fíjate en el programa de los asteroides COMO APARECEN LAS PIEDRAS.

Instrucciones:

Reto_90: Juegos con SCRATCH

Intenta realizar los siguientes juegos:
  1. Ping-Pong
  2. Juego del ahorcado
  3. Invasores del espacio
  4. Juego de baloncesto
  5. El comecocos (pacman)

Lista de entradas SCRATCH

SCRATCH


Reto_09: Arkanoid (clonación)

Deberás conseguir que los ladrillos del proyecto se dispongan en 3 filas y 9 columnas, como en la foto (los colores de los ladrillos son aleatorios). Tienes que utilizar el concepto de CLONACIÓN. Cada vez que llamas a la orden "Crear clon de..." se crea una copia de un objeto.


Instrucciones:
= =  =
Ampliación
En la siguiente ficha se cuenta cómo hacer el juego del arkanoid. ¿Te atreves a hacerlo? NO HAY QUE SEGUIR LAS INSTRUCCIONES AL PIE DE LA LETRA, simplemente es una guía de como hacerlo.

Intenta hacerle mejoras. Explícamelas después, antes o después de mandarme el enlace.


Reto_12: Más sobre asteroides.



Ya conocemos el juego asteroides. ¿Eres capaz de hacer algo más, el disparo de la bala, que las piedras se rompan y salgan dos cuando les disparan, el contador de aciertos? Cualquier cosa que hagas se te puntuará con puntos extra en la evaluación.

Instrucciones:
  • El ejercicio de SCRATCH (Reto_9) anterior, cuando lo resuelvas, hazle una copia.
  • Trabaja la copia y, cuando consigas algo, edita la tarea y vas entregando.

Reto_10: Asteroides

El juego "Asteroides" es uno de los primeros videojuegos aparecidos en el mercado. Puedes leer sobre él en la wikipedia y en más páginas.  Una versión del juego con SCRATCH puedes encontrarla en la dirección:



Presta atención:
Se te pide: que en este ejercicio hagas el control de la nave (SOLO EL CONTROL). Al pulsar la tecla izquierda debe girar a la izquierda y girar a la derecha pulsando la derecha. Si pulsas hacia adelante deberá acelerar y si pulsas hacia atrás decelerar y retroceder. El disparo, las balas, el contador, lo dejamos para otra ocasión.
Instrucciones:

Reto_08: Juego de naves

¿Te atreves con un juego de naves espaciales? La idea es la siguiente:
  1. La nave alienígena debe moverse  de izquierda a derecha (o mejor, de forma aleatoria), por la parte superior de la pantalla.
  2. La nave terrestre, el avión, se mueve al pulsar los cursores de izquierda, derecha, adelante, detrás....
  3. La nave terrestre, al pulsar espacio, dispara bolas amarillas.
  4. Cada vez que una bola amarilla impacta en la nave alienígena enemiga debe aparecer en pantalla las veces que le hemos dado. Para ellos necesitarás algún tipo de variable (ver Datos) y sumarle a esa variable 1 cada vez que se produce un impacto.
  5. Opcional: si impacta 10 veces en la nave alienígena, que esta se destruya.
  6. Opcional: que te dispare la nave alienígena a ti, y si te da diez veces, que te mate.
Instrucciones:

Reto_07 : Juego de Billar

Al principio del juego la bola blanca y la bola morada están situadas en unas posiciones determinadas. Al pulsar la bandera, la bola blanca deberá dirigirse hacia la bola morada, golpearla y la bola morada deberá dirigirse hacia la tronera (boquete) señalada por la flecha. Cuando llegue a la tronera la bola morada deberá desaparecer y aparecerá un mensaje de "Conseguido".

IMPORTANTE: el movimiento de las bolas DEBE SER realista. La bola blanca, al golpear la bola, debe salir rebotada. No se pide que la bola blanca rebote en las bandas de la mesa; puedes intentarlo si consigues lo anterior, pero el rebote con la banda es difícil. Tienes que usar matemáticas y calcular ángulos.

Instrucciones:

= = = 

Variante

Hay que hacer lo mismo que antes, pero debemos tener en cuenta que ahora, al principio, las bolas blanca y azul NO APARECEN siempre en el mismo sitio, así que, de alguna manera, la bola blanca debe "averiguar" dónde está la azul para dirigirse hacia ella.

Instrucciones:

Reto_06: juego original

Inventarse un juego original que tenga los tres elementos que se muestran en pantalla: una pelota, una especie de cruz y un carrito de la compra. Piensa que cada objeto debe tener un código de programación.

Instrucciones:

Reto_05: coche siguiendo la línea hasta la campana.


El cochecito tiene en la parte delantera dos "antenas" de colores. Gracias a eso, puede avanzar y seguir la línea roja hasta la campana.

Instrucciones:
  • Programa el cochecito. Tienes algunas pistas de lo que debe incluir, aunque necesitarás más bloques.
  • Complétalo y comparte con el profesor para que te corrija.

Reto_04: llegar a la campana


La pelota debe llegar a la campana, siguiendo la línea roja. Puede avanzar y a veces retroceder, e incluso puede tomar un atajo.

Instrucciones:
  • Programa la "pelota". Te encontrarás con parte ya hecha y con algunos bloques que son la pista para realizar el programa. 
  • Complétalo y comparte con el profesor para que te corrija.
= = = 

Ampliación

Igual que antes, pero en otro sentido, de izquierda a derecha más que de arriba hacia abajo.

Instrucciones:

Reto_03: Caer y caminar


El gato cae desde arriba solo, y, cuando está sobre la línea negra, debe andar por ella, subiendo o bajando según sea la línea. Puede ir algo más rápido si se pulsa las teclas izquierda o derecha. Debe rebotar en las paredes.
Instrucciones:
  • Programa el gato para que haga lo que se ve en el vídeo. Tienes pistas, pero a lo mejor necesitas más bloques.
  • Complétalo y comparte con el profesor para que te corrija.
= = = 

Ampliación



El gato empieza desde el suelo. Debe elevarse sólo, y, cuando llegue a la línea negra, tendrá que atravesarla. Entonces, deberá seguir el programa anterior y seguir la línea. Si salta, deberá caer después, afectado por la gravedad.

Reto_02: Reconstruye el programa plataformas.


Debes reconstruir el programa para que haga lo que ves en el vídeo. El gato debe llegar a la puerta de salida, sin tocar las zonas rojas. Puede andar a izquierda y derecha, saltar un poco y bajar rápido. Puede ir montándose en las plataformas negras.
Instrucciones:
  • Comparte el programa con tu profesor.

Reto _01: Trampa mortal


El bicho, una vez que entra en el recinto mortal, debe intentar salir de él rebotando en las paredes con ángulos entre 80 y 100.

Instrucciones:
  • Programa "el bicho" para que haga lo que se especifica, como en el vídeo.
  • Comparte el programa con tu profesor.

20 de junio de 2016

Bajantes y sistema de desagüe

Aprovecho la oportunidad de que me están arreglando el cuarto de baño y han partido el techo. Estoy viendo el sistema de desagüe del vecino de arriba perfectamente. Bote sifónico, cañerías, bovedillas, bajantes... 



8 de junio de 2016

Processing. Recta que pasa por dos puntos.

import javax.swing.JOptionPane; // Permite introducir números

float x1 = 30;
float y1 = 80;
float px1 = 0;
float py1 = 0;
float x2 = 30;
float y2 = 80;
float px2 = 0;
float py2 = 0;

float x3 = 0;
float x4 = 0;
float y3 = 0;
float y4 = 0;
float px3 = 0;
float py3 = 0;
float px4 = 0;
float py4 = 0;

float a = 0.0;
float b = 0.0;

void setup() {
  size(600,400);
  x1 = pedirNumero("Dame la x del primer punto","Punto 1");
  y1 = pedirNumero("Dame la y del primer punto","Punto 1");
  x2 = pedirNumero("Dame la x del segundo punto","Punto 2");
  y2 = pedirNumero("Dame la y del segundo punto","Punto 2");
  x3 = -width/2;
  x4 = width/2;
  a = (y2-y1)/(x2-x1);
  b = y1-a*x1;
  y3 = a*x3+b;
  y4 = a*x4+b;
  println(str(x1)+","+str(y1));
  println(str(x2)+","+str(y2));
  println("A: "+str(a)+" - B:"+str(b));
}

void draw() {
 background(254);
 stroke(0);
 line (0,height/2,width,height/2); // eje x
 line (width/2,0,width/2,height); // eje Y

 // Transformadas
 px1 = width/2+x1;
 py1 = height/2-y1;
 px2 = width/2+x2;
 py2 = height/2-y2;

 for (int xx=-width/2; xx<=width/2; xx=xx+3) {
    y3 = a*xx+b;
    if ((y3>-height/2) && (y3<height/2)) {
         px3 = width/2+xx;
         py3 = height/2-y3;
         noStroke();
         fill(0,255,0);
         ellipse(px3,py3,1,1);
    }
 }

 // Segmento
 stroke(0);
 line(px1,py1,px2,py2);

  // dibujar
 dibujarCruz(px1,py1);
 dibujarCruz(px2,py2);

}


// Input Box
float pedirNumero(String frase, String titulo) {
  float i = 0;
  String r = JOptionPane.showInputDialog(null,frase,titulo, JOptionPane.QUESTION_MESSAGE);
  try {
    i = Float.parseFloat(r);
  } catch(NumberFormatException e) {
    println("you did not enter a number!");
  }
  return i;
}

void dibujarCruz(float px, float py) {
    stroke(0,0,255);
    line (px-3,py-3,px+3,py+3);
    line (px-3,py+3,px+3,py-3);  
}

6 de junio de 2016

16.9 Ejercicios de Algoritmos

  • En los algoritmos de búsqueda (inserción, burbuja y quicksort) realiza las modificaciones pertinentes para obtener un ordenamiento de MAYOR a MENOR.
  • Para el método quicksort, escribe el algoritmo en pseudocódigo y el diagrama de flujo.
= = =

Funcion quicksort ( L, principio, final )
    i<-principio
    j<-final
    pivote<-(L[i]+L[j])/2
    
    Mientras i<j Hacer
        Mientras L[i]<pivote Hacer
            i<-i+1
        Fin Mientras
        Mientras L[j]>pivote Hacer
            j<-j-1
        Fin Mientras
        Si i<=j Entonces
            temporal<-L[i]
            L[i]<-L[j]
            L[j]<-temporal
            i<-i+1
            j<-j-1
        Fin Si
    Fin Mientras
    
    Si principio<j Entonces
        quicksort(L,principio,j)
    Fin Si
    
    Si final>i Entonces
        quicksort(L,i,final)
    Fin Si
    
Fin Funcion

Algoritmo ordenar
    Dimension numeros[10]
    // Genero un arreglo de 10 nmeros aleatorios
    Para i<-1 Hasta 10 Con Paso 1 Hacer
        numeros[i] <- azar(100)+1
    Fin Para
    
    Escribir "Desordenados..."
    Para i<-1 Hasta 10 Con Paso 1 Hacer
        Escribir numeros[i]
    Fin Para
    
    quicksort(numeros,1,10)
    // Como se pasa por REFERENCIA, numeros se modificara dentro de la funcion
    Escribir "Ordenados..."    
    Para i<-1 Hasta 10 Con Paso 1 Hacer
        Escribir numeros[i]
    Fin Para
FinAlgoritmo

= = =



16.8 Algoritmos de búsqueda e inserción de datos

Algoritmos de Búsqueda

Algoritmo secuencial

# ================== 
# Programa principal
# ==================
# Genero un vector con 20 elementos colocados en posiciones aleatorias, de números entre 1 y 100

numeroDeElementos = 20
maximoNumeroAparecido = 100
misNumeros = []
for i in range(1,maximoNumeroAparecido+1):
    longitud = len(misNumeros)
    misNumeros.insert(random.randint(0,longitud),i)
misNumeros = misNumeros[:20] # solo quiero 20 números

print "Mis números: ",misNumeros
print "= = = "

# ===========================================================================
# Búsqueda secuencial
# ¿En qué lugar encuentro uno de los números?
# Uso búsqueda secuencial cuando la lista no es ordenada o no puedo ordenarla
# Método más lento. No queda más remedio que recorrer uno a uno.
# Comprobar si tengo el elemento, y si no salir
# ===========================================================================

numeroAleatorio = misNumeros[random.randint(0,len(misNumeros)-1)]
print "El número elegido es el %d" % (numeroAleatorio)

indice = 0
while indice<(len(misNumeros)-1):
    if misNumeros[indice]==numeroAleatorio:
        print "Lo encuentro en el lugar %d del vector, contando desde 0" % (indice)
        indice = len(misNumeros)-1
    indice+=1

Búsqueda por dicotomía

La búsqueda por dicotomía (o binaria) se caracteriza por dividir el array en dos partes, si es que no encuentra el valor en el índice dado. Y va calculando índices, por divisiones sucesivas. Es mucho más rápido que el anterior.
En el siguiente ejemplo se encuentra implementado sin recursividad o con recursividad. Como el array debe estar ordenado, uso el método quicksort visto anteriormente.
# *-* coding: utf-8 *-*

import random

def quicksort(L, first, last):
    # definimos los índices y calculamos el pivote
    i = first
    j = last    
    pivote = (L[i] + L[j]) / 2
    # print "PIVOTE: ",str(pivote)

    # iteramos hasta que i no sea menor que j
    while i < j:
        # iteramos mientras que el valor de L[i] sea menor que pivote
        while L[i] < pivote:
            # Incrementamos el índice
            i+=1
            # print "i: ",str(i)
        # iteramos mientras que el valor de L[j] sea mayor que pivote
        while L[j] > pivote:
            # decrementamos el índice
            j-=1
            # print "j: ",str(j)
        # si i es menor o igual que j significa que los índices se han cruzado
        # print "i: ",str(i), ", j: ",str(j), " --> números: ", L
        if i<=j:
            # creamos una variable temporal para guardar el valor de L[j]
            x = L[j]
            # intercambiamos los valores de L[j] y L[i]
            L[j] = L[i]
            L[i] = x
            # incrementamos y decrementamos i y j respectivamente
            i+=1
            j-=1
        # print "L cambiado: ",L,"añadidos i e j: ",str(i),",",str(j)
    
    # si first es menor que j mantenemos la recursividad
    if first < j:
        L = quicksort(L, first, j)
    # si last es mayor que i mantenemos la recursividad
    if last > i:
        L = quicksort(L, i, last)

    # devolvemos la lista ordenada
    return L
    

# Función de búsqueda dicotómica
""" def busquedaDicotomica (L,aguja,desde,hasta):    
    i = (desde+hasta)/2 # valor intermedio.
    while L[i]!=aguja:
        print "Voy buscando índices...: %d --> %d" % (i,L[i])
        if L[i]>aguja: # está en el lado de valores más pequeños
            hasta = i-1
        elif L[i]<aguja: # está en el lado de valores mayores
            desde = i+1
        i = (desde+hasta)/2 # valor intermedio. Recalculo.
    return i """

# Función de búsqueda dicotómica RECURSIVA
def busquedaDicotomica (L,aguja,desde,hasta):
    ans = -1 # En principio, la respuesta es -1
    if desde>=hasta:
        ans = -1 # Si los dos índices se encuentran, o el inferior supera al superior,  es que no ha encontrado nada 
    else:
        centro = (desde+((hasta-desde)//2)) # calculo el centro... // cociente de la división
        if   aguja < L[centro]: 
            ans = busquedaDicotomica(L,aguja,desde,centro) # Busco en la parte del array inferior. No poner centro-1 ??
        elif aguja > L[centro]: 
            ans = busquedaDicotomica(L,aguja,centro+1,hasta) # busco en la parte del array superior
        else:    
            ans = centro # Y si lo encuentra, es la respuesta
    return ans 

    
# ================== 
# Programa principal
# ==================
# Genero un vector con 20 elementos colocados en posiciones aleatorias, de números entre 1 y 100

numeroDeElementos = 70
maximoNumeroAparecido = 100
misNumeros = []
for i in range(1,maximoNumeroAparecido+1):
    longitud = len(misNumeros)
    misNumeros.insert(random.randint(0,longitud),i)
misNumeros = misNumeros[:numeroDeElementos] # solo quiero 20 números

print "Mis números: ",misNumeros
print "= = = "

print "Pero ahora los ordeno... "
misNumeros = quicksort(misNumeros,0,len(misNumeros)-1)
print "Ordenados: ",misNumeros

# ===========================================================================
# Búsqueda dicotómica
# ¿En qué lugar encuentro uno de los números?
# Uso búsqueda secuencial cuando la lista no es ordenada o no puedo ordenarla
# Método más lento. No queda más remedio que recorrer uno a uno.
# ===========================================================================

numeroAleatorio = misNumeros[random.randint(0,len(misNumeros)-1)]
# numeroAleatorio = 43
print "El número elegido es el %d" % (numeroAleatorio)

indiceEncontrado = busquedaDicotomica(misNumeros,numeroAleatorio,0,len(misNumeros)-1)

if indiceEncontrado!=-1:
    print "El valor buscado se encuentra en el lugar...: %d" % (indiceEncontrado)
    print "Compruebo... %d" % (misNumeros[indiceEncontrado])
else:
    print "No encontrado"

# print quicksort(misNumeros,0,len(misNumeros)-1)
 

= = = 


Algoritmo para insertar un dato en un array ordenado

Búsqueda por dicotomía: modificación para insertar un elemento.

Uso el programa anterior, modificado, para conseguir insertar un elemento en un array ordenado en su posición.

# *-* coding: utf-8 *-*

import random

def quicksort(L, first, last):
    # definimos los índices y calculamos el pivote
    i = first
    j = last  
    pivote = (L[i] + L[j]) / 2
    # print "PIVOTE: ",str(pivote)

    # iteramos hasta que i no sea menor que j
    while i < j:
        # iteramos mientras que el valor de L[i] sea menor que pivote
        while L[i] < pivote:
            # Incrementamos el índice
            i+=1
            # print "i: ",str(i)
        # iteramos mientras que el valor de L[j] sea mayor que pivote
        while L[j] > pivote:
            # decrementamos el índice
            j-=1
            # print "j: ",str(j)
        # si i es menor o igual que j significa que los índices se han cruzado
        # print "i: ",str(i), ", j: ",str(j), " --> números: ", L
        if i<=j:
            # creamos una variable temporal para guardar el valor de L[j]
            x = L[j]
            # intercambiamos los valores de L[j] y L[i]
            L[j] = L[i]
            L[i] = x
            # incrementamos y decrementamos i y j respectivamente
            i+=1
            j-=1
        # print "L cambiado: ",L,"añadidos i e j: ",str(i),",",str(j)
  
    # si first es menor que j mantenemos la recursividad
    if first < j:
        L = quicksort(L, first, j)
    # si last es mayor que i mantenemos la recursividad
    if last > i:
        L = quicksort(L, i, last)

    # devolvemos la lista ordenada
    return L
  

# Función de búsqueda dicotómica RECURSIVA
# Modificación para que devuelva, de todas formas, aunque no lo encuentre, la posición.
def busquedaDicotomica (L,aguja,desde,hasta):
    if desde>=hasta:
        ans = hasta # Si los dos índices se encuentran, o el inferior supera al superior,  es que no ha encontrado nada
    else:
        centro = (desde+((hasta-desde)//2)) # calculo el centro... // cociente de la división
        if   aguja < L[centro]:
            ans = busquedaDicotomica(L,aguja,desde,centro) # Busco en la parte del array inferior. No poner centro-1 ??
        elif aguja > L[centro]:
            ans = busquedaDicotomica(L,aguja,centro+1,hasta) # busco en la parte del array superior
        else:  
            ans = centro # Y si lo encuentra, es la respuesta
    return ans

  
# ==================
# Programa principal
# ==================
# Genero un vector con 20 elementos colocados en posiciones aleatorias, de números entre 1 y 100

numeroDeElementos = 15
maximoNumeroAparecido = 100
misNumeros = []
for i in range(1,maximoNumeroAparecido+1):
    longitud = len(misNumeros)
    misNumeros.insert(random.randint(0,longitud),i)
numeroInsertar = misNumeros[numeroDeElementos]
misNumeros = misNumeros[:numeroDeElementos] # solo quiero 20 números

print "Mis números: ",misNumeros
print "Número a insertar... ",numeroInsertar
print "= = = "

print "Pero ahora los ordeno... "
misNumeros = quicksort(misNumeros,0,len(misNumeros)-1)
print "Ordenados: ",misNumeros

# ================================================================================================
# Búsqueda dicotómica e Inserción
# ¿En qué lugar encuentro uno de los números? ¿Dónde introduzco otro?
# Uso búsqueda secuencial c# *-* coding: utf-8 *-*

import random

def quicksort(L, first, last):
    # definimos los índices y calculamos el pivote
    i = first
    j = last  
    pivote = (L[i] + L[j]) / 2
    # print "PIVOTE: ",str(pivote)

    # iteramos hasta que i no sea menor que j
    while i < j:
        # iteramos mientras que el valor de L[i] sea menor que pivote
        while L[i] < pivote:
            # Incrementamos el índice
            i+=1
            # print "i: ",str(i)
        # iteramos mientras que el valor de L[j] sea mayor que pivote
        while L[j] > pivote:
            # decrementamos el índice
            j-=1
            # print "j: ",str(j)
        # si i es menor o igual que j significa que los índices se han cruzado
        # print "i: ",str(i), ", j: ",str(j), " --> números: ", L
        if i<=j:
            # creamos una variable temporal para guardar el valor de L[j]
            x = L[j]
            # intercambiamos los valores de L[j] y L[i]
            L[j] = L[i]
            L[i] = x
            # incrementamos y decrementamos i y j respectivamente
            i+=1
            j-=1
        # print "L cambiado: ",L,"añadidos i e j: ",str(i),",",str(j)
  
    # si first es menor que j mantenemos la recursividad
    if first < j:
        L = quicksort(L, first, j)
    # si last es mayor que i mantenemos la recursividad
    if last > i:
        L = quicksort(L, i, last)

    # devolvemos la lista ordenada
    return L
  

# Función de búsqueda dicotómica RECURSIVA
# Modificación para que devuelva, de todas formas, aunque no lo encuentre, la posición.
def busquedaDicotomica (L,aguja,desde,hasta):
    if desde>=hasta:
        ans = hasta # Si los dos índices se encuentran, o el inferior supera al superior,  es que no ha encontrado nada
    else:
        centro = (desde+((hasta-desde)//2)) # calculo el centro... // cociente de la división
        if   aguja < L[centro]:
            ans = busquedaDicotomica(L,aguja,desde,centro) # Busco en la parte del array inferior. No poner centro-1 ??
        elif aguja > L[centro]:
            ans = busquedaDicotomica(L,aguja,centro+1,hasta) # busco en la parte del array superior
        else:  
            ans = centro # Y si lo encuentra, es la respuesta
    return ans

  
# ==================
# Programa principal
# ==================
# Genero un vector con 20 elementos colocados en posiciones aleatorias, de números entre 1 y 100

numeroDeElementos = 15
maximoNumeroAparecido = 100
misNumeros = []
for i in range(1,maximoNumeroAparecido+1):
    longitud = len(misNumeros)
    misNumeros.insert(random.randint(0,longitud),i)
numeroInsertar = misNumeros[numeroDeElementos]
misNumeros = misNumeros[:numeroDeElementos] # solo quiero 20 números

print "Mis números: ",misNumeros
print "Número a insertar... ",numeroInsertar
print "= = = "

print "Pero ahora los ordeno... "
misNumeros = quicksort(misNumeros,0,len(misNumeros)-1)
print "Ordenados: ",misNumeros

# ================================================================================================
# Búsqueda dicotómica e Inserción
# ¿En qué lugar encuentro uno de los números? ¿Dónde introduzco otro?
# Uso búsqueda secuencial cuando la lista no es ordenada o no puedo ordenarla
# Método más lento. No queda más remedio que recorrer uno a uno.
# EN ESTE CASO LA MODIFICO PARA ENCONTRAR EL INDICE SUPERIOR DEL ELEMENTO DONDE TENGO QUE INSERTAR
# ================================================================================================

# numeroAleatorio = misNumeros[random.randint(0,len(misN umeros)-1)]
print "El número elegido es el %d" % (numeroInsertar)

indiceEncontrado = busquedaDicotomica(misNumeros,numeroInsertar,0,len(misNumeros)-1)

if misNumeros[indiceEncontrado]==numeroInsertar:
    print "El valor buscado se encuentra en el lugar...: %d" % (indiceEncontrado)
    print "Compruebo... %d" % (misNumeros[indiceEncontrado])
    print "No necesito insertarlo..."
else:    print "El límite superior está en el índice... %d" % (indiceEncontrado)
    print "Antes del valor... %d" % (misNumeros[indiceEncontrado])
    misNumeros.insert(indiceEncontrado,numeroInsertar) # Al insertar en esa posición, se desplazan los demás a la derecha...
    print "Array con elemento insertado: %s" % (misNumeros)


uando la lista no es ordenada o no puedo ordenarla
# Método más lento. No queda más remedio que recorrer uno a uno.
# EN ESTE CASO LA MODIFICO PARA ENCONTRAR EL INDICE SUPERIOR DEL ELEMENTO DONDE TENGO QUE INSERTAR
# ================================================================================================

# numeroAleatorio = misNumeros[random.randint(0,len(misN umeros)-1)]
print "El número elegido es el %d" % (numeroInsertar)

indiceEncontrado = busquedaDicotomica(misNumeros,numeroInsertar,0,len(misNumeros)-1)

if misNumeros[indiceEncontrado]==numeroInsertar:
    print "El valor buscado se encuentra en el lugar...: %d" % (indiceEncontrado)
    print "Compruebo... %d" % (misNumeros[indiceEncontrado])
    print "No necesito insertarlo..."
else:    print "El límite superior está en el índice... %d" % (indiceEncontrado)
    print "Antes del valor... %d" % (misNumeros[indiceEncontrado])
    misNumeros.insert(indiceEncontrado,numeroInsertar) # Al insertar en esa posición, se desplazan los demás a la derecha...
    print "Array con elemento insertado: %s" % (misNumeros)