Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Introducción A La Programación, 2022-1 Nota de Clase 04: Metodología de Solución de Problemas

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 9

Introducción a la Programación, 2022-1

Nota de clase 04: Metodología de solución de problemas

Manuel Soto Romero

17 de febrero de 2022
Colegio de Ciencia y Tecnología UACM

En las notas pasadas revisamos cómo funcionan y están compuestas las estructuras física y lógica de una
computadora, y hemos dicho que una computadora es útil porque es un ente programable, pero ¿Qué es
un programa? ¿Qué tipo de problemas puedo solucionar con una computadora? ¿Cómo se diseñan estas
soluciones? En esta nota nos dedicaremos a responder estas preguntas.

Definición 4.1. (Programa) Un programa de computadora es un conjunto de instrucciones


que producen la ejecución de una determinada tarea. En esencia, un programa es un medio
para conseguir un fin. El fin será normalmente definido como la información necesaria para
solucionar un problema.

Definición 4.2. (Problema) Un problema es una cuestión para la cual buscamos una respuesta
también llamada solución.

Definición 4.3. (Problema computable) Los problemas computables son aquellos donde se
utiliza ventajosamente la computadora, tienen una o varias de las siguientes características:

Se requiere mucho tiempo para su solución.

Son problemas que se presentan repetidamente con pequeños cambios o datos diferentes.

Es necesaria una gran exactitud para su solución.

Problemas perfectamente definidos para los cuales se conocen uno o varios métodos de
solución, de los cuales se elige el mejor.

Antes de adentrarnos al mundo de la programación revisaremos un método para solucionar problemas que
nos permitirá plantear, analizar y diseñar soluciones. Este tipo de metodologías son usualmente ignoradas
por los programadores que directamente inician las labores de programación sin tener idea de qué es lo
que se está resolviendo, lo cual hace que se convierta en algo tedioso y difícil de entender.

1
4.1. Método de solución de problemas

Los pasos de la metodología que se presenta a continuación son los siguientes:

1. Definición del problema.


2. Análisis de problema.
3. Diseño de la solución del problema.
4. Desarrollo de la solución del problema.

4.1.1. Definición del problema

El problema debe estar bien definido si se desea llegar a una solución satisfactoria. Para poder definir con
precisión el problema, se requiere que las especificaciones de entrada y salida sean descritas con detalle.
Una buena definición del problema, junto con una descripción detallada de las especificaciones de entrada
y salida, son los requisitos más importantes para llegar a una solución eficaz.

Elementos de la definición:

Datos de entrada.
Información de salida.
Procesamiento.
Controles y retroalimentación.

4.1.2. Análisis del problema

En esta etapa se realiza la división del problema en sus partes o componentes más pequeños. El análisis
del problema exige una lectura previa del problema a fin de obtener una idea general de lo que se solicita.
La segunda lectura deberá servir para responder a las preguntas:

¿Qué información debe proporcionar la resolución del problema?


¿Qué datos se necesitan para resolver el problema?

La respuesta a la primera pregunta indicará los resultados deseados o las salidas del problema. La respuesta
a la segunda indicará qué datos se proporcionan o las entradas del problema.

Especificaciones del análisis:

Cada posible entrada


Cada posible salida
Descripción funcional del manejo de los datos
Normas de codificación
Algoritmos de los cálculos
Procedimientos manuales

2
4.1.3. Diseño de la solución del problema

En esta etapa, se hace una propuesta de cómo se resolverá el problema planteado; usando diferentes
herramientas (algoritmos, diagramas de flujo, pruebas de escritorio, etc.).

Algoritmos

Definición 4.4. (Algoritmo) Un algoritmo es una secuencia de pasos necesarios para llevar
a cabo una tarea específica como la solución de un problema.

Un algoritmo es independiente tanto del lenguaje de programación en que se expresa como de la compu-
tadora que los ejecuta. En cada problema el algoritmo se puede expresar en un lenguaje de programación
diferente y ejecutarse en una computadora distinta; sin embargo el algoritmo será siempre el mismo. En
una analogía con la vida diaria, una receta se puede expresar en español, inglés o francés pero cualquiera
que sea el lenguaje, los pasos para llevar a cabo el platillo se realizarán sin importar el cocinero.

Un algoritmo debe poseer las siguientes características:

La definición de un algoritmo debe describir tres partes: Entrada (precondiciones), proceso y salida
(postcondiciones).

Un algoritmo debe tener un inicio y un fin, es decir, debe ser finito.

Los pasos de un algoritmo deben ser simples y exentos de ambigüedades (diferentes significados).

Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.

Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez.

Ejemplo 4.1. Cambiar un foco fundido podría resumirse en dos pasos:

1. Quitar el foco fundido

2. Colocar un foco nuevo.

Sin embargo, si se tuviera que programar un robot para que efectúe esta tarea, tendríamos que ser
más específicos y claros en los pasos a seguir. A continuación presentamos un algoritmo.

3
Entrada: Cuarto con un foco fundido y un foco nuevo.

Salida: El cuarto con el foco nuevo.

1. Inicio.

2. Situar escalera bajo el foco fundido.

3. Elegir un foco de reemplazo (de la misma potencia que el anterior).

4. Subir por la escalera hasta alcanzar el foco.

5. Girar el foco en contra de de las manecillas del reloj hasta que esté flojo.

6. Ubicar el foco nuevo en el mismo lugar que el anterior.

7. Girar en el sentido de las manecillas del reloj hasta que quede apretado.

8. Bajar de la escalera.

9. Fin.

Para representar nuestros algoritmos usaremos un lenguaje estándar que permite dar especificaciones de
los mismos, llamado pseudocódigo. Con el fin de que practiques y te sea más sencillo aprender el diseño de
algoritmo usaremos la herramienta PSeInt1 .

 
Ejercicio 4.1. Instala y configura PSeInt en tu equipo. Un tutorial de instalación se encuentra
disponible en la Nota adicional A.
 

Ejemplo 4.2. A continuación se muestra un algoritmo que deduce el salario neto de un trabajador a
partir de el número horas trabajadas (h) y pago por hora (p) y sabiendo que los impuestos aplicados
son el 10 % sobre el salario bruto.

Algoritmo salario_neto
Leer h , p
b ← h * p
n ← b - ( b * 0.1)
Escribir b , " " , n
Fin Algoritmo

1
http://pseint.sourceforge.net/index.php?page=features.php

4
Diagramas de flujo

Definición 4.5. (Diagrama de flujo) Un diagrama de flujo es una técnica de representación


de algoritmos muy antigua. Es un diagrama que utiliza símbolos y que tiene los pasos del al-
goritmo escritos en las mismas, unidas por flechas, denominadas líneas de flujo que indican la
secuencia en que se deben ejecutar.

La manera en que se leen estos diagramas es siguiendo el camino formado por los conectores de flujo que
indican el orden de ejecución, usualmente representados por una flecha. Este orden puede ser alterado
mediante las llamadas condiciones o bifurcaciones que permiten tomar decisiones y con ello elegir un
camino u otro. Al igual que con los algoritmos, aprovecharemos el diagramador de PSeInt para generar
automáticamente los diagramas.

Ejemplo 4.3. A continuación se muestra un diagrama de flujo que deduce el diagrama de flujo
correspondiente al algoritmo diseñado en el Ejemplo 4.2.

Pruebas de escritorio

Para comprobar que un algoritmo realiza la tarea para la cual fue diseñado, debe ejecutarse paso a paso.
Deben utilizarse datos representativos y anotarse los valores que toman las variables en cada paso. Esto
se conoce como ejecución de un algoritmo.

La forma que usaremos para representar las pruebas de escritorio en este curso, será una combinación
entre la herramienta Ejecutar paso a paso de PSeInt y la especificación de los valores en memoria, la
línea de código ejecutada y los resultados mostrados en pantalla en una tabla.

5
Ejemplo 4.4. Prueba de escritorio del algoritmo anterior con las entradas 6 y 200.

Memoria Instrucción Pantalla


h 6 Algoritmo salario_neto ** Ejecución Iniciada. ***
p 200 Leer h, p > 6
b 1200 > 200
h 1080 b <- h * p
n <- b - (b*0.1)
Escribir b, “ “, n 1200 1080
FinAlgoritmo *** Ejecución Finalizada. ***

4.1.4. Desarrollo de la solución del problema

El desarrollo de la solución puede ser un proceso bastante largo que contiene los siguientes pasos:

Codificación
Documentación
Mantenimiento

Para los fines de este curso, únicamente nos enfocaremos en la codificación que consiste el traducir las es-
pecificación del algoritmo a instrucciones equivalentes en un lenguaje de programación. La documentación
se da de forma automática añadiendo anotaciones a los programas (comentarios) y siguiendo este método
de solución de problemas. Otros tipos de documentación, mejor estructurados se estudian en cursos más
avanzados.

Caso práctico La Metodología 01 muestra un ejemplo completo de aplicación de la metodo-


logía usando el formato a seguir en el curso. Una plantilla de este formato será proporcionada
a las y los estudiantes del curso.

6
4.2. Lenguajes de programación

Como se dijo en la sección anterior, durante la etapa de desarrollo de la solución del problema, tenemos que
codificar nuestro algoritmo en un lenguaje de programación, pero ¿Qué es un lenguaje de programación?

Definición 4.6. (Lenguaje de programación) Un lenguaje de programación es una inter-


faz entre el usuario (programador) y la computadora, permiten expresar instrucciones que el
programador desea que la computadora ejecute.

Un lenguaje de programación se compone principalmente de dos elementos fundamentales:

Sintaxis

Semántica

La sintaxis indica las reglas que debemos seguir para escribir en ese lenguaje de programación. Por ejemplo,
en el español, debemos colocar signos de puntuación de acuerdo a ciertas reglas. La semántica, por el otro
lado, es el significado que se le da a lo que está escrito en el lenguaje, por ejemplo, en el español cuando
leemos los signos ¿?, sabemos que nos referimos a una pregunta.

Los lenguajes de programación tienen muchos tipos de clasificaciones, la más común es la siguiente:

Lenguajes máquina

Lenguajes de bajo nivel (ensamblador)

Lenguajes de alto nivel

Esta clasificación es realizada por nivel de abstracción e indica qué tan cercano es un lenguaje a la ar-
quitectura de la computadora. Ya hemos estudiado los lenguajes de máquina y de bajo nivel en las notas
pasadas, por lo que de ahora en adelante nuestro estudio se dará por medio de lenguajes de alto nivel.

Los lenguajes de alto nivel son los mas utilizados por los programadores. Están diseñados para que las
personas escriban y entiendan los programas de un modo mucho más fácil que los lenguajes máquina y
ensambladores. Otra razón es que un programa escrito en un lenguaje de alto nivel es independiente de la
máquina; esto es, las instrucciones del programa de la computadora no dependen del diseño del hardware
o de una computadora en particular. En consecuencia, los programas escritos en lenguajes de alto nivel
son portables o transportables, lo que significa la posibilidad de poder ser ejecutados con poca o ninguna
modificación en diferentes tipos de computadoras; al contrario que los programas en lenguaje máquina o
ensamblador que sólo se pueden ejecutar en un determinado tipo de computadora.

Los lenguajes de alto nivel presentan las siguientes ventajas:

El tiempo de formación de los programadores es relativamente corto comparado con otros lenguajes.

7
La escritura de programas se basa en reglas sintácticas similares a los lenguajes humanos.

Nombres de las instrucciones tales como print, scan, if, etc.

Las modificaciones de los programas son más fáciles.

Reducción del costo de los programas.

Transportabilidad.

Los inconvenientes se concretan en:

Incremento del tiempo al necesitarse diferentes traducciones del programa fuente para conseguir el
programa definitivo.

No se aprovechan los recursos internos de la máquina que se explotan mucho mejor en lenguajes
máquina y ensambladores.

Aumento de la ocupación de memoria.

El tiempo de ejecución de los programas es mayor.

Al igual que pasa con los lenguajes ensambladores, los programas fuente tienen que ser traducidos
por programas traductores, llamados compiladores e interpretes.

Los lenguajes de programación de alto nivel existentes en la actualidad son muy numerosos, aunque la
práctica demuestra que su uso mayoritario se reduce a Java, Python, C++, C# y C.

4.3. Traductores de lenguaje

Los traductores de lenguajes son programas que traducen a su vez los programas fuente escritos en lenguajes
de alto nivel a código máquina. Existen en general dos tipos de traductores:

Compiladores

Interpretes

Interpretes Un interprete es un traductor que toma un programa fuente, lo traduce y ejecuta línea por
línea. Un lenguaje que se traduce mediante intérpretes se denomina lenguaje interpretado. Por ejemplo:
Python, Haskell, Racket, entre otros.

8
Compiladores Un compilador es un programa que traduce los programas fuente escritos en lenguajes
de alto nivel a lenguaje máquina o lenguaje ensamblador, según el lenguaje de programación. En general,
toman un código y lo transforman a otro lenguaje para facilitar su ejecución. Un lenguaje que se traduce
mediante compiladores se denomina lenguaje compilado. Por ejemplo: C, C++, Java, entre otros.

Referencias

[1] Jorge G. Iglesias, Elena Ortiz, Introducción a la Informática, I&0, Décima Edición, 2007.

[2] Luis Joyanes, Fundamentos generales de programación, McGraw Hill, Primera edición, 2013.

También podría gustarte