lenguaje de programaciÓn ifinal

Upload: achicho

Post on 12-Jul-2015

179 views

Category:

Documents


0 download

TRANSCRIPT

UNIDAD I INTRODUCCIN Y DEFINICIONES

1

1.1. Definicin de lenguaje Un lenguaje informtico es un lenguaje usado por, o asociado con, ordenadores. Muchas veces, este trmino es usado como sinnimo de lenguaje de programacin, pero un lenguaje informtico no tiene por qu ser un lenguaje de programacin. Como ejemplo un lenguaje de marcas como el HTML no es un lenguaje de programacin, pero s es un lenguaje informtico. En general, como cualquier otro lenguaje, un lenguaje de ordenador es creado cuando hay que transmitir una informacin de algo a alguien basado en computadora. El lenguaje de programacin 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 informticos pueden ser clasificados en varias clases, entre las que se incluyen las siguientes.

Lenguaje de programacin Lenguaje de especificacin Lenguaje de consulta, como SQL o XQuery Lenguaje de marcas, como XML y otros ms ligeros Lenguaje de transformacin, como XSLT Protocolo de comunicaciones, como http,ftp Lenguaje de sonido, para crear sonidos, Lenguaje grfico, para crear figuras y dibujos. Metapost, Pseudocdigo El lenguaje puede definirse como un sistema de comunicacin. En el caso de los seres humanos, se encuentra extremadamente desarrollado y es mucho ms especializado que en otras especies animales, ya que es fisiolgico y psquico a la vez. El lenguaje nos permite abstraer y comunicar conceptos. Una separacin tcnica permite reconocer tres dimensiones dentro del lenguaje: forma (comprende a la fonologa, morfologa y sintaxis), contenido (la semntica) y uso (la pragmtica). Para el lingista Ferdinand de Saussure, el lenguaje se compone de lengua (es el idioma, un modelo general y constante para los miembros de una cierta colectividad lingstica) y habla (la materializacin momentnea de ese modelo; es un acto individual y voluntario que se realiza a travs de la fonacin y la escritura). Antes de desarrollar sus capacidades en forma extendida, los humanos utilizan un prelenguaje, un sistema de comunicacin rudimentario que aparece en los primeros aos de vida y que implica capacidades neurofisiolgicas y psicolgicas como la percepcin, motricidad, imitacin y memoria. El concepto de lengua natural, por otra parte, refiere a una variedad lingstica o forma de lenguaje humano con fines comunicativos que se encuentra dotado de una sintaxis y que obedece a los principios de economa y optimidad. Charles F. Hockett ha establecido quince rasgos que se encuentran presentes en las lenguas naturales. Entre ellos menciona la arbitrariedad (de la relacin entre el signo y el 2

significado), la productividad (permite generar nuevos mensajes) y la estructura jerrquica (segn la cual las lenguas humanas cuentan con reglas o principios sintcticos y gramaticales, ya que las producciones no son aleatorias). Lenguaje de programacin

Captura de la microcomputadora Commodore PET-32 mostrando un programa en el lenguaje de programacin BASIC, bajo el emulador VICE en una distribucin GNU/Linux. Un lenguaje de programacin es un idioma artificial diseado para expresar computaciones que pueden ser llevadas a cabo por mquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento fsico y lgico de una mquina, para expresar algoritmos con precisin, o como modo de comunicacin humana.1 Est formado por un conjunto de smbolos y reglas sintcticas y semnticas 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 cdigo fuente de un programa informtico se le llama programacin. Tambin la palabra programacin se define como el proceso de creacin de un programa de computadora, mediante la aplicacin de procedimientos lgicos, a travs de los siguientes pasos:

El desarrollo lgico del programa para resolver un problema en particular. Escritura de la lgica del programa empleando un lenguaje de programacin especfico (codificacin del programa). Ensamblaje o compilacin del programa hasta convertirlo en lenguaje de mquina. Prueba y depuracin del programa. Desarrollo de la documentacin.

Existe un error comn que trata por sinnimos los trminos 'lenguaje de programacin' y 'lenguaje informtico'. Los lenguajes informticos engloban a los lenguajes de programacin y a otros ms, como por ejemplo HTML (lenguaje para el marcado de pginas web que no es propiamente un lenguaje de programacin, sino un conjunto de instrucciones que permiten disear el contenido de los documentos). Permite especificar de manera precisa sobre qu datos debe operar una computadora, cmo deben ser almacenados o transmitidos y qu acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a travs de un lenguaje que intenta estar relativamente prximo al lenguaje humano o natural. Una caracterstica relevante de los lenguajes de programacin es precisamente que ms de un programador pueda usar un conjunto comn de instrucciones que sean comprendidas entre ellos para realizar la construccin de un programa de forma colaborativa. 3

Historia

Cdigo Fortran en una tarjeta perforada, mostrando el uso especializado de las columnas 1-5, 6 y 73-80. Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje especfico conocido como cdigo mquina, el cual la mquina comprende fcilmente, pero que lo hace excesivamente complicado para las personas. De hecho slo consiste en cadenas extensas de nmeros 0 y 1. Para facilitar el trabajo, los primeros operadores de computadoras decidieron hacer un traductor para reemplazar los 0 y 1 por palabras o abstraccin de palabras y letras provenientes del ingls; ste se conoce como lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). El lenguaje ensamblador sigue la misma estructura del lenguaje mquina, pero las letras y palabras son ms fciles de recordar y entender que los nmeros. La necesidad de recordar secuencias de programacin para las acciones usuales llev a denominarlas con nombres fciles de memorizar y asociar: ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le denomin "instrucciones", y a este conjunto de instrucciones se le llam lenguaje ensamblador. Posteriormente aparecieron diferentes lenguajes de programacin, los cuales reciben su denominacin porque tienen una estructura sintctica similar a los lenguajes escritos por los humanos, denominados tambin lenguajes de alto nivel. La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matemticas a Ada quien, despus de conocer a Charles Babbage, tradujo y ampli una descripcin de su mquina analtica. Incluso aunque Babbage nunca complet la construccin de cualquiera de sus mquinas, el trabajo que Ada realiz con stas le hizo ganarse el ttulo de primera programadora de computadoras del mundo. El nombre del lenguaje de programacin Ada fue escogido como homenaje a esta programadora. A finales de 1953, John Backus someti una propuesta a sus superiores en IBM para desarrollar una alternativa ms prctica al lenguaje ensamblador para programar la computadora central IBM 704. El histrico equipo Fortran de Backus consisti en los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.2 El primer manual para el lenguaje Fortran apareci en octubre de 1956, con el primer compilador Fortran entregado en abril de 1957. Esto era un compilador optimizado, porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su compilador pudiera generar cdigo cuyo desempeo fuera comparable al de un cdigo hecho a mano en lenguaje ensamblador. 4

En 1960, se cre COBOL, uno de los lenguajes usados an en 2010 en informtica de gestin. A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un mtodo ms eficiente para programarlas. Entonces, se crearon los lenguajes de alto nivel, como lo fue BASIC en las versiones introducidas en los microordenadores de la dcada de 1980. Mientras que una tarea tan sencilla como sumar dos nmeros puede necesitar varias instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastar una sola sentencia. Elementos Todos los lenguajes de programacin tienen algunos elementos de formacin primitivos para la descripcin de los datos y de los procesos o transformaciones aplicadas a estos datos (tal como la suma de dos nmeros o la seleccin de un elemento que forma parte de una coleccin). Estos elementos primitivos son definidos por reglas sintcticas y semnticas que describen su estructura y significado respectivamente. Sintaxis

Con frecuencia se resaltan los elementos de la sintaxis con colores diferentes para facilitar su lectura. Este ejemplo est escrito en Python. A la forma visible de un lenguaje de programacin se le conoce como sintaxis. La mayora de los lenguajes de programacin son puramente textuales, es decir, utilizan secuencias de texto que incluyen palabras, nmeros y puntuacin, de manera similar a los lenguajes naturales escritos. Por otra parte, hay algunos lenguajes de programacin que son ms grficos en su naturaleza, utilizando relaciones visuales entre smbolos para especificar un programa. La sintaxis de un lenguaje de programacin describe las combinaciones posibles de los smbolos que forman un programa sintcticamente correcto. El significado que se le da a una combinacin de smbolos es manejado por su semntica (ya sea formal o como parte del cdigo duro de la 5

referencia de implementacin). Dado que la mayora de los lenguajes son textuales, este artculo trata de la sintaxis textual. La sintaxis de los lenguajes de programacin es definida generalmente utilizando una combinacin de expresiones regulares (para la estructura lxica) y la Notacin de Backus-Naur (para la estructura gramtica). Este es un ejemplo de una gramtica simple, tomada de Lisp: expresin ::= tomo | lista tomo ::= nmero | smbolo nmero ::= [+-]?['0'-'9']+ smbolo ::= ['A'-'Z''a'-'z'].* lista ::= '(' expresin* ')' Con esta gramtica se especifica lo siguiente:

una expresin puede ser un tomo o una lista; un tomo puede ser un nmero o un smbolo; un nmero es una secuencia continua de uno o ms dgitos decimales, precedido opcionalmente por un signo ms o un signo menos; un smbolo es una letra seguida de cero o ms caracteres (excluyendo espacios); y una lista es un par de parntesis que abren y cierran, con cero o ms expresiones en medio.

Algunos ejemplos de secuencias bien formadas de acuerdo a esta gramtica: '12345', '()', '(a b c232 (1))' No todos los programas sintcticamente correctos son semnticamente correctos. Muchos programas sintcticamente correctos tienen inconsistencias con las reglas del lenguaje; y pueden (dependiendo de la especificacin del lenguaje y la solidez de la implementacin) resultar en un error de traduccin o ejecucin. En algunos casos, tales programas pueden exhibir un comportamiento indefinido. Adems, incluso cuando un programa est bien definido dentro de un lenguaje, todava puede tener un significado que no es el que la persona que lo escribi estaba tratando de construir. Usando el lenguaje natural, por ejemplo, puede no ser posible asignarle significado a una oracin gramaticalmente vlida o la oracin puede ser falsa:

"Las ideas verdes y descoloridas duermen furiosamente" es una oracin bien formada gramaticalmente pero no tiene significado comnmente aceptado. "Juan es un soltero casado" tambin est bien formada gramaticalmente pero expresa un significado que no puede ser verdadero.

El siguiente fragmento en el lenguaje C es sintcticamente correcto, pero ejecuta una operacin que no est definida semnticamente (dado que p es un apuntador nulo, las operaciones p->real y p->im no tienen ningn significado):

6

complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im); Si la declaracin de tipo de la primera lnea fuera omitida, el programa disparara un error de compilacin, pues la variable "p" no estara definida. Pero el programa sera sintcticamente correcto todava, dado que las declaraciones de tipo proveen informacin semntica solamente. La gramtica necesaria para especificar un lenguaje de programacin puede ser clasificada por su posicin en la Jerarqua de Chomsky. La sintaxis de la mayora de los lenguajes de programacin puede ser especificada utilizando una gramtica Tipo-2, es decir, son gramticas libres de contexto. Algunos lenguajes, incluyendo a Perl y a Lisp, contienen construcciones que permiten la ejecucin durante la fase de anlisis. Los lenguajes que permiten construcciones que permiten al programador alterar el comportamiento de un analizador hacen del anlisis de la sintaxis un problema sin decisin nica, y generalmente oscurecen la separacin entre anlisis y ejecucin. En contraste con el sistema de macros de Lisp y los bloques BEGIN de Perl, que pueden tener clculos generales, las macros de C son meros reemplazos de cadenas, y no requieren ejecucin de cdigo. Semntica esttica La semntica esttica define las restricciones sobre la estructura de los textos vlidos que resulta imposible o muy difcil expresar mediante formalismos sintcticos estndar. Para los lenguajes compilados, la semntica esttica bsicamente incluye las reglas semnticas que se pueden verificar en el momento de compilar. 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. Muchas restricciones importantes de este tipo, como la validacin de que los identificadores sean usados en los contextos apropiados (por ejemplo no sumar un entero al nombre de una funcin), o que las llamadas a subrutinas tengan el nmero y tipo de parmetros adecuado, puede ser implementadas definindolas como reglas en una lgica conocida como sistema de tipos. Otras formas de anlisis estticos, como los anlisis de flujo de datos, tambin pueden ser parte de la semntica esttica. Nuevos lenguajes de programacin como Java y C# tienen un anlisis definido de asignaciones, una forma de anlisis de flujo de datos, como parte de su semntica esttica. Sistema de tipos Un sistema de tipos define la manera en la cual un lenguaje de programacin clasifica los valores y expresiones en tipos, como pueden ser manipulados dichos tipos y como interactan. 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 cuestin, detectando ciertas operaciones invlidas. Cualquier sistema de tipos decidible tiene sus ventajas y desventajas: mientras por un lado rechaza muchos programas incorrectos, tambin prohbe algunos programas correctos aunque poco comunes. Para poder minimizar esta desventaja, algunos lenguajes incluyen lagunas de tipos, conversiones explcitas no checadas que pueden ser usadas por el programador para permitir explcitamente una operacin normalmente no permitida entre diferentes tipos. En la mayora de los lenguajes con tipos, el sistema de tipos es usado solamente para checar los tipos de los programas, pero varios lenguajes, generalmente funcionales, llevan a cabo lo que se conoce como inferencia de tipos, que le quita al programador la tarea de especificar los tipos. Al diseo y estudio formal de los sistemas de tipos se le conoce como teora de tipos. 7

Lenguajes tipados versus lenguajes no tipados Se dice que un lenguaje tiene tipos si la especificacin de cada operacin define tipos de datos para los cuales la operacin es aplicable, con la implicacin de que no es aplicable a otros tipos. Por ejemplo, "este texto entre comillas" es una cadena. En la mayora de los lenguajes de programacin, dividir un nmero por una cadena no tiene ningn significado. Por tanto, la mayora de los lenguajes de programacin modernos rechazaran cualquier intento de ejecutar dicha operacin por parte de algn programa. En algunos lenguajes, estas operaciones sin significado son detectadas cuando el programa es compilado (validacin de tipos "esttica") y son rechazadas por el compilador, mientras en otros son detectadas cuando el programa es ejecutado (validacin de tipos "dinmica") y se genera una excepcin en tiempo de ejecucin. Un caso especial de lenguajes de tipo son los lenguajes de tipo sencillo. Estos son con frecuencia lenguajes de marcado o de scripts, como REXX o SGML, y solamente cuentan con un tipo de datos; comnmente cadenas de caracteres que luego son usadas tanto para datos numricos como simblicos. En contraste, un lenguaje sin tipos, como la mayora de los lenguajes ensambladores, permiten que cualquier operacin se aplique a cualquier dato, que por lo general se consideran secuencias de bits de varias longitudes. Lenguajes de alto nivel sin datos incluyen BCPL y algunas variedades de Forth. En la prctica, aunque pocos lenguajes son considerados con tipo desde el punto de vista de la teora de tipos (es decir, que verifican o rechazan todas las operaciones), la mayora de los lenguajes modernos ofrecen algn grado de manejo de tipos. Si bien muchos lenguajes de produccin proveen medios para brincarse o subvertir el sistema de tipos. Tipos estticos versus tipos dinmicos En lenguajes con tipos estticos se determina el tipo de todas las expresiones antes de la ejecucin del programa (tpicamente al compilar). Por ejemplo, 1 y (2+2) son expresiones enteras; no pueden ser pasadas a una funcin que espera una cadena, ni pueden guardarse en una variable que est definida como fecha. Los lenguajes con tipos estticos pueden manejar tipos explcitos o tipos inferidos. En el primer caso, el programador debe escribir los tipos en determinadas posiciones textuales. En el segundo caso, el compilador infiere los tipos de las expresiones y las declaraciones de acuerdo al contexto. La mayora de los lenguajes populares con tipos estticos, tales como C++, C# y Java, manejan tipos explcitos. Inferencia total de los tipos suele asociarse con lenguajes menos populares, tales como Haskell y ML. Sin embargo, muchos lenguajes de tipos explcitos permiten inferencias parciales de tipo; tanto Java y C#, por ejemplo, infieren tipos en un nmero limitado de casos. Los lenguajes con tipos dinmicos determinan la validez de los tipos involucrados en las operaciones durante la ejecucin del programa. En otras palabras, los tipos estn asociados con valores en ejecucin en lugar de expresiones textuales. Como en el caso de lenguajes con tipos inferidos, los lenguajes con tipos dinmicos no requieren que el programador escriba los tipos de las expresiones. Entre otras cosas, esto permite que una misma variable se pueda asociar con valores de tipos distintos en diferentes momentos de la ejecucin de un programa. Sin embargo, 8

los errores de tipo no pueden ser detectados automticamente hasta que se ejecuta el cdigo, dificultando la depuracin de los programas. Ruby, Lisp, JavaScript y Python son lenguajes con tipos dinmicos. Tipos dbiles y tipos fuertes Los lenguajes dbilmente tipados permiten que un valor de un tipo pueda ser tratado como de otro tipo, por ejemplo una cadena puede ser operada como un nmero. Esto puede ser til a veces, pero tambin puede permitir ciertos tipos de fallas que no pueden ser detectadas durante la compilacin o a veces ni siquiera durante la ejecucin. Los lenguajes fuertemente tipados evitan que pase lo anterior. Cualquier intento de llevar a cabo una operacin sobre el tipo equivocado dispara un error. A los lenguajes con tipos fuertes se les suele llamar de tipos seguros. Lenguajes con tipos dbiles como Perl y JavaScript permiten un gran nmero de conversiones de tipo implcitas. Por ejemplo en JavaScript la expresin 2 * x convierte implcitamente x a un nmero, y esta conversin es exitosa inclusive cuando x es null, undefined, un Array o una cadena de letras. Estas conversiones implcitas son tiles con frecuencia, pero tambin pueden ocultar errores de programacin. Las caractersticas de estticos y fuertes son ahora generalmente consideradas conceptos ortogonales, pero su trato en diferentes textos varia. Algunos utilizan el trmino de tipos fuertes para referirse a tipos fuertemente estticos o, para aumentar la confusin, simplemente como equivalencia de tipos estticos. De tal manera que C ha sido llamado tanto lenguaje de tipos fuertes como lenguaje de tipos estticos dbiles. Implementacin

Cdigo fuente de un programa escrito en el lenguaje de programacin Java. La implementacin de un lenguaje es la que provee una manera de que se ejecute un programa para una determinada combinacin de software y hardware. Existen bsicamente dos maneras de implementar un lenguaje: compilacin e interpretacin. 9

Compilacin: es el proceso que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz interpretar. Los programas traductores que pueden realizar esta operacin se llaman compiladores. stos, como los programas ensambladores avanzados, pueden generar muchas lneas de cdigo de mquina por cada proposicin del programa fuente. Interpretacin: es una asignacin de significados a las frmulas bien formadas de un lenguaje formal. Como los lenguajes formales pueden definirse en trminos puramente sintcticos, sus frmulas bien formadas pueden no ser ms que cadenas de smbolos sin ningn significado. Una interpretacin otorga significado a esas frmulas.

Se puede tambin utilizar una alternativa para traducir lenguajes de alto nivel. En lugar de traducir el programa fuente y grabar en forma permanente el cdigo objeto que se produce durante la compilacin para utilizarlo en una ejecucin futura, el programador slo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuacin, un programa intrprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la mquina, convierte cada proposicin del programa fuente en lenguaje de mquina conforme vaya siendo necesario durante el procesamiento de los datos. El cdigo objeto no se graba para utilizarlo posteriormente. La siguiente vez que se utilice una instruccin, se la deber interpretar otra vez y traducir a lenguaje mquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo o bucle, cada instruccin del bucle tendr que volver a ser interpretada en cada ejecucin repetida del ciclo, lo cual hace que el programa sea ms lento en tiempo de ejecucin (porque se va revisando el cdigo en tiempo de ejecucin) pero ms rpido en tiempo de diseo (porque no se tiene que estar compilando a cada momento el cdigo completo). El intrprete elimina la necesidad de realizar una compilacin despus de cada modificacin del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelacin deber ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una ejecucin del cdigo. La mayora de lenguajes de alto nivel permiten la programacin multipropsito, sin embargo, muchos de ellos fueron diseados para permitir programacin dedicada, como lo fue el Pascal con las matemticas en su comienzo. Tambin se han implementado lenguajes educativos infantiles como Logo que mediante una serie de simples instrucciones. En el mbito de infraestructura de Internet, cabe destacar a Perl con un poderoso sistema de procesamiento de texto y una enorme coleccin de mdulos. Tcnica

Libros sobre diversos lenguajes de programacin. 10

Para escribir programas que proporcionen los mejores resultados, cabe tener en cuenta una serie de detalles.

Correccin. Un programa es correcto si hace lo que debe hacer tal y como se estableci en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qu debe hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace. Claridad. Es muy importante que el programa sea lo ms claro y legible posible, para facilitar as su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, as como cuidar el estilo en la edicin; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de creacin como en las fases posteriores de correccin de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es an ms necesaria para que otros programadores puedan continuar el trabajo fcilmente. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de cdigo. Otros, por diversin o para impedir un anlisis cmodo a otros programadores, recurren al uso de cdigo ofuscado. Eficiencia. Se trata de que el programa, adems de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que tambin pueden ser de consideracin al obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, trfico de red que genera, etc.). Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquella en la que se elabor. La portabilidad es una caracterstica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux ejecutarse tambin en la familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a ms usuarios ms fcilmente.

Paradigmas Los programas se pueden clasificar por el paradigma del lenguaje que se use para producirlos. Los principales paradigmas son: imperativos, declarativos y orientacin a objetos. Los programas que usan un lenguaje imperativo especifican un algoritmo, usan declaraciones, expresiones y sentencias.3 Una declaracin asocia un nombre de variable con un tipo de dato, por ejemplo: var x: integer;. Una expresin contiene un valor, por ejemplo: 2 + 2 contiene el valor 4. Finalmente, una sentencia debe asignar una expresin a una variable o usar el valor de una variable para alterar el flujo de un programa, por ejemplo: x := 2 + 2; if x == 4 then haz_algo();. Una crtica comn en los lenguajes imperativos es el efecto de las sentencias de asignacin sobre una clase de variables llamadas "no locales".4

11

Los programas que usan un lenguaje declarativo especifican las propiedades que la salida debe conocer y no especifica cualquier detalle de implementacin. Dos amplias categoras de lenguajes declarativos son los lenguajes funcionales y los lenguajes lgicos. Los lenguajes funcionales no permiten asignaciones de variables no locales, as, se hacen ms fcil, por ejemplo, programas como funciones matemticas.4 El principio detrs de los lenguajes lgicos es definir el problema que se quiere resolver (el objetivo) y dejar los detalles de la solucin al sistema.5 El objetivo es definido dando una lista de sub-objetivos. Cada sub-objetivo tambin se define dando una lista de sus sub-objetivos, etc. Si al tratar de buscar una solucin, una ruta de sub-objetivos falla, entonces tal sub-objetivo se descarta y sistemticamente se prueba otra ruta. La forma en la cual se programa puede ser por medio de texto o de forma visual. En la programacin visual los elementos son manipulados grficamente en vez de especificarse por medio de texto. Instruccin (informtica) Instruccin en informtica, se le llama a un conjunto de datos insertados en una secuencia estructurada o especfica que el procesador interpreta y ejecuta. Los tipos de instruccin permitidos estn definidos y determinados dentro de cada plataforma en el conjunto de instrucciones (en ingls ISA, instruction set architecture), que tambin determina los registros de origen y destino de la CPU, y en ocasiones un dato inmediato (aquellos que son especificados explcitamente en la instruccin). Campos Normalmente una instruccin se divide en dos campos:

Cdigo de operacin: Designa la operacin que va a ser realizada. En lenguaje ensamblador, se asigna a su valor numrico un mnemnico. Por ejemplo, en el MIPS tenemos una instruccin con el cdigo de operacin 0224x en lenguaje ensamblador es la operacin add. Datos de la operacin: Dependiendo del tipo de instruccin, este campo puede estar dividido en otros o ser nico, incluso no existir. En el se suelen indicar los registros y datos con los que trabajar.

El tamao (longitud en bits) de la instruccin depende de cada arquitectura, pudiendo variar de 4 hasta 128 bits. La instruccin debe almacenarse temporalmente (en el registro de instruccin, RI) para que la CPU analice su contenido y extraiga los datos que la forman. A este paso se le llama decodificacin. Tipos

Instrucciones de transferencia de datos: en este tipo de instrucciones, se transfieren datos desde una localizacin a otra. Los pasos que se siguen para realizarlo son:

12

1. 2. 3. 4.

Determinacin de las direcciones de origen y destino de memoria. Realizacin de la transformacin de memoria virtual a memoria real. Comprobacin de la cach. Inicio del proceso de lectura/escritura en la memoria. Instrucciones aritmticas: pueden implicar transferencia de datos antes y/o despus. Realizan operaciones aritmticas de las que se encarga la ALU. Se pueden clasificar en de 1 operando (valor absoluto, negacin) y 2 operandos (suma, resta). Instrucciones lgicas: al igual que las aritmticas, la ALU se encarga de realizar estas operaciones, que en este caso son de tipo lgico. Instrucciones de Conversin: similares a las aritmticas y lgicas. Pueden implicar lgica especial para realizar la conversin. Instrucciones de transferencia de control: actualizan el contador de programa (PC). Administran las llamadas/retornos a las subrutinas, el paso de parmetros y el enlazado. Instrucciones de E/S (entrada/salida): administran los comandos de entrada/salida. Si hay un mapa de memoria de entrada/salida, determina la direccin de este mapa de memoria.

1.2. Definicin de programa Programa informtico Un programa informtico es un conjunto de instrucciones que una vez ejecutadas realizarn una o varias tareas en una computadora. Sin programas, estas mquinas no pueden funcionar.1 2 Al conjunto general de programas, se le denomina software, que ms genricamente se refiere al equipamiento lgico o soporte lgico de una computadora digital. En informtica, se los denomina comnmente binarios, (propio en sistemas Unix, donde debido a la estructura de este ltimo, los ficheros no necesitan hacer uso de extensiones. Posteriormente, los presentaron como ficheros ejecutables, con extensin .exe, en los sistemas operativos de la familia Windows) debido a que una vez que han pasado por el proceso de compilacin y han sido creados, las instrucciones que se escribieron en un lenguaje de programacin que los humanos usan para escribirlos con mayor facilidad, se han traducido al nico idioma que la mquina comprende, combinaciones de ceros y unos llamada cdigo mquina. El mismo trmino, puede referirse tanto a un programa ejecutable, como a su cdigo fuente, el cual es transformado en un binario cuando es compilado. Generalmente el cdigo fuente lo escriben profesionales conocidos como programadores. 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. Cuando se pide que el programa sea ejecutado, el procesador ejecuta instruccin por instruccin. De acuerdo a sus funciones, se clasifican en software de sistema y software de aplicacin. En los computadores actuales, al hecho de ejecutar varios programas de forma simultnea y eficiente, se le conoce como multitarea. Definicin General, Tecnologa Definicin de programa

13

Definicin de programa El trmino programa (del latn programma, que a su vez proviene de un vocablo griego) tiene mltiples usos. Puede ser la previa declaracin de lo que se piensa hacer en alguna materia u ocasin; el tema que se da para un discurso; el sistema y distribucin de las materias de un curso o asignatura; y el anuncio o exposicin de las partes de que se han de componer ciertos actos o espectculos. Un programa tambin es una unidad temtica que constituye una emisin de televisin o de radio, o el conjunto unitario de instrucciones que permite a una computadora realizar funciones diversas. En este sentido, un programa informtico o software es algo necesario para el funcionamiento de una computadora. Puede ser tanto un programa ejecutable como su cdigo fuente, que es escrito por los programadores. Por otra parte, segn sus funciones, un programa puede ser clasificado como un software de sistema o un software de aplicacin. En cuanto al programa de TV o radio, es un conjunto de emisiones peridicas que se agrupan bajo un ttulo comn y que ofrece contenidos a modo de bloque. Por ltimo, cabe destacar que un programa de desarrollo es la nocin que permite nombrar a la serie de acciones organizadas con el objetivo de mejorar las condiciones de vida en una regin. Estos programas tambin son conocidos como de desarrollo econmico y social. Existen distintas agencias de cooperacin internacional que apoyan y financian los programas de desarrollo en los pases ms pobres del mundo. En la informtica, un programa de aplicacin es un tipo de software diseado para facilitar al usuario la concrecin de un cierto trabajo. Esta caracterstica lo diferencia de otros tipos de programas, como los sistemas operativos (que son los que hacen funcionar a la computadora), los lenguajes de programacin (que permiten crear los programas informticos en general) y las utilidades (que realizan tareas de mantenimiento o de uso general).

14

El software es el equipamiento intangible y lgico de una computadora. El hardware, en cambio, es el soporte material y fsico. Se dice que los sistemas operativos funcionan como el enlace entre el software y el hardware. Los procesadores de texto, las hojas de clculo y las bases de datos son programas de aplicacin. Esto demuestra que las aplicaciones informticas posibilitan la automatizacin de tareas como la contabilidad o la redaccin de documentos. En ocasiones, los programas de aplicacin son desarrollados a medida, es decir, a pedido del usuario. Por eso, el software permite resolver un problema especfico. En otros casos, se trata de paquetes integrados que resuelven problemas generales e incluyen varias aplicaciones. Por ejemplo, un paquete de oficina combina aplicaciones como procesadores de textos y hojas de clculo. Cabe destacar que el paquete o suite de oficina ms conocido es Office, una creacin de Microsoft. Esta empresa, fundada en 1975 por Bill Gates y Paul Allen, es la compaa de software ms grande del mundo. Su actividad no se agota en los programas de aplicacin, sino que la empresa tambin desarrolla el sistema operativo ms popular: Windows. Definicin General, Tecnologa Definicin de programa El trmino programa (del latn programma, que a su vez proviene de un vocablo griego) tiene mltiples usos. Puede ser la previa declaracin de lo que se piensa hacer en alguna materia u ocasin; el tema que se da para un discurso; el sistema y distribucin de las materias de un curso o asignatura; y el anuncio o exposicin de las partes de que se han de componer ciertos actos o espectculos.

Un programa tambin es una unidad temtica que constituye una emisin de televisin o de radio, o el conjunto unitario de instrucciones que permite a una computadora realizar funciones diversas.

15

En este sentido, un programa informtico o software es algo necesario para el funcionamiento de una computadora. Puede ser tanto un programa ejecutable como su cdigo fuente, que es escrito por los programadores. Por otra parte, segn sus funciones, un programa puede ser clasificado como un software de sistema o un software de aplicacin. En cuanto al programa de TV o radio, es un conjunto de emisiones peridicas que se agrupan bajo un ttulo comn y que ofrece contenidos a modo de bloque. Por ltimo, cabe destacar que un programa de desarrollo es la nocin que permite nombrar a la serie de acciones organizadas con el objetivo de mejorar las condiciones de vida en una regin. Estos programas tambin son conocidos como de desarrollo econmico y social. Existen distintas agencias de cooperacin internacional que apoyan y financian los programas de desarrollo en los pases ms pobres del mundo. 1.3. Definicin de comandos Comando (informtica) Un comando (calco del ingls command, orden, instruccin) o mandato es una instruccin u orden que el usuario proporciona a un sistema informtico, desde la lnea de comandos (como una shell) o desde una llamada de programacin. Puede ser interno (contenido en el propio intrprete) o externo (contenido en un archivo ejecutable). Suele admitir parmetros (argumentos) de entrada, lo que permite modificar su comportamiento predeterminado. Suelen indicarse tras una barra "/" (en sistemas operativos DOS) o un guion simple "-" o doble "--" (en sistemas operativos Unix). Lnea de rdenes La lnea de rdenes o consola (del ingls shell) permite al usuario escribir instrucciones, de tal modo que, despus de pulsar la tecla enter en el teclado, se ejecuten procesos internos al propio intrprete de rdenes o se lancen programas externos al mismo. Algunas de estas consolas son:

command.com para los sistemas basados en DOS (MS-DOS, PC-DOS, DR-DOS, FreeDOS, etc.). cmd.exe para los sistemas basados en Windows NT (Windows NT, 2000, XP, 2003 Server, Vista y 2008 Server). bash, sh, csh, ksh, etc. para los sistemas basados en Unix (GNU/Linux, *BSD, Solaris, etc.).

En realidad, la lnea de comandos (o lnea de rdenes) no es ms que una de las formas en que el ordenador interacciona con el usuario. Ahora se puede interactuar con el ordenador de formas mucho ms sencillas, por ejemplo mediante el ratn, o mediante una pantalla tctil. Sin embargo, hace unos cuantos aos la nica forma de comunicarse era mediante esta lnea de rdenes. En ella, los usuarios escriban la instruccin o el programa que deseaban que fuera ejecutado por el ordenador. 16

Esta interaccin la lleva a cabo un programa que se suele llamar intrprete de comandos o intrprete de rdenes. A continuacin se explica ms en detalle en qu consiste este programa. Por ejemplo, en los sistemas de Microsoft, puede ejecutarse el intrprete pusando en inicio, ejecutar: cmd En linux, es suficiente con seleccionar la aplicacin de consola (identificada mediante una ventana) e inmediatamente se lanza el intrprete de rdenes (en la actualidad suele ser el bash, aunque esto puede modificarlo el usuario) En la actualidad la interaccin mediante la lnea de rdenes es bastante ms sencilla que con los primeros intrpretes, ya que ahora es muy fcil editar la lnea para realizar modificaciones y llevar un histrico de las rdenes introducidas (pulsando con la flecha hacia arriba, las veces deseadas, del teclado se obtinen las rdenes introducidas anteriormente y tambin se puede utilizar la flecha hacia abajo; de este modo es muy cmodo ver el histrico de las rdenes introducidas) Intrprete de rdenes

Intrprete de comandos de MS-DOS Las lneas de rdenes que escribe el usuario no se ejecutan tal como se han escrito, son modificadas antes de su ejecucin. Imaginar por ejemplo la orden: DELETE *.TXT El encargado de recibir la lnea que escribe el usuario, modificarla, ejecutarla o solicitar su ejecucin es el denominado intrprete de rdenes o shell del sistema. El intrprete de rdenes es un programa de estructura repetitiva, cuyas funciones principales son las siguientes: 1. 2. 3. 4. 5. Muestra el prompt del sistema. Expande los caracteres genricos tales como el astersco o la interrogacin. Realiza los redireccionamientos tanto de la entrada de datos, como de las salidas. Si es una orden interna, lo ejecuta. Si es una orden externa (un programa), intenta localizar recorriendo la lista de directorios de la variable PATH y si lo encuentra solicita su ejecucin al sistema operativo. 6. En caso contrario indica que no puede ejecutar dicha orden. Inicio de la ejecucin del intrprete de comandos en Windows Para iniciar el funcionamiento del intrprete de rdenes en Windows, basta seleccionar Inicio/Ejecutar y escribir 'CMD' y pulsar Intro. De este modo se inicia una sesin utilizando el intrprete. Escribir HELP y pulsar INTRO para obtener ayuda. 17

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

18

Para su localizacin, el intrprete los busca en una serie de directorios, en concreto aquellos que estn indicados en la varible PATH. Ejemplo: ./keyboard 1.4. Definicin de instruccin Instruccin (informtica) Instruccin en informtica, se le llama a un conjunto de datos insertados en una secuencia estructurada o especfica que el procesador interpreta y ejecuta. Los tipos de instruccin permitidos estn definidos y determinados dentro de cada plataforma en el conjunto de instrucciones (en ingls ISA, instruction set architecture), que tambin determina los registros de origen y destino de la CPU, y en ocasiones un dato inmediato (aquellos que son especificados explcitamente en la instruccin). Campos Normalmente una instruccin se divide en dos campos:

Cdigo de operacin: Designa la operacin que va a ser realizada. En lenguaje ensamblador, se asigna a su valor numrico un mnemnico. Por ejemplo, en el MIPS tenemos una instruccin con el cdigo de operacin 0224x en lenguaje ensamblador es la operacin add. Datos de la operacin: Dependiendo del tipo de instruccin, este campo puede estar dividido en otros o ser nico, incluso no existir. En el se suelen indicar los registros y datos con los que trabajar.

El tamao (longitud en bits) de la instruccin depende de cada arquitectura, pudiendo variar de 4 hasta 128 bits. La instruccin debe almacenarse temporalmente (en el registro de instruccin, RI) para que la CPU analice su contenido y extraiga los datos que la forman. A este paso se le llama decodificacin. Tipos

Instrucciones de transferencia de datos: en este tipo de instrucciones, se transfieren datos desde una localizacin a otra. Los pasos que se siguen para realizarlo son: Determinacin de las direcciones de origen y destino de memoria. Realizacin de la transformacin de memoria virtual a memoria real. Comprobacin de la cach. Inicio del proceso de lectura/escritura en la memoria. 19

1. 2. 3. 4.

Instrucciones aritmticas: pueden implicar transferencia de datos antes y/o despus. Realizan operaciones aritmticas de las que se encarga la ALU. Se pueden clasificar en de 1 operando (valor absoluto, negacin) y 2 operandos (suma, resta). Instrucciones lgicas: al igual que las aritmticas, la ALU se encarga de realizar estas operaciones, que en este caso son de tipo lgico. Instrucciones de Conversin: similares a las aritmticas y lgicas. Pueden implicar lgica especial para realizar la conversin. Instrucciones de transferencia de control: actualizan el contador de programa (PC). Administran las llamadas/retornos a las subrutinas, el paso de parmetros y el enlazado. Instrucciones de E/S (entrada/salida): administran los comandos de entrada/salida. Si hay un mapa de memoria de entrada/salida, determina la direccin de este mapa de memoria.

Conjunto de instrucciones Un conjunto de instrucciones o repertorio de instrucciones, juego de instrucciones o ISA (del ingls Instruction Set Architecture, Arquitectura del Conjunto de Instrucciones) es una especificacin que detalla las instrucciones que una CPU de un ordenador puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseo particular de una CPU. El trmino describe los aspectos del procesador generalmente visibles a un programador, incluyendo los tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros aspectos. Existe principalmente de 3 tipos: CISC (Complex Instruction Set Computer), RISC (Reduced Instruction Set Computer) y SISC (Simple Instruction Set Computing). La arquitectura del conjunto de instrucciones (ISA) se emplea a veces para distinguir este conjunto de caractersticas de la microarquitectura, que son los elementos y tcnicas que se emplean para implementar el conjunto de instrucciones. Entre estos elementos se encuentras las microinstrucciones y los sistemas de cach. Procesadores con diferentes diseos internos pueden compartir un conjunto de instrucciones; por ejemplo el Intel Pentium y AMD Athlon implementan versiones casi idnticas del conjunto de instrucciones x86, aunque tienen diseos internos completamente opuestos. El lenguaje mquina El lenguaje mquina est construido a partir de los estados discretos o instrucciones. En la arquitectura de procesamiento, una instruccin dada puede especificar:

Registros particulares para operaciones aritmticas, de direccionamiento o de control. Ubicaciones particulares de memoria Modos de direccionamiento para interpretar operandos

Las operaciones ms complejas se construyen a partir de estas, que(en una mquina Von Neumann) se ejecutan secuencialmente, o segn el control de flujo. Muchas o pocas de las operaciones disponibles incluidas en la mayora de conjuntos son: 20

Desplazamiento o Establecer un registro a un valor constante o Mover datos desde una posicin de memoria a un registro y viceversa. Esto se realiza para obtener datos para operaciones matemticas y su almacenamiento. o Leer y escribir datos desde dispositivos de hardware Operaciones matemticas o Sumar, restar, multiplicar o dividir dos registros y colocar el resultado en alguno de ellos. o Realizar operaciones bit a bit, teniendo el AND y el OR de cada bit en un par de registros, o el NOT de cada bit en un registro. o Comparar dos valores que se encuentren en registros(por ejemplo, si son iguales o si uno es mayor que otro) Afectan al flujo de programa o Saltar a otra posicin del programa y ejecutar instrucciones all. o Saltar a otra posicin si se cumple cierta condicin o Saltar a otra posicin, pero salvando la posicin actual para poder volver (realizar una llamada, por ejemplo call printf)

Algunos ordenadores incluyen instrucciones "complejas". Dichas instrucciones pueden tomar muchas instrucciones en otros equipos. Estas se caracterizan por instrucciones que necesitan varios pasos, como el control de mltiples unidades funcionales. Algunos ejemplos son:

Ahorro de registros en la pila Mover grandes bloques de memoria Complejas operaciones and/or con arittica de coma flotante, tales como el seno o la raz cuadrada. Instrucciones que combinan ALU con un operando de la memoria mas que de registros.

Un tipo complejo de la instruccin que ha llegado a ser particularmente popular recientemente es SIMD o Simple_Instruccin_Multiplos_Datos, una operacin que realice la misma operacin aritmtica en pedazos mltiples de datos al mismo tiempo. SIMD tienen la capacidad de manipular vectores y matrices grandes en tiempo mnimo. Las instrucciones de SIMD permiten la paralelizacin fcil de los algoritmos implicados comnmente en sonido, imagen, y el proceso video. Varias implementaciones de SIMD se han trado al mercado bajo nombres comerciales tales como MMX, 3DNow! y AltiVec. El diseo de sistemas de instruccin es una edicin compleja. Haba dos etapas en la historia para el microprocesador. El primer era el CISC (Complex Instruction Set Computer) que tena muchas instrucciones diferentes. En los aos 70 IBM hicieron la investigacin y encontraron que muchas instrucciones en el sistema podran ser eliminadas. El resultado era el RISC (Reduced Instruction Set Computer), una arquitectura que utiliza un sistema ms pequeo de instrucciones. Un conjunto de instruccin ms simple puede ofrecer el potencial para velocidades ms altas, tamao reducido del procesador, y consumo de energa reducido. Sin embargo, un conjunto ms complejo puede optimizar operaciones comunes, mejorar memoria/eficiencia de cache, o simplificar la programacin.

21

Implementacin del conjunto de instrucciones Cualquier conjunto de instrucciones se puede implementar de varias maneras. Todas las maneras de implementar un conjunto de instrucciones dan el mismo modelo programado, y todas pueden hacer funcionar los mismos ejecutables binarios. Las varias maneras de implementar un conjunto de instrucciones dan diversas compensaciones entre el coste, el funcionamiento, el consumo de energa, el tamao, el etc. Al disear microarquitecturas, los ingenieros usaron bloques de circuitos electrnicos duramenteconectados (diseado a menudo por separado) por ejemplo l, los multiplexores, los contadores, los registros, ALUs etc. Un cierto tipo del lenguaje de transferencia de registros es a menudo usado para describir la codificacin y la secuencia de cada instruccin de ISA usando esta microarquitectura fsica. Hay tambin algunos nuevos diseos de CPU que compilan el conjunto de instruccin a una RAM escribible o FLASH dentro de la CPU (tal como el procesador Recursiv y el Imsys Cjip), o FPGA (computacin reconfigurable). Western Digital MCP-1600 es un ejemplo antiguo, usando una ROM dedicada, separada del microcdigo. ISA se puede tambin emular en software por un intrprete. Naturalmente, debido a la interpretacin de overhead, es ms lento que ejecutar programas directamente sobre el hardware emulado. Hoy, es prctica para los vendedores de nuevos ISAs o microarchitectures poner emuladores del software a disposicin de los desarolladores de programas informticos antes de que la implementacin del hardware est lista. Los detalles de la implemetacin tienen una influencia fuerte en las instrucciones particulares seleccionadas para el conjunto de instruccin. Por ejemplo, muchas implementaciones de la instruccin pipline permiten solamente una carga de memoria (load) o almacn en memoria (store) por instruccin, llevando a carga-almacena arquitectura (RISC). Por otro ejemplo, algunas maneras de implementar la instruccin pipline llevaron a una ranura de retardo. La demanda de procesamiento de seal digital de alta velocidad han empujado en el sentido coontrario- forzando la implementacin de instruccin de manera particular. Por ejemplo, para realizar los filtros digitales es bastante insuficiente, la instruccin del MAC en un procesador tpico de seal digital (DSP) se debe implementar usando una arquitectura de Harvard que pueda traer una instruccin y dos palabras de datos simultneamente, y requiere un solo ciclo. Diseo del conjunto de instrucciones La densidad del cdigo En computadoras antiguas, la memoria del programa era costosa, as que minimizar el tamao de un programa para asegurar que va a caber en la memoria limitada era a menudo central. As el tamao combinado de todas las instrucciones necesit realizar una tarea particular, la densidad del cdigo, era una caracterstica importante de cualquier sistema de instruccin. Las computadoras con alta densidad del cdigo tambin tenan a menudo instrucciones complejas para la entrada del procedimiento, los retornos parametrizados, los lazos etc. Sin embargo, " 22

instrucciones CISC" combinan simplemente una operacin bsica de la ALU, tal como " add", con el acceso de uno o ms operandos en memoria (usando modos de direccin tales como directo, indirecto, ndexado). Ciertas arquitecturas pueden permitir dos o tres operandos (incluido el resultado) directamente en memoria o pueden permitir realizar funciones tales como el incremento automtico del puntero. RISC, fueron los primeros implementados con profundidad en el perodo de rpido crecimiento de las memorias de subsistemas, se reduce el cdigo con el fin de simplificar el circuito de aplicacin y con ello tratar de aumentar el rendimiento a travs de las frecuencias de reloj ms elevadas y el uso de ms registros. Las instrucciones RISC suelen realizar slo una operacin, como una "suma" de registros o una "carga" de una posicin de memoria en un registro, tambin suelen utilizar una longitud de instrucciones fijas, mientras que un conjunto de instrucciones tpicas CISC tiene instrucciones muchos ms cortas que esta longitud fija. Las instrucciones de longitud fija son menos complicadas de manejar que las instrucciones de ancho variable, por varias razones (por ejemplo: no tener que comprobar si una instruccin se extiende a ambos lados de una lnea de cach o el lmite de memoria virtual de la pgina), y por lo tanto algo ms fcil de optimizar la velocidad . Sin embargo, como los equipos RISC normalmente requieren ms y ms para implementar las instrucciones que ejecutan una determinada tarea, hacen menos ptimo el uso del ancho de banda y de la memoria cach. Las computadoras mnimas del conjunto de instrucciones (MISC) son una forma de mquina apilada, donde hay pocas instrucciones separadas (16-64), para poder caber instrucciones mltiples en una sola palabra de mquina. stos tipo de ncleos llevan a menudo poco silicio para implementarse, as que pueden ser observadas fcilmente en un FPGA o en una forma multinucleo. La densidad del cdigo es similar al RISC; la densidad creciente de la instruccin es compensada requiriendo ms de las instrucciones primitivas de hacer una tarea. Nmero de operandos El conjunto de instrucciones puede ser clasificado por el nmero mximo de operandos explcitamente especificados en las instrucciones. (en los ejemplos que siguen, a, b y c se refieren a celdas de memoria, mientras que reg1 y sucesivos se refieren a los registros de la mquina). 0-operando, tambin llamada mquina de pila: todas las operaciones aritmticas se ejecutan en la parte superior de una o dos posiciones de la pila, push y pop son las instrucciones utilizadas para acceder a la memoria: push a, push b, add, pop c. 1-operando (mquinas de una direccin), tambin llamadas mquinas de acumulador, includa en la mayora de las primeras computadoras y muchos microcontroladores pequeos: la mayora de instrucciones especifican un operando explcito a la derecha (un registro, una posicin de memoria, o una constante) y un operando a la izquierda: load a, add b, store c. 2-operando la mayora de las mquinas CISC y RISC entran en esta categora: CISC load a, reg1, add reg1, b; store reg1, c RISC - cargas que requieren la memoria explcita, las instrucciones seran: load a,reg1; load b,reg2; add reg1,reg2; store reg2,c 3-operando, permite una mejor reutilizacin de los datos: CISC - bien una sola instruccin: add a, b, c, o ms generalmente: move a,reg1; add reg1,b,c como la mayora de las mquinas se limitan a 23

dos operandos de memoria. RISC - Debido a la gran cantidad de bits necesarios para codificar los tres registros, este esquema no suele estar disponible en los procesadores RISC con pequeas instrucciones de 16 bits: load a,reg1; load b,reg2; add reg1+reg2->reg3; store reg3,c; ms operandos, algunas mquinas CISC permiten una variedad de modos de direccionamiento que permiten ms de 3 operandos (registros o accesos a memoria), como el VAX "POLY", instruccin de evaluacin de polinomio. Caractersticas que debe tener un conjunto de instrucciones Las caractersticas que se pretende que tenga un conjunto de instrucciones son cuatro, principalmente:

Completo: Que se pueda realizar en un tiempo finito cualquier tarea ejecutable con un ordenador (computable o decidible). Eficiente: Que permita alta velocidad de clculo sin exigir una elevada complejidad en su UC y ALU y sin consumir excesivos recursos (memoria), es decir, debe cumplir su tarea en un tiempo razonable minimizando el uso de los recursos. Autocontenidas: Esto es, que contengan en s mismas toda la informacin necesaria para ejecutarse. Independientes: Que no dependan de la ejecucin de alguna otra instruccin.

Se puede comprobar que para que un conjunto de instrucciones sea completo solo se necesitan cuatro instrucciones: -> escritura -> mover a la izquierda una posicin y leer -> mover a la derecha una posicin y leer -> parar En esta idea se basan las arquitecturas RISC, no obstante, con este conjunto no se puede conseguir la eficiencia del repertorio de instrucciones por lo que en la prctica el conjunto suele ser ms amplio en aras de conseguir un mejor rendimiento, tanto en uso de recursos como en consumo de tiempo. Tipos de instrucciones y ejemplos

Transferencia de datos: Copian datos de un origen a un destino, sin modificar el origen y normalmente sin afectar a los flags o indicadores de condicin. Pueden transferir palabras, fracciones de palabras (bytes, media palabra) o bloques completos de n bytes o palabras.

24

Estas operaciones pueden ser: -> registro - registro -> registro - memoria -> memoria - registro -> memoria - memoria Nemotcnicos ms frecuentes:

move: copia el contenido de un registro(o memoria) a otro. store: copia el contenido de un registro a memoria. load: copia el contenido de una posicin de memoria a un registro. move block: copia un bloque de datos de una posicin de memoria a otra. move multiple: copia del origen en varias posiciones de memoria. exchange: intercambia el contenido de dos operandos. clear: pone a 0 el destinto. (todos los bits) set: pone a 1 el destino. (todos los bits) push: introduce un dato en la cabecera de la pila. (indicada por el SP) pop: saca un dato de la cabecera de la pila. (indicada por el SP) Instrucciones aritmticas: Son efectuadas por la ALU y suelen cambiar los flags o indicadores de condicin.

Nemotcnicos ms frecuentes:

add: Suma. add with carry: Suma con acarreo. subtract: Resta. subtract with borrow: Resta teniendo en cuenta el adeudo anterior. increment: incrementa en 1 un valor.

25

decrement: decrementa en 1 un valor. multiply: multiplica. divide: divide. extend: aumenta el operando de tamao. negate: cambia de signo. absolute: valor absoluto.

-> Pueden tener instrucciones para tratar con nmeros en BCD e incluyen operaciones en coma flotante, lo cual se identifica con una 'f' antes del nombre del nemotcnico como por ejemplo: fabsolute

Instrucciones de comparacin: Suelen preceder a una instruccin de bifurcacin condicional y modifican los flags. No hay que pensar que las instrucciones de salto condicional dependen de este repertorio, ya que lo nico que hace el salto condicional es consultar los flags y salta si precede, pero no depende de ninguna instruccin de comparacin. (de hecho cualquier operacin aritmtica realizada anteriormente a un salto condicional puede provocar que este "salte").

Nemotcnicos ms frecuentes:

compare: Resta los dos operandos pero no almacena el resultado, solo modifica los flags. test: compara un cierto valor especificado con el 0. Instrucciones lgicas: Realizan operaciones booleanas "bit a bit" entre dos operandos. Como las aritmticas tambin modifican los flags.

Nemotcnicos ms frecuentes:

and: el "y" lgico. or: el "o inclusivo" lgico. xor: el "o exclusivo" lgico. not: la negacin lgica. (complemento a 1, no confundir con el cambio de signo "negate" que es el complemento a 2) Instrucciones de Desplazamiento: Pueden ser aritmtico o lgico y pueden incluir o no rotaciones. Pueden ser de izquierda a derecha.

26

Nemotcnicos ms frecuentes:

shift: desplazamiento aritmtico o lgico. rotate: rotacin con o sin acarreo. Instrucciones de bits: Comprueban un bit del operando y su valor lo reflejan en el indicador de cero. Pueden poner un bit a 0 o complementarlo.

Nemotcnicos ms frecuentes:

bit test: comprueba un bit. bit clear: comprueba un bit y lo pone a 0. bit set: comprueba un bit y lo pone a 1. Instrucciones de control: Permiten modificar la secuencia normal de ejecucin de un programa, puede hacerse por salto condicional relativo o absoluto.

Se clasifican en cuatro grupos: -> salto incondicional -> salto condicional -> Llamada a subrutinas -> Gestin de las interrupciones

saltos: Pueden ser condicionales o incondicionales, se suelen especificar como jump o brantch, y en el caso de los condicionales se suele llamar jcond o bcond donde cond es una o ms letras que indican la condicin que ha de cumplirse para que el salto se produzca.

-> Incondicional: salta sin comprobar ninguna condicin. Nemotcnicos ms frecuentes: jump o brantch -> Condicional: salta si la condicin se cumple. Nemotcnicos ms frecuentes: jcond o bcond

Llamadas a subrutinas: Invoca la ejecucin de funciones anteriormente definidas.

Nemotcnicos ms frecuentes: call (llamada) y ret (retorno)

27

Gestin de interrupciones: Se usan para llamar a las rutinas de servicio de interrupcin y esto se puede hacer por hardware o bien por software. Necesita una instruccin similar a return para retornar al contexto anterior pero restableciendo el estado de la mquina, para no afectar a la aplicacin a la cual se interrumpi (iret). 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. Estas instrucciones pueden darse mediante dos alternativas:

->E/S "mapeada" en memoria: Los perifricos tienen direcciones asignadas de la MP por lo que no se necesitan instrucciones especiales y las operaciones se realizan con las ya vistas, como son: load, store y move. ->E/S independiente: Necesitan unas instrucciones especiales para indicarle al procesador que nos estamos refiriendo al mapa de direcciones de E/S, ya que este mapa y el mapa de memoria son disjuntos. Nemotcnicos ms frecuentes:

input o read: Pemite leer informacin de un puerto y trasladarla a memoria principal. output o write: Permite escribir informacin en un puerto de un dispositivo. test i/o: Lee informacin de control de un perifrico. control i/o: Enva informacin de control hacia un perifrico.

Instrucciones de control y miscelneas: Nemotnicos ms frecuentes:

halt: Detiene la ejecucin del programa hasta que una interrupcin arranca otro programa. wait: Sirve para deterner la ejecucin de un programa hasta que sucede un determinado evento que no es una interrupcin (otra condicin externa al primer programa). nop: No realiza ninguna operacin, sirve para rellenar huecos en un programa o temporizar esperas. enable: Habilita las interrupciones. disable: Deshabilita las interrupciones. test and set: Se utiliza para la implementacin de la exclusin mutua, esto es, que un procesador no pueda acceder a un determinado recurso que est siendo usado por otro procesador en ese mismo momento. 28

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

29

UNIDAD II ELEMENTOS DEL LENGUAJE DE PROGRAMACIN

30

2.1. Comandos del sistema 1. Introduccin En el siguiente trabajo trataremos algunos de los comandos internos y externos del sistema, he investigado y espero que lo aproveche como lo he hecho yo; es muy interesante y muy informativo. 2. Los Comandos 1~MSD Acrnimo de Microsoft Diagnostics (diagnsticos de Microsoft) Nombre que recibe la aplicacin entregada en las ltimas versiones del sistema operativo MS-DOS, que posibilita al usuario la obtencin de informacin sobre la configuracin de su equipo.. MS-DOS (Microsoft-disk operating system) Sistema operativo en disco de Microsoft sistema operativo de un solo usuario para PC de Microsoft, es casi la versin idntica de IBM, que se llama *Dos* genricamente. 2~FORMAT(comando externo) Sistema operativo de Microsoft por encargo de IBM, para equipar a los ordenadores PC que haba desarrollado. Format: comando del sistema operativo MS-DOS cuya misin es formatear las unidades de almacenamiento (discos duros y disquetes). Formatear es preparar un disco o disquete para trabajar o almacenar datos. Este tiene como objetivo dar formato al disco del driver. Este crea un nuevo directorio raz y tabla de asignacin de archivos para el disco. Tambin puede verificar si hay factores defectuosos en el disco y podr borrar toda la informacin que este contenga. Comandos 1. Definicin, ejemplo y diferencias fundamentales de los comandos bsicos internos y externos del sistema operativo.

Comandos internos: Son aquellos comandos cuyas instrucciones son cargadas a la memoria RAM. Estos comandos no necesitan la presencia del sistema operativo. Entre ellos encontramos:

CLS: tiene como funcin limpiar la pantalla. COPY: copia uno o ms archivos de un disquete a otro. Este comando tambin puede emplearse como un editor de texto. TIME: tiene como objetivo visualizar la hora del sistema o ejecutar el reloj interno de la PC. DATE: permite modificar y visualizar la fecha del sistema. 31

TIPE: visualiza el contenido de un archivo desde la lnea de comando. O ya sea las informaciones que posee un archivo en su interior. VER: su objetivo es visualizar la versin del sistema operativo en el disco. Comandos externos: Son los comandos que necesitan mucha capacidad de memoria para mantenerse para mantenerse dentro de ella al mismo tiempo, por lo tanto son grabados en el disco. Son llamados externos porque estos estn grabados fuera de la memoria RAM. Entre estos estn:

FORMAT: tiene como funcin formatear las unidades de almacenamiento (discos duros y disquete). CD: nos sirve para cambiar de escritorio. DISKCOPY: nos permite hacer una copia idntica de un disquete a otro. DELTREE: es usado para borrar un directorio raz no importa que contenga subdirectorios con todos sus contenidos. LABEL: es la etiqueta del disco. Una etiqueta es el nombre de un dato, archivo o programa. SYS: transfiere los archivos de sistema de dos ocultos para hacer un disquete que tenia para inicial.

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, en cambio los comandos externos quedan grabados fuera de la memoria RAM

MS-DOS MS-DOS (siglas de MicroSoft Disk Operating System, Sistema operativo de disco de Microsoft) es un sistema operativo para computadores basados en x86. Fue el miembro mas popular de la familia de sistemas operativos DOS de Microsoft, y el principal sistema para computadoras personales compatible con IBM PC en la dcada de 1980 y mediados de 1990, hasta que fue sustituida gradualmente por sistemas operativos que ofrecan una interfaz grfica de usuario, en particular por varias generaciones de Microsoft Windows. MS-DOS naci en 1981 al ser encargada Microsoft de producir un sistema operativo para la gama de computadores personales IBM PC de IBM. Rpidamente Microsoft compr los derechos de QDOS tambin conocido como 86-DOS,1 de Seattle Computer Products, y comenz a trabajar en las modificaciones para poder cumplir con los requerimientos de IBM. La primera edicin, MS-DOS 1.0, fue presentada en 1982.2 La versin incluida en los PC's de IBM fue conocida como PC DOS. Aunque MS-DOS y PC-DOS fueron desarrollados por Microsoft e IBM en paralelo, los dos productos se separaron con el tiempo. Historia MS-DOS se desarroll a partir de QDOS, Quick and Dirty Operating System, tambin conocido como 86-DOS. Su desarrollo se inici oficialmente en 1981 y fue lanzado en 1982 como MS-DOS 1.0. Tuvo ocho versiones principales y alcanz gran difusin pero fue gradualmente reemplazado por sistemas operativos que ofrecan una interfaz grfica de usuario (GUI), en particular, por varias generaciones del sistema operativo Microsoft Windows. 32

Versiones Disquetes de instalacin de MS-DOS 6.22

PC DOS 1.0 - Liberado en 1981 como complemento al IBM-PC. Primera versin de DOS. Soporta 16 Kb de memoria RAM, disquetes de 5,25 pulgadas de una sola cara de 160 Kb. 22 rdenes. Permite archivos con extensin .com y .exe. Incorpora el intrprete de comandos COMMAND.COM. PC DOS 1.1 - Corregidos muchos errores, soporta disquetes de doble densidad 1.25 Primera versin liberada con el nombre MS-DOS. MS-DOS 2.0 - Complemento del IBM XT liberado en 1983. Ms del doble de nuevos comandos, soporte de disco duro (alrededor de 5 MB). PC DOS 2.1 - Complemento del IBM PCjr. Aadidas algunas mejoras. MS-DOS 2.11 - Aadido soporte para otros idiomas y soporte LAN. MS-DOS 3.2 - Aadida capacidad para disquetes de 3,5 pulgadas y 720 KB. PC DOS 3.3 - Aadido soporte para el ordenador PS/2 de IBM y los nuevos disquetes de 3,5 pulgadas de alta capacidad (1,44 MB). Nuevas pginas de cdigo de caracteres internacionales aadidas, con soporte para 17 pases. MS-DOS 3.3 - Capacidad para crear particiones de disco superiores a 32 MB. Soporte de 4 puertos serie (antes slo 2). Incorporacin de la orden "Files" para poder abrir hasta 255 archivos simultneamente. MS-DOS 4.0 - Generado con el cdigo fuente de IBM, no con el de Microsoft. PC DOS 4.0 - Agregado DOS Shell, algunas mejoras y arreglos. MS-DOS 4.01 - Versin para corregir algn error. MS-DOS 5.0 - Implementado en 1991, incluyendo ms caractersticas de administracin de memoria y herramientas para soporte de macros, mejora del intrprete de rdenes o shell. MS-DOS 6.0 - Liberado en 1993, incluye soporte para Microsoft Windows, utilidades como Defrag (desfragmentacin del disco), DoubleSpace (compresin de archivos), MSBackup (copias de seguridad), MSAV (Microsoft Anti-Virus), MemMaker, etc. MS-DOS 6.2 - Versin para corregir errores. MS-DOS 6.21 - Eliminado el soporte de compresin de disco DoubleSpace. PC DOS 6.3 - Liberado en abril de 1994. MS-DOS 6.22 - ltima versin distribuida por separado. Incluido DriveSpace para sustituir a DoubleSpace. PC DOS 7.0 - Aade Stacker para reemplazar a DoubleSpace. MS-DOS 7.0 - Distribuido junto con Windows 95. Incluye soporte para nombres de archivo largos (hasta ahora haban tenido la restriccin del 8+3). MS-DOS 7.1 - Integrado en Windows 95 OSR2 y posteriormente en Windows 98 y 98 SE. Soporta sistemas de archivos FAT32. MS-DOS 8.0 - Incluido en Windows Me. Es la ltima versin de MS-DOS.

Caractersticas MS-DOS es un sistema operativo monotarea y monousuario para ordenadores personales.

33

Comandos Como usar? El MS-DOS tiene varios usos, a los cuales puedes acceder escribiendo 'cmd' dentro de 'Ejecutar'. All puedes familiarizarte usando algunos comandos bsicos como lo es 'COLOR F3' o 'HELP' por ejemplo. Puedes probar algunos de ellos y luego profundizar ms en el uso de esta herramienta dandole aplicaciones ms practicas. Comandos bsicos Aqu se muestran algunos de los comandos que utilizaba MS-DOS, y que actualmente pueden ser utilizados desde la lnea de comandos en sistemas operativos Windows. Para acceder a la ayuda de estas, MS-DOS, a partir de la versin 6.2 permite lo siguiente: comando_a_consultar /? (Ej.: copy /?). Pueden ser internos (incluidos dentro del propio COMMAND.COM) o externos (archivos ejecutables en el directorio del MSDOS): Comandos internos

CD o CHDIR - Cambia el directorio actual. o CD nombre_directorio Cambia al directorio jerrquicamente inferior. CLS - Limpia todos los comandos y toda la informacin que hay en pantalla, excepto el incitador de comandos (prompt) usualmente la letra y ruta de la unidad usada (Por ejemplo C:\>) COPY - Copiar un archivo de un directorio a otro COPY CON Copia a un archivo los caracteres introducidos en pantalla (CONsola) DIR - Lista los directorios y archivos de la unidad o directorio actual. FOR - Repite un comando PROMPT- Cambia la lnea de visualizacin de la orden. MD - Crea un nuevo directorio. RD o RMDIR- Elimina un directorio. REM - Permite insertar comentarios en archivos de proceso por lotes. REN o RENAME - Renombra archivos y directorios. SET - Asigna valores a variables de entorno. TIME - Visualiza o cambia la hora del reloj interno. TYPE - Muestra el contenido de un fichero. Se utiliza, principalmente, para ver contenidos de ficheros en formato texto. VER - Muestra la versin del Sistema Operativo. VOL - Muestra la etiqueta del disco duro y su volumen (si lo tiene). MEM - Muestra la cantidad de memoria RAM, la cantidad ocupada y la libre.

Comandos externos

ATTRIB - Sin parmetros, visualiza los atributos de los directorios y archivos. Con parmetros, cambia los atributos de directorios y archivos.

34

Los atributos de los directorios, y los ficheros son: de lectura (r), de escritura (w), de archivo (a), oculto (h), de sistema (s). Parmetros: signos (ms o menos) y letras r, w, a, y h "v". Ejemplo: Attrib +r *.* (atributo de slo lectura, para todos los ficheros de ese directorio)

APPEND - Sirve para especificar trayectorias para ficheros de datos. BACKUP - Ejecuta una copia de seguridad de uno o ms archivos de un disco duro a un disquete. CHKDSK - Verifica si hay errores en el disco duro. (Tambin se puede utilizar para corregirlos con el parmetro "/F") DELTREE - Borra un directorio sin importar que contenga subdirectorios con todos sus contenidos. DISKCOPY - Permite hacer una copia idntica de un disquete a otro, pertenece al grupo de las rdenes externas. DOSKEY - Permite mantener residentes en memoria RAM las rdenes que han sido ejecutadas en el punto indicativo. FC - Compara ficheros. FORMAT - Permite crear la estructura lgica, en una unidad fsica de almacenamiento (discos duros, disquetes y unidades de almacenamiento masivo). PRINT - Permite imprimir ficheros.

Se pueden utilizar estos parmetros combinados.

KEYB - Establece el idioma del teclado segn el parmetro adicionado (Ejemplo: KEYB SP para el teclado espaol). LABEL - Muestra o cambia la etiqueta de la unidad de disco duro. MEM - Muestra la memoria RAM, el espacio ocupado y el espacio libre. MOVE - Mueve o cambia de posicin un directorio y/o ficheros. Tambin renombra subdirectorios. SUBST - Crea una unidad lgica virtual a partir de un directorio. TREE - muestra los directorios en forma de ARBOL

Redireccionamientos

< - Re direccionamiento de la entrada estndar. Su sintaxis es comando < fichero. > - Re direccionamiento de la salida estndar. Su sintaxis es comando > fichero. Si el fichero no existe, lo crea. Si ya exista, sobreescribe su contenido. >> - Re direccionamiento de la salida estndar a un fichero existente. Su sintaxis es comando >> fichero. Si el fichero no existe, lo crea. Si ya exista, aade el resultado del comando a continuacin del contenido previo del fichero.

2.2. Variables En programacin, una variable es un espacio de memoria reservado para almacenar un valor que corresponde a un tipo de dato soportado por el lenguaje de programacin. Una variable es representada y usada a travs de una etiqueta (un nombre) que le asigna un programador o que ya viene predefinida. Por ejemplo, en la variable de nombre "num", se almacena el nmero 8 (de tipo entero). De forma 35

genrica, para utilizarla y sumarle un uno se debera programar: num = num + 1. Una variable puede ser del tipo boleano, entero, decimal de coma flotante, caracter, cadena de texto, arreglo, matriz, tipo definido por el usuario, etc. Estos son tipos de datos. Una variable, por lo general, como su nombre lo indica, puede variar su valor durante la ejecucin del programa. Dependiendo del lenguaje de programacin usado, tambin puede cambiar el tipo de dato que almacena. Una variable es un "espacio" al cual se le puede asignar diferentes valores segn nos convenga. Imaginemos que tenemos una caja a la que le ponemos un nombre para poder hacernos referencia a ella; en la que podemos guardar dentro lo que mejor nos convenga. En nuestro curso utilizaremos dos tipos de variables: numricas y de texto, ms adelante veremos sus caractersticas. Piense que, segn el tipo de lenguaje que estemos utilizando para realizar nuestro cdigo, pueden existir muchos tipos de variables diferentes. Cmo definir una variable?.- Para definir (crear) una variable siempre necesitaremos un nombre con el que nos referiremos a ella durante nuestro "programa", seguido de dos puntos (:) y a continuacin el tipo de variable que utilizamos, en nuestro caso: texto o nmero. Por ejemplo, podremos definir una variable llamada Escaln en la que guardaremos el nmero de escaln en el que se encuentra nuestro Robot en un momento determinado. Para definir esta variable deberemos escribir en nuestro cdigo: Escaln: texto. Inicializar una variable.- Antes de empezar a utilizar las variables que hemos definido, es conveniente iniciarlas (darles valores conocidos por nosotros). Para poner un valor a nuestras variables lo haremos de la siguiente manera.

Curso Avanzado de PICS Programacin de PICS en lenguaje c Seminario de programacin de PICS www.commtechcomputers.netEnlaces patrocinados Para una variable donde almacenaremos un nmero lo nico que tendremos que hacer es escribir el nombre de la variable en la que deseemos almacenar el valor, seguido de un signo igual y, a continuacin, el nmero que deseemos almacenar: Escaln = 10 Para una variable donde almacenaremos caracteres, lo nico que tendremos que hacer es escribir el nombre de la variable en la que deseemos almacenar el valor, seguido de un signo igual y a continuacin los caracteres que deseemos almacenar, pero en este caso deben ir entre comillas: NombreRobot = "Arint" (Aprovechando la ocasin vamos a bautizar a nuestro Robot, a partir de este momento le llamaremos Arint) Observe que una variable numrica y una de texto, slo se diferencian en que el valor que deseamos guardar, uno no lleva comillas y el otro s. Mire detenidamente estos dos ejemplos: Valor = 10 y Valor = "10". Los dos, en un principio, tendran el mismo valor, pero en realidad no es as. En el primer ejemplo, tendramos un nmero con el cual podramos operar, mientras que en el segundo tendramos dos caracteres, con los que no podramos operar. 36

Conceptualmente, desde el punto de vista de un programador, una variable es una entidad cuyo valor puede cambiar a lo largo de la ejecucin de un programa. En el nivel ms bajo, una variable se almacena en la memoria del ordenador. Esa memoria puede ser un conjunto de semiconductores dentro de un circuito integrado, ciertos campos magnticos sobre una superficie de un disco, ciertas polarizaciones en una memoria de ferrita, o cualquier cosa que an no se haya inventado. Afortunadamente, no deberemos preocuparnos por esos detalles. Teclado para programacin en binario. En un nivel ms lgico, una variable ocupa un espacio de memoria reservado en el ordenador para contener sus valores durante la ejecucin de un programa. Cada variable debe pertenecer a un tipo determinado, y ese tipo determina, por una parte, el tamao del espacio de memoria ocupado por la variable, y por otra, el modo en que se manipular esa memoria por el ordenador. No olvides, si es que ya lo sabas, que la informacin en el interior de la memoria del ordenador se almacena siempre de forma binaria, al menos a bajo nivel. El modo en que se interpreta la informacin almacenada en la memoria de un ordenador es, en cierto modo, arbitraria; es decir, el mismo valor puede codificar una letra, un nmero, una instruccin de programa, etc. No hay nada diferente en una posicin de memoria que contenga una instruccin de programa o una letra de un texto; si observamos una posicin de memoria cualquiera, no habr modo de saber qu significa el valor que contiene. Es mediante el tipo como le decimos al compilador el modo en que debe interpretarse y manipularse cierta informacin binaria almacenada en la memoria de un ordenador. De momento slo veremos los tipos fundamentales, que son: void, char, int, float y double, en C++ se incluye tambin el tipo bool. Tambin existen ciertos modificadores, que permiten ajustar ligeramente ciertas propiedades de cada tipo; los modificadores pueden ser: short, long, signed y unsigned, y pueden combinarse algunos de ellos. Tambin veremos en este captulo los tipos enumerados, enum. 2.2.1. Variables numricas Caractersticas de las variables numricas Con una variable de tipo numrica podremos hacer cualquier tipo de operacin, siempre teniendo presente, qu operaciones nos deja hacer nuestro lenguaje de programacin. En este pequeo curso slo utilizaremos las 4 operaciones bsicas (suma, resta, multiplicacin y divisin). Debemos tener en cuenta que estas operaciones tienen una prioridad. De una cadena de operaciones siempre se realizar, en primer lugar, las divisiones y las multiplicaciones y, en segundo lugar, las sumas y las restas. Si quisiramos que esta prioridad se viese alterada 37

podramos utilizar los parntesis. Las operaciones que aparezcan dentro de ellos se realizarn con una prioridad superior a las que estn fuera; sin tener en cuenta si estas son multiplicaciones, divisiones, sumas o restas. Observe estos dos ejemplos: 1+2*3 = 7 Mientras que (1+2)*3 = 9. En el primer ejemplo hemos efectuado primero la multiplicacin y despus la suma. Mientras que en el segundo, primero se efecta la suma (por estar entre parntesis) y despus la multiplicacin. Con una variable de tipo numrica podremos hacer cualquier tipo de operacin, siempre teniendo presente, qu operaciones nos deja hacer nuestro lenguaje de programacin. En este pequeo curso slo utilizaremos las 4 operaciones bsicas (suma, resta, multiplicacin y divisin). Debemos tener en cuenta que estas operaciones tienen una prioridad. De una cadena de operaciones siempre se realizar, en primer lugar, las divisiones y las multiplicaciones y, en segundo lugar, las sumas y las restas. Si quisiramos que esta prioridad se viese alterada podramos utilizar los parntesis. Las operaciones que aparezcan dentro de ellos se realizarn con una prioridad superior a las que estn fuera; sin tener en cuenta si estas son multiplicaciones, divisiones, sumas o restas. Observe estos dos ejemplos: 1+2*3 = 7 Mientras que (1+2)*3 = 9. En el primer ejemplo hemos efectuado primero la multiplicacin y despus la suma. Mientras que en el segundo, primero se efecta la suma (por estar entre parntesis) y despus la multiplicacin. Esto es comn a la gran parte de lenguajes de programacin.

Robtica Infantil Diseando sistemas y estructuras - Asiste a una clase muestra GRATIS www.scibots.com.mxEnlaces patrocinados Almacenar resultados en variables.- Nosotros podemos almacenar valores en nuestras variables de la misma manera que las inicializamos. Variable = Valor. Este "almacenamiento" de informacin la podemos hacer en cualquier lugar del cdigo. Debemos pensar que este Valor puede ser sustituido por una operacin y almacenar el resultado en la variable. Veamos un ejemplo: Variable = 5 + 3 de esta forma cuando nosotros consultemos el contenido de Variable podremos observar que es un 8. Podemos utilizar una variable como un contador. Un contador no es ms que una variable que se va incrementado de forma que podemos contar, por ejemplo, las veces que pasamos por un lugar determinado, las veces que se realiza una funcin, etc. La estructura de un contador sera la siguiente. Imagine que hemos definido una variable llamada Contador. Entonces, el ejemplo quedara de la siguiente forma: Contador = Contador + 1.

38

Explicaremos cmo funcionara este contador. A la derecha del igual se produce la operacin, que en este caso es Contador + 1, de esta forma se coge el valor que tiene Contador y se le suma 1. El resultado de la operacin se guarda en la variable que tenemos a la derecha del igual, que este caso es la misma variable Contador. Si esta lnea la pusiramos dentro de un bucle, podramos ver como la Variable va aumentando de 1 en 1 hasta que se cumpliera la condicin del bucle. 2.2.2. Variables alfanumricas Variables alfanumricas Almacenan textos compuestos de nmeros y/o cifras Cadenas Almacenan variables alfanumricas $cadena="Hola amigo";

Variable Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecucin de un proceso, su contenido puede cambiar durante la ejecucin del programa. Para poder reconocer una variable en la memoria de la computadora, es necesario darle un nombre con el cual podamos identificarla dentro de un algoritmo. Ejemplo: rea = pi * radio ^ 2 Las variables son: el radio, el rea y la constate es pi Clasificacin de las Variables

Por su contenido

Variables Numricas: Son aquellas en las cuales se almacenan valores numricos, positivos o negativos, es decir almacenan nmeros del 0 al 9, signos (+ y -) y el punto decimal.

39

Ejemplo: iva = 0.15 pi = 3.1416 costo = 2500

Variables Lgicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos representan el resultado de una comparacin entre otros datos. Variables Alfanumricas: Esta formada por caracteres alfanumricos (letras, nmeros y caracteres especiales).

Ejemplo: letra = a apellido = lopez direccion = Av. Libertad #190 Por su uso

Variables de Trabajo: Variables que reciben el resultado de una operacin matemtica completa y que se usan normalmente dentro de un programa.

Ejemplo: Suma = a + b /c

Contadores: Se utilizan para llevar el control del nmero de ocasiones en que se realiza una operacin o se cumple una condicin. Con los incrementos generalmente de uno en uno.

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.

2.3. Constantes Constante (informtica) En programacin, una constante es un valor que no puede ser alterado durante la ejecucin de un programa. Una constante corresponde a una longitud fija de un rea reservada en la memoria principal del ordenador, donde el programa almacena valores fijos. Por ejemplo: 40

El valor de pi = 3.1416

Por conveniencia, el nombre de las constantes suele escribirse en maysculas en la mayora de lenguajes. Ejemplo de una constante en C(#define) En C las constantes se declaran con la directiva #define, esto significa que esa constante tendr el mismo valor a lo largo de todo el programa. 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, no empezar por un dgito numrico, etc). Ejemplo: #include #define PI 3.1415926 int main() { printf("Pi vale %f", PI); return 0; } Lo cual mostrar por pantalla: Pi vale 3.1415926 Es decir, PI es una constante a la que le hemos asignado el valor 3.1415926 mediante la directiva #define. La directiva #define tambin se puede utilizar para definir expresiones ms elaboradas con operadores (suma, resta, multiplicacin etc) y otras constantes que hayan sido definidas previamente, por ejemplo: #define X 2.4 #define Y 9.2 #define Z X + Y 2.3.1. Constantes numricas Constantes Numricas Constantes numricas o absolutas: Son las que conservan los mismos valores en todos los problemas, como por ejemplo: A: bh/2, A= r2, en donde 2 y son constantes que nunca cambian. Variable dependiente: como su nombre lo dice depende de el valor de otra, por ejemplo y = x+2 41

en esta expresin "y" se considera la variable dependiente ya q dependiendo el valor de "x" es el resultado de "y", 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 ningn otro conjunto. Funcin Inyectiva : si a cada valor del conjunto (dominio) le corresponde un valor distinto en el conjunto (imagen) de . Es decir, a cada elemento del conjunto A le corresponde un solo valor de B tal que, en el conjunto A no puede haber dos o ms elementos que tengan la misma imagen. Funcin Biyectiva: Si todo elemento del contra dominio es imagen de uno y solamente un elemento del dominio. Funcin Trascendente: es una funcin que trasciende al lgebra en el sentido que no puede ser expresada en trminos de una secuencia infinita de operaciones algebraicas de suma, resta y extraccin de races. Una funcin de una variable es trascendente si es independiente en un sentido algebraico de dicha variable. 2.3.2. Constantes alfanumricas Constantes Una constante es un dato numrico o alfanumr