Clase I. Semana desde 14-4-2023 al 21-4-2023
Al final de esta clase deberíamos poder:
Conocer el concepto de algoritmo.
Identificar problemas algoritmizables y no algoritmizables.
Describir algoritmos simples en lenguaje natural para resolver problemas cotidianos.
Identificar las estructuras algorítmicas. Secuencia, Decisión e Iteración.
En informática, un algoritmo es una secuencia de instrucciones secuenciales, gracias al cual pueden llevarse a cabo ciertos procesos y darse respuesta a determinadas necesidades o decisiones. Se trata de conjuntos ordenados y finitos de pasos, que nos permiten resolver un problema.
Los algoritmos no tienen que ver con un lenguaje de programación específico, dado que un mismo algoritmo puede representarse en diversos lenguajes de programación, es decir, se trata de un ordenamiento previo a la programación.
Visto así, un programa no es otra cosa que una serie compleja de algoritmos ordenados y codificados mediante un lenguaje de programación para su posterior ejecución en un computador.
Los algoritmos también son frecuentes en la matemática y la lógica, y son la base de la fabricación de manuales de usuario, folletos de instrucciones, etc. Su nombre proviene del latín algoritmus y éste apellido del matemático persa Al-Juarismi.
Todo algoritmo debe constar de las siguientes partes:
Input o entrada. El ingreso de los datos que el algoritmo necesita para operar. Tambíen llamada condiciones iniciales.
Proceso. Se trata de la operación lógica formal que el algoritmo emprenderá con lo recibido del input.
Output o salida. Los resultados obtenidos del proceso sobre el input, una vez terminada la ejecución del algoritmo.
Dicho muy llanamente, un algoritmo sirve para resolver paso a paso un problema. Se trata de una serie de instrucciones ordenadas y secuenciadas para guiar un proceso determinado.
En las Ciencias de la computación, no obstante, los algoritmos constituyen el esqueleto de los procesos que luego se codificarán y programarán para que sean realizados por el computador.
Un algoritmo debe ofrecer un resultado en base a sus funciones.
Los algoritmos presentan las siguientes características:
Secuenciales. Los algoritmos operan en secuencia, debe procesarse uno a la vez.
Precisos. Los algoritmos han de ser precisos en su abordaje del tema, es decir, no pueden ser ambiguos o subjetivos.
Ordenados. Los algoritmos se deben establecer en la secuencia precisa y exacta para que su lectura tenga sentido y se resuelva el problema.
Finitos. Toda secuencia de algoritmos ha de tener un fin determinado, no puede prolongarse hasta el infinito.
Concretos. Todo algoritmo debe ofrecer un resultado en base a las funciones que cumple.
Definidos. Un mismo algoritmo ante los mismos elementos de entrada (input) debe dar siempre los mismos resultados.
La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso.
INICIO
Acción A
Acción B
Acción C
....
FIN
Las estructuras condicionales sirven para la toma de decisiones en los algoritmos: Si ocurre algo entonces ejecutamos unas sentencias y en caso contrario ejecutamos otras.
Toda toma de decisión tiene una evaluación a realizar para, en función de ella, tomar la decisión. Esa evaluación generalmente compara una variable con otra o contra otro valor, para que en base al resultado de esta comparación, se siga un curso de acción dentro del programa.
Cabe mencionar que la comparación se puede hacer contra otra variable o contra una constante, según se necesite. Existen tres tipos básicos de estructuras condicionales, en función de las ramas que puedan tener: las simples, las dobles o completa.
Estas tomas de decisión en su forma simpĺe se expresan:
Si <CONDICIÓN ES VERDADERA> Entonces
Accion 1
Acción 2
Acción N...
FinSi.
en su forma completa:
Si <CONDICIÓN ES VERDADERA> Entonces
Accion A
Acción B
Acción C...
Sino
Accion H
Acción I
Acción J
FinSi
Como su nombre nos indica, este tipo de estructuras nos sirve para ejecutar de manera repetitiva una sentencia o un conjunto de sentencias, con el objetivo de resolver un problema o tratamiento cíclico.
Se llaman problemas repetitivos o cíclicos a aquellos en cuya solución es necesario utilizar un mismo conjunto de acciones que se puedan ejecutar una cantidad específica de veces. Esta cantidad puede ser fija (previamente determinada por el programador) o puede ser variable (en función de algún dato dentro del programa).
Existen diversos tipos de ciclos y la mayoría de los lenguajes de programación nos aportan distintas estructuras de repetición en función de ese tipo de ciclo. Vamos a ver entonces los distintos tipos de ciclos que nos podemos encontrar.
Son aquellos en que el número de iteraciones se conoce antes de ejecutarse el ciclo. Generalmente llamamos a este tipo de ciclo "para" (por "para" tal cantidad de iteraciones) o en inglés habitualmente con la palabra "for".
Para <TANTAS CANTIDAD DE VECES> hacer
Acción A
Acción B
Etc...
FinPara
Son aquellos en que el número de iteraciones NO se conoce antes de ejecutarse el ciclo. Y generalmente tienen dos formas posibles.
Repetir una secuencia de acciones mientras una condición se mantenga verdadera.
Mientras <CONDICIÓN SEA VERDADERA> Hacer
Acción 1
Acción 2
Acción N...
FinMientras
Repetir una secuencia de acciones hasta que una condición sea verdadera.
Repetir
Acción 1
Acción 2
Acción N...
Hasta <CONDICIÓN SEA VERDADERA>
La resolución de un problema mediante una computadora consiste en el proceso que a partir de la descripción de un problema, expresado habitualmente en lenguaje natural y en términos propios del dominio del problema, permite desarrollar un programa que resuelva dicho problema.
Este proceso exige los siguientes pasos:
Análisis del problema.
Diseño o desarrollo de un algoritmo.
Transformación del algoritmo en un programa (codificación).
Ejecución y validación del programa.
Los dos primeros pasos son los más difíciles del proceso. Una vez analizado el problema y obtenido un algoritmo que lo resuelva, su transformación a un programa de computadora es una tarea de mera traducción al lenguaje de programación deseado.
Cuando un usuario plantea a un programador un problema que resolver mediante su computadora por lo general ese usuario tendrá conocimientos más o menos amplios sobre el dominio del problema, pero no es habitual que tenga conocimientos de informática. Por ejemplo, un contador que necesita un programa para llevar la contabilidad de una empresa será un experto en contabilidad (dominio del problema), pero no tiene por qué ser experto en programación.
Del mismo modo, el informático que va a resolver un determinado problema puede ser un experto programador, pero en principio no tiene por qué conocer el dominio del problema; siguiendo el ejemplo anterior, el informático que hace un programa no tiene por qué ser un experto en contabilidad.
Por ello, al abordar un problema que se quiere resolver mediante una computadora, el programador necesita de la experiencia del experto del dominio para entender el problema. Al final, si se quiere llegar a una solución satisfactoria es necesario que:
El problema esté bien definido con el máximo detalle
Las especificaciones de las entradas y salidas del problema, deben ser descritas también en detalle:
¿Qué datos son necesarios para resolver el problema?
¿Qué información debe proporcionar la resolución del problema?