UNIDAD I INTRODUCCIÓN Y DEFINICIONES

1

1.1. Definición de lenguaje Un lenguaje informático es un lenguaje usado por, o asociado con, ordenadores. Muchas veces, este término es usado como sinónimo de lenguaje de programación, pero un lenguaje informático no tiene por qué ser un lenguaje de programación. Como ejemplo un lenguaje de marcas como el HTML no es un lenguaje de programación, pero sí es un lenguaje informático. En general, como cualquier otro lenguaje, un lenguaje de ordenador es creado cuando hay que transmitir una información de algo a alguien basado en computadora. El lenguaje de programación es el medio que utilizan los programadores para crear un programa de ordenador; un lenguaje de marcas es el medio para describir a un ordenador el formato o la estructura de un documento; etc. Los Lenguajes informáticos pueden ser clasificados en varias clases, entre las que se incluyen las siguientes.
         

Lenguaje de programación Lenguaje de especificación Lenguaje de consulta, como SQL o XQuery Lenguaje de marcas, como XML y otros más ligeros Lenguaje de transformación, como XSLT Protocolo de comunicaciones, como http,ftp Lenguaje de sonido, para crear sonidos, Lenguaje gráfico, para crear figuras y dibujos. Metapost, Pseudocódigo El lenguaje puede definirse como un sistema de comunicación. En el caso de los seres humanos, se encuentra extremadamente desarrollado y es mucho más especializado que en otras especies animales, ya que es fisiológico y psíquico a la vez. El lenguaje nos permite abstraer y comunicar conceptos. Una separación técnica permite reconocer tres dimensiones dentro del lenguaje: forma (comprende a la fonología, morfología y sintaxis), contenido (la semántica) y uso (la pragmática). Para el lingüista Ferdinand de Saussure, el lenguaje se compone de lengua (es el idioma, un modelo general y constante para los miembros de una cierta colectividad lingüística) y habla (la materialización momentánea de ese modelo; es un acto individual y voluntario que se realiza a través de la fonación y la escritura). Antes de desarrollar sus capacidades en forma extendida, los humanos utilizan un prelenguaje, un sistema de comunicación rudimentario que aparece en los primeros años de vida y que implica capacidades neurofisiológicas y psicológicas como la percepción, motricidad, imitación y memoria. El concepto de lengua natural, por otra parte, refiere a una variedad lingüística o forma de lenguaje humano con fines comunicativos que se encuentra dotado de una sintaxis y que obedece a los principios de economía y optimidad. Charles F. Hockett ha establecido quince rasgos que se encuentran presentes en las lenguas naturales. Entre ellos menciona la arbitrariedad (de la relación entre el signo y el 2

significado), la productividad (permite generar nuevos mensajes) y la estructura jerárquica (según la cual las lenguas humanas cuentan con reglas o principios sintácticos y gramaticales, ya que las producciones no son aleatorias). Lenguaje de programación

Captura de la microcomputadora Commodore PET-32 mostrando un programa en el lenguaje de programación BASIC, bajo el emulador VICE en una distribución GNU/Linux. Un lenguaje de programación es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.1 Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación. También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos:
    

El desarrollo lógico del programa para resolver un problema en particular. Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa). Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina. Prueba y depuración del programa. Desarrollo de la documentación.

Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo HTML (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación, sino un conjunto de instrucciones que permiten diseñar el contenido de los documentos). Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción de un programa de forma colaborativa. 3

Por ejemplo. Roy Nutt. Posteriormente aparecieron diferentes lenguajes de programación. los cuales reciben su denominación porque tienen una estructura sintáctica similar a los lenguajes escritos por los humanos. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas. 4 . MUL (multiplicar). Anabella introdujo en las matemáticas a Ada quien. hija de Anabella Milbanke Byron y Lord Byron. El histórico equipo Fortran de Backus consistió en los programadores Richard Goldberg. para sumar se usa la letra A de la palabra inglesa add (sumar).2 El primer manual para el lenguaje Fortran apareció en octubre de 1956. De hecho sólo consiste en cadenas extensas de números 0 y 1. el cual la máquina comprende fácilmente. mostrando el uso especializado de las columnas 1-5. Harlan Herrick. La necesidad de recordar secuencias de programación para las acciones usuales llevó a denominarlas con nombres fáciles de memorizar y asociar: ADD (sumar). con el primer compilador Fortran entregado en abril de 1957. Best. A esta secuencia de posiciones se le denominó "instrucciones". Lois Haibt y David Sayre. el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. Peter Sheridan. Irving Ziller. los primeros operadores de computadoras decidieron hacer un traductor para reemplazar los 0 y 1 por palabras o abstracción de palabras y letras provenientes del inglés. y a este conjunto de instrucciones se le llamó lenguaje ensamblador. Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje específico conocido como código máquina. porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su compilador pudiera generar código cuyo desempeño fuera comparable al de un código hecho a mano en lenguaje ensamblador. denominados también lenguajes de alto nivel. Robert Nelson. SUB (restar). 6 y 73-80. Para facilitar el trabajo. A finales de 1953. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora. CALL (ejecutar subrutina). pero que lo hace excesivamente complicado para las personas. éste se conoce como lenguaje ensamblador. Sheldon F. etc. John Backus sometió una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar la computadora central IBM 704. Esto era un compilador optimizado. pero las letras y palabras son más fáciles de recordar y entender que los números. La primera programadora de computadora conocida fue Ada Lovelace. El lenguaje ensamblador sigue la misma estructura del lenguaje máquina.Historia Código Fortran en una tarjeta perforada. después de conocer a Charles Babbage. tradujo y amplió una descripción de su máquina analítica.

números y puntuación. A medida que la complejidad de las tareas que realizaban las computadoras aumentaba. se crearon los lenguajes de alto nivel. Sintaxis Con frecuencia se resaltan los elementos de la sintaxis con colores diferentes para facilitar su lectura. La sintaxis de un lenguaje de programación describe las combinaciones posibles de los símbolos que forman un programa sintácticamente correcto. utilizando relaciones visuales entre símbolos para especificar un programa. Mientras que una tarea tan sencilla como sumar dos números puede necesitar varias instrucciones en lenguaje ensamblador.En 1960. El significado que se le da a una combinación de símbolos es manejado por su semántica (ya sea formal o como parte del código duro de la 5 . Entonces. en un lenguaje de alto nivel bastará una sola sentencia. de manera similar a los lenguajes naturales escritos. como lo fue BASIC en las versiones introducidas en los microordenadores de la década de 1980. se creó COBOL. Elementos Todos los lenguajes de programación tienen algunos elementos de formación primitivos para la descripción de los datos y de los procesos o transformaciones aplicadas a estos datos (tal como la suma de dos números o la selección de un elemento que forma parte de una colección). hay algunos lenguajes de programación que son más gráficos en su naturaleza. es decir. Este ejemplo está escrito en Python. utilizan secuencias de texto que incluyen palabras. Estos elementos primitivos son definidos por reglas sintácticas y semánticas que describen su estructura y significado respectivamente. uno de los lenguajes usados aún en 2010 en informática de gestión. Por otra parte. A la forma visible de un lenguaje de programación se le conoce como sintaxis. se hizo necesario disponer de un método más eficiente para programarlas. La mayoría de los lenguajes de programación son puramente textuales.

un símbolo es una letra seguida de cero o más caracteres (excluyendo espacios). tomada de Lisp: expresión ::= átomo | lista átomo ::= número | símbolo número ::= [+-]?['0'-'9']+ símbolo ::= ['A'-'Z'<nowiki>'</nowiki>a'-'z']. '(a b c232 (1))' No todos los programas sintácticamente correctos son semánticamente correctos. y una lista es un par de paréntesis que abren y cierran. El siguiente fragmento en el lenguaje C es sintácticamente correcto. Dado que la mayoría de los lenguajes son textuales. incluso cuando un programa está bien definido dentro de un lenguaje. y pueden (dependiendo de la especificación del lenguaje y la solidez de la implementación) resultar en un error de traducción o ejecución. Muchos programas sintácticamente correctos tienen inconsistencias con las reglas del lenguaje. '()'. un número es una secuencia continua de uno o más dígitos decimales.* lista ::= '(' expresión* ')' Con esta gramática se especifica lo siguiente:      una expresión puede ser un átomo o una lista. tales programas pueden exhibir un comportamiento indefinido. pero ejecuta una operación que no está definida semánticamente (dado que p es un apuntador nulo. En algunos casos. La sintaxis de los lenguajes de programación es definida generalmente utilizando una combinación de expresiones regulares (para la estructura léxica) y la Notación de Backus-Naur (para la estructura gramática). con cero o más expresiones en medio. precedido opcionalmente por un signo más o un signo menos. un átomo puede ser un número o un símbolo. Usando el lenguaje natural. Este es un ejemplo de una gramática simple. Algunos ejemplos de secuencias bien formadas de acuerdo a esta gramática: '12345'. por ejemplo. "Juan es un soltero casado" también está bien formada gramaticalmente pero expresa un significado que no puede ser verdadero. este artículo trata de la sintaxis textual.referencia de implementación). todavía puede tener un significado que no es el que la persona que lo escribió estaba tratando de construir. las operaciones p->real y p->im no tienen ningún significado): 6 . puede no ser posible asignarle significado a una oración gramaticalmente válida o la oración puede ser falsa:   "Las ideas verdes y descoloridas duermen furiosamente" es una oración bien formada gramaticalmente pero no tiene significado comúnmente aceptado. Además.

algunos lenguajes incluyen lagunas de tipos. detectando ciertas operaciones inválidas. generalmente funcionales. Nuevos lenguajes de programación como Java y C# tienen un análisis definido de asignaciones. La gramática necesaria para especificar un lenguaje de programación puede ser clasificada por su posición en la Jerarquía de Chomsky. 7 . Pero el programa sería sintácticamente correcto todavía. la semántica estática básicamente incluye las reglas semánticas que se pueden verificar en el momento de compilar. incluyendo a Perl y a Lisp. Sistema de tipos Un sistema de tipos define la manera en la cual un lenguaje de programación clasifica los valores y expresiones en tipos. Algunos lenguajes. que pueden tener cálculos generales. el programa dispararía un error de compilación. La sintaxis de la mayoría de los lenguajes de programación puede ser especificada utilizando una gramática Tipo-2. Por ejemplo el chequeo de que cada identificador sea declarado antes de ser usado (en lenguajes que requieren tales declaraciones) o que las etiquetas en cada brazo de una estructura case sean distintas. Otras formas de análisis estáticos. Para los lenguajes compilados. las macros de C son meros reemplazos de cadenas. conversiones explícitas no checadas que pueden ser usadas por el programador para permitir explícitamente una operación normalmente no permitida entre diferentes tipos. Muchas restricciones importantes de este tipo. pues la variable "p" no estaría definida. son gramáticas libres de contexto. El objetivo de un sistema de tipos es verificar y normalmente poner en vigor un cierto nivel de exactitud en programas escritos en el lenguaje en cuestión. una forma de análisis de flujo de datos. Para poder minimizar esta desventaja. Cualquier sistema de tipos decidible tiene sus ventajas y desventajas: mientras por un lado rechaza muchos programas incorrectos. también prohíbe algunos programas correctos aunque poco comunes. Al diseño y estudio formal de los sistemas de tipos se le conoce como teoría de tipos. o que las llamadas a subrutinas tengan el número y tipo de parámetros adecuado. y generalmente oscurecen la separación entre análisis y ejecución. como la validación de que los identificadores sean usados en los contextos apropiados (por ejemplo no sumar un entero al nombre de una función). En contraste con el sistema de macros de Lisp y los bloques BEGIN de Perl. y no requieren ejecución de código. Los lenguajes que permiten construcciones que permiten al programador alterar el comportamiento de un analizador hacen del análisis de la sintaxis un problema sin decisión única. contienen construcciones que permiten la ejecución durante la fase de análisis. dado que las declaraciones de tipo proveen información semántica solamente. llevan a cabo lo que se conoce como inferencia de tipos.complex *p = NULL. Semántica estática La semántica estática define las restricciones sobre la estructura de los textos válidos que resulta imposible o muy difícil expresar mediante formalismos sintácticos estándar. complex abs_p = sqrt (p->real * p->real + p->im * p->im). pero varios lenguajes. que le quita al programador la tarea de especificar los tipos. como pueden ser manipulados dichos tipos y como interactúan. es decir. como los análisis de flujo de datos. En la mayoría de los lenguajes con tipos. el sistema de tipos es usado solamente para checar los tipos de los programas. también pueden ser parte de la semántica estática. como parte de su semántica estática. Si la declaración de tipo de la primera línea fuera omitida. puede ser implementadas definiéndolas como reglas en una lógica conocida como sistema de tipos.

Si bien muchos lenguajes de producción proveen medios para brincarse o subvertir el sistema de tipos. tanto Java y C#.Lenguajes tipados versus lenguajes no tipados Se dice que un lenguaje tiene tipos si la especificación de cada operación define tipos de datos para los cuales la operación es aplicable. 1 y (2+2) son expresiones enteras. Por ejemplo. Sin embargo. Por tanto. los lenguajes con tipos dinámicos no requieren que el programador escriba los tipos de las expresiones. Los lenguajes con tipos estáticos pueden manejar tipos explícitos o tipos inferidos. C# y Java. Entre otras cosas. el compilador infiere los tipos de las expresiones y las declaraciones de acuerdo al contexto. En la práctica. permiten que cualquier operación se aplique a cualquier dato. Lenguajes de alto nivel sin datos incluyen BCPL y algunas variedades de Forth. Tipos estáticos versus tipos dinámicos En lenguajes con tipos estáticos se determina el tipo de todas las expresiones antes de la ejecución del programa (típicamente al compilar). los tipos están asociados con valores en ejecución en lugar de expresiones textuales. la mayoría de los lenguajes de programación modernos rechazaran cualquier intento de ejecutar dicha operación por parte de algún programa. esto permite que una misma variable se pueda asociar con valores de tipos distintos en diferentes momentos de la ejecución de un programa. tales como Haskell y ML. Como en el caso de lenguajes con tipos inferidos. "este texto entre comillas" es una cadena. tales como C++. La mayoría de los lenguajes populares con tipos estáticos. Estos son con frecuencia lenguajes de marcado o de scripts. En otras palabras. ni pueden guardarse en una variable que está definida como fecha. el programador debe escribir los tipos en determinadas posiciones textuales. aunque pocos lenguajes son considerados con tipo desde el punto de vista de la teoría de tipos (es decir. comúnmente cadenas de caracteres que luego son usadas tanto para datos numéricos como simbólicos. un lenguaje sin tipos. 8 . En la mayoría de los lenguajes de programación. mientras en otros son detectadas cuando el programa es ejecutado (validación de tipos "dinámica") y se genera una excepción en tiempo de ejecución. que por lo general se consideran secuencias de bits de varias longitudes. no pueden ser pasadas a una función que espera una cadena. manejan tipos explícitos. En algunos lenguajes. Por ejemplo. En contraste. muchos lenguajes de tipos explícitos permiten inferencias parciales de tipo. infieren tipos en un número limitado de casos. Un caso especial de lenguajes de tipo son los lenguajes de tipo sencillo. En el segundo caso. como la mayoría de los lenguajes ensambladores. estas operaciones sin significado son detectadas cuando el programa es compilado (validación de tipos "estática") y son rechazadas por el compilador. dividir un número por una cadena no tiene ningún significado. Los lenguajes con tipos dinámicos determinan la validez de los tipos involucrados en las operaciones durante la ejecución del programa. por ejemplo. En el primer caso. la mayoría de los lenguajes modernos ofrecen algún grado de manejo de tipos. con la implicación de que no es aplicable a otros tipos. y solamente cuentan con un tipo de datos. Inferencia total de los tipos suele asociarse con lenguajes menos populares. que verifican o rechazan todas las operaciones). Sin embargo. como REXX o SGML.

Estas conversiones implícitas son útiles con frecuencia. Existen básicamente dos maneras de implementar un lenguaje: compilación e interpretación. Ruby. y esta conversión es exitosa inclusive cuando x es null. para aumentar la confusión. A los lenguajes con tipos fuertes se les suele llamar de tipos seguros. por ejemplo una cadena puede ser operada como un número. pero también pueden ocultar errores de programación. 9 . pero también puede permitir ciertos tipos de fallas que no pueden ser detectadas durante la compilación o a veces ni siquiera durante la ejecución. pero su trato en diferentes textos varia. Esto puede ser útil a veces. undefined.los errores de tipo no pueden ser detectados automáticamente hasta que se ejecuta el código. La implementación de un lenguaje es la que provee una manera de que se ejecute un programa para una determinada combinación de software y hardware. simplemente como equivalencia de tipos estáticos. JavaScript y Python son lenguajes con tipos dinámicos. Por ejemplo en JavaScript la expresión 2 * x convierte implícitamente x a un número. Algunos utilizan el término de tipos fuertes para referirse a tipos fuertemente estáticos o. Tipos débiles y tipos fuertes Los lenguajes débilmente tipados permiten que un valor de un tipo pueda ser tratado como de otro tipo. un Array o una cadena de letras. Las características de estáticos y fuertes son ahora generalmente consideradas conceptos ortogonales. dificultando la depuración de los programas. Implementación Código fuente de un programa escrito en el lenguaje de programación Java. De tal manera que C ha sido llamado tanto lenguaje de tipos fuertes como lenguaje de tipos estáticos débiles. Lenguajes con tipos débiles como Perl y JavaScript permiten un gran número de conversiones de tipo implícitas. Los lenguajes fuertemente tipados evitan que pase lo anterior. Cualquier intento de llevar a cabo una operación sobre el tipo equivocado dispara un error. Lisp.

sus fórmulas bien formadas pueden no ser más que cadenas de símbolos sin ningún significado. Técnica Libros sobre diversos lenguajes de programación. Los programas traductores que pueden realizar esta operación se llaman compiladores. Una interpretación otorga significado a esas fórmulas. el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. sin embargo. lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código completo). como los programas ensambladores avanzados. También se han implementado lenguajes educativos infantiles como Logo que mediante una serie de simples instrucciones. Interpretación: es una asignación de significados a las fórmulas bien formadas de un lenguaje formal. En lugar de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la compilación para utilizarlo en una ejecución futura. La siguiente vez que se utilice una instrucción. pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una ejecución del código. cada instrucción del bucle tendrá que volver a ser interpretada en cada ejecución repetida del ciclo. Éstos. Se puede también utilizar una alternativa para traducir lenguajes de alto nivel. En el ámbito de infraestructura de Internet. generando un programa equivalente que la máquina será capaz interpretar. un programa intérprete. como lo fue el Pascal con las matemáticas en su comienzo. durante el procesamiento repetitivo de los pasos de un ciclo o bucle. 10 . o incluido de manera permanente dentro de la máquina. A continuación. El código objeto no se graba para utilizarlo posteriormente.  Compilación: es el proceso que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación. se la deberá interpretar otra vez y traducir a lenguaje máquina. pueden generar muchas líneas de código de máquina por cada proposición del programa fuente. Por ejemplo. convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el procesamiento de los datos. El intérprete elimina la necesidad de realizar una compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores. La mayoría de lenguajes de alto nivel permiten la programación multipropósito. cabe destacar a Perl con un poderoso sistema de procesamiento de texto y una enorme colección de módulos. muchos de ellos fueron diseñados para permitir programación dedicada. almacenado en el sistema operativo del disco. Como los lenguajes formales pueden definirse en términos puramente sintácticos.

Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente. de esta forma se ve facilitado el trabajo del programador. Finalmente. Se trata de que el programa. por ejemplo: 2 + 2 contiene el valor 4. expresiones y sentencias. ya sea hardware o software. a un programa que se ha desarrollado para sistemas GNU/Linux ejecutarse también en la familia de sistemas operativos Windows. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. una vez acabado.3 Una declaración asocia un nombre de variable con un tipo de dato. Fases que pueden ser realizadas incluso por otro programador. usan declaraciones. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de código. Esto permite que el programa pueda llegar a más usuarios más fácilmente. ampliaciones. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma. La portabilidad es una característica muy deseable para un programa. con lo cual la claridad es aún más necesaria para que otros programadores puedan continuar el trabajo fácilmente. Normalmente. cabe tener en cuenta una serie de detalles. diferente a aquella en la que se elaboró. Una expresión contiene un valor. tanto en la fase de creación como en las fases posteriores de corrección de errores. Los programas que usan un lenguaje imperativo especifican un algoritmo. Los principales paradigmas son: imperativos.    Paradigmas Los programas se pueden clasificar por el paradigma del lenguaje que se use para producirlos. Eficiencia. por ejemplo.  Corrección. así como cuidar el estilo en la edición. lo haga gestionando de la mejor forma posible los recursos que utiliza.. Claridad. que sea correcto). etc.4 11 . if x == 4 then haz_algo(). modificaciones. Portabilidad. 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. etc. pero hay otros recursos que también pueden ser de consideración al obtener la eficiencia de un programa. Una crítica común en los lenguajes imperativos es el efecto de las sentencias de asignación sobre una clase de variables llamadas "no locales". además de realizar aquello para lo que fue creado (es decir. es muy importante especificar claramente qué debe hacer el programa antes de desarrollarlo y. tráfico de red que genera.Para escribir programas que proporcionen los mejores resultados. dependiendo de su naturaleza (espacio en disco que utiliza. Es muy importante que el programa sea lo más claro y legible posible.). ya que permite. recurren al uso de código ofuscado. compararlo con lo que realmente hace. por ejemplo: x := 2 + 2. para facilitar así su desarrollo y posterior mantenimiento. Para determinar si un programa hace lo que debe.. una sentencia debe asignar una expresión a una variable o usar el valor de una variable para alterar el flujo de un programa. Otros. por ejemplo: var x: integer. declarativos y orientación a objetos. al hablar de eficiencia de un programa. por diversión o para impedir un análisis cómodo a otros programadores.

se hacen más fácil. programas como funciones matemáticas. incluso no existir. La instrucción debe almacenarse temporalmente (en el registro de instrucción. Campos Normalmente una instrucción se divide en dos campos:   Código de operación: Designa la operación que va a ser realizada. entonces tal sub-objetivo se descarta y sistemáticamente se prueba otra ruta. En lenguaje ensamblador. este campo puede estar dividido en otros o ser único. se le llama a un conjunto de datos insertados en una secuencia estructurada o específica que el procesador interpreta y ejecuta. se asigna a su valor numérico un mnemónico. por ejemplo. El tamaño (longitud en bits) de la instrucción depende de cada arquitectura. en el MIPS tenemos una instrucción con el código de operación 0224x en lenguaje ensamblador es la operación add. La forma en la cual se programa puede ser por medio de texto o de forma visual. Dos amplias categorías de lenguajes declarativos son los lenguajes funcionales y los lenguajes lógicos. Los tipos de instrucción permitidos están definidos y determinados dentro de cada plataforma en el conjunto de instrucciones (en inglés ISA. En la programación visual los elementos son manipulados gráficamente en vez de especificarse por medio de texto.Los programas que usan un lenguaje declarativo especifican las propiedades que la salida debe conocer y no especifica cualquier detalle de implementación. etc. Si al tratar de buscar una solución.5 El objetivo es definido dando una lista de sub-objetivos. una ruta de sub-objetivos falla. Instrucción (informática) Instrucción en informática. instruction set architecture). pudiendo variar de 4 hasta 128 bits. Tipos  Instrucciones de transferencia de datos: en este tipo de instrucciones. En el se suelen indicar los registros y datos con los que trabajar. que también determina los registros de origen y destino de la CPU. se transfieren datos desde una localización a otra. A este paso se le llama decodificación. Los lenguajes funcionales no permiten asignaciones de variables no locales. RI) para que la CPU analice su contenido y extraiga los datos que la forman. Cada sub-objetivo también se define dando una lista de sus sub-objetivos.4 El principio detrás de los lenguajes lógicos es definir el problema que se quiere resolver (el objetivo) y dejar los detalles de la solución al sistema. y en ocasiones un dato inmediato (aquellos que son especificados explícitamente en la instrucción). Los pasos que se siguen para realizarlo son: 12 . Por ejemplo. así. Datos de la operación: Dependiendo del tipo de instrucción.

en los sistemas operativos de la familia Windows) debido a que una vez que han pasado por el proceso de compilación y han sido creados. Se pueden clasificar en de 1 operando (valor absoluto.     1. se los denomina comúnmente binarios. Generalmente el código fuente lo escriben profesionales conocidos como programadores. Inicio del proceso de lectura/escritura en la memoria. los ficheros no necesitan hacer uso de extensiones. se le denomina software. En informática. Si hay un mapa de memoria de entrada/salida. puede referirse tanto a un programa ejecutable. Instrucciones de Conversión: similares a las aritméticas y lógicas. De acuerdo a sus funciones. Realizan operaciones aritméticas de las que se encarga la ALU. donde debido a la estructura de este último.2. Instrucciones de E/S (entrada/salida): administran los comandos de entrada/salida. Instrucciones lógicas: al igual que las aritméticas. (propio en sistemas Unix. 4. En los computadores actuales.  Determinación de las direcciones de origen y destino de memoria. Definición de programa Programa informático Un programa informático es un conjunto de instrucciones que una vez ejecutadas realizarán una o varias tareas en una computadora. que más genéricamente se refiere al equipamiento lógico o soporte lógico de una computadora digital. Pueden implicar lógica especial para realizar la conversión. El mismo término. el cual es transformado en un binario cuando es compilado.1 2 Al conjunto general de programas. se han traducido al único idioma que la máquina comprende. Sin programas. Instrucciones aritméticas: pueden implicar transferencia de datos antes y/o después. combinaciones de ceros y unos llamada código máquina. con extensión . el procesador ejecuta instrucción por instrucción.1. al hecho de ejecutar varios programas de forma simultánea y eficiente. negación) y 2 operandos (suma. estas máquinas no pueden funcionar. Se escribe en un lenguaje que sigue uno de los siguientes dos paradigmas: imperativo o declarativo y que posteriormente puede ser convertido en una imagen ejecutable por un compilador.exe. resta). se le conoce como multitarea. Administran las llamadas/retornos a las subrutinas. el paso de parámetros y el enlazado. Realización de la transformación de memoria virtual a memoria real. 3. determina la dirección de este mapa de memoria. la ALU se encarga de realizar estas operaciones. los presentaron como ficheros ejecutables. las instrucciones que se escribieron en un lenguaje de programación que los humanos usan para escribirlos con mayor facilidad. Cuando se pide que el programa sea ejecutado. Instrucciones de transferencia de control: actualizan el contador de programa (PC). como a su código fuente. Posteriormente. Comprobación de la caché. 2. se clasifican en software de sistema y software de aplicación. Definición » General. que en este caso son de tipo lógico. Tecnología » Definición de programa 13 .

los lenguajes de programación (que permiten crear los programas informáticos en general) y las utilidades (que realizan tareas de mantenimiento o de uso general). es un conjunto de emisiones periódicas que se agrupan bajo un título común y que ofrece contenidos a modo de bloque. Puede ser tanto un programa ejecutable como su código fuente. el tema que se da para un discurso. Por último. Puede ser la previa declaración de lo que se piensa hacer en alguna materia u ocasión. según sus funciones. y el anuncio o exposición de las partes de que se han de componer ciertos actos o espectáculos. que a su vez proviene de un vocablo griego) tiene múltiples usos. Estos programas también son conocidos como de desarrollo económico y social. En cuanto al programa de TV o radio. un programa informático o software es algo necesario para el funcionamiento de una computadora. Esta característica lo diferencia de otros tipos de programas.Definición de programa El término programa (del latín programma. un programa de aplicación es un tipo de software diseñado para facilitar al usuario la concreción de un cierto trabajo. 14 . Existen distintas agencias de cooperación internacional que apoyan y financian los programas de desarrollo en los países más pobres del mundo. En la informática. o el conjunto unitario de instrucciones que permite a una computadora realizar funciones diversas. como los sistemas operativos (que son los que hacen funcionar a la computadora). un programa puede ser clasificado como un software de sistema o un software de aplicación. cabe destacar que un programa de desarrollo es la noción que permite nombrar a la serie de acciones organizadas con el objetivo de mejorar las condiciones de vida en una región. En este sentido. el sistema y distribución de las materias de un curso o asignatura. Por otra parte. Un programa también es una unidad temática que constituye una emisión de televisión o de radio. que es escrito por los programadores.

o el conjunto unitario de instrucciones que permite a una computadora realizar funciones diversas. las hojas de cálculo y las bases de datos son programas de aplicación. el tema que se da para un discurso. el sistema y distribución de las materias de un curso o asignatura. Tecnología » Definición de programa El término programa (del latín programma. se trata de paquetes integrados que resuelven problemas generales e incluyen varias aplicaciones. sino que la empresa también desarrolla el sistema operativo más popular: Windows. en cambio. Por eso. es el soporte material y físico. Cabe destacar que el paquete o suite de oficina más conocido es Office. En otros casos. un paquete de oficina combina aplicaciones como procesadores de textos y hojas de cálculo. el software permite resolver un problema específico. es decir. Los procesadores de texto. Esta empresa. Puede ser la previa declaración de lo que se piensa hacer en alguna materia u ocasión. y el anuncio o exposición de las partes de que se han de componer ciertos actos o espectáculos. Definición » General. los programas de aplicación son desarrollados a medida. Un programa también es una unidad temática que constituye una emisión de televisión o de radio. Su actividad no se agota en los programas de aplicación. a pedido del usuario. fundada en 1975 por Bill Gates y Paul Allen. Se dice que los sistemas operativos funcionan como el enlace entre el software y el hardware. En ocasiones. El hardware. una creación de Microsoft. Esto demuestra que las aplicaciones informáticas posibilitan la automatización de tareas como la contabilidad o la redacción de documentos. 15 . que a su vez proviene de un vocablo griego) tiene múltiples usos.El software es el equipamiento intangible y lógico de una computadora. es la compañía de software más grande del mundo. Por ejemplo.

Por otra parte. «orden. un programa puede ser clasificado como un software de sistema o un software de aplicación. *BSD.En este sentido. Puede ser interno (contenido en el propio intérprete) o externo (contenido en un archivo ejecutable). Existen distintas agencias de cooperación internacional que apoyan y financian los programas de desarrollo en los países más pobres del mundo. Suele admitir parámetros (argumentos) de entrada. Por último. instrucción») o mandato es una instrucción u orden que el usuario proporciona a un sistema informático. después de pulsar la tecla enter en el teclado. cmd. bash. PC-DOS. Línea de órdenes La línea de órdenes o consola (del inglés shell) permite al usuario escribir instrucciones. XP. hace unos cuantos años la única forma de comunicarse era mediante esta línea de órdenes. sh.exe para los sistemas basados en Windows NT (Windows NT. un programa informático o software es algo necesario para el funcionamiento de una computadora. Solaris. etc. DR-DOS. etc. FreeDOS. es un conjunto de emisiones periódicas que se agrupan bajo un título común y que ofrece contenidos a modo de bloque. se ejecuten procesos internos al propio intérprete de órdenes o se lancen programas externos al mismo. Vista y 2008 Server). que es escrito por los programadores. los usuarios escribían la instrucción o el programa que deseaban que fuera ejecutado por el ordenador.). Sin embargo. por ejemplo mediante el ratón.). 2000. desde la línea de comandos (como una shell) o desde una llamada de programación. Algunas de estas consolas son:    command. Ahora se puede interactuar con el ordenador de formas mucho más sencillas. Suelen indicarse tras una barra "/" (en sistemas operativos DOS) o un guion simple "-" o doble "--" (en sistemas operativos Unix). de tal modo que.com para los sistemas basados en DOS (MS-DOS. etc. ksh. Puede ser tanto un programa ejecutable como su código fuente. lo que permite modificar su comportamiento predeterminado. cabe destacar que un programa de desarrollo es la noción que permite nombrar a la serie de acciones organizadas con el objetivo de mejorar las condiciones de vida en una región. 2003 Server.3. según sus funciones. En ella. 16 . Estos programas también son conocidos como de desarrollo económico y social. la línea de comandos (o línea de órdenes) no es más que una de las formas en que el ordenador interacciona con el usuario. para los sistemas basados en Unix (GNU/Linux. En realidad. csh. En cuanto al programa de TV o radio. Definición de comandos Comando (informática) Un comando (calco del inglés command. o mediante una pantalla táctil. 1.

son modificadas antes de su ejecución. las veces deseadas. 4. 6.Esta interacción la lleva a cabo un programa que se suele llamar intérprete de comandos o intérprete de órdenes. 17 . basta seleccionar Inicio/Ejecutar y escribir 'CMD' y pulsar Intro. del teclado se obtinen las órdenes introducidas anteriormente y también se puede utilizar la flecha hacia abajo. El intérprete de órdenes es un programa de estructura repetitiva. Expande los caracteres genéricos tales como el asterísco o la interrogación. Realiza los redireccionamientos tanto de la entrada de datos. 5. ejecutar: cmd En linux. puede ejecutarse el intérprete pusando en inicio.TXT El encargado de recibir la línea que escribe el usuario. De este modo se inicia una sesión utilizando el intérprete. lo ejecuta. A continuación se explica más en detalle en qué consiste este programa. Por ejemplo. Escribir HELP y pulsar INTRO para obtener ayuda. en los sistemas de Microsoft. Imaginar por ejemplo la orden: DELETE *. Si es una orden externa (un programa). de este modo es muy cómodo ver el histórico de las órdenes introducidas) Intérprete de órdenes Intérprete de comandos de MS-DOS Las líneas de órdenes que escribe el usuario no se ejecutan tal como se han escrito. 3. Si es una orden interna. 2. intenta localizar recorriendo la lista de directorios de la variable PATH y si lo encuentra solicita su ejecución al sistema operativo. Inicio de la ejecución del intérprete de comandos en Windows Para iniciar el funcionamiento del intérprete de órdenes en Windows. ejecutarla o solicitar su ejecución es el denominado intérprete de órdenes o shell del sistema. modificarla. como de las salidas. ya que ahora es muy fácil editar la línea para realizar modificaciones y llevar un histórico de las órdenes introducidas (pulsando con la flecha hacia arriba. En caso contrario indica que no puede ejecutar dicha orden. es suficiente con seleccionar la aplicación de consola (identificada mediante una ventana) e inmediatamente se lanza el intérprete de órdenes (en la actualidad suele ser el bash. cuyas funciones principales son las siguientes: 1. aunque esto puede modificarlo el usuario) En la actualidad la interacción mediante la línea de órdenes es bastante más sencilla que con los primeros intérpretes. Muestra el prompt del sistema.

A ese directorio se le suele denominar directorio en curso o directorio de trabajo. Son sencillamente programas. las órdenes del sistema se dividen en internas y externas.En otros sistemas operativos es suficiente con escribir el nombre del intérprete. el directorio en curso pasará a ser el /tmp (por supuesto si dicho directorio existe). al ser ejecutada por el intérprete. sh. es decir. 18 . son ejecutables que se encuentran en uno de los discos del ordenador. Para ello escribir la palabra help en la línea de órdenes del siguiente modo: Ejemplo: help Órdenes internas Ejemplo: ver Esta orden muestra la versión del sistema operativo con el que estamos trabajando. Órdenes externas (programas) Las órdenes externas son órdenes que no sabe ejecutar el intérprete y que para su ejecución hay que localizarlas en el disco. Para obtener una relación de las posibles órdenes del sistema. Tipos de órdenes Como hemos comentado anteriormente. Ejemplo: cd Esta orden. tal como bash. En la misma se le indica la carpeta a la que se desea acceder Por ejemplo: cd /tmp Al ser ejecutada esta orden. muestra el directorio o carpeta en la que se está trabajando en ese momento. csh o similar. puede utilizarse la orden help. Existe otra forma de utilizar esta orden.

el intérprete los busca en una serie de directorios. que también determina los registros de origen y destino de la CPU. este campo puede estar dividido en otros o ser único. Realización de la transformación de memoria virtual a memoria real. Comprobación de la caché. Ejemplo: . Los pasos que se siguen para realizarlo son: Determinación de las direcciones de origen y destino de memoria. en concreto aquellos que están indicados en la varible PATH. se transfieren datos desde una localización a otra. Datos de la operación: Dependiendo del tipo de instrucción. en el MIPS tenemos una instrucción con el código de operación 0224x en lenguaje ensamblador es la operación add./keyboard 1. Inicio del proceso de lectura/escritura en la memoria. Campos Normalmente una instrucción se divide en dos campos:   Código de operación: Designa la operación que va a ser realizada. El tamaño (longitud en bits) de la instrucción depende de cada arquitectura.Para su localización. Definición de instrucción Instrucción (informática) Instrucción en informática. En el se suelen indicar los registros y datos con los que trabajar. 19 1. . La instrucción debe almacenarse temporalmente (en el registro de instrucción.4. se asigna a su valor numérico un mnemónico. Tipos  Instrucciones de transferencia de datos: en este tipo de instrucciones. instruction set architecture). RI) para que la CPU analice su contenido y extraiga los datos que la forman. 4. y en ocasiones un dato inmediato (aquellos que son especificados explícitamente en la instrucción). En lenguaje ensamblador. incluso no existir. Por ejemplo. A este paso se le llama decodificación. pudiendo variar de 4 hasta 128 bits. se le llama a un conjunto de datos insertados en una secuencia estructurada o específica que el procesador interpreta y ejecuta. 3. Los tipos de instrucción permitidos están definidos y determinados dentro de cada plataforma en el conjunto de instrucciones (en inglés ISA. 2.

la arquitectura de memoria y las interrupciones. por ejemplo el Intel Pentium y AMD Athlon implementan versiones casi idénticas del conjunto de instrucciones x86. entre otros aspectos. Conjunto de instrucciones Un conjunto de instrucciones o repertorio de instrucciones. Ubicaciones particulares de memoria Modos de direccionamiento para interpretar operandos Las operaciones más complejas se construyen a partir de estas. la ALU se encarga de realizar estas operaciones. Existe principalmente de 3 tipos: CISC (Complex Instruction Set Computer). el paso de parámetros y el enlazado. que son los elementos y técnicas que se emplean para implementar el conjunto de instrucciones. Instrucciones lógicas: al igual que las aritméticas. de direccionamiento o de control. Pueden implicar lógica especial para realizar la conversión. negación) y 2 operandos (suma. El lenguaje máquina El lenguaje máquina está construido a partir de los estados discretos o instrucciones. En la arquitectura de procesamiento.     Instrucciones aritméticas: pueden implicar transferencia de datos antes y/o después. que(en una máquina Von Neumann) se ejecutan secuencialmente. Instrucciones de E/S (entrada/salida): administran los comandos de entrada/salida. que en este caso son de tipo lógico. los registros. RISC (Reduced Instruction Set Computer) y SISC (Simple Instruction Set Computing). una instrucción dada puede especificar:    Registros particulares para operaciones aritméticas. juego de instrucciones o ISA (del inglés Instruction Set Architecture. aunque tienen diseños internos completamente opuestos. Procesadores con diferentes diseños internos pueden compartir un conjunto de instrucciones. Se pueden clasificar en de 1 operando (valor absoluto. o según el control de flujo. Instrucciones de Conversión: similares a las aritméticas y lógicas. Instrucciones de transferencia de control: actualizan el contador de programa (PC). Arquitectura del Conjunto de Instrucciones) es una especificación que detalla las instrucciones que una CPU de un ordenador puede entender y ejecutar. El término describe los aspectos del procesador generalmente visibles a un programador. o el conjunto de todos los comandos implementados por un diseño particular de una CPU. Si hay un mapa de memoria de entrada/salida. determina la dirección de este mapa de memoria. las instrucciones. Muchas o pocas de las operaciones disponibles incluidas en la mayoría de conjuntos son: 20 . Realizan operaciones aritméticas de las que se encarga la ALU. Entre estos elementos se encuentras las microinstrucciones y los sistemas de caché. Administran las llamadas/retornos a las subrutinas. resta). La arquitectura del conjunto de instrucciones (ISA) se emplea a veces para distinguir este conjunto de características de la microarquitectura. incluyendo los tipos de datos nativos.

como el control de múltiples unidades funcionales. El resultado era el RISC (Reduced Instruction Set Computer). 21 . o Realizar operaciones bit a bit. un conjunto más complejo puede optimizar operaciones comunes. o Leer y escribir datos desde dispositivos de hardware Operaciones matemáticas o Sumar. teniendo el AND y el OR de cada bit en un par de registros.   Desplazamiento o Establecer un registro a un valor constante o Mover datos desde una posición de memoria a un registro y viceversa. o simplificar la programación. Un conjunto de instrucción más simple puede ofrecer el potencial para velocidades más altas. o Comparar dos valores que se encuentren en registros(por ejemplo. El diseño de sistemas de instrucción es una edición compleja. tales como el seno o la raíz cuadrada. imagen. Varias implementaciones de SIMD se han traído al mercado bajo nombres comerciales tales como MMX. Sin embargo. por ejemplo call printf) Algunos ordenadores incluyen instrucciones "complejas". y consumo de energía reducido. restar. o Saltar a otra posición si se cumple cierta condición o Saltar a otra posición. pero salvando la posición actual para poder volver (realizar una llamada. El primer era el CISC (Complex Instruction Set Computer) que tenía muchas instrucciones diferentes. En los años 70 IBM hicieron la investigación y encontraron que muchas instrucciones en el sistema podrían ser eliminadas. y el proceso video. SIMD tienen la capacidad de manipular vectores y matrices grandes en tiempo mínimo. Había dos etapas en la historia para el microprocesador. Estas se caracterizan por instrucciones que necesitan varios pasos. Un tipo complejo de la instrucción que ha llegado a ser particularmente popular recientemente es SIMD o Simple_Instrucción_Multiplos_Datos. una operación que realice la misma operación aritmética en pedazos múltiples de datos al mismo tiempo. si son iguales o si uno es mayor que otro) Afectan al flujo de programa o Saltar a otra posición del programa y ejecutar instrucciones allí. Esto se realiza para obtener datos para operaciones matemáticas y su almacenamiento. tamaño reducido del procesador. o el NOT de cada bit en un registro. Algunos ejemplos son:     Ahorro de registros en la pila Mover grandes bloques de memoria Complejas operaciones and/or con aritética de coma flotante. Dichas instrucciones pueden tomar muchas instrucciones en otros equipos. una arquitectura que utiliza un sistema más pequeño de instrucciones. multiplicar o dividir dos registros y colocar el resultado en alguno de ellos. mejorar memoria/eficiencia de cache. 3DNow! y AltiVec. Instrucciones que combinan ALU con un operando de la memoria mas que de registros. Las instrucciones de SIMD permiten la paralelización fácil de los algoritmos implicados comúnmente en sonido.

Las computadoras con alta densidad del código también tenían a menudo instrucciones complejas para la entrada del procedimiento. Por ejemplo. el funcionamiento. Hay también algunos nuevos diseños de CPU que compilan el conjunto de instrucción a una RAM escribible o FLASH dentro de la CPU (tal como el procesador Recursiv y el Imsys Cjip). muchas implementaciones de la instrucción “pipline” permiten solamente una carga de memoria (load) o almacén en memoria (store) por instrucción. los registros. usando una ROM dedicada.forzando la implementación de instrucción de manera particular. Los detalles de la implemetación tienen una influencia fuerte en las instrucciones particulares seleccionadas para el conjunto de instrucción. la densidad del código. los ingenieros usaron bloques de circuitos electrónicos “duramenteconectados” (diseñado a menudo por separado) por ejemplo l. debido a la interpretación de “overhead”. es práctica para los vendedores de nuevos ISAs o microarchitectures poner emuladores del software a disposición de los desarolladores de programas informáticos antes de que la implementación del hardware esté lista. algunas maneras de implementar la instrucción “pipline” llevaron a una ranura de retardo. los multiplexores. Sin embargo. ALUs etc. separada del microcódigo. Las varias maneras de implementar un conjunto de instrucciones dan diversas compensaciones entre el coste. para realizar los filtros digitales es bastante insuficiente. Al diseñar microarquitecturas. los retornos parametrizados. el tamaño. o FPGA (computación reconfigurable). los contadores. el etc. Diseño del conjunto de instrucciones La densidad del código En computadoras antiguas. así que minimizar el tamaño de un programa para asegurar que va a caber en la memoria limitada era a menudo central. es más lento que ejecutar programas directamente sobre el hardware emulado. llevando a carga-almacena arquitectura (RISC). Un cierto tipo del lenguaje de transferencia de registros es a menudo usado para describir la codificación y la secuencia de cada instrucción de ISA usando esta microarquitectura física. Por otro ejemplo.Implementación del conjunto de instrucciones Cualquier conjunto de instrucciones se puede implementar de varias maneras. Naturalmente. Western Digital MCP-1600 es un ejemplo antiguo. el consumo de energía. ISA se puede también emular en software por un intérprete. y requiere un solo ciclo. Todas las maneras de implementar un conjunto de instrucciones dan el mismo modelo programado. La demanda de procesamiento de señal digital de alta velocidad han empujado en el sentido coontrario. los lazos etc. era una característica importante de cualquier sistema de instrucción. Por ejemplo. la instrucción del MAC en un procesador típico de señal digital (DSP) se debe implementar usando una arquitectura de Harvard que pueda traer una instrucción y dos palabras de datos simultáneamente. Hoy. " 22 . Así el tamaño combinado de todas las instrucciones necesitó realizar una tarea particular. y todas pueden hacer funcionar los mismos ejecutables binarios. la memoria del programa era costosa.

fueron los primeros implementados con profundidad en el período de rápido crecimiento de las memorias de subsistemas. store reg2. b y c se refieren a celdas de memoria.c como la mayoría de las máquinas se limitan a 23 . Sin embargo. push y pop son las instrucciones utilizadas para acceder a la memoria: push a. índexado). para poder caber instrucciones múltiples en una sola palabra de máquina. c. add b.reg1. o más generalmente: move a. también llamada máquina de pila: todas las operaciones aritméticas se ejecutan en la parte superior de una o dos posiciones de la pila. las instrucciones serían: load a.bien una sola instrucción: add a. add reg1. store c. por varias razones (por ejemplo: no tener que comprobar si una instrucción se extiende a ambos lados de una línea de caché o el límite de memoria virtual de la página). permite una mejor reutilización de los datos: CISC . indirecto. (en los ejemplos que siguen. pop c. o una constante) y un operando a la izquierda: load a. Las instrucciones RISC suelen realizar sólo una operación. load b. mientras que reg1 y sucesivos se refieren a los registros de la máquina). hacen menos óptimo el uso del ancho de banda y de la memoria caché. así que pueden ser observadas fácilmente en un FPGA o en una forma multinucleo.reg2. Ciertas arquitecturas pueden permitir dos o tres operandos (incluido el resultado) directamente en memoria o pueden permitir realizar funciones tales como el incremento automático del puntero. add. c RISC . como los equipos RISC normalmente requieren más y más para implementar las instrucciones que ejecutan una determinada tarea. se reduce el código con el fin de simplificar el circuito de aplicación y con ello tratar de aumentar el rendimiento a través de las frecuencias de reloj más elevadas y el uso de más registros.c 3-operando.cargas que requieren la memoria explícita. Éstos tipo de núcleos llevan a menudo poco silicio para implementarse. una posición de memoria. La densidad del código es similar al RISC.reg1. tal como " add". b. mientras que un conjunto de instrucciones típicas CISC tiene instrucciones muchos más cortas que esta longitud fija. también llamadas máquinas de acumulador.b. reg1. Número de operandos El conjunto de instrucciones puede ser clasificado por el número máximo de operandos explícitamente especificados en las instrucciones. Las computadoras mínimas del conjunto de instrucciones (MISC) son una forma de máquina apilada. Las instrucciones de longitud fija son menos complicadas de manejar que las instrucciones de ancho variable. incluída en la mayoría de las primeras computadoras y muchos microcontroladores pequeños: la mayoría de instrucciones especifican un operando explícito a la derecha (un registro. add reg1. a. la densidad creciente de la instrucción es compensada requiriendo más de las instrucciones primitivas de hacer una tarea. 0-operando. como una "suma" de registros o una "carga" de una posición de memoria en un registro.reg2. y por lo tanto algo más fácil de optimizar la velocidad .instrucciones CISC" combinan simplemente una operación básica de la ALU. 1-operando (máquinas de una dirección). RISC. 2-operando – la mayoría de las máquinas CISC y RISC entran en esta categoría: CISC – load a. con el acceso de uno o más operandos en memoria (usando modos de dirección tales como directo. add reg1. store reg1. push b. también suelen utilizar una longitud de instrucciones fijas. donde hay pocas instrucciones separadas (16-64). b.

load b. store reg3. RISC . Características que debe tener un conjunto de instrucciones Las características que se pretende que tenga un conjunto de instrucciones son cuatro. Independientes: Que no dependan de la ejecución de alguna otra instrucción.c.reg2. principalmente:  Completo: Que se pueda realizar en un tiempo finito cualquier tarea ejecutable con un ordenador (computable o decidible). add reg1+reg2->reg3. más operandos. sin modificar el origen y normalmente sin afectar a los flags o indicadores de condición. instrucción de evaluación de polinomio. este esquema no suele estar disponible en los procesadores RISC con pequeñas instrucciones de 16 bits: load a. Autocontenidas: Esto es.dos operandos de memoria. Pueden transferir palabras. Tipos de instrucciones y ejemplos  Transferencia de datos: Copian datos de un origen a un destino. algunas máquinas CISC permiten una variedad de modos de direccionamiento que permiten más de 3 operandos (registros o accesos a memoria). Eficiente: Que permita alta velocidad de cálculo sin exigir una elevada complejidad en su UC y ALU y sin consumir excesivos recursos (memoria).    Se puede comprobar que para que un conjunto de instrucciones sea completo solo se necesitan cuatro instrucciones: -> escritura -> mover a la izquierda una posición y leer -> mover a la derecha una posición y leer -> parar En esta idea se basan las arquitecturas RISC. no obstante. 24 . debe cumplir su tarea en un tiempo razonable minimizando el uso de los recursos. fracciones de palabras (bytes. media palabra) o bloques completos de n bytes o palabras. que contengan en sí mismas toda la información necesaria para ejecutarse. con este conjunto no se puede conseguir la eficiencia del repertorio de instrucciones por lo que en la práctica el conjunto suele ser más amplio en aras de conseguir un mejor rendimiento. tanto en uso de recursos como en consumo de tiempo. es decir.reg1. como el VAX "POLY".Debido a la gran cantidad de bits necesarios para codificar los tres registros.

(todos los bits) set: pone a 1 el destino. subtract: Resta. exchange: intercambia el contenido de dos operandos. (indicada por el SP) Instrucciones aritméticas: Son efectuadas por la ALU y suelen cambiar los flags o indicadores de condición.registro -> registro .Estas operaciones pueden ser: -> registro . store: copia el contenido de un registro a memoria. move block: copia un bloque de datos de una posición de memoria a otra. clear: pone a 0 el destinto. move multiple: copia del origen en varias posiciones de memoria. load: copia el contenido de una posición de memoria a un registro.memoria -> memoria .memoria Nemotécnicos más frecuentes:            move: copia el contenido de un registro(o memoria) a otro. (indicada por el SP) pop: saca un dato de la cabecera de la pila. (todos los bits) push: introduce un dato en la cabecera de la pila. Nemotécnicos más frecuentes:      add: Suma. increment: incrementa en 1 un valor. subtract with borrow: Resta teniendo en cuenta el adeudo anterior. add with carry: Suma con acarreo.registro -> memoria . 25 .

 26 . lo cual se identifica con una 'f' antes del nombre del nemotécnico como por ejemplo: fabsolute  Instrucciones de comparación: Suelen preceder a una instrucción de bifurcación condicional y modifican los flags. solo modifica los flags. Nemotécnicos más frecuentes:     and: el "y" lógico. Pueden ser de izquierda a derecha. xor: el "o exclusivo" lógico.      decrement: decrementa en 1 un valor. Como las aritméticas también modifican los flags. test: compara un cierto valor especificado con el 0. negate: cambia de signo. extend: aumenta el operando de tamaño. multiply: multiplica. no confundir con el cambio de signo "negate" que es el complemento a 2) Instrucciones de Desplazamiento: Pueden ser aritmético o lógico y pueden incluir o no rotaciones. not: la negación lógica. (complemento a 1. absolute: valor absoluto. or: el "o inclusivo" lógico. No hay que pensar que las instrucciones de salto condicional dependen de este repertorio. (de hecho cualquier operación aritmética realizada anteriormente a un salto condicional puede provocar que este "salte"). ya que lo único que hace el salto condicional es consultar los flags y salta si precede. -> Pueden tener instrucciones para tratar con números en BCD e incluyen operaciones en coma flotante. Nemotécnicos más frecuentes:    compare: Resta los dos operandos pero no almacena el resultado. divide: divide. pero no depende de ninguna instrucción de comparación. Instrucciones lógicas: Realizan operaciones booleanas "bit a bit" entre dos operandos.

Instrucciones de control: Permiten modificar la secuencia normal de ejecución de un programa. bit set: comprueba un bit y lo pone a 1. Nemotécnicos más frecuentes: jcond o bcond  Llamadas a subrutinas: Invoca la ejecución de funciones anteriormente definidas.Nemotécnicos más frecuentes:    shift: desplazamiento aritmético o lógico. Nemotécnicos más frecuentes:     bit test: comprueba un bit. Nemotécnicos más frecuentes: call (llamada) y ret (retorno) 27 . se suelen especificar como jump o brantch. Instrucciones de bits: Comprueban un bit del operando y su valor lo reflejan en el indicador de cero. puede hacerse por salto condicional relativo o absoluto. Se clasifican en cuatro grupos: -> salto incondicional -> salto condicional -> Llamada a subrutinas -> Gestión de las interrupciones  saltos: Pueden ser condicionales o incondicionales. Nemotécnicos más frecuentes: jump o brantch -> Condicional: salta si la condición se cumple. bit clear: comprueba un bit y lo pone a 0. rotate: rotación con o sin acarreo. -> Incondicional: salta sin comprobar ninguna condición. Pueden poner un bit a 0 o complementarlo. y en el caso de los condicionales se suele llamar jcond o bcond donde cond es una o más letras que indican la condición que ha de cumplirse para que el salto se produzca.

control i/o: Envía información de control hacia un periférico. 28      . disable: Deshabilita las interrupciones. Nemotécnicos más frecuentes:     input o read: Pemite leer información de un puerto y trasladarla a memoria principal. store y move. nop: No realiza ninguna operación. sirve para rellenar huecos en un programa o temporizar esperas. test and set: Se utiliza para la implementación de la exclusión mutua. Necesita una instrucción similar a return para retornar al contexto anterior pero restableciendo el estado de la máquina. ya que este mapa y el mapa de memoria son disjuntos. test i/o: Lee información de control de un periférico. enable: Habilita las interrupciones. que un procesador no pueda acceder a un determinado recurso que está siendo usado por otro procesador en ese mismo momento. Instrucciones de E/S: Son instrucciones de transferencia salvo que el origen/destino de dicho flujo es un puerto de un dispositivo de E/S. para no afectar a la aplicación a la cual se interrumpió (iret). output o write: Permite escribir información en un puerto de un dispositivo. como son: load. esto es. ->E/S independiente: Necesitan unas instrucciones especiales para indicarle al procesador que nos estamos refiriendo al mapa de direcciones de E/S. Gestión de interrupciones: Se usan para llamar a las rutinas de servicio de interrupción y esto se puede hacer por hardware o bien por software. Estas instrucciones pueden darse mediante dos alternativas:  ->E/S "mapeada" en memoria: Los periféricos tienen direcciones asignadas de la MP por lo que no se necesitan instrucciones especiales y las operaciones se realizan con las ya vistas. Instrucciones de control y misceláneas: Nemoténicos más frecuentes:  halt: Detiene la ejecución del programa hasta que una interrupción arranca otro programa. wait: Sirve para deterner la ejecución de un programa hasta que sucede un determinado evento que no es una interrupción (otra condición externa al primer programa).

esto es. (1 = s.rojo y 0 = s.verde) 29 . de manera que si un procesador comprueba y el semáforo está en 1 tendrá que esperar hasta que este cambie a 0. se declara una variable entera que tendrá el valor 0 si el recurso esta libre y 1 si está siendo utilizado.Se usan como semáforos.

UNIDAD II ELEMENTOS DEL LENGUAJE DE PROGRAMACIÓN 30 .

. Format: comando del sistema operativo MS-DOS cuya misión es formatear las unidades de almacenamiento (discos duros y disquetes). También puede verificar si hay factores defectuosos en el disco y podrá borrar toda la información que este contenga.  Comandos internos: Son aquellos comandos cuyas instrucciones son cargadas a la memoria RAM. 31 . Este comando también puede emplearse como un editor de texto. Este tiene como objetivo dar formato al disco del driver. que se llama *Dos* genéricamente. 2.1. Definición. es casi la versión idéntica de IBM. DATE: permite modificar y visualizar la fecha del sistema. para equipar a los ordenadores PC que había desarrollado. Los Comandos 1~MSD Acrónimo de Microsoft Diagnostics (diagnósticos de Microsoft) Nombre que recibe la aplicación entregada en las últimas versiones del sistema operativo MS-DOS. MS-DOS (Microsoft-disk operating system) Sistema operativo en disco de Microsoft sistema operativo de un solo usuario para PC de Microsoft. Introducción En el siguiente trabajo trataremos algunos de los comandos internos y externos del sistema. Estos comandos no necesitan la presencia del sistema operativo. ejemplo y diferencias fundamentales de los comandos básicos internos y externos del sistema operativo. COPY: copia uno o más archivos de un disquete a otro.2. Entre ellos encontramos:     CLS: tiene como función limpiar la pantalla. Este crea un nuevo directorio raíz y tabla de asignación de archivos para el disco. TIME: tiene como objetivo visualizar la hora del sistema o ejecutar el reloj interno de la PC. Formatear es preparar un disco o disquete para trabajar o almacenar datos. que posibilita al usuario la obtención de información sobre la configuración de su equipo. es muy interesante y muy informativo. 2~FORMAT(comando externo) Sistema operativo de Microsoft por encargo de IBM. Comandos 1. he investigado y espero que lo aproveche como lo he hecho yo. Comandos del sistema 1.

y el principal sistema para computadoras personales compatible con IBM PC en la década de 1980 y mediados de 1990.2 La versión incluida en los PC's de IBM fue conocida como PC DOS. DELTREE: es usado para borrar un directorio raíz no importa que contenga subdirectorios con todos sus contenidos.   Diferencia entre comandos internos y externos: La diferencia fundamental entre comandos internos y comandos externos esta en que las instrucciones de los comandos internos son cargados en la memoria RAM. 32 . Su desarrollo se inició oficialmente en 1981 y fue lanzado en 1982 como MS-DOS 1. Son llamados externos porque estos están grabados fuera de la memoria RAM. por lo tanto son grabados en el disco.0. fue presentada en 1982.   TIPE: visualiza el contenido de un archivo desde la línea de comando. O ya sea las informaciones que posee un archivo en su interior. Rápidamente Microsoft compró los derechos de QDOS también conocido como 86-DOS. los dos productos se separaron con el tiempo. Fue el miembro mas popular de la familia de sistemas operativos DOS de Microsoft. también conocido como 86-DOS. MS-DOS nació en 1981 al ser encargada Microsoft de producir un sistema operativo para la gama de computadores personales IBM PC de IBM. en particular por varias generaciones de Microsoft Windows. Comandos externos: Son los comandos que necesitan mucha capacidad de memoria para mantenerse para mantenerse dentro de ella al mismo tiempo. Quick and Dirty Operating System. en cambio los comandos externos quedan grabados fuera de la memoria RAM MS-DOS MS-DOS (siglas de MicroSoft Disk Operating System.0. Una etiqueta es el nombre de un dato. LABEL: es la etiqueta del disco. MS-DOS 1. y comenzó a trabajar en las modificaciones para poder cumplir con los requerimientos de IBM. SYS: transfiere los archivos de sistema de dos ocultos para hacer un disquete que tenia para inicial. hasta que fue sustituida gradualmente por sistemas operativos que ofrecían una interfaz gráfica de usuario. Sistema operativo de disco de Microsoft) es un sistema operativo para computadores basados en x86. Historia MS-DOS se desarrolló a partir de QDOS. por varias generaciones del sistema operativo Microsoft Windows. en particular.1 de Seattle Computer Products. DISKCOPY: nos permite hacer una copia idéntica de un disquete a otro. Entre estos están:       FORMAT: tiene como función formatear las unidades de almacenamiento (discos duros y disquete). CD: nos sirve para cambiar de escritorio. archivo o programa. Aunque MS-DOS y PC-DOS fueron desarrollados por Microsoft e IBM en paralelo. Tuvo ocho versiones principales y alcanzó gran difusión pero fue gradualmente reemplazado por sistemas operativos que ofrecían una interfaz gráfica de usuario (GUI). La primera edición. VER: su objetivo es visualizar la versión del sistema operativo en el disco.

disquetes de 5.0 .3 . Soporta sistemas de archivos FAT32.Última versión distribuida por separado.0 .5 pulgadas y 720 KB. Soporte de 4 puertos serie (antes sólo 2). PC DOS 6.0 . 22 órdenes. DoubleSpace (compresión de archivos).Añadido soporte para el ordenador PS/2 de IBM y los nuevos disquetes de 3. algunas mejoras y arreglos. PC DOS 7.25 pulgadas de una sola cara de 160 Kb. Permite archivos con extensión . MS-DOS 6.0 . MS-DOS 7. MS-DOS 6. soporte de disco duro (alrededor de 5 MB). MSBackup (copias de seguridad).0 .Añade Stacker para reemplazar a DoubleSpace.Versiones Disquetes de instalación de MS-DOS 6.Complemento del IBM XT liberado en 1983.exe.Liberado en 1993.1 .01 . Incluido DriveSpace para sustituir a DoubleSpace.Implementado en 1991.22 .Versión para corregir errores.5 pulgadas de alta capacidad (1. MS-DOS 3. mejora del intérprete de órdenes o shell.COM.0 .0 .com y . MS-DOS 3.Eliminado el soporte de compresión de disco DoubleSpace.Complemento del IBM PCjr. PC DOS 4.Añadido soporte para otros idiomas y soporte LAN.Agregado DOS Shell. MS-DOS 4.3 .Generado con el código fuente de IBM.21 .1 . etc. incluye soporte para Microsoft Windows. 33 .22                      PC DOS 1.0 .2 .Distribuido junto con Windows 95. MSAV (Microsoft Anti-Virus). MS-DOS 5. Añadidas algunas mejoras. PC DOS 1. utilidades como Defrag (desfragmentación del disco). Incorporación de la orden "Files" para poder abrir hasta 255 archivos simultáneamente.Versión para corregir algún error. Incluye soporte para nombres de archivo largos (hasta ahora habían tenido la restricción del 8+3). PC DOS 2.Liberado en 1981 como complemento al IBM-PC.25 Primera versión liberada con el nombre MS-DOS. MS-DOS 6.Añadida capacidad para disquetes de 3.Incluido en Windows Me. soporta disquetes de doble densidad 1. Es la última versión de MS-DOS. MS-DOS 4. MS-DOS 6.44 MB).Capacidad para crear particiones de disco superiores a 32 MB. Nuevas páginas de código de caracteres internacionales añadidas. con soporte para 17 países. MS-DOS 8.Integrado en Windows 95 OSR2 y posteriormente en Windows 98 y 98 SE.Liberado en abril de 1994.3 . Soporta 16 Kb de memoria RAM. Características MS-DOS es un sistema operativo monotarea y monousuario para ordenadores personales. Más del doble de nuevos comandos.1 . no con el de Microsoft.Corregidos muchos errores. PC DOS 3.0 . incluyendo más características de administración de memoria y herramientas para soporte de macros.2 . MS-DOS 2. MemMaker. MS-DOS 2. MS-DOS 7. Primera versión de DOS. Incorpora el intérprete de comandos COMMAND.11 .

Muestra la etiqueta del disco duro y su volumen (si lo tiene).2 permite lo siguiente: comando_a_consultar /? (Ej. principalmente. MD .Muestra la versión del Sistema Operativo. o CD nombre_directorio Cambia al directorio jerárquicamente inferior. REM . MEM .Cambia la línea de visualización de la orden. cambia los atributos de directorios y archivos. excepto el incitador de comandos (prompt) usualmente la letra y ruta de la unidad usada (Por ejemplo C:\>) COPY . FOR .Muestra la cantidad de memoria RAM.: copy /?). CLS . SET . a partir de la versión 6. TYPE .Limpia todos los comandos y toda la información que hay en pantalla. 34 . VER .Copiar un archivo de un directorio a otro COPY CON Copia a un archivo los caracteres introducidos en pantalla (CONsola) DIR .Permite insertar comentarios en archivos de proceso por lotes. VOL .Comandos ¿Como usar? El MS-DOS tiene varios usos. la cantidad ocupada y la libre.Renombra archivos y directorios. RD o RMDIR. REN o RENAME . MS-DOS.Cambia el directorio actual.Elimina un directorio. y que actualmente pueden ser utilizados desde la línea de comandos en sistemas operativos Windows. Con parámetros. Pueden ser internos (incluidos dentro del propio COMMAND. Se utiliza. visualiza los atributos de los directorios y archivos.Muestra el contenido de un fichero. a los cuales puedes acceder escribiendo 'cmd' dentro de 'Ejecutar'. Comandos básicos Aquí se muestran algunos de los comandos que utilizaba MS-DOS.COM) o externos (archivos ejecutables en el directorio del MSDOS): Comandos internos                  CD o CHDIR . TIME .Repite un comando PROMPT. Puedes probar algunos de ellos y luego profundizar más en el uso de esta herramienta dandole aplicaciones más practicas. para ver contenidos de ficheros en formato texto.Visualiza o cambia la hora del reloj interno.Crea un nuevo directorio. Comandos externos  ATTRIB .Asigna valores a variables de entorno. Para acceder a la ayuda de estas. Allí puedes familiarizarte usando algunos comandos básicos como lo es 'COLOR F3' o 'HELP' por ejemplo.Sin parámetros.Lista los directorios y archivos de la unidad o directorio actual.

BACKUP . de sistema (s). Su sintaxis es comando < fichero.Mueve o cambia de posición un directorio y/o ficheros.2. Una variable es representada y usada a través de una etiqueta (un nombre) que le asigna un programador o que ya viene predefinida. el espacio ocupado y el espacio libre. en la variable de nombre "num". añade el resultado del comando a continuación del contenido previo del fichero. LABEL . en una unidad física de almacenamiento (discos duros. se almacena el número 8 (de tipo entero). Si el fichero no existe. Si ya existía. PRINT . TREE . Ejemplo: Attrib +r *.Crea una unidad lógica virtual a partir de un directorio.Permite mantener residentes en memoria RAM las órdenes que han sido ejecutadas en el punto indicativo. Su sintaxis es comando >> fichero. FORMAT .Borra un directorio sin importar que contenga subdirectorios con todos sus contenidos. una variable es un espacio de memoria reservado para almacenar un valor que corresponde a un tipo de dato soportado por el lenguaje de programación. También renombra subdirectorios. 2. sobreescribe su contenido. > . De forma 35 . Su sintaxis es comando > fichero.Permite imprimir ficheros. Si el fichero no existe.Re direccionamiento de la entrada estándar. DOSKEY . MEM . CHKDSK . oculto (h). >> .Ejecuta una copia de seguridad de uno o más archivos de un disco duro a un disquete. y h "v".       KEYB . w.Re direccionamiento de la salida estándar. Se pueden utilizar estos parámetros combinados. pertenece al grupo de las órdenes externas.Re direccionamiento de la salida estándar a un fichero existente. a. para todos los ficheros de ese directorio)          APPEND . Variables En programación.muestra los directorios en forma de ARBOL Redireccionamientos    < . DISKCOPY . FC . (También se puede utilizar para corregirlos con el parámetro "/F") DELTREE .Sirve para especificar trayectorias para ficheros de datos.Establece el idioma del teclado según el parámetro adicionado (Ejemplo: KEYB SP para el teclado español).Permite crear la estructura lógica. de archivo (a).Compara ficheros. y los ficheros son: de lectura (r). lo crea.Permite hacer una copia idéntica de un disquete a otro. MOVE . lo crea. SUBST . Si ya existía.* (atributo de sólo lectura. disquetes y unidades de almacenamiento masivo). Por ejemplo.Muestra o cambia la etiqueta de la unidad de disco duro.Muestra la memoria RAM. Parámetros: signos (más o menos) y letras r. de escritura (w).Los atributos de los directorios.Verifica si hay errores en el disco duro.

pero en este caso deben ir entre comillas: NombreRobot = "Arint" (Aprovechando la ocasión vamos a bautizar a nuestro Robot.commtechcomputers. es conveniente iniciarlas (darles valores conocidos por nosotros). seguido de dos puntos (:) y a continuación el tipo de variable que utilizamos. podremos definir una variable llamada Escalón en la que guardaremos el número de escalón en el que se encuentra nuestro Robot en un momento determinado.. cadena de texto. seguido de un signo igual y a continuación los caracteres que deseemos almacenar. Imaginemos que tenemos una caja a la que le ponemos un nombre para poder hacernos referencia a ella. matriz. para utilizarla y sumarle un uno se debería programar: num = num + 1. según el tipo de lenguaje que estemos utilizando para realizar nuestro código. arreglo. puede variar su valor durante la ejecución del programa. Estos son tipos de datos.  Curso Avanzado de PICS Programación de PICS en lenguaje c Seminario de programación de PICS www. en un principio. a continuación. uno no lleva comillas y el otro sí. sólo se diferencian en que el valor que deseamos guardar. Una variable es un "espacio" al cual se le puede asignar diferentes valores según nos convenga. Por ejemplo. como su nombre lo indica. tendríamos un número con el cual podríamos operar. lo único que tendremos que hacer es escribir el nombre de la variable en la que deseemos almacenar el valor. tipo definido por el usuario. el número que deseemos almacenar: Escalón = 10 Para una variable donde almacenaremos caracteres. decimal de coma flotante. a partir de este momento le llamaremos Arint) Observe que una variable numérica y una de texto. 36 .Para definir (crear) una variable siempre necesitaremos un nombre con el que nos referiremos a ella durante nuestro "programa". Piense que. entero. pero en realidad no es así.Antes de empezar a utilizar las variables que hemos definido. Inicializar una variable. tendrían el mismo valor. por lo general. con los que no podríamos operar. Los dos. En el primer ejemplo. seguido de un signo igual y. Dependiendo del lenguaje de programación usado.genérica. también puede cambiar el tipo de dato que almacena. más adelante veremos sus características. Una variable puede ser del tipo boleano. en la que podemos guardar dentro lo que mejor nos convenga. ¿Cómo definir una variable?. Mire detenidamente estos dos ejemplos: Valor = 10 y Valor = "10". en nuestro caso: texto o número.netEnlaces patrocinados Para una variable donde almacenaremos un número lo único que tendremos que hacer es escribir el nombre de la variable en la que deseemos almacenar el valor. Una variable. mientras que en el segundo tendríamos dos caracteres. etc. Para poner un valor a nuestras variables lo haremos de la siguiente manera. caracter.. Para definir esta variable deberemos escribir en nuestro código: Escalón: texto. En nuestro curso utilizaremos dos tipos de variables: numéricas y de texto. pueden existir muchos tipos de variables diferentes.

Variables numéricas Características de las variables numéricas Con una variable de tipo numérica podremos hacer cualquier tipo de operación. no habrá modo de saber qué significa el valor que contiene.1. o cualquier cosa que aún no se haya inventado. una variable es una entidad cuyo valor puede cambiar a lo largo de la ejecución de un programa. No hay nada diferente en una posición de memoria que contenga una instrucción de programa o una letra de un texto. Esa memoria puede ser un conjunto de semiconductores dentro de un circuito integrado. que la información en el interior de la memoria del ordenador se almacena siempre de forma binaria. Si quisiéramos que esta prioridad se viese alterada 37 . en primer lugar. En este pequeño curso sólo utilizaremos las 4 operaciones básicas (suma. por una parte. 2. si observamos una posición de memoria cualquiera. y por otra. que permiten ajustar ligeramente ciertas propiedades de cada tipo. una instrucción de programa. long. float y double. En un nivel más lógico. es decir. las sumas y las restas. una variable se almacena en la memoria del ordenador. qué operaciones nos deja hacer nuestro lenguaje de programación. También veremos en este capítulo los tipos enumerados. Teclado para programación en binario. una variable ocupa un espacio de memoria reservado en el ordenador para contener sus valores durante la ejecución de un programa. al menos a bajo nivel. Afortunadamente. y ese tipo determina. char. en cierto modo. arbitraria. el modo en que se manipulará esa memoria por el ordenador. Es mediante el tipo como le decimos al compilador el modo en que debe interpretarse y manipularse cierta información binaria almacenada en la memoria de un ordenador. También existen ciertos modificadores.Conceptualmente. las divisiones y las multiplicaciones y. ciertos campos magnéticos sobre una superficie de un disco. no deberemos preocuparnos por esos detalles. De una cadena de operaciones siempre se realizará. siempre teniendo presente. desde el punto de vista de un programador. resta. un número. No olvides. ciertas polarizaciones en una memoria de ferrita. El modo en que se interpreta la información almacenada en la memoria de un ordenador es. Cada variable debe pertenecer a un tipo determinado. etc. multiplicación y división). Debemos tener en cuenta que estas operaciones tienen una prioridad. enum. los modificadores pueden ser: short. De momento sólo veremos los tipos fundamentales. si es que ya lo sabías. en segundo lugar. int. signed y unsigned. En el nivel más bajo. el tamaño del espacio de memoria ocupado por la variable.2. que son: void. y pueden combinarse algunos de ellos. el mismo valor puede codificar una letra. en C++ se incluye también el tipo bool.

divisiones. etc. Entonces. Si quisiéramos que esta prioridad se viese alterada podríamos utilizar los paréntesis.. 38 . qué operaciones nos deja hacer nuestro lenguaje de programación. Mientras que en el segundo. por ejemplo. las sumas y las restas. En el primer ejemplo hemos efectuado primero la multiplicación y después la suma. Debemos pensar que este Valor puede ser sustituido por una operación y almacenar el resultado en la variable. Debemos tener en cuenta que estas operaciones tienen una prioridad. Imagine que hemos definido una variable llamada Contador. De una cadena de operaciones siempre se realizará. las divisiones y las multiplicaciones y. La estructura de un contador sería la siguiente.podríamos utilizar los paréntesis. Las operaciones que aparezcan dentro de ellos se realizarán con una prioridad superior a las que están fuera. Mientras que en el segundo. Este "almacenamiento" de información la podemos hacer en cualquier lugar del código. En este pequeño curso sólo utilizaremos las 4 operaciones básicas (suma. las veces que pasamos por un lugar determinado.scibots. Observe estos dos ejemplos: 1+2*3 = 7 Mientras que (1+2)*3 = 9. primero se efectúa la suma (por estar entre paréntesis) y después la multiplicación. en primer lugar. Podemos utilizar una variable como un contador.  Robótica Infantil Diseñando sistemas y estructuras . Veamos un ejemplo: Variable = 5 + 3 de esta forma cuando nosotros consultemos el contenido de Variable podremos observar que es un 8. primero se efectúa la suma (por estar entre paréntesis) y después la multiplicación. sin tener en cuenta si estas son multiplicaciones. en segundo lugar. Con una variable de tipo numérica podremos hacer cualquier tipo de operación.com. Variable = Valor.Asiste a una clase muestra GRATIS www. divisiones. Las operaciones que aparezcan dentro de ellos se realizarán con una prioridad superior a las que están fuera. sumas o restas. Esto es común a la gran parte de lenguajes de programación.mxEnlaces patrocinados Almacenar resultados en variables. siempre teniendo presente. Observe estos dos ejemplos: 1+2*3 = 7 Mientras que (1+2)*3 = 9. En el primer ejemplo hemos efectuado primero la multiplicación y después la suma. sin tener en cuenta si estas son multiplicaciones. Un contador no es más que una variable que se va incrementado de forma que podemos contar. el ejemplo quedaría de la siguiente forma: Contador = Contador + 1.Nosotros podemos almacenar valores en nuestras variables de la misma manera que las inicializamos. resta. multiplicación y división). las veces que se realiza una función. sumas o restas.

Para poder reconocer una variable en la memoria de la computadora. Ejemplo: área = pi * radio ^ 2 Las variables son: el radio. 39 .2. Variable Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecución de un proceso. Si esta línea la pusiéramos dentro de un bucle. positivos o negativos. signos (+ y -) y el punto decimal. el área y la constate es pi Clasificación de las Variables Por su contenido  Variables Numéricas: Son aquellas en las cuales se almacenan valores numéricos. de esta forma se coge el valor que tiene Contador y se le suma 1. su contenido puede cambiar durante la ejecución del programa. 2. El resultado de la operación se guarda en la variable que tenemos a la derecha del igual. podríamos ver como la Variable va aumentando de 1 en 1 hasta que se cumpliera la condición del bucle. Variables alfanuméricas Variables alfanuméricas Almacenan textos compuestos de números y/o cifras Cadenas Almacenan variables alfanuméricas $cadena="Hola amigo". es decir almacenan números del 0 al 9. que este caso es la misma variable Contador. A la derecha del igual se produce la operación.Explicaremos cómo funcionaría este contador. que en este caso es Contador + 1.2. es necesario darle un nombre con el cual podamos identificarla dentro de un algoritmo.

15 pi = 3. números y caracteres especiales). una constante es un valor que no puede ser alterado durante la ejecución de un programa. Constantes Constante (informática) En programación. Variables Alfanuméricas: Esta formada por caracteres alfanuméricos (letras.Ejemplo: iva = 0. Por ejemplo: 40 . 2.  Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente. Una constante corresponde a una longitud fija de un área reservada en la memoria principal del ordenador.1416 costo = 2500   Variables Lógicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos representan el resultado de una comparación entre otros datos. Ejemplo: letra = ’a’ apellido = ’lopez’ direccion = ’Av.3. donde el programa almacena valores fijos. Libertad #190’ Por su uso  Variables de Trabajo: Variables que reciben el resultado de una operación matemática completa y que se usan normalmente dentro de un programa. Con los incrementos generalmente de uno en uno. Ejemplo: Suma = a + b /c  Contadores: Se utilizan para llevar el control del número de ocasiones en que se realiza una operación o se cumple una condición.

Variable dependiente: como su nombre lo dice depende de el valor de otra.1416 Por conveniencia.3.1415926 Es decir.1.4 #define Y 9. por ejemplo: #define X 2. La directiva #define también se puede utilizar para definir expresiones más elaboradas con operadores (suma. etc). El valor de pi = 3. PI). return 0. El identificador de una constante así definida será una cadena de caracteres que deberá cumplir los mismos requisitos que el de una variable (sin espacios en blanco. multiplicación etc) y otras constantes que hayan sido definidas previamente. PI es una constante a la que le hemos asignado el valor 3.1415926 int main() { printf("Pi vale %f".h> #define PI 3. el nombre de las constantes suele escribirse en mayúsculas en la mayoría de lenguajes. Constantes numéricas Constantes Numéricas Constantes numéricas o absolutas: Son las que conservan los mismos valores en todos los problemas. no empezar por un dígito numérico. A= π r2. como por ejemplo: A: bh/2.1415926 mediante la directiva #define. en donde 2 y π son constantes que nunca cambian. Ejemplo: #include <stdio. por ejemplo y = x+2 41 . resta. esto significa que esa constante tendrá el mismo valor a lo largo de todo el programa.2 #define Z X + Y 2. Ejemplo de una constante en C(#define) En C las constantes se declaran con la directiva #define. } Lo cual mostrará por pantalla: Pi vale 3.

se usa comilla simple. Es importante comentar que si el valor alfanumérico es un solo carácter. Constantes alfanuméricas Constantes Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa.).en esta expresión "y" se considera la variable dependiente ya q dependiendo el valor de "x" es el resultado de "y"."SI".1416 CONSTANTES ALFANUMÉRICAS. a cada elemento del conjunto A le corresponde un solo valor de B tal que.768". el término operador puede usarse con varios significados. ahora con el mismo ejemplo "x" seria la variable independiente ya q no requiere de una variable adicional para obtener su valor Domino: son todos los valores que puede tomar la variable independiente o conjunto de valores que se le pueden asignar a este variable y no depende de ningún otro conjunto. Función Inyectiva : si a cada valor del conjunto (dominio) le corresponde un valor distinto en el conjunto (imagen) de . 2. 42 . vector. Es decir. por ejemplo: 'a'. función.'u' 2.4. resta y extracción de raíces."uno mas uno". Una constante alfanumérica es un conjunto de caracteres delimitados por comillas dobles como por ejemplo: "-32. etc.2. Una función de una variable es trascendente si es independiente en un sentido algebraico de dicha variable. en el conjunto A no puede haber dos o más elementos que tengan la misma imagen."NO" con una longitud máxima de 255 caracteres en C.3."ABCFXY". Función Biyectiva: Si todo elemento del contra dominio es imagen de uno y solamente un elemento del dominio. Operadores Operador En matemáticas. Función Trascendente: es una función que trasciende al álgebra en el sentido que no puede ser expresada en términos de una secuencia infinita de operaciones algebraicas de suma. Ejemplo: pi = 3. un operador es un símbolo matemático que indica que debe ser llevada a cabo una operación especificada1 sobre un cierto número de operandos (número. Algunas veces.

actúa transformando unas funciones en otras. 43 . como ejemplos tenemos:  A = B establece que A es igual que B. generalmente. son los operadores que actúan sobre dos objetos (escritos. Se llama operador lineal acotado al operador lineal que está acotado en esta esfera. el segundo solamente compara los valores de A y B sin modificarlos y devuelve un valor lógico o de verdad verdadero si ambos valores son iguales o falso si dichos valores no son iguales. Si se trata de una aplicación lineal. Este suele ser el caso de un espacio vectorial cuyos elementos son funciones. Tipos generales de operadores Operadores de condición Relacionan un término A con otro B estableciendo su igualdad. El ejemplo más típico de operador lineal no acotado es la derivada -considerada como una aplicación entre dos espacios de funciones reales-. No todos los operadores lineales interesantes son acotados: hay muchos ejemplos de operadores importantes en mecánica cuántica que no son acotados. El primero toma el valor de B y se lo asigna a A. a ambos lados del operador) produciendo un único resultado. existe una norma y podemos definir una esfera de radio unidad. En este caso hay que distinguir entre operador = de asignación y el operador = de comparación. actúa sobre la Si un operador está definido entre dos espacios vectoriales de funciones. función que se escribe a su derecha. Véanse los casos siguientes.Operadores en un espacio vectorial Un uso frecuente del término operador es aplicación entre dos espacios vectoriales. Operadores bilineales o bivariantes (Para definiciones más estrictas sobre linealidad y bilinealidad. podemos llamarle operador lineal. El operador derivada. Una extensión de la derivada real a los operadores es la derivada de Frechet que es un operador lineal acotado. Los operadores lineales acotados entre dos espacios de Banach forman a su vez un espacio de Banach cuyo estudio es bastante interesante. Se usa con más frecuencia cuando alguno de ellos tiene dimensión infinita. jerarquía o cualquier otra relación posible. produciendo una nueva función de : . En este espacio. véanse los temas relacionados) Su nombre depende del autor. El estudio de los operadores lineales es de particular interés en un espacio de Banach.

como se puede apreciar en los ejemplos de abajo. Los operadores más complejos se construyen a partir de los anteriores (podría incluirse alguno más) y ya entran dentro de lo que sería una función lógica.. Ahora el resultado de esta operación será F si los valores A y B son iguales y V si son distintos.     A > B Devuelve V si A es estrictamente mayor que B y F en caso contrario A < B Devuelve V si A es estrictamente menor que B y F en caso contrario A ≥ B Devuelve V si A es mayor o igual que B y F en caso contrario A ≤ B Devuelve V si A es menor o igual que B y F en caso contrario  Otros operadores relacionales menos usuales son los llamados operadores geométricos: paralelismo (A || B). o Operador O-lógico: 'A ∨ B' significa 'O bien A. etc.). A ≠ B o desigualdad. resultando FALSO (0) si esto no es así y VERDADERO (1) en caso contrario. resultando FALSO (0) si no se satisface y VERDADERO (1) en caso contrario. o bien los dos'. Los operadores lógicos nos proporcionan un resultado a partir de que se cumpla o no una cierta condición. en los casos más sencillos. perpendicularidad y otros Operadores lógicos Artículo principal: Operador lógico Muy utilizados en Informática. A > B. o bien B.  Los más sencillos son (nótese su relación con los operadores relacionales): o Operador NO-lógico: '¬A' significa todo lo que no es A' o Operador Y-lógico: 'A ∧ B' significa 'A y B a la vez'. Lógica proposicional y Álgebra booleana. resultando FALSO (0) si no se dan ni A ni B y VERDADERO (1) si se da alguno de los dos o los dos a la vez. Un ejemplo muy utilizado sería 'SI(condición. o Operador <: 'A < B' significa 'A debe ser menor que B'.) u otro tipo de valores (caracteres. o Operador =: 'A = B' significa 'A debe ser igual a B'. Todo tipo de dato susceptible de ser ordenado por cualquier criterio puede ser comparado con estos operadores. La combinación de dos o más operadores lógicos conforma una función lógica.. Este caso es justamente el opuesto al anterior. .B)' ('IF condición THEN A ELSE B' en la mayoría de los  44 .  Operadores de orden: establecen o verifican clasificaciones entre números (A < B. pueden ser parametrizados con los valores numéricos 0 y 1. entre otras disciplinas. Esto genera una serie de valores que. cadenas. como los anteriores devuelven un valor de verdad en función del resultado que tenga la comparación en cada caso.A. aunque aquí no podemos hablar de asignación. resultando FALSO (0) si no se cumple y VERDADERO (1) si sí lo hace. pero si de comparación.

para nosotros es cualquier conjunto de operadores y operandos. En efecto.        Adición Resta Multiplicación División Potenciación Radicación Logaritmación Otros operadores                   Operador autoadjunto Operador diferencial Operador hermítico Operador cuántico Operador lineal Operador norma Operador nabla Gradiente Divergencia Rotacional Laplaciano Transformada integral Los operadores son elementos que disparan ciertos cálculos cuando son aplicados a variables o a otros objetos en una expresión. desde un punto de vista operacional. 45 . como operadores bivariantes o como operadores a derecha. "Conjunto de términos que representan una cantidad". así como los operandos a los que afecta. Operador: cada uno de los símbolos que indican las operaciones a realizar sobre los operandos. '2 × 3' puede ser el operador bivariante de la multiplicación actuando sobre los números 2 y 3. que dan como resultado un valor. Expresión: según el diccionario. o el operador '2 ×' que actúa sobre 3. variables o expresiones que intervienen en una expresión. Operaciones aritméticas Las operaciones aritméticas pueden ser entendidas.lenguajes de programación) cuyo resultado sería A si se satisface la 'condición' o B en caso contrario. Tal vez sea este el lugar adecuado para introducir algunas definiciones: Variable: es una entidad que almacena nuestro programa cuyo valor puede cambiar a lo largo de su ejecución. Operando: cada una de las constantes.

los segundos a dos y los ternarios a siete.). y -> ^ Operador de selección (. int y. El operador de indirección (*) considera a su operando como una dirección y devuelve su contenido.<nombre_de_variable> Operador de selección de objetos o campos para estructuras referenciadas con punteros. Operadores . clasificados según el tipo de objetos sobre los que actúan. punto *p2.y = 20. Sintaxis: &<expresión simple> Por ejemplo: int *punt. los primeros afectan a un solo operando. punto p1. Sintaxis: <variable_estructura>.                                         Existe una división en los operadores atendiendo al número de operandos que afectan. punt = &x. Permite acceder a objetos o campos dentro de una estructura. p2->y = 40. int x. a tres. Sintaxis: *<puntero> Ejemplo: int *punt. p2->x = 30. El operador de referencia (&) nos devuelve la dirección de memoria del operando. int x = 10. Operador de preprocesador ^ 46 . p1. Hay varios tipos de operadores. binarios o ternarios. p1. Según esta clasificación pueden ser unitarios.x = 10. ¡perdón!. x = *punt. (->) Sintaxis: <puntero_a_estructura>-><nombre_de_variable> Ejemplo: struct punto \{ int x. }.

y en último caso veremos sistemas para eludir la precedencia. Además no todos los operadores tienen la misma prioridad. Considera esta tabla como una referencia. que forma parte del compilador. sin embargo dos de las más usadas.& (dirección de) * (puntero a) Derecha a izquierda sizeof new delete . en caso de duda siempre se puede consultar. existe un orden muy concreto en los operadores en la evaluación de expresiones. Operadores III: Precedencia ^ Normalmente. incluso puede que cambie ligeramente según el compilador. Veremos ahora las prioridades de todos los operadores incluidos los que aún conocemos. Esta propiedad de los operadores se conoce como precedencia o prioridad.++ -. Asociatividad Izquierda a derecha Operadores unitarios: ! ~ + . no es necesario aprenderla de memoria. modificando el programa fuente antes de que sea compilado. Veremos.(operadores binarios) << >> < <= > >= == != & (bitwise AND) Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha 47 . En realidad se limita a seguir las órdenes expresadas en forma de directivas del preprocesador. de hecho.   El operador "#" sirve para dar órdenes o directivas al compilador. las expresiones con operadores se evalúan de izquierda a derecha. aunque no todos. y que procesa el fichero fuente antes de que sea compilado. ciertos operadores que se evalúan y se asocian de derecha a izquierda. algunos se evalúan antes que otros.* ->* * (multiplicación) / % + . La mayor parte de las directivas del preprocesador se verán en capítulos posteriores. Operadores () [] -> :: . El preprocesador es un programa auxiliar.

la prioridad se decide por el orden de asociatividad. f = &m[5]. primero se aplica "e = 10". O sea. cout << *f << endl. Primero se aplica el *. El operador * tiene mayor precedencia que + e =. después se aplica el operador +. Dentro de la misma fila. 48 . c. b.^ (bitwise XOR) | (bitwise OR) && || ?: = *= /= %= += -= &= ^= |= <<= >>= . int m[10] = \. El resultado final será asignar a "a" el valor 200. por ejemplo: int a. f = &m[5]. b = c = d = e = 10. e. *f. *f--. los operadores unitarios tienen todos la misma precedencia. Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Derecha a izquierda Derecha a izquierda Izquierda a derecha La tabla muestra las precedencias de los operadores en orden decreciente. a todas las variables se les asigna el mismo valor: 10. después "d = e". y por último el =. a = b * c + d * e. El operador de asignación "=" se asocia de derecha a izquierda. La asociatividad nos dice en que orden se aplican los operadores en expresiones complejas. d. y después el incremento al contenido de f. cout << *f << endl. etc. ++*f. La salida de este ejemplo será. es decir. 61. los de mayor precedencia en la primera fila. por lo tanto se aplica antes. y se asocian de derecha a izquierda.

Primero se evalúa la suma. Primero se aplica el decremento al puntero. que nos permitirán enfrentarnos a todas las situaciones posibles en programación. debemos usar paréntesis. a = b * (c + d) * e. Existen sentencias de varios tipos. 50. y después el *. Todo lo que hay entre los paréntesis se evalúa antes que cualquier otra cosa.. El resultado será asignar a la variable "a" el valor 2000. 2.. El elemento que nos falta para empezar a escribir programas que funcionen son las sentencias. Sentencias de entrada/salida (E/S) Sentencias Espero que hayas tenido la paciencia suficiente para llegar hasta aquí. Estos tipos son:        Bloques Expresiones o Llamada a función o Asignación o Nula Bucles o while o do.5..while o for Etiquetas o Etiquetas de identificación o case o default Saltos o break o continue o goto o return Selección o if. y después las multiplicaciones.. y que no te hayas asustado demasiado. ya que los paréntesis están en el grupo de mayor precedencia. si queremos evaluar antes una suma que un producto.else o switch Comentarios 49 . Ahora empezaremos a entrar en la parte interesante y estaremos en condiciones de añadir algún ejemplo. Ahora el operador de mayor peso es ().La salida de este ejemplo será. Este es el sistema para eludir las precedencias por defecto.

. En el lenguaje c++ tenemos varias alternativas para ingresar y/o mostrar datos.. La sintaxis sería la siguiente: cin>>variable1>>. y apunta al objeto donde tiene que enviar la información.h> Esta biblioteca es una implementación orientada a objetos y está basada en el concepto de flujos. Un ejemplo de código utilizando ambos objetos podría ser el siguiente: #include . se puede pensar en caracteres que fluyen o se trasladan desde el teclado a las estructuras de datos del programa. 3.h.. Estos objetos se utilizan mediante los operadores << y >>. Como se utilizan muy frecuentemente se consideran como los dispositivos de E/S por default y no necesitan ser nombrados en las instrucciones de E/S.. dependiendo de la librería que vamos a utilizar para desarrollar el programa. que toma caracteres de la entrada estándar (teclado).<<variablen. Por su parte >> se denomina operador de extracción.. No olvidemos que las cadenas de texto son variables y se ponen entre " " (comillas dobles). cuando se introducen caracteres desde el teclado. 2. número".. pone caracteres en la salida estándar (pantalla). cerr y clog ponen mensajes de error en la salida estándar. < IOSTREAM.h y sodio. entre estas están: iostream.. lee información del flujo cin (a la izquierda del operador) y las almacena en las variables indicadas a la derecha).h por lo que siempre que queramos utilizarlas deberemos introducir la línea de código #include <iostream. ó bien se están escribiendo en el monitor de video. Que mostraría por pantalla la frase "Introduce un número" y posteriormente almacenaría el valor introducido por teclado en la variable i.h> () i.. main { int cout<<"Introduce un <iostream.H> Las operaciones de entrada y salida no forman parte del conjunto de sentencias de C++.. sino que pertenecen al conjunto de funciones y clases de la biblioteca estándar de C++. 50 . cout. . Así.>>variablen.. Ellas se incluyen en los archivos de cabecera iostream. por ejemplo. A nivel abstracto un flujo es un medio de describir la secuencia de datos de una fuente a un destino o sumidero. cin. Los objetos de flujo que vienen predefinidos serán: 1. cin>>i. } . Por lo tanto la sintaxis de cout será: cout<<variable1<<variable2<<. El operador << se denomina operador de inserción.Cuando nos referimos a entrada/salida estándar (E/S estándar) queremos decir que los datos o bien se están leyendo del teclado.

Si volvemos a usar otro printf. Printf: Imprimir en pantalla Para utilizar la función printf en nuestros programas debemos incluir la directiva: #include <stdio.<STDIO. printf( "Segunda" ). printf( "Cadena" ). por ejemplo: #include <stdio. } y tendremos: Cadena Segunda 51 . lo siguiente que pongamos irá a la fila siguiente.H> Operaciones de salida.h> void main() { printf( "Cadena\n" ). Lo que hace es saltar el cursor de escritura a la línea siguiente: #include <stdio. Como resultado muestra en pantalla: Cadena Lo que pongamos entre las comillas es lo que vamos a sacar por pantalla. Es el indicador de retorno de carro.h> void main() { printf( "Cadena" ). Para escribir en la pantalla se usa un cursor que no vemos. } Obtendremos: CadenaSegunda Este ejemplo nos muestra cómo funciona printf. Cuando el texto llega al final de la fila. Cuando escribimos algo el cursor va al final del texto.h> Si sólo queremos imprimir una cadena basta con escribir la siguiente línea de código. printf( "Segunda" ). Si lo que queremos es sacar cada una en una línea deberemos usar "\n".

También podemos poner más de una cadena dentro del printf: printf( "Primera cadena" "Segunda cadena" ); Lo que no podemos hacer es meter cosas entre las cadenas: printf( "Primera cadena" texto en medio "Segunda cadena" ); esto no es válido. Cuando el compilador intenta interpretar esta sentencia se encuentra "Primera cadena" y luego texto en medio, no sabe qué hacer con ello y da un error. Pero ¿qué pasa si queremos imprimir el símbolo " en pantalla? Por ejemplo imaginemos que queremos escribir: Esto es "extraño" Si para ello hacemos: printf( "Esto es "extraño"" ); Obtendremos unos cuantos errores. El problema es que el símbolo " se usa para indicar al compilador el comienzo o el final de una cadena. Así que en realidad le estaríamos dando la cadena "Esto es", luego extraño y luego otra cadena vacía "". Pues resulta que printf no admite esto y de nuevo tenemos errores. La solución es usar \". Veamos: printf( "Esto es \"extraño\"" ); Esta vez toda irá como la seda. Como vemos la contrabarra '\' sirve para indicarle al compilador que escriba caracteres que de otra forma no podríamos. Esta contrabarra se usa en C para indicar al compilador que queremos meter símbolos especiales. Pero ¿Y si lo que queremos es usar '\' como un carácter normal y poner por ejemplo Hola\Adiós? Pues muy fácil, volvemos a usar '\': printf( "Hola\\Adiós" ); y esta doble '\' indica a C que lo que queremos es mostrar una '\'. Operaciones de entrada lgo muy usual en un programa es esperar que el usuario introduzca datos por el teclado. Para ello contamos con varias posibilidades: Usar las funciones de la biblioteca estándar, crear nuestras propias interrupciones de teclado (MS-Dos) o usar funciones de alguna biblioteca diferente (como por ejemplo Allegro). En este trabajo topare solo la primera opción, usando las funciones de la biblioteca estándar. Pero veamos por encima las otras posibilidades. Las funciones estándar están bien para un programa sencillito. Pero cuando queremos hacer juegos por ejemplo, no suelen ser suficiente. Demasiado lentas o no nos dan todas las 52

posibilidades que buscamos, como comprobar si hay varias teclas pulsadas. Para solucionar esto tenemos dos posibilidades: La más complicada es crear nuestras propias interrupciones de teclado. ¿Qué es una interrupción de teclado? Es un pequeño programa en memoria que se ejecuta continuamente y comprueba el estado del teclado. Podemos crear uno nuestro y hacer que el ordenador use el que hemos creado en vez del suyo. Otra posibilidad más sencilla es usar una biblioteca que tenga funciones para controlar el teclado. Por ejemplo si usamos la biblioteca Allegro, ella misma hace todo el trabajo y nosotros no tenemos más que recoger sus frutos con un par de sencillas instrucciones. Esto soluciona mucho el trabajo y nos libra de tener que aprender cómo funcionan los aspectos más oscuros del control del teclado. Vamos ahora con las funciones de la biblioteca estándar antes mencionada. Scanf El uso de scanf es muy similar al de printf con una diferencia, nos da la posibilidad de que el usuario introduzca datos en vez de mostrarlos. No nos permite mostrar texto en la pantalla, por eso si queremos mostrar un mensaje usamos un printf delante. Un ejemplo: #include <stdio.h> void main() { int num; printf( "Introduce un número " ); scanf( "%i", &num ); printf( "Has tecleado el número %i\n", num ); } Primero vamos a ver unas nota de estética, para hacer los programas un poco más elegantes. Parece una tontería, pero los pequeños detalles hacen que un programa gane mucho. El scanf no mueve el cursor de su posición actual, así que en nuestro ejemplo queda: Introduce un número _ /* La barra horizontal indica dónde esta el cursor */ Esto es porque en el printf no hemos puesto al final el símbolo de salto de línea '\n'. Además hemos dejado un espacio al final de Introduce un número: para que así cuando tecleemos el número no salga pegado al mensaje. Si no hubiésemos dejado el espacio quedaría así al introducir el número 120 (es un ejemplo): Introduce un número120 Veamos cómo funciona el scanf. Lo primero nos fijamos que hay una cadena entre comillas. Esta es similar a la de printf, nos sirve para indicarle al compilador qué tipo de datos estamos pidiendo. Como en este caso es un integer usamos %i. Después de la coma tenemos la variable donde almacenamos el dato, en este caso 'num'. Fíjate que en el scanf la variable 'num' lleva delante el símbolo &, este es muy importante, sirve para indicar al compilador cual es la dirección (o posición en la memoria) de la variable.

53

Podemos preguntar por más de una variable a la vez en un sólo scanf, hay que poner un %i por cada variable: #include <stdio.h> void main() { int a, b, c; printf( "Introduce tres números: " ); scanf( "%i %i %i", &a, &b, &c ); printf( "Has tecleado los números %i %i %i\n", a, b, c ); } De esta forma cuando el usuario ejecuta el programa debe introducir los tres datos separados por un espacio. También podemos pedir en un mismo scanf variables de distinto tipo: #include <stdio.h> void main() { int a; float b; printf( "Introduce dos números: " ); scanf( "%i %f", &a, &b ); printf( "Has tecleado los números %i %f\n", a, b ); } A cada modificador (%i, %f) le debe corresponder una variable de su mismo tipo. Es decir, al poner un %i el compilador espera que su variable correspondiente sea de tipo int. Si ponemos %f espera una variable tipo float. Getch y getche Si lo que queremos es que el usuario introduzca un carácter por el teclado usamos las funciones getch y getche. Estas esperan a que el usuario introduzca un carácter por el teclado. La diferencia entre getche y getch es que la primera saca por pantalla la tecla que hemos pulsado y la segunda no (la e del final se refiere a echo=eco). Ejemplos: #include <stdio.h> void main() { char letra; printf( "Introduce una letra: " ); 54

letra = getche(). ANEXOS Usos de printf y scanf Escribe Mensaje en la pantalla printf("Mensaje"). Escribe Mensaje y el valor de la Variable en pantalla printf("Mensaje %d". printf("\n has introducido la letra :%c". letra ).Variable:2:3). en algunos compiladores el mensaje no se muestra en pantalla hasta que se pulsa una tecla (probar). Y la función fflush( stdout ) lo que hace es enviar a la pantalla lo que hay en ese bufer. sin usar '\n'. letra ). } Resultado: Introduce una letra: a Has introducido la letra: a ¿Qué es el fflush( stdout )?. decimales cprintf("Mensaje"). Escribe Mensaje y el valor de la Variable con 2 enteros y 3 printf("Mensaje %d". Si se hace esto. Cuando este bufer se llena o cuando metemos un carácter '\n' es cuando se envía el texto a la pantalla. } Resultado: Introduce una letra: Has introducido la letra: a Como vemos la única diferencia es que en el primer ejemplo se muestra en pantalla lo que escribimos y en el segundo no.Variable). printf( "Introduce una letra: " ). printf( "\nHas introducido la letra: %c". no escribimos directamente en la pantalla. Pues bien. fflush( stdout ). Escribe Mensaje en color especificado 55 . En este ejemplo yo quería que apareciera el mensaje Introduce una letra: y el cursor se quedara justo después. es decir.h> void main() { char letra. sino en una memoria intermedia (lo que llaman un bufer).fflush( stdout ). letra = getch(). cuando usamos la función printf. Y ahora un ejemplo con getch: #include <stdio.

donde se declaraban los tipos de todas las variables a utilizar en el algoritmo. En el primer capítulo se mostró la forma en que se declaraban variables en nuestra notación algorítmica: variables v1 tipo1 v2 tipo2 . no así en el caso de FORTRAN. se describió el concepto de tipo de datos. Todo programa FORTRAN presenta la siguiente estructura: program nombre_programa sentencia 1 sentencia 2 . cada variable utilizada en un algoritmo pertenecerá obligatoriamente a uno de tales tipos. para indicar el tipo de una variable ésta debe ser “declarada”.&Variable1. en este capítulo se profundizará en el lenguaje explicando conceptos como la declaración de variables o los distintos formatos aceptados por las sentencias de entrada/salida.. Sabemos que tanto la notación algorítmica como FORTRAN disponen de una serie de tipos de datos. el lenguaje FORTRAN funciona de manera similar aunque con algunas diferencias que es necesario tener en cuenta.&Variable2).. Declaración de variables Estructura de un programa FORTRAN y declaración implícita de variables.. scanf("%d %f". end 56 . Asigna valor entero a Variable Asigna valor entero a Variable1 y valor real a Variable2 Declaración de variables. así como las sentencias de asignación y entrada/salida. Sentencias de entrada/salida Introducción En los capítulos anteriores se introdujo la notación algorítmica y unas nociones básicas del lenguaje de programación FORTRAN. Existía una sección especial del algoritmo.scanf("%d". variable y constante.&Variable). En el caso de la notación algorítmica se describió la estructura fundamental de un algoritmo. antes de que se proporcionase ninguna instrucción..

siguiendo siempre a program el nombre del programa que debe ser un identificador válido (ver capítulo anterior). cualquier variable cuyo identificador comenzase por I. Entre ambos extremos se colocan las sentencias que componen el programa en sí. las variables de tipos distintos a los dos mencionados debían declararse de manera explícita. sentencia 1 sentencia 2 .. no se pueden declarar variables o definir constantes en mitad de un algoritmo descrito en FORTRAN. la estructura de un programa FORTRAN es la siguiente: program nombre_programa declaración de variable o definición de constante 1 declaración de variable o definición de constante 2 . existían una serie de reglas mnemotécnicas que definían de manera implícita el tipo de cada variable.Como se puede apreciar. es decir. Una característica muy importante es que cualquier declaración de variable o definición de constante debe preceder obligatoriamente a todas las instrucciones del programa. pudiendo ser tales sentencias: Declaraciones de variables. FORTRAN 90 conserva muchas de las peculiaridades de las versiones anteriores del lenguaje por lo que también admite declaraciones implícitas. un programa FORTRAN comienza siempre por la palabra reservada program y termina en la palabra reservada end. Definiciones de constantes. De esta manera.. L. Obviamente.. end Otra peculiaridad que hay que tener en cuenta es debida a una característica (muy desafortunada. esta característica aunque puede parecer interesante puede resultar muy peligrosa puesto que un simple error en la escritura del nombre de una variable pasaría desapercibido con consecuencias difíciles de determinar.. J. por cierto) del lenguaje FORTRAN 77.. Instrucciones. K. dado que es una característica muy desaconsejable es necesario utilizar la sentencia IMPLICIT NONE en todos los programas de tal manera que se indique al compilador que todas las variables deben ser declaradas para su uso. De esta forma la estructura de un programa FORTRAN sería la siguiente: program nombre_programa implicit none declaración de variable o definición de constante 1 declaración de variable o definición de constante 2 . en este lenguaje no era estrictamente necesario declarar el tipo de las variables que iba a utilizar el programa.. 57 . Así. y las que empezasen por otro carácter de tipo real. M o N era de tipo integer.

sin embargo. c character*8 dni character*9 telefono. c logical entrada. A continuación se muestran declaraciones de variables para almacenar cadenas de caracteres de diferentes longitudes: character a. 58 . las siguientes sentencias son declaraciones de variables válidas: integer velocidad real a. cadenas de 9 caracteres. real.sentencia 1 sentencia 2 . la segunda cadenas de 8 caracteres y las dos últimas. b. end Declaración explícita de variables en FORTRAN La sintáxis de las sentencias de declaración de variables es la siguiente: tipo variable1 [. en muchas ocasiones es necesario manejar datos no puntuales sino multidimensionales como vectores y matrices. existe un tipo peculiar que es el character.. character o logical. variable2]* Donde tipo puede ser integer. Vectores y matrices (FORTRAN y notación algorítmica) Una característica de todas las declaraciones de variables anteriores es que sólo pueden almacenar un único dato del tipo declarado: un integer. una variable de tipo character tiene una longitud de un único carácter.. b. salida character cadena Declaración de cadenas de caracteres Como ya sabemos. nif Las tres primeras variables pueden almacenar un único carácter cada una. un real o una secuencia de caracteres. es decir. mientras que en la notación algorítmica existe un tipo caracter que permite almacenar secuencias de caracteres de longitud arbitraria. Como se puede ver en la expresión anterior se emplea una notación con corchetes y asteriscos. el significado de la misma es el siguiente: los corchetes indican que su contenido es opcional mientras que el asterisco indica que la expresión puede repetirse cero o más veces. por defecto. en FORTRAN hay que indicar de manera específica la longitud de cada cadena puesto que.

el formato de las primeras era: 59 . aunque la primera es más breve y se aproxima más a la forma en que se trabaja en la notación algorítmica. Para declarar en FORTRAN las variables anteriores se procedería de la forma siguiente: real coordenadas (3) logical tres_en_raya (3. para acceder a la segunda coordenada del vector anterior o a una de las “esquinas” de la matriz se procedería como sigue: coordenadas(2) tres_en_raya(3.3) Hay que señalar que aunque existen lenguajes de programación que permiten trabajar con vectores y matrices como tipos de datos elementales no es éste el caso de FORTRAN (y tampoco de nuestra notación algorítmica). los operadores existentes sólo pueden manejar tipos de datos simples por lo que siempre será necesario acceder a las componentes individuales de un vector o matriz.m]*) o bien tipo variable dimension variable (n [.3) de logico Por lo que respecta a la declaración de vectores y matrices en FORTRAN difiere un poco respecto a la notación algorítmica y puede hacerse de dos formas distintas: tipo variable (n [. La forma de realizar este acceso es la siguiente tanto en FORTRAN como en la notación algorítmica: variable (i [.3) Sentencias de entrada/salida Tanto en la notación algorítmica como en FORTRAN existen dos sentencias para llevar a cabo operaciones de entrada/salida. se trata de las sentencias leer y escribir y sus equivalentes read y print.m]*) de tipo Así. las siguientes serían sentencias válidas que permiten declarar un vector de tres coordenadas y una matriz cuadrada de lado 3: coordenadas tres_en_raya vector (3) de real vector (3.m]*) Ambas formas son igualmente válidas.j]*) Así. Como se recordará.Para trabajar con vectores y matrices en la notación algorítmica se dispone de la palabra reservada vector con la sintáxis siguiente: vector (n [.

I1. especialmente. nombre print *.leer variable1 [. 2 print '(I1.I2)'. etc. así. longitud escribir ‘hola’. expresiónN]* Los formatos permiten especificar las características de presentación de la información (tipo de dato. a continuación se muestran algunas sentencias de entrada/salida en notación algorítmica y su traducción a FORTRAN: leer temperatura read *. A continuación se presentará cada código de formato junto con las formas en que puede aparecer. aún cuando la utilización del formato libre es muy cómoda hay ocasiones en las que resulta necesario fijar un formato determinado para los datos. A continuación se describirán los códigos de formato más habituales y su forma de utilización. L para logical y A para character. es decir. Esta forma indica que se va a leer/escribir una expresión de tipo entero empleando n posiciones para la misma contando el signo si existe. al producir salidas. 2. variableN]* print formato. -1 60 . Códigos de formato Por cada tipo de dato FORTRAN existe al menos un código de formato. print '(I5)'.) En caso de que el programador no desee especificar información sobre formato. Tipo de dato Código de formato Forma Descripción Ejemplos Resultado de los ejemplos integer I In n es un entero sin signo distinto de cero. expresión1 [. nombre Sin embargo. aceleracion read *. proporcionando una descripción del mismo y algunos ejemplos. velocidad. expresiónN]* Sus equivalentes en FORTRAN son similares aunque tienen como característica no existente en la notación algorítmica el empleo de formatos: read formato. los más comunes son I para integer. F y E para real (sin exponente y con exponente). posiciones ocupadas. ‘hola’. variableN]* escribir expresión1 [. aceleracion escribir longitud print *. temperatura leer velocidad. número de decimales. Cada código de formato va acompañado de una serie de cifras que permiten controlar con mayor precisión la forma en que se representa la información. 3. emplear un formato libre debe emplear el carácter asterisco (*). variable1 [.

d.142 cFn.3)'.142 3. al menos.d n es un entero sin signo distinto de cero. Esta forma indica que se van a leer/escribir c expresiones de tipo real empleando n posiciones para cada una (contando el signo y el punto decimal) de las cuales se utilizarán d para posiciones decimales.5)'. print '(2F5. d es un entero sin signo distinto de cero.I5. Esta forma indica que se va a leer/escribir una expresión de tipo entero empleando n posiciones para la misma (contando el signo) de las cuales se utilizarán.I1.d n es un entero sin signo distinto de cero.d c es un entero sin signo distinto de cero. En lectura In.142. 3.142 3.3. real F Fn. d es un entero sin signo distinto de cero. print '(F5. 3. 3. 2. Esta forma indica que se van a leer/escribir c expresiones de tipo entero empleando n posiciones para cada una (contando el signo) de las cuales se utilizarán. d es un entero sin signo distinto de cero.142. d.3)'.d equivale a In print '(I5.F5. Esta forma indica que se va a leer/escribir una expresión de tipo real con exponente empleando n 61 . al menos.3)'.13.2 23-1 In. n es un entero sin signo distinto de cero.d n es un entero sin signo distinto de cero.1423.3. -1 00002 23 -001 cIn. n es un entero sin signo distinto de cero. d es un entero sin signo distinto de cero. d es un entero sin signo distinto de cero.142 En. Esta forma indica que se va a leer/escribir una expresión de tipo real empleando n posiciones para la misma (contando el signo y el punto decimal) e las cuales se utilizarán d para posiciones decimales.1. 2 print '(I1.d c es un entero sin signo distinto de cero.

1E3)'.3E+01 cEn. . n es un entero sin signo distinto de cero.3E+01. d es un entero sin signo distinto de cero. 'hola' hohola cAn c es un entero sin signo distinto de cero. 'hola'. Esta forma indica que se van a leer/escribir c expresiones de tipo real con exponente empleando n posiciones para cada una (contando el signo de mantisa y exponente y el punto decimal) de las cuales se utilizarán d para la mantisa. d es un entero sin signo distinto de cero.3E+01.3.142 .dEe c es un entero sin signo distinto de cero. .1. T T character A An n es un entero sin signo distinto de cero.142 .E8.true.142 . 3.3E+ logical L Ln n es un entero sin signo distinto de cero. print '(2E6. Esta forma indica que se va a leer/escribir una expresión de tipo cadena de caracteres empleando posiciones para la misma. print '(A2. print '(E6. 3. Esta forma indica que se van a leer/escribir c expresiones de tipo real con exponente empleandon posiciones para cada una (contando el signo de mantisa y exponente y el punto decimal) de las cuales se utilizarán d para la mantisa y e para el exponente..3E+001.142.3)'. Esta forma indica que se van a leer/escribir c expresiones de tipo cadena de caracteres empleando n posiciones para cada una. Esta forma indica que se va a leer/escribir una expresión de tipo lógico empleando n posiciones para la misma.A4)'. 3. print '(L1.142.1)'.posiciones para la misma (contando el signo de mantisa y exponente y el punto decimal) de las cuales se utilizarán d para la mantisa.142. n es un entero sin signo distinto de cero. e es un entero sin signo distinto de cero. 62 .3.d c es un entero sin signo distinto de cero. n es un entero sin signo distinto de cero.3. print '(2E7.314E+01 cEn.L5)'.true.

end 5. 'adios' holadi Para terminar con los códigos de formato tan sólo resta decir que en el caso de que una expresión no pudiera encuadrarse dentro del formato solicitado en una sentencia de salida el resultado que se obtendría sería una secuencia de n asteriscos donde n sería el ancho de formato especificado. En el caso de que se deseen declarar cadenas de caracteres la sintáxis es: character*longitud variable1 [. es decir.. Tanto en FORTRAN como en la notación algorítmica es posible declarar vectores y matrices. 4.. La estructura de un programa FORTRAN es la siguiente: program nombre_programa implicit none declaración de variable o definición de constante 1 declaración de variable o definición de constante 2 . 3. Para evitar esta característica indeseable es necesario utilizar la sentencia IMPLICIT NONE antes de ninguna declaración de variables.. En FORTRAN las variables y constantes deben declararse y definirse antes de ninguna instrucción ejecutable. variable2]* 7. m]*) de tipo mientras que en FORTRAN es: tipo variable (n [. 'hola'. m]*) 8. j]*) 63 . en el caso de la notación algorítmica la sintáxis es: variable vector (n [. sentencia 1 sentencia 2 . Resumen 1. variable2]* 6. Para acceder a un componente de un vector o matriz tanto en la notación algorítmica con en FORTRAN se emplea la sintáxis siguiente: variable (i [. FORTRAN posee declaración implícita de variables enteras y reales. La sintáxis de las sentencias de declaración en FORTRAN es la siguiente: tipo variable1 [.. en caso de que una variable no sea declarada de forma específica se le asigna un tipo entero o real en base a la primera letra del identificador. Tanto en la notación algorítmica como en FORTRAN existe una zona donde se pueden declarar variables y definir constantes.print '(2A3)'. 2.

expresión1 [. 64 . Existe la posibilidad de utilizar ambas sentencias con el denominado formato libre. variable1 [. expresiónN]* 10. FORTRAN tiene dos sentencias de entrada salida: read y print. para ello basta con indicar como formato un asterisco *. a diferencia de la notación algorítmica estas sentencias incluyen un parámetro para “formatear” la entrada o la salida de los datos siendo su sintáxis la siguiente: read formato. variableN]* print formato.9.

UNIDAD III SUBPROGRAMAS 65 .

3.1. Estructuras de control: IF-THEN-ELSE Estructuras de control En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa. Con las estructuras de control se puede:
    

De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-Then-Else y SelectCase) Ejecutar un grupo de sentencias mientras exista una condición (Do-While) Ejecutar un grupo de sentencias hasta que exista una condición (Do-Until) Ejecutar un grupo de sentencias un número determinado de veces (For-Next) Etc

Todas las estructuras de control tienen un único punto de entrada y un único punto de salida. Las estructuras de control se puede clasificar en : secuenciales, iterativas y de control avanzadas. Esto es una de las cosas que permite que la programación se rija por los principios de la programación estructurada. Los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la estructura. Otros lenguajes ofrecen estructuras diferentes, como por ejemplo los comandos guardados. Tipos de estructura de control Algunas estructuras de control en el lenguaje Java Antecendentes El término "estructuras de control", viene del campo de la ciencia computacional. Cuando se presentan implementaciones de Java para las estructuras de control, nos referimos a ellas con la terminología de la Especificación del lenguaje Java, que se refiera a ella como instrucciones. Ejecución secuencial Pero por lo general las instrucciones se ejecutan una después de la otra, en el orden en que están escritas, es decir, en secuencia. Este proceso se conoce como ejecución secuencial. Transferencia de control En Java, como en otros lenguajes de programación por excelencia como C y/o C++, el programador puede especificar que las siguientes instrucciones a ejecutarse tal vez no sea la siguiente en secuencia. Esto se conoce como transferencia de control. Hay que tener en cuenta que la 66

instrucción goto es una palabra reservada pero no se utiliza ni se recomienda. Un programa bien estructurado no necesita de esta instrucción. Si sabes programar no utilizaras goto. Estructura de control: selección if simple Se trata de una estructura de control que permite redirigir un curso de acción según la evaluación de una condición simple, sea falsa o verdadera. Por ejemplo: Escribir un programa en Java que compare dos números e indique si cuál es mayor, menor, mayor y/o igual, menor y/o igual, o si son iguales: String strComparacion = ""; ... if( numero1 == numero2 ) strComparacion += numero1 + " == " + numero2; if( numero1 > numero2 ) strComparacion += numero1 + " > " + numero2; if( numero1 < numero2 ) strComparacion += numero1 + " < " + numero2; if( numero1 >= numero2 ) strComparacion += numero1 + " >= " + numero2; if( numero1 <= numero2 ) strComparacion += numero1 + " <= " + numero2; System.out.println(strComparacion); ... If-Then-Else Si la condición es verdadera, se ejecuta el bloque de sentencias 1, de lo contrario, se ejecuta el bloque de sentencias 2. IF (Condición) THEN (Bloque de sentencias 1) ELSE (Bloque de sentencias 2) END IF Select-Case
 

Se evalúa la expresión, dando como resultado un número. Luego, se recorren los "Case" dentro de la estructura buscando que el número coincida con uno de los valores. 67

  

Es necesario que coincidan todos sus valores. Cuando se encuentra la primera coincidencia, se ejecuta el bloque de sentencias correspondiente y se sale de la estructura Select-Case. Si no se encuentra ninguna coincidencia con ningún valor, se ejecuta el bloque de sentencias de la sección "Case Else".

SELECT (Expresión) CASE Valor1 (Bloque de sentencias 1) CASE Valor2 (Bloque de sentencias 2) CASE Valor n (Bloque de sentencias n) CASE ELSE (Bloque de sentencias "Else") END SELECT Do-While Mientras la condición sea verdadera, se ejecutarán las sentencias del bloque. DO WHILE (Condición) (Bloque de sentencias) LOOP que también puede expresarse: WHILE (Condición) (Bloque de sentencias) WEND Do-Until Se ejecuta el bloque de sentencias, hasta que la condición sea verdadera DO 68

FOR (Variable) = (Expresión1) TO (Expresión2) STEP (Salto) (Bloque de sentencias) NEXT Estructuras anidadas Las estructuras de control básicas pueden anidarse. es decir pueden ponerse una dentro de otra.(Bloque de sentencias) LOOP UNTIL (Condición) For-Next    Primero. se evalúan las expresiones 1 y 2. dando como resultado dos números. Estructura For-Next dentro de una estructura If-Then-Else IF A > B THEN FOR X = 1 TO 5 (Bloque de sentencias 1) NEXT ELSE (Bloque de instrucciones 2) END IF Estructura If-Then-Else dentro de estructura For-Next FOR x = 10 TO 20 STEP 2 IF A == C THEN (Bloque de instrucciones) ELSE (Bloque de instrucciones) END IF 69 . El bloque de sentencias se ejecutará en cada uno de los valores que tome la variable del bucle. La variable del bucle recorrerá los valores desde el número dado por la expresión 1 hasta el número dado por la expresión 2.

.NEXT Estructura For-Next que está dentro de estructura Do-While DO WHILE A > 0 FOR X = 1 TO 10 (Bloque de instrucciones) NEXT A=A-1 LOOP Estructura Do-While que está dentro de estructura For-Next FOR X = 1 TO 10 DO WHILE X < A (Bloque de instrucciones) LOOP NEXT Estructura If-Then dentro de estructura For-Next dentro de estructura Do-While DO WHILE A > 0 FOR X = 1 TO 10 IF A = C THEN (Bloque de instrucciones1) ELSE (Bloque de instrucciones2) END IF NEXT A=A-1 LOOP Instrucción If...Then.Else (Visual Basic) 70 ..

opcional en la forma de varias líneas.Visual Studio 2005 Otras versiones Ejecuta de forma condicional un grupo de instrucciones.. other Copiar If condition [ Then ] [ statements ] [ ElseIf elseifcondition [ Then ] [ elseifstatements ] ] [ Else [ elsestatements ] ] End If -orIf condition Then [ statements ] [ Else [ elsestatements ] ] Partes condition Obligatorio. Se debe evaluar como True o False. elseifcondition Obligatorio si ElseIf está presente.Then que se ejecutan si condition se evalúa como True. Se debe evaluar como True o False. Then Obligatorio en la forma de una línea. dependiendo del valor de una expresión. o como un tipo de datos que es implícitamente convertible a Boolean. Expresión. Se ejecutan una o más instrucciones que siguen a If. o como un tipo de datos que es implícitamente convertible a Boolean.. statements Opcional. Expresión. 71 .

elseifstatements Opcional.. dos (. 3.. el valor a una variable y repite una lista de comandos con esa variable.Then.) siete son los elementos. Se ejecutan una o más instrucciones que siguen a ElseIf.. Una o más instrucciones que se ejecutan si ninguna expresión condition o elseifcondition anterior se evalúa como True.2.Else.Then que se ejecutan si elseifcondition se evalúa como True... el concepto es bastante fácil de entender al ver un ejemplo.. Este comando asigna de una lista de elementos. elsestatements Opcional. 72 . Si bien la explicación puede ser un poco confusa.. Ciclos FOR El comando for Para quienes programan en otros lenguajes el comando for se comporta distinto a la clásica sentencia for. End If Termina el bloque If..

En cada iteración del bucle la variable de control variable toma el valor del siguiente campo y se ejecuta la secuencia de mandatos lista_mandatos. echo (.. por ejemplo: for archivo in `ls` do touch ${archivo} done Sentencia for La sentencia for repite una serie de órdenes a la vez que una variable de control va tomando los sucesivos valores indicado por una lista de cadenas de texto.done es el bloque de comandos a iterar. Para cada iteración la variable de control toma el valor de uno de los elementos de la lista.cantidad es la variable que iteración a iteración va tomando los valores de la lista de elementos do. Ejemplo: for i in $* do echo $i done y mostraríamos todos los parámetros posicionales. La sintaxis de for es la siguientes for variabl ein lista do lista mandatos done lista es una serie de cadenas de texto separadas por espacios y tabuladores.). for i in * do echo $i 73 . pero con pocas variaciones se puede realizar cosas muy útiles.. Esta es la forma más simple de utilizar el comando for.

otros lenguajes más permisivos como C no lo requieren de forma obligatoria. Bucle for El bucle for o ciclo for es una estructura de control en la que se puede indicar el número minimo de iteraciones. De todos modos. o bien sus sucesoras en caso de bucles anidados. Incremento: en pseudolenguaje se toma por defecto el valor 1. Como raras veces los bucles anidados superan las tres dimensiones (por una sencilla cuestión de explosión exponencial). aunque puede explicitarse por medio de la sentencia PASO = ValorPaso cualquier número entero (léase bien entero. j y k suelen ser las únicas relacionadas con este uso. aunque una vez más. Inicialización de la variable de control: en pseudolenguaje se pide explicitarlo (es la sección := ValorInicial). la práctica de utilizar variables de control que no se inicializan en el bucle no es recomendada para la legibilidad del código. pueden ser una o más instrucciones. Cuerpo: es lo que se hará en cada iteración. El uso de esta letra críptica quizás a primera vista es sin embargo una excelente forma de aportar agilidad de lectura al código por su uso tan extensivo. o sea que técnicamente podemos decrementar). las letras i.done y mostraríamos la lista de ficheros del directorio activo. sin embargo. En C es el último parámetro. pero no se considera una buena práctica. En C se define en el primer parámetro del bucle junto con la variable de control. esto no es requerido en C. En C se define en el primer parámetro de la instrucción junto con la inicialización (opcional). esto no se considera una buena práctica).     74 . Elementos del bucle  'Variable de control': prácticamente un mandato impuesto por el uso habitual es utilizar la letra i Iterador como variable de control. En pseudolenguaje pesa la restricción de no poder alterar el valor de la variable de control. En C es el segundo parámetro y puede ser cualquier condición (ni siquiera es obligación que esté la variable de control. Condición de control: en pseudolenguaje se ve representado por el valor final que puede tomar la variable de control (la sección A ValorFinal). Está disponible en casi todos los lenguajes de programación imperativos.

esto genera un error de programación. El bucle PARA se ha convertido en el bucle más ampliamente utilizado en la programación. ya que con la evolución de los lenguajes la mayoría de las condiciones de fin MIENTRAS NoFinDeTabla(tabla) HACER PróximoRegistro(tabla) HacerAlgo(ElementoActual(tabla)) FIN MIENTRAS Es lo mismo decir: PARA i := 0 a CantidadRegistros(tabla) . es que puede determinarse al comienzo del bucle cuántas veces se iterará el mismo. PASO = 1 PróximoRegistro(tabla) HacerAlgo(ElementoActual(tabla)) FIN PARA Otro uso común es utilizar los bucles PARA para recorrer vectores de dos o más dimensiones. en cuyo caso se anidan estas iteraciones. agregar. y su uso es una evolución de una sentencia de lenguaje ensamblador que ejecutaba la siguiente línea o no en función del valor de una condición.Usos Su uso principal se orienta a los vectores. Los condicionales constituyen junto con los bucles los pilares de la programación estructurada. Por esto último. eliminar o consultar datos que se encuentren según el índice. lo cual muchas veces puede redundar en una optimización del código por parte de los compiladores.1. For en pseudolenguaje La principal diferencia de un bucle PARA con respecto a los bucles MIENTRAS Y REPETIR. PARA i:= 0 A 2 HACER PARA j:= 0 A 3 HACER PARA k:= 0 A 1 HACER HacerAlgo(a[i][j][k]) FIN PARA FIN PARA FIN PARA 75 . PSEUDOLENGUAJE Vector a[3][4][2]. una condición mínima del vector es que debe ser ordenado. por que si se intenta leer un dato inexistente. // Estamos indicando un vector de 3 dimensiones y 24 elementos en total. pudiendo modificar.

ValorInicial.Ejemplo de PARA en pseudolenguaje PARA VariableControl := ValorInicial A ValorFinal. i < 10. ya que el vector (por definición) va desde [0. para completar el ciclo.. y por último. i son cantidades variando i desde 0 hasta 9 haga copie i en vector[i] } Bucle Por Cada (For Each) Este bucle es una evolución del concepto del bucle Para en algunos lenguajes. La(s) instrucción(es) del cuerpo se ejecutará(n) (ValorFinal . esto generará error. tenemos el incrementador en una unidad. luego se entrega la condición de control que debe ser falsa durante su ejecución. i. o sea que va desde ValorInicial a ValorFinal inclusive. Se utiliza para recorrer estructuras repetitivas de datos de forma más simple y ágil.(n-1)]. entonces el ciclo for se ejecutará desde [0. El bucle For Each puede describirse genéricamente (en pseudolenguaje) de la siguiente manera: POR CADA elemento DE tipo EN conjunto HACER Cuerpo 76 . for(i = 0. lo cual. [editar] Ejemplo anterior escrito en Lexico tarea { los objetos vector[10].. PASO = Incremento Cuerpo FIN PARA Donde VariableControl. ValorFinal y Paso son enteros.10]. Si por ejemplo en la condición colocamos i < 11. al intentar acceder al elemento vector[10]. Ejemplo en C int main() { int vector[10]. tenemos que la variable de control i se inicializa en un valor 0.ValorInicial + 1) veces. i++) { vector[i] = i. } } En la definición del for..

pueden ser una o más instrucciones. pero transformar un bucle PARA en un bucle POR CADA requeriría inicializar y controlar manualmente las variables de control. Tipo de Dato: es el tipo de variable o la clase a la que pertenece el objeto que se quiere iterar. No es necesario llamar a una función que obtenga el tamaño del vector 2. El uso más típico es con vectores o -en programación orientada a objetos. Nos permite hacer un chequeo en tiempo de compilación sobre el tipo de dato que representa el elemento. si bien no es necesario que la variable elemento sea utilizada en el cuerpo del bucle. Ciertamente podemos transformar cualquier POR CADA en un PARA. El bucle POR CADA no es un sustituto del PARA. con lo cual se perdería nuevamente legibilidad en el código. cuando en un lenguaje se nos da la posibilidad de utilizar ambas estructuras. 3. Conjunto: es la estructura de datos que se quiere iterar.clases del tipo Colección. 77 . y no necesitar conocer la posición del elemento en el vector. No es necesario utilizar la incómoda notación de subíndices para referirnos al valor en cuestión. Esta estructura con el bucle PARA se resuelve de la siguiente manera: Con el bucle POR CADA esto se reduce a: POR CADA x DE tipo EN Vector HACER x = AlgunaOperación(x) FIN PARA Las ventajas de utilizar la estructura POR CADA son las siguientes: 1. en cambio en el segundo lo que guía la iteración es el recorrido de todos los elementos de un vector. es una mejora para el muy frecuente caso anteriormente mencionado. Por tanto. lo más común es que en este Cuerpo exista alguna operación sobre el elemento iterado. su ausencia denota con seguridad una mala elección de estructura de control. Cuerpo: es lo que se hará en cada iteración. Si bien no se impone una obligación al respecto.FIN FOR EACH     Elemento: es el nombre de la variable u objeto que toma el elemento iterado en el cuerpo del bucle. sobre todo teniendo en cuenta que si utilizamos esta estructura es porque no necesitamos el valor del índice. La diferencia esencial entre el bucle PARA y el POR CADA es que en el primero guía su iteración por una variable que se incrementa hasta cierto punto de corte. Necesidad de una nueva estructura de control Esta estructura surge como una innovación en los lenguajes para permitir un código más ágil y legible en una situación que es una de las principales causas del uso del bucle PARA: aplicar la misma operación sobre todos los elementos de un vector. la elección del POR CADA debe hacerse en aquellos casos para los que fue pensado: aplicar la misma operación a todos los elementos de un vector sin importar el orden en que se hagan.

End while es: While (Expresion_Booleana) instrucción(es) End while Un bucle While.WHILE El comando while El comando test se utiliza cuando se itera con el comando while. while true do clear mailq sleep 2 done Este simple algoritmo muestra el contenido de la «bandeja de salida» de sendmail cada 2 segundos.. En cuanto la cantidad de usuarios sea mayor a 1 sale del ciclo... 78 . En este comando es muy útil la comparación de valores.. repite cada 1 segundo. «Todavía no hay suficientes jugadores». Vemos que con pocos conocimientos en bash se pueden lograr infinidad de cosas. while [ ${CANT_USUARIOS} -le 1 ] do echo Todavia no hay suficientes jugadores sleep 1 done echo Ahora hay más de 1 usuario Este ejemplo comprueba si la variable CANT_USUARIOS es menor o igual (-le significa less or equal en inglés) a uno..End while ejecuta las instrucciones en el bucle mientras que la expresión booleana sea TRUE. La sintaxis formal de la estructura de control de flujo While. Prueba la expresión booleana al comienzo del bucle y no entra al bucle si la expresión es FALSE. Se recomienda usar el comando true que devuelve un código de salida exitoso (cero) y el while no termina a menos que se le envíe una señal con Ctrl-C. de ser así. test puede comparar números al igual que cadenas de caracteres. También es posible hacer un ciclo infinito utilizando test (o bien llamado [) para que devuelva siempre verdadero (con [ 1 ]).

Si el usuario hace clic en el botón OK en la caja de diálogo de confirmación. consulte la sección Depurador. la variable OK toma el valor 0 y el bucle se detiene Sentencia while La forma general de esta sentencia es: while (expresion) sentencia. De lo contrario. la variable OK toma el valor 1 y el bucle comienza... generalmente para que la expresión booleana sea verdadera y que While. el valor de la variable del sistema OK está definido por el comando CONFIRM antes de que comience el bucle. puede utilizar la funciones de ejecución paso a paso para detener el bucle y encontrar el problema. 79 . Una vez comienza el bucle.End while ejecute el bucle. Cuando el usuario cancela (no guarda) el último registro..Es común inicializar el valor probado en la expresión booleana antes de introducir el bucle While. donde un método se ejecuta de manera descontrolada. El siguiente bucle continúa indefinidamente porque Infinito siempre es TRUE: Infinito:=True While (Infinito) End while Si se encuentra en una situación así. Inicializar el valor significa definirlo para algo apropiado. La expresión booleana debe ser definida por algo dentro del bucle o si no el bucle continuará indefinidamente. Para mayor información sobre ejecución paso a paso de un método. Ejemplo CONFIRM ("¿Añadir un nuevo registro?") ` ¿Quiere el usuario añadir un registro? While (OK = 1) ` Bucle hasta que el usuario quiera ADD RECORD([aTabla]) ` Añadir un nuevo registro End while ` El bucle siempre termina con End while En este ejemplo. el comando ADD RECORD permite continuar ejecutando el bucle porque hace que la variable OK tome el valor 1 cuando el usuario guarda el registro. la variable OK toma el valor 0 y se ignora el bucle.End while..

la cual se cicla mientras no se pulse A: main() { char carac. Primero se evalúa expresion Lo normal es que sentencia incluya algún elemento que altere el valor de expresion proporcionando así la condición de salida del bucle. } Antes de entrar al ciclo se inicializa la variable carac a nulo. while( carac != 'A') carac = getchar(). Si sentencia es compuesta se encierra entre { }. como sea verdad entonces se ejecuta la sentencia del bucle (carac = getchar(). suma=1.5: Sentencia while     sentencia se ejecutará mientras el valor de expresion sea verdadero. La función getchar() lee el siguiente carácter del flujo estándar 80 .). el control del programa pasa a la línea que sigue al ciclo. donde sentencia puede ser una sentencia vacía. y después el ciclo while se repetirá mientras la condición sea verdadera. Después pasa a la sentencia while donde se comprueba si carac no es igual a 'A'. while(limite>0) { suma=suma+limite. Un ejemplo de uso de esta sentencia es el siguiente fragmento de programa. limite=100. una sentencia única o un bloque de sentencias que se repetirán. que calcula la suma de los numeros del 1 al 100: int suma. Cuando el flujo del programa llega a esta instrucción. En el siguiente ejemplo se muetra una rutina de entrada desde el teclado. Su formato es: while ( expresion) sentencia. limite--.Figura 3. Cuando llega a ser falsa. primero se revisa si la condición es verdad para ejecutar la(s) sentencia(s). carac = '\0'. limite. } La sentencia while La sentencia while es otro ciclo o bucle disponible en C.

como el ciclo while comprueban la condición en lo alto del ciclo. por lo que el código dentro del ciclo no se ejecuta siempre. x--. que en nuestro ejemplo es el caracter que haya sido tecleado. A continuación mostramos otro ejemplo: main() { int x=3. Como el ciclo while pueda aceptar también expresiones. la condición llega a ser falsa porque carac es igual a A. con lo que el ciclo termina. la condición fallará y se podrá salir del ciclo. while( x>0 ) { printf("x = %d\n". while ( x = x + 1 ). Si se usan este tipo de expresiones. Por ejemplo: main() { 81 . y no solamente condiciones lo siguiente es válido: while ( x-. solamente cuando el resultado de x--. Después de pulsar A.. while ( x += 5 ). dentro del ciclo tenemos más de una sentencia. x).. se asigna a carac y se comprueba la condición nuevamente. por lo que se requiere usar la llave abierta y la llave cerrada { . Una vez que se ha pulsado una tecla. De lo anterior. } para que el grupo de sentencias sean tratadas como una unidad. De acuerdo a lo anterior. podemos realizar una operación completa dentro de la expresión.). x=x+1 o x+=5 sea cero.(teclado) y lo devuelve. se tiene que tanto el ciclo for. } } que genera la siguiente salida en pantalla: x=3 x=2 x=1 Como se observa.

En while la condición para que se repita el bloque de instrucciones se evalúa desde el principio del ciclo de repeticiones. while ( (carac = getchar()) != 'A' ) putchar(carac). Esto imprime en pantalla: 82 . en la estructura do-while. printf(“La variable num vale: %d\n”.WHILE Estructura de repetición do-while Esta estructura de repetición es similar a la estructura while. } while (num<=10). do { printf(“%d\n”. El ciclo while procederá a leer del teclado y lo mostrará hasta que el caracter A sea leído. carac = '\0'. Veamos un ejemplo en donde se imprimen los números del 1 al 10 usando esta estructura. Al final también se imprime en pantalla el valor contenido en la variable principal a fin de mostrar cuál es su valor final. La forma de esta estructura es: do { bloque de enunciados } while (condición). al principio se ejecuta el bloque y luego se evalúa la condición para ver si se sigue ejecutando o no. en cambio. num). } En este ejemplo se usan las funciones de la biblioteca estándar getchar() -. DO .char carac. num). Esto significa que el bloque se ejecutará por lo menos una vez. num = num + 1. num = 1.lee un caracter del teclado y putchar() escribe un caracter dado en pantalla.

.. cualquier código que quieras escribir con DO. 83 .. var color do { color = prompt("dame un color (escribe rojo para salir)". Veamos el ejemplo que escribimos para un bucle WHILE en este otro tipo de bucle.while es la última de las estructuras para implementar repeticiones de las que dispone en Javascript y es una variación del bucle while visto anteriormente. Pide un color mientras que el color introducido es distinto que "rojo". sólo los de versión 4 o superior. con la diferencia de que sabemos seguro que el bucle por lo menos se ejecutará una vez.2.. excepto que no tuvimos que inicializar la variable color antes de introducirnos en el bucle.. Este tipo de bucle se introdujo en Javascript 1.WHILE por un bucle WHILE. La sintaxis es la siguiente.... con lo que en navegadores antiguos deberás traducir tu bucle DO. igual que el bucle WHILE. En cualquiuer caso. por lo que no todos los navegadores los soportan. do { //sentencias del bucle } while (condición) El bucle se ejecuta siempre una vez y al final se evalúa la condición para decir si se ejecuta otra vez el bucle o se termina su ejecución.1 2 3 4 5 6 7 8 9 10 La variable num vale: 11 Bucle DO. Se utiliza generalmente cuando no sabemos cuantas veces se habrá de ejecutar el bucle.WHILE El bucle do.WHILE se puede escribir también utilizando un bucle WHILE."") } while (color != "rojo") Este ejemplo funciona exactamente igual que el anterior.

consiguiendo que se ejecuten las acciones una vez si la condicion retorna 0 o FALSE. 84 . La forma general del ciclo es: do { sentencia.El bucle do while es en su esencia igual al bucle while con la diferéncia de que ejecuta las acciones antes de comprobar la condicion. while la examina en la parte baja del mismo... ?> </CODE< code> Maximizar Seleccionar PHP Si ejecutais este ejemplo. este bucle se ejecutará siempre una vez mas que while si tienen la misma condicion: 000 001 002 003 004 005 006 <? $var1 = 0. el bucle do .. La sentencia do-while Al contrario de los ciclos for y while que comprueban la condición en lo alto del bucle. } while (condición). veréis cómo imprime: $var1 = 0 $var1 = 1 $var1 = 2 $var1 = 3 $var1 = 4 $var1 = 5 $var1 = 6 $var1 = 7 $var1 = 8 $var1 = 9 $var1 = 10 Aunque en el último caso no se haya cumplido la condicion de ya que $var1 no seria mas pequeño que 10. do { echo "\$var1 = $var1<br>". así. Esta característica provoca que un ciclo do . while siempre se ejecute al menos una vez.. $var1 ++. } while ($var1 <= 10).

default: printf("\tOpcion no disponible\n\n"). while para leer números desde el teclado hasta que uno de ellos es menor que o igual a 100: main() { int num. ya que siempre se requiere que se ejecute al menos una vez. do { scanf("%d". Integrales\n"). } 85 . break. case 2: printf("\tOpcion 2 seleccionada\n\n"). } Otro uso común de la estructura do . printf("1... switch(opc) { case 1: printf("\tOpcion 1 seleccionada\n\n"). case 3: printf("\tOpcion 3 seleccionada\n\n"). break. se usan normalmente por legibilidad y para evitar confusión (respecto al lector. y no del compilador) con la sentencia while. do { printf(" Teclear una opcion: "). En el siguiente programa se usa un ciclo do . while es una rutina de selección en un menú. break..Aunque no son necesarias las llaves cuando sólo está presente una sentencia. } while ( num>100 ). break. printf("2. Derivadas\n").. main() { int opc. scanf("%d". &num). printf("3. Limites\n"). &opc).

} while( opc != 1 && opc != 2 && opc != 3).C -.h> /* Aqui esta la definicion del printf */ main() { char respuesta. do { printf("Teclea una Y o una N \n").Septiembre 2005 Este programa se cicla mientras pide un caracter y se sale hasta que le dan una Y o una N ******************************************************************** */ #include <stdio. respuesta). x--). do { printf("x = %d\n". } 86 . Aplicación de ejemplos específicos EJDOWHILE. } while( x>0 ) . } Se muestra un ejemplo donde se reescribe usando do . scanf("%c". main() { int x=3. /* Definimos una variable tipo caracter */ clrscr().. printf("Este programa se va a quedar ciclado mientras no le des una Y o una N \n ").3. while uno de los ejemplos ya mostrados. } 3..Autor: Mario García Jimenez -.

return 0. 87 ... getch().").while( (respuesta != ´Y´) && (respuesta != ´N´) ) /* pregunta al ultimo */ { } printf("Ya saliste del ciclo.

UNIDAD IV FUNCIONES 88 .

se presenta como un subalgoritmo que forma parte del algoritmo principal. Elementos de la declaración de una subrutina Las declaraciones de subrutinas generalmente son especificadas por:   Un nombre único en el ámbito: nombre de la función con el que se identifica y se distingue de otras. No podrá haber otra función ni procedimiento con ese nombre (salvo sobrecarga o polimorfismo en programación orientada a objetos). en cambio cuando se llama a una macro. como Visual Basic . En computación.4. Estas órdenes cumplen con una tarea específica de una aplicación más grande. 89 . Un tipo de dato de retorno: tipo de dato del valor que la subrutina devolverá al terminar su ejecución. La palabra puede ser utilizada en diversos ámbitos y con distintos significados.NET o Fortran. aumentando así el código fuente y por consiguiente el objeto. función o rutina). Algunos lenguajes de programación. el compilador toma el código de la macro y lo implanta donde fue llamado.1. Una subrutina al ser llamada dentro de un programa hace que el código principal se detenga y se dirija a ejecutar el código de la subrutina. el cual permite resolver una tarea específica. una función es un tipo de subalgoritmo que describe una secuencia de órdenes. como idea general. una subrutina o subprograma (también llamada procedimiento. Definición El concepto de función tiene su origen en el término latino functĭo. utilizan el nombre función para referirse a subrutinas que devuelven un valor. En la informática. más precisamente en los lenguajes de programación. Subrutina Diagrama del funcionamiento de una subrutina.

. La función "Promedio" devuelve un valor decimal correspondiente a la suma de 2 valores enteros de entrada (A y B): float Promedio(int A..0..2. uno o más) que la función debe recibir para realizar su tarea.. instrucción N . return r. los argumentos de la función separados por punto coma y un paréntesis de cierre. seguido de un paréntesis de apertura. se puede utilizar el comando Pegar Función que facilita el procedimiento. FIN SUBRUTINA . La estructura de una función comienza por el nombre de la función.. } Así una llamada "Promedio(3..0.. seguido de un paréntesis de apertura. 4... 90 . int B){ float r. r=(A+B)/2.. los argumentos de la función separado por punto coma Estructura básica de una función. Ejemplos PROGRAMA principal instrucción 1 instrucción 2 .. se escribe un signo igual (=) delante del nombre de la función. 5)" devolverá el valor de tipo real (float) 4. La siguiente función en C es la analogía al cálculo del promedio matemático. El código u órdenes de procesamiento: conjunto de órdenes y sentencias que debe ejecutar la subrutina. Si la función inicia una fórmula. Estructura de una función La estructura de una función comienza por el nombre de la función.. FIN PROGRAMA principal. SUBRUTINA NombreX .  Una lista de parámetros: especificación del conjunto de argumentos (pueden ser cero. A medida que se crea una fórmula que contiene una función.

La cantidad de argumentos de una función depende de cada función. otras que tienen 3. otras tienen 2 argumentos.Argumento3) De forma que: NombreFunción: Nombre de la Función de Excel. son cuestiones que están relacionadas. La sintaxis del lenguaje permite también la invocación de funciones a través de punteros a funciones e incluso de referencias. aunque esto último sea menos frecuente. Signo Igual (si la función está la principio de una fórmula) Argumentos =SUMA(A10. (punto y coma). hay funciones que tienen 1 argumento. ya que ciertas formas de llamada presuponen determinado tratamiento de los identificadores. Una invocación ó llamada a una función implica pasarle el control de la ejecución del programa. Estos detalles tienen importancia cuando se quiere mezclar código C++ con el generado por otros lenguajes de programación. Argumento#: Los argumentos pueden ser números. Llamado de funciones Invocación de funciones (programación). los diferentes objetos que la componen. Cuando las funciones son miembros de clases la invocación sigue una sintaxis especial.B5:B10.3. valores de error como #N/A o referencias de celda.37) Punto y coma separan argumentos Los paréntesis encierran argumentos Nombre de la Función 4. y otras pueden tener hasta 30. matrices. se realiza colocando el nombre de la función y los argumentos actuales en el mismo orden que los parámetros formales correspondientes. Formas de invocación de funciones La forma de efectuarse la invocación de funciones y el tratamiento de identificadores globales. bien porque necesitemos llamar una rutina en otro lenguaje desde un 91 .50. En el siguiente ejemplo se muestra para la función SUMA. texto. así como los argumentos ó parámetros que requiere para realizar su tarea.Argumento2. Como se verá más adelante.En términos genéricos una función puede definirse de la siguiente forma: =NombreFunción(Argumento1. valores lógicos como VERDADERO o FALSO. Los argumentos van separados por un . En estos casos incluso existen operadores especiales para invocarlas a través de sus punteros.

Queremos saber cuál es el valor mínimo de los libros de "Rowling": select min(precio) from libros where autor like '%Rowling%'. GNU g++. queremos saber cuántos libros tenemos de la editorial "Planeta": select sum(cantidad) from libros where editorial ='Planeta'. queremos saber el promedio del precio de los libros referentes a "PHP": select avg(precio) from libros where titulo like '%PHP%'.4. Los comentarios que siguen se refieren al compilador Borland C++.programa C++. etc. Estos detalles se refieren concretamente a:   El tratamiento dado a los identificadores Convención de llamada a utilizar. queremos saber la cantidad de libros que tenemos disponibles para la venta: select sum(cantidad) from libros. veamos otras. paso de parámetros. También podemos combinarla con "where". Los detalles sobre la forma de proceder en cada caso dependen de la plataforma. Por ejemplo. o porque desde otro lenguaje necesitemos utilizar una rutina escrita en C++. calcular sumas. Paso de agrupamiento de una función Existen en MySQL funciones que nos permiten contar registros. pueden hacerse extensivos al resto de plataformas (MS Visucal C++. aunque salvando algunas cuestiones de detalle. promedios. En la mayoría de compiladores es posible fijar ciertas directrices sobre la forma de proceder en estos casos. que compone tres cuestiones: Limpieza de la pila. Por ejemplo. La función "sum()" retorna la suma de los valores que contiene el campo especificado.) 4. queremos saber cuál es el mayor precio de todos los libros: select max(precio) from libros. 92 . La función avg() retorna el valor promedio de los valores del campo especificado. Ejemplo. obtener valores máximos y mínimos. Para averiguar el valor máximo o mínimo de un campo usamos las funciones "max()" y "min()" respectivamente. La razón es que todos los lenguajes no se comportan de la misma forma. Ya hemos aprendido "count()". tanto a nivel global como a nivel particular de algunos identificadores. y tratamiento de los identificadores globales. variando ciertas cuestiones de detalle. Por ejemplo.

La primera es correcta.Estas funciones se denominan "funciones de agrupamiento" porque operan sobre conjuntos de registros. select count (*) from libros. la segunda incorrecta. Tenga en cuenta que no debe haber espacio entre el nombre de la función y el paréntesis. no con datos individuales. Las siguientes sentencias son distintas: select count(*) from libros. 93 . porque puede confundirse con una referencia a una tabla o campo.

UNIDAD V ARREGLOS 94 .

5. En principio. En C#. la dimensión principal. por medio de la siguiente sintaxis: <tipo> [ ] < identificador > .1. un arreglo (también denominado vector o matriz) es una zona de almacenamiento que contiene variables de un mismo tipo y cuyo acceso se realiza mediante índices.5. Arreglos unidimensionales Un arreglo unidimensional tiene una sola dimensión. una matriz o vector (llamados en inglés arrays) es una zona de almacenamiento continuo. A continuación describiremos cada una de estas operaciones. La declaración de un arreglo unidimensional consiste en establecer las características del arreglo y sus elementos. Creación del arreglo. Desde el punto de vista lógico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). Para manejar un arreglo. si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sería más adecuado utilizar una lista. Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Declaración. En programación. dos y tres dimensiones. aunque las más fáciles de imaginar son los de una. pero los elementos de dicha fila pueden ser a su vez matrices (un proceso que puede ser recursivo). 95 . los elementos de la matriz. se puede considerar que todas las matrices son de una dimensión. Declaración y aplicación Operaciones.1. 5. A los arreglos de una dimensión también se les llama listas. lo que nos permite hablar de la existencia de matrices multidimensionales. y Acceso a los elementos del arreglo. Por el contrario.2. las operaciones a efectuarse son:     Declaración del arreglo. Inicialización de de los elementos del arreglo. que contiene una serie de elementos del mismo tipo. la dimensión se maneja por medio de un par de corchetes. en C#. ya que esta estructura puede cambiar de tamaño fácilmente durante la ejecución de un programa.2. Conceptos Para la informática.

Esto se debe a que. en tiempo de ejecución. // Se crea el tercer objeto del arreglo art 96 . y el par de corchetes. tamaño es un número entero que representa el número de elementos del arreglo. con 5 elementos de punto flotante y precisión sencilla . representa la dimensión del arreglo y encierra un número entero que corresponde al número de elementos del arreglo.Donde: tipo indica el tipo correspondiente a los elementos del arreglo . La creación de un arreglo unidimensional consiste en reservar espacio de memoria para todos sus elementos. no se reserva espacio en la memoria. con 10 elementos de tipo entero. en la declaración.Artículo [] art = new Artículo[3]. // Se crean 3 referencias a objetos de la clase Artículo art[0]= new Artículo(). distancia = new float[ 5] . // Se crea el arreglo distancia . Donde: new es el operador para gestionar espacio de memoria. Ejemplos: a = new int [10] . identificador es el nombre del arreglo. Creación. el espacio entre los corchetes está vacío. [ ]. float [ ] distancia . Observe que. // Se crea el arreglo a . Artículo [ ] art = new Artículo[ 3]. utilizando la siguiente sintaxis: < identificador > = new <tipo> [ tamaño ] . // Se crea el primer objeto del arreglo art art[1]= new Artículo(). // Se crea el segundo objeto del arreglo art art[2]= new Artículo(). Ejemplos: int [ ] a . durante dicha operación. Artículo [ ] art = new Artículo[ 3].

-6.75F. Se puede acceder a los valores de los elementos de un arreglo a través del nombre del arreglo y un subíndice. // Asigna 5 al tercer elemento. 0. Inicialización. 30. 97 . distancia[1] = ++distancia[0] . Los valores de los subíndices empiezan en cero para el primer elemento. 93. a sus elementos se les asigna el valor false. // Crea dos variables de punto flotante y precisión sencilla. // Crea el arreglo distancia con 5 elementos. podemos referirnos a un elemento del arreglo escribiendo el nombre del arreglo y el subíndice del elemento entre corchetes. float [ ] distancia = { 2. float [ ] distancia = new float[5] . distancia[0] = x + y . de acuerdo a los siguientes criterios:     Si el tipo del arreglo es numérico. El subíndice debe escribirse entre corchetes y representa la posición del elemento en el arreglo. a sus elementos se les asigna el valor '\u0000'.00F }. distancia[2] = distancia[1] . 286. 2.35 }. y = 10F . por ejemplo: int [ ] a = { 1.4. Cuando se requiere asignar valores iniciales diferentes de los predeterminados. 90. string [ ] pato = { "Hugo". creación e inicialización en una sola instrucción. Ejemplo: float [ ] distancia = new float[5] .45F. 46. como se muestra enseguida: int [ ] a = new int [10] . // El valor asignado al primer elemento es 35. Si el tipo del arreglo es char.62F. se le asignan automáticamente valores iniciales predeterminados a cada uno de sus elementos. a sus elementos se les asigna el valor cero. "Paco". "Luís" }. Así. Acceso. float x = 25F.Las dos primeras operaciones de declaración y creación anteriores se pueden agrupar en una sola instrucción. Si el tipo del arreglo es bool.cuando es creado por el compilador. es posible agrupar las operaciones de declaración.455. Un arreglo es un objeto que. Si el tipo del arreglo es una clase.50F. 23.9. // Asigna 36 al segundo elemento. hasta el tamaño del arreglo menos uno.distancia[0] + 4 . a sus elementos se les asigna el valor null.

.... // Asigna 5 al cuarto elemento // y disminuye en 1 el valor del tercero. // Asigna a y el valor almacenado en el quinto elemento. // Asigna 20 al quinto elemento. Resolvamos el problema de manejar dos listas: una con los nombres de un grupo de alumnos y otra con una calificación para cada uno de los alumnos. Nombre [29] : Calificación[29] : El despliegue en el monitor luciría así: No.. y = distancia[4] . 100 98 .distancia[3] = distancia[2]-. plicaciones. . 1 Nombre Hugo Calif. Primero se deberán leer los nombres de los alumnos y la calificación que corresponde a cada uno de ellos y después habrá que desplegar dos columnas: una con los nombres de los alumnos y la otra con sus respectivas calificaciones. distancia[4] = distancia[3] * distancia[2] . Listas. La lectura debe lucir de manera similar a la siguiente: Número de alumnos: 30 Nombre [0] : Calificación[0] : Nombre [1] : Calificación[1] : Nombre [2] : Calificación[2] : .

ReadLine( ). for(int i = 0. using C = System. 30 Paco Luís 90 95 .ToInt32(C. 99 .Console.2 3 . // Lee los elementos de los dos arreglos.cs : Lee una lista de nombres y calificaciones correspondientes a un grupo de // alumnos de una materia..ReadLine()). i++) { C..Write("Nombre del alumno [" + i + "] : "). nAlumnos = Convert. using System. int [ ] calif = new int [nAlumnos].. // Lista. string [ ] alumnos = new string[nAlumnos].Write("Número de alumnos: "). public class Lista { public static void Main() { int nAlumnos.. C. i < nAlumnos . alumnos[i] = C. Donald 70 El siguiente código corresponde a un programa que resuelve el problema. //Crea el arreglo de //alumnos. // Crea el arreglo de calificaciones.

que se ubican en los ejes x. orientación y sentido.ToInt32(C." + alumnos[ i] ).C. Nombre Calif. i < nAlumnos . Por ejemplo . y. } // Despliega los valores de los dos arreglos. etc. En un espacio tridimensional.."). un vector puede expresarse por medio de tres componentes sobre los ejes cartesianos. Cada componente puede. z. los vectores sirven para representar velocidades. } } } Vectores. respectivamente. expresarse en función de los vectores unitarios i. C. Podemos representar a un vector como un segmento de recta dirigida que tiene magnitud.Write("Calificación [" + i + "] : "). calif[i] = Convert. aceleraciones. v2 = -5i + 40j + 25k La suma de los dos vectores sería: s = v1+v2 = (20-5)i +(15+40)j+(35+25)k s = 15i + 55j + 60k 100 . Otra de las aplicaciones de los arreglos es el manejo de vectores.ReadLine( )). for(int i = 0 .WriteLine("No.Write(" " + (i+1) + ". i++) { C.WriteLine(" " + calif[i] ). k . j. un vector v1 puede representarse en función de sus componentes como: v1 = 20i + 15j + 35k Si tenemos otro vector. En Física. C. a su vez.

En C#. Los arreglos multidimensionales tienen más de una dimensión. 101 . las operaciones a efectuarse son:     Declaración del arreglo.Un segmento del programa para este ejemplo sería: double v1[ ] = new double[3]. v1[2] = 35.3. Creación del arreglo. las dimensiones se manejan por medio de un par de corchetes. Conceptos básicos. A continuación describiremos cada una de estas operaciones. separados por comas. Arreglos multidimensionales Conceptos básicos. v2[0] = -5. Inicialización de de los elementos del arreglo. en C#. las dimensiones se manejan por medio de un par de corchetes. double s[ ] = new double[3]. Los arreglos multidimensionales tienen más de una dimensión. v1[1] = 15. i < 3 . dentro de los que se escriben los valores de cada dimensión. y Acceso a los elementos del arreglo. v2[1] = 40. En C#. } 5. double v2[ ] = new double[3]. v2[2] = 25. v1[0] = 20. separados por comas. i++) { s[ i ] = v1[ i ] + v2[ i ] . Para manejar un arreglo. dentro de los que se escriben los valores de cada dimensión. Operaciones. for(int i=0.

[ . durante dicha operación. La sintaxis para declarar un arreglo multidimensional es la siguiente: <tipo> [ . . . Creación. ] tridim . .. // Tres dimensiones.. dim2 . utilizando la siguiente sintaxis: < identificador > = new <tipo> [ dim1. char [ . Esto se debe a que. El tamaño del arreglo es el resultado de multiplicar los valores de las dimensiones y representa el número de elementos del arreglo. Ejemplos: double [ . ] bidim. // Cuatro dimensiones.Declaración. 3. dim2 . en tiempo de ejecución. no se reserva espacio en la memoria.. .] < identificador > . Donde: tipo indica el tipo correspondiente a los elementos del arreglo . 102 . ] enciclopedia. La creación de un arreglo multidimensional consiste en reservar espacio en la memoria para todos sus elementos. Observe que. dimN ] . int [ .]. Ejemplos: bidim = new double [2. representan las dimensiones del arreglo. . Donde: new es el operador para gestionar espacio de memoria. dimN son valores enteros que representan las dimensiones del arreglo. Los corchetes encierran todas las comas necesarias para separar las dimensiones del arreglo. identificador es el nombre del arreglo.. 4] . dim1 . 3] . tridim = new int[ 2. en la declaración.. // Dos dimensiones.. y el par de corchetes. la coma y las diéresis. el espacio entre los corchetes está vacío.

{99. Se puede acceder a los valores de los elementos de un arreglo bidimensional a través del nombre del arreglo y dos subíndices.cuando es creado por el compilador. . hasta el tamaño del arreglo menos uno. 59. El arreglo deberá tener las siguientes dimensiones:     Una para manejar el renglón en la página. 75. 45} . se le asignan automáticamente valores iniciales predeterminados a cada uno de sus elementos. Los valores de los subíndices empiezan en cero para el primer elemento. a sus elementos se les asigna el valor null. otra para la columna en la página. Aplicaciones. Cuando se requiere asignar valores iniciales diferentes de los predeterminados. 52. . la posición todos los caracteres escritos en una enciclopedia. 89. Inicialización. 72. es posible agrupar las operaciones de declaración. 500. ] tridim = new int[2. 10] . 43. 80. Si el tipo del arreglo es una clase. 10}}. 30. Si el tipo del arreglo es bool. 16. a sus elementos se les asigna el valor cero.enciclopedia = new char[30. char [ . 34. 61} . Los subíndices deben escribirse entre corchetes y representa la posición del elemento en el arreglo. Si el tipo del arreglo es char. 29. {93. 103 . de acuerdo a los siguientes criterios:     Si el tipo del arreglo es numérico. Acceso. 3.3] . {{44. 47}}}. . creación e inicialización en una sola instrucción. por ejemplo: int [ . 70. ] enciclopedia = new char[ 30. 4] . 80. Se necesita manejar. podemos referirnos a un elemento del arreglo escribiendo el nombre del arreglo y los subíndices del elemento entre corchetes. Un arreglo es un objeto que. a sus elementos se les asigna el valor false. {60. 10 ] . Las operaciones de declaración y creación anteriores se pueden agrupar en una sola instrucción. . otra para la hoja en el volumen y otra para el volumen en la enciclopedia. 39. en un arreglo. 48} . a sus elementos se les asigna el valor '\u0000'. 500. como se muestra enseguida: double [ . {20. int [ . ] bidim = new double [2. Así. ] tridim={{{12. 24} .

char[ . A continuación describiremos cada una de estas operaciones. v++) // Volumen for(int p = 0 . Creación del arreglo. ] enciclopedia = new char [18. // Lee. p++) // Página for(int r = 0 .500. las operaciones a efectuarse son:     (char)Console. . cada carácter para la enciclopedia. Declaración del arreglo. La sintaxis para declarar un arreglo multidimensional es la siguiente: <tipo> [ . El siguiente fragmento de programa implementa la solución a este problema. en C#.1. Para manejar un arreglo. . Declaración. r++) // Renglón for(int c = 0 . for(int v = 0 . 30 renglones tiene y 500 80 columnas.. v < 18 . c++) // Columna { car = enciclopedia[v. r < 30 . c < 80 . Declaración y aplicación Operaciones.80] .Read( ) . páginas. p < 500 . } 5.3.c] = car .30..p. char car. y Acceso a los elementos del arreglo. // Declara y crea el arreglo.] < identificador > .Cada página tiene Cada volumen La enciclopedia tiene 18 volúmenes. Inicialización de de los elementos del arreglo.r. . desde el teclado. 104 .

] enciclopedia. Creación. y el par de corchetes. . . no se reserva espacio en la memoria.. 4] . Ejemplos: bidim = new double [2. durante dicha operación. Observe que. 3. 3] . como se muestra enseguida: 105 . enciclopedia = new char[30. . // Cuatro dimensiones. 500. [ . int [ .. Donde: new es el operador para gestionar espacio de memoria. char [ . dimN son valores enteros que representan las dimensiones del arreglo. el espacio entre los corchetes está vacío. . El tamaño del arreglo es el resultado de multiplicar los valores de las dimensiones y representa el número de elementos del arreglo. 80. representan las dimensiones del arreglo. La creación de un arreglo multidimensional consiste en reservar espacio en la memoria para todos sus elementos. // Dos dimensiones. 10] . // Tres dimensiones. Ejemplos: double [ . dim1 . tridim = new int[ 2. dim2 . Las operaciones de declaración y creación anteriores se pueden agrupar en una sola instrucción.. identificador es el nombre del arreglo. la coma y las diéresis. dim2 . en tiempo de ejecución. ] bidim. Los corchetes encierran todas las comas necesarias para separar las dimensiones del arreglo. en la declaración. utilizando la siguiente sintaxis: < identificador > = new <tipo> [ dim1. Esto se debe a que.Donde: tipo indica el tipo correspondiente a los elementos del arreglo .]. ] tridim .. dimN ] .

Los valores de los subíndices empiezan en cero para el primer elemento. 500. int [ . a sus elementos se les asigna el valor false. . . {{44. 61} . Cada página tiene 30 renglones y 80 columnas. 30. Cuando se requiere asignar valores iniciales diferentes de los predeterminados. 89. Si el tipo del arreglo es char. 24} . ] tridim={{{12. 4] . 70. hasta el tamaño del arreglo menos uno. Se necesita manejar. 29. 59. ] enciclopedia = new char[ 30. {93. 75. . Aplicaciones. a sus elementos se les asigna el valor null. 45} . ] tridim = new int[2. 43. otra para la hoja en el volumen y otra para el volumen en la enciclopedia. 10 ] . Acceso.double [ . otra para la columna en la página. Se puede acceder a los valores de los elementos de un arreglo bidimensional a través del nombre del arreglo y dos subíndices. por ejemplo: int [ . en un arreglo. Inicialización. Así. Si el tipo del arreglo es bool. {20. es posible agrupar las operaciones de declaración. Si el tipo del arreglo es una clase. 3. 10}}.cuando es creado por el compilador. se le asignan automáticamente valores iniciales predeterminados a cada uno de sus elementos. Los subíndices deben escribirse entre corchetes y representa la posición del elemento en el arreglo. {99. la posición todos los caracteres escritos en una enciclopedia. Cada volumen tiene 500 páginas. Un arreglo es un objeto que. a sus elementos se les asigna el valor '\u0000'.3] . 48} . 47}}}. 106 . . ] bidim = new double [2. podemos referirnos a un elemento del arreglo escribiendo el nombre del arreglo y los subíndices del elemento entre corchetes. 80. 34. El arreglo deberá tener las siguientes dimensiones:     Una para manejar el renglón en la página. {60. 16. 39. creación e inicialización en una sola instrucción. 72. La enciclopedia tiene 18 volúmenes. 52. a sus elementos se les asigna el valor cero. de acuerdo a los siguientes criterios:     Si el tipo del arreglo es numérico. char [ .

char[ . cada carácter para la enciclopedia.Read( ) . r++) // Renglón for(int c = 0 .500. for(int v = 0 .p.30.c] = car . desde el teclado. // Declara y crea el arreglo. p++) // Página for(int r = 0 . ] enciclopedia = new char [18. v++) // Volumen for(int p = 0 . r < 30 . . char car. .80] . v < 18 .El siguiente fragmento de programa implementa la solución a este problema. p < 500 . } (char)Console. c < 80 . c++) // Columna { car = enciclopedia[v.r. 107 . // Lee.

Sign up to vote on this title
UsefulNot useful