Programación

Classroom Programación

Classroom JavaScript

32 Core CPU, 32 GB of RAM, WOW ... and all to print 'Hello World'

Tabla de contenidos

Definición

Proceso de escribir o crear un conjunto de instrucciones que le dicen a una computadora cómo realizar una tarea.

¿Con esta definición HTML es programar?

Conceptos básicos

  1. Algoritmos: Conjunto de pasos para realizar una tarea.
  2. Control de flujo: Se trata de la forma en que una computadora determina qué instrucciones ejecutar a continuación.
  3. Expresión Cualquier valor devuelto
  4. Expresiones literales: Valor devuelto de un dato sin necesidad de su almacenaje en una computadora. Ejemplos de expresiones literales:
3 // (number o numérico)
'Mi nombre' // (string o cadena de texto)
true // (boolean o lógico)
  1. Variable Espacio de memoria reservada para almacenar un dato
  2. Contante Espacio de memoria reservada para almacenar und dato. La diferencia fundamental con respecto a las variables es que una vez que reciben la asignación de un valor no se pueden volver a modificar
  3. Declaración Momento en el que reservamos espacio de memoria (creamos) una variable o constante
  4. Sentencia Instrucción dada a una computadora

Inicio

Pseudocódigo y diagramas de flujo

Para aprender a programar o con fines de documentación de código existen diversas metodologías de programación. Nos centraremos en el pseudocódigo y en los diagramas de flujo

Pseudocógido

Algoritmo sumar_dos_numeros
	Escribir 'Inserte dos números'
	Leer num1, num2
	Escribir num1, '+', num2, '=', num1 + num2	
FinAlgoritmo

En la parte superior vemos un pseudocógico que trata de resolver un algoritmo que consiste en sumar dos números cualesquiera. Recuerda que un algoritmo no es más que un conjunto de pasos que tiene como fin el de realzar una tarea. Este conjunto de pasos debe de escribirse en lenguajes de programación que sean entendibles para los humanos: los lenguajes de alto nivel.

El pseudocódigo es un "falso" lenguaje que trata de representar estos lenguajes de alto nivel

Diagramas de flujo

Los diagramas del flujo son una forma gráfica de representar los algoritmos:

Sumar dos números

La ejecución de este programa sería la siguiente:

*** Ejecución Iniciada. ***
Inserte dos números
> 2
> 5
2+5=7
*** Ejecución Finalizada. ***

Inicio

Operadores

A la hora de resolver problemas y realizar nuestros algoritmos muchas veces no sólo con leer datos (input) y escribir datos (output). También es necesario realizar operaciones con ellos. A continuación detallamos algunos de los operadores que nos son necearios

Operadores aritméticos

Con los números, puedes usar los operadores aritméticos para realizar operaciones matemáticas. Los más comunes son:

  • suma (+)
  • resta (-)
  • multiplicación (*)
  • división (/)
  • módulo (resto de la división)
  • exponente

Con las cadenas de texto:

  • Concatenación (+)

Operadores de comparación

En las estructura de control condicinal que utilizaremos más adelante son necesarios los llamados operadores de comparación: >, <, >=, <=, ==, !=

Ejemplos:

// Podemos comparar si un número es mayor que otro con el operador >, o si un número es menor que otro con el operador <.
5 > 3 // true
5 < 3 // false

// También tenemos los operadores >= y <= que nos permiten comparar si un número es mayor o igual que otro, o si un número es menor o igual que otro.
5 >= 3 // true
5 >= 5 // true
5 <= 3 // false
5 <= 5 // true

// Para saber si dos valores son iguales podemos usar el operador == o, para saber si son diferentes, el operador !=.

5 == 5 // true
5 != 5 // false

Operadores lógicos

  • El operador lógico Y (AND) devolverá verdadero (true) cuando ambos valores que conecta son true.
// En JavaScript el operador lógico AND se escribe como &&
true && true // → true
true && false // → false
false && false // → false
  • El operador lógico O (OR) devolverá verdadero (true) cuando cualquiera de los valores que conecta son true.
// En JavaScript el operador lógico OR se escribe como ||
true || true // → true
true || false // → true
false || false // → false
  • El operador lógico NO (NOT) invierte el valor de un valor booleano. Se pone delante del valor que queremos invertir.
// En JavaScript el operador lógico NOT se escribe como !
!true // → false
!false // → true

Inicio

Prioridad de operadores

Prioridad de operadores

  • 13 - 4 · (5 - 2) + 3 · (2 + 8)
  • 16 + 3 · (6 - 4) - 3 · 5
  • 23 - 8 + 6 · 2 - 3 · 4
  • 6 · (7 · 5 - 4 · 6) + 81 : 9 - 6
  • 23 - 5 · (6 - 2) + 9
  • 4 · 3 + 7 - 2 · 4 + 3 · (9 - 5)
  • 6 · 4 + 3 AND -1
  • 3 · (5 + 4) - 6 + 3 · (8 - 4)
  • 8 · (3 + 6) - 7 · (2 + 3)
  • 6 + 3 · 5 - 4 · (7 - 2)
  • 4 · (7 + 2) - 3 · 9
  • 5 · 6 : 2 - (12 - 3) · 2
  • 3 · 9 + 7 + 6 - 5 · 3
  • 5 · (2 + 6) + 7 - 4 · 3
  • 6 · 7 - 4 · 6 + 8 - 3
  • 23 - 5 · (6 - 2) + 9
  • 4 · 3 + 7 - 2 · 4 + 3 · (9 - 5)
  • 40 - (15 - 6 - 8) - 10
  • 5 · 7 + 5 · 2 - 5 · 4 + 5 · 10 - 5 · 3 + 5 · 12 OR false

Condicionales o bifurcaciones

En la programación estructurada el código es lineal, esto es, instrucción a instrucción. Pero eso no quita que a veces haya que tomar decisiones.

Obsérvese el siguiente diagrama:

Mayor de edad

El pseudocódigo del mismos sería:

Algoritmo mayor_edad
	Definir edad como Entero
	Escribir 'Introduzca su edad'
	Leer edad
	Si edad > 17 Entonces
		Escribir 'Usted es mayor de edad (', edad,')'
	SiNo
		Escribir 'Usted es menor de edad (', edad,')'
	FinSi
FinAlgoritmo

Y un ejemplo de ejecución del programa:

*** Ejecución Iniciada. ***
Introduzca su edad
> 50
Usted es mayor de edad (50)
*** Ejecución Finalizada. ***

Como observamos en una bifurcación más conocido como condicional esperamos una decisión, esto es, se evalúa una expresión a verdadero o falso. Las condicionales también se denominan estructuras de control

Inicio

Switch

La estructura de control switch (Según) es muy parecido a if (Si) pero con la salvedad de que tenemos que conocer exactamente la solución a la pregunta que realicemos.

Veamos el siguiente pseudocódigo:

Algoritmo tratamiento
	Escribir 'Escribir h para hombre y m para mujer:'
	leer sex
	Segun sex Hacer
		'm':
			Escribir "Señora"
		'h':
			Escribir "Señor"
		De Otro Modo:
			Escribir "Opción no válida"
	Fin Segun	
FinAlgoritmo

La pregunta es saber si en la variable sex se almacena la cadena de texto o string "h" o "m" para escribir el tratamiento. Normalmente la estructura switch tiene una opción en caso de que el valor no sea hayado.

Estructura switch

Bucles

Un bucle es una estructura de control que permite repetir un bloque de instrucciones. Vamos, repetir una tarea tantas veces como queramos.

Primeros 10 números

while

El bucle while es una estructura de control de flujo que ejecuta una sección de código mientras se cumple una determinada condición, esto es simpre y cuando la estructura de control sea true.

La naturaleza de un bucle while provoca que éste quizás nunca se ejecute.

En el siguiente ejemplo qué ocurría si el usuario introduce un cero como número:

Cuenta atrás

do...while

Muy parecido al bucle while salvo por el hecho de que las instrucciones se ejecutan por lo menos una vez.

Obsérvese el siguiente algoritmo en PSeInt:

Algoritmo dame_nombre
	Repetir
		Escribir 'Dame tu nombre: '
		Leer nombre
	Hasta Que nombre<>''
	Escribir 'Tu nombre es ',nombre
FinAlgoritmo

Y el diagrama:

Dime tu nombre

Se puede observar claramente que las instrucciones se repiten por lo menos una vez. El usuario por lo menos tiene un intento de introducir su nombre.

For

El bucle for es unas estructura de control que nos facilita escribir en menos líneas un bucle (sea while o do...while). Fijarse en el siguiente pseudocódigo:

Algoritmo contar_vueltas_con_for
	Para vueltas = 1 Hasta 10 Con Paso 1 Hacer
		Escribir "Vuelta ", vueltas
	Fin Para
	Para vueltas = 10 Hasta 1 Con Paso -1 Hacer
		Escribir "Vuelta ", vueltas
	Fin Para
FinAlgoritmo

Observamos que en la instrucción Para inicializamos las vueltas e indicamos el final de la condición (Hasta 10) en la misma línea de la sentencia o instrucción. También indicamos el incremento, Paso 1. Seguidamente contamos hacia atrás.

El diagrama sería el siguiente:

Contar vueltas con for

Inicio

Arreglos

En muchas ocaciones tenemos una colección de datos que representan un dominio y que hace difícil o imposible guardarlos en un número elevado de variables.

Imaginemos que necesitamos almacenar la edad de 100 personas. Sin los arreglos tendríamos que recurrir a cien variables:

edad1 = 50
edad2 = 12
edad3 = 80

// y así hasta 100

Los arreglos o también llamados arrays o vectores nos proporcionan un mecanismo para almacenar este conjunto de datos. Lo que debemos realizar es declarar una variable que permita almacenar 100 valores:

// Declaramos un vector de 100 posiciones. La palabra "Dimensionar" es de PSeInt para crear arreglos
Dimensionar edades[100]

Para editar cada una de los miembros de esta colección lo realizaremos a través del "índice", un número entero que escribiremos dentro de los corchetes y que nos devuelve la expresión de uno de los elementos del array

Escribir 'Nombre 1:'
Leer nombres[1] // <- 'Juan'
Escribir nombres[1] // -> 'Juan'

Para escribir el código anterior cien veces se recurren a los bucles y el que mejor se adapta es la instrucción Para:

Algoritmo dadme_vuestros_nombres
	TAM = 100 // Utilizo una constante para dimensionar el array
	Dimensionar nombres[TAM]
	Para i = 1 Hasta TAM Con Paso 1 Hacer
		Escribir 'Nombre ', i, ':'
		Leer nombres[i]
	Fin Para
FinAlgoritmo

El diagrama del algoritmo del anterior pseudocódigo es el siguiente:

Dime tu nombre

Inicio

Ejercicios

Básicos

  1. Diagrama de flujo que a partir de tres notas de evaluación dadas de un determiando alumno en la asignatura de "Programación" se obtenga la media aritmética de estas
  2. Diagrama de flujo introducido el precio de un producto se le aplique descuento del quince por ciento obteniendo el desglose del descuento y el precio final
  3. Diagrama de flujo en el que determinemos dado un número si este es positivo o negativo
  4. Leer un número y determinar si este es par o impar
  5. Leer dos números y determinar si el primero es mayor que el segundo. En caso de que no sea así intercambiar los valores con una variable auxiliar
  6. Dados dos números reales, a y b, y el símbolo, S (carácter), de un operador aritmético (+, -, *, /), imprimir el resultado de la operación a S b
  7. Comprobar si un año es bisiesto. Los años divisibles por 4 son bisiestos, pero cada 400 años se deben eliminar 3 bisiestos. Para ello, no son bisiestos los que se dividen por 100, menos los que se dividen por 400, que sí son bisitestos. Dicho de otro modo, son bisiestos todos los años divisibles por 4, excluyendo los que sean divisibles por 100, pero no los que sean divisibles por 400.

Bucles

  1. Mostrar los primeros 10 números naturales impares

  2. Sumar los números del 1 al 10

  3. Imprimir la tabla de multiplicar de 1 al 10

  4. Algoritmo en el que un usuario introduzca 50 números y al final se muestre cuántos son números positivos, cuántos negativos y cuántos cero

  5. En PseInt con esta instrucción n = azar(10) + 1 obtenemos un número aleatorio entre 1 y 10. Realizar un algoritmo donde un usuario tenga 10 intentos para adivinar un número aleatorio entre 1 y 100. Por cada intento se le dará la pista si el número propuesto es mayor o menor que el número aleatorio generado.

  6. Tenemos la pantalla del móvil bloqueada. Partiendo de un PIN_SECRETO, intentaremos desbloquear la pantalla. Tenemos hasta 3 intentos. Simula el proceso. En caso de acceder, lanza al usuario 'login correcto'. Sino, 'llamando al policía'.

  7. Calcular el factorial de un número. Por ejemplo:

    3! o factorial de 3
    3 * 2 * 1 = 6
    
  8. Crea un algoritmo que dibuje un árbol dado un número, asumiendo que n >1. Para n = 3:

    *
    **
    ***
    
  9. Vamos a diseñar una calculadora que se enciende y hasta que no tecleamos 'SAL' no se apaga. Esta calculadora funciona de la siguiente manera:

    • Recogemos los datos A y B
  • Si operación es 1 calcula A / B. Vigilamos que B no sea 0...
  • Si la operación es 2 calculamos la siguiente fórmula: ( A * B ) / 2.5

Arreglos

  1. Ingresar 5 números, almacenarlos en un arreglo y mostrarlos
  2. Crear un arreglo con n numeros, ingresados por teclado y mostrar sus valores elevados al cuadrado.
  3. Diseñe un arreglo en el que se ingrese la cantidad de productos y sus respectivos precios, para la preparación de un plato, también se debe mostrar al final el costo a gastar.
  4. Ingresar n números, almacenarlos en un arreglo y mostrar el elemento mayor, el elemento menor y la media de todos ellos.

Para ver la soluciones cambia a la rama (branch) "solutions".

Recursos y enlaces

Inicio

Pruebas de conocimiento: