jueves, 12 de julio de 2012

Algoritmo Divisibles

Algoritmo que lee un número natural y entrega todos los números entre 1 y 1000 que son divisibles por aquel.

http://www.4shared.com/file/t8HhuKMT/Divisibles.html

Variables

Las variables son la piedra angular de un algoritmo. Los algoritmos básicamente procesan datos para obtener más datos, y esos datos tienen que guardarse en variables.

Para clarificar, supongamos que me piden un algoritmo que sume dos números. Podría escribir el siguiente algoritmo:


Este algoritmo sin duda funciona, pero sirve sólo para los números que se incluyeron como valores literales en él.

El programador podría responder a la observación anterior diciendo que puede cambiar los números en cualquier momento, y tiene toda la razón, pero la idea de los algoritmos y programas es que funcionen sin necesidad que el programador esté al lado modificándolos.

Visto lo anterior debemos modificar el algoritmo para que sume dos números cualesquiera, particularmente dos números que el usuario ingrese. Esto implica el uso de la instrucción Leer, y por lo tanto el uso de variables.



Lo que está bien: hay 2 Leer ya que son 2 números a sumar.

Lo que está mal: ambos números se leen en la misma variable.

Una variable estándar sólo permite guardar un dato, así que al guardar el dato léido la segunda vez se pierde el que se leyó primero.


La suma correcta es 111, pero el resultado es 98, o sea 49 + 49. El 62 se leyó y guardó, pero al leer y guardar el 49 en la misma variable el 62 se pierde y sólo queda el 49.

Hay más de una solución. La más obvia es usar dos variables en vez de una:



Nótese que cada variable que se usa:
  • Debe tener un identificador único
  • Debe declararse antes de usarse
  • Debe definirse del tipo correcto
Otra solución es sumar a medida que se lee:



Como sea cualquier solución va a implicar usar más variables.

Las variables usan memoria RAM, pero los computadores modernos tienen bastante RAM como para que el crear más variables no sea una preocupación por ese motivo. Una variable de tipo Entero usa 4 Bytes de RAM. Un computador con 2 GB de RAM tiene 2.147.483.648 Bytes, así que puedes apreciar la diferencia.

No obstante siempre el programador profesional cuida la cantidad de variables, ya que afectan la claridad y el rendimiento del algoritmo. No es el caso de nuestro algoritmo que es muy básico y pequeño.

En este caso el algoritmo ideal sería el siguiente:



miércoles, 11 de julio de 2012

Estructura de Control Para

El Para es una estructura de control iterativa que se usa cuando se sabe la cantidad de veces que debe ejecutarse el código bajo control:
Para «variable de control» <- «inicio» Hasta «final» Hacer
«código a iterar»
FinPara
La variable de control debe ser de tipo entero.
Definir «variable de control» Como Entero;
Igualmente el valor de inicio y el valor final deben ser enteros, expresiones que evaluén a números enteros.
Supongamos que primero leemos la cantidad de artículos que lleva el cliente, luego con un Para leemos el precio de cada artículo y lo vamos sumando para obtener el total.


En la línea 5 apreciamos que la variable de control es i. Si bien puede usarse cualquier identificador para la variable de control es una costumbre histórica que se use el identificador i para la misma.

El Para automáticamente suma 1 a la variable de control tras cada iteración. Cuando se sobrepasa el valor final el Para se detiene.

Algunas veces es necesario contar al revés, o de 2 en 2, o de algún modo especial. El Para tiene una claúsula opcional Con Paso para esas oportunidades. Por ejemplo para contar al revés:

Para contar de 3 en 3:

La especificación del paso debe ser una  expresión que evalué a número entero.

Estructuras de Control Iterativas

Cuando un mismo código debe ejecutarse varías veces seguidas conviene ubicarlo dentro de una estructura de control iterativa. Hay 3 estructuras de control iterativas:

  • Para
  • Mientras
  • Repetir

Algoritmo Carrera Loca

Uno de mis favoritos, simula una carrera de camionetas en pantalla, muy divertido y demostrativo del uso de la función AZAR.

http://www.4shared.com/file/9C-EJPEb/Carrera_Loca.html

Algoritmo Nota Final

Algoritmo que calcula la nota final de un alumno, tomando como datos su nota de presentación y la nota del examen, con ponderaciones de 60% y 40% respectivamente.

http://www.4shared.com/file/UCl6xDv-/Clculo_NF.html

Algoritmo Caja que da Vuelto

Algoritmo mejorado de la caja, donde se calcula el vuelto a dar.

http://www.4shared.com/file/dzL8be2O/Caja_que_da_Vuelto.html

Algoritmo Caja

Pequeño algoritmo para una caja que cobra los artículos que lleva un cliente.

http://www.4shared.com/file/rEcwHF8G/Caja.html

Algoritmo Valor Mano BlackJack

BlackJack, el extraño juego donde el AS vale 1 pero también vale 11, un misterio que a muchos no los deja dormir. Este algoritmo lee las dos cartas de una mano de BlackJack e indica cuál es el puntaje de acuerdo a las reglas de este juego.

http://www.4shared.com/file/n6HkQNjJ/Valor_Mano_BlackJack.html

Algoritmo BINGO

Si alguna vez has ido a un Bingo y te has preguntado cómo funcionaba la pizarra electrónica, aquí tienes una implementación en PSeInt.

http://www.4shared.com/file/3UDiodjC/Bingo.html

Algoritmo Barra Ociosa

Algoritmo de demostración de uso de ciclos, y que muestra una pantalla que se alarga y encoge de un lado para otro de la pantalla.

http://www.4shared.com/file/3VOJV2Fu/Barra_Ociosa.html

Algoritmo del Ascensor

Uno de mis favoritos, un ascensor que se mueve arriba y abajo por los 8 pisos de un edificio. Aparte de entretenido es una buena aplicación de las estructuras de control.

http://www.4shared.com/file/bvIKYOa1/Ascensor.html

Algoritmo Arreglo Personas

Algoritmo de demostración del uso de arreglos, con recorrido y todo.

http://www.4shared.com/file/TM_N_Hri/Arreglo_Personas.html

Algoritmo Área Rectángulo

Algoritmo básico que calcula el área de un rectángulo. Si estás comenzando te recomiendo lo veas.

http://www.4shared.com/file/Fns60kMv/rea_Rectngulo.html

Algoritmo Aprobador

Sencillo algoritmo que determina si un alumno está aprobado o no. Es una demostración del uso de las expresiones relacionales. Usa la escala de notas de Chile, donde un alumno con nota desde 4 hasta 7 está aprobado.

http://www.4shared.com/file/RLBUSjJd/Aprobador.html

Algoritmo Analizador de Notas

Este algoritmo analiza las notas que un profesor ingresa para sus alumnos. Usa la escala de notas de Chile, que es del 1 al 7, y donde un alumno con menos de 4 está reprobado. Si no eres de Chile te invito a modificarlo para la escala de notas de tu país.

http://www.4shared.com/file/lzvvu5S9/Analizador_de_Notas.html

Algoritmo Babilónico

El algoritmo babilónico es uno que viene de los tiempos de Babilonia para el cálculo de raíces cuadradas. No obstante su antigüedad es muy preciso, y todo un clásico en el mundo de la algoritmia.

http://www.4shared.com/file/c2OyeRTz/Algoritmo_Babilnico.html

Estructura de Control Si-Entonces

El Si-Entonces sirve para condicionar la ejecución de algún código. Dicho código se ejecuta si la condición del Sí-Entonces evalúa a verdadero.El código bajo control se encuentra entre el Si y el FinSi. Este código puede ser apenas una línea o cientos de líneas con todo tipo de instrucciones y estructuras de control.
Si «condición» Entonces
«código»
FinSi
La condición es una expresión lógica o relacional que da como resultado un valor lógico Verdadero o Falso. El arte de usar el Si-Entonces es la correcta construcción de la condición, la Némesis de los alumnos.

Supongamos que en una tienda se aplica un 15% de descuento si el cliente lleva más de 3 productos. El si del enunciado nos lleva al Si-Entonces del código:


La condición puede ser más o menos compleja. Supongamos que la tienda se pone más exigente para el descuento, y ahora se requiere no sólo que lleve más de 3 productos, sino que el precio sea mayor o igual a $5.000 y que el día sea lunes.


El Si-Entonces tiene una claúsula opcional Sino que sirve para poner código que se ejecuta en caso que la condición evalúa a Falso.
Si «condición» Entonces
«código si condición evalúa a Verdadero»
Sino
«código si condición evalúa a Falso»
FinSi

Volvamos a la tienda y su promoción. Si el cliente lleva más de 3 artículos se le regala un osito de peluche, caso contrario se le regala un loli.


El Sino es opcional.



martes, 10 de julio de 2012

Asignación

La asignación es la operación mediante la cual un dato es guardado en una variable. Suponiendo que el dato es el nombre "Eusopio" y la variable es Nombre, la asignación en PSeInt puede ser así, simulando una flecha hacia la izquierda:

O también así:

Esta última es la que prefiero y voy a usar, no obstante que puede causar cierta confusión.

¿Confusión?

Sí, ya que el operador relacional de igualdad también es el símbolo =  Por esa razón muchos profesores prefieren la flecha, así no confunden a los alumnos.

¿Entonces por qué esa obstinación en usar el = para la asignación?

Porque ningún lenguaje de programación usa la flecha para la asignación, por el contrario la mayoría usa el =

En el lado izquierdo de una asignación debe ir una variable, del tipo adecuado para recibir el dato que resulta de la evaluación de la expresión del lado derecho.

Sí, del lado derecho va una expresión. Por ejemplo:

Nombre = "Eusopio " + "Marambio";

La expresión puede ser más o menos compleja, o tan simple como una variable o un valor literal. Y la expresión puede ser tan curiosa como esta, que es una expresión relacional de igualdad:

EsEusopio = Nombre = "Eusopio";

¿Verdad que se ve curiosa?

EsEusopio es la variable, de tipo lógico para que no haya problemas. Nombre = "Eusopio" es la expresión relacional, que evaluará a Verdadero o Falso dependiendo del dato contenido en Nombre. El resultado se guarda en EsEusopio.

Expresiones Relacionales

Las expresiones relacionales comparan dos datos y entregan un valor de verdad: Verdadero o Falso.

La comparación es respecto a si un dato es igual, distinto, mayor o menor que el otro. Los operadores relacionales en PSeInt son:


Resulta obvio el comparar dos datos numéricos, por ejemplo:

54 >= 39

Claro que lo más común es que uno o ambos datos estén dentro de una variable:

Edad >= 39

También es posible que uno o ambos valores sean expresiones matemáticas:

PrecioNeto * 1.19 > 45000

Como los operadores relacionales tienen menor precedencia que los matemáticos entonces primero se evalúa la expresión matemática y luego se evalúa la relación.

Los operadores relacionales trabajn sólo con dos operandos. Si queremos determinar si la edad está entre 18 y 65 no sirve lo siguiente:

18 <= Edad <= 65

En ese caso hay que usar 2 operaciones relaciones unidas mediante un operador lógico:

18 <= Edad Y Edad <= 65

Como los operadores relacionales tienen mayor precedencia que los lógicos, primero se evalúan las expresiones relacionales y sus resultados se usan en la expresión lógica.

Aunque no es necesario en PSeInt muchos programadores recomiendan usar paréntesis, tanto por claridad como por la certeza que dan respecto a la correcta evaluación de la expresión.

(PrecioNeto * 1.19) > 45000

(18 <= Edad) Y (Edad <= 65)

Las cadenas también pueden compararse mediante los operadores relacionales:

MiNombre <> "Eusopio"

Las cadenas se comparan caracter a caracter, y el orden se determina mediante la tabla UNICODE. Por ello es que:
  • Las mayúsculas siempre son distintas a las mínúsculas
  • Las mayúsculas siempre son mayores que las minúsculas
  • La ñ y las vocales con tilde son mayores a todas las otras letras
  • Los dígitos son mayores que todas las letras
  • El espacio en blanco es menor que todas las letras y dígitos
  • Las cadenas se van comparando caracter a caracter, de izquierda a derecha, hasta que es posible determinar la relación o una de las cadenas se termina, en cuyo caso la cadena más larga es mayor
Aplicando esas reglas resulta que:
  • "EUSOPIO" es mayor que "eusopio"
    • La primera cadena está en mayúsculas
  • "Ramón" es mayor que "Ramon"
    • La o con tilde es mayor que la o sin tilde
  • "Mayo" es distinto a "mayo"
    • La M mayúscula es mayor que la m minúscula
  • "Resobar" es menor que "Resonar"
    • La b es menor que la n
  • "Jaja" es mayor que "Ja"
    • Al terminarse Ja automáticamente Jaja que es más larga resulta mayor






El Operador Módulo y los Dígitos de un Número

El operador módulo, en PSeInt MOD o %, entrega el resto de la división entera. Por ejemplo:

19 % 4

Entrega el valor 3 ya que 19 dividido 4 es 4 con resto 3.

Un uso común del operador módulo es para dividir un número en sus dígitos. Supongamos el número:
93084

 El dígito de las unidades es el más fácil de obtener:

93084 % 10

Nos entrega el 4.

Para el resto de los dígitos es una combinación de módulo y la función TRUNC. Por ejemplo, para el dígito de las centenas:

TRUNC(93084 / 100) % 10

Nos entrega el 0.

Para el resto de los dígitos es la misma expresión, sólo va cambiando el valor por el cual se divide dentro del TRUNC. Por ejemplo, para las decenas de miles se divide por 10000, muy simple:

TRUNC(93084 / 10000) % 10

Nos entrega el 9.

Claro que normalmente el número a desglosar está en una variable:

TRUNC(x / 10000) % 10

Funciones

Una función es un procedimiento con nombre que recibe datos y entrega un resultado. Los lenguajes de programación permiten que los programadores puedan crear sus propias funciones, PSeInt no.

Para las operaciones más comunes los lenguajes de programación traen funciones pre-definidas, y PSeInt no es la excepción. Estas son las funciones de PSeInt:


Son funciones básicas, que reciben un sólo dato. Deben escribirse tal cual se muestra y con el dato entre paréntesis. El dato puede ser una expresión. Por ejemplo:

REDON(5.43*2)

Nos entrega el resultado de la expresión 5.43 * 2 redondeado a un valor entero. Se usan las reglas estándar de redondeo.

Precedencia y Paréntesis

En programación las expresiones se evaluan de izquierda a derecha y según precedencia.

La precedencia de operadores indica el orden en que los operadores se evalúan. Por ejemplo, las multiplicaciones y divisiones tienen mayor precedencia que las sumas y restas, por lo que se evaluan primero que ellas.

Supongamos la siguiente expresión:

3 + 4 * 5

Si realizo esta operación en la calculadora de Windows obtengo el resultado 35:


Pero si cambio a la configuración de calculadora científica y vuelvo a realizar la misma operación el resultado es diferente:


La diferencia se debe a que en modo científico la calculado aplica precedencia, lo mismo que en los programas computacionales y los algoritmos de PSeInt.

3 + 4 * 5

Con la precedencia se calcula primero la multiplicación 4 * 5 que da 20 y luego se suma 3 siendo el resultado 23.

Para obtener el resultado 35 debemos usar los paréntesis. Las sub-expresiones entre paréntesis tienen la mayor precedencia por lo que se calculan primero, siempre evaluando la expresión completa de izquierda a derecha.

(3 + 4) * 5

Expresiones Matemáticas

Las expresiones matemáticas son aquellas que evalúan a un resultado numérico. O sea que son las típicas fórmulas matemáticas que vemos en las clases de cálculo. Por ejemplo:


La complicación es ¿cómo se escribe una fórmula matemática en PSeInt? Para ello comenzamos con los operadores matemáticos:

+ Suma
- Resta
* Multiplicación
/ División
^ Potenciación

No tiene sentido explicar lo obvio, así que paso directo a lo menos obvio.

En la fórmula de arriba hay una potenciación: r3. En PSeInt se escribe así:

r^3

En la misma formula hay una multiplicación implícita entre π y r3..

En programación la multiplicación siempre hay que ponerla en forma explícita.

Tomando en cuanta dicha máxima la cosa queda así:

3.14159265 * r^3

Como PSeInt no tiene implementado π no queda más que poner su valor en forma literal.

La fracción 43 debe escribirse como una división:

4/3
Ahora podemos armar todo:

V = (4/3) * 3.14159265 * r^3

Los paréntesis son para aclarar que la división corresponde a una fracción. Pero los paréntesis tienen un uso más relevante que se verá en otra entrada.

lunes, 9 de julio de 2012

Expresiones

Uyuyuy, las expresiones, uno de los temas más peludos. ¿Por dónde comienzo?

Una expresión es toda línea que antes de usarse debe evaluarse para obtener un resultado

¿Poco claro? Tal vez con algunos ejemplos pueda aclararse.

x = 45;

Del lado izquierdo tenemos una variable, y del lado derecho una expresión.

¿Una expresión? Pero si lo que se ve es un valor literal.

Ciertamente, es un valor literal, pero también es una expresión, ya que antes de usarse se evalúa para obtener el valor a guardar en x.

Es una expresión, simple y de resultado obvio, pero expresión al fin y al cabo.

x = y;

Otra vez del lado derecho tenemos una expresión, cuya evaluación nos va a entregar el valor contenido en y, valor que se guardará en x.

Claro que no todas las expresiones son tan simples. Veamos esta:

Aquí la evaluación no es tan sencilla, pero como la hace el computador eso no nos preocupa. Lo que debe preocuparnos es escribir en forma correcta la expresión, lo que veremos más adelante.

La evaluación de una expresión entrega un resultado cuyo tipo depende de las operaciones realizadas. Por ejemplo:
En este caso la expresión, que es una comparación, entrega un valor lógico, así que la variable x debe ser de tipo Logico porque sino vamos a tener el clásico error 125 de incompatibilidad de tipos.


Las expresiones son un tema complejo, que iré tratando en varias entradas para hacerlo más simple en la medida que sea posible.

Comentarios

Los comentarios son texto explicativo que se añade al algoritmo o programa para que quien lo lea lo pueda entender mejor. No afectan para nada la ejecución.

Un comentario se comienza con doble barra inclinada, y termina al terminar la línea.

En este caso el comentario aclara que el sueldo que se lee corresponde al sueldo líquido. Claro que si le cambiamos el identificador a la variable el comentario ya no es necesario.

 Comentarios obligados para los programadores profesionales son el nombre del programador y la fecha de creación del algoritmo:

El buen criterio señala los comentarios apropiados, tampoco es la idea que llenemos el programa de comentarios ya que el exceso va a molestar más que ayudar.

El Título del Proceso

En PSeInt el proceso que corresponde al programa viene predefinido con el identificador sin_titulo:



Podemos dejarlo así, pero es de programadores profesionales asignarle un identificador que sea un título adecuado para el algoritmo. Por ejemplo:

Inicialización de Variables

El perfil que uso en PSeInt no obliga a inicializar las variables.


Lo hago así no porque sea más cómodo (aunque en realidad lo es), sino porque se corresponde más con la realidad de los lenguajes de programación.

Cuando se declaran variables automáticamente se les asigna un valor predefinido por el lenguaje. En PSeInt esos valores predefinidos son:
  • Entero
    • 0
  • Real
    • 0
  • Cadena
    • ""
  • Logico
    • Falso
Inicializar es asignar en forma explícita un valor a una variable antes de usarla en un proceso:



En el ejemplo la variable x se inicializa en la línea 5 antes de comenzar el proceso de la línea 8. Alguién podrá decir que no era necesario ya que la definición de x automáticamente le asigna el valor 0, y tiene razón, pero hay una máxima de los programadores que dice así:

Entre inicializar y no inicializar, siempre es mejor inicializar.

La razón es muy simple: así se está 100% seguro.

¿Con qué valor se debe inicializar?

Con aquel valor que resulte más adecuado comenzar el proceso, así que la respuesta es el "depende", que aunque es la típica contestación cuando no se sabe, es la respuesta correcta en este caso: depende.

La Cadena o String Vacío

Hay una cadena o string muy especial: la cadena vacía.

La cadena vacía esta....¡vacía!, lo que quiere decir que tiene.... !nada¡

Para entenderlo nada mejor que un ejemplo. La siguiente cadena:

"        "

No es la cadena vacía, porque está repleta de.... ¡espacios en blanco! Y un espacio en blanco por muy espacio o blanco que sea es un caracter que ocupa espacio. Parece un trabalenguas pero es la verdad.

La cadena vacía no tiene nada. Entre las comillas delimitadoras no hay nada, lo que deja a las comillas pegadas entre sí.

""

Aunque no lo parezca la cadena vacía es bastante útil. Por ejemplo, en PSeInt para saltar una línea en la pantalla se usa Escribir con una cadena vacía:

Escribir "";

El maldito punto y coma ;

El perfil que uso en PSeInt establece el punto y coma como separador de instrucciones.


Si no se usa ese perfil el modo de separar las instrucciones es poner cada una en líneas separadas.

¿Por qué elegí usar el punto y coma para separar instrucciones?

Porque aunque más complicado es más realista respecto a la mayoría de los lenguajes de programación modernos.

¿Por qué lo de "maldito" en el título?

Porque es el típico error que te tiene 10 minutos buscando hasta que te das cuenta que te faltó o sobró un punto y coma.

En más de algún sitio podrás encontrar que te dicen: El punto y coma va al final de cada lína.

Falso de falsedad absoluta. Hay líneas que definitivamente no deben llevar punto y coma al final, y que si lo pones genera un error.

¿Entonces dónde va el dichoso punto y coma?

El punto y coma va donde termina una instrucción.

Pero si no es una instrucción entonces no lleva punto y coma.

¿Si "no es una instrucción"?

Claro, porque además de las instrucciones tenemos las estructuras de control, y las marcas de bloque, ninguna de las cuales lleva punto y coma al final.
  • llevan punto y coma
    • Instrucciones
  • NO llevan punto y coma
    • Estructuras de control
    • Marcas de bloque

Por ejemplo, la estructura de control Repetir por ser precisamente una estructura de control no lleva punto y coma:


 
  • Las líneas 4 y 5 son instrucciones que llevan punto y coma al final.
  • Las líneas 3 y 6 corresponden a la estructura de control Repetir, no llevan punto y coma
  • Las líneas 1 y 8 son marcas del bloque de Proceso, no llevan punto y coma

Leer y Escribir

Para leer datos que el usuario ingresa se usa la instrucción Leer.

Para escribir datos en pantalla se usa la instrucción Escribir.

Poco original, ¿verdad?

Un dato que se lee tiene, sí o sí, que dejarse en una variable, variable que debe aparecer a continuación de Leer.

Leer Variable;
Ejemplos:
  • Para leer la edad de un usuario en la variable Edad:
    • Leer Edad;
  • Para leer la dirección de una casa en la variable Dirección:
    • Leer Dirección;
Escribir puede usarse con una variable, en cuyo caso aparece el dato contenido en la variable

Escribir Variable;

O con un valor literal de algún tipo, en cuyo caso aparece el mismo valor en pantalla:
  • Un valor literal Entero:
    • Escribir 5623;
  • Un valor literal Real:
    • Escribir 17.238;
  • Un valor literal Cadena:
    • Escribir "Hola Eusopio";
  • Un valor literal Logico:
    • Escribir Verdadero;
 O con una expresión de algún tipo, en cuyo caso aparece el resultado de la expresión en pantalla:
  • Una expresión matemática:
    • Escribir 19*45;
  • Una expresión de cadena:
    • Escribir "Hola " + "Eusopio";
  • Una expresión lógica:
    • Escribir 43 >= 19;
Y finalmente una combinación de todas ellas usando coma para separar los distintos elementos:
    • Escribir "Hola Eusopio, tú tienes ", Edad, " años";
    • Escribir "Eusopio, su situación de reprobación es: ", Nota<4;
Escribir automáticamente salta a la línea siguiente. Si se quiere evitar ese salto se puede usar el modificador Sin Saltar al final del Escribir:
    • Escribir "Hola Eusopio, tú tienes ", Edad, " años" Sin Saltar;

Variables

Una variable es un elemento que puede contener datos dentro de un programa o algoritmo. Las variables son creadas por el programador y deben tener su identificador.

Por ejemplo, si queremos guardar el dato de la edad del usuario podemos crear, debemos crear una variable para ello.

¿Debemos?

Sí, porque los datos que se leen o se generan deben, sí o sí, estar guardados en variables.

Dado el perfil que uso para mis algoritmos se requiere que toda variable que se va a usar primero se defina.
Definir Edad Como Entero;

Se puede cambiar el perfil para que no se requiera la definición previa, pero no lo recomiendo.


Una variable se define de un tipo dado, y esa definición no se puede cambiar posteriormente dentro del algoritmo.

Definida la variable, ésta sólo puede contener datos del tipo indicado.

Edad = "49";

Al tratar de guardar el dato vamos a tener un error, ya que Edad es de tipo Entero y estamos tratando de guardar un dato tipo Cadena.



Si el dato se lee ya es responsabilidad del usuario el ingresar un dato correcto.


En este caso el error del usuario fue escribir "años".

Dentro de un programa podemos definir cuantas variables necesitemos. Por ejemplo:

Definir EdadTitulación Como Entero;
Definir EdadCasamiento Como Entero;
Definir EdadJubilación Como Entero;

Si bien lo anterior es lo recomendado por orden y claridad, también es posible usar una sola variable para los 3 datos. Por ejemplo la variable Edad, donde guardamos primero la edad de titulación, luego la de casamiento y finalmente la de jubilación.

Edad = 22;
Edad = 28;
Edad = 65;
El inconveniente en este caso es que sólo queda guardado el último valor, los anteriores se pierden. Una variable sólo puede guardar un dato a la vez.

Identificadores

Un identificador es el nombre que un programador le da a un elemento que crea dentro de un programa o algoritmo.

Hay reglas básicas para los identificadores que siempre debes seguir:
  • No se puede usar una palabra reservada como idenficador
  • Dos elementos distintos no pueden tener el mismo identificador
  • Un identificador siempre comienza con una letra
  • Un identificador no puede tener espacios en blanco
    •  Escribe todo junto o usa guiones bajos _ en vez de los espacios
  • Un identificador sólo puede tener:
    • letras
    • dígitos
    • guión bajo _
Ejemplos de identificadores correctos e incorrectos:
  • Número
    • Respeta las reglas
  • Mi Número
    • Tiene un espacio en blanco
  • Número1
  • 5PorCiento
    • Comienza con un dígito
  • Autor&Intérprete
    • Caracter & no permitido
  • Mejor_Nota
    • Respeta las reglas

Configuración de PSeInt

Una de las cosas que me carga de PSeInt es la configuración de las "Opciones del Lenguaje".



¿Por qué me carga?

Porque al cambiar algunas opciones puede suceder que un algoritmo que antes funcionaba lo más bien deje de funcionar.

Imagínate que descargas uno de mis algoritmos, lo abres en PSeInt, le das Ejecutar y te dice que tiene errores, y no ejecuta. Seguro que pensarías "Que penca este profe, sus algoritmos no funcionan".

Para evitar este problema te muestro las opciones del lenguaje que yo uso, para que tú uses las mismas al ejecutar los algoritmos de este blog.

Selecciona Flexible y luego clic en Personalizar.


Deja las opciones tal cual se ven en esta captura y clic en Aceptar.


No te voy a decir que este perfil de opciones es el mejor, porque ningún perfil es mejor que otro, simplemente son distintos. Pero este es el perfil que uso en este blog.

Datos Logico

El tipo Logico tiene sólo dos datos:

Verdadero
Falso

Esos datos significan exactamente lo mismo que sus nombres indican. Son muy, pero que muy útiles. Ya lo irás viendo a medida que nos adentremos en el mundo de la algoritmia.

Cadenas que parecen Números y se Concatenan

Una típica confusión es cuando se tiene una cadena que parece número. Por ejemplo:

"548.32"

Parece número, pero es una cadena, lo sabemos por las comillas que la delimitan.

Las cadenas no se pueden operar matemáticamente, porque no son números, son cadenas. Por ejemplo, si tratamos de restar:

"4" - "2"

Nos va a dar un error de este porte, especificamente el ERROR 6: Operador incorrecto.



Pero si tratamos de sumar:

"4" + "2"

No nos da error, por el contrario ejecuta y nos entrega un resultado bastante curioso:


¿Qué pasó?

Sucede que el + que normalmente es la suma se transforma en concatenación cuando se le dan cadenas en vez de números.

¿Concatenación?

La concatenación lo que hace es pegar cadenas, una a continuación de la otra, lo que explica el resultado obtenido.

Datos Cadena y Caracter

Si bien en muchos lenguajes computacionales los datos Cadena y Caracter son diferentes en PSeInt son lo mismo.

Una cadena (o String) es cualquier texto que se te ocurra, por ejemplo:

Hola Eusopio, escríbeme a carlonsium@gmail.com

Pero en PSeInt y en los lenguajes de programación ese texto hay que delimitarlo.

¿Delimitarlo?

Delimitar significa indicar donde comienza y donde termina la cadena. En PSeInt se delimita mediante las comillas simples o dobles.

Con comillas dobles:

"Hola Eusopio, escríbeme a carlonsium@gmail.com"

Con comillas simples:

'Hola Eusopio, escríbeme a carlonsium@gmail.com'

¿Y qué tal si quiero comillas dobles o simples dentro de mi cadena?

Bueno, los lenguajes de programación tienen solución para eso, PSeInt no, así que te vas a tener que aguantar y no usar comillas dentro de tu cadena.

Datos Entero y Real

Dentro de los programas computacionales, y también en los algoritmos de PSeInt, los números no se escriben como nosotros solemos escribirlos.

  • Para la separación entre la parte entera se usa el punto y no la coma
    • En vez de 13,94 se escribe 13.94
  • No se usa ningún separador de miles ni millones
    • En vez de 13.945.000 se escribe 13945000
  • No se añade ningún texto ni caracter adicional
    • En vez de $45.300 se escribe 45300
    • En vez de 85,3 kg. se escribe 85.3
  • El porcentaje se escribe en forma fraccionaria
    • En vez de 73,6% se escribe 0.736
    • En vez de 5% se escribe 0.05

Tipos de Datos

Los datos que puede procesar un algoritmo son de 5 tipos básicos:
  1. Números Enteros
  2. Números Reales (con parte fraccionaria)
  3. Texto, también conocidos como Cadena o String
  4. Caracteres individuales
  5. Valores lógicos, también conocidos como Boolean
En PSeInt cada tipo básico tiene su palabra reservada, que se explica por sí sola:
  1. Entero
  2. Real
  3. Cadena
  4. Caracter
  5. Logico
No obstante vale la pena aclarar que finalmente todos los datos son representados internamente en el computador como números.
  • Los caracteres se representan internamente mediante su código UNICODE, que es un número
  • Los valores lógicos se representan así:
    • 0 para Falso
    • 1 para Verdadero
Pero aún hay más, la representación interna es en numeración binaria, que usa sólo los dígitos 0 y 1. Eso significa que los números que nosotros usamos son convertidos a binario cuando ingresan al computador, se procesan en binario y los resultados son en binario, y cuando se muestran en pantalla son convertidos de binario a números normales.

¿Qué problema hay con ello?

Pues que entre la conversión a binario y luego de vuelta se pueden producir errores de redondeo. En este ejemplo vemos la demostración de aquello.

Datos e Información

Los algoritmos computacionales lo que hacen es procesar datos, y como resultado de ese proceso se obtienen otros datos.

Datos → Algoritmo → Datos

Cuando un dato es usado para tomar decisiones se le da el nombre de información.

Información: dato que es usado para tomar decisiones

Muchas veces se dice que un algoritmo toma datos y genera información, aunque no siempre aquello es cierto, ya que como vimos depende del uso que se le dé a los datos generados.

Datos → Algoritmo → Información

domingo, 8 de julio de 2012

Palabras Reservadas

Las palabras reservadas son aquellas que el lenguaje usa para fines específicos y que no pueden ser usadas para ningún otro fin, particularmente no pueden ser usadas como identificadores.

Muchos lenguajes proveen en su documentación una lista de sus palabras reservadas, que van desde un par de docenas a un par de cientos como mucho. Nunca son tantas como para de a poco no ir conociéndolas.

Lamentablemente PSeInt no tiene una lista de sus palabras reservadas, así que las tendremos que ir aprendiendo en el camimo.

Primer Algoritmo en PSeInt

Al ejecutar PSeInt por primera vez verás esta pantalla:

Las palabras que están en negritas y en azul son palabras específicas del pseudolenguaje de PSeInt, las famosas palabras reservadas.

Vamos a desarrollar un algoritmo que muestre el número 666 en pantalla. La instrucción precisa es:

Escribir 666;

Escribir es la palabra reservada para hacer que algo aparezca en pantalla. El punto y coma es para indicar que la instrucción termina precisamente ahí.

Simplemente digita eso mismo de modo que quede así:

 Para hacer que funcione tienes 3 modos, equivalentes entre sí:
  • Clic en la punta de flecha verde

  • Menú Ejecutar opción Ejecutar

  • Tecla F9


Usa la que más te acomode. El resultado es esta pantalla:


Para que este preciado primer algoritmo no se pierda lo vas a guardar. Igual que para ejecutar tienes 3 alternativas equivalentes:
  • Clic en el disquete de más a la izquierda

  • Menú Archivo opción Guardar

  • Tecla Ctrl-S

Le pones un nombre de tu elección, como tipo de archivo seleccionas "Algoritmos en pseudocodigo", clic en "Guardar" y ya está listo.