Professional Documents
Culture Documents
Figura. 1. baco antiguo Regla de clculo (1625 D.C.): Inventada por John Napier, fue una herramienta de
Figura. 3. Pascalina, construida en 1642 Charles Babbage (1822): Ch. Babbage dise una mquina que funcionaba con vapor y que llam motor de diferencias, esta mquina era del tamao de un cuarto y era capaz de calcular las tablas de multiplicar y las tablas de logaritmos.
Figura. 4. Mquina de diferencias construida por Charles Babbage en 1822. La ABC (1937): En 1847 George Bool desarroll el lgebra bivalente, ahora conocida como algebra booleana, y es la base matemtica en la que residen todos los clculos que hacen las computadoras modernas, la primer computadora que utiliz este sistema se construy en 1937, se llam ABC, que son las iniciales de Atanasoff Berry Computer.
Figura. 5. Computadora ABC, hecha por Vincent Atanasoff y Clifford Berry en 1937. Las primeras computadoras electrnicas se construyeron entre las dcadas de 1920 y 1930, lo que marc la era de las computadoras electrnicas. Las computadoras que se construyeron con componentes electrnicos han cambiado de acuerdo a la tecnologa electrnica de sus componentes, esta es la primera clasificacin de los tipos de computadoras, cada clase se le conoce como generacin.
Figura. 6. John von Neumann a un lado de la computadora ENIAC En 1946, John von Neumann, quien fue pionero en las ciencias computacionales, estudi e hizo significativos aportes al desarrollo del software, de hecho, fue von Neumann quien invent los diagramas de flujo. Las principales lneas de investigacin en la teora de la programacin fueron:
Figura. 7. La computadora Apple 1, de 1976, se vendi como un kit de "hgalo usted mismo" en unos $600.0 El precio de las computadoras personales (PCs), que son miles de veces ms poderosas que la ENIAC, es mucho menor. Los avances tecnolgicos, como el desarrollo de los CIs y tecnologa de superconductores hicieron posible que el costo de produccin disminuyera significativamente, y con esto, el costo de venta para los usuarios finales. Ahora ya hemos alcanzado la quinta generacin de computadoras con la caracterstica de cmputo empotrado, cmputo vestible, cmputo molecular y la inteligencia artificial. En la actualidad hay computadoras hechas de molculas de ADN, aunque su funcionalidad an no es de propsito general, se estn logrando significativos avances en este aspecto.
10
11
12
13
Figura. 9. Supercomputadora BlueGene L, la mejor del mundo hasta ahora (sep/2007). Es una mquina de 360 TeraFLOPS (360 1012, o 360.000.000.000.000) Mainframe. (Figura 10). El significado del trmino mainframe dentro de la computacin, ha cambiado varias veces. Al principio, mainframe era un trmino con el que se designaba a las computadoras que se alojaban en cuartos enormes, luego se utiliz para distinguir las mquinas que compartan los recursos con muchas computadoras de menos poder de cmputo. Ahora, el trmino se refiere usualmente a las computadoras compatibles con el sistema IBM 360. Otras computadoras con las mismas capacidades se suelen llamar servidores. En general, nosotros entenderemos como mainframe, una computadora que es capaz de compartir los recursos con muchas otras computadoras de menor capacidad. Los mainframes se utilizan en universidades, bancos, etc. Una computadora mainframe acepta entradas de otras terminales, u otros mainframes. Una terminal es una computadora con muy poco poder de cmputo que requiere de los servicios que presta un mainframe, usualmente se les conoce como terminales tontas.
14
15
Figura. 11. Computadoras personales. Actualmente ya tienen mucho poder de cmputo, son relativamente baratas y corren una amplia gama de aplicaciones. Las computadoras personales pueden ejecutar una amplia gama de aplicaciones de propsito general, como procesadores de texto, hojas de clculo, presentadores de transparencias, manejadores de bases de datos, entre otros. Tambin se conocen como terminales, o estaciones de trabajo. Pueden caber perfectamente en un escritorio, en conjunto con un monitor, un ratn y un teclado. La mayora de los negocios hacen redes interconectando varias estaciones de trabajo. (Figura 12). Servidores de redes. (Figura 12). Son similares a las PCs pero mucho ms poderosas. Los servidores manejan la seguridad de la red, archivos compartidos e impresoras compartidas. Un servidor es una computadora optimizada para proporcionar servicios a otras computadoras en una red de computadoras. Los servidores generalmente tienen procesadores poderosos y mucha memoria y discos duros de enorme capacidad.
16
Figura. 12. Computadoras personales. Frecuentemente se utilizan computadoras personales para conectarlas y hacer una red de computadoras.
17
Figura. 13. Computadoras personales. Porttiles. PDAs. (Figura 14). Los PDAs (Asistentes digitales personales) Son equipos de cmputo con generalmente poco poder de cmputo, pero esto mejora a pasos agigantados. Frecuentemente son utilizados como asistentes personales, y las aplicaciones que corren son telfono mvil, agendas, editores de planes, listas de cosas por hacer, juegos, etc. Caben en la palma de una mano, generalmente tienen una pantalla sensible al tacto para evitar el teclado. Utilizan una tecnologa de reconocimiento de patrones que les permite saber qu smbolo se dibuja con el lpiz sobre la pantalla.
18
Figura. 15. Las computadoras vestibles estn en pleno desarrollo. En un futuro cercano se podrn utilizar como ahora se utilizan los telfonos celulares.
19
Figura. 16. Organizacin bsica de las computadoras. Una computadora opera fundamentalmente en pasos de tiempo discreto. Las computadoras son dispositivos regidos por el tiempo, en donde los pasos del tiempo los proporciona de manera peridica un reloj central de acuerdo a su frecuencia de operacin. Cuando decimos: "... tengo una computadora de 1GHz...", significa que la computadora requiere 1 nanosegundo para realizar un tick. Una operacin puede tomar varios ticks en realizarse. La velocidad de la computadora se expresa en unidades de millones de instrucciones por segundo (MIPS). Nuestra computadora de 1GHz (la velocidad del reloj) puede tener una velocidad computacional de 200 MIPS. 1) Memoria: La memoria de la computadora es un arreglo de circuitos electrnicos capaces de mantener la polaridad de sus elementos por el tiempo que se encuentre encendida la computadora. Usualmente se le conoce como RAM (Memoria de acceso aleatorio). En la memoria se alojan los programas que se estn ejecutando y generalmente los datos que deben utilizar esos programas. Dentro de los programas que debe
20
21
Figura. 17. interfaz de entrada/salida de una computadora. Contiene circuitos integrados que controlan los dispositivos de entrada y salida y establece una comunicacin con la unidad central de proceso. Existen estndares para la transmisin de datos, tanto de entrada como de salida. Es el medio por el cual se envan o se reciben seales desde un sistema hacia otros. Los datos viajan por un bus de datos. Si el bus de datos es de poca capacidad y el procesador es de mucha capacidad, por ejemplo, si el bus de datos puede transmitir hasta 16 bits en un tick, y el procesador trabaja con 32 bits en cada tick, es claro que el procesador puede esperar hasta 2 ticks para trabajar; si el bus fuera de 64 bits y el procesador de 32 bits, entonces tambin hay un tiempo de espera. 4) Dispositivos de E/S: Los dispositivos de entrada y de salida son aquellos que se conectan a la unidad de computacin por medio de la interfaz de entrada/salida. Hay dispositivos de entrada, como los teclados, los ratones, las tabletas digitalizadoras, los micrfonos, etc.; y hay dispositivos de salida como los monitores, las bocinas, y cualquier otro actuador. Los dispositivos de E/S se conectan utilizando los puertos de la computadora. Antiguamente haba dos puertos, el puerto serial y el puerto paralelo. Actualmente est en desuso el puerto paralelo y en su lugar hay otros puertos seriales de alta velocidad, el USB (Bus Serial Universal) que se utiliza para casi cualquier dispositivo y el FireWire que se prefiere para transmitir altas cantidades de datos o de informacin, como los videos.
22
23
Los dgitos 7, 6, 3, 2, han sido ordenados de arriba hacia abajo en orden decreciente de acuerdo a su posicin en el nmero 7632. De manera similar, el nmero binario (en base 2) del ejemplo 1, el nmero 10011 es representado por los dgitos de la siguiente tabla:
Esto nos sirve para poder convertir cualquier nmero en binario a su expresin numrica en base decimal. Por ejemplo, el mismo nmero del ejemplo 1, el 10011 se expresa en decimal como el resultado de:
24
As, 100112 es equivalente al nmero 1910. El nmero en subndice a la derecha, indica la base que rige la expresin numrica. Esta misma idea la podemos aplicar a expresiones numricas de cualquier otra base. Por ejemplo, el nmero 2013:
de modo que las expresiones numricas 100112, 2013 y 1910 son equivalentes, cada una en su propio sistema numrico. Ejercicios: 1) Encuentre las expresiones numricas en sistema decimal equivalentes de los siguientes nmeros: a) 3368 b) 3367 c) 3369 2) a) b) c) El nmero decimal 845 es equivalente a qu numero binario? 11010011012 11010111012 11010011002
25
De modo que el nmero binario buscado es 101100100. Una vez terminadas las divisiones, el resultado se obtiene escribiendo los residuos de izquierda a derecha en orden decreciente respecto a su significancia, es decir, primero el ms significativo, hasta el bit menos significativo que se escribe en el extremo derecho. Para convertir un nmero decimal a una expresin en otra base diferente que 2 se debe considerar dividir entre la base deseada hasta que la parte entera de la divisin sea 0, y escribir los residuos de izquierda a derecha en el orden de significancia. Ejercicios: 1) Convierta los siguientes nmeros en base 10 a base 2: a) 11010 b) 79010 c) 1001110
26
27
28
29
... se puede utilizar (junto con otros comandos) para obtener informacin de los empleados en una base de datos. Los lenguajes de cuarta generacin son ms fciles de aprender y de manipular, pero son ms difciles de interpretar por la computadora. La computadora requiere de ms recursos para traducir una instruccin en lenguaje de cuarta generacin. Cada lenguaje de programacin tiene sus ventajas y desventajas. Por ejemplo, FORTRAN es muy bueno para hacer clculos numricos, pero es muy malo para hacer formatos de texto en la pantalla; mientras que COBOL es muy bueno para dar formatos de texto en la pantalla, pero muy malo para hacer cmputo numrico. Si queremos ser programadores profesionales, probablemente deberemos aprender varios lenguajes de programacin, porque actualmente los entornos de programacin permiten mezclar cdigo de diferentes lenguajes.
30
31
Figura. 18. Diseo modular con filosofa Top-Down para el desarrollo del Software.
32
Figura. 19. Sistema de Base de Datos La mayora de los lenguajes de cuarta generacin se utilizan para acceder a las bases de datos, quienes utilizan los siguientes componentes (figura 19): Sistema manejador de Bases de Datos. (DBMS) El manejador de la base de datos se asegura que se pueda leer de la base de datos y escribir en la base de datos de manera adecuada y sin confusiones. Lenguaje de consulta de la Bases de Datos. El lenguaje de consulta de la base de datos permite los usuarios especificar precisamente qu informacin desean de la base de datos. Generador de pantallas. El generador de pantallas proporciona una interfaz
33
34
Figura. 20. Esquema de un objeto. Tiene al interior las propiedades (atributos) y para acceder a ellos se hace por medio de las operaciones (mtodos). Cada objeto tiene un conjunto de propiedades y operaciones - o mtodos asociados con l (figura 20. Por ejemplo, el objeto reloj puede tener las propiedades: horas, minutos, segundos y los mtodos poneTiempo, tiempoActual. Las propiedades horas, minutos y segundos se pueden manipular solo por medio de los mtodos. Los programas orientados a objetos son modulares. Los programas modulares son fciles de corregir. La tendencia actual es la programacin orientada a objetos, considerando algunas extensiones a esta filosofa de programacin. Como ejemplos de lenguajes orientados a objetos, incluyen: Smaltalk. Smaltalk fue el primer lenguaje de programacin orientado a objetos, ofrece muchas libertades a los programadores, de modo que los programadores deben tener mucho cuidado al manejar la memoria del sistema. Java. Fue creado por la compaa Sun Microsystems, Java es un lenguaje orientado a objetos similar a C++ pero han mejorado el lenguaje con caractersticas que evitan errores de programacin comunes, como el manejo de la memoria, donde la responsabilidad recae en un subsistema que se llama recolector de basura. C + + . C + + es un superconjunto del lenguaje C. Generalmente es considerado uno de los mejores lenguajes para hacer aplicaciones a gran escala. C # . Fue desarrollado por Microsoft. C# (que se pronuncia C-sharp) es un hbrido de C y C++ que fue desarrollado para competir con Java y con el objetivo de mejorar la productividad en el desarrollo de aplicaciones WEB, manteniendo la flexibilidad y el poder de C y C++.
35
36
37
Cuando los programas tienen cientos o miles de lneas de cdigo, la identacin - o la falta de ella - afectarn significativamente la legibilidad del programa. Tambin los comentarios incrementan la legibilidad de un programa. Todos los lenguajes de programacin tienen un modo de insertar texto que no se ejecuta como parte del programa, por ejemplo, C trata cualquier texto entre /* */ como un comentario.
Un esfuerzo que deberamos practicar, es escribir variables con un significado que nos haga recordar fcilmente el porqu existe tal variable. Los nombres para las variables, generalmente empiezan con una letra y pueden continuar con ms letras o con nmeros, y a veces tambin se permiten los guiones y muy pocos smbolos especiales. Estas reglas son muy generales y se permiten nombres como a23 para el nombre de una variable. Comparemos los siguientes dos fragmentos de cdigo en Pascal y notemos la legibilidad en cada uno de ellos.
Cualquier persona que lea este ltimo fragmento de cdigo, no sabra lo que
38
39
Figura. 21. Fases del desarrollo del software. Una vez que se concluye, prcticamente se inicia nuevamente al entender las modificaciones que deben hacerse. 1) Introduccin al ciclo de vida del software: Regularmente hay cinco pasos en el ciclo de vida del software: a) Entender el problema. En la primera fase del ciclo de vida del software, se enlistan las tareas que el software debe desarrollar, los problemas a ser resueltos, y en esta fase se estudian sus causas y efectos. La tarea especfica que se requiere del programa se deriva del establecimiento del problema, que es una descripcin concisa del problema en cuestin. El software debe proporcionar una solucin utilizable a este problema. b) Disear el programa. En la fase de diseo, el objetivo es conocer las relaciones entre los mdulos del programa, y garantizar que se cumplen cabalmente los requerimientos solicitados de una manera eficiente, lgica y completa. Los diseadores de software consideran los recursos de hardware y software disponibles para poder alcanzar su objetivo. Si se llega a la conclusin de que no es posible utilizar algn hardware o software, se planea utilizar una estrategia diferente. Primero se disea la estructura general del programa. Entonces el problema se divide en subproblemas en tareas ms y ms pequeas hasta que tengan un tamao manejable. c) Codificar el programa. Durante la fase de codificacin, el programa se escribe en un lenguaje de programacin. Hay muchos lenguajes de programacin, cada uno de ellos es especialista en algn tipo de problemas. Por ejemplo, FORTRAN es especialista en clculos numricos, mientras que LISP es especialista en problemas de inteligencia artificial y procesamiento simblico. El cdigo del programa debe
40
41
Figura. 22. Roles de las personas que trabajan en el desarrollo del software. Una compaa de software emplea, frecuentemente, diversos equipos, cada uno de ellos es responsable de una fase diferente en el desarrollo del software (figura 22). Un equipo de desarrollo de software, tpicamente est compuesto por varios programadores programadores, al menos un programador analista y al menos un analista de sistemas. Los programadores asistentes usualmente son programadores con poca experiencia. Estos no escriben nuevos programas, en lugar de esto, se dedican a desarrollar trabajos de mantenimiento acerca de otros programas. Cuando los programadores han adquirido ms experiencia, pueden hacer nuevos programas. Las especificaciones de esos programas ya deben estar analizadas y autorizadas. Los programadores experimentados Senior programmer dan las especificaciones del programa y escriben nuevos programas. Ellos no hacen tareas de mantenimiento, solo se dedican a generar nuevo cdigo. Un programador analista trabaja muy de cerca con los diseadores del programa. Adems de programar nuevo cdigo, los programadores analistas empiezan a aprender las tcnicas y los lineamientos del diseo de software. Un analista de sistemas es un intermediario entre el cliente y los programadores. Los clientes comunican sus necesidades a los analistas de sistemas (figura 23). Los analistas traducen esos requerimientos en diseos de programas y se lo comunican a los programadores, quienes hacen de hecho, la programacin.
42
Figura. 23. En la fase de anlisis de requerimientos, los clientes y los analistas definen el propsito y capacidades del software.
43
Al escribir un programa, el programador debe completar satisfactoriamente cada uno de estos pasos: 1) Entender las especificaciones del programa. El programador debe entender cules son las entradas y cules son las salidas que se requieren del programa, adems del proceso lgico de los datos. 2) Disear el programa. Los diseadores de programas, utilizan herramientas de diseo, como el pseudocdigo o un diagrama de flujos estructurados. Estas herramientas detallan las tareas lgicas que el programa debe realizar. El programador debe analizar rigurosamente el diseo, para asegurarse de que ha entendido bien el resultado correcto esperado. 3) Codificar el programa. Un programador codifica el programa escribiendo en un lenguaje de programacin en particular. El cdigo se puede escribir primero en papel - como una recomendacin para los programadores principiantes - o se puede escribir en la computadora utilizando un editor. El programador revisa la lgica del cdigo y la sintaxis, para asegurarse de que todo est correcto. Esto lo pueden hacer manualmente, en lo que se conoce como prueba de escritorio. Una prueba de escritorio hace que se descubran algunos errores que se pueden corregir antes de que el cdigo sea compilado. Algunas veces, los programadores revisan el cdigo de otros programadores. Esto es una buena prctica de programacin y ocasiona que se revise el cdigo al menos dos veces en busca de posibles errores.
44
45
46
47
48
Figura. 24. Historia de la compilacin de un programa, desde el cdigo fuente hasta el cdigo ejecutable. Un programa linker (enlazador), combina todos los mdulos en el archivo objeto para formar un archivo ejecutable (figura 24). Un archivo ejecutable s es un programa completo en s mismo, es decir, no requiere hacer referencia al cdigo fuente original. Esto significa que correr ms rpidamente, comparado con la ejecucin del mismo programa cuando an no es ejecutable. Un intrprete traduce un cdigo fuente en lenguaje mquina tambin. El intrprete difiere del compilador en que ejecuta cada orden una vez que se traduce. Este proceso puede hacer ms lenta la ejecucin del programa, as que los intrpretes se utilizan menos que los compiladores. Un intrprete es otra manera de implementar un lenguaje de programacin. La interpretacin comparte muchos aspectos con el compilador. Los anlisis lxico, sintctico y verificacin de tipos son exactamente los mismos que en un compilador. Pero en lugar de generar cdigo del rbol sintctico, el rbol sintctico se procesa directamente para evaluar expresiones y ejecutar sentencias, y as hasta terminar. Un intrprete puede necesitar evaluar la misma parte del rbol sintctico varias veces (por ejemplo cuando se hacen ciclos), por eso la interpretacin puede ser ms lenta que la ejecucin de un programa compilado. Pero escribir un intrprete es ms fcil de mover a una mquina diferente, as que para aplicaciones donde la velocidad no importa, lo mejor es utilizar un intrprete. Es muy til sabe cmo se hace un intrprete o un compilador, porque esto permite a los programadores tener una idea de lo que hacen los programas de alto nivel, lo que a su vez, ayudar a los programadores para crear cdigo ms eficiente. Otras razones. Los errores que devuelven los compiladores proporcionan una manera fcil de entender el cdigo fuente; adems, se conoce la diferencia entre errores lxicos, sintcticos, errores de tipos, y as.
49
50
Figura. 25. Un debugger auxilia al programador para encontrar errores lgicos en el cdigo fuente. El cdigo debe ser legible y entendible, para que pueda ser mantenido. Los comentarios se pueden escribir en el cdigo para asegurarse que cumple estos requisitos. Los comentarios se usan para proporcionar notas explicatorias para el programador
51
52
Figura. 26. Muhammad ibn Ms al-Khwrizm. 780 D.C. - 850 D.C. aprox. A. Los algoritmos deben contener instrucciones precisas En ocasiones se suele mostrar cmo funciona un algoritmo con la idea del proceso para crear un pastel, en trminos generales si es correcto, pero en trminos especficos no lo es porque generalmente, una receta involucra pasos que no son bien determinados. Una receta para crear un pastel puede considerarse un algoritmo porque es un conjunto de pasos (aunque no necesariamente son bien determinados), donde hay algunos elementos de entrada, que son los ingredientes, un procedimiento que es la manera de hacerlo segn la receta y un producto de salida, que es el pastel mismo. El problema define la salida deseada, que a su vez, determina las entradas y las instrucciones. Por ejemplo, al decidir qu tipo de pastel queremos, debemos determinar qu ingredientes necesitamos y las instrucciones a seguir. Supongamos que decidimos escribir un algoritmo para hervir agua. La entrada es la cantidad de agua a cualquier temperatura por debajo del punto de ebullicin y la salida es el agua hirviendo. Un algoritmo debe proporcionar la salida correcta para cualquier condicin de los datos de entrada. Ejercicio: Ordene los siguientes pasos en orden de prioridad para resolver el problema de hervir agua.
53
Sin duda, podemos escribir los algoritmos en espaol. Para producir resultados consistentes, el lenguaje que usemos debe estar libre de ambigedades. Si decimos algo como: Verificar que la olla tenga suficiente agua, es una frase ambigua, porque para diferentes personas puede significar cosas diferentes la frase suficiente agua. Es preferible decir algo como: Verificar que la olla tenga al menos un cuarto de su capacidad de agua, porque se define qu es lo que significa suficiente. En este siguiente ejemplo debemos incluir un paso para llenar la olla con agua bajo condiciones especficas. -Verificar que la olla tenga al menos 1 cuarto de su capacidad de agua. -Si la olla tiene menos de 1 cuarto de su capacidad de agua, Y agregamos las instrucciones para poner la olla en la estufa y para encender la estufa. -Poner la olla en la hornilla de la estufa -Encender la hornilla de la estufa Un algoritmo debe tener bien claro un punto final, de modo que cuando la entrada sea procesada y la salida deseada se alcance, el proceso termine. Agregaremos entonces la instruccin final para terminar el algoritmo -Cuando el agua este hirviendo, apagar la estufa.
54
Figura. 27. Niclaus Wirth (izq.) y Harlan D. Mills (der.) fueron los primeros promotores del diseo Top-Down en la dcada de 1970. La solucin a los problemas computacionales puede llegar a se muy complicada y compleja. Cuando los programas son de miles de lneas, o componerse de diversos archivos de cdigo, es imposible mantener todos los detalles del programa en mente cuando se desarrolla un algoritmo. El diseo top-down es una herramienta que presenta en primer lugar una solucin a un problema general utilizando tres o cuatro pasos solamente. Cada uno de esos pasos en la primera solucin se dividen en otros subpasos. Este proceso se repite varias veces, en cada iteracin se produce una solucin ms detallada al problema original. Cuando los pasos ya no se pueden subdividir, el algoritmo ha terminado. El diseo top-down tambin se conoce comodescomposicin funcional o refinamiento de pasos. Ejercicio: De la siguiente lista de actividades, cul crees que est orientada al diseo Top-down? 1) Empezar con los detalles 2) Empezar con el problema en general 3) Considerar el problema general y los detalles al mismo tiempo El diseo top-down automticamente produce mdulos en un algoritmo.
55
Lo que nos ayuda a definir los mdulos de nuestro algoritmo en: Mdulo 1. Obtener detalles del cliente Mdulo 2. Obtener detalles de todas las ordenes de ese cliente Mdulo 3. Calcular el monto total de las facturas del cliente Mdulo 4. Agregar el 5% de inters a las facturas de hace 1 mes Mdulo 5. Agregar el 10% de inters a las facturas anteriores a 1 mes Mdulo 6. Sumar el monto de las facturas con el total de los intereses Mdulo 7. Imprimir el monto total Cada mdulo debe ser tratado en la misma manera que el problema general, el diseo top-down, hace que el problema general se convierta en problemas ms especficos y en general ms fciles de resolver.
56
Si la secuencia que llevan las instrucciones se desarrolla dentro de una estructura de control como el estatuto SI-ENTONCES, debemos identarlo para tener mayor claridad. Cuando la ejecucin de la secuencia de instrucciones dentro del bloque de la estructura de control termina, la identacin tambin termina, y vuelve a tener el nivel anterior.
57
58
59
60
En la lnea 2, el valor asignado a la variable a es 1, de modo que en adelante, se puede sustituir la ocurrencia de la variable a por la constante 1, a menos que exista otra orden que seale lo contrario. El problema se presenta de inmediato, porque en la lnea 3 hay una pregunta, que solicita el valor de a, pero como hemos utilizado el smbolo = para asignar valores a variables, en realidad, lo que debemos pensar es que en la lnea 3 del pseudocdigo, estamos asignando el nuevo valor 5 a la variable a, lo que ocasionar errores lgicos en la ejecucin del programa. Es por esta razn que utilizaremos diferentes smbolos para describir las diferentes situaciones respecto a la igualdad. Si se trata de una igualdad de tipo asignacin de valores, utilizaremos :=, como en variable := nuevoValor. Si se trata de una igualdad lgica, en la que se puede obtener un valor que sea verdadero o falso, entonces debemos escribirlo como =, como en variable = valorComparado. As, el pseudocdigo anterior puede ser reescrito como:
Es importante aclarar que lo expuesto anteriormente acerca del pseudocdigo, son convencion convencionalismos que no se deben tomar como un estndar ni mucho menos,
61
62
La figura 28 muestra de manera esquemtica el flujo del control del programa. Vemos que en la lnea 103 ocasiona que el control se transfiera a la lnea 107, ocasionando un posible error lgico.
Figura. 28. Esquema del flujo de instrucciones utilizando GOTO, basado en el ejemplo del listado 1
63
64
Ahora, veamos el siguiente cdigo. Se trata del mismo problema, pero desde un punto de vista estructurado, sin la orden GOTO.
Figura. 29. Esquema del flujo de instrucciones utilizando GOTO, basado en el ejemplo del listado 3. Los esquemas (a) y (b) describen el mismo flujo de rdenes, es claro que la forma (b) es ms entendible que (a). Listing 3. Ejemplo de la orden si-entonces-enOtroCaso desde un punto de vista estructurado.
65
Aunque el cdigo 3 tiene ms lneas que el cdigo 2, es ms legible y se entiende mejor. La lgica y el resultado de ambos programas es el mismo (figura 29), pero en el punto de vista estructurado es ms fcil seguir la lgica del programa.
66
67
68
Figura. 30. Diagrama que muestra el flujo del control del programa con una estructura IENTRAS...FINMIENTRAS. El listado 4 muestra un ejemplo de una repeticin que (entre otras cosas) imprime el nmero de boleto que se ha vendido, pensando en que el programa puede ser utilizado en cualquier clase de taquilla que venda boletos y tenga un tope de 100 boletos para vender. Es importante mencionar que para entrar a un ciclo como el del ejemplo del listado 4, es necesario tener el control de cundo se descumplir la condicin. En este ejemplo, se inicializa una variable tope-vendidos en 100, antes de entrar al ciclo. Si omitimos esta orden, dependiendo del lenguaje de implementacin pueden suceder dos cosas: 1 ) El sistema inicializa automticamente la variable en 0, de modo que el ciclo nunca va a terminar, pues siempre la variable b-vendido ser igual o mayor que 0, pero nunca menor que 0. 2 ) El sistema trata de interpretar el contenido actual de la memoria alojado en esa variable en ese momento. Esto puede ocasionar resultados inesperados, ocasionando errores lgicos. Tambin es importante que en alguna parte del segmento que ser repetido,
69
70
Las opciones 1,3 y 4 son correctas. Los algoritmos se componen de entrada de datos, los cuales se procesan y se obtienen datos de salida. Los requerimientos se utilizan para disear el programa, y las preguntas son una manera de puntualizar los requerimientos, o bien de especificar qu clase de datos de entrada se requieren. Las rdenes se dan en forma verbal, como calcular, ordenar, encontrar, imprimir. Estas rdenes se utilizan para transformar los datos de entrada en datos de salida. Para identificar los datos de entrada o de salida, utilizamos sustantivos, adjetivos y adverbios. Una vez que hemos identificado todos los elementos de un problema, normalmente describirnos las entradas y las salidas utilizando una tabla de definiciones o tabla entrada-procesosalida. La tabla tiene tres columnas - Entrada, Proceso y Salida. Podemos utilizar la tabla de definiciones para escribir un algoritmo - sus procesos son las rdenes en el algoritmo. Y los elementos de entrada y salida se convierten en los argumentos de las rdenes. En el listado 4 de la pgina 22, la lnea 204, el verbo es obtener y el objeto es datos-de-client datos-de-cliente. Ejercicio: Deseamos hacer un programa para calcular la velocidad a la cual debe manejar un piloto de rally para cubrir cierta distancia dada en un tiempo requerido. Identifica los elementos de entrada del problema. 1) 2) 3) 4) [ [ [ [ ] ] ] ] El sustantivo tiempo. El sustantivo velocidad. El sustantivo distancia. El verbo calcular.
Los sustantivos distancia y tiempo son los elementos de entrada del problema, el sustantivo velocidad es el elemento de salida del problema, y el verbo calcular es el proceso del problema que calcula el valor de la velocidad en base a la distancia y al
71
72
De cada paso de procesamiento en la tabla de definiciones, resulta una o ms instrucciones de pseudocdigo. Los elementos en las columnas de entradas y salidas son los argumentos de las instrucciones. Ejercicio: Supongamos que queremos escribir un programa que convierta una distancia en kilmetros a una distancia en millas. En cada kilmetro hay 0.625 millas. Coloca cada opcin en su lugar correcto en la tabla de definiciones. 1 ) kilmetros 2 ) millas
Claro! los kilmetros van en la columna de entrada y las millas van en la columna de salida. Para transformar los kilmetros en millas necesitamos un proceso. El verbo convertir convertir en el enunciado del problema indica el proceso que necesitamos. As que tenemos que calcular el nmero de millas que es equivalente al nmero de kilmetros dado. Y necesitamos un proceso que muestre las millas calculadas.
Podemos utilizar nuestra tabla para escribir nuestro algoritmo en pseudocdigo. Listing 5. ALGORITMO para convertir kilmetros en millas.
73
Cuando se ejecute el programa, lo que el usuario debe ver en pantalla, ser algo como lo siguiente.
74
75
76
77
78
79
80
De modo que el compilador tena toda la informacin necesaria. Los compiladores actuales ofrecen muchas otras capacidades, como declarar variables en tiempo de ejecucin. Ejercicio: Qu tipo de dato se utiliza para almacenar letras individuales? 1 ) Entero 2 ) Caracter 3 ) Real 4 ) Cadena 5 ) Booleano En un lenguaje de pseudocdigo, podemos decir que el tipo adecuado para almacenar letras individuales es el tipo Caracter, con lo que podemos almacenar letras como a y Z. La opcin Entero es incorrecto, a pesar de que los caracteres tienen asociado un nmero entero que los identifica, porque la cantidad de nmeros enteros dedicados a los caracteres es menor que la cantidad de nmeros enteros. El tipo Real, tambin es incorrecto, pues el formato y el espacio dedicado para almacenar tales nmeros es diferente en los de tipo Caracter. El tipo Booleano almacena falso y verdadero, as que tambin es una respuesta incorrecta. El tipo Cadena, es un tipo de dato compuesto, que se crea a partir de muchos elementos de tipo Caracter. 1) Convenciones en el lenguaje de pseudocdigo: En el lenguaje de pseudocdigo que estamos utilizando, adoptaremos una propuesta similar a la del lenguaje Pascal para nombrar las variables y las constantes. Utilizaremos las palabras especiales VARIABLES y CONSTANTES al inicio, para establecer el tipo y valor de las variables y constantes. Por ejemplo, el listado 7 se debe reescribir como:
81
82
AGRADECIMIENTOS El autor quiere agradecer a la Universidad Jurez Autnoma de Tabasco por las facilidades otorgadas en el uso de los recursos de infraestructura. REFERENCIAS [1] SkillSoft-Learning-Object, Getting Started with Programming. ACM Course on line, http://acm.skillport.com/, Revisado en 2007. [2] John Kopplin, "An ilustrated history of computers." Recurso web http://www.computersciencelab.com/ComputerHistory/ History.htm, visitado el 15 de agosto de 2007. Creado en 2002.
83
84