Appearance
Unidad 2: Conceptos de programación
Una vez que hayamos analizado el problema y diseñado un algoritmo que lo resuelva, necesitaremos codificarlo a través de un lenguaje de programación para que pueda ser ejecutado por una computadora, es decir, necesitamos construir un programa informático. Esto lo haremos escribiendo instrucciones en un lenguaje de programación.
Lenguaje de programación
Un lenguaje de programación es un conjunto de símbolos (sintaxis) y reglas (semántica) que permite expresar programas. Su sintaxis establece las reglas de su escritura (la gramática), y la semántica define los tipos de datos, instrucciones, declaraciones, y todos los elementos que constituyen el programa.
Los lenguajes de programación se pueden clasificar en:
- Lenguajes máquina
- Lenguajes de bajo nivel (ensamblador)
- Lenguajes de alto nivel
Los lenguajes máquina proporcionan instrucciones escritas en un “idioma” que entiende el microprocesador, aunque usualmente cada lenguaje sólo es comprendido por un conjunto acotado de microprocesadores. Las instrucciones son cadenas de 0 y 1 en código binario. Por ejemplo, la instrucción sumar los números 9 y 11, y asignarlo a la variable "x" podría ser:
esjs
01101011100010010000000000000000
10000011110000000100000000000000
10100011000000000000000000000000La principal ventaja de estos tipos de lenguajes es que permiten escribir programas que son ejecutados de manera directa por el microprocesador a gran velocidad, ya que los entiende perfectamente. La desventaja, claro está, es que para quienes tenemos que escribir los programas utilizando estos lenguajes de programación nos resulta bastante complicado comprenderlo, ya que no estamos acostumbrados a pensar en código binario. Además, como se dijo previamente, las instrucciones en código máquina dependen del hardware de cada computadora, por lo tanto, difieren entre una y otra. Si quisiéramos hacer un programa que pueda ser ejecutado en todos los tipos de computadoras, probablemente debamos escribir varias veces el mismo programa, ya que cada una tiene sus particulares.
Los lenguajes de bajo nivel por excelencia son los ensambladores o lenguaje assembler, y poseen instrucciones mucho más fáciles de recordar, aunque también dependen del hardware de cada computadora y necesitan ser traducidos a lenguaje máquina por un programa que también se llama ensamblador. Por ejemplo, la instrucción anterior de sumar los números 9 y 11 podría expresarse como:
MOV eax, 9 ; Carga el valor 9 en el registro eax
ADD eax, 1 ; Cuma 1 al valor en el registro eax
MOV [x], eax ; Almacena el resultado en la variable xLos lenguajes de alto nivel proporcionan sentencias mucho más fáciles de recordar y no dependen del tipo de computadora, aunque para ser ejecutados deben ser traducidos a lenguaje máquina por unos programas denominados compiladores o intérpretes. Un programa escrito en un lenguaje de alto nivel se conoce como programa fuente o código fuente; y el programa ya traducido, programa objeto o código objeto. Por ejemplo, el código fuente de un programa que realice la misma instrucción anterior, escrito en EsJS, sería:
esjs
mut x = 9 + 1Los lenguajes de alto nivel son los más utilizados, ya que nos permiten escribir un único programa que usualmente podrá ser ejecutado por todas las computadoras o al menos la mayoría. Las principales desventajas son que ocupan mayor lugar de memoria principal (RAM) y el tiempo de ejecución es mayor al de los programas escritos en los lenguajes máquina o lenguajes de bajo nivel.
EsJS
En este módulo utilizaremos EsJS, que es básicamente JavaScript pero con una sintaxis en Español.
EsJS no es realmente un lenguaje de programación; es un transpilador que se encarga de traducir el código con una sintaxis en Español, a su equivalente en JavaScript (en Inglés). Aunque, a efectos prácticos, podemos verlo como un lenguaje de programación que nos permite escribir programas utilizando palabras en Español, a diferencia de la gran mayoría de lenguajes del mercado, que están escritos en Inglés.
De esta manera, escribiremos nuestros programas con una sintaxis en Español, y se ejecutarán en nuestro propio Navegador Web (se recomienda Google Chrome).
Además, para poder centrarnos en la lógica del programa, sin pensar en elementos visuales, utilizaremos EsJS en "modo Terminal". Esto quiere decir que haremos uso del componente Terminal que provee @es-js/terminal, para que nuestros programas puedan leer/escribir datos al Usuario a través de una simple pero eficaz interfaz gráfica basada en texto.
Por ejemplo, el siguiente programa determina el día actual y, considerando una jornada laboral de Lunes a Viernes, indica si es un día laboral o un día de descanso. Se hace uso del componente Terminal para mostrar el resultado:
También haremos uso de la consola del Navegador Web, que nos permitirá ver los mensajes de error que se produzcan en tiempo de ejecución, y que nos ayudarán a depurar nuestro programa. EsJS Editor incluye de manera predeterminada una Consola, con la que podemos interactuar utilizando la palabra reservada consola.
Por ejemplo, el ejemplo anterior se podría re-escribir utilizando la Consola, de la siguiente manera:
La Consola y Terminal son muy similares, ambas permiten mostrar mensajes al Usuario. Sin embargo, la Consola no permite al Usuario interactuar con el programa, mientras que la Terminal sí. Por ejemplo, la Terminal permite al Usuario escribir texto, lo que nos permitirá crear programas que interactúen con el Usuario.
Elementos básicos
El objetivo general de un programa es transformar datos en resultados útiles para el usuario, es decir, en información. El programador es el encargado de definir de dónde provienen los datos, que será a partir de un dispositivo de entrada (teclado, disco, ratón, etc). Este proceso se conoce como entrada de datos, operación de lectura o acción de leer.
La salida de datos se realiza por medio de un dispositivo de salida (pantalla, disco, impresora, etc). Esto se conoce también como escritura o acción de escribir.
A continuación, veremos los elementos básicos sobre los la programación se basa para poder lograr dicho objetivo.
Palabra reservada
Una palabra reservada es una palabra especial que tiene un significado predefinido en un lenguaje de programación y no puede ser utilizada como un identificador o cualquier otro elemento del programa. Cada lenguaje de programación define sus propias palabras reservadas; y de esta manera le proporcionan al programador las herramientas para establecer las instrucciones y flujos del programa.
En EsJS existen múltiples palabras reservadas, que se pueden encontrar en la Documentación Oficial.
Por ejemplo, la palabra reservada consola representa un Objeto que nos permite interactuar con la Consola del Navegador Web, a través de diferentes métodos. El siguiente programa hace uso del método consola.escribir() para mostrar el mensaje "Hola mundo, desde EsJS!" en la Consola del Navegador:
Instrucción (acción)
Una instrucción (o también llamada declaración) representa una acción que el programa debe llevar a cabo. El conjunto de instrucciones que conforman el programa es el código fuente del mismo. Estas instrucciones las escribe la persona que programa en un lenguaje de programación determinado. Al momento de ejecutarse, estas instrucciones son traducidas a lenguaje máquina y almacenadas en la memora de la computadora que las ejecuta.
Un programa puede ser lineal, es decir, que sus instrucciones se ejecutan secuencialmente, sin bifurcaciones, decisiones ni comparaciones.

Por otro lado, un programa es no lineal cuando su secuencia se interrumpe por medio de instrucciones de bifurcación.

Además, una instrucción se puede ejecutar de manera síncrona o asíncrona.
Ejecución síncrona
Cada instrucción se ejecuta de manera secuencial: hasta que la instrucción actual no concluye, no comienza la siguiente. De esta manera, el siguiente programa mostrará la secuencia uno, dos, y tres siempre que se ejecute:
Ejecución asíncrona
Las instrucciones comienzan a ejecutarse de manera secuencial, sin embargo, no necesariamente se espera a que una instrucción concluya para comenzar la siguiente. Por ejemplo, el siguiente programa primero muestra uno. Luego, establece un temporizador de 10 milisegundos y se muestra tres inmediatamente, sin esperar a que el temporizador termine. Sólo después de transcurridos los 10 milisegundos se mostrará dos.
EsJS/JavaScript son lenguajes asíncronos. Esto permite escribir programas más eficientes, ya que pueden realizar varias tareas al mismo tiempo. Sin embargo, esto también puede aumentar la complejidad al momento de codificar el programa, ya que debemos controlar cómo y cuándo se ejecutan las instrucciones asíncronas.
Para manejar estas situaciones, EsJS/JavaScript cuenta con un objeto llamado Promesa que representa el resultado final (o el error) de una operación asíncrona. Además, podemos utilizar la palabra reservada esperar para indicarle al programa que espere a que la Promesa se resuelva antes de continuar con la ejecución.
Por ejemplo, cuando queremos pedirle al Usuario que ingrese un valor utilizando el componente Terminal de EsJS, podemos usar la función Terminal.leer(). Sin embargo, esta función es asíncrona, lo que significa que el programa no espera a que el Usuario ingrese el valor antes de continuar con la ejecución.
Para solucionar esto, podemos utilizar la palabra reservada esperar al llamar a la función Terminal.leer(). Esto le indica al programa que espere a que el Usuario ingrese un valor antes de continuar con la ejecución. De esta manera, podremos obtener el valor ingresado por el Usuario de manera síncrona.
Puedes abrir el EsJS Editor de este ejemplo y eliminar la palabra reservada
esperarpara notar la diferencia. Verás que en tal caso,Terminal.leer()devuelve inmediatamente el objetoPromesa, y la ejecución del programa continúa y concluye sin esperar a que el Usuario ingrese un valor.
Comentarios
Los comentarios son porciones de códigos que no serán ejecutadas. Usualmente se utilizan para documentar las diferentes partes del código. Existen dos tipos:
- De una sola línea: Se preceden de dos barras (o slash en inglés):
//. - De múltiples líneas: Comienzan con
/*y terminan con*/. Cualquier instrucción que se encuentre en el medio, será ignorada durante la ejecución.
Tipos de Datos
Un Dato es una expresión general que describe un objeto con el cual opera el algoritmo. Cada dato pertenece a un tipo de dato, que está determinado por un conjunto de valores ordenados y por las operaciones permitidas sobre esos valores. Los tipos de datos varían según los lenguajes de programación, pero más o menos todos poseen los siguientes:
Entero (Integer)
Subconjunto finito de los números enteros, cuyo rango depende del microprocesador en el que se ejecute.
| Valores | Rango | Operaciones |
|---|---|---|
| -3, -2, -1, 0, 1, 2, 3 | Depende del microprocesador | +, -, *, /, >, <, y Comparación |
Decimal/Real (Float)
Subconjunto de los números reales limitado tanto en tamaño como en precisión.
| Valores | Rango | Operaciones |
|---|---|---|
| -3.0, …, 3.5 | Depende del microprocesador | +, -, *, /, >, <, y Comparación |
Lógico (Booleano)
Conjunto formado por los valores verdadero y falso.
| Valores | Rango | Operaciones |
|---|---|---|
verdadero o falso | verdadero y falso | Producto lógico, suma lógica y negación lógica |
Carácter (Character)
Conjunto finito y ordenado de los caracteres que la computadora reconoce.
| Valores | Rango | Operaciones |
|---|---|---|
| Letras minúsculas, mayúsculas, símbolos, etc. | Código ASCII | Comparación y concatenación |
Cadena (String)
Sucesión de caracteres, delimitados por una comilla simple o dobles comillas. Por ejemplo: '¡Hola mundo!', "Universidad Católica de Salta".
| Valores | Rango | Operaciones |
|---|---|---|
| Letras minúsculas, mayúsculas, símbolos, etc. | Código ASCII | Comparación y concatenación |
Matriz (Array)
Una matriz es una colección de datos (de diferentes tipos de datos), que se almacenan en una posición de memoria. Cada dato o elemento de la matriz se identifica mediante un índice, que es un número entero que indica la posición del dato en la matriz, comenzando por 0. Por ejemplo, si tenemos una matriz de 5 elementos, los índices de los elementos serán 0, 1, 2, 3 y 4.
| Valores | Rango | Operaciones |
|---|---|---|
| Cualquier tipo de dato previamente descripto | El que corresponda | Acceso a un elemento mediante su índice, y múltiples operaciones relacionadas con Matrices |
Objeto (Object)
Un objeto es una colección de datos (de diferentes tipos de datos), que se almacenan en una posición de memoria. Cada dato o elemento del objeto se identifica mediante un nombre, que es una cadena de caracteres que indica la posición del dato en el objeto. Por ejemplo, si tenemos un objeto con 5 elementos, los nombres de los elementos serán nombre, apellido, edad, lugarDeNacimiento y fechaDeNacimiento.
| Valores | Rango | Operaciones |
|---|---|---|
| Cualquier tipo de dato previamente descripto | El que corresponda | Acceso a un elemento mediante su nombre, y múltiples operaciones relacionadas con Objetos |
Variable
Una variable es un objeto de memoria cuyo valor puede cambiar durante la ejecución del programa. Posee los siguientes atributos:
- Un nombre, que la identifica.
- Un tipo de dato, que describe el uso de la variable.
- Un valor, que describe el contenido.
En EsJS existen dos tipos de variables:
- De ámbito local: Sólo existen en el ámbito en las que se las define. Se declaran utilizando la palabra reservada
mut. - De ámbito global: Una vez declaradas, existen globalmente en cualquier ámbito del programa. Se declaran utilizando la palabra reservada
var.
En algunos lenguajes las variables deben ser declaradas indicando el tipo de dato asociado antes de ser usadas. Estos lenguajes son del tipo fuerte o fuertemente tipados, como por ej. C#, y Java. En otros, esto no es un requisito y pueden ser declaradas en cualquier momento durante la ejecución del programa. Estos son los lenguajes no tipados o débilmente tipados, como por ej. PHP, EsJS y JavaScript.
Constante
Una constante es un objeto de memoria cuyo valor, una vez definido, no puede ser modificado durante la ejecución del programa. Al declarar una constante, se le debe definir un valor, ya que no puede iniciar con un valor indefinido.
En EsJS una constante se declara de manera similar a una variable, sólo que utilizando la palabra reservada const:
Identificador
A las variables, constantes, funciones y otros objetos de un programa se les asigna identificador, es decir, un nombre que las identifique para poder ser utilizadas. Por lo general, este nombre está constituido por una o más letras, números y guiones bajos. Quien codifique el programa puede elegir el nombre que desee para cada identificador, siempre y cuando no coincidan con las palabras reservadas del propio lenguaje y no contengan espacios en blanco.
Se recomienda que el identificador elegido sea representativo. Por ejemplo, el identificador nombre_perro puede ser una buena elección para la variable que contenga el nombre de un perro. Pero en cambio, si esta variable contuviese el peso del perro, aunque teóricamente es correcto, desde ya que es una mala elección, ya que, si otra persona lee el código, esperaría obtener el nombre del perro en esa variable, no el peso.
Expresión
Una expresión describe un cálculo a efectuar cuyo resultado es un único valor. Es una combinación de operadores y operandos. Por ejemplo, la expresión 3 + 5 es una expresión aritmética que suma los valores 3 y 5, y devuelve el resultado 8.
Los operandos pueden ser variables, constantes u otras expresiones, y los operadores pueden ser de cadena, aritméticos, relacionales o lógicos.
Las expresiones se clasifican según el resultado que producen en:
- Numéricas: Opera con operadores aritméticos sobre operandos numéricos, produciendo un resultado también numérico. Son análogas a las fórmulas matemáticas, que generalmente operan con los siguientes operadores:
- Adición (
+) - Resta (
-) - Multiplicación (
*) - Cociente de la división entera (
/) - Módulo de la división entera (
%) - Exponenciación (
**)
- Adición (
- Alfanuméricas: Los operandos son del tipo alfanumérico y producen resultados también alfanuméricos. Por ejemplo, la concatenación es la operación que une dos o más cadenas de texto y se representa por doble punto (
..). - Booleanas (o Lógicas): Producen sólo 2 resultados:
verdaderoofalsoy se constituyen mediante los operadores relacionales y lógicos. Los relacionales son:- Operadores de relación
- Igual que (
==) - Distinto que (
!=) - Menor que (
<) - Menor o igual que (
<=) - Mayor que (
>) - Mayor o igual que (
>=)
- Igual que (
- Operadores lógicos
- Y lógico (
&&) - No lógico (
!) - O lógico (
||)
- Y lógico (
- Operadores de relación
Funciones
Una función es una porción de código que recibe uno o más valores (denominados argumentos o parámetros) y produce un valor denominado resultado. Está definida por el nombre que la identifica unívocamente y la lista de parámetros que requiere para su ejecución.
esjs
funcion suma(primerArgumento, segundoArgumento) {
retornar primerArgumento + segundoArgumento;
}Cuando se llama o invoca a una función, se utiliza su identificador en una expresión con los argumentos encerrados entre paréntesis. Los argumentos utilizados al momento de llamar a la función deben corresponderse con los argumentos declarados por la función, tanto en número como en orden:
Una función puede ser interna o intrínseca, es decir, definida por el propio lenguaje de programación; o externa, es decir, definidas por el usuario. EsJS/JavaScript cuentan con diversas funciones internas, que se pueden consultar en la Documentación Oficial.
| Función | Descripción |
|---|---|
consola.escribir(mensaje) | Muestra mensaje en la Consola del Navegador |
consola.limpiar() | Limpia el contenido de la consola |
Numero.aEntero(y) | Convierte una cadena de texto y a número entero |
Mate.absoluto(x) | Devuelve el valor absoluto de x |
Mate.potencia(base, exponente) | Devuelve la base elevada al exponente |
Nosotros también podemos crear nuestras propias funciones y en realidad es lo que más se suele hacer en programación ya que, de esta manera, podemos encapsular ciertas tareas y reutilizarlas desde distintas partes del programa, sin necesidad de estar repitiendo la lógica en cada parte donde se usará. Es decir, supongamos que estamos haciendo un programa para llevar la contabilidad de nuestro negocio. Sin duda una tarea repetitiva sería poder sumar distintos precios, para obtener un total. De esta manera, podríamos crear una función que se llame obtener_total a la que nosotros le pasamos la lista de precios con las que debe operar, y esperamos que nos devuelva un valor real.
Para declarar una función en EsJS, se debe indicar la palabra reservada funcion, luego el identificador de la función, y finalmente la lista de parámetros, entre paréntesis:
esjs
funcion nombre_funcion(parametro1, parametro2, parametroN) {
// Bloque de código...
}Dentro de la función, debe usarse la palabra reservada retornar para indicar el valor que devuelve la función.
Por ejemplo, podemos crear una pequeña función con un argumento numérico, que representa la edad de una persona, y determine si es mayor de edad o no, teniendo en cuenta que una persona es mayor de edad cuando tiene al menos 18 años. Una vez definida la función, podemos utilizarla más adelante en nuestro programa.
esjs
funcion es_mayor_edad(edad) {
si (edad >= 18) {
retornar verdadero
} sino {
retornar falso
}
}Esta función podría ser utilizada de la siguiente manera:
Módulos y paquetes
En EsJS, los módulos son archivos que contienen código que puede ser importado y utilizado en otros archivos. Los módulos pueden ser importados utilizando la palabra reservada importar:
esjs
importar { nombre_funcion } desde 'nombre_modulo'Por ejemplo, podemos crear un módulo llamado matematica que contenga una función llamada sumar que reciba dos números y devuelva la suma de ambos. Luego, podemos importar este módulo en otro archivo y utilizar la función sumar:
esjs
// matematica.esjs
exportar funcion sumar(a, b) {
retornar a + b
}esjs
// programa.esjs
importar { sumar } desde 'matematica.esjs'
Terminal.escribir(sumar(2, 3))En el ejemplo anterior, el módulo matematica se encuentra en el mismo directorio que el archivo programa.esjs. Sin embargo, también podemos importar módulos que se encuentren en otros directorios, utilizando la ruta relativa o absoluta del módulo. También es posible importar desde una url, por ejemplo, desde un servidor web, CDN, etc.
Control de flujo
En EsJS/JavaScript las instrucciones son ejecutadas en orden lineal, desde la primer línea de código hasta la última.
Por ejemplo, al ejecutar el siguiente programa, se ejecutan las siguientes acciones:
- Muestra en la Consola
"¡Hola mundo, desde EsJS!". - Crea una constante
hoy, a la cual le asigna el resultado de la expresióncrear Fecha()(que crea un objetoFechacon la fecha actual). - Crea una constante
dia, a la cual le asigna el resultado de la expresiónfecha.obtenerDia()(que obtiene el día de la constantehoy). - Crea una constante
mes, a la cual le asigna el resultado de la expresiónfecha.obtenerMes() + 1(que obtiene el mes de la constantehoy, y le suma 1). - Crea una constante
año, a la cual le asigna el resultado de la expresiónfecha.obtenerAño()(que obtiene el año de la constantehoy). - Muestra en la Consola una cadena de texto conformada por las constantes
dia,mesyaño(creadas en las líneas 3, 4 y 5, respectivamente).
Sin embargo, a veces necesitaremos ejecutar una instrucción sólo si una condición es verdadera o no; o repetir una misma instrucción un número determinado de veces mientras una condición sea verdadera. Para esto utilizaremos Estructuras de control, que controlarán y dirigirán el flujo de nuestros programas según las reglas que nosotros establezcamos.
Por ejemplo, podemos utilizar una estructura de control si para mostrar en la Consola el día de la semana en que estamos:
Para controlar el flujo de nuestro programa, utilizaremos las siguientes estructuras de control:
Estructura selectiva
Una estructura selectiva es aquella en la que se ejecutan unas instrucciones según se cumpla o no una determinada condición. La selección puede ser simple, doble y múltiple.
- Simple: Se evalúa la condición y, si el resultado es verdadero, se ejecuta un conjunto de instrucciones; en caso contrario se omite dicho conjunto de instrucciones.
esjs
si (condición) {
// Bloque de código...
}- Doble: Se evalúa la condición y, si el resultado es verdadero, se ejecuta un conjunto de instrucciones; caso contrario se ejecuta otro conjunto de instrucciones.
esjs
si (condición) {
// Bloque de código...
} sino {
// Bloque de código...
}- Múltiple: Se evalúa la condición y, según su valor, se ejecutará uno de los grupos de instrucciones preestablecidos para dicho valor.
esjs
elegir (expresión) {
caso 1:
// Bloque de código 1...
romper;
caso 2:
// Bloque de código 2...
romper;
porDefecto:
// Bloque de código por defecto...
romper;
}Por ejemplo, el siguiente programa puede leer un valor numérico e identificar si el mismo es un número par o impar, bajo la premisa de que un número es par, si el resto de la división por dos es igual a cero.
En este caso haremos uso del operador % (módulo), que devuelve el resto de una división entera. Por ejemplo, 12 % 10 producirá un resultado de 2. Por lo tanto, para que un número x sea par, debe cumplirse la condición x % 2 == 0.
Estructura repetitiva o iteración
Una estructura repetitiva o bucle es aquella en la que se ejecutan unas instrucciones mientras o hasta que se cumpla una determinada condición.
mientras: Se evalúa la condición y, mientras sea verdadero, se ejecuta un conjunto de instrucciones. La evaluación de la condición se hace al principio, por lo que las instrucciones se pueden ejecutar de 0 a n veces.
esjs
mientras (condición) {
// Bloque de código...
}hasta:Similar al bucle mientras, sólo que el conjunto de instrucciones se ejecuta una vez al principio, y luego se evalúa la condición para determinar si se debe seguir ejecutando el cuerpo del bucle. Por lo tanto, las instrucciones se pueden ejecutar de 1 a n
esjs
hacer {
// Bloque de código...
} hasta (condición)para: El cuerpo del bucle se ejecuta para un número determinado de veces, según cómo se declare:
esjs
para (declaración; expresión; sentencia) {
// Bloque de código...
}| Declaraciones | Descripción |
|---|---|
| Declaración | Se ejecuta una vez, antes de ejecutar el bloque de código. |
| Expresión | Define la condición para que el bloque de código sea ejecutado. |
| Sentencia | Se ejecuta luego de cada iteración del bucle. |
Por ejemplo:
Estructura anidada
Debemos tener en cuenta que tanto las estructuras selectivas como las repetitivas pueden ser anidadas dentro de otras. Por ejemplo, la estructura selectiva múltiple es una variación de varias estructuras selectivas dobles anidadas:
esjs
si (condicion) {
// Bloque de código...
} sino {
si (condicion) {
// Bloque de código...
} sino {
si (condicion) {
// Bloque de código...
} sino {
// Bloque de código...
}
}
}Sentencias de salto
Las sentencias de salto nos permiten que el flujo de un programa salte a otra parte. Las sentencias de salto más comunes son:
- Romper (break): Permite interrumpir la ejecución de un bucle y proseguir con el flujo del programa.
- Retornar (return): Permite retornar un valor y parar con la ejecución de una determinada parte del programa.
Ejemplos
Ejemplo: Determinar si un número es primo
Sabemos que un número es primo si y sólo sí es divisible por 1 y por sí mismo. De tal manera que un programa que calcule si el número ingresado por el usuario es primo o no podría ejecutar un ciclo, desde uno hasta el número, y cerciorarse de que el número es sólo divisible por 1 y por sí mismo. Para mayor eficiencia, si el algoritmo detecta que el número es divisible por cualquier otro número, detiene su ejecución, ya que es imposible que el número sea primo. De ésta manera evitamos realizar cálculos cuando ya no es necesario.
Como hemos visto previamente, el operador % nos devuelve el resto de una división entera, y, si un número X es divisible por Y cuando el resto de la división es igual a cero, podemos decir que x es divisible por y cuando se cumple la condición x % y = 0.
Ejemplo: Determinar si una contraseña tiene al menos un número
Es muy común que en muchas aplicaciones se requiera que la contraseña tenga al menos un número para aumentar la seguridad de la misma, entre otras medidas de seguridad. La siguiente función realiza esta tarea y devuelve un Booleano. Nótese que se hace uso de las funciones longitud, subcadena y valor. Para saber qué hace cada una, dirigirse a las especificaciones UPSAM v2.0.
