
Algoritmos
- El programador diseña un programa, para resolver un problema particular.
- Diseñar es un proceso creativo.
- El proceso de diseño de un programa consta de los siguientes pasos o etapas:
Pasos:
Pasos | Etapa | Descripción |
1 | Análisis del problema | Conducen al diseño detallado por medio un código escrito en forma de un algoritmo |
2 | Diseño de algoritmo | |
3 | Codificación | Se implementa el algoritmo en un código escrito en un lenguaje de programación. Refleja las ideas desarrolladas en las etapas de análisis y diseño |
4 | Compilación y ejecución | Traduce el programa fuente a programa en código de maquina y lo ejecuta. |
5 | Verificación | Busca errores en las etapas anteriores y los elimina. |
6 | Depuración | |
7 | Documentación | Son comentarios, etiquetas de texto, que facilitan la comprensión del programa |
Concepto | |
Algoritmo: es un método para resolver un problema mediante una serie de pasos definidos, precisos y finitos. | Preciso: implica el orden de realización de cada uno de los pasos |
Definido: si se sigue dos veces, se obtiene el mismo resultado. | |
Finito: Tiene un numero determinado de pasos, implica que tiene un fin, |
Tipos :
Método | Descripción | Ejemplos |
Algorítmico | Utiliza un algoritmo y puede ser implementado en una computadora |
|
Heurística: | Se apoya en el resultado obtenido en un análisis de alternativas de experiencias anteriores similares. De las mismas, a se deducen una serie de reglas empíricas o heurísticas que de ser seguidas, conducen a la selección de la mejor alternativa en todas o la mayoría de las veces. |
Ejemplos | ||
Los algoritmos se pueden expresar por: | Formulas | |
Diagramas de flujo Norte-Sur,Top-Down | ||
Pseudo código | inicio leer a,b,c calcular escribir perímetro fin |
· Quick Basic es un lenguaje de programación estructurado y el algoritmo se representara en seudo código y/o diagrama de flujo.
1. Análisis del problema:
Requiere la clara definición del problema donde se indique que va hacer el programa y cual ve a ser el resultado.
Debe detallarse las especificaciones de entrada y salida,
Los requisitos que definen el análisis son :
| |||||||||
| |||||||||
|
| ||||||||
| |||||||||
La ecuación de segundo grado se define algebraicamente como :
La solución general viene dada por la expresión algebraica : (Algoritmo)
periférico | |||
1 | Análisis del problema | ||
2 | Def. del problema | Hallar raíces ecua. 2do grdo | |
3 | Especif. de entrada | coeficientes a, b, c | Teclado |
4 | Especif. de salida | X1, X2 | Pantalla Impresora |
Entrada: por teclado
coef | Descripción | Codificación en QBasic |
a | team. cuadrático | INPUT “Coef a =”;A |
b | term. lineal | INPUT “Coef b =”;B |
c | term. independiente | INPUT “Coef c =”;C |
Calculo | Expresión algebraica | Codificación en QBasic |
X1=((-B+SQR(B^2-4*A*C)) | ||
X2=((-B-SQR(B^2-4*A*C)) |
Proceso:
Salida: Visualización de :Datos de entrada: A,B,C
Datos procesados: Raices: X1, X2
Variable | Significado | Codificación en QBasic |
A,B,C | Coef | PRINT”A=”;A; “B=”;”C=”;C |
X1 | primera raíz | PRINT”X1=”;x1 |
X2 | primera raíz | PRINT”X2=”;X2 |
2.Diseño del algoritmo.
· Análisis de proceso implica que hace el programa.
· Diseño implica como se hace o realiza la tarea (problema) solicitado
En el diseño:
· El todo es la sumatoria de las partes.
· Divide el todo en varias partes.
En la resolución de un problema complejo, se divide en varios sub problemas y seguidamente se vuelven a dividir los sub problemas en otros mas sencillos, hasta que puedan implementarse en el computador.
Esta característica define lo que se entiende como diseño descendente( Top-Down / Norte-Sur ) o diseño modular.
El proceso de ruptura del problema en cada etapa se llama refinamiento sucesivo.
- Cada problema se resuelve mediante un modulo (subprograma) y tiene un solo punto de entrada y un solo punto de salida.
- Un programa bien diseñado consta de un programa principal (modulo de nivel mas alto) que llama a subprogramas (módulos de nivel mas bajo), que a su vez pueden llamar otros sub programas.
Los programas que se estructuran de esta forma, se dicen que tienen diseño modular y el método de romper el programa en modos pequeños se llama programación modular.
Los módulos pueden ser planificados, codificados, compilados y depurados independientemente pueden ser intercambiados entre si.
Este proceso implica la ejecución de los siguientes pasos:
1 | programar un modulo |
2 | comprobar un modulo |
3 | depurar el modulo |
4 | combinar el modulo con módulos anteriores |
este proceso convierte el resultado del análisis del problema en un diseño modular con refinamientos sucesivos que permiten una traducción a un lenguaje que se denomina diseño del algoritmo.
El algoritmo se puede representar por medio de dos formas :
Pseudo código
Diagrama de flujo:
Pseudo código: es el lenguaje de especificación de algoritmos y tiene una estructura: Las instrucciones se escriben en ingles o en palabras similares al ingles o español que facilitan la escritura de programación
Para la resolución de una ecuación de segundo grado se escribiría
inicio
Introducir coeficientes a, b y c
Imprimir títulos primera raíz, segunda raíz, no tiene solución,
Calcular raíz 1 y raíz 2
Imprimir raíz 1 y raíz 2
Fin
Diagramas de flujo (flows charts): Es la representación grafica del algoritmo; según la ANSI consta de una simbologia , que tiene los siguientes significados:
Símbolo | Función | ||||
Proceso | ![]() | Cualquier tipo de operación que origine cambio de valor, formato, posicion de la informacion almacenada en memoria, operaciones aritmeticas, de transferencia, etc. | |||
Entrada/Salida | ![]() | Cualquier tipo de de introduccion de datosen la memoria desde los perifericos”entrada”o registros de informacion procesadaen un periferico de salida | |||
Impresora | ![]() | Se utiliza en ocaciones en lugar del simbolo de entradaa/salida | |||
![]() | Llamada a subrutina, funcion o procedimiento; este es un modulo independiente del programa principal, que recibe una entrada procedente de dicho programa , realiza una tarea determinada y regresa al terminar al propgrama principal | ||||
Monitor | ![]() | Pantalla ; en ocaciones se utiliza en lugar de simbolo de entrada / salida | |||
Proceso: Decisión |
| Indica operaciones logicas o de comparacionentre datos- normalmente entre dos y en funcion del resultado, determina cual de los dos caminos alternativos se debe seguir; normalmente tiene dos salidas- respuestas si o no. | |||
Conector |
| Sirve para enlazardos partes cualesquiera de un organigrama a traves de un conector de salida y otro en la entrada. En la misma pagina del diagrama | |||
Conector | ![]() | Conexión entre dos puntos del organigrama situados en paginas diferentes | |||
Teclado | ![]() | En ocaciones se utilisa en lugar del simbolo de entrada/salida |
Símbolos del Diagrama de flujo
Codificación :
Programación:
Windows/Dos/
Quick Basic = Editor de texto.
Programa: definición:
Programa: definición:
conjunto de datos y sentencias:
Un programa tiene la forma
|
En el editor de Quick Basic se escribiría codificado el seudo código
que tendría la forma:
REM Programa para calcular las soluciones
REM de una ecuacion de segundo grado
PRINT "Escriba los valores de A, B y C"
C$=”Calculos”
INPUT " A,B,C", A, B, C
R = (B ^ 2 - 4 * A * C) ^ .5
LET X1 = (-B + R) / (2 * A)
LET X2 = (-B + R) / (2 * A)
PRINT
PRINT " A="; A, " B="; B, "C="; C
PRINT "X1="; X1, "X2="; X2
PRINT
END
En el Menú
Ejecutar |
En la pantalla veríamos:
Mandato (command): es una orden aislada de efecto inmediato.
Ejemplo:
Mandato | Descripción |
RUN | Ordena la ejecución de un programa. |
LIST | Escribe En la pantalla el listado del programa |
SAVE. | Guarda, graba el programa como un archivo de extensión BAS en el disco |
Instrucción: es una orden contenida en un programa.
Ejemplo:
Instrucción | Descripción |
PRINT | Escribe en pantalla. |
INPUT | Introduce (entra datos) |
Edición de un programa: un programa esta formado por líneas secuenciales que se ejecutan en forma descendente (Up Down)
Para dar por terminada una línea se pulsa la tecla Enter (Return) en cualquier parte de la misma. Para cambiar una línea basta volver a teclearla.
- Se puede corregir una línea (borrar, rescribir ) en pantalla o bien con el mandato EDIT.
- Se pueden incluir varias instrucciones en una misma línea, separándolos por dos puntos.
- Una línea de pantalla (cuarenta u ochenta posiciones) es diferente de una línea de programa (doscientos cincuenta y seis posiciones).
Modo Directo:
Modo Programa
Run
Ventana activa
Ventana inmediata
mandato | Descripción |
CLS | borra la pantalla |
Recomendaciones:
- Todo programa debe estar documentado con comentarios; la primera línea debe contener el titulo del programa. Los comentarios deben de ir precedidos de la palabra clave REM o de un apostrofo ( ‘ )
- Si una línea ya tiene otras instrucciones, el comentario debe ir al final de la línea.
- Los comentarios solo aparecen en el listado del programa y no aparecen escritos en la pantalla durante la ejecución.
Constantes:
QBasic, trabaja con dos tipos de datos:
Datos | Tipos |
numéricos: | Enteros (INT) Enteros largos (LNG) de simple precisión (SGL) de doble precisión (DBL) |
alfanuméricos | hileras o cadenas (STR) fila de caracteres en ASCII ( en parte del teclado ) |
- Las constantes alfanuméricas pueden ser enteras o fraccionarias, se representan en forma decimal; se puede emitir el cero a la izquierda del punto decimal. Ejemplo
3452 | -12.67 | .23 | +12345 |
Estos son ejemplos de valores numéricos de punto fijo; se puede emplear una notación de punto flotante.
Mantisa | letra | exponente |
1,23456E+15 | |
123456.0000000000 | |
1.234567890789456D–10 | 0.000000000123456789012456 |
- El numero máximo de cifras significativas con que se trabaja es:
6 para la precisión simple (SNG)
16 para la precisión doble (DLB)
- En las constantes de punto fijo hay que añadir el carácter #
- Las constantes alfanuméricas son hileras de caracteres; se escriben entre comillas, Ej. “Hola “ ; “ A47EC
- Una variable es una zona de memoria que almacena un dato
X | R A M | |
DIA $ | ||
Peso | ||
-23.5 | ||
lunes | ||
80 |
- Una variable se identifica mediante un nombre. El nombre de una variable numérica debe empezar por una letra y puede ir sucedido de otras letras y / o otros dígitos (X, A, B1, peso, T341)
- Una variable alfanumérica debe terminar con el carácter $ (x$, a23$, dias$,)
- Están terminantemente prohibidas los nombres de variables que contengan palabras claves de Basic (PRUN, LIST, NIF$,)
- Las variables de precisión doble y enteros se identifican añadiendo el carácter # o el carácter % , también se pueden declarar como
DEFDBL A
Los comentarios que se incluyan deben ser significativos
Documentación interna:
· Va incluida dentro del código del programa fuente, por medio de comentarios que ayudan a la comprensión del código.
- Todas las sentencias comienzan con la sentencia REM o su equivalente el carácter apostrofe ( ‘).
El programa en si no los necesita y los ignora. Hace que los programas sean comprensibles.
Documento cedido por:
JORGE LUIS CASTILLO TEJEDA
Programación
Historia
Para crear un programa, y que la computadora interprete y ejecute las instrucciones escritas en él, debe usarse un Lenguaje de programación.
En sus inicios las computadoras interpretaban sólo instrucciones en un lenguaje específico, del más bajo nivel, conocido como código máquina, siendo éste excesivamente complicado para programar. De hecho sólo consiste en cadenas de números 1 y 0 (Sistema binario).
Para facilitar el trabajo de programación, los primeros científicos que trabajaban en el área decidieron reemplazar las instrucciones, secuencias de unos y ceros, por palabras o letras provenientes del inglés; codificándolas así y creando un lenguaje de mayor nivel, que se conoce como Assembly o lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). En realidad escribir en lenguaje ensamblador es básicamente lo mismo que hacerlo en lenguaje máquina, pero las letras y palabras son bastante más fáciles de recordar y entender que secuencias de números binarios.
A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método sencillo para programar. Entonces, se crearon los lenguajes de alto nivel. Mientras que una tarea tan trivial como multiplicar dos números puede necesitar un conjunto de instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo una.
Una vez que se termina de escribir un programa, sea en ensamblador o en un lenguaje de alto nivel, es necesario compilarlo, es decir, traducirlo a lenguaje máquina.1
éxico y programación
La programación se rige por reglas y un conjunto más o menos reducido de órdenes, expresiones, instrucciones y comandos que tienden a asemejarse a una lengua natural acotada (en inglés); y que además tienen la particularidad de una reducida ambigüedad. Cuanto menos ambiguo es un lenguaje de programación, se dice, es más potente. Bajo esta premisa, y en el extremo, el lenguaje más potente existente es el binario, con ambigüedad nula (lo cual lleva a pensar así del lenguaje ensamblador).
En los lenguajes de programación de alto nivel se distinguen diversos elementos entre los que se incluyen el léxico propio del lenguaje y las reglas semánticas y sintácticas.
Programas y algoritmos
Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa normalmente implementa (traduce a un lenguaje de programación concreto) uno o más algoritmos. Un algoritmo puede expresarse de distintas maneras: en forma gráfica, como un diagrama de flujo, en forma de código como en pseudocódigo o un lenguaje de programación, en forma explicativa, etc.
Los programas suelen subdividirse en partes menores, llamadas módulos, de modo que la complejidad algorítmica de cada una de las partes sea menor que la del programa completo, lo cual ayuda al desarrollo del programa. Esta es una práctica muy utilizada y se conoce como "refino progresivo".
Según Niklaus Wirth, un programa está formado por los algoritmos y la estructura de datos.
Se han propuesto diversas técnicas de programación cuyo objetivo es mejorar tanto el proceso de creación de software como su mantenimiento. Entre ellas, se pueden mencionar las siguientes:
- programación estructurada
- programación modular
- programación orientada a objetos (POO)
- programación declarativa
Compilación
El programa escrito en un lenguaje de programación (fácilmente comprensible por el programador) es llamado programa fuente y no se puede ejecutar directamente en una computadora. La opción más común es compilar el programa obteniendo un módulo objeto, aunque también puede ejecutarse en forma más directa a través de un intérprete informático.
El código fuente del programa se debe someter a un proceso de traducción para convertirlo en lenguaje máquina, código éste directamente ejecutable por el procesador. A este proceso se le llama compilación.
Normalmente la creación de un programa ejecutable (un típico.exe para Microsoft Windows o DOS) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y traduce el código fuente escrito en un lenguaje de programación almacenado en un archivo a código en bajo nivel (normalmente en código objeto, no directamente a lenguaje máquina). El segundo paso se llama enlazado en el cual se enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se añade el código de las funciones que hay en las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el código objeto a código máquina, y generando un módulo ejecutable.
Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de compilación en archivos objetos (un típico.obj para Microsoft Windows, DOS o para Unix); para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de compilación se almacena sólo temporalmente. Un programa podría tener partes escritas en varios lenguajes (por ejemplo C, C++ y ensamblador), que se podrían compilar de forma independiente y luego enlazar juntas para formar un único módulo ejecutable.
Programación e ingeniería del software
Existe una tendencia a identificar el proceso de creación de un programa informático con la programación, que es cierta cuando se trata de programas pequeños para uso personal, y que dista de la realidad cuando se trata de grandes proyectos.
El proceso de creación de software, desde el punto de vista de la ingeniería, incluye los siguientes pasos:
- Reconocer la necesidad de un programa para solucionar un problema o identificar la posibilidad de automatización de una tarea.
- Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el programa y para qué se necesita.
- Realizar el análisis de los requisitos del programa. Debe quedar claro cómo debe realizar el programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa se pueden especificar en esta fase.
- Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de complejidad abordable.
- Implementar el programa. Consiste en realizar un diseño detallado, especificando completamente todo el funcionamiento del programa, tras lo cual la codificación debería resultar inmediata.
- Implantar (instalar) el programa. Consiste en poner el programa en funcionamiento junto con los componentes que pueda necesitar (bases de datos, redes de comunicaciones, etc.).
La ingeniería del software se centra en los pasos de planificación y diseño del programa, mientras que antiguamente (programación artesanal) la realización de un programa consistía únicamente en escribir el código.
Referencias históricas
La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matemáticas a Ada quien, después de conocer a Charles Babbage, tradujo y amplió una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora.
No olvidemos que este proceso está aplicado a todos los métodos científicos que actualmente se practican.
Objetivos de la programación
La programación debe perseguir la obtención de programas de calidad. Para ello se establece una serie de factores que determinan la calidad de un programa. Algunos de los factores de calidad más importantes son los siguientes:
- Corrección. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qué debe hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace.
- Claridad. Es muy importante que el programa sea lo más claro y legible posible, para facilitar así su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros programadores puedan continuar el trabajo fácilmente. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de código. Otros, por diversión o para impedir un análisis cómodo a otros programadores, recurren al uso de código ofuscado.
- Eficiencia. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración al obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico de red que genera, etc.).
- Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquélla en la que se elaboró. La portabilidad es una característica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux ejecutarse también en la familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a más usuarios más fácilmente.
PARA MAYOR INFORMACIÓN ACCEDE A LOS SIGUIENTES ENLACES ABAJO Y DÉJANOS TUS COMENTARIOS








