HENRY Challenge

ALGORITMOS Y PSEUDOCODIGO 

Un algoritmo es un proceso para resolver un problema, define las acciones y en qué orden tienes que ejecutarlas. Pseudocódigo es un lenguaje informal en el que expresamos las instrucciones que definen un Algoritmo. Este utiliza las convenciones estructurales de un lenguaje de programación real, pero es más fácil leerlo para un humano que para una computadora. No existe una sintaxis estándar para el pseudocódigo, en nuestros ejemplos vamos a usar un subgrupo de instrucciones:

 
  • Variables: vamos a poder definir variables y darle valores. Podemos usar cualquier nombre para las variables y luego referirnos a ellas con esos nombres:

    Ejemplo:
    maximo = 3;
    imprimir maximo * 2;

    OUTPUT: 6

     

  • Instrucciones simples: Vamos a poder usar cualquier operación matemática (sumas, divisiones, multiplicaciones, etc...) usando los signos que ya conocemos. Además podemos dar instrucciones cómo "imprimir" (que va a imprimir por pantalla) o "retornar" (que nos devuelve un valor y termina la ejecución del algoritmo).
     

  • Iteraciones: Vamos a poder iterar sobre números y listas de la siguiente forma:


    Para cada numero i del n1 al n2:
        instrucciones

     

    Ejemplo:
     

    Para cada numero i del 1 al 5:
        imprimir i * 2

     

    OUTPUT: 2 4 6 8 10
     

    Cuando tengamos una lista de números, podemos hacer lo siguiente:


    Para cada elemento j de la lista: 
        instrucciones


    Ejemplo:
     

    lista = [1,2,3,4]
    para cada elemento i de la lista:
        imprimir i * 3

     

    OUTPUT: 3 6 9 12
     

  • Condicionales: los condicionales nos permiten tener un control sobre qué instrucciones queremos que se realizan dependiendo de alguna condición. Básicamente, podemos escribir lo siguiente:
     

    SI (condicion) ENTONCES:
        instruccion

     

    En el caso que la condición sea VERDADERA, el algoritmo ejecuta la instrucción. Si la condición es FALSA, simplemente ignorará esa línea.
     

    Ejemplo:
     

    Para cada número i del 1 al 5:
        imprimir i
    SI (i == 3) ENTONCES:
        imprimir 'TRES'

     

    OUTPUT sera: 1 2 3 TRES 4 5
     

    A su vez, podemos usar operadores lógicos, como el Y y el O para realizar condiciones más complejas.

    Ejemplo:

     

    Para cada número i del 1 al 5:
        imprimir i SI (i == 3 o i == 1) ENTONCES:
            imprimir 'TRES'

     

    La condición se cumple cuando i es igual a 3, O i es igual a 1.
     

    El OUTPUT será: 1 TRES 2 3 TRES 4 5
     

    Para cada número i del 1 al 5:
        imprimir i SI (i > 1 Y i < 4) ENTONCES:
            imprimir 'TRES'

     

    La condición se cumple cuando i es mayor a 2, Y i es menor a 4. El mayor y menor son excluyentes, si queremos incluir el número deberíamos usar el >= (mayor igual) o el <= (menor igual).
     

    El OUTPUT será: 1 2 TRES 3 TRES 4 5
     

    También podemos elegir qué hacer si la condiciones NO se cumple, usamos el SI NO:
     

    SI (condicion):
       instruccion1
    SI NO:
       instruccion2

     

    Lo interesante de esto, es que sólo se ejecutará una de las instrucciones, según si la condición se haya cumplido o no.
     

    Por último, podemos combinar estas estructuras para obtener una cadena de condicionales entrelazados:
     

    SI (condicion):
       instruccion1
    SI NO, SI (condicion2) :
       instruccion2
    SI NO, SI (condicion3):
      instruccion3
    ...
    SI NO:
      instruccionN

     

    De esta forma, según cual condición sea verdadera, se ejecutará SÓLO UNA de las instrucciones. En el caso que ninguna sea verdadera, se ejecutará la última instrucción, la del SI NO.

EJEMPLO 1

Escribir en pseudo código un programa que imprima todos los múltiplos de cinco entre el 1 y el 100

Solución: 

 

Para cada número n de 1 a 100:
   SI (n % 5 == 0):
       imprimir n

El % es la operación módulo, devuelve el resto de la división entera. Por ejemplo: 4 % 3 = 1 ( cuatro módulo tres es uno, porque cuatro divido tres da 1 y tiene resto 1.). 5 % 3 = 2 . 6 % 3 = 0.

EJEMPLO 2

Encontrar el máximo número dentro de una lista de números enteros.


 

maximo = primer elemento de la lista
Para cada elemento i de la lista:
    SI (i > maximo):
       maximo = i

retorno maximo

En este caso, primero tomamos como máximo al primer elemento de la lista. Luego empezamos a recorrer toda la lista, elemento por elemento. Empezamos a comparar cada elemento con el máximo que habiamos elegido. Si el elemento es mayor que el máximo, entonces guardo el valor del elemento en la variable máximo, si no, no hago nada. De esta forma, al llegar al final, puedo devolver la variable maximo, sabiendo que adentro está el mayor valor de la lista.

EJERCICIOS

Resolver los siguientes ejercicios en pseudocodigo:

Ejercicio 1

 

Escribir un algoritmo que imprima los numeros del 1 al 100, con la condicion que si el numero a imprimir es multiplo de 3, imprima el string 'Fizz', si el numero es multiplo de 5 imprima: 'Buzz', y si es multiplo de ambos imprima: 'FizzBuzz'
 

ejemplo de output: // 1 // 2 // Fizz // 4 // Buzz // Fizz // ... // 14 // FizzBuzz // 16

Ejercicio 2

Escribir un algoritmo que encuentre el máximo y el minímo número dentro de una lista de números enteros (desordenados).

Output:

[1, 3, 0, -1, 12, 3] Output: min: -1 max: 12

Ejercicio 3

Escribir un algoritmo que, dada una lista de números ordenados un número N, te devuelva VERDADERO si alguna combinación de dos números cualesquiera suman N, y devuelva FALSO si ninguna combinación de dos números sumados da como resultado el número N.
 

Por Ejemplo:

En este caso, la lista es [1,2,3,4] y el segundo número (N) es 10:
[1 ,2, 3, 4] y 10. Quieres saber si alguna combinación de esos cuatro números de la lista suman 10. en Este caso es FALSO, porque ninguna combinación de dos números suma diez.
[1, 2, 3, 4] y 5 . Es VERDADERO, porque 2 + 3 es igual a cinco.
[1, 2, 3, 4] y 8 . Es FALSO.

[2,5,7,10,11,15,20] y 13 // verdadero 2+11 suman 13
[2,5,7,10,11,15,20] y 14 // falso

 

IMPORTANTE LEER
 

  • Leer toda la consigna para entender lo que se esta pidiendo. 
     

  • La idea es encontrar una solución al problema, no importa si no es la solución más óptima. Si decidis optimizar una solución, es mejor que presenten la primera solución y su optimización.
     

  • La resolución de los algoritmos deben estar escritas en pseudocódigo. Puedes usar cualquier otra estructura de control, o instrucciones que no hayamos mencionado arriba aca, donde se pueden encontrar algunas más. De todos modos, con las presentadas se pueden resolver todos los problemas.
     

  • Si decides enviar la solución en un lenguaje de programación de su elección, es mandatorio que adjunten una explicación del código con sus propias palabras. No se aceptan como correctas soluciones que utilicen funciones nativas de algún lenguaje, por ejemplo: max(), min(), sort(), etc...
     

  • En el caso que no se les ocurra cómo escribir la solución en pseudocódigo, pueden enviar la solución descripta con sus propias palabras.
     

  • POR FAVOR COMPLETA TUS RESPUESTAS ACA:  https://airtable.com/shr1ACMI8bVP6UgiP