0% encontró este documento útil (0 votos)
35 vistas15 páginas

Apunte Teórico Informatica

Este documento presenta una introducción a la resolución de problemas computacionales. Explica conceptos clave como el pensamiento computacional, algoritmos y diferentes enfoques para la resolución de problemas propuestos por autores como Polya, Shoenfeld, Mayer y Bransford y Stein. También describe las etapas típicas en la resolución de problemas computacionales como el análisis del problema, diseño del algoritmo, definición del algoritmo y verificación.

Cargado por

4vtzv27r9n
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
35 vistas15 páginas

Apunte Teórico Informatica

Este documento presenta una introducción a la resolución de problemas computacionales. Explica conceptos clave como el pensamiento computacional, algoritmos y diferentes enfoques para la resolución de problemas propuestos por autores como Polya, Shoenfeld, Mayer y Bransford y Stein. También describe las etapas típicas en la resolución de problemas computacionales como el análisis del problema, diseño del algoritmo, definición del algoritmo y verificación.

Cargado por

4vtzv27r9n
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Introducción

a la
Programación
Resolución de Problemas

Juan Matias Novas


Introducción a la Programación

Contenido
Introducción 3
¿Qué es el pensamiento computacional? 4
Diversas corrientes para la resolución de problemas 4
Polya (1945) 4
Shoenfeld (1985) 5
Mayer (1986) 7
Bransford y Stein (1984) 7
Maza (1991) 7
Resolución de problemas computacionales 8
Etapas en la resolución de problemas con computadora 9
Análisis del problema. 9
Diseño del algoritmo. 9
Definición de un algoritmo 10
Verificación y depuración 10
Ejemplos de un análisis 11
Ejemplo 1 11
Ejemplo 2 11
Ejemplo 3 12
Ejemplo 4 12
Ejemplo 5 12
Pre y Postcondiciones de un algoritmo 13
Elementos que componen un algoritmo 14

Página 2 de 15
Introducción a la Programación

Introducción
Los problemas computacionales constituyen uno de los principales objetos de estudio de la ciencia de la
computación. El mayor obstáculo al que se enfrentan los estudiantes es la falta de capacidad y flexibilidad
en la resolución de problemas. Es decir, la capacidad de formular soluciones a problemas, pensar de forma
creativa sobre las soluciones y expresar una solución de manera clara y precisa.

El nivel abstracto del tema y la falta de vinculación con problemas prácticos y significativos evidencian la
necesidad de lograr una mayor motivación y estimular el desarrollo de habilidades para la solución de
problemas.

La manera en que la computación está inmiscuida en varios aspectos de la vida moderna provoca ventajas
en las nuevas generaciones de estudiantes, lo que impulsa la necesidad de cursos de introducción a la
programación centrados en el enfoque de resolución de problemas algorítmicos que introduzcan el
pensamiento crítico, el razonamiento lógico y las habilidades de resolución de problemas en los estudiantes
como habilidades indispensables para aprender a programar.

Uno de los pilares de la ciencia informática es el algoritmo. La palabra algoritmo viene de Al-Jwarizmi,
sobrenombre del célebre matemático Mohammed Ibn Musa al-Jwarizmi (780-850). Desde la primera
traducción de sus libros en el siglo IX por Adelardo de Bath y Roberto de Chester se ha venido deformando
el término hasta llegar a su forma actual. La Real Academia Española lo define como un grupo finito de
operaciones organizadas de manera lógica y ordenada que permite solucionar un determinado problema.

Otros conceptos importantes de definir son pensamiento algorítmico, pensamiento computacional y


pensamiento lógico, habilidades necesarias en la resolución de problemas computacionales.

El pensamiento algorítmico es la capacidad para realizar el proceso de abstracción, modelización de un


problema, deducciones lógicas y síntesis de la solución que conduzca a escribir el algoritmo correcto.

El pensamiento computacional se basa en la potencia y los límites de los procesos informáticos, ya sea que
se ejecuten por un humano o por una máquina; implica el uso de la abstracción y segmentación cuando se
trata de resolver una tarea compleja o se diseña un sistema complicado, utilizando el razonamiento
heurístico para descubrir una solución. Otra definición es la ofrecida por Aho, quien lo caracteriza como el
proceso de pensamiento involucrado en la formulación de problemas de tal manera que sus soluciones
puedan ser representadas como pasos computacionales discretos y algoritmos.

El pensamiento lógico es una importante habilidad fundamental. Albrecht dice que la base de todo
pensamiento lógico es el pensamiento secuencial. Este proceso implica tomar las ideas importantes, los
hechos y las conclusiones involucradas en un problema y organizarlas en una progresión en forma de
cadena que asume un significado en sí mismo. Pensar lógicamente es pensar en pasos.

Página 3 de 15
Introducción a la Programación

¿Qué es el pensamiento computacional?


El pensamiento computacional implica resolver problemas, diseñar sistemas y comprender el
comportamiento humano, haciendo uso de los conceptos fundamentales de la informática. Es decir, que la
esencia del pensamiento computacional es pensar como lo haría un científico informático cuando nos
enfrentamos a un problema.

El pensamiento computacional es el proceso que permite formular problemas de forma que sus soluciones
pueden ser representadas como secuencias de instrucciones y algoritmos.

El pensamiento computacional es el proceso de reconocimiento de aspectos de la informática en el mundo


que nos rodea, y aplicar herramientas y técnicas de la informática para comprender y razonar sobre los
sistemas y procesos tanto naturales como artificiales.

Una iniciativa muy interesante en relación a la definición del pensamiento computacional es la promovida
por la Sociedad Internacional de la Tecnología en la Educación (ISTE) y la Asociación de Profesores de
Informática (CSTA), que han colaborado con líderes del mundo de la investigación y la educación superior, la
industria y la educación primaria y secundaria para desarrollar una definición operativa que describa con
precisión sus características esenciales y ofrezca un marco de trabajo y un vocabulario común con el que los
profesionales de la educación puedan trabajar.

Según esta definición operativa, el pensamiento computacional es un proceso de resolución de problemas


que incluye las siguientes características:

● Formular problemas de forma que se permita el uso de un computador y otras herramientas para
ayudar a resolverlos.

● Organizar y analizar lógicamente la información.

● Representar la información a través de abstracciones como los modelos y las simulaciones.

● Automatizar soluciones haciendo uso del pensamiento algorítmico (estableciendo una serie de
pasos ordenados para llegar a la solución).

● Identificar, analizar e implementar posibles soluciones con el objetivo de lograr la combinación más
efectiva y eficiente de pasos y recursos.

● Generalizar y transferir este proceso de resolución de problemas para ser capaz de resolver una
gran variedad de familias de problemas.

Diversas corrientes para la resolución de problemas


Varios autores han tratado de identificar y describir las distintas fases en el proceso de resolución de
problemas, veamos a continuación algunas de ellas para poder identificar sus diferencias.

Polya (1945)

Página 4 de 15
Introducción a la Programación

En su modelo descriptivo, establece las necesidades para aprender a resolver problemas. Para este autor el
principal fin es el de ayudar a que el alumno adquiera la mayor experiencia en la tarea de resolución de
problemas, por lo que el profesor será el guía que en todo momento dejará al alumno asumir la parte de
responsabilidad que le corresponde.

Este autor, considerado para muchos el padre de la heurística matemática, establece cuatro fases en la
resolución de problemas:

1. Comprender el problema: ¿Cuál es la incógnita?, ¿Cuáles son los datos?


2. Concebir un plan: ¿Se ha encontrado con un problema semejante?,¿Conoce un problema
relacionado con este?, ¿Podría enunciar el problema de otra forma?, ¿Ha empleado todos los
datos?
3. Ejecutar el plan: ¿Son correctos los pasos dados?
4. Examinar la solución obtenida: ¿Puede verificar el resultado?, ¿Puede verificar el razonamiento?

Las fases anteriores caracterizan, según Polya, al resolutor ideal. Cada fase se acompaña de una serie de
preguntas cuya intención clara es actuar como guía para la acción. En la figura siguiente se pretende ilustrar
el proceso de resolución de problemas de Polya basado en las cuatro fases descritas anteriormente:

Estrategia de Polya para la resolución de problemas

Shoenfeld (1985)

En búsqueda de explicaciones para la conducta de los resolutores reales de problemas, considera


insuficientes las estrategias planteadas por Polya para la resolución de problemas y sostiene que el proceso
es más complejo e involucra más elementos de carácter emocional-afectivo, psicológico, sociocultural, entre
otros.

Establece por lo tanto la existencia de cuatro aspectos que intervienen y se debe tener en cuenta, en la
resolución de problemas y que sirvan para el análisis de la complejidad del comportamiento en la resolución
de problemas:

Página 5 de 15
Introducción a la Programación

● Recursos cognitivos: entendidos como conocimientos previos, o bien, el dominio del conocimiento.
● Heurísticas: estrategias o reglas para progresar en situaciones dificultosas.
● Control: estrategias meta cognitivas, es decir, aquello que permite un uso eficiente de los recursos
disponibles.
● Sistema de creencias: conjunto de ideas o percepciones que los estudiantes poseen acerca de la
matemática y su enseñanza.

Cada uno de estos componentes explica las carencias y, por lo tanto, el poco éxito en la resolución de
problemas de los resolutores reales. Así, cuando a pesar de conocer las heurísticas no se sabe cuál utilizar o
cómo utilizarla se señala la ausencia de un buen control de los recursos disponibles. Pero las heurísticas y un
buen control no son suficientes, pues puede que el resolutor no conozca un hecho, algoritmo o
procedimiento específico del dominio matemático del problema en cuestión. En este caso se señala la
carencia de recursos cognitivos como explicación al intento fallido en la resolución.

Por otro lado, puede que todo lo anterior esté presente en la mente del resolutor, pero sus creencias de lo
que es resolver problemas en matemáticas o de la propia concepción sobre la matemática hacen que no
progrese en la resolución.

Por último, están las heurísticas. La mayor parte de las veces se carece de ellas. Se dispone de
conocimientos específicos del tema o dominio matemático del problema, incluso de un buen control, pero
falla el conocimiento de reglas para superar las dificultades en la tarea de resolución como podrían ser:

● Buscar un problema relacionado.


● Resolver un problema similar más sencillo.
● Dividir el problema en partes.
● Considerar un caso particular.
● Hacer una tabla.
● Buscar regularidades.
● Empezar el problema desde atrás.
● Variar las condiciones del problema.

Shoenfeld señala que, en el proceso de resolución, tan importante como las heurísticas es el control de tal
proceso, a través de decisiones ejecutivas, es decir, qué hacer en un problema. Estas decisiones ejecutivas
tienen consecuencias globales para la evolución del proceso de resolución de un problema, determinando
la eficiencia de los conocimientos y recursos de todo tipo puestos en servicio para la resolución del
problema.

Para abordar el proceso de resolución de problemas, Shoenfeld también indica cuatro pasos:

● Analizar y comprender un problema: dibujar un diagrama, examinar un caso especial, intentar


simplificarlo.
● Diseñar y planificar una solución
● Explorar soluciones:
1. considerando una variedad de problemas equivalentes,
2. considerando ligeras modificaciones del problema original, y
Página 6 de 15
Introducción a la Programación

3. considerando amplias modificaciones del problema original.


● Verificar la solución.
1. ¿Verifica la solución los criterios específicos siguientes?:
a) ¿Utiliza todos los datos pertinentes?
b) ¿Está acorde con predicciones o estimaciones razonables?
c) ¿Resiste a ensayos de simetría, análisis dimensional o cambio de escala?
2. ¿Verifica la solución los criterios generales siguientes?:
a) ¿Es posible obtener la misma solución por otro método?
b) ¿Puede quedar concretada en caso particulares?
c) ¿Es posible reducirla a resultados conocidos?
d) ¿Es posible utilizarla para generar algo ya conocido?
Mayer (1986)

También enumera los procesos a seguir en la resolución de problemas en los siguientes:

● Representación del problema: conversión del problema en una representación mental interna.
Comprende dos pasos:
a) Traducción: capacidad para traducir cada proposición del problema a una representación
mental, expresada en una fórmula matemática.
b) Integración de los datos: supone un conocimiento específico de los diversos tipos de problemas,
a partir de un esquema adecuado a dicho problema.
● Solución del problema: diseñar un plan de solución, lo que implica:
a) Planificación: búsqueda de estrategias para la resolución.
b) Ejecución: realización de las operaciones/acciones diseñadas.
Bransford y Stein (1984)

Proponen un método que incluye una fase inicial de identificación y consta de cinco fases:

● Identifica que un problema existe y cuál es.


● Definición y representación del problema.
● Exploración de posibles estrategias.
● Actuación con la estrategia seleccionada.
● Logros, observación y evaluación de los resultados.
Maza (1991)

Reformula el modelo de Polya, y diferencia dos procesos en la fase de Comprensión, en análisis y


representación del problema y extendiendo la fase de Revisión-Comprobación de la siguiente forma:

● Análisis del problema, lo que implica analizar-descomponer la información que nos da el enunciado
(datos, condiciones, etc)
● Representación del problema, relacionando los elementos del problema.

Página 7 de 15
Introducción a la Programación

● Planificación, eligiendo la estrategia más adecuada para su resolución.


● Ejecución, o aplicación de la estrategia elegida, donde es conveniente la revisión constante de tal
aplicación, detección de errores, corrección de los pasos, etc...
● Generalización, conectándolo con algún principio general que permita resolver ejercicios similares
en el futuro.

Destacar también el trabajo de Miguel de Guzmán que, partiendo de las ideas de Polya y Schoenfeld, ha
elaborado un modelo para la ocupación con problemas, donde se incluyen tanto las decisiones ejecutivas
y de control como las heurísticas. La finalidad de tal modelo es que la persona examine y remodele sus
propios métodos de pensamiento de forma sistemática a fin de eliminar obstáculos y de llegar a establecer
hábitos mentales eficaces, es decir, lo que Polya denominó como pensamiento productivo. Este modelo se
basa en las siguientes cuatro fases:
● Familiarizarse con el problema: tratar de entender a fondo la situación, jugar con la situación, tratar
de determinar el aire del problema, perderle el miedo.
● Búsqueda de estrategias: Empezar por lo fácil, hacerse un esquema, figura o diagrama, escoger un
lenguaje adecuado y una notación apropiada, buscar un problema semejante, suponer el problema
resuelto, suponer lo contrario.
● Llevar adelante la estrategia: seleccionar y llevar adelante las mejores ideas de la fase anterior,
actuar con flexibilidad, no emperrarse con una idea, cambiar de vía si las cosas se complican
demasiado.
● Revisar el proceso y sacar consecuencias de él: examinar a fondo el camino seguido, preguntarse
cómo se ha llegado a la solución o por qué no se ha llegado, tratar de entender por qué la cosa
funciona, mirar si se puede encontrar un camino más simple, mirar hasta donde llega el método,
reflexionar sobre el proceso de pensamiento seguido y sacar conclusiones para el futuro.

Si bien todos estos autores determinan modelos para la resolución de un problema, teniendo como estudio
las matemáticas, en sistemas tratamos de no proveer soluciones matemáticas, sino tratamos de dar una
solución a un problema mediante el desgrane del mismo, tratando de separar el problema en
subproblemas, y abstrayendonos del modelo matemático.

Si es una realidad que los modelos planteados se pueden aplicar a un pensamiento de tipo sistemático, ya
que, tomando diversas partes de cada uno de los modelos planteados, podemos crear un modelo que se
aplique a la resolución de problemas computacionales, teniendo en cuenta que las matemáticas forman
parte de la resolución del problema.

Resolución de problemas computacionales


La resolución de problemas mediante una computadora consiste en dar una adecuada formulación de pasos
precisos a seguir.

Si se piensa en la forma en que una persona indica a otra como resolver un problema, se verá que
habitualmente se utiliza un lenguaje común y corriente para realizar la explicación, quizá entremezclado con
algunas palabras técnicas. Esto es un riesgo muy grande. Los que tienen cierta experiencia al respecto saben
que es difícil transmitir el mensaje y por desgracia, con mucha frecuencia se malinterpretan las
instrucciones y por lo tanto se ejecuta incorrectamente la solución obteniéndose errores.

Página 8 de 15
Introducción a la Programación

Cuando de una computadora se trata, no pueden utilizarse indicaciones ambiguas. Ante cada orden resulta
fundamental tener una única interpretación de lo que hay que realizar. Una máquina no posee la capacidad
de decisión del ser humano para resolver situaciones no previstas. Si al dar una orden a la computadora se
produce una situación no contemplada, será necesario abortar esa tarea y recomenzar todo el
procedimiento nuevamente.

Además, para poder indicar a la computadora las órdenes que debe realizar es necesario previamente
entender exactamente lo que se quiere hacer. Es fundamental conocer con qué información se cuenta y
qué tipo de transformación se quiere hacer sobre ella.

Etapas en la resolución de problemas con computadora

La resolución de problemas utilizando como herramienta una computadora no se resume únicamente en la


escritura de un programa, sino que se trata de una tarea más compleja. El proceso abarca todos los
aspectos que van desde interpretar las necesidades del usuario hasta verificar que la respuesta brindada es
correcta. Las etapas son las siguientes:

Análisis del problema.

En esta primera etapa, se analiza el problema en su contexto del mundo real. Deben obtenerse los requerimientos
del usuario. El resultado de este análisis es un modelo preciso del ambiente del problema y del objetivo a
resolver. Dos componentes importantes de este modelo son los datos a utilizar y las transformaciones de
los mismos que llevan al objetivo.

En este punto se analiza el problema y sus características, y se determinan las entradas y salidas del
problema. De igual modo, también se realiza una investigación sobre si ya se conoce alguna o varias
soluciones de este. En el caso de que ya se conozcan varias soluciones, entonces se determina cuál es la
más conveniente para el problema que estamos tratando. Si no se conoce ninguna, o no nos satisfacen las
soluciones existentes, se propone una nueva.

Es por eso que esta etapa los podemos dividir en tres partes:

1. Definición del problema: Tenemos que entender y comprender la naturaleza del problema,
tenemos que dominar los conceptos con los que estamos trabajando y conocer qué operaciones
hay que realizar para solucionar el problema y obtener la información de salida.
2. Especificación de los datos de entrada: Hay que determinar qué datos de entrada necesitamos para
resolver el problema.
3. Especificación de los datos de salida: También hay que determinar los datos de salida que van a
ofrecer la solución del problema.

En definitiva, estudiamos y analizamos el problema hasta comprenderlo por completo, identificando las
entradas y cuáles son las salidas que debería generar la solución, teniendo en cuenta las especificaciones
que nos brinda la definición del problema.

Diseño del algoritmo.

La resolución de un problema suele ser una tarea muy compleja para ser analizada como un todo. Una
técnica de diseño en la resolución de problemas consiste en la identificación de las partes (subproblemas)
que componen el problema y la manera en que se relacionan.

Página 9 de 15
Introducción a la Programación

Cada uno de estos subproblemas debe tener un objetivo específico, es decir, debe resolver una parte del
problema original. La integración de las soluciones de los subproblemas es lo que permitirá obtener la
solución buscada

Definición de un algoritmo
Un algoritmo es un conjunto de acciones que especifican la secuencia de operaciones a realizar, en orden,
para resolver un problema.
Los algoritmos son independientes tanto del lenguaje de programación como del ordenador que los
ejecuta.
Las características de los algoritmos son:
● Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.
● Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo
resultado cada vez.
● Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento; o sea,
debe tener un número finito de pasos.
La solución de cada subproblemas debe ser especificada a través de un algoritmo. Esta etapa busca obtener
la secuencia de pasos a seguir para resolver el problema. La elección del algoritmo adecuado es
fundamental para garantizar la eficiencia de la solución.
Herramientas de representación de algoritmos
La solución del algoritmo posteriormente se transcribe a alguna de las siguientes opciones.
● Un diagrama de flujo es una de las técnicas de representación gráfica de algoritmos más antiguas.
Ventajas: permite altos niveles de estructuración y modularización y es fácil de usar. Desventajas:
son difíciles de actualizar y se complican cuando el algoritmo es grande.
● El pseudocódigo, nos permite una aproximación del algoritmo al lenguaje natural y por tanto una
redacción rápida del mismo.
● Implementación del algoritmo en un lenguaje de programación siguiendo su respectiva sintaxis. Un
programa escrito en un lenguaje de programación determinado (ej: Python, Php, Pascal, Ada, etc.)
es traducido automáticamente al lenguaje de máquina de la computadora que lo va a ejecutar.
Verificación y depuración
Una vez que se tiene un programa escrito en un lenguaje de programación se debe verificar que su
ejecución produce el resultado deseado, utilizando datos representativos del problema real. Sería deseable
poder afirmar que el programa cumple con los objetivos para los cuales fue creado, más allá de los datos
particulares de una ejecución. Sin embargo, en los casos reales es muy difícil realizar una verificación
exhaustiva de todas las posibles condiciones de ejecución de un sistema de software. La facilidad de
verificación y la depuración de errores de funcionamiento del programa conducen a una mejor calidad del
sistema y es un objetivo central de la Ingeniería de Software.
La depuración es el proceso de encontrar los errores del programa y corregir o eliminar dichos errores.
Cuando se ejecuta un programa, se pueden producir tres tipos de errores:
1. 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 existe un error de sintaxis, la computadora no
puede comprender la instrucción, no se obtendrá el programa objeto y el compilador imprimirá una
lista de todos los errores encontrados durante la compilación.

Página 10 de 15
Introducción a la Programación

2. Errores de ejecución. Estos errores se producen por instrucciones que la computadora puede
comprender, pero no ejecutar. Ejemplos típicos son: división 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.
3. 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, ya que el programa puede funcionar y no
producir errores de compilación ni de ejecución, y sólo puede advertirse el error por la obtención
de resultados incorrectos. En este caso se debe volver a la fase de diseño del algoritmo, modificar el
algoritmo, cambiar el programa fuente y compilar y ejecutar una vez más.
En cada una de las etapas vistas se pueden detectar errores lo cual lleva a revisar aspectos de la solución
analizados previamente.
Dada la sencillez de los problemas a resolver en esa materia, la primera etapa correspondiente al análisis
del problema, sólo se verá reflejada en la interpretación del enunciado a resolver. Sin embargo, a lo largo de
la carrera se presentarán diferentes asignaturas que permitirán familiarizar al alumno con las técnicas
necesarias para hacer frente a problemas de gran envergadura.

Ejemplos de un análisis
Ejemplo 1
Problema: Supóngase un número entero N del que se requiere probar si es divisible o no entre 3. En este
caso, la definición del problema es el enunciado mismo: “Probar si un número entero N es o no divisible
entre 3”. Este caso se trata de un problema muy simple de aritmética.

En la etapa de análisis, identificamos las entradas y las salidas:


Entrada: Un número entero N.
Salida: Una respuesta (Sí o No).
Para la resolución del problema de este ejemplo, conocemos la definición de la divisibilidad: “un número N
es divisible entre otro número k, si la división N ÷ k es exacta (o el resto es 0)”.
Asimismo, existen métodos que presentan diferentes grados de dificultad para un ser humano:
● Realizar la división n ÷ k y comprobar si es exacta.
● Efectuar la suma de las cifras que componen el número en base 10 y verificar si el número es
divisible entre 3.
De acuerdo con la naturaleza del ser humano, puede aplicar con mayor facilidad el segundo método, debido
a que la división de la suma de las cifras y el cálculo mismo de la suma son más simples que la división
inicial, sin embargo, para la computadora es lo mismo realizar la división de 78564589 entre 3 o la división
de 52 entre 3.
En el segundo caso, en cambio, es necesario hacer la extracción de las cifras y luego la suma de las mismas.
En definitiva, la resolución del problema es simple, como lo establecen los siguientes pasos:
1. Se hace la lectura del número N.
2. Se toma el resto de la división de N entre 3 (mediante la operación módulo N %3).
3. Según el valor del resto, se escribe: “Sí” o “No”.
Ejemplo 2
Problema: Determinar si el número 7317 es primo.

Página 11 de 15
Introducción a la Programación

Entrada: Un número entero N.


Salida: Una respuesta (Sí o No).
Resoluciones:
Algoritmo 1: Dividir el número 7317 entre sus valores anteriores buscando aquellos que lo dividen
exactamente (el resto de la división y el número es igual a cero). Esta solución no especifica claramente
cuáles son los valores a lo que se refiere, por lo que resulta ambigua la solución y no se tendrá en cuenta.
Algoritmo 2: Divida el número 7317 entre cada uno de los números 1, 2, 3, 4, ..., 7315, 7316. Si una de las
divisiones es exacta, la respuesta es no. Si no es así, la respuesta es sí. Este algoritmo presenta una solución
no ambigua para este problema. Existen otros algoritmos mucho más eficaces para dicho problema, pero
esta es una de las soluciones correctas
Ejemplo 3
Problema: Determinar la suma de todos los números enteros.
Entrada: Todos los números enteros.
Salida: Sumatoria de los números enteros.
Resolución: En este caso no se puede determinar un algoritmo para resolver este problema. Un algoritmo
debe alcanzar la solución en un tiempo finito, situación que no se cumplirá en el ejemplo ya que los
números enteros son infinitos.
Además de no ser ambiguo, un algoritmo debe tener principio y fin. Se supone también que cuando se
detiene, debe informar de alguna manera, su resultado. Es bastante factible escribir un conjunto de
instrucciones que no incluyan una terminación y por lo tanto dicho conjunto de instrucciones no
conformarían un algoritmo.

Veamos a continuación otro ejemplo, pero que, en vez de obtener un resultado mediante la aplicación de la
matemática utilice una serie de pasos a realizar.
Ejemplo 4
Problema: Volcar un montículo de arena en una zanja.
Entrada: Montículo de arena
Salida: zanja tapada
Resolución: Tome una pala. Mientras haya arena en el montículo cargue la pala con arena y deposítela en la
zanja. Dejar la pala.
Este algoritmo es muy simple y no ambiguo. Se está seguro que en algún momento parará, aunque no se
sabe cuántas paladas se requerirán.
Resumiendo, un algoritmo puede definirse como una secuencia ordenada de pasos elementales, exenta
de ambigüedades, que lleva a la solución de un problema dado en un tiempo finito.
Ejemplo 5
Problema: Escriba un algoritmo que permita preparar una tortilla de papas de tres huevos.
Entrada: Papas y huevos.
Salida: Tortilla

Página 12 de 15
Introducción a la Programación

Resolución: El enunciado planteado basta para que un cocinero experto lo resuelva sin mayor nivel de
detalle, pero si este no es el caso, se deben describir los pasos necesarios para realizar la preparación. Esta
descripción puede ser: “Mezclar papas cocidas, huevos y una pizca de sal en un recipiente. Luego Freír”.

Esto podría resolver el problema, si el procesador o ejecutor del mismo no fuera una persona que da sus
primeros pasos en tareas culinarias, ya que el nivel de detalle del algoritmo presupone muchas cosas. Si
este problema debe resolverlo una persona que no sabe cocinar, se debe detallar, cada uno de los pasos
mencionados, pues estos no son lo bastante simples para un principiante.

De esta forma, el primer paso puede descomponerse en:


1. Pelar las papas
2. Cortarlas en cuadraditos
3. Cocinar las papas
4. Batir los huevos en un recipiente
5. Agregar las papas al recipiente y echar una pizca de sal al mismo

El segundo paso (freír) puede descomponerse en los siguientes tres:


1. Calentar el aceite en la sartén
2. Verter el contenido del recipiente en la sartén
3. Dorar la tortilla de ambos lados

Nótese además que, si la tortilla va a ser realizada por un niño, algunas tareas (por ejemplo, batir los
huevos) pueden necesitar una mayor especificación. Este ejemplo sólo pretende mostrar la lista de pasos
elementales que componen nuestro algoritmo dependen de quién sea el encargado de ejecutarlo.

Si en particular, el problema va a ser resuelto utilizando una computadora, el conjunto de pasos


elementales conocidos es muy reducido, lo que implica un alto grado de detalle para los algoritmos.
Pre y Postcondiciones de un algoritmo
La precondición de un algoritmo es la información que se conoce como verdadera antes de comenzar el
algoritmo. Supongamos el siguiente ejemplo:

Problema: Indique la manera de salar una masa.

Resolución: Agregarle una cucharadita de sal a la masa.

Se supone que se dispone de todos los elementos para llevar a cabo esta tarea. Por lo tanto, como
precondición puede afirmarse que se cuenta con la cucharita, la sal y la masa.

En cambio, la postcondición es la información que se conoce como verdadera al concluir el algoritmo si se


cumple adecuadamente el requerimiento pedido.

En el ejemplo 2 se trataba el siguiente problema que había que determinar si el número 7317 es primo, y
habíamos obtenido como resolución dividir el número 7317 entre cada uno de los números 1, 2, 3, 4, ...,
7315, 7316.

En este caso la salida podría ser “No”, si alguna de las divisiones es exacta. En cambio, la respuesta es “SI” si
todas las divisiones no son exactas.

Por lo tanto, la postcondición de este caso es que se ha podido determinar si el número 7317 es primo o no.

Página 13 de 15
Introducción a la Programación

1. En el ejemplo 4 “Volcar un montículo de arena en una zanja”, se planteaba la siguiente resolución:


Tome una pala.
2. Mientras haya arena en el montículo cargue la pala con arena y deposítela en la zanja.
3. Dejar la pala.
¿Cuáles serían las precondiciones y las postcondiciones del algoritmo?
La precondición es que se cuenta con la pala, la arena y se está ubicado cerca de la zanja que debe llenar.
La postcondición es que el montículo quedó vació al terminar el algoritmo y en la zanja se encuentra toda la
arena que estaba en el montículo.
Es importante determinar estos conceptos, ya que de esta forma se sabe con los elementos que contamos
al momento de tener que proveer la solución al problema. No es bueno hacer suposiciones sobre los datos
de entrada, ya que nos puede pasar que esas suposiciones en algunos casos no sean ciertas. Es por eso que
no se puede asumir valores o situaciones ante un problema, sino que debemos trabajar siempre con los
datos que sabemos que tenemos.
Elementos que componen un algoritmo
Como bien comentamos un algoritmo es una secuencia de acciones y está formada por una serie de
instrucciones que se ejecutan una a continuación de la otra. Como bien hemos visto en los ejemplos puede
ser que además en un algoritmo tengamos que tomar alguna decisión, o repetir una acción o una serie de
acciones una cantidad de veces, o que esa repetición de acciones se de ante determinada condición.

● Secuencia de Acciones: Hasta ahora hemos trabajado con flujos de control secuencial, es decir, la
ejecución de las acciones se realiza una detrás de la otra, desde la primera acción hasta la última. Se
denomina flujo de control de un algoritmo al orden en el cual deben ejecutarse los pasos
individuales.
● Selección: A través de la selección se incorpora, a la especificación del algoritmo, la capacidad de
decisión. De esta forma será posible seleccionar una de dos alternativas de acción posibles durante
la ejecución del algoritmo. Por lo tanto, el algoritmo debe considerar las dos alternativas, es decir,
qué hacer en cada uno de los casos y esto lo realiza mediante la evaluación de una condición. La
condición es una expresión que al ser evaluada puede tomar solamente uno de dos valores
posibles: verdadero o falso.
● Repetición: La repetición es la estructura de control que permite al algoritmo ejecutar un conjunto
de instrucciones un número de veces fijo y conocido de antemano.
● Iteración: La iteración es una estructura de control que permite al algoritmo ejecutar en forma
repetitiva un conjunto de acciones utilizando una condición para indicar su finalización. Por
ejemplo, si se quiere llenar una zanja con arena utilizando una pala, será difícil indicar exactamente
cuántas paladas de arena serán necesarias para realizar esta tarea. Sin embargo, se trata claramente
de un proceso iterativo que consiste en cargar la pala y vaciarla en la zanja hasta que la zanja se
haya llenado.
El uso de algoritmos permite expresar, de una forma clara, la manera en que un problema debe ser
resuelto. Los elementos que lo componen son característicos de la resolución de problemas con
computadora. La ejercitación es la única herramienta para poder comprender y descubrir la verdadera
potencialidad de las estructuras de control. Resulta fundamental alcanzar un total entendimiento del
funcionamiento de estas estructuras para poder lograr expresar soluciones más complejas que los ejemplos
aquí planteados.

Página 14 de 15
Introducción a la Programación

En esta materia nos dedicaremos a realizar algoritmos y aprender sus estructuras de control básicas para
poder generar soluciones algorítmicas. Si bien utilizaremos un lenguaje de programación como medio de
implementación de nuestros algoritmos, es necesario saber que la lógica y el razonamiento será lo que
prevalecerá en el aprendizaje y no el manejo del lenguaje en sí. Recordemos que el lenguaje será solo el
medio para que aprendan a programar.

Página 15 de 15

También podría gustarte