La Resolución de Problemas utilizando la Computadora
El Computador es una maquina que no puede trabajar por si sola, únicamente
realiza aquellas ordenes
Que el hombre le indique. Esas órdenes tienen que ser
realizadas de tal forma que el computador las entienda,
Siendo esta la causa por la cuál se hace necesario
darle instrucciones agrupadas. Esto constituye el software,
El cual es pensado y realizado por el hombre. El
software esta conformado por el “conjunto de programas que
Se diseñan para el funcionamiento del computador”.
Deben estar escritos en un lenguaje de programación. El
Software se divide en dos grandes tipos: software del
sistema y software de aplicación El software del Sistema
Es el conjunto de programas necesarios para que la máquina
funcione, estos programas son básicamente, el
Sistema Operativo, los Editores de texto, los Compiladores, Intérpretes
y los Programas de utilidad. El
Software de aplicación son los que realizan tareas
concretas, nóminas, contabilidad, análisis estadísticos, etc.,
Es decir todos aquellos programas que pueden ser escritos en un Lenguaje
de Programación.
1 La Resolución de Problemas utilizando la
Computadora
Aunque el proceso de diseñar programas es un proceso
creativo, se pueden considerar tres pasos que ayudan
Al programador en este proceso:
· Análisis del
problema
· Diseño del
algoritmo
· Resolución del
algoritmo en la computadora
Las fases de análisis y diseñó del algoritmo requieren la descripción
del problema en subproblemas y una
Herramienta de programación: Diagrama de flujo, Pseudos código o Diagrama
N-S (diagramas de Nassi-
Schneider). En la tercera fase se implementa este algoritmo en un código
escrito en un lenguaje de programación
reflejando las ideas obtenidas en
las fases de análisis y diseño.
Antes de conocer las tareas a realizar en cada fase, definiremos el
concepto de algoritmo.
Dentición 1.1. Algoritmo. Un algoritmo es un método para resolver un
problema mediante una serie de
Pasos precisos, definidos y finitos.
Se deriva de la traducción al latín de la palabra ´árabe
Alkhowarismi, nombre de un matemático y astrónomo
árabe que escribió un tratado sobre manipulación de números y ecuaciones
en el siglo IX.
Características del Algoritmo
· Preciso: tiene que indicar el orden de realización
en cada paso.
Definido: si el algoritmo se
prueba dos veces, en estas dos pruebas, se debe obtener el mismo resultado
(Con excepción de los programas que contienen comandos de generación de
datos aleatorios).
· Finito: tiene un número determinado de pasos
y debe producir un resultado en un tiempo finito.
Veamos algunos ejemplos.
Ejemplo 1.2. Ver una película. 1. Buscar la videocasete de la película.
2. Si el televisor y la video-casetera
Se encuentran apagados, encenderlos. 3. Sacar el video del estuche. 4.
Introducirlo en la video-casetera. 5.
Tomar el control del televisor y el video. 6. Dirigirme al sofá. 7.
Ponerme cómodo 8. Ajustar el volumen.
9. Disfrutar la película
Ejemplo 1.3. Cocinar arroz. 1. Lavar bien
el arroz. 2. Buscar un recipiente (caldero) de tamaño adecuado.
3. Agregar el agua necesaria de acuerdo a la cantidad de arroz. 4.
Agregar aceite, sal, cebolla, ajo pollo. 5.
Colocar el recipiente en la cocina. 6. Encender la hornilla. 7. Esperar
a que hierva el agua. 8. Agregar
El arroz al agua hirviendo. 9. Dejar el recipiente en el fuego hasta que
el arroz este blando. 10. Apagar la
Hornilla. 11. Servir. 12. Comer. ¡¡Buen provecho!!
Estos pequeños algoritmos cumplen con los requisitos
descritos arriba, ya que cada paso precisa un orden
Y tiene un orden de pasos finitos.
Los algoritmos se pueden expresar por formulas, diagramas de flujo, y códigos conocidos como
Herramientas de programación. Esta ultima representación
es la más utilizada por su sencillez y parecido
A el lenguaje humano. El hecho de que un algoritmo sea una representación
paso a paso, implica que
Este compuesto por instrucciones elementales que no involucran ambigüedades,
es decir que no pueden
Interpretarse de diferentes maneras
2 Fases para la Resolución de
Problemas
1. Análisis del Problema. En la fase de análisis en
el proceso de programación se determina que hace el
Programa. Esta fase requiere una clara definición
donde se contemple exactamente lo que debe hacer el programa y el resultado o solución deseada. Dado que
se busca una solución se precisan especiaciones
De entrada y salida. Para poder definir bien un problema es conveniente
responder a las siguientes
Preguntas: ¿Que entradas se requieren? (cantidad y tipo) ¿Cual es la
salida deseada? (cantidad y
Tipo) ¿Que método produce la salida deseada?
2. Diseño del Algoritmo. En la fase de diseño se
determina como hace el programa la tarea solicitada. Los
Métodos utilizados para el proceso del diseño se
basan en el conocido divide y vencerás: la resolución de
Un problema complejo se realiza dividiendo el
problema en subproblemas y a continuación dividir estos
En otros de nivel más bajo, hasta que sea
implementada una solución en la computadora. Este método se
Conoce técnicamente como diseño descendente (top-Down)
o modular. El programa principal (el modulo
De nivel más alto) llama a subprogramas (nódulos) de nivel más bajo, que
a su vez pueden llamar
A otros subprogramas. Estos módulos pueden ser planeados, codificados,
comprobados y depurados
Independientemente y luego combinarlos entre si. Este proceso implica la
ejecución de estos pasos
Hasta que el programa se ha terminado. El diseño del algoritmo es
independiente del lenguaje de
Programación en el que se vaya a codificar posteriormente.
3. Implementación del Algoritmo. Para implementar un algoritmo en la
computadora, se debe ejecutar
Los siguientes pasos: Codificación y documentación, Compilación
y ejecución, Verificación y finalmente
La Depuración.
(a) Codificación y documentación. Es la escritura en un lenguaje de programación
de la representación
Sentación de un algoritmo, en el caso de este curso se utilizan como
lenguajes Octave o Matlab.
La codificación se conoce como programa fuente. La documentación puede
ser interna y externa.
La documentación interna es la contenida en líneas de comentarios. La documentación
externa
Incluye análisis, diagramas de flujo y/o pseudo códigos, manuales de
usuarios con instrucciones
Para ejecutar el programa y para interpretar los resultados. La documentación
es vital cuando se
Desea corregir posibles errores futuros o bien cambiar el programa.
Estos cambios se denominan
Mantenimiento del programa. Además es de buena costumbre para todo buen
programador, dejar
Comentado su código, para que el futuro programador pueda darle
mantenimiento fácilmente a el
Programa, o incluso, si es el mismo creador quien debe darle
mantenimiento. La importancia de
La documentación debe ser destacada por su influencia en la etapa final,
ya que programas pobre-
Mente documentados son difíciles de leer, más difíciles
de depurar y casi imposibles de mantener
Y medicar.
(b) Compilación y ejecución. Una vez que el algoritmo se ha convertido
en un programa fuente, debe ser traducido a lenguaje maquina. Este proceso se
realiza con el compilador y el sistema operativo
Que se encarga prácticamente de la compilación. Si al compilar el
programa fuente se presentan
Errores (errores de compilación), es necesario volver a editar el
programa, corregir los errores y
Compilar de nuevo. Esto se repite hasta que ya no se presenten más
errores, obteniéndose el
Programa objeto. Cuando no existen errores en el programa fuente se debe
instruir al sistema
Operativo para que efectué la fase de montaje o enlace, del programa
fuente con las librerías del
Programa del compilador. Este proceso de montaje produce un programa
ejecutable. Cuando se
Ha creado un programa ejecutable este se puede ya ejecutar desde el sistema
operativo con solo
Teclear su nombre. Suponiendo que no existen errores durante la ejecución
(errores en tiempo de
Ejecución), se obtendrá la salida de resultados correctos del programa.
(c) Verificación y depuración. Es el proceso de ejecución del programa
con una amplia variedad
De datos de entrada, llamados datos de test o prueba como son: valores
normales de entrada,
Valores extremos de entrada que comprueben los límites del programa y
valores de entrada que
Comprueben aspectos especiales del programa. Estos determinarán
si el programa contiene errores
O no.
3 Estructura general de un programa
Un programa puede considerarse como una secuencia de acciones
(instrucciones) que manipulan un conjunto
De objetos (datos) para que realice una tarea específica. Un programa
contiene dos bloques:
· Bloque de
declaraciones: en ´él se especifican todos los objetos que utiliza el programa
(constantes, vari-
ables, tablas, registros, archivos, etc.). En el caso particular de
Octave/Matlab, este bloque de declara-
ciones no forma parte del programa, estos lenguajes de programación
identifican automáticamente la
estructura de las variables en juego.
· Bloque de instrucciones: constituido por el
conjunto de operaciones que se han de realizar para la
obtención de los resultados deseados.
Dentro del bloque de instrucciones de un programa podemos diferenciar
tres partes fundamentales. En
algunos casos, estas tres partes están perfectamente
delimitadas, pero en la mayoría sus instrucciones quedan
entremezcladas a lo largo del programa, si bien
mantienen una cierta localización geométrica impuesta por
la propia naturaleza de las mismas.
· Entrada de datos: la constituyen todas
aquellas instrucciones que toman datos de un dispositivo
externo, almacenándolos en la memoria central para que puedan ser
procesados.
· Proceso o algoritmo: esta formado por las
instrucciones que modifican los objetos a partir de su estado
inicial hasta el estado final, dejando ´estos disponibles en la memoria
central.
· Salida de resultados: conjunto de
instrucciones que toman los datos finales de la memoria central y los
envían a los dispositivos externos.
Los algoritmos se encuentran compuestos de varios tipos de
instrucciones. Una Instrucción es la parte
más pequeña de un programa que un computador puede ejecutar. Las
instrucciones pueden ser:
1. Instrucciones de declaración: se utilizan en
aquellos lenguajes de programación que no tienen declaración
explicita de los objetos. Su misión consiste en
indicar al procesador que reserve espacio en la memoria
para un objeto del programa, indicando asimismo su nombre, tipo y características.
Octave y Mat-
lab disponen de declaraciones explicitas de los objetos y por ello los
programas codificados en estos
lenguajes no requieren de instrucciones de declaración.
2. Instrucciones primitivas: son aquellas que ejecuta el procesador de
modo inmediato. Las principales
son asignación, entrada y salida. Una instrucción de asignación
calcula el valor de una expresión y lo
almacena en una variable. Una instrucción de entrada toma un dato de un
dispositivo de entrada y lo
almacena en un objeto o variable. Eventualmente, los datos de entrada no
provienen de un dispositivo
externo, sino que han sido colocados previamente en el mismo programa.
Una instrucción de salida
toma el valor de una expresión u objeto y lo lleva a un dispositivo
externo (pantalla, por lo general).
3. Instrucciones compuestas: son aquellas que el procesador no puede
ejecutar directamente, sino que
realiza una llamada a un subprograma, subrutina o párrafo.
4. Instrucciones de control: son aquellas que controlan la ejecución de
otras instrucciones. Instrucción
de selección o alternativa: controla la ejecución de unas u otras
instrucciones según una condición.
Puede ser simple o doble (SI y SINO). Instrucción de salto
incondicional: altera la secuencia normal de
ejecución de un programa, continuando la misma en la línea indicada en
la propia instrucción (IR A).
Instrucción de salto condicional: altera la secuencia normal de ejecución
de un programa u ‘nicamente
en el caso de cumplimiento de una condición asociada
a la propia instrucción (SI... IR A). Instrucción
repetitiva: hace que se repitan una o varias instrucciones un numero
determinado o indeterminado de
veces (PARA, MIENTRAS, HASTA e ITERAR).
Algunas variables realizan funciones específicas
dentro de un programa, y por su gran utilidad, frecuencia
de uso y peculiaridad, conviene hacer una mención aparte. Las más
importantes son:
contadores. Es un campo de memoria cuyo valor se incrementa en una
cantidad fija, positiva o negativa generalmente asociado a un bucle.
Acumuladores. Es un campo de memoria cuyo valor se incrementa sucesivas
veces en cantidad de variables.