Objetivos: Definir conceptos concernientes al ambiente de programación y representar las diferentes operaciones aritméticas mediante procesos en un lenguaje de programación. CONCEPTO Y DESCRIPCIÓN DE UN PROCESO Una acción es un acontecimiento producido por un actor (ejecutante). Posee la característica de una duración limitada y produce un resultado definido y previsto. Proceso es una acción que se puede descomponer en otras más simple. Procesador es el elemento capaz de ejecutar un determinado proceso de trabajo. Los procesos pueden ser secuénciales y paralelos. Un proceso es secuencial si una acción del mismo no puede empezar antes que la acción en curso esté completamente terminada; un proceso es paralelo si se ejecutan simultáneamente dos o más acciones. En este curso se tratará sobre los procesos secuénciales. ALGORITMOS: Conceptos y características Un algoritmo es una serie de operaciones detalladas y no ambiguas a ejecutar paso a paso, y que conducen a la resolución de un problema. Conjunto de instrucciones que especifican la secuencia de operaciones a realizar, en orden, para resolver un sistema específico o clase de problemas. “Un algoritmo consiste en dos partes esenciales: una descripción de acciones que deben ser ejecutadas y una descripción de los datos que son manipulados por esas acciones. Las acciones se describen mediante las llamadas sentencias y los datos mediante declaraciones y definiciones” Niklaus Wirth. Características de los algoritmos: 1. Precisión y orden de ejecución de cada acción 2. Definición (se debe obtener el mismo resultado cada vez que se aplican los mismos datos) 3. Finito La definición de un algoritmo debe describir tres partes: Entrada, Proceso y Salida. PROGRAMAS: Concepto y características Un programa es la secuencia de instrucciones que indica las acciones que ha de ejecutar sobre los datos. En general al desarrollar un programa se consideran las siguientes fases: 1. Análisis: definición del problema 2. Algoritmo: secuencia de acciones a seguir para la resolución del problema. 3. Prueba del algoritmo: seguir los pasos del algoritmo y verificar si resuelve el problema 4. Codificación: convertir el algoritmo a un programa usando un lenguaje de programación 5. Edición, ejecución y prueba: introducir el programa al computador, ejecutarlo y comprobar sus resultados, corrigiendo los errores hasta su puesta a punto. 6. Uso y mantenimiento: manejo actualización del programa. LOS SISTEMAS DE PROCESAMIENTO DE INFORMACION En la actualidad datos e información son esencialmente sinónimos, sin embargo debemos definir dato como representación de algún hecho concepto o entidad real; información es el proceso y organización de los datos. Un sistema se define como conjunto de componentes conectados e interactivos que tienen un propósito y una unidad total. Sistemas de procesamiento de información, es un sistema que transforma datos en información organizada, significativa y útil. Los sistemas de procesamiento de información tienen los siguientes componentes: Entrada, Salida y Procesador. LOS LENGUAJES DE PROGRAMACION Al igual que los lenguajes humanos tales como el inglés o el español los lenguajes de programación poseen una estructura (gramática o sintaxis) y un significado (semántica). Un lenguaje de programación es un conjunto de reglas, símbolos y palabras especiales que permiten construir un programa. La sintaxis es el conjunto de reglas para la construcción de sentencias válidas en un lenguaje. El vocabulario de un lenguaje es un conjunto de símbolos los cuales pueden ser: letras, dígitos, símbolos especiales, palabras reservadas o claves. Un algoritmo se debe expresar en un formato que se denomina programa, este programa se escribe usando un lenguaje de programación. Los principales tipos de lenguajes son: 1. Lenguaje máquina 2. Lenguaje de bajo nivel 3. Lenguaje de alto nivel Instrucciones: Los diferentes pasos expresados en un algoritmo deben ser escritos en los programas como instrucciones, sentencias o proposiciones. Las instrucciones básicas a casi todos los lenguajes de programación se pueden agrupar en: 1. 2. 3. 4. Instrucciones de entrada/salida Instrucciones aritméticas y lógicas Instrucciones selectivas Instrucciones repetitivas Lenguaje de máquina: es un conjunto de instrucciones constituidas como cadenas binarias que especifican una operación, y las direcciones de memoria implicadas en la operación. Las instrucciones en lenguaje máquina dependen del hardware de la computadora. Las ventajas de programar en lenguaje de máquina es poder cargar programas directamente a la memoria sin necesidad de traducción posterior, lo que supone una velocidad de ejecución superior. Los inconvenientes son: dificultad y lentitud en la codificación; dificultad para verificar y poner a punto los programas; los programas son ejecutables solo en el mismo procesador (CPU). Lenguaje de bajo nivel: el procesador de la computadora no puede ejecutar directamente sentencias escritas en un lenguaje de alto nivel; el procesador solamente puede ejecutar instrucciones más simples, llamadas instrucciones de máquina. El lenguaje de bajo nivel es el ensamblador, sus instrucciones son conocidas como nemotécnicos. Un programa escrito en lenguaje ensamblador no puede ser ejecutado directamente por la computadora, requiere una fase de traducción al lenguaje máquina. Los lenguajes ensambladores presentan la ventaja frente al lenguaje de máquina por su mayor facilidad de codificación y en general su velocidad de cálculo. Los inconvenientes son: dependencia total de la máquina y la formación de los programadores resulta más compleja Lenguajes de alto nivel: son los mas utilizados por los programadores, están diseñados para escribir y entender los programas de una manera más fácil que los lenguajes de máquina y lenguajes de bajo nivel. Estos lenguajes son independientes del tipo de procesador, permitiéndoles ser portables. Entre las ventajas tenemos: 1. 2. 3. 4. 5. Tiempo de formación de los programadores es relativamente corto La escritura de programas se basa en reglas sintácticas Las modificaciones puesta a punto son más fáciles Reducción del costo de los programas Transportabilidad Los inconvenientes son: 1. 2. 3. 4. Incremento del tiempo de puesta a punto No aprovechar los recursos internos de la máquina Aumento de la ocupación de la memoria El tiempo de ejecución de los programas es mucho mayor Traductores de lenguaje Son programas que traducen los programas escritos en lenguaje de alto nivel a código máquina. Los programas escritos en lenguaje de alto nivel se conocen como programa fuente. Los traductores se dividen en compiladores e interpretes Compiladores: es un programa que traduce el programa fuente a programa objeto (instrucciones en lenguaje máquina que la computadora puede interpretar y ejecutar). Un compilador independiente se requiere para cada lenguaje de programación. El compilador efectúa solo la traducción, no ejecuta el programa. Las fases de una compilación comprenden: 1. 2. 3. 4. 5. Programa fuente Compilador Programa objeto Enlazador Programa ejecutable en lenguaje máquina Interpretes: es un traductor que toma un programa fuente, lo traduce y a continuación lo ejecuta. DATOS Y TIPOS DE DATOS El propósito principal de un procesador es el manejo de los datos o información. Las mayorías de las computadoras pueden trabajar con varios tipos de datos, los algoritmos y programas operan sobre datos. Existen dos clases de tipos de datos: simples y compuestos Los tipos de datos simples son: numéricos, carácter y lógicos. Datos numéricos Representa el conjunto de los valores numéricos Se representan en dos formas: enteros y reales Enteros: es un subconjunto finito de los números enteros, no tienen componentes fraccionarios o decimales y pueden ser positivos o negativos. Reales: es un subconjunto de los números reales, siempre tienen un punto decimal y pueden ser positivos o negativos. Datos tipos carácter Es un conjunto finito y ordenado de caracteres que la computadora reconoce. Un dato tipo carácter contiene un solo carácter Los caracteres pueden ser alfabéticos (A,B,…,Z) (a,b,…,z); caracteres numéricos (1,2,…,9,0 ); caracteres especiales (+, -, *, /, <, >, …) Una cadena de caracteres es una sucesión de caracteres que se encuentran delimitados por una comilla o dobles comillas según el tipo de lenguaje de programación. Datos lógicos También denominado boolean, puede tomar uno de dos valores: verdadero o falso Los datos lógicos se utilizan para representar las alternativas a determinadas condiciones VARIABLES, CONSTANTES Y EXPRESIONES Variable es un objeto cuyo valor puede cambiar durante el desarrollo del algoritmo o programa. Posee dos atributos: un nombre para identificarla y un tipo que describe el conjunto de valores que puede tomar. Constante es un objeto de valor invariable, no cambia durante el desarrollo del algoritmo o programa. Para expresar una constante se debe indicar el nombre y su valor. Los lenguajes de programación permiten diferentes tipos de variables y constantes, siendo los más comunes enteros, decimales, caracteres y lógicos. Expresiones: son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales. Es el equivalente en notaciones matemáticas. Una expresión consta de operandos (datos) y operadores (símbolos que representan operaciones) Las expresiones se clasifican en: aritméticas y lógicas. Expresiones aritméticas: son análogas a las formulas matemáticas. Las variables y constantes son numéricas y las operaciones son las aritméticas (+ suma, - resta, * multiplicación, / división); los símbolos se denominan operadores. Los paréntesis se utilizan para agrupar términos y asegurar que las operaciones se ejecuten en el orden correcto. Cualquier ambigüedad que se presente en la expresión se la resuelve asociando a cada operador una prioridad o procedencia. Reglas de prioridades: permiten determinar el orden de evaluación de una operación; las reglas generales son: 1. Las operaciones que están encerradas entre paréntesis se evalúan primero. Si existen diferentes paréntesis anidados, las expresiones más internas se evalúan primero 2. Las operaciones aritméticas dentro de una expresión suelen seguir el siguiente orden de prioridad: Operador exponencial Operadores *, / Operadores div y módulo Operadores +, 3. En caso de coincidir varios operadores de igual prioridad en una expresión, el orden de prioridad es de izquierda a derecha. Expresiones lógicas: son expresiones cuyo valor es siempre verdadero o falso. Estas expresiones se forman combinando constantes lógicas, variables lógicas y otras expresiones lógicas, utilizando los operadores lógicos and, or, not; y los operadores relacionales. Operadores de relación: permiten realizar comparaciones de valores de tipo numérico o carácter; el formato general para las comparaciones es: Expresión 1 Operador de relación Expresión 2 Los símbolos utilizados para representar estos operadores son: < > = <= >= <> menor que mayor que igual que menor o igual que mayor o igual que distinto de Operadores lógicos: al aplicar estos operadores devuelven un valor de verdad o falso a no a verdad falso a verdad verdad falso falso a verdad verdad falso falso falso verdad no (6 > 10) es verdad ya que (6>10) es falso b ay b verdad falso verdad falso verdad falso falso falso b aob verdad falso verdad falso verdad verdad verdad falso a y b es verdad solo si a y b son verdad a o b son verdad cuando a, b o ambas son verdad FUNCIONES INTERNAS Las operaciones que se requieren en los programas exigen en numerosas ocasiones, además de las operaciones aritméticas básicas, un número determinado de operaciones especiales que se denominan funciones internas, incorporadas o estándar. ASIGNACIONES La asignación es un mecanismo utilizado para darle valor a una variable El formato general de una operación de asignación es: Nombre de la variable expresión. La acción de asignar es destructiva Las acciones de asignación se clasifican según sea el tipo de expresiones Asignación aritmética: las expresiones en las operaciones de asignación son aritméticas, ejemplo X 5+7 Asignación lógica: la expresión que se evalúa en la operación de asignación es lógica. Ejemplo M 8 < 5 tras evaluar la operación anterior M tomará un valor de verdad o falso. Asignación de cadenas de caracteres: la expresión que se evalúa es de tipo cadena. Ejemplo X “21 de Marzo del 2.000” Conversión de tipo: en las asignaciones no se pueden asignar valores a una variable de un tipo diferente del suyo. Se presentará un error si se trata de asignar valores de tipo carácter una variable numérica o un valor numérico a una variable de tipo carácter. ENTRADA, PROCESO Y SALIDA DE DATOS o Los cálculos que realizan las computadoras requieren la entrada de los datos necesarios para ejecutar las operaciones que posteriormente se convertirán en resultados, es decir, salida. Las operaciones de entrada permiten leer determinados valores y asignarlos a determinadas variables, esto se conoce como operación de lectura. Los datos de entrada se introducen al procesador mediante dispositivos de entrada (teclado, unidades de disco, etc.) La salida puede aparecer en un dispositivo de salida, a esta operación se denomina escritura. Auto Evaluación Deducir el valor de las siguientes expresiones: X X X X X X X A + B + C 40 A + B * C 255 A + B / C 7.5 A + B div C 7 A + B mod C 10 (A + B) div C 3 A + ( B / C) 7.5 Siendo A = 5, B = 25 y C = 10 Calcular el valor de las siguientes expresiones: 8 + 7 * 3 + 4 * 6 53 -2 * 3 -6 ( 33 + 3 * 4) /5 9 2 * 2 * (18 – 4 * 2) 40 16 * 6 – 3 * 2 90 Determinar el valor de la siguiente expresión: 4 / 2 * 3 / 6 + 6 / 2 / 1 / 5 * 2 / 4 * 2 1.6 Escribir las siguientes expresiones algebraicas como expresiones algorítmicas: b2 – 4ac b x2 + y2 --------------- z2 3x + 2 y ----------2z 4x2 - 2 x + 7 a ------bc 4 ∏R ---2 Escribir las siguientes expresiones algorítmicas como expresiones algebraicas: B* 2–4* A* C 3 * X * 4 – 5 * X * 3 + X * 12 – 17 ( B + D) / (C + 4) ( X * 2 + Y * 2 ) * ( 1 / 2) Si el valor de A = 2, B = 5 y C = 1; evaluar las siguientes expresiones B * A – B * 2 / 4 * C 7.5 (A * B) / 3 * 2 6.66 (((B + C) / 2 * A + 10 ) * 3 * B) – 6 234 Determinar el valor de cada una de las siguientes expresiones: 7 div 2 7 mod 2 12 div 3 12 mod 3 0 mod 5 15 mod 5 7 * 10 – 50 mod 3 * 4 + 9 (7 * (10 – 5) mod 3) * 4 + 9 Encontrar el valor de cada una de las siguientes expresiones o decir si la expresión no es correcta: 9–5–3 2 div 3 + 3 / 5 9 div 2 / 5 7 mod 5 mod 3 7 mod (5 mod 3) (7 mod 5) mod 3 (7 mod 5 mod 3) ((12 + 3) div 2) / (8 – (5 + 1)) 12 / 2 * 3 Ejercicios de aplicación 1. Diseñar un algoritmo para solicitar el número de segundos transcurridos de un determinado proceso y establecer el número de horas, minutos y segundos transcurridos. 2. Encontrar el valor de la variable DATO después de la ejecución de las siguientes operaciones: a) DATO 4.0 * 5 b) X 3.0 Y 2.0 DATO X ^ Y – Y c) DATO 5 X3 DATO DATO * X. 3. Siendo A = 5 siguientes: a) A + B + C d) A + B mod C 4. B = 25 b) A + B * C e) (A + B) / C C = 10; deducir el valor de las expresiones c) A + B / C f) A + (B / C) Escribir las siguientes expresiones en forma de expresiones algorítmicas a) M --- + P N b) N M + ---------P - Q c). M+N -------P -Q 5. Como se intercambian los valores de dos variables A y B, usando asignación y variable auxiliar. 6. Se tienen tres variables A, B y C. Escribir las instrucciones necesarias para intercambiar entre sí sus valores del modo siguiente: a) B toma el valor de A b) C toma el valor de B c) A toma el valor de C Debe utilizar una sola variable auxiliar 7. ¿Qué se obtiene en las variables A, B y C después de ejecutar las instrucciones siguientes.? A 3 ; B 20 ; C A + B ; B A + B ; A B – C23 8. Obtener el valor de las siguientes expresiones aritméticas a) 7 div 2 b) 7 mod 2 c) 0 mod 5 d) 7 * 10 – 50 mod 3 * 4 + 9 e) (7 * (10 – 5) mod 3) * 4 + 9 f) 8 + 7 * 3 + * 6 g) –2 ^ 3 h) 3 + 2 * ( 18 – 4 ^ 2) i) 4 / 2 * 3 / 6 + 6 / 2 1 5 ^ 2 / 4 * 2 9. a) b) c) d) Escribir las siguientes expresiones algorítmicas como expresiones algebraicas B^2–4*A*C 3 * X ^ 4 – 5 * X ^ 3 + X * 12 – 17 ( B + D ) / (C + 4 ) (X^2+Y^2)^(1/2) Considere la siguiente prioridad : *, / , div , mod , + , - . Objetivos: o o Conocer la simbología utilizada en diagrama de flujo para representar las diversas operaciones y procesos de solución a problemas. Establecer la estructura para escribir pseudocódigo. HERRAMIENTAS DE PROGRAMACION Y LA SOLUCION DE PROBLEMAS La computadora es utilizada como una herramienta para la resolución de problemas, un problema se puede dividir en tres fases: 1. Análisis del problema 2. Diseño del algoritmo 3. Resolución del algoritmo en la computadora Análisis del problema El propósito es llegar a una comprensión de la naturaleza del problema, esto debe estar bien definido si se desea obtener una solución satisfactoria. Para llegar a una solución eficaz se necesita: una buena definición del problema, acompañada de una descripción detallada de las entradas y salidas. El análisis exige una lectura previa del problema a fin de obtener una idea general de lo que de solicita. La segunda lectura deberá servir para responder las preguntas: 1. ¿Que información debe proporcionar la resolución del problema? 2. ¿Que datos se necesitan para resolver el problema? Análisis del problema Definición del problema Especificaciones de entrada Especificaciones de salida Diseño del algoritmo Para la solución de problemas complejos estos se subdividen en subproblemas que sean más fáciles de solucionar que el original (diseño descendente) Cada subproblema se amplía en una descripción más detallada con pasos más específicos, esto se denomina refinamiento del algoritmo. Las ventajas más importantes del diseño descendente son: 1. El problema se comprende más fácilmente al dividirse en partes más simples denominadas módulos 2. Las modificaciones en los módulos son más fáciles 3. La comprobación del problema se puede realizar fácilmente Luego de realizar el diseño descendente y refinamiento respectivo se debe representar el algoritmo mediante una herramienta de programación: diagramas de flujo o pseudocódigo Diseño de un algoritmo Diseño descendente (1) Refinamiento por pasos (2) Herramientas de programación (3) - diagrama de flujo - pseudocódigo - diagrama N-S Resolución del algoritmo en la computadora Una vez que el algoritmo está diseñado y representado mediante una herramienta de programación, se debe pasar a la fase de resolución usando la computadora. Las fases son: 1. Codificación del algoritmo en un programa 2. Ejecución del programa 3. Comprobación del programa Resolución del problema con computadora Codificación del programa Ejecución del programa Comprobación del programa Representación gráfica de los algoritmos Un algoritmo es representado utilizando una herramienta de programación. Un algoritmo puede ser codificado indistintamente en cualquier lenguaje. Un algoritmo es representado gráfica y textualmente Las herramientas de programación usadas para representar algoritmos son: 1. Diagrama de flujo 2. Lenguaje de especificación de algoritmos: pseudocódigos 3. Diagramas N-S (Nassi-Schneiderman) DIAGRAMAS DE FLUJO Un diagrama de flujo (flowchart) es una de las técnicas de representación de algoritmos más antigua y a la vez mas utilizada, aunque su empleo ha disminuido considerablemente, sobre todo desde la aparición de lenguajes de programación estructurados. Un diagrama de flujo es un diagrama que utiliza los símbolos (cajas) estándar y que tiene los pasos del algoritmo escritos en esas cajas unidas por flechas, denominadas líneas de flujo, que indican la secuencia en que se deben ejecutar. Terminal Entrada/Salida Proceso no si Decisión Decisión múltiple Conector Indicador de dirección de línea de flujo Línea conector Conector Llamada a subrutina o un proceso predeterminado Pantalla Impresora Teclado PSEUDOCODIGO Es un lenguaje de especificación de algoritmos, su uso hace el paso de codificación final relativamente fácil. El pseudocódigo nació como un lenguaje similar al inglés y era un medio de representar las estructuras de control de programación estructurada. La ventaja del pseudocódigo es que 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. El pseudocódigo original utiliza para representar las acciones palabras reservadas en inglés – similares a sus homónimas en los lenguajes de programación- . La escritura de pseudocódigo exige normalmente la tabulación (sangría en el margen izquierdo de diferentes líneas). Algunas palabras reservadas se presentan a continuación: inicio, fin, leer, escribir, etc. ESTRUCTURA GENERAL DE UN PROGRAMA La programación, es el proceso de planificar una secuencia de instrucciones que ha de seguir una computadora para solucionar un problema. Un programa es la secuencia de instrucciones que indica las acciones que ha de ejecutar la computadora. En general, el desarrollo de una programa para la resolución de un problema comprende las fases: Análisis Algoritmo Prueba del algoritmo Codificación Edición, ejecución y prueba Uso y mantenimiento PARTES CONSTITUTIVAS DE UN PROGRAMA Después de haber tomado la decisión de desarrollar un programa, se debe establecer el conjunto de especificaciones que debe contener el programa: Entradas Salidas Algoritmo de resolución Conceptualmente un programa puede ser considerado como una caja negra. ENTRADA Algoritmo de resolución Caja Negra SALIDA La caja negra o algoritmo de resolución, es el conjunto de códigos que transforman las entradas de programas (datos) en salidas de programa (resultados). Al establecer las especificaciones del programa, el programador debe conocer, en primer lugar, cuales son las entradas del programa y cuales son las salidas del programa, antes de que pueda especificar el contenido de la caja negra. Entrada de datos El programador debe establecer las entradas al programa o conocer de donde provienen, así como el momento en que se requieran en el programa. Las entradas pueden proceder del usuario mientras el programa se esta ejecutando, en otros casos pueden estar contenidos en archivos o base de datos almacenados en disco o memoria principal. Al proceso de introducir la información de entrada (datos) en la memoria del computador se denomina entrada de datos. El programador debe realizar una lista de todas las entradas requeridas por el programa, la fuente de cada entrada y el formato en que existen actualmente cada una de ellas. Salida de datos El programador debe listar todas las salidas previstas del programa, así como el formato requerido por el usuario. Las características que deben reunir las salidas son: 1. Salida en pantalla o en papel impreso 2. Grabación de resultados 3. Diseño o presentación de resultados: listas, tablas, informes, gráficos, etc 4. Frecuencia de salida de resultados Algoritmo de resolución Habiendo determinado las entradas y salidas el programador debe decidir como obtener las salidas deseadas a partir de las entradas dadas. La caja negra que se denominó algoritmo de resolución constará de dos etapas: diseño del modelo de resolución del problema y algoritmo de resolución del problema El diseño del modelo implica tomar en cuenta los datos de entrada y los resultados que se desean obtener. El algoritmo de resolución se expresa usando una de las siguientes representaciones: pseudocódigo o diagrama de flujo. TIPOS DE INSTRUCCIONES Las instrucciones disponibles en un lenguaje de programación, dependen de tipo de lenguaje de bajo o alto nivel. La diferencia entre ambos lenguajes se manifiesta en el repertorio de instrucciones del lenguaje. Para los lenguajes de bajo nivel se necesita conocer la estructura del procesador para aplicar en profundidad las instrucciones en lenguaje ensamblador. Para los lenguajes de alto nivel no será necesario conocer la estructura interna de la máquina. Una clasificación de las instrucciones en lenguaje de alto nivel es: 1. Entrada/salida 2. Asignación/movimiento 3. Aritméticas 4. Lógicas 5. Bifurcación o transferencia de control 6. Especiales Instrucciones de Entrada/Salida Permiten la transferencia de información desde los periféricos de entrada (teclado, unidad de cinta, unidad de disco, etc.) a la memoria e la computadora y desde esta a un periférico de salida (pantalla, impresora, unidad de cinta, unidad de disco, etc.) El proceso de introducción de datos en la memoria desde un dispositivo periférico de entrada se denomina lectura o carga de datos, y al proceso de extracción de datos de la memoria y su envío a un dispositivo periférico de salida se denomina escritura, grabación o conservación. Instrucciones de Asignación/Movimiento Las instrucciones de asignación son fundamentales en casi todos los lenguajes de programación. Permiten asignar valores a variables del programa. Las instrucciones de movimiento tienen el mismo sentido que las de asignación y permiten transferir la información o contenido de un campo o posición de memoria a otro, manteniendo siempre intacta la información en su primera posición (emisor) y variando el contenido de la segunda posición (receptor). Instrucciones Matemáticas Realizan el cálculo de operaciones aritméticas funciones como seno, coseno, etc. tales como sumar, restar, multiplicar, dividir o Instrucciones Lógicas y de Relación En numerosas ocasiones se necesita comparar dos expresiones aritméticas entre ellas con la finalidad e tomar una decisión en función del resultado de dicha comparación. Este tipo de operaciones se realiza con los operadores de relación. Si en un programa se elige una determinada condición para realizar una tarea concreta, ésta solo se realizará cuando dicha condición sea verdadera o falsa. Además de los operadores de relación existen otros tipos de operadores conocidos como lógicos que permiten realizar las operaciones lógicas o booleanas. Instrucciones de Bifurcación o Transferencia de Control Permiten variar la secuencia de ejecución de un programa al saltar (bifurcar) a otra parte del mismo. Las instrucciones de este tipo se basan en una simple comparación o en los resultados de operaciones lógicas. Las bifurcaciones producidas por las instrucciones de control pueden ser con salto adelante en la secuencia normal del programa o con salto atrás. Los tipos de bifurcaciones en cuanto a las condiciones a cumplir son: incondicionales y condicionales; las bifurcaciones incondicionales se realizan siempre que se ejecuta la instrucción, mientras que las bifurcaciones condicionales solo se realizarán al cumplirse una determinada tarea. Instrucciones Especiales Las instrucciones especiales varían de unos lenguajes a otros. El grupo más importante de instrucciones especiales se clasifican en: edición, impresión, conversión, ordenación, comunicación de entrada/salida, gráficos, etc. ELEMENTOS BASICOS DE UN PROGRAMA Los elementos básicos cuya correcta combinación permite construir un programa son: Palabras claves e identificadores Constantes Variables Expresiones Sentencias de asignación Comentarios Iteraciones y bucles Contadores y acumuladores Decisión o selección Interruptores y conmutadores Palabras claves e identificadores: constituyen las instrucciones intrínsecas a lenguaje de programación y son la parte fundamental de su sintaxis (ordenes, sentencias, funciones y operadores). Los identificadores tienen un significado predefinido o bien ser elegidos por el programador como son los casos de los nombres de variables, programas, etc. Las palabras reservadas no pueden ser elegidas como identificadores o nombres de variables. Constantes: es una cantidad cuyo valor no cambia durante el proceso, es decir, es un elemento fijo de datos. La mayoría de los lenguajes permiten diferentes tipos de constantes, siendo las más comunes: enteros, decimales, caracteres y constantes booleanas o lógicas. Variables: representan elementos de datos variables, estos pueden cambiar durante la ejecución de un programa. Las variables se refieren en los programas por nombres simbólicos o identificadores. Dependiendo del lenguaje, existen diferentes tipos de variables, tales como enteras, reales, caracteres, etc. Expresiones: son combinaciones de constantes, variables, símbolos de operación (operadores), paréntesis de apertura y cierre y nombres de funciones especiales. Las expresiones pueden ser aritméticas, relacionales, lógicas o booleanas Sentencias de asignación: son parte fundamental de casi todos los lenguajes de programación, permiten asignar el valor de una expresión a una variable. El lado derecho de la sentencia puede ser cualquier expresión legal y el lado izquierdo debe ser un nombre de una variable. Comentarios: permiten documentar las acciones que se realizan dentro de un programa. Iteraciones y bucles. Un bucle es un proceso en el que se ejecutan una serie de operaciones un número determinado de veces; las operaciones serán siempre las mismas, pero con datos y resultados diferentes. En el caso de un programa el bucle o lazo es un conjunto de instrucciones que deben ser ejecutadas un cierto numero de veces, en un proceso iterativo o repetitivo; el bucle constará de una entrada y una salida; la entrada se producirá con una o varias instrucciones y la salida del bucle se producirá cuando se cumple una condición. Un bucle se representa gráficamente así: Acción 1 Acción 2 Si no se pone condición de salida se permanecerá dentro del bucle indefinidamente, y se conoce este tipo de bucle como bucle infinito o bucle sin fin. La salida del bucle exigirá el cumplimiento de una condición. Acción 1 Acción 2 Condición X=999 no si Salida del bucle Una iteración es la repetición controlada de la secuencia de acciones internas al bucle. En general un bucle constará de las siguientes partes: Preparación o arranque del bucle: una o más instrucciones que pueden ser asignación de valores a constantes, contadores a cero, dimensión de listas o tablas, etc. Cuerpo del bucle: grupo de instrucciones que integran realmente el bucle para cumplir el objetivo especificado y que se repiten mientras no se cumple la condición. Modificación del bucle: conjunto de instrucciones que modifican el bucle, haciendo progresar su ejecución hasta su terminación final; se suele realizar con contadores, acumuladores. Comprobación de la condición: suele constar de una instrucción para averiguar si se ha producido la condición que determinará la salida del bucle. Contadores En los procesos repetitivos se necesita normalmente contar los sucesos o acciones internas del bucle, como pueden ser registros o elementos de un archivo y número de iteraciones a realizar por el bucle. Un contador es una variable que está destinada a contener los diferentes valores que se van incrementando o decrementando en cada iteración. El incremento o decremento es siempre constante, pudiendo ser positivo o negativo. Acumuladores Un acumulador o totalizador es una variable cuya misión es almacenar cantidades variables resultantes de sumas sucesivas. Realiza la función de un contador con la diferencia que el incremento o decremento de cada suma es variable en lugar de constante como en el caso del contador. Decisión o selección Las instrucciones de un programa se ejecutan de un modo secuencial. Sin embargo, en numerosas ocasiones es preciso romper el orden secuencial de las instrucciones y bifurcar, saltar o transferir el control a otras instrucciones del programa que no sean consecutivas a las que en ese momento se ejecutan. Los saltos o transferencias de control pueden ser positivas (hacia delante) o negativas (hacia atrás), lo que puede implicar la no ejecución de instrucciones - saltos positivos - o repetición de instrucciones – saltos negativos Existen dos tipos de bifurcaciones: Condicionales, la bifurcación depende del cumplimiento de una determinada condición; cuando se cumple la condición el control del programa bifurca a la instrucción especificada; si la instrucción es falsa el programa continúa ejecutándose en la siguiente instrucción en el orden secuencial previsto. Incondicionales, la bifurcación se realiza siempre que el programa pase por la instrucción sin el cumplimiento de ninguna condición Interruptores o conmutadores Un interruptor o conmutador -a veces se les llama centinelas, banderas- es una variable que toma diversos valores a lo largo de la ejecución del programa y que permiten comunicar información de una parte a otra del mismo, es decir variar la secuencia de ejecución de un programa, dependiendo del valor que tenga en cada momento. Los dos únicos valores que puede tomar un interruptor son 1 y 0 (encendido y apagado). TIPOS DE PROGRAMAS Los programas escritos para computadoras, en general se pueden clasificar en tres tipos o estructuras fundamentales: Lineales Cíclicos Alternativos (decisiones) En realidad es difícil que un programa se componga de una sola estructura y normalmente una mezcla de los tres tipos es lo que suele constituir un programa. Programas lineales Son aquellos en los que no existen instrucciones de bifurcación y por consiguiente las instrucciones se ejecutan en la misma secuencia en que han sido codificados. Estos programas se denominan también secuenciales; normalmente estos programas constan de las siguientes fases: Lectura o entrada de datos Proceso Impresión o salida de resultados Programas cíclicos Son aquellos programas en los que un grupo de instrucciones se ejecutan un número determinado de veces –de modo cíclico- hasta que se cumple una cierta condición que indica el fin de las ejecuciones de dichas instrucciones. El conjunto de las instrucciones que se repiten cíclicamente se denomina bucle, lazo o ciclo. La estructura de un programa cíclico suele constar de las siguientes fases: Entrada de datos e instrucciones previas Lazo o bucle (conjunto de instrucciones que se repiten y ejecutan un numero determinado de veces) Instrucciones finales o resto del proceso Salida de resultados Programas alternativos Son aquellos que permiten la ejecución de diferentes operaciones, dependiendo de que se cumplan o no determinadas condiciones que se producen en los datos de entrada o durante el proceso. Según la condición que se cumple se realiza una serie de instrucciones diferentes. Auto Evaluación 1. Calcular el valor de la suma 1 + 2 + 3 + 4 + … + 50 2. Definir los pasos necesarios para intercambiar los valores de dos variables numéricas 3. Escribir el algoritmo para calcular el área de un triángulo dada la base y la altura 4. Diseñar un algoritmo que realice la siguiente conversión: una temperatura dada en grados Celsius a grados Fahrenheit. Fórmula F = (9/5) C + 32 5. Se necesita un algoritmo para convertir metros a pies y pulgadas ( 1 metro + 39.37 pulgadas, 1 pie = 12 pulgadas) 6. Dado dos dígitos diferentes de cero, forme un valor numérico. Para cada uno de los ejercicios debe escribir el análisis y diagrama de flujo respectivo. Ejercicios de Aplicación Ejercicios con Estructuras Secuénciales 1. 2. Solicite valores numéricos para dos variables: A y B; presente en líneas separadas el valor de cada variable, el valor de su cuadrado y además la raíz cuadrada. Solicite el radio de una circunferencia, calcular y presentar el área del circulo. 3. Dados dos números cualesquiera, calcular y presentar la suma, resta, producto y división del primero número entre el segundo número. 4. Dadas tres variables a, b y c desde el teclado, que corresponden a los coeficientes de una ecuación cuadrática de segundo grado ax2 + bx + c = 0. Calcular y presentar el valor de las raíces reales de la ecuación (por el momento, asignar valores para a, b y c que den por resultado raíces reales). 5. Dado un valor T desde el teclado, y que corresponda a una temperatura en grados Fahrenheit, hacer el programa que convierta dicho valor a su equivalente en Centígrados. Fórmula F = (9/5) C + 32 Dadas dos variables X e Y por teclado, presente el contenido de cada una de estas variables; luego intercambien los valores de X e Y; vuelva a presentar las variables para observar el cambio de contenido 6. Para cada uno de los ejercicios debe escribir el análisis y diagrama de flujo respectivo.