Resolución de problemas con computadoras. Algoritmos

13
Trabajo Práctico 2 Lab. Programación III Resolución de problemas con computadoras. Algoritmos 1. Resolución de problemas La Informática también puede definirse como la ciencia que estudia el análisis y resolución de problemas utilizando computadoras. En esta definición la palabra ciencia se relaciona con una metodología fundamentada y racional para el estudio y resolución de los problemas. En este sentido la Informática se vincula especialmente con la Matemática y la Ingeniería. Como se mencionó anteriormente, la computadora es una máquina digital con capacidad de cálculo numérico y lógico, que opera controlada por un programa almacenado. Esto quiere decir que internamente tiene órdenes o instrucciones que la computadora podrá leer, interpretar y ejecutar ordenadamente. En este sentido, un programa es un conjunto de instrucciones ejecutables en una computadora, que permite cumplir una función específica o requerimiento que debe satisfacer. Normalmente los programas alcanzan su objetivo en un tiempo finito, aunque algunas aplicaciones, como por ejemplo un sistema de monitoreo de alarma, se ejecutan indefinidamente, porque poseen un requerimiento de tiempo infinito. Un programa sin errores ejecutado por una computadora, que comienza y termina normalmente puede ser incorrecto si no cumple con los requerimientos definidos. Por ejemplo: un programa de predicción de clima debería estimar la temperatura máxima y mínima prevista para cada día. Si en lugar de ello devuelve un promedio diario, o temperaturas máxima y mínima esperadas en la semana, será un programa que devuelve un resultado en un tiempo finito pero no es correcto pues no son los resultados que se requieren. Para resolver problemas los programas operan con datos. Los datos representan objetos del mundo real que permiten modelar aspectos de un problema que se desea resolver. Por ejemplo, un sistema de administración de alumnos de una universidad automatiza los procesos de ingreso y seguimiento de las actividades académicas de los alumnos, tales como inscripción, cursado, exámenes, etc., ¿qué datos representarán a las entidades que intervienen en estos procesos: el alumno, la carrera, las materias, etc.? Los datos reales son difíciles de representar en una computadora, dado que es una máquina digital binaria con capacidad de operar solo unos y ceros. Por lo tanto, la representación de los datos, aun los más simples, como los números, las letras, un nombre o un color, requiere una transformación desde el mundo real a alguna forma de representación binaria que pueda ser interpretada por la computadora. Datos más complejos como una imagen, una canción o la trayectoria de un misil, también son representados en forma binaria. Sin embargo, la forma de modelarlo e interpretarlo requerirá de un análisis cuidadoso por parte de quien escribe el programa. Por lo tanto, las dos cuestiones más importantes que debe enfrentar quien debe escribir un programa para resolver un problema mediante una computadora son: - Definir el conjunto de instrucciones cuya ejecución ordenada conduce a la solución. - Elegir la representación adecuada de los datos del problema. En síntesis, las computadoras son una poderosa herramienta para la resolución de problemas, pero su potencialidad está en función de la capacidad de programación de soluciones adecuadas a cada problema particular.

Transcript of Resolución de problemas con computadoras. Algoritmos

Page 1: Resolución de problemas con computadoras. Algoritmos

Trabajo Práctico 2

Lab. Programación III

Resolución de problemas con computadoras. Algoritmos

1. Resolución de problemas

La Informática también puede definirse como la ciencia que estudia el análisis y resolución de

problemas utilizando computadoras. En esta definición la palabra ciencia se relaciona con una

metodología fundamentada y racional para el estudio y resolución de los problemas. En este

sentido la Informática se vincula especialmente con la Matemática y la Ingeniería.

Como se mencionó anteriormente, la computadora es una máquina digital con capacidad de

cálculo numérico y lógico, que opera controlada por un programa almacenado. Esto quiere

decir que internamente tiene órdenes o instrucciones que la computadora podrá leer,

interpretar y ejecutar ordenadamente.

En este sentido, un programa es un conjunto de instrucciones ejecutables en una

computadora, que permite cumplir una función específica o requerimiento que debe

satisfacer.

Normalmente los programas alcanzan su objetivo en un tiempo finito, aunque algunas

aplicaciones, como por ejemplo un sistema de monitoreo de alarma, se ejecutan

indefinidamente, porque poseen un requerimiento de tiempo infinito.

Un programa sin errores ejecutado por una computadora, que comienza y termina

normalmente puede ser incorrecto si no cumple con los requerimientos definidos. Por ejemplo:

un programa de predicción de clima debería estimar la temperatura máxima y mínima prevista

para cada día. Si en lugar de ello devuelve un promedio diario, o temperaturas máxima y

mínima esperadas en la semana, será un programa que devuelve un resultado en un tiempo

finito pero no es correcto pues no son los resultados que se requieren.

Para resolver problemas los programas operan con datos. Los datos representan objetos del

mundo real que permiten modelar aspectos de un problema que se desea resolver. Por

ejemplo, un sistema de administración de alumnos de una universidad automatiza los

procesos de ingreso y seguimiento de las actividades académicas de los alumnos, tales como

inscripción, cursado, exámenes, etc., ¿qué datos representarán a las entidades que

intervienen en estos procesos: el alumno, la carrera, las materias, etc.?

Los datos reales son difíciles de representar en una computadora, dado que es una máquina

digital binaria con capacidad de operar solo unos y ceros. Por lo tanto, la representación de

los datos, aun los más simples, como los números, las letras, un nombre o un color, requiere

una transformación desde el mundo real a alguna forma de representación binaria que pueda

ser interpretada por la computadora.

Datos más complejos como una imagen, una canción o la trayectoria de un misil, también son

representados en forma binaria. Sin embargo, la forma de modelarlo e interpretarlo requerirá

de un análisis cuidadoso por parte de quien escribe el programa.

Por lo tanto, las dos cuestiones más importantes que debe enfrentar quien debe escribir un

programa para resolver un problema mediante una computadora son:

- Definir el conjunto de instrucciones cuya ejecución ordenada conduce a la solución.

- Elegir la representación adecuada de los datos del problema.

En síntesis, las computadoras son una poderosa herramienta para la resolución de problemas,

pero su potencialidad está en función de la capacidad de programación de soluciones

adecuadas a cada problema particular.

Page 2: Resolución de problemas con computadoras. Algoritmos

La función esencial del especialista informático es explotar la potencialidad de las

computadoras (velocidad, exactitud, confiabilidad) para resolver problemas del mundo real.

Para lograr esto debe analizar el problema, ser capaz de sintetizar sus aspectos esenciales y

poder especificar la solución que se desea. Posteriormente, debe expresar la solución en

forma de programa, operando los datos del mundo real mediante una representación válida

en una computadora.

2. Etapas en la resolución de problemas: el ciclo de vida del software

Desde el planteo inicial de un problema hasta que se obtiene el correspondiente programa o

aplicación, su instalación y funcionamiento en una computadora, se sigue una serie de pasos

que en conjunto constituyen lo que en Ingeniería de Software se denomina ciclo de vida del

software.

Si bien se reconoce que el proceso de diseñar programas es esencialmente creativo, los pasos

o etapas comunes que generalmente deben seguir los programadores son:

- Análisis: Estudio detallado del problema con el fin de obtener una serie de

documentos (especificaciones o requerimientos) en los que quede totalmente definido

el proceso de la automatización.

- Diseño: Determinación de una solución o algoritmo para el problema planteado.

- Codificación: La solución se escribe en la sintaxis de un lenguaje de programación,

obteniéndose así el programa o código fuente.

- Compilación, ejecución, verificación y depuración: El programa fuente se

convierte a código binario ejecutable, se corre en la computadora, se comprueba

rigurosamente y se eliminan todos los errores que puedan detectarse.

- Mantenimiento. El programa se actualiza y modifica cada vez que sea necesario en

función de los requerimientos de los usuarios. Esta es la etapa más larga del ciclo de

vida de desarrollo de software y puede durar muchos años.

- Documentación: Se documentan las distintas etapas del ciclo de vida del software,

fundamentalmente el análisis, diseño y codificación, a los que se agrega manuales de

usuario y de referencia, así como también normas para el mantenimiento.

Las dos primeras etapas conducen a un diseño detallado escrito en forma de algoritmo, que

permitirá resolver el problema.

En la tercera etapa se implementa el algoritmo en un código escrito en un lenguaje de

programación, reflejando las ideas generadas en las etapas anteriores.

En la etapa de compilación y ejecución el código se traduce a un lenguaje que la máquina

pueda entender y se ejecuta el programa, esto es, la computadora realiza una a una las

instrucciones dadas en el programa.

La verificación y depuración consiste en la búsqueda y eliminación de los errores. Cuanto

mejor detallado y específico sea el resultado de las etapas de análisis y diseño, menor será la

posibilidad de encontrar en la etapa de depuración errores serios que requieran repetir etapas

previas, o sean difíciles de identificar y corregir.

La documentación es un elemento importante que hace a las buenas prácticas de

programación, ayuda a la comprensión del código y facilita su mantenimiento. No se trata de

una etapa independiente, sino que se desarrolla a medida que se avanza en cada una de las

otras etapas vistas.

Se describen a continuación con más detalle las tareas involucradas en cada etapa.

Page 3: Resolución de problemas con computadoras. Algoritmos

2.1. Análisis del problema

Esta etapa requiere una clara definición donde se contemple exactamente lo que debe hacer

el programa y el resultado o solución deseada.

Para definir correctamente un problema es conveniente responder a las siguientes preguntas:

- ¿Qué entradas se requieren? (tipo y cantidad)

- ¿Cuál es la salida deseada? (tipo y cantidad) -

¿Qué método produce la salida

deseada?

2.2. Diseño del algoritmo

En la etapa de análisis del proceso de programación se determina qué deberá hacer el

programa y en la etapa de diseño se especifica cómo hará el programa la tarea solicitada.

Los métodos más eficaces para el proceso de diseño se basan la estrategia divide y vencerás.

Esto quiere decir que la resolución de un problema complejo se realiza dividiendo el problema

en subproblemas menos complejos, hasta llegar a un nivel cuya solución pueda ser

implementada en una computadora. Este método se conoce técnicamente como diseño

descendente (top-down) o diseño modular, que se tratará más detalladamente en las

materias de la carrera.

2.3. Codificación de un programa

Codificación es la escritura en un lenguaje de programación de la representación de un

algoritmo desarrollado en las etapas precedentes. Dado que el algoritmo es independiente del

lenguaje de programación que será utilizado para su implementación, el código se puede

escribir con igual facilidad en un lenguaje u otro.

Para realizar la conversión de un algoritmo en un programa, las operaciones indicadas en el

algoritmo se expresan en el lenguaje de programación correspondiente, respetando sus reglas

y sintaxis. Esta operación se realiza con un programa editor propio del lenguaje de

programación o un editor de texto de uso general. Como resultado se obtiene un archivo que

se almacena en la computadora y se conoce como programa fuente.

El objetivo del programador debe ser escribir programas sencillos y claros, que sean fáciles

de actualizar, ya sea por quien los escribió o por otros programadores.

2.4. Compilación y ejecución de un programa

La compilación consiste en la traducción del programa fuente a lenguaje de máquina. De esta

tarea se encarga el programa compilador del lenguaje de programación. Si luego de la

compilación se presentan errores (errores de compilación), es necesario editar nuevamente

el programa, corregir los errores y compilar otra vez. Este proceso se repite hasta que no se

presenten más errores, obteniéndose el programa objeto, que todavía no es ejecutable

directamente. A continuación, se realiza la fase de montaje o enlace (link), que completa el

programa objeto con bibliotecas existentes (también conocidas como librerías) o rutinas

propias del compilador, para generar el programa ejecutable.

Cuando el programa ejecutable se ha creado (generalmente la extensión del archivo será .exe

ó .com), se puede ejecutar el programa desde el sistema operativo con solo teclear su nombre

o hacer doble clic sobre el nombre (estas acciones dependen del entorno operativo particular

que se esté manejando).

Ejemplos de programas ejecutables son: WINWORD.EXE (ejecutable del procesador de textos

Word), msnmsgr.exe (ejecutable del programa de mensajería instantánea Windows

Page 4: Resolución de problemas con computadoras. Algoritmos

Messenger), acroread.exe (ejecutable del visor de archivos PDF Acrobat Reader),

nod32krn.exe (programa ejecutable del antivirus NOD32).

2.5. Verificación y depuración de un programa

La verificación de un programa es el proceso de comprobación de la corrección de un

programa. Se realiza mediante la ejecución del mismo con un conjunto de datos de pruebas

para determinar si el programa tiene errores. Este conjunto de datos de prueba o test debe

contener valores de datos de entrada normales, valores extremos de los datos para comprobar

los límites, valores erróneos y valores de entrada que comprueben casos especiales del

programa.

La depuración es el proceso de encontrar los errores y corregir o eliminar dichos errores. En

general, existen tres tipos de errores:

- Errores de compilación: Se producen normalmente por un uso incorrecto de las reglas

del lenguaje de programación y suelen ser errores de sintaxis. Si hay errores de

sintaxis, la computadora no puede entender la instrucción, no se genera el programa

objeto y el compilador emite una lista con todos los errores encontrados durante la

compilación. Por ejemplo: uso incorrecto de palabras reservadas, de símbolos de

separación de instrucciones, etc.

- Errores de ejecución: Se producen por instrucciones que la computadora puede

comprender pero no ejecutar. Ejemplos típicos son operaciones en las que se pretende

dividir por cero y raíces cuadradas de números negativos. En estos casos, se detiene

la ejecución del programa y se imprime un mensaje de error. El programa “cancela”,

que es el término usual en la jerga informática.

- Errores lógicos: Se producen en la lógica del programa y la fuente del error suele ser

el diseño del algoritmo. Estos errores son los más difíciles de detectar porque el

programa funciona sin producir mensajes de error, el error solo se advierte por la

obtención de resultados incorrectos. En este caso se debe volver a la etapa de diseño

del algoritmo, modificar el algoritmo, cambiar el programa fuente y compilar y ejecutar

de nuevo.

2.6. Documentación y mantenimiento

La documentación de un programa consiste en la descripción de los distintos pasos en el

proceso de resolución de un problema. La importancia de la documentación debe ser

destacada por su decisiva influencia en el producto final: programas pobremente

documentados son difíciles de leer, más difíciles de depurar y casi imposibles de mantener y

modificar.

La documentación de un programa puede ser: interna o externa. La interna es la contenida

en los comentarios del programa fuente, que son explicaciones intercaladas con el código para

ayudar a comprender pasos específicos. Se identifican con una sintaxis específica para que el

compilador las ignore, es decir, para que entienda que no es una instrucción que debe

ejecutar. Esta sintaxis depende del lenguaje de programación utilizado (generalmente es un

símbolo especial al inicio del comentario).

La externa incluye análisis, diagramas de flujo y/o pseudocódigos, y manuales del usuario con

instrucciones para ejecutar el programa y para interpretar los resultados.

La documentación es especialmente importante cuando deben introducirse cambios en los

programas. Después de cada cambio la documentación debe ser actualizada.

Page 5: Resolución de problemas con computadoras. Algoritmos

3. Algoritmos: concepto y características

Un algoritmo es un método para resolver problemas. Más específicamente, es un conjunto

finito de reglas que dan una secuencia de operaciones para resolver un problema específico.

El término proviene del matemático persa Mohammed Al-khowarizmi que alcanzó gran

repercusión por el enunciado de reglas paso a paso para sumar, restar, multiplicar y dividir

números decimales.

Para llegar a la realización de un programa es necesario el diseño previo de un algoritmo, de

modo que sin algoritmo no puede existir un programa.

Los algoritmos son independientes tanto del lenguaje de programación en que se expresan

como de la computadora que los ejecuta. En cada problema el algoritmo se puede expresar

en un lenguaje diferente de programación o ejecutarse en una computadora distinta, sin

embargo el algoritmo será siempre el mismo. Así, por ejemplo, en una analogía con la vida

diaria, una receta de un plato de cocina se puede expresar en español, inglés o francés, pero

cualquiera sea el idioma, los pasos para la elaboración del plato se realizarán sin importar el

idioma del cocinero.

En la ciencia de la computación y en la programación, los algoritmos son más importantes

que los lenguajes de programación o las computadoras. Un lenguaje de programación es tan

solo un medio para expresar un algoritmo y una computadora es solo un procesador para

ejecutarlo. Tanto el lenguaje de programación como la computadora son los medios para

obtener un fin: conseguir que el algoritmo se ejecute y se efectúe el proceso correspondiente.

Dada la importancia del algoritmo en la ciencia de la computación, un aspecto muy importante

será el diseño de algoritmos. El diseño de la mayoría de los algoritmos requiere creatividad y

conocimientos profundos de la técnica de la programación.

3.1. Características de los algoritmos

Un algoritmo debe cumplir con las siguientes condiciones fundamentales:

1. Ser finito: Un algoritmo siempre debe terminar luego de un número determinado de

pasos.

2. Ser preciso (no ambiguo): Cada paso de un algoritmo debe estar precisamente

definido, las acciones a realizar deben especificarse de manera rigurosa y sin

ambigüedades.

Ejemplo de algoritmo

Se requiere calcular la media de tres números que ingresan por teclado.

Los pasos del algoritmo son:

1. Ingresar primer número

2. Ingresar segundo número

3. Ingresar tercer número

4. Sumar los tres números

5. Dividir el resultado obtenido en el paso anterior por 3

6. Mostrar el cociente obtenido

La definición de un algoritmo debe describir tres partes: Entrada, Proceso y Salida. La

información proporcionada al algoritmo constituye su entrada y la información producida por

el algoritmo constituye su salida.

En el algoritmo del ejemplo citado anteriormente se tendrá:

Page 6: Resolución de problemas con computadoras. Algoritmos

Entrada: los números.

Proceso: suma de todos los números y división del resultado por tres.

Salida: media de los tres números ingresados.

4. Métodos de representación de algoritmos

Una computadora solo es capaz de resolver un problema si se le indica paso a paso las

acciones que debe realizar. Estos pasos sucesivos constituyen, como ya se vio, el algoritmo.

Escribir un algoritmo consiste en realizar una descripción del método o conjunto de reglas que

se propone para resolver un problema. Estas reglas tienen las siguientes propiedades:

- Debe seguirse una secuencia definida de pasos hasta que se obtenga el resultado.

- Sólo puede ejecutarse una operación a la vez.

Además, en todo algoritmo los datos manipulados son de importancia fundamental: se busca

obtener una determinada información a partir de datos básicos del problema, por lo que no

es de extrañar que en la escritura de algoritmos adquieran una identidad propia. Como

generalmente se querrá aplicar el mismo algoritmo a conjuntos de datos de entrada

diferentes, estos datos se identifican en cada paso con un nombre, que será reemplazado en

tiempo de ejecución por los datos particulares que sea necesario tratar (por ejemplo, por los

datos ingresados a través teclado u obtenidos de un archivo). En el ejemplo del cálculo de la

media, visto anteriormente, los números de entrada se identificarán con las variables n1, n2,

n3, o cualquier nombre que se desee.

El hecho de que un algoritmo deba especificar un conjunto finito y ordenado de pasos a seguir,

no es contradictorio con la posibilidad de realizar algunas de las operaciones solo bajo ciertas

condiciones (por ejemplo, calcular el recargo de una factura solo si está vencida), indicar la

repetición de algunas de las instrucciones un número de veces conocido de antemano (por

ejemplo 10 veces) o aun un número no conocido de veces que se determinará a partir de los

datos de entrada recibidos (por ejemplo, mientras el operador ingrese valores mayores que

0).

Estas acciones se conocen como alteraciones en el flujo de control, es decir en el orden de

ejecución de las instrucciones del algoritmo, y permiten expresar las soluciones de problemas

complejos como la repetición selectiva de operaciones sencillas.

Para escribir algoritmos se utilizan diversas técnicas que buscan eliminar la ambigüedad del

lenguaje coloquial en la especificación de sus pasos. Los métodos usuales para representar

un algoritmo son:

a) Diagrama de flujo

b) Lenguaje de especificación de algoritmo: seudocódigo

c) Lenguaje natural: español, inglés, …

d) Fórmulas matemáticas

Los métodos c) y d) no son fáciles de transformar en programas. Una descripción en español

narrativo no es satisfactoria porque puede presentar ambigüedades. Una fórmula sin embargo

es un buen sistema de representación. Una fórmula permite obtener valores desconocidos

(salida) a partir de valores conocidos (datos) relacionados en una expresión matemática que

indica las operaciones que se deben aplicar (algoritmo). Por ejemplo, las fórmulas para la

solución de una ecuación cuadrática (de segundo grado) son un medio apropiado para

expresar el procedimiento algorítmico que se debe ejecutar para obtener las raíces de la

ecuación.

Ejemplo:

Page 7: Resolución de problemas con computadoras. Algoritmos

Calcular las soluciones de ecuaciones de segundo grado: ax2 +cbx+ =0

Las soluciones son dos y se obtienen como: x1 = b+ b2 4ac

2a

b b2 4ac

x2 =

2a

En este caso los datos de entrada son los coeficientes a, b y c, y los resultados son los valores

de x1 y x2 que se obtienen aplicando las operaciones indicadas en la fórmula.

Como se puede notar, las fórmulas son especialmente útiles cuando los pasos a seguir se

pueden expresar como operaciones aritméticas y funciones matemáticas.

Otra manera de representar un algoritmo es con diagramas de flujo. Constituyen un recurso

gráfico, que facilita especialmente la visualización de alteraciones en el flujo de control, pues

utilizan flechas para indicar qué instrucción se debe ejecutar a continuación.

Utiliza distintos símbolos que determinan la forma de interpretar el

contenido de los mismos: como instrucciones a ejecutar, como

condiciones para determinar el siguiente paso del algoritmo, como

datos de entrada a obtener, como resultados a emitir, etc.

Ejemplo:

El diagrama de flujo que representa el algoritmo para calcular de la

media aritmética de tres valores numéricos es el siguiente:

Otra notación para expresar algoritmos es el pseudocódigo.

Los datos y operaciones se expresan de la misma manera que en los diagramas de flujo, pero

las alteraciones en el flujo de control y las operaciones de entrada/salida se indican mediante

palabras clave. Esta forma de escribir algoritmos guarda semejanzas con las sentencias

disponibles en cualquier lenguaje de programación, por lo que constituye una práctica valiosa

para la futura tarea de escribir y mantener programas, pero sus reglas son más flexibles,

permitiendo así concentrarse en la estructura lógica del algoritmo, sin preocuparse por las

limitaciones que impondría trabajar con un lenguaje de programación en particular.

Si bien el pseudocódigo presenta muchas variantes, se convendrá utilizar la sintaxis que se

presenta en los apartados siguientes, para facilitar el entendimiento durante el curso e

incorporar algunas prácticas de gran utilidad en la elaboración de algoritmos y programas.

Ejemplo:

El mismo algoritmo representado en el diagrama de flujo, en un pseudocódigo se representará

de la siguiente manera:

VARIABLES REAL:

media

ENTERO: n1, n2, n3

INICIO

LEER n1, n2, n3 media =

(n1 + n2 +n3)/3

INICIO

LEER n1, n2, n3

media = (n1 + n2 + n3)/3

“La media es: “, media

FIN

Page 8: Resolución de problemas con computadoras. Algoritmos

ESCRIBIR media FIN

A continuación, profundizaremos en las técnicas que se utilizarán en esta materia:

4.1.1. Diagrama de flujo

Un diagrama de flujo (flowchart) es una de las técnicas de representación de algoritmos más

antiguas y a la vez más utilizada, aunque su utilización ha disminuido desde la aparición de

los lenguajes de programación estructurados.

Un diagrama de flujo es un método de representación gráfica que utiliza un conjunto de

símbolos, de forma que cada paso del algoritmo se visualiza dentro del símbolo adecuado y

el orden en que se realizan los pasos se representa por medio de flechas que indican el flujo

lógico del algoritmo.

Símbolos utilizados en diagramación:

Símbolos

principales Función

Terminal: representa el comienzo INICIO o el final FIN de un programa. Puede

representar también una parada o interrupción programada que sea necesario

realizar.

Entrada/Salida: Cualquier tipo de introducción de datos en la memoria desde los

periféricos “entrada” o salida de la información procesada en un periférico

“salida”.

Proceso: Cualquier tipo de operación que pueda significar cambio de valor,

formato o posición de la información almacenada en la memoria, operaciones

aritméticas, de transferencias, etc.)

Decisión: Indica operaciones lógicas o de comparación entre datos (normalmente

dos) y en función del resultado de la misma determina cuál de las distintas

alternativas debe seguir; normalmente tiene dos salidas- respuestas SI o NO-

pero puede tener 3 o más, según los casos.

Conector en la misma página: sirve para enlazar dos partes cualquiera de un

diagrama indicando un conector en la salida y otro en la entrada.

Secuencia: El sentido de la flecha indica el flujo o secuencia de las operaciones

del diagrama.

Conector fuera de página: Conexión entre dos puntos del diagrama situados en

páginas diferentes.

Llamada a subrutina o subprograma: Un subrutina es un módulo independiente

del programa principal que recibe una entrada procedente de dicho programa,

realiza una tarea determinada y regresa, al terminar, al programa principal.

Pantalla: se utiliza en ocasiones en lugar del símbolo de E/S.

Impresora: se utiliza en ocasiones en lugar del símbolo de E/S.

Teclado: se utiliza en ocasiones en lugar del símbolo de E/S.

Almacenamiento secundario en disco

Comentarios: Permite agregar comentarios en cualquier parte del diagrama

Page 9: Resolución de problemas con computadoras. Algoritmos

Ventajas de los diagramas:

- Rápida comprensión de las relaciones.

- Análisis efectivo: Puede dividirse en secciones detalladas para su estudio.

- Comunicación: es más visual, "una imagen dice más que mil palabras".

- Documentación.

- Codificación eficiente.

Limitaciones:

- Los diagramas complejos y detallados pueden ser muy laboriosos de realizar y de

consultar.

- No existen normas que indiquen el nivel de detalles que debe incluirse en un diagrama.

Un ejemplo de diagramación:

Problema: Obtener el promedio de notas de alumnos de Introducción a la Informática:

En el diagrama A, se utiliza el lenguaje natural para la especificación de las instrucciones

(“Leer nota de un alumno”), la idea principal es mostrar el tipo de instrucción que se especifica

en cada símbolo y el orden en que deben realizarse las órdenes para llegar al resultado.

En el diagrama B, las especificaciones se formalizan utilizando variables. Las variables

representan a los datos que se procesan. Más adelante veremos que estas variables

representan la posición de memoria RAM en la que están ubicados los datos. Esta referencia

a una ubicación obliga a que se respete el nombre asignado cada vez que hacemos referencia

a ese dato.

En el ejemplo, la variable ContAlum es una posición de memoria que al principio del programa

se pone en 0 para ir incrementando el valor que contiene por cada alumno que se procese.

Si, en lugar del nombre asignado al inicio, hacemos referencia a ella con el nombre

CuentaAlum, la computadora no entenderá que nos referimos al mismo dato.

Page 10: Resolución de problemas con computadoras. Algoritmos

El nombre de una variable debe ser nemotécnico, es decir, representativo de su contenido.

Este nombre debe respetarse en todo el diagrama.

Las constantes alfanuméricas se utilizan en un diagrama como caracteres encerrados entre

comillas. En el ejercicio ejemplo, el valor del promedio calculado se mostrará en papel impreso

con la leyenda “Promedio de notas”.

El sentido de las flechas indica la secuencia de ejecución de las instrucciones. Observe en el

ejercicio que la instrucción de poner en 0 las variables se realiza una sola vez, mientras que

la instrucción leer nota del alumno se realiza tantas veces como alumnos se procesen.

En la representación de algoritmos, se suelen utilizar los siguientes términos para representar

las operaciones más usuales:

Acumulador:

Un acumulador es una variable, definida por el programador, que hace referencia a una

dirección de memoria que almacenará un "total móvil" de valores individuales a medida que

vayan apareciendo en el proceso. Por ejemplo, las notas de los alumnos. Esta dirección o

posición de memoria debe ser inicializada en cero.

Contador:

Es una variable que se incrementa en un valor constante y se utiliza para registrar el número

de veces que se presenta un evento. Ejemplo: para contar los alumnos procesados, se

incrementa en 1 por cada lectura de datos de alumnos.

Iteración o bucle (loop):

Es un conjunto de instrucciones que se procesa repetidamente hasta que se cumpla la

condición de salida. En el ejemplo, las instrucciones de contar alumnos y acumular notas se

realizan tantas veces como alumnos se procesen.

Otros ejemplos de diagramas de flujo:

b) Programa que deduce el salario neto de un trabajador a partir de la lectura del nombre, a) Suma de los número pares horas trabajadas, precio de la hora. Se sabe comprendidos entre 2 y 100. también, que los impuestos aplicados

Page 11: Resolución de problemas con computadoras. Algoritmos

c) Cálculo de los salarios mensuales de los empleados de una empresa, sabiendo que

estos se calculan en base a las horas semanales trabajadas y de acuerdo a un precio especificado por horas. Si se pasan de 40 hs semanales, las horas extras se pagarán a razón de 1,5 veces la hora ordinaria.

Inicio

LEER nombre,

horas, precio

bruto = horas * precio

impuesto = 0.25 * bruto

neto = bruto - impuesto

nombre, bruto, impuesto, neto

Fin

Inicio

suma = 2 número = 4

suma = suma + número

número = número + 2

suma

Fin

número <=100

NO

SI

Inicio

L EER nombre. horas,

precio_hora

salario = 40 * precio_hora + ,5 * precio_hora * 1

40) horas – (

salario = horas * p recio_horas

nombre, salario

Fin

Horas <= 40

Hay más datos?

No

SI

Page 12: Resolución de problemas con computadoras. Algoritmos

4.1.2. Seudocódigo

El pseudocódigo es un lenguaje de especificación (descripción) de algoritmos, que facilita el

paso a la codificación o traducción a un lenguaje de programación.

El pseudocódigo nació como un lenguaje similar al inglés y era un medio de representar las

estructuras de control de la programación estructurada, que veremos más adelante.

Se considera un primer borrador del programa, dado que necesariamente tiene que ser

traducido a un lenguaje de programación. Un pseudocódigo no puede ser ejecutado por una

computadora directamente.

Ventajas:

- El programador puede concentrarse en la lógica y en las estructuras de control del

programa sin preocuparse por las reglas de un lenguaje de programación específico.

- Facilita la modificación del algoritmo si se descubren errores.

- Puede ser traducido fácilmente a lenguajes de programación estructurados tales como

Pascal, Fortran, C, C#, etc.

Todo seudocódigo debe posibilitar la descripción de:

- Instrucciones de entrada/salida.

- Instrucciones de proceso.

- Sentencias de control del flujo de ejecución.

- Acciones compuestas, que se refinan posteriormente (subprogramas o rutinas).

Asimismo, tendrá la posibilidad de describir datos, tipos de datos, variables, expresiones,

archivos y cualquier otro objeto que sea manipulado por el programa.

El pseudocódigo original utiliza para representar las acciones sucesivas palabras reservadas

en inglés - similares a sus homónimas en los lenguajes de programación -, tales como start,

end, stop, if-then-else, while-end, repeat-until, etc. Sin embargo, las palabras reservadas

pueden ser escritas también en castellano.

La escritura de pseudocódigo exige normalmente la indentación (sangría en el margen

izquierdo) para describir las acciones en sus estructuras de control correspondientes.

La representación en pseudocódigo del diagrama ejemplo mostrado en a) del punto 5.1.1,

sería:

VARIABLES

REAL: horas, precio_hora, salario_bruto, impuesto, salario_neto CHAR:

nombre

// cálculo del salario neto

INICIO

LEER nombre, horas, precio_hora

salario_bruto = horas * precio_hora

impuesto = 0,25 * salario_bruto salario_neto

= salario_neto – impuesto

ESCRIBIR nombre, salario_bruto, impuesto, salario_neto FIN

El algoritmo empieza con la palabra INICIO y finaliza con la FIN (START, END en inglés).

La línea precedida por // se denomina comentario. Es información al lector del programa y no

realiza ninguna acción ejecutable, sólo tiene efecto de documentación interna.

En esta materia se utilizará, como convención propia, escribir las palabras reservadas en

mayúsculas y los términos en español, y además en inglés, con el objeto de familiarizar a los

Page 13: Resolución de problemas con computadoras. Algoritmos

alumnos en las dos nomenclaturas. En los temas siguientes, se detallará el formato de

pseudocódigo de cada estructura de control en el contexto de la programación estructurada.