17
"Las computadoras son buenas siguiendo instrucciones, pero no leyendo tu mente." - Donald Knuth Problema Un problema es un conjunto de cuestiones que se plantean para ser resueltas. En Informática: se busca la solución utilizando computadoras, mediante un programa (buscando el mejor resultado en tiempo y forma). Planteamiento QUE me están pidiendo; CÓMO resolverlo; CON QUÉ, expresar la supuesta solución (recursos, herramientas...). Lenguajes de programación Un programa es un conjunto de órdenes para una computadora. Estas órdenes se le deben dar en un cierto lenguaje, que la computadora sea capaz de comprender. El problema es que los lenguajes que realmente entienden las computadoras resultan difíciles para nosotros, porque son muy distintos de los que nosotros empleamos habitualmente para hablar. Escribir programas en el lenguaje que utiliza internamente la computadora (llamado “lenguaje máquina” o “código máquina”) es un trabajo duro, tanto a la hora de crear el programa como (especialmente) en el momento de corregir algún fallo o mejorar lo que se hizo. Por eso, en la práctica se emplean lenguajes más parecidos al lenguaje humano, llamados “lenguajes de alto nivel”. Normalmente, estos son muy parecidos al idioma inglés, aunque siguen unas reglas mucho más estrictas. Lenguajes de alto nivel y de bajo nivel. Vamos a ver en primer lugar algún ejemplo de lenguaje de alto nivel, para después comparar con lenguajes de bajo nivel, que son los más cercanos al ordenador.

03 Material Programación.docx

Embed Size (px)

Citation preview

"Las computadoras son buenas siguiendo instrucciones,pero no leyendo tu mente." -Donald Knuth

ProblemaUn problema es un conjunto de cuestiones que se plantean para ser resueltas. En Informtica: se busca la solucin utilizando computadoras, mediante un programa (buscando el mejor resultado en tiempo y forma).Planteamiento QUE me estn pidiendo; CMO resolverlo; CON QU, expresar la supuesta solucin (recursos, herramientas...).

Lenguajes de programacinUn programa es un conjunto de rdenes para una computadora.Estas rdenes se le deben dar en un cierto lenguaje, que la computadora sea capaz de comprender. El problema es que los lenguajes que realmente entienden las computadoras resultan difciles para nosotros, porque son muy distintos de los que nosotros empleamos habitualmente para hablar. Escribir programas en el lenguaje que utiliza internamente la computadora (llamado lenguaje mquina o cdigo mquina) es un trabajo duro, tanto a la hora de crear el programa como (especialmente) en el momento de corregir algn fallo o mejorar lo que se hizo.Por eso, en la prctica se emplean lenguajes ms parecidos al lenguaje humano, llamados lenguajes de alto nivel. Normalmente, estos son muy parecidos al idioma ingls, aunque siguen unas reglas mucho ms estrictas.Lenguajes de alto nivel y de bajo nivel.Vamos a ver en primer lugar algn ejemplo de lenguaje de alto nivel, para despus comparar con lenguajes de bajo nivel, que son los ms cercanos al ordenador.Uno de los lenguajes de alto nivel ms sencillos es el lenguaje BASIC. En este lenguaje, escribir el texto Hola en pantalla, sera tan sencillo como usar la ordenPRINT "Hola"Otros lenguajes, como Pascal, nos obligan a ser algo ms estrictos, pero a cambio hacen ms fcil descubrir errores:program Saludo;beginwrite('Hola');end.El equivalente en lenguaje C resulta algo ms difcil de leer:#include int main(){printf("Hola");}Los lenguajes de bajo nivel son ms cercanos al ordenador que a los lenguajes humanos. Eso hace que sean ms difciles de aprender y tambin que los fallos sean ms difciles de descubrir y corregir, a cambio de que podemos optimizar al mximo la velocidad (si sabemos cmo), e incluso llegar a un nivel de control del ordenador que a veces no se puede alcanzar con otros lenguajes. Por ejemplo, escribir Hola en lenguaje ensamblador de un ordenador equipado con el sistema operativo MsDos y con un procesador de la familia Intel x86 sera algo comodosseg.model small.stack 100h

.datahello_message db 'Hola',0dh,0ah,'$'

.codemain procmov ax,@datamov ds,axmov ah,9

mov dx,offset hello_messageint 21h

mov ax,4C00hint 21h

main endpend mainResulta bastante ms difcil de seguir. Pero eso todava no es lo que el ordenador entiende, aunque tiene una equivalencia casi directa. Lo que el ordenador realmente es capaz de comprender son secuencias de ceros y unos. Por ejemplo, las rdenes mov ds, ax y mov ah, 9 (en cuyo significado no vamos a entrar) se convertiran a lo siguiente:1000 0011 1101 1000 1011 0100 0000 1001

Ensambladores, compiladores e intrpretesEst claro entonces que las rdenes que nosotros hemos escrito (lo que se conoce como programa fuente) deben convertirse a lo que la computadora comprende (obteniendo el programa ejecutable).Si elegimos un lenguaje de bajo nivel, como el ensamblador (en ingls Assembly, abreviado como Asm), la traduccin es sencilla, y de hacer esa traduccin se encargan unas herramientas llamadas ensambladores (en ingls Assembler).Cuando el lenguaje que hemos empleado es de alto nivel, la traduccin es ms complicada, y a veces implicar tambin recopilar varios fuentes distintos o incluir posibilidades que se encuentran en bibliotecas que no hemos preparado nosotros. Las herramientas encargadas de todo esto son los compiladores.El programa ejecutable obtenido con el compilador o el ensamblador se podra hacer funcionar en otra computadora similar al que habamos utilizado para crearlo, sin necesidad de que esa otra computadora tenga instalado el compilador o el ensamblador.Por ejemplo, en el caso de Windows (y de MsDos), y del programa que nos saluda en lenguaje Pascal, tendramos un archivo fuente llamado SALUDO.PAS. Este archivo no servira de nada en una computadora que no tuviera un compilador de Pascal. En cambio, despus de compilarlo obtendramos un archivo SALUDO.EXE, capaz de funcionar en cualquier otra computadora que tuviera el mismo sistema operativo, aunque no tenga un compilador de Pascal instalado.Un intrprete es una herramienta parecida a un compilador, con la diferencia de que en los intrpretes no se crea ningn programa ejecutable capaz de funcionar por s solo, de modo que si queremos distribuir nuestro programa a alguien, deberemos entregarle el programa fuente y tambin el intrprete que es capaz de entenderlo, o no le servir de nada. Cuando ponemos el programa en funcionamiento, el intrprete de encarga de convertir el programa en lenguaje de alto nivel a cdigo mquina, orden por orden, justo en el momento en que hay que procesar cada una de las rdenes.Para algunos lenguajes, es frecuente encontrar compiladores pero no suele existir intrpretes. Es el caso del lenguaje C, de Pascal y de C++, por ejemplo. En cambio, para otros lenguajes, lo habitual es trabajar con intrpretes y no con compiladores, como ocurre con Python, Ruby y PHP.Adems, hoy en da existe algo que parece intermedio entre un compilador y un intrprete:Existen lenguajes que no se compilan para obtener un ejecutable para un ordenador concreto, sino un ejecutable genrico, que es capaz de funcionar en distintos tipos de computadoras, a condicin de que en esa computadora exista una mquina virtual capaz de entender esos ejecutables genricos. Esta es la idea que se aplica en Java: los fuentes son archivos de texto, con extensin .java, que se compilan a archivos .class. Estos archivos .class se podran llevar a cualquier computadora que tenga instalada una mquina virtual Java (las hay para la mayora de sistemas operativos). Esta misma idea se sigue en el lenguaje C#, que se apoya en una mquina virtual llamada Dot Net Framework (algo as como armazn punto net).

PseudocdigoA pesar de que los lenguajes de alto nivel se acercan al lenguaje natural, que nosotros empleamos, es habitual no usar ningn lenguaje de programacin concreto cuando queremos plantear los pasos necesarios para resolver un problema, sino emplear un lenguaje de programacin ficticio, no tan estricto, muchas veces escrito incluso en espaol. Este lenguaje recibe el nombre de pseudocdigo.Esa secuencia de pasos para resolver un problema es lo que se conoce como algoritmo (realmente hay alguna condicin ms, por ejemplo, debe ser un nmero finito de pasos). Por tanto, un programa de computadora es un algoritmo expresado en un lenguaje de programacin.Por ejemplo, un algoritmo que controlara los pagos que se realizan en una tienda con tarjeta de crdito, escrito en pseudocdigo, podra ser:Leer banda magntica de la tarjetaConectar con central de cobrosSi hay conexin y la tarjeta es correcta:Pedir cdigo PINSi el PIN es correctoComprobar saldo_existenteSi saldo_existente > importe_compraAceptar la ventaDescontar importe del saldo.Fin SiFin SiFin Si

Los sistemas de procesamiento de la informacinPara los informticos, datos e informacin no son sinnimos. Datos se refiere a la representacin de algn hecho, concepto o entidad real, en cambio, informacin implica datos procesados y organizados.Un sistema en general se define como un conjunto de componentes conectados e interactivos, que tiene un propsito y una unidad total. En consecuencia, sistema de procesamiento de informacin es un sistema que transforma datos brutos en informacin organizada, significativa y til.El conjunto de instrucciones que especifican la secuencia de operaciones a realizar para resolver un sistema especfico o clase de problema se denomina algoritmo. En otras palabras, un algoritmo es una frmula para la resolucin de un problema.Un programa se escribe en un lenguaje de programacin y a la actividad de expresar un algoritmo en forma de programa se le denomina programacin. Un programa consta de una secuencia de instrucciones, cada una de las cuales especifica las operaciones que debe realizar la computadora.La resolucin de problemas exige al menos los siguientes pasos:1. Definicin o anlisis del problema2. Diseo del algoritmo (Secuencia ordenada de pasos que conducen a la solucin).3. Transformacin del algoritmo en un programa (Fase de codificacin).4. Ejecucin y validacin del programa.

CONCEPTO DE ALGORITMOPara ser un programador eficaz se necesita aprender a resolver problemas de un modo riguroso y sistemtico.Los algoritmos son ms importantes que los lenguajes de programacin o las computadoras. Un lenguaje de programacin es tan slo un medio para expresar el algoritmo, y una computadora es slo un procesador para ejecutarlo.DefinicinUn algoritmo es un conjunto de tareas o pasos en una cantidad finita que se ejecutan en un orden determinado, y para determinada situacin inicial se resuelve el problema en un tiempo finito.situacin ---------> algoritmo ----------> solucin inicialCaractersticas que debe cumplir1. Debe ser correcto; responder a lo que me piden y resolver el problema;2. Eficiente en cuanto a recursos y tiempo;3. Claro;4. Flexible; poder adaptarse a pequeos cambios de lgica;5. Preciso; e indicar el orden de realizacin de cada paso;6. Estar definido: si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez;7. Ser finito:, se debe terminar el algn momento; debe tener un nmero finito de pasos;8. Fiable confiable; estar acorde a lo anterior en cuanto a propuesta de solucin.La definicin de un algoritmo debe describir tres partes: entrada, proceso y salida.La resolucin de problemas con computadoras se puede dividir en tres fases: Anlisis del problema Diseo del algoritmo Resolucin del algoritmo en la computadora

El primer paso requiere que el problema sea definido y comprendido claramente para que pueda ser analizado con todo detalle. Una vez analizado el problema, se debe desarrollar el algoritmo. Por ltimo, para resolver el algoritmo mediante una computadora se necesita codificar el algoritmo en un lenguaje de programacin.Anlisis del problemaEl propsito del anlisis del problema es ayudar al programador para llegar a una cierta comprensin de la naturaleza del problema. El problema debe estar bien definido si se quiere llegar a una solucin satisfactoria.Para poder definir con precisin el problema se requiere que las especificaciones de entrada y salida sean descritas en detalle. stos son los requisitos ms importantes para llegar a una solucin eficaz.Diseo del algoritmoLa descomposicin del problema original en subproblemas ms simples y a continuacin dividir estos subproblemas en otros mas simples, que pueden ser implementados para su solucin en la computadora, se denomina diseo descendente (top-down design). Este mtodo se suele denominar tambin divide y vencers.Para problemas complejos se necesitan con frecuencia diferentes niveles de refinamiento antes de que se pueda obtener un algoritmo claro, preciso y completo.Las ventajas ms importantes del diseo descendente son: El problema se comprende ms fcilmente al dividirse en partes ms simples, denominadas mdulos; Realizarle modificaciones al algoritmo es ms fcil; La comprobacin de la solucin del problema se puede verificar fcilmente.Estructura inicial del algoritmo: Las tareas deben estar seguidas de alguna secuencia definida se pasos hasta que se obtenga un resultado coherente; El flujo de control usual de un algoritmo es secuencial; Un aspecto importante a considerar es el mtodo elegido para describir los algoritmos: empleo de justificacin en la escritura de algoritmos.

Resolucin del problema mediante computadorasEsta fase se descompone en las siguientes subfases: Comprobacin del algoritmo en un programa Ejecucin del programa Comprobacin del programaLa fase de conversin del algoritmo en un lenguaje especfico de programacin se denomina codificacin, y el algoritmo resultante se denomina cdigo.Tras la codificacin del programa, el mismo deber ejecutarse en una computadora y a continuacin de comprobar los resultados, pasar a la fase final de documentacin.

Representacin grfica de los algoritmosSe debe utilizar algn mtodo que permita independizar el algoritmo del lenguaje de programacin elegido. Ello permitir que un algoritmo pueda ser codificado indistintamente en cualquier lenguaje.Los mtodos usuales para representar un algoritmo son: Diagrama de flujo Diagrama N-S (Nassi-Schneiderman) Lenguaje de especificacin de algoritmos: Pseudocdigo Lenguaje espaol Frmulas

Un diagrama de flujo (flowchart) es un diagrama que utiliza smbolos (cajas) estndar y que tiene los pasos del algoritmo escritos en esas cajas, unidas por flechas denominadas lneas de flujo, que indican la secuencia en que se deben ejecutar. Los smbolos estndar normalizados por ANSI (American National Standars Institute) son muy variados.

El diagrama N-S, tambin conocido como diagrama de chapln, es como un diagrama de flujo en el que se omiten las lneas de flujo y las cajas son contiguas. Las acciones sucesivas se escriben en cajas sucesivas y, como en los diagramas de flujo, se pueden escribir diferentes acciones en una caja.

El pseudocdigo es un lenguaje de especificacin (descripcin) de algoritmos. El uso de tal lenguaje hace el paso de codificacin final relativamente fcil.Se considera como un primer borrador, dado que el pseudocdigo tiene que traducirse posteriormente a un lenguaje de programacin.La ventaja del pseudocdigo es que, en la planificacin de un programa, el programador se puede concentrar en la lgica y en las estructuras de control, y no preocuparse por las reglas de un lenguaje especfico. Adems, es fcil de modificar si se encuentran errores.Es muy importante aadir comentarios durante la utilizacin de ste o cualquier otro lenguaje. El comentario brinda informacin acerca de las acciones que realiza el programa, y no realiza ninguna instruccin ejecutable, slo tiene efecto de documentacin interna del programa.

ESTRUCTURA GENERAL DE UN PROGRAMA

Un programa es un conjunto de instrucciones (rdenes) que producirn la ejecucin de una determinada tarea; es la conversin del algoritmo haciendo uso de los constructores formales de un lenguaje de programacin para ser ejecutado en una pc.Atributos, caractersticas debe estar definido: nico punto de entrada/salida, que se comprenda la secuencia de las acciones; debe ser confiable; eficiente, en cuanto al uso de los recursos de la mejor manera posible;-tiempo (anlisis de cantidad de acciones/operaciones);-espacio (asociado a la cantidad de datos a considerar en el algoritmo). debe ser claro, tener una documentacin; debe ser portable: permitir ser ejecutado en distintas pcs con un mnimo de cambios.El proceso de programacin es un proceso de solucin de problemas, y el desarrollo de un programa requiere las siguientes fases:1. Definicin y anlisis del problema.2. Diseo de algoritmos: diagrama de flujo diagrama N-S pseudocdigo3. Codificacin del programa.4. Depuracin y verificacin del programa.5. Documentacin externa.6. Mantenimiento.En todos los casos anteriores, llevar a cabo simultneamente la adecuada documentacin interna.PARTES CONSTITUTIVAS DE UN PROGRAMATras la decisin de desarrollar un programa, el programador debe establecer el conjunto de especificaciones que debe contener el programa: entrada, salida y algoritmos de resolucin, que incluir las tcnicas para obtener las salidas a partid de las entradas.Instrucciones y tipos de instruccionesUn programa puede ser lineal o no lineal: Es lineal si las instrucciones se ejecutan secuencialmente, sin bifurcaciones, decisiones ni comparaciones; Es no lineal cuando se interrumpe la secuencia mediante instrucciones de bifurcacin.La clasificacin ms usual es: Instrucciones de inicio / fin. Instrucciones de asignacin: dar valores a una variable. Instrucciones de lectura: leer datos de un dispositivo de entrada. Instrucciones de escritura. Instrucciones de bifurcacin.Instrucciones de bifurcacinPueden ser hacia delante o hacia atrs, y pueden realizarse de manera condicional o incondicional: Bifurcacin incondicional: se realiza siempre que el flujo del programa pase por la instruccin sin necesidad del cumplimiento de ninguna condicin. Bifurcacin condicional: que se ejecute o no, depende del cumplimiento de una determinada condicin.Elementos bsicos de un programaLos lenguajes de programacin tienen elementos bsicos que se utilizan como bloques constructivos, as como reglas para que estos elementos se combinen; esas reglas se denominan sintaxis del lenguaje. Solamente las instrucciones sintcticamente correctas pueden ser interpretadas por la computadora, y los programas que contengan errores de sintaxis sern rechazados por la mquina.Los elementos bsicos constitutivos de un programa o algoritmo son: palabras reservadas (hacer, fin hacer, si >> entonces...) identificadores (nombres de variables esencialmente) caracteres especiales (coma, apstrofe...) constantes variables expresiones instruccionesAdems de estos elementos bsicos, existen otros que forman parte de los programas: bucles. acumuladores. contadores. interruptores. estructuras de control: secuenciales, selectivas, repetitivas.

BuclesUn bucle o lazo (loop) es un segmento de un algoritmo o programa, cuyas instrucciones se repiten una n cantidad de veces mientras se cumpla una determinada condicin.Se debe establecer un mecanismo para determinar las tareas repetitivas; este mecanismo es una condicin que puede ser verdadera o falsa, y que se comprueba cada vez que se realiza un paso o iteracin del bucle.Un bucle consta de tres partes: decisin cuerpo salidaLos bucles son anidados cuando estn dispuestos de tal modo que unos son interiores a otros, y son independientes cuando son externos unos de otros.

Contadores y acumuladoresVARIABLE ACUMULADORA: Su funcin es acumular valores, distintos o no, en forma parcial; valores resultantes de sumas sucesivas. Se debe inicializar siempre, de lo contrario el valor que esta tome va a incluir el acumulado de todas las veces que corri el programa. Generalmente se inicializa al comienzo o casi al final del programa. El modo de acumularle valores es siempre el mismo::= +

VARIABLE CONTADORA: Es una variable cuyo valor se incrementa o decrementa en una unidad, en cada iteracin.:= + InterruptoresUn interruptor o conmutador (switch) llamado a veces, indicador o bandera (flag) es una variable que puede tomar diversos valores a lo largo de la ejecucin del programa, y que permite comunicar informacin de una parte a otra del mismo.Estructura de algoritmos / programasUn algoritmo constar de dos componentes: una cabecera de programa y un bloque algoritmo.La cabecera de programa es una accin simple que comienza con la palabra algoritmo o programa. Esta palabra estar seguida por el nombre completo asignado al programa.El bloque algoritmo es el resto del programa, y consta de dos componentes o secciones: las acciones de declaracin y las acciones ejecutables.Las declaraciones definen o declaran las variables y constantes que tengan nombre .Las acciones ejecutables son las acciones que posteriormente deber realizar la pc cuando el algoritmo convertido en programa se ejecute.ComentariosLa documentacin de un programa es el conjunto de informacin interna y externa al programa, que facilitar su posterior mantenimiento y puesta a punto.La documentacin interna es la que acompaa en el cdigo o programa fuente y se realiza a base de comentarios significativos. Estos comentarios se representan con diferentes notaciones, segn el tipo de lenguaje de programacin.La documentacin externa se realizar con informacin ajena al programa, y ser proporcionada por el programador.