Está en la página 1de 18

Resolución de problemas con computadoras

INTRODUCCION

El proceso de resolución de un problema en una computadora conduce a las escritura de un


programa y a la ejecución en la misma.
La principal razón para que las personas aprendan a programar en general y los lenguajes de
programación en particular es utilizar la computadora como una herramienta para la resolución de
problemas.
La computadora permite hacer tareas más eficiente, rápida y precisamente de lo que lo haríamos a
mano, si es que podemos hacerlo a mano.- Para utilizar esta poderosa herramienta, debemos
especificar exactamente que queremos hacer y en el orden en el que se debe hacerse.- Esto se hace
mediante la Programación, que es el proceso de planificar una secuencia de instrucciones que ha de
seguir una computadora.-
Aunque el proceso de diseñar un programa es -esencialmente- un proceso creativo, se puede
considerar una fase o pasos comunes, que generalmente deben de seguir todos los que trabajan
en el área de sistemas de información.
Esta definición de Programación deja muchas cosas sin decir.- Para escribir una secuencia de
instrucciones que ha de seguir una computadora debemos seguir cierto procedimiento.-
Este procedimiento, es decir, el proceso que se sigue desde el planteamiento de un problema,
hasta que se tiene la solución instalada en una computadora y lista para su ejecución, se compone de
varias fases agrupadas en dos bloques bien diferenciados: una etapa de Resolución de Problema
y Diseño del Programa, y una segunda etapa de Implementación y Puesta a Punto del
Programa.-

ETAPAS EN EL PROCESO DE SOLUCION DE PROBLEMAS CON COMPUTADORAS

Las fases de resolución de un problema con computadora son:

Resolución de
Problema y Diseño
del Programa

Análisis del
Resolución de Problemas con Computadoras

problema Diseño del algoritmo Codificación

Implementación y
Puesta a Punto del
Programa

Compilación y Verificación y
Mantenimiento Documentación
ejecución Depuración

• Análisis. El problema se analiza teniendo presente la especificación de los requisitos dados por el cliente
de la empresa o por la persona que encarga el programa.

1
• Diseño. Una vez analizado el problema, se diseña una solución que conducirá a un algoritmo que resuelva el
problema.
• Codificación (implementación). La solución se escribe en la sintaxis del lenguaje de alto nivel (por ejemplo, C) y
se obtiene un programa fuente que se compila a continuación.
• Ejecución, verificación y depuración. El programa se ejecuta, se comprueba rigurosamente y se eliminan todos
los errores (denominados «bugs», en inglés) que puedan aparecer.
• Mantenimiento. El programa se actualiza y modifica, cada vez que sea necesario, de modo que se cumplan
todas las necesidades de cambio de sus usuarios.
• Documentación. Escritura de las diferentes fases del ciclo de vida del software, esencialmente el análisis, diseño
y codificación, unidos a manuales de usuario y de referencia, así como normas para
el mantenimiento.

Las dos primeras fases conducen a un diseño detallado escrito en forma de algoritmo. Durante la tercera
etapa (codificación) se implementa el algoritmo en un código escrito en un lenguaje de programación,
reflejando las ideas desarrolladas en las fases de análisis y diseño.

Las fases de compilación y ejecución traducen y ejecutan el programa. En las fases de verificación y
depuración el programador busca errores de las etapas anteriores y los elimina. Comprobará que mientras
más tiempo se gaste en la fase de análisis y diseño, menos se gastará en la depuración del programa. Por
último, se debe realizar la documentación del programa.

Análisis del problema


La primera fase de la resolución de un problema con computadora es el análisis del problema.
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 por computadora, se precisan especificaciones detalladas de entrada y salida.
Para poder identificar y definir bien un problema es conveniente responder a las siguientes preguntas:
• ¿Qué entradas se requieren? (tipo de datos con los cuales se trabaja y cantidad).
• ¿Cuál es la salida deseada? (tipo de datos de los resultados y cantidad).
• ¿Qué método produce la salida deseada?
• Requisitos o requerimientos adicionales y restricciones a la solución.

Diseño del algoritmo


En la etapa de análisis del proceso de programación se determina qué hará el programa. En la
etapa de diseño se determina cómo hará el programa, la tarea solicitada. Ello se realiza
Resolución de Problemas con Computadoras

mediante un algoritmo. Más adelante hablaremos de algoritmos.

Codificación
Es la escritura en un lenguaje de programación de la representación del algoritmo
desarrollada en las etapas precedentes. Dado que el diseño de un algoritmo es
independiente del lenguaje de programación utilizado para su implementación, el
código puede ser escrito con igual facilidad en un lenguaje o en otro.
Para realizar la conversión del algoritmo en programa se deben sustituir las palabras reservadas en
español por sus homónimos en inglés, y las operaciones/instrucciones indicadas en lenguaje natural
expresarlas en el lenguaje de programación correspondiente.

2
Compilación y ejecución de un programa
Una vez que el algoritmo se ha convertido en un programa fuente, es preciso
introducirlo en memoria mediante el teclado y almacenarlo posteriormente en un disco.
Esta operación se realiza con un programa editor.
Posteriormente el programa fuente se convierte en un archivo de programa que se
guarda (graba) en disco.
El programa fuente debe ser traducido a lenguaje máquina, este proceso se realiza con el compilador
y el sistema operativo que se encarga prácticamente de la compilación.
Si tras la compilación se presentan errores (errores de compilación) en el programa fuente, es preciso
volver a editar el programa, corregir los errores y compilar de nuevo. Este proceso se repite hasta que
no se producen errores, obteniéndose el programa objeto que todavía no es ejecutable directamente.
Suponiendo que no existen errores en el programa fuente, se debe instruir al sistema operativo para que
realice la fase de montaje o enlace (link), carga, del programa objeto con las bibliotecas del programa del
compilador. El proceso de montaje produce un programa ejecutable.
Cuando el programa ejecutable se ha creado, se puede ya ejecutar (correr o rodar) desde el sistema
operativo con sólo teclear su nombre o empelar el mouse. Suponiendo que no existen errores durante
la ejecución (llamados errores en tiempo de ejecución), se obtendrá la salida de resultados del
programa.

Mayormente conocido como Código Fuente, definimos como Programa Fuente a un texto o conjunto de líneas de texto
(líneas de código) que forman parte esencial de un programa informático, siendo entonces las instrucciones que debe
seguir un ordenador para poder realizar la ejecución de una orden determinada. Consiste básicamente en un texto con las
instrucciones en un Idioma (Lenguaje) de Programación, para que otro usuario pueda leerlo, interpretarlo, analizarlo y
realizar una modificación si así lo desea y tiene la autorización correspondiente.
En este Código se hace referencia entonces al funcionamiento general de una aplicación o una herramienta en particular,
pero en un idioma que es comprensible por el Programador mediante la utilización de un Lenguaje de
Programación determinado, que lleva sus propias reglas y excepciones.
Código Objeto, es justamente este último el responsable de que el ordenador pueda interpretar las acciones que se
ordenan y los comandos que han sido prefijados en este código, para poder ser ejecutados, interpretados y retransmitidos
por los componentes físicos de un ordenador (es decir, los Dispositivos de Hardware)
Para poder realizar esta interpretación es necesario contar con sistemas de traducción que son conocidos bajo los
nombres de Compiladores, Intérpretes o Ensambladores, entre otros sistemas de traducción, que son los encargados
de llevar estos lenguajes hacia un Sistema Binario de ceros y unos (es decir, transmisión o no-transmisión de la energía
eléctrica a través de los dispositivos electrónicos)
Actualmente también es considerado como Código Fuente al lenguaje en el que está escrito un sitio web o alguna de
sus Herramientas Web que estén presentes (por ejemplo, Javascript, HTML entre otros) para lo cual el intérprete de
dichas codificaciones será el software que es conocido por todos como Navegador Web. Resolución de Problemas con Computadoras

Debemos diferenciar a cada Código Fuente en dos grandes grupos:


• Código Abierto: Permite a todos los usuarios la Lectura, Modificación y Redistribución del Código Fuente sin
que sean los autores originales, siempre y cuando no se esté en infracción con las condiciones y términos
por los cuales fue incluido en este grupo (establecido por distintas Licencias de Distribución)
En este grupo encontramos una gran cantidad de aplicaciones que llevan la denominación de Software Libre,
por las que lógicamente no se obtienen beneficios económicos.
• Código Cerrado: En este caso el código solamente está disponible para el Autor y para aquellos programadores a
quienes éste autorice previamente.
Sin el perjuicio de ello, debemos diferenciar que las aplicaciones de Código Abierto (también conocidas por su nombre
en inglés como Open Source) de aquellas que son Free Software, también conocidas como Freeware, ya que si bien en
ambos casos no se debe pagar por ellas, en estas últimas no siempre el Código Fuente está disponible para ser leído,
analizado o modificado.

En resumen, se denomina entornos de desarrollo a:

3
• Código fuente: Conjunto de sentencias entendibles por el programador que componen el
programa o una parte de ello. Suele estar almacenado en un fichero del tipo texto como los que se
pueden abrir por ejemplo, con el bloc de notas o Wordpad en los entornos Windows. El código fuente
estará escrito en un lenguaje de programación determinado, elegido por el programador, como pueden
ser: Pascal, C, C++, C#, Java, Perl, Python, PHP.
• Código objeto: Conjunto de instrucciones y datos escritos en un lenguaje que entiende el
ordenador directamente: binario o código máquina. Provienen de la traducción de cierto código fuente,
es un fragmento del programa final y es específico de la plataforma de ejecución.
• Código ejecutable: Reúne diferentes códigos u objetos generados por los programadores junto
con las “librerías de uso general” (propias del entorno o del lenguaje de programación) componiendo el
programa final. Este es el código que ejecutan los usuarios del sistema, y es específico para una
plataforma concreta: Windows, Linux, Mac OS, o cierto sistema Hardware.

Verificación y depuración de un programa


La verificación o compilación de un programa es el proceso de ejecución del
programa con una amplia variedad de datos de entrada, llamados datos de test o
prueba, que determinarán si el programa tiene errores («bugs»). Para realizar la
verificación se debe desarrollar una amplia gama de datos de test: 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.
La depuración es el proceso de encontrar los errores del programa y corregir o eliminar dichos
errores.

Documentación y mantenimiento
La documentación de un problema consta de las descripciones de los pasos a dar
en el proceso de resolución de dicho 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 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 pseudocódigos, manuales de usuario 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.
Resolución de Problemas con Computadoras

Tales cambios se denominan mantenimiento del programa. Después de cada cambio la


documentación debe ser actualizada para facilitar cambios posteriores. Es práctica frecuente numerar
las sucesivas versiones de los programas 1.0, 1.1, 2.0, 2.1, etc. (Si los cambios introducidos son
importantes, se varía el primer dígito [1.0, 2.0,...], en caso de pequeños cambios sólo se varía el
segundo dígito [2.0, 2.1…].)

ALGORITMO

Al estudiar Diseño, vamos a considerar el concepto y significado de la palabra algoritmo. La palabra


algoritmo se deriva de la traducción al latín de la palabra Alkhô-warîzmi, 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.

4
Un algoritmo es un método para resolver un problema mediante una serie de pasos precisos,
definidos y finitos.

Características de un algoritmo
• preciso (indica el orden de realización en cada paso),
• definido (si se sigue dos veces, obtiene el mismo resultado cada vez),
• finito (tiene fin; un número determinado de pasos).

También se puede definir algoritmo como un conjunto finito de instrucciones que especifican una secuencia de
operaciones a realizar en orden para resolver un problema específico. En otras palabras, es un método para la
resolución de problemas.

Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo computacional; en
caso contrario, se dice que es un algoritmo no computacional. Según esto, el algoritmo de Euclides es un
algoritmo computacional; pero el algoritmo para instalar el equipo de sonido es un algoritmo no
computacional. Para que un algoritmo pueda ser ejecutado por una computadora se necesita expresar el
algoritmo en instrucciones comprensibles por la computadora, para esto se requiere de un determinado
lenguaje de programación. Al algoritmo expresado en un determinado lenguaje de programación, se lo
denomina programa. Puesto de otra manera, podemos decir que, un programa es la implementación o
expresión de un algoritmo en un determinado lenguaje de programación siguiendo las reglas establecidas
por el lenguaje elegido. En la Figura 1.1 que sigue se muestra la relación entre problema, algoritmo y
programa.

Figura 1.1 Problema, algoritmo y programa

Todo algoritmo puede ser descompuesto en tres partes:

• Entrada de datos.
• Proceso.
• Salida de resultados

Un algoritmo debe producir un resultado en un tiempo finito. Los métodos que utilizan algoritmos se
denominan métodos algorítmicos, en oposición a los métodos que implican algún juicio o interpretación
Resolución de Problemas con Computadoras

que se denominan métodos heurísticos. Los métodos algorítmicos se pueden implementar en


computadoras; sin embargo, los procesos heurísticos no han sido convertidos fácilmente en las
computadoras. En los últimos años las técnicas de inteligencia artificial han hecho posible la
implementación del proceso heurístico en computadoras.
Ejemplos de algoritmos son: instrucciones para montar en una bicicleta, hacer una receta de cocina,
obtener el máximo común divisor de dos números, etc. Los algoritmos se pueden expresar por fórmulas,
diagramas de flujo o N-S y pseudocódigos. Esta última representación es la más utilizada.

Usamos algoritmos todos los días. Son simplemente una descripción verbal o escrita de secuencias lógicas de
acción. Recetas de cocina, instrucciones para el lavado de ropas o para descongelar la heladera son ejemplos
de algoritmos escritos.
Cuando arrancamos un automóvil realizamos un procedimiento paso a paso. El algoritmo puede ser algo
como esto:
1) Poner la llave en el contacto
2) Asegurarse de que las marchas están en punto muerto
5
3) Presionar el pedal del acelerador
4) Girar la llave hasta la posición de “arranque”
5) Si el motor arranca antes de seis segundos, deja la llave en la posición “ignición”
6) Si el motor no arranca antes de 6 segundos, eperar diez segundos y repetir desde
el paso 3 al 6 (pero no más de 5 veces)
7) Si el coche no arranca, llamar al auxilio

Sin la frase “pero no más de 5 veces” en el paso 6, podrá suceder que nos quedáramos intentando arrancar el
automóvil para siempre, ¿ por qué ?, porque si algo falla en el auto, la repetición de los pasos 3 al 6 no hará que
arranque. Esta situación que nunca termina se conoce como bucle infinito. Por tanto si la frase “no más de 5
veces” no se pone en el paso 6, nuestro algoritmo no cumple con nuestra defininicón de que un algoritmo debe
terminar en una cantidad finita de tiempo para cualquiera de las posibles condiciones.

Debemos resaltar que la restricción de “finitud” no es realmente lo bastante fuerte en la práctica; un
algoritmo debería requerir no sólo un número finito de pasos, sino un númeroo muy finito, un número
razonable. Por ejemplo, hay un algoritmo que determina si el juego de ajedrez representa o no la victoria
para las piezas blancas; éste es un algoritmo que puede resolver un problema de gran interés para miles de
personas, sin embargo, sin lugar a dudas nunca durante nuestra vida conoceremos la respuesta a este
problema, ya que el algoritmo requiere lapsos de tiempo fantásticamente inmensos para la ejecución,
incluso siendo “finito”.
En la práctica, no solo queremos algoritmos, queremos buenos algoritmos en unn sentido estético
débilemente definido. Un criterio de bondad es el tiempo que toma la realización del algoritmo; esto puede
ser expresado en función del número de veces que se ejecuta cada paso. Otros criterios son la adpatabilidad
del algoritmo a los computadores, su simplicad y su elegancia.

A veces tendremos varios algoritmos para el mismo problema, y hemos de decidir cuál es el mejor. Esto
nos lleva al campo extremadamente interesante y muy importante del análisis algorítmico: dado un
algoritmo el problema es determinar sus características de realización. La idea general del Análisis de
Algoritmos es tomar un algoritmo en particular y determinar su comportamiento medio; en ocasiones
también estudiamos si un algoritmo es o no “óptimo” en determinado sentido.

Dominio de un algoritmo

Si el algoritmo no es general dentro de alguna clase de problemas, entonces es de poca


utilidad. Por lo tanto, un método para marcar el número telefónico 2200234 casi no
tiene valor para nadie, mientras que un método para marcar cualquier número será útil.
Resolución de Problemas con Computadoras

Por supuesto, debe haber alguna restricción a la generalidad de un algoritmo.


La clase o el conjunto de datos y las condiciones para las cuales un algoritmo trabaja
correctamente se llama dominio.
Cuando se trata de resolver cualquier problema es necesario definir el dominio del
algoritmo y después verificar que trabaja para todos los casos que se encuentran
dentro ese dominio. Es necesario incluir en el dominio todas las situaciones similares,
pero los casos remotos o poco probables se pueden omitir.

METODO HEURISTICO

Resolvemos problemas todos los días, pero normalmente ignoramos el proceso que estamos siguiendo. En
un entorno de aprendizaje usualmente estamos dando más información de la que necesitamos: una
definición clara del problema, la entrada dada y la salida requerida. En la vida real éste no es siempre el caso;

6
frecuentemente debemos llegar nosotros mismos a la definición del problema, decidir lo que tenemos que hacer
para trabajar con él y el resultado que debe dar.

Después de que hemos comprendido y analizado el problema, debemos llegar a una solución, un algoritmo, es
decir, una secuencia lógica ordenada que nos permita ejecutar una tarea particular y resolver un problema
determinado.
Aunque siempre trabajamos con algoritmos, la mayoría de nuestras experiencias con ellos consisten en seguirlos,
ejecutarlos, ya sea una receta de cocina, un juego que practicamos, un juguete que ensamblamos.

En la fase de resolución del problema, orientada a la programación de computadoras, se deben diseñar
algoritmos, no seguirlos. Planteado un problema, se requiere la obtención de un algoritmo, diseñar el
conjunto de pasos que han de realizarse para resolverlo. Realmente, hacemos este tipo de resolución de
problemas siempre a un nivel inconsciente. No escribimos, sin embargo, nuestras soluciones, las
ejecutamos.

Algunas de estas estrategias o heurísticas que usamos diariamente para resolver problemas son:

• Hacer Preguntas. Si nos dan verbalmente la tarea, hacemos preguntas hasta tener claro lo que se ha de
hacer. Preguntamos cuándo, por qué, dónde, hasta que la tarea esté completamente especificada. Si las
instrucciones están escritas, podemos poner preguntas en las márgenes, subrayar una palabra, agrupar
palabras o sentencias, o cualquier otra forma de indicar que la tarea no está clara. Quizás nuestras
preguntas se respondan un párrafo más adelante, o puede que tengamos que discutirla con la persona
que nos ha dado la tarea.

Si la tarea nos la hemos puesto nosotros mismos, este tipo de preguntas puede que no sea verbal,
pero tiene lugar a un nivel subconsciente.

Algunas preguntas típicas que tendremos que hacer en un contexto de programación son las
siguientes:

- ¿ Qué nos han dado para trabajar, es decir, cuáles son los datos ?
- ¿ Cuál es la apariencia de los datos ?
- ¿ Cuántos datos hay ?
- ¿ Cómo sabremos cuándo tendremos procesados todos los datos?
- ¿ Cuál debe ser la apariencia de la salida?
- ¿ Cuántas veces debemos repetir el proceso que estamos haciendo?
Resolución de Problemas con Computadoras

- ¿ Qué condiciones especiales de error pueden aparecer?



• Resolución por Analogía. Nunca debemos reinventar la rueda. Si existe una solución, la usamos.
Si hemos resuelto antes el mismo problema o uno parecido, solamente repetimos la solución.
No pensamos conscientemente, “he visto esto antes y sé como hacerlo”, nosotros la hacemos.
Los humanos son buenos para reconocer situaciones similares. No tenemos que aprender a cómo ir al
mercado a comprar leche, luego a comprar huevos, luego a comprar azúcar. Sabemos que ir al mercado
será para siempre lo mismo y lo único que varía es lo que se compra (Parametrización).


Encontrar la temperatura diaria más alta y más baja es exactamente el mismo problema que encontrar
la mayor y la menor nota de un examen. Lo que se quiere son los números mayor y menor entre un
conjunto de números.

7
• Dividir para vencer. Constantemente dividimos un problema grande en unidades más pequeñas que podemos
manejar. La tarea de limpiar la casa o el departamento puede parece abrumadora. La tarea compuesta de
limpiar el salón, el comedor, la cocina, los dormitorios y los baños parece manejable. El mismos principio se
aplica a la programación. Dividimos un gran problema en partes más pequeñas, las cuales pueden resolverse
individualmente. De hecho, la metodología de diseño descendente para diseñar algoritmos, se basa en este
principio.
Estas estrategias son llamadas heurísticas, acorde a la siguiente definición:

HEURISTICO: Relativo a la aplicación de reglas empíricas, estrategias, artificios,


simplificaciones o cualquier otro recurso que limite drásticamente el espacio de búsqueda
de soluciones ante un problema con un amplio espacio de soluciones posibles. El método
heurístico no garantiza soluciones óptimas, sino que es útil si ofrece soluciones
satisfactorias.

Llegar a un procedimiento paso a paso para resolver un problema particular no es siempre seguro y preciso.
De hecho, normalmente es un proceso de prueba y error que necesita varios intentos y refinamientos, Cada
intento se prueba para ver si realmente resuelve el problema. Si lo hace, bien. Si no lo hace, se intenta de
nuevo.

Para resolver un problema computacional, debemos pasar por la fase de resolución del problema y
encontrar una solución general (algoritmo). Cuando hayamos comprobado a mano el algoritmo y
consideremos que la solución es correcta, podemos proceder a traducir el algoritmo a un lenguaje de
programación.

Ejemplos de algoritmos

PROBLEMA: Un estudiante se encuentra en su casa (durmiendo) y debe ir a la


universidad (a tomar la clase de Estructuras de Datos ¿qué debe hacer el estudiante? ALGORITMO:

Inicio
1. Dormir
2. haga 1 hasta que suene el despertador (o lo llame la
mamá).
3. Mirar la hora.
4. ¿Hay tiempo suficiente?
5. Si hay, entonces
6. Bañarse.
Resolución de Problemas con Computadoras

7. Vestirse.
8. Desayunar.
Sino,
9. Vestirse.
10. Cepillarse los dientes.
11. Despedirse
12. ¿Hay tiempo suficiente?
13. Si, Caminar hasta la universidad.
14. Sino, Correr
15.Mientras no llegue a la universidad haga paso 12
16. Entrar a la universidad.
Fin

8
ALGORITMO:
Inicio
PASO 1. Colocar los números el primero encima del segundo, de tal manera que las
unidades, decenas, centenas, etc., de los números queden alineadas. Trazar una
Qué hace línea debajo del segundo número.
este PASO 2. Empezar por la columna más a la derecha.
algoritmo? PASO 3. Sumar los dígitos de dicha columna.
PASO 4. Si la suma es mayor a 9 anotar un 1 encima de la siguiente columna a la
izquierda y anotar debajo de la línea las unidades de la suma. Si no es mayor anotar
la suma debajo de la línea.
PASO 5. Si hay más columnas a la izquierda, pasar a la siguiente columna a la
izquierda y volver a 3.
PASO 6. El número debajo de la línea es la solución.
Fin

Técnicas para la formulación de algoritmos


Durante el proceso de diseño del algoritmo es preciso disponer de alguna herramienta para describirlo, se
necesita disponer de un lenguaje algorítmico con el que reflejar las sucesivas acciones que resuelven el
problema y que, además, soporte lo mejor posible el proceso sucesivo de refinamiento en subproblemas.
Una primera aproximación consistiría en utilizar para describir el algoritmo el lenguaje natural (en nuestro
caso el español), pero debido a los innumerables problemas que plantea como la imprecisión o la
ambigüedad, se ha optado por utilizar otras herramientas algorítmicas que describan con mayor exactitud la
secuencia de acciones y el orden en el que han de ejecutarse. La técnica del algoritmo nos permite
analizar un problema en forma global, pero esto no es suficiente, necesitamos herramientas que
nos ayuden a analizar en detalle las soluciones teniendo en cuenta que estas soluciones estarán
orientadas a su uso en una computadora.

Las técnicas más utilizadas para la formulación de algoritmos son:
A. Diagramas de Flujo (Flowchart)
B. Pseudocódigo

A. Diagramas de Flujo
Los diagramas de flujo son una herramienta gráfica para descripción de
algoritmos. Un diagrama de flujo consta de una serie de símbolos estándar, que
representan las distintas acciones del algoritmo, conectados mediante líneas que
indican el orden en el cual deben realizarse las operaciones.
Un diagrama de flujo muestra la lógica del algoritmo, acentuando los pasos
Resolución de Problemas con Computadoras

individuales y sus interconexiones.

B. Pseudocódigo

Es un lenguaje de especificación de algoritmos: Mezcla de lenguaje de programación y español (o ingles o


cualquier otro idioma) que se emplea, dentro de la programación estructurada, para realizar el diseño de un
programa. El uso de tal lenguaje hace el paso de codificación final (esto es, la traducción a un lenguaje de
programación) relativamente fácil. Comúnmente se lo llama lenguaje de especificaciones de algoritmo. 1

1
Para mayor ampliación sobre el pseudocódigo, puede consultar, entre otras, algunas de estas obras: Fundamentos de programación,
Luis Joyanes, 2.ª edición, 1997; Metodología de la programación, Luis Joyanes, 1986; Problemas de Metodología de la programación,
Luis Joyanes, 1991 (todas ellas publicadas en McGraw-Hill, Madrid), así como Introducción a la programación, de Clavel y Biondi.
Barcelona: Masson, 1987, o bien Introducción a la programación y a las estructuras de datos, de Braunstein y Groia. Buenos Aires:
9
El pseudocódigo Pseudocódigo = Pseudo (Supuesto) + Código (Instrucción), nació como un lenguaje similar al
lenguaje natural y era un medio para representar básicamente las estructuras de control de programación
estructurada. Se considera un primer borrador, dado que el pseudocódigo tiene que traducirse posteriormente a
un lenguaje de programación.

La ventaja del pseudocódigo es que en su uso en la planificación de un programa, el programador se puede


concentrar en la lógica y en las estructuras de control y no preocuparse de las reglas de un lenguaje específico. Es
también fácil modificar el pseudocódigo si se descubren errores o anomalías en la lógica del programa, además de
todo esto es fácil su traducción a lenguajes como Pascal, C o Basic.

Otras ventajas del pseudocódigo son:


1) Podemos centrarnos sobre la lógica del problema olvidándonos de la sintaxis de un lenguaje de
programación concreto.
2) Es fácil modificar el algoritmo descrito.
3) Es fácil traducir directamente a cualquier lenguaje de programación el algoritmo obtenido

El principal inconveniente que presenta el uso del pseudocódigo como lenguaje de descripción de
algoritmos es la imprecisión.

Ejemplo: Veamos como se expresa en pseudocódigo la solución al problema del peso:
INICIO
LEER precioKg
LEER peso
LEER entregada
precio ← peso x precioKg
devuelta ← entregada – precio
ESCRIBIR precio
ESCRIBIR devuelta
FIN

El pseudocódigo utiliza para representar las acciones sucesivas palabras reservadas (similares a sus
homónimos en los lenguajes de programación), tales como inicio, fin, si-entonces-sino, mientras, repita-
hasta….etc

Ejemplo: calculo de la suma 2 + 4 + 6 + ... 998 + 1000:


INICIO
suma ← 0
índice ← 2
Resolución de Problemas con Computadoras

MIENTRAS indice <= 1000 HACER


suma ← suma + i
índice ← índice + 2
FIN MIENTRAS
ESCRIBIR suma
FIN
que también puede ser expresado del siguiente modo:
INICIO
suma ← 0
índice ← 2
REPETIR
suma ← suma + índice

Editorial Eudeba, 1986. Para una formación práctica puede consultar: Fundamentos de programación: Libro de problemas de Luis
Joyanes, Luis Rodríguez y Matilde Fernández en McGraw-Hill (Madrid, 1998).

10
índice ← índice + 2
HASTA i > 1000
ESCRIBIR suma
FIN

Definición de datos del pseudocódigo


La definición de datos se da por supuesta, sobre todo en las variables sencillas, si se emplea
formaciones: pilas, colas, vectores o registros, se pueden definir en la cabecera del algoritmo, y
naturalmente cuando empleemos el pseudocódigo para definir estructuras de datos, esta parte la
desarrollaremos adecuadamente.

Funciones y operaciones
Cada autor usa su propio pseudocódigo con sus respectivas convenciones. Por ejemplo, la
instrucción "reemplace el valor de la variable x por el valor de la variable y" puede ser representado
como:
• asigne a el valor de

Las operaciones aritméticas se representan de la forma usual en matemáticas.

Estructuras de control
En la redacción del pseudocódigo se utiliza tres tipos de estructuras de control: las secuenciales, las
selectivas y las iterativas.

$ Estructuras secuenciales
Las instrucciones se siguen en una secuencia fija que normalmente viene dada por el número de
Resolución de Problemas con Computadoras

renglón. Es decir que las instrucciones se ejecutan de arriba hacia abajo. Las instrucciones se
ejecutan dependiendo de la condición dada dentro del algoritmo.

$ Estructuras selectivas
Las instrucciones selectivas representan instrucciones que pueden o no ejecutarse, según el cumplimiento de
una condición.

11
La condición es una expresión booleana. Instrucciones es ejecutada sólo si la condición es verdadera.

$ Selectiva doble (alternativa)
La instrucción selectiva realiza una instrucción de dos posibles, según el cumplimiento de una condición.

La condición es una variable booleana o una función reducible a booleana (lógica, Verdadero/Falso).
Si esta condición es cierta se ejecuta Instrucciones1, si no es así, entonces se ejecuta Instrucciones2.

$ Selectiva múltiple
También es común el uso de una selección múltiple que equivaldría a anidar varias funciones de
selección.

En este caso hay una serie de condiciones que tienen que ser mutuamente excluyentes, si una de
ellas se cumple las demás tienen que ser falsas necesariamente, hay un caso si no que será cierto
cuando las demás condiciones sean falsas.
En esta estructura si Condición1 es cierta, entonces se ejecuta sólo Instrucciones1. En general, si
Resolución de Problemas con Computadoras

Condicióni es verdadera, entonces sólo se ejecuta Instruccionesi



$ Selectiva múltiple-Casos
Una construcción similar a la anterior (equivalente en algunos casos) es la que se muestra a
continuación.








12




En este caso hay un Indicador es una variable o una función cuyo valor es comparado en cada caso con
los valores "Valori", si en algún caso coinciden ambos valores, entonces se ejecutarán las Instruccionesi
correspondientes. La sección en otro caso es análoga a la sección si no del ejemplo anterior.

Estructuras iterativas
Las instrucciones iterativas representan la ejecución de instrucciones en más de una vez.

8 Bucle mientras
El bucle se repite mientras la condición sea cierta, si al llegar por primera vez al bucle mientras la
condición es falsa, el cuerpo del bucle no se ejecuta ninguna vez.





8 Bucle repetir
Existen otras variantes que se derivan a partir de la anterior. La estructura de control repetir se
utiliza cuando es necesario que el cuerpo del bucle se ejecuten al menos una vez y hasta que se
cumpla la condición:





La estructura anterior equivaldría a escribir:



Resolución de Problemas con Computadoras




8 Bucle para
Una estructura de control muy común es el ciclo para, la cual se usa cuando se desea iterar un
número conocido de veces, empleando como índice una variable que se incrementa (o
decrementa):




13
la cual se define como:







8 Bucle para cada
Por último, también es común usar la estructura de control para cada. Esta sentencia se usa cuando se
tiene una lista o un conjunto L y se quiere iterar por cada uno de sus elementos:





Si asumimos que los elementos de L son , entonces esta sentencia equivaldría a:






Sin embargo, en la práctica existen mejores formas de implementar esta instrucción dependiendo
del problema.
Es importante recalcar que el pseudocódigo no es un lenguaje estandarizado. Eso significa que
diferentes autores podrían dar otras estructuras de control o bien usar estas mismas estructuras,
pero con una notación diferente. Sin embargo, las funciones matemáticas y lógicas toman el
significado usual que tienen en matemática y lógica, con las mismas expresiones.

El anidamiento
Cualquier instrucción puede ser sustituida por una estructura de control. El siguiente ejemplo
Resolución de Problemas con Computadoras

muestra el pseudocódigo del ordenamiento de burbuja, que tiene varias estructuras anidadas. Este
algoritmo ordena de menor a mayor los elementos de una lista L.

14





En general, las estructuras anidadas se muestran indentadas, para hacer más sencilla su
identificación a simple vista. En el ejemplo, además de la indentación, se ha conectado con flechas
los pares de delimitadores de cada nivel de anidamiento.

Desarrollo de algoritmos
Con este pseudocódigo se puede desarrollar cualquier algoritmo que:
• Tenga un único punto de inicio.
• Tenga un número finito de posibles puntos de término.
• Haya un número finito de caminos, entre el punto de inicio y los posibles puntos de término.

Ventajas del pseudocódigo sobre los diagramas de flujo
1. Ocupan mucho menos espacio en el desarrollo del problema.
2. Permite representar de forma fácil operaciones repetitivas complejas.
3. Es más sencilla la tarea de pasar de pseudocódigo a un lenguaje de programación formal.
4. Si se siguen las reglas de identación se puede observar claramente los niveles en la
estructura del programa.
Resolución de Problemas con Computadoras

5. En los procesos de aprendizaje de los alumnos de programación, estos están más cerca del
paso siguiente (codificación en un lenguaje determinado, que los que se inician en esto con
la modalidad Diagramas de Flujo).
6. Mejora la claridad de la solución de un problema.

Uso de los Datos

La información de que se dispone para procesar en la computadora consta de un conjunto determinado de


datos acerca del problema real, es decir, el conjunto que se considera relevante para el problema que se
tiene en la mano, aquel conjunto del cual se creen pueden derivarse los resultados.

El objetivo de un sistema de manejo de datos es hacer que éstos sean adaptables y flexibles para apoyar el
proceso de toma de decisiones de una organización. Mesclar mezclar

15
1. Los datos de representarse y almacenarse en cierta forma para accesarlos posteriormente.
2. Los datos deben organizarse de manera adecuada para acccesarlos en forma selectiva y eficientemente
3. Los datos deben procesarse y presentarse de manera que puedan apoyar eficientemente al usuario
4. Los datos deben protegerse y manejarse para que no pierdan su valor

Una estructura de datos es una clase de datos caracterizada por la organización de los datos y las operaciones
definidas sobre ella.

Clasificación de estructuras

Dato es uno de esos términos que todos usan pero pocos entienden
Dato: "hecho o valor a partir del cual se puede inferir una conclusión; información"

Los datos son aquello que un programa manipula. Sin datos un programa no funcionaría correctamente. Los
programas manipulan datos de manera muy diferente según el tipo de dato del que se trate. Y hay varios de
estos tipos:

Tipos de Datos

Estructuras de Datos Estructuras de Datos Estructuras de Datos Compuestas


Primitivas Simples
• Enteros • Cadenas Lineales Listas No Lineales
• Boléanos • Arreglos
• Carácter • Registros • Pilas • Arboles
• Reales • Colas • Grafos
• Listas ligadas

Tipos de Datos Primitivos

Son aquellos que se tienen a disposición en la mayoría de las computadoras con características integradas.
Incluyen los números enteros, valores lógicos de verdad y un conjunto de caracteres imprimibles.

è ENTEROS (INTEGER)

Una estructura primitiva son los enteros.


Un entero es un miembro del siguiente conjunto de números:

{. . . , - ( n + 1 ) , - n ,. . . , - 2 , - 1 , 0 , 1 , 2 ,. . . ., n , n + 1 , . . . }

Ejemplos: 1, 6, 29, -85, 152


Resolución de Problemas con Computadoras

è BOOLEANOS

Es también llamado tipo de datos lógico. Un dato booleano es un elemento que puede tener uno de dos
valores: verdadero o falso.

è CARACTERES (CHAR)

El carácter es una primitiva que probablemente se conoce muy bien.


Un carácter es un elemento tomado de un conjunto de símbolos. Un conjunto de símbolos es:

{0,1,2,3,4,5,6,7,8,9,A,B,C,D,......,X,Y,Z,’,?,#,...,+,-,*,/}

è REALES (REAL)

16
Se llaman Números Reales a todos aquellos que se pueden expresar en forma decimal finita o infinita; es decir, el
conjunto de los Números Reales ( ) está formado por los elementos del conjunto unido con I .
• El conjunto de los Números Racionales ( ) corresponden a la unión de todos los números cuya expresión
decimal es finita, infinita periódica o infinita semiperiódica.

• El conjunto de los Números Irracionales (I) está formado por la unión de todos los números que admiten una
expresión infinita no periódica.

Tipos de Datos Simples

Constituyen conjuntos de datos formados por tipos de datos primitivos.

è CADENAS (STRINGS)

Son conjuntos de caracteres.

Ejemplo: CIENCIAS

è ARREGLOS

Son bloques básicos para la construcción de estructuras de datos más complejas. Casi todas las estructuras
de datos se pueden representar indirectamente mediante arreglos.
Un arreglo es un conjunto finito ordenado de elementos homogéneos, es decir que sus componentes son
todos del mismo tipo; llamado tipo base.-
La propiedad de ordenación significa que es posible identificar el primero, segundo, tercero, y ... el enésimo
elemento. Es una estructura llamada con acceso al azar, pues todos sus elementos pueden se seleccionados
al azar y son igualmente accesibles.
Un arreglo puede ser un conjunto de elementos del tipo de cadena, así como puede ser del tipo entero.
Según la dimensión pueden clasificarse en arreglos unidimesionales llamados vectores y en arreglos
bidimensionales conocidos como matrices.

è REGISTROS

Son asociaciones de elementos de tipos arbitrarios, es decir heterogéneos. Constituyen la base para la
conformación de los archivos o bases de datos.

Un archivo es un conjunto de registros: conjunto de datos referidos a un mismo tema. Un registro es un


conjunto de datos de una misma especie, particularidad o tipo.
Por ejemplo:
Nombre de un alumno, edad, carrera, materia, regulariza
Resolución de Problemas con Computadoras

Cadena Entero Entero Cadena Booleano

Tipos de Datos Compuestos

Son los tipos de datos más complejos, y usados en la mayoría de los problemas computacionales. Estas
estructuras se destacan especialmente por forma en sus elementos se organizan y por las operaciones
definidas sobre ellas.

è PILAS

Pensá en una pila de bandejas en un restaurant: un asistente coloca una pila de bandejas limpias sobre las
que ya había antes, y estas son tomadas una por una por los clientes. De esta manera, las bandejas que
quedan abajo de todo son las menos utilizadas (y a veces no les llega nunca la oportunidad de ser usadas).
Las pilas de datos funcionan del mismo modo: se agrega un dato a la pila o se retira uno de ella, pero el dato
retirado es siempre el último que se colocó en la pila.

17
è COLAS

Una cola es similar a una pila excepto que el primer elemento de una cola es el primero en ser retirado.

è LISTAS

Son estructuras de datos, en donde los mismos que se enlazan o vinculan facilitando la inserción y eliminación de
datos, que resultaba complicada en el caso de las pilas y de las colas.

è GRAFOS Y ARBOLES

Son gráficos acíclicos, conexos y simples. Tienen características especiales y son muy usados en el ambiente de
las matemáticas

Bibliografía de Referencia

Fundamentos de Algoritmos y Programación, Lage Fernando J. Cataldi Zulma , Salgueiro Fernando A.,
Editorial Nueva Librería, 2008

Algoritmos y Programación, Perez Berro Miriam Perez Berro Cristina, Editorial Nueva Librería, 2007

Resolución de Problemas con Computadoras

18

También podría gustarte