Un algoritmo es una sucesión de pasos ordenados lógicamente para llegar a un resultado correcto y dar solución a un determinado problema.
Para entender mejor un algoritmo es necesario entenderlo en pseudocodigo.
El Pseudo-código
Las características del este pseudolenguaje fueron propuestas en 2001 por el responsable de la asignatura Fundamentos de Programación (Horacio Loyarte) de la carrera de Ingeniería Informática de la FICH-UNL.
Las premisas son:
-.Sintaxis sencilla.
-.Manejo de las estructuras básicas de control.
-.Solo 3 tipos de datos básicos: numérico, carácter /cadenas de caracteres y lógico (verdadero-falso). -.Estructuras de datos: arreglos.
Forma General de un Algoritmo en Pseudocódigo
Todo algoritmo en pseudocódigo tiene la siguiente estructura general:
INICIO O ENTRADA DE DATOS
.
.
PROCESO : (Los datos ingresados son procesados
para luego convertirse en información.)
.
.
SALIDA DE INFORMACIÓN
En otros libros o programas pueden encontrar la siguiente estructura:
Proceso SinTitulo
acción 1;
acción 1;
.
.
.
acción n;
FinProceso
El ejemplo más simple es hacer una Suma, que muestra un pequeño algoritmo para sumar dos números y mostrar el resultado, sirve como ejemplo para observar la estructura básica de un programa. Además de la sintaxis obligatoria, se incluyen comentarios que ayudan a entender el código, y se separan claramente sus tres partes: carga de datos, cálculo, y presentación del resultado.
// este es el ejemplo más simple de esta ayuda,
// toma dos numeros, los suma y muestra el resultado
Proceso Suma
Definir A,B,C como Reales;
// para cargar un dato, se le muestra un mensaje al usuario
// con la instrucción Escribir, y luego se lee el dato en
// una variable (A para el primero, B para el segundo) con
// la instrucción Leer
Escribir "Ingrese el primer numero:";
Leer A;
Escribir "Ingrese el segundo numero:";
Leer B;
// ahora se calcula la suma y se guarda el resultado en la
// variable C mediante la asignación (<-)
C <- A+B;
// finalmente, se muestra el resultado, precedido de un
// mensaje para avisar al usuario, todo en una sola
// instrucción Escribir
Escribir "El resultado es: ",C;
FinProceso
Variables
Una variable en un algoritmo computacional es una posición de memoria donde se puede almacenar información.
Por ejemplo, si un programa debe obtener el área de un triángulo, seguramente la base del mismo y su altura se carguen en memoria en dos variables para poder realizar el cálculo.
El resultado, probablemente también se asigne en una variable luego del cálculo para luego informarlo al usuario.
Como su nombre lo indica, el valor almacenado en una variable puede ir variando a medida que el programa avanza.
En un pseudocódigo el concepto es similar.
Una variable representa un lugar donde guardar cierta información.
En un algoritmo o programa se hace referencia a una variable mediante un identificador (el nombre de la variable).
Un identificador debe comenzar con letras, y puede contener solo letras, números y el guión bajo.
No puede contener ni espacios ni operadores, ni coincidir con una palabra reservada o función del lenguaje, para no generar ambigüedad.
Ejemplos de identificadores válidos son: A, B, C, Lado1, Total, Nombre_y_Apellido, DireccionCorreo, ...
En la mayoría de los lenguajes reales los nombres de variables no pueden contener acentos, ni diéresis, ni eñes.
En algunos lenguajes se puede guardar cualquier información en cualquier variable, mientras en otros las variables solo pueden guardar cierto tipo de información.
Por ejemplo, si una variable se utiliza para guardar números, no puede utilizarse luego para guardar texto. Este tipo se puede declarar explícitamente con la palabra clave adecuada dependiendo del lenguaje de programación que se este utilizando, o se puede dejar que el intérprete intente deducirlo a partir de los datos que se guardan en la misma y la forma en que se la utiliza en el algoritmo.
Tipos de Datos Tipos Simples: Numérico, Lógico, Carácter.
Estructuras de Datos: Arreglos.
Definición explícita de variables.
La instrucción definir permite explicitar el tipo de una o más variables. Esta definición puede ser opcional u obligatoria dependiendo del tipo de lenguaje en el que se este programando.
Una variable debe definirse antes de ser utilizada por primera vez. Los arreglos, se definen utilizando su identificador (sin subíndices ni dimensiones) antes o después de dimensionarlos, y el tipo aplica para todos los elementos del mismo (ya que se trata de una estructura de datos homogénea).
Los tipos posibles son NUMERO, NUMERICO, REAL, ENTERO, LOGICO, CARACTER, TEXTO, CADENA.
NUMERO, NUMERICO y REAL son sinónimos para el tipo de datos numérico básico, que puede almacenar tanto números reales como enteros. El tipo ENTERO es una especialización que sólo permite almacenar valores enteros; cualquier valor no entero que se lea o asigne en una variable de este tipo será truncado.
Una variable de tipo LOGICO sólo puede tomar los valores VERDADERO y FALSO, pero cuando se lee una variable ya definida como lógica, el usuario puede ingresar también las abreviaciones V y F, o 0 y 1.
CARACTER, TEXTO y CADENA son sinónimos para definir variables de tipo carácter. Estas pueden contener cero, uno o más caracteres arbitrarios y no tienen una longitud máxima. Si se declara una variable de este tipo y en una lectura el usuario ingresa un número o un valor lógico, se asignará una cadena que contiene el texto ingresado (ejemplo: "1", "VERDADERO", etc).
Estructuras de Control
Condicionales
-.Si-Entonces
-.Selección Múltiple
Repetitivas
-.Mientras
-.Repetir
-.Para
Condicional Si-Entonces
La secuencia de instrucciones ejecutadas por la instrucción Si-Entonces-Sino depende del valor de una condición lógica.
Si <condición> Entonces
<instrucciones>
Sino
<instrucciones>
FinSi
Al ejecutarse esta instrucción, se evalúa la condición y se ejecutan las instrucciones que correspondan: las instrucciones que le siguen al Entonces si la condición es verdadera, o las instrucciones que le siguen al Sino si la condición es falsa. La condición debe ser una expresión lógica, que al ser evaluada retorna Verdadero o Falso.
La cláusula Entonces debe aparecer siempre, pero la clausula Sino puede no estar. En ese caso, si la condición es falsa no se ejecuta ninguna instrucción y la ejecución del programa continúa con la instrucción siguiente.
El ejemplo Triángulo lee las medidas de los tres lados de un triángulo y utiliza esta estructura para determinar cual es el mayor de los tres, y verificar luego si se trata de un triángulo rectángulo o no.
// Lee los tres lados de un triangulo rectangulo, determina
// si corresponden (por Pitargoras) y en caso afirmativo
// calcula el area
Proceso TrianguloRectangulo
// cargar datos
Definir l1,l2,l3 Como Real;
Escribir "Ingrese el lado 1:";
Leer l1;
Escribir "Ingrese el lado 2:";
Leer l2;
Escribir "Ingrese el lado 3:";
Leer l3;
// encontrar la hipotenusa (mayor lado)
Definir cat1,cat2,hip Como Real;
Si l1>l2 Entonces
cat1<-l2;
Si l1>l3 Entonces
hip<-l1;
cat2<-l3;
Sino
hip<-l3;
cat2<-l1;
FinSi
Sino
cat1<-l1;
Si l2>l3 Entonces
hip<-l2;
cat2<-l3;
Sino
hip<-l3;
cat2<-l2;
FinSi
FinSi
// ver si cumple con Pitagoras
Si hip^2 = cat1^2 + cat2^2 Entonces
// calcualar area
Definir area como real;
area<-(cat1*cat2)/2;
Escribir "El area es: ",area;
Sino
Escribir "No es un triangulo rectangulo.";
FinSi
FinProceso
Selección Múltiple (según)
Segun <variable> Hacer
<número1>: <instrucciones>
<número2>,<número3>: <instrucciones>
<...>
De Otro Modo: <instrucciones>
FinSegun
Esta instrucción permite ejecutar opcionalmente varias acciones posibles, dependiendo del valor almacenado en una variable de tipo numérico. Al ejecutarse, se evalúa el contenido de la variable y se ejecuta la secuencia de instrucciones asociada con dicho valor.
Cada opción está formada por uno o más números separados por comas, dos puntos y una secuencia de instrucciones. Si una opción incluye varios números, la secuencia de instrucciones asociada se debe ejecutar cuando el valor de la variable es uno de esos números.
Opcionalmente, se puede agregar una opción final, denominada De Otro Modo, cuya secuencia de instrucciones asociada se ejecutará sólo si el valor almacenado en la variable no coincide con ninguna de las opciones anteriores.
El ejemplo Menú muestra un programa muy simple que utiliza esta estructura de control para elegir que salida mostrar en pantalla de acuerdo a qué opción el usuario selecciona mediante un menú.
// Muestra como hacer un menú simple con las estructuras Repetir-Hasta Que y Según
Proceso sin_titulo
Definir OP Como Entero;
Repetir
// mostrar menu
Limpiar Pantalla;
Escribir "Menú de recomendaciones";
Escribir " 1. Literatura";
Escribir " 2. Cine";
Escribir " 3. Música";
Escribir " 4. Videojuegos";
Escribir " 5. Salir";
// ingresar una opcion
Escribir "Elija una opción (1-5): ";
Leer OP;
// procesar esa opción
Segun OP Hacer
1:
Escribir "Lecturas recomendables:";
Escribir " + Esperándolo a Tito y otros cuentos de fúbol (Eduardo Sacheri)";
Escribir " + El juego de Ender (Orson Scott Card)";
Escribir " + El sueño de los héroes (Adolfo Bioy Casares)";
2:
Escribir "Películas recomendables:";
Escribir " + Matrix (1999)";
Escribir " + El último samuray (2003)";
Escribir " + Cars (2006)";
3:
Escribir "Discos recomendables:";
Escribir " + Despedazado por mil partes (La Renga, 1996)";
Escribir " + Búfalo (La Mississippi, 2008)";
Escribir " + Gaia (Mägo de Oz, 2003)";
4:
Escribir "Videojuegos clásicos recomendables";
Escribir " + Día del tentáculo (LucasArts, 1993)";
Escribir " + Terminal Velocity (Terminal Reality/3D Realms, 1995)";
Escribir " + Death Rally (Remedy/Apogee, 1996)";
5:
Escribir "Gracias, vuelva prontos";
De otro modo:
Escribir "Opción no válida";
FinSegun
Escribir "Presione enter para continuar";
Esperar Tecla;
Hasta Que OP=5
FinProceso
Estructuras de Control Repetitivas
-.Lazos Mientras
Mientras <condición> Hacer
<instrucciones>
FinMientras
Al ejecutarse esta instrucción, la condición es evaluada. Si la condición resulta verdadera, se ejecuta una vez la secuencia de instrucciones que forman el cuerpo del ciclo. Al finalizar la ejecución del cuerpo del ciclo se vuelve a evaluar la condición y, si es verdadera, la ejecución se repite. Estos pasos se repiten mientras la condición sea verdadera.
Note que las instrucciones del cuerpo del ciclo pueden no ejecutarse nunca, si al evaluar por primera vez la condición resulta ser falsa.
Si la condición siempre es verdadera, al ejecutar esta instrucción se produce un ciclo infinito. A fin de evitarlo, las instrucciones del cuerpo del ciclo deben contener alguna instrucción que modifique la o las variables involucradas en la condición, de modo que ésta sea falsificada en algún momento y así finalice la ejecución del ciclo.
El ejemplo Adivina Número le da al usuario 10 intentos para adivinar un número generado aleatoriamente, utilizando esta estructura para verificar si el usuario acierta el número o si se agotan los intentos.
// Juego simple que pide al usuario que adivine un numero en 10 intentos
Proceso Adivina_Numero
Definir intentos,num_secreto,num_ingresado Como Entero;
intentos<-10;
num_secreto <- azar(100)+1;
Escribir "Adivine el numero (de 1 a 100):";
Leer num_ingresado;
Mientras num_secreto<>num_ingresado Y intentos>1 Hacer
Si num_secreto>num_ingresado Entonces
Escribir "Muy bajo";
Sino
Escribir "Muy alto";
FinSi
intentos <- intentos-1;
Escribir "Le quedan ",intentos," intentos:";
Leer num_ingresado;
FinMientras
Si num_secreto=num_ingresado Entonces
Escribir "Exacto! Usted adivino en ",11-intentos," intentos.";
Sino
Escribir "El numero era: ",num_secreto;
FinSi
FinProceso
-.Lazos Repetir
La instrucción Repetir-Hasta Que ejecuta una secuencia de instrucciones hasta que la condición sea verdadera.
Repetir
<instrucciones>
Hasta Que <condición>
Al ejecutarse esta instrucción, la secuencia de instrucciones que forma el cuerpo del ciclo se ejecuta una vez y luego se evalúa la condición. Si la condición es falsa, el cuerpo del ciclo se ejecuta nuevamente y se vuelve a evaluar la condición. Esto se repite hasta que la condición sea verdadera.
Note que, dado que la condición se evalúa al final, las instrucciones del cuerpo del ciclo serán ejecutadas al menos una vez.
Además, a fin de evitar ciclos infinitos, el cuerpo del ciclo debe contener alguna instrucción que modifique la o las variables involucradas en la condición de modo que en algún momento la condición sea verdadera y se finalice la ejecución del ciclo.
El ejemplo Menú muestra un programa muy simple que utiliza esta estructura de control para mostrar un menú repetidamente hasta que el usuario seleccione la opción para salir.
// Muestra como hacer un menú simple con las estructuras Repetir-Hasta Que y Según
Proceso sin_titulo
Definir OP Como Entero;
Repetir
// mostrar menu
Limpiar Pantalla;
Escribir "Menú de recomendaciones";
Escribir " 1. Literatura";
Escribir " 2. Cine";
Escribir " 3. Música";
Escribir " 4. Videojuegos";
Escribir " 5. Salir";
// ingresar una opcion
Escribir "Elija una opción (1-5): ";
Leer OP;
// procesar esa opción
Segun OP Hacer
1:
Escribir "Lecturas recomendables:";
Escribir " + Esperándolo a Tito y otros cuentos de fúbol (Eduardo Sacheri)";
Escribir " + El juego de Ender (Orson Scott Card)";
Escribir " + El sueño de los héroes (Adolfo Bioy Casares)";
2:
Escribir "Películas recomendables:";
Escribir " + Matrix (1999)";
Escribir " + El último samuray (2003)";
Escribir " + Cars (2006)";
3:
Escribir "Discos recomendables:";
Escribir " + Despedazado por mil partes (La Renga, 1996)";
Escribir " + Búfalo (La Mississippi, 2008)";
Escribir " + Gaia (Mägo de Oz, 2003)";
4:
Escribir "Videojuegos clásicos recomendables";
Escribir " + Día del tentáculo (LucasArts, 1993)";
Escribir " + Terminal Velocity (Terminal Reality/3D Realms, 1995)";
Escribir " + Death Rally (Remedy/Apogee, 1996)";
5:
Escribir "Gracias, vuelva prontos";
De otro modo:
Escribir "Opción no válida";
FinSegun
Escribir "Presione enter para continuar";
Esperar Tecla;
Hasta Que OP=5
FinProceso
-.Lazos Para
La instrucción Para ejecuta una secuencia de instrucciones un número determinado de veces.
Para <variable> <- <inicial> Hasta <final> Con Paso <paso> Hacer
<instrucciones>
FinPara
Al ingresar al bloque, la variable <variable> recibe el valor <inicial> y se ejecuta la secuencia de instrucciones que forma el cuerpo del ciclo. Luego se incrementa la variable <variable> en <paso> unidades y se evalúa si el valor almacenado en <variable> superó al valor <final>. Si esto es falso se repite hasta que <variable> supere a <final>. Si se omite la cláusula Con Paso <paso>, la variable <variable> se incrementará en 1.
La primer variante consiste en reemplazar el operador de asignación por la palabra clave Desde:
Para <variable> Desde <inicial> Hasta <final> Con Paso <paso> Hacer ...
De esta forma, la lectura de la sentencia resulta más obvia. Además, con sintaxis flexible, si no se especifica el paso pero el valor final es menor al inicial, el bucle recorrerá los valores en orden inverso como si el paso fuera -1. La segunda variante solo sirve para recorrer arreglos de una o más dimensiones. Se introduce con la construcción Para Cada seguida de un identificador, la palabra clave De y otro identificador:
Para Cada <elemento> De <Arreglo> Hacer ...
El segundo identificador debe corresponder a un arreglo. El primero será el que irá variando en cada iteración. El ciclo realizará tantas iteraciones como elementos contenga el arreglo y en cada uno el primer identificador servirá para referirse al elemento del arreglo en cuestión.
El ejemplo Promedio utiliza un bucle de este tipo para leer N valores numéricos con los cuales calcula un promedio.
// Calcula el promedio de una lista de N datos
Proceso Promedio
Definir i,N como Entero;
Definir acum,dato,prom como Reales;
Escribir "Ingrese la cantidad de datos:";
Leer n;
acum<-0;
Para i<-1 Hasta n Hacer
Escribir "Ingrese el dato ",i,":";
Leer dato;
acum<-acum+dato;
FinPara
prom<-acum/n;
Escribir "El promedio es: ",prom;
FinProceso
El ejemplo Para utiliza las tres variantes de este tipo de bucles para recorrer un arreglo.
// Para poder ejecutar correctamente este ejemplo debe tener
// habilitada la sintaxis flexible en su perfil de lenguaje
Proceso sin_titulo
Definir A,i,elemento Como Enteros;
// declara un arreglo de 10 elementos
Dimension A[10];
// recorre los 10 elementos y va asignandoles enteros aleatorios
para cada elemento de A Hacer
// elemento toma el contenido de cada posicion del arreglo
// y si se modifica elemento se modifica el arreglo
elemento <- azar(100);
FinPara
Escribir "Los elementos del arreglo son:";
// recorre los 10 elementos utilizando subindices y los muestra en pantalla
para i desde 0 hasta 9 Hacer
escribir "Posición " i ": " A[i];
FinPara
Escribir ""; // deja una linea en blanco
Escribir "En orden inverso:";
// recorre los 10 elementos en orden inverso y los muestra en una misma linea
para i desde 9 hasta 0 Hacer
escribir sin bajar A[i] " ";
FinPara
FinProceso
NOTAS IMPORTANTES
*Los comentarios o explicaciones son los que están después de los slash ( // ).
*Luego estaremos añadiendo informacion pero ya en un lenguaje de programación especifico en este caso java.
* Tambien estaremos conociendo informacion basica de como programar en Visual Studio.







No hay comentarios:
Publicar un comentario