Anda di halaman 1dari 60

LENGUAJE DE PROGRAMACIN I. UNIDAD I: INTRODUCCIN Y DEFINICIONES.

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. Est formado de un conjunto de smbolos y reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones. 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 el 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 y el texto 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, tal como sucede con el lenguaje Lxico. Una caracterstica relevante de los lenguajes de programacin es precisamente que ms de un programador puedan tener un conjunto comn de instrucciones que puedan ser comprendidas entre ellos para realizar la construccin del programa de forma colaborativa. Los procesadores usados en las computadoras entienden nicamente instrucciones en lenguaje de mquina. Todo programa escrito en otro lenguaje puede ser ejecutado de dos maneras: Mediante un programa que va adaptando las instrucciones conforme son encontradas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como intrpretes. Ejemplos de esto son bash, clsico interprete de comandos en estaciones unix que fue escrito para el proyecto GNU o Python, intrprete multipropsito. Traduciendo el cdigo escrito del programa (lo que se denomina cdigo fuente), a su equivalente en lenguaje mquina. A este proceso se le llama compilar y al programa traductor se le denomina compilador. Ejemplos de esto son: El lenguaje C, que combina en sus sintaxis caractersticas de medio y bajo nivel y el compilador gcc usado en el proyecto GNU. Historia. 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.

Implementacin. 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. Compilacin es la traduccin a un cdigo que pueda utilizar la mquina. 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. Se puede tambin utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez 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. 1.1. DEFINICIN DE LENGUAJE. Es un conjunto de smbolos junto a un conjunto de reglas para combinar dichos smbolos que se usan para expresar programas. Constan de un lxico, una sintaxis y una semntica. Qu conoces tu por lxico, sintaxis y semntica? Lxico: Conjunto de smbolos permitidos o vocabulario. Sintaxis: Reglas que indican cmo realizar las construcciones del lenguaje. Semntica: Reglas que permiten determinar el significado de cualquier construccin del lenguaje. Tipos de lenguajes: Atendiendo al nmero de instrucciones necesarias para realizar una tarea especfica podemos clasificar los lenguajes informticos en dos grandes bloques: Bajo nivel Alto nivel

Lenguaje de bajo nivel.

Es el tipo de lenguaje que cualquier computadora es capaz de entender. Se dice que los programas escritos en forma de ceros y unos estn en lenguaje de mquina, porque esa es la versin del programa que la computadora realmente lee y sigue. Lenguajes de alto nivel. Son lenguajes de programacin que se asemejan a las lenguas humanas usando palabras y frases fciles de entender. En un lenguaje de bajo nivel cada instruccin corresponde a una accin ejecutable por el ordenador, mientras que en los lenguajes de alto nivel una instruccin suele corresponder a varias acciones. Caractersticas de los lenguajes de alto nivel: Son independientes de la arquitectura fsica de la computadora. Permiten usar los mismos programas en computadoras de diferentes arquitecturas (portabilidad), y no es necesario conocer el hardware especfico de la mquina. La ejecucin de un programa en lenguaje de alto nivel, requiere de una traduccin del mismo al lenguaje de la computadora donde va a ser ejecutado. Una sentencia en un lenguaje de alto nivel da lugar, al ser traducida, a varias instrucciones en lenguaje entendible por el computador. Utilizan notaciones cercanas a las usadas por las personas en un determinado mbito. Se suelen incluir instrucciones potentes de uso frecuente que son ofrecidas por el lenguaje de programacin. Generaciones de Lenguajes: 1. lenguajes de mquina. 2. lenguajes ensambladores. 3. lenguajes de procedimientos. 4. lenguajes orientados a problemas. 5. lenguajes naturales. 1. Lenguaje de mquina (Primera Generacin). Es el lenguaje que la computadora entiende, su estructura est totalmente adaptada a los circuitos de la mquina y la programacin es tediosa porque los datos se representan por ceros y unos. Es de bajo nivel. Es un conjunto de instrucciones codificadas en binario que son capaces de relacionarse directamente con los registros y circuitera del microprocesador de la computadora y que resulta directamente ejecutable por ste, sin necesidad de otros programas intermediarios. Los datos se referencian por medio de las direcciones de memoria donde se encuentran y las instrucciones realizan operaciones simples. Estos lenguajes estn ntimamente ligados a la CPU y por eso no son transferibles. (baja portabilidad). Para los programadores es posible escribir programas directamente en lenguaje de mquina, pero las instrucciones son difciles de recordar y los programas resultan largos y laboriosos de escribir y tambin de corregir y depurar. 2. Lenguaje ensamblador (Segunda Generacin). Es otro lenguaje de programacin de bajo nivel, pero simblico porque las instrucciones se construyen usando cdigos de tipo mnemotcnico, lo cual facilita la escritura y depuracin de los programas pero no los acorta puesto que para cada accin se necesita una instruccin. El programa ensamblador va traduciendo lnea a lnea a la vez que comprueba la existencia de errores. Si localiza alguno da un mensaje de error. Algunas caractersticas que lo diferencian del lenguaje de mquina son que permite el uso de comentarios entre las lneas de

instrucciones; en lugar de direcciones binarias usa identificadores como total, x, y, etc. Y los cdigos de operacin se representan por mnemotcnica siempre tienen la desventaja de repertorio reducido de instrucciones, rgido formato para las instrucciones, baja portabilidad y fuerte dependencia del hardware. Tiene la ventaja del uso ptimo de los recursos hardware, permitiendo la obtencin de un cdigo muy eficiente. Ejemplo de algunos cdigos mnemnicos son: STO para guardar un dato, LOA para cargar algo en el acumulador, ADD para adicionar un dato, INP para leer un dato, STO para guardar informacin, MOV para mover un dato y ponerlo en un registro, END para terminar el programa, etc. Con la tercera generacin avanzamos a los lenguajes de alto nivel, muchos de los cuales se consideran exportables. Esto es, pueden correr en ms de un tipo de computadoras, se les puede exportar de una mquina a otra. 3. Lenguaje de procedimientos (Tercera Generacin). Son lenguajes de alto nivel similares al habla humana pero requieren cierta capacitacin para su uso. Ventajas: a. Independencia de la arquitectura fsica de la computadora (portabilidad), esto significa que un mismo lenguaje puede funcionar (al menos en teora) en distintos computadores, por lo que tanto el lenguaje como los programas escritos con l sern transportables de un computador a otro. En la prctica, esta caracterstica resulta limitada por la gran diversidad de versiones y dialectos que se constituyen para cada lenguaje. b. una sentencia en un lenguaje de alto nivel da lugar, al ser traducida, a varias instrucciones en lenguaje mquina. Se llaman de procedimientos porque estn diseados para expresar la lgica capaz de resolver problemas generales. Entre estos tenemos: Basic Pascal Cobol C Fortran Para que el lenguaje de procedimientos pueda funcionar debe traducirse a lenguaje de mquina a fin de que la computadora lo entienda. Para ello se han de usar programas traductores que realicen dicho proceso. Tienen la capacidad de soportar programacin estructurada. 4. Lenguajes orientados a problemas (4GL). Resultan ms eficaces para la resolucin de un tipo de problemas a costa de una menor eficiencia para otros. Requieren poca capacitacin especial de parte del usuario Son considerados de muy alto nivel Diseados para resolver problemas especficos. Incluye: lenguajes de consulta y generador de aplicaciones. Lenguajes de consulta: Permiten a no programadores usar ciertos comandos de fcil comprensin para la bsqueda y generacin de reportes a partir de una base de datos. Generador de aplicaciones: Quiere decir que cuando se disea uno de estos lenguajes, se tiene en cuenta que su finalidad es la resolucin de problemas, prescindiendo de la arquitectura del computador. Contiene varios mdulos que han sido preprogramados para cumplir varias tareas.

5. Lenguajes naturales. Lenguajes orientados a aplicaciones en inteligencia artificial, como lisp y prolog. Dentro de este campo destacan las aplicaciones en sistemas expertos, juegos, visin artificial (Jurasic Park) y robtica. Lisp es un lenguaje para procesamiento de listas y manipulacin de smbolos. Prolog es un lenguaje basado en la lgica, para aplicaciones de bases de datos e Inteligencia Artificial. Podemos decir entonces, que los lenguajes de alto nivel, tienen las ventajas de mayor legibilidad de los programas, portabilidad, facilidad de aprendizaje y facilidad de modificacin. PARA ANALIZAR: 1. Cul es la diferencia fundamental entre los lenguajes de alto nivel y bajo nivel? 2. Investigar analogas y diferencias entre el cdigo mquina y el lenguaje ensamblador. 3. Buscar informacin que permita decidir cules seran los lenguajes de programacin ms apropiados para realizar: aplicaciones para gestin de oficinas, complejos clculos cientficos, un sistema experto en medicina, un simulador de vuelo, manipulacin de bases de datos, control de un robot industrial. Sugerencias de ampliacin: Clasificacin de los lenguajes de alto nivel Lenguajes de propsito general:

1.2. DEFINICIN DE PROGRAMA. Un programa informtico es una serie de comandos ejecutados por el equipo. Sin embargo, el equipo slo es capaz de procesar elementos binarios, es decir, una serie de 0s y 1s. Por lo tanto, necesitamos un lenguaje de programacin para escribir de manera legible, es decir, con comandos que el ser humano pueda comprender (por ser similares a su propio lenguaje) los comandos que el equipo deber ejecutar. Estos programas se traducen despus a un lenguaje mquina (en binario) a travs de un compilador. El mtodo de escritura de un programa est muy ligado al lenguaje de programacin elegido, ya que existen muchos tipos distintos. Adems, el compilador debe coincidir con el lenguaje elegido: cada lenguaje de programacin tiene su propio compilador (excepto los lenguajes interpretados). En trminos generales, el programa es un simple archivo de texto (escrito usando un procesador o editor de texto), llamado archivo fuente). El archivo fuente contiene lneas de programa llamadas cdigo fuente. Este archivo fuente, debe compilarse una vez completado. La compilacin se realiza en dos pasos:

El compilador transforma el cdigo fuente en cdigo objeto y lo guarda en un archivo objeto, es decir que traduce el archivo fuente a lenguaje mquina (algunos compiladores tambin crean un archivo en ensamblador, un lenguaje similar al lenguaje mquina ya que posee las funciones bsicas, pero puede ser ledo por los seres humanos.

Luego, el compilador llama a un editor de vnculos (o ensamblador) que permite insertar los elementos adicionales (funciones y bibliotecas) a los que hace referencia el programa dentro del archivo final, pero que no se almacenan en el archivo fuente. A continuacin, se crea un archivo ejecutable que contiene todos los elementos requeridos por el programa para funcionar de manera independiente (en Microsoft Windows o MSDOS este archivo tendr la extensin .exe). 1.3. DEFINICIN DE COMANDOS. 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 el comportamiento predeterminado del comando. Suelen indicarse tras una barra "/" (en

sistemas operativos DOS) o un guin simple "-" o doble "--" (en sistemas operativos Unix). Lnea de comandos. La lnea de comandos 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 del sistema operativo 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, 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 escribian la instruccin o el programa que deseaban que fuera ejecutado por el ordenador. 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, el 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 inmediantamente se lanza el intrprete de rdenes (normalmente el bash) Ahora 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. Intrprete de comandos.

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: Muestra el prompt del sistema. Expande los caracteres genricos tales como el astersco o la interrogacin. 7

Realiza los redireccionamientos. Si es un comando interno, lo ejecuta. Si es un comando externo, lo busca en un conjunto de directorios y si lo encuentra solicita su ejecucin al sistema operativo. 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 comandos 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. 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. 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. 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 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: 1.-Determinacin de las direcciones de origen y destino de memoria. 2.-Realizacin de la transformacin de memoria virtual a memoria real. 3.-Comprobacin de la cach. 4.-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. UNIDAD II: ELEMENTOS DEL LENGUAJE DE PROGRAMACIN. Elementos Sintcticos del Lenguaje Sin diferencia entre maysculas y minsculas en identificadores y palabras reservadas. Palabras reservadas = palabras que expresan alguna funcin del lenguaje.

Identificadores = palabras que identifican los elementos que se van a utilizar en el programa (constantes, variables...). Secuencia de 1 a 127 caracteres. Comienza por letra. El resto pueden ser letras, dgitos o _. Nunca espacios ni smbolos. No es palabra reservada. Comentarios = Cadenas de caracteres que el compilador ignora. Delimitados por { } o (* *) Operadores. Aritmticos: +, -, *, /, DIV, MOD, - (cambio signo) Booleanos: AND, OR, NOT Relacionales: =, <>, <, >, <=, >= Asignacin: := Precedencia: Parntesis para modificarla. A mismo nivel de precedencia, evaluar de izquierda a derecha.

10

Punto y coma: Final de instruccin. Estructura de un Programa. Cabecera: PROGRAM <identificador>; Declaracin: Unidades (crt = control de pantalla y teclado). USES <ident_unidad1>[,<ident_unidad2>,...]; Constantes. CONST <ident_cte> = <valor_cte>; Variables. VAR <ident_vble1>[, <ident_vble2>,...]:<tipo>; Donde. <tipo>= integer|shortint|longint|byte|word| real|single|double|extended|comp| char|string|Boolean| <tipo_compuesto>|<tipo_definido_usuario> Rango tipos: SHORTINT: -128..127 LONGINT: -2147483648.. 2147483647 (MAXLONGINT) INTEGER: -32768..32767 (MAXINT) BYTE: 0..255 WORD: 0..65535 REAL: 2.9e-39..1.7e38 SINGLE: 1.5e-45..3.4e38 DOUBLE: 5.0e-324..1.7e308 EXTENDED: 3.4e-4932..1.1e4932 COMP: -9.2e18..9.2e18

11

Cuerpo Programa: BEGIN .... END.

INSTRUCCIONES DE UN PROGRAMA: ENTRADA Y SALIDA DE DATOS Salida de datos en pantalla. Write (<lista_expresiones_y_literales_cadena>); WriteLn (<lista_expresiones>); Descriptores de formato: <Expresin>:W:D Donde: W: Longitud en espacios del campo donde se va a mostrar el dato. Justificacin a la derecha. Si es demasiado pequeo, se agranda para los datos numricos pero trunca el resto (empezando por la izquierda). W:D: Visualizacin de reales en formato decimal. W indica la anchura total del campo. D indica el nmero de dgitos decimales (redondeo o relleno a ceros, segn el caso).

12

Entrada. Read (<lista_vble>); Readln (<lista_vble>); Readln lee los valores para las variables de la lista y salta de lnea. Read lee los valores para las variables de la lista pero no salta de lnea. Posicionamiento cursor: Gotoxy (<col>, <fila>); Sita el cursor en la posicin indicada. WhereX: Devuelve la columna donde est el cursor. WhereY: Devuelve la fila donde est el cursor. 2.1. COMANDOS DEL SISTEMA. 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. CHKDSK - Controla un disco y provee informacin sobre su capacidad, su estado, los directorios, los archivos, la FAT, etc. Ha sido reemplazado por SCANDISK en los DOS 6.2. ATTRIB - Presenta en pantalla o modifica los atributos de los archivos. COPY - Sirve para copiar archivos, concatenarlos, cambiarles el nombre, etc. DIR - Presenta la lista del contenido de un directorio, en su totalidad o de manera selectiva. EDIT - Editor que reemplaza a Edlin desde el DOS.5. Se usar esencialmente para modificar pequeos archivos de texto, empezando por los llamados "archivos de sistema, que son el CONFIG.SYS y el AUTOEXEC.BAT. FDISK - Instala un disco duro, crea, muestra en pantalla o suprime particiones. FORMAT - Formatea el disco destinatario marcando y eliminando los sectores defectuosos, inicializando el directorio y la tabla de asignacin de los archivos (FAT), y cargando el programa de inicio. INSTALL O INSTALAR- Carga los programas residentes, a travs del Config.Sys. MD - Crea un directorio. Otro nombre de este comando: MKDIR, por "Make Directory, creacin de un directorio. MSCDEX - Acceso a los CD-ROM. A partir del DOS 6. SCANDISK - Herramienta de verificacin y reparacin de los discos duros, pero slo a partir de la versin 6.2. ANSI.SYS - Carga el cdigo ANSI. Interviene en el Config.Sys mediante un Device=

13

APPEND - Indica al sistema en qu directorios debe buscar los archivos de datos o de comandos. Este comando es relativamente reciente en el DOS y complementa al comando PATH, que slo se ocupa de archivos de comandos. ASSIGN - Enva el comando direccionado en un disco hacia otro disco; este ltimo reemplaza al primero. Ya no existe en el DOS 6. BACKUP - Realiza una copia de seguridad de los archivos de un disco en uno 0 varios discos, mostrando mientras tanto su nombre en pantalla. La restauracin de los archivos se hace con la orden de sentido contrario, RESTORE. El Backup ya no existe en el DOS 6, lo cual es una bendicin porque este comando era uno de los ms difciles de manejar. BASIC - Llama al lenguaje Basic IBM en los DOS IBM. Se trata del lenguaje de programacin ms simple que existe. BAT - Extensin especfica para el nombre de los archivos de procedimientos, que disponen de toda una gama de comandos propios. Uno de los ms conocidos es el archivo AUTOEXEC.BAT, que se ejecuta automticamente cuando usted pone su computadora en funcionamiento. BREAK - Activa o desactiva la posibilidad de realizar una interrupcin con Control + Pausa, que permite salir de una secuencia. BUFFERS - Comando para el config.sys que determina la capacidad del bfer para el disco. CALL - En un archivo .bat, llama a otro .bat como un subprograma. CD - Cambio de directorio; su nombre completo es CHDIR. CHCP - Seleccin de las tablas de cdigos. CHDIR - Cambio de directorio, cuyo nombre abreviado es CD. Adopte CD en lugar de CHDIR - si quiere evitar presionar tres teclas en el teclado. CHKDSK - Controla un disco y provee informacin sobre su capacidad, su estado, los directorios, los archivos, la FAT, etc. Ha sido reemplazado por SCANDISK en los DOS 6.2. CHKSTATE.SYS - Una novedad del DOS 6. Usado por el programa MemMaker para optimizar la memoria. CHOICE - Una novedad del DOS. 6. Le pide al usuario que efecte una seleccin en una secuencia batch. CLS - Simplemente borra la pantalla, sin cambiar ninguna otra cosa. Es un comando pequeo e interesante que conviene recordar. COMMAND - Llama a un procesador secundario de comandos, o reinstala el procesador de comandos COMMAND.COM del DOS. CONFIG.SYS - Archivo de configuracin que dispone de instrucciones propias. Este archivo se ejecuta automticamente cada vez que se pone en funcionamiento la computadora. COUNTRY - Nacionaliza el sistema, adaptndolo al pas. DATE - Muestra en pantalla y modifica la fecha utilizada por el sistema; la nueva, fecha introducida se graba en las memorias permanentes. DBLSPACE - Compacta el disco duro, duplicando aproximadamente su capacidad. La compresin puede variar normalmente de 1,7 a ms de 10, segn el tipo de archivo. Este comando ha sido reemplazado por DRIVESPACE a partir del DOS 6.22. DBLSPACE.SYS - Una novedad del DOS 6. Determina la posicin final del archivo dblspace.bin. DEBUG - Lanza el programa de "debugging' (eliminacin de errores). Debug est reservado a los expertos. DEFRAG - Una novedad del DOS 6. Desfragmenta los archivos en el disco duro para mejorar la velocidad y la seguridad.

14

DEL - Destruye uno o varios archivos en el disco (acta como el comando ERASE). DELOLDOS - Suprime la puesta en reserva de un DOS antiguo. DELTREE - Una novedad dei DOS 6. Suprime un directorio y todo lo que contiene, incluyendo los subdirectorios, en una sola operacin. DEVICE - Instala un driver de perifrico, por medio del config.sys. DEVICEHIGH - Carga un administrador en memoria superior, por encima de los primeros 640 KB. DISKCOMP - Compara el contenido total, pista por pista y sector por sector, de dos disquetes del mismo tipo. DISKCOPY - Copia de modo idntico el contenido de un disquete fuente en un disquete destinatario rigurosamente del mismo formato, formateando previamente este ltimo y hacindolo sobre el modelo del disquete fuente si es necesario. DISPLAY.SYS - Se utiliza para conmutar las tablas de cdigos, va el config.sys. DOS - Establece un vnculo entre la memoria convencional y la memoria superior a travs del config.sys. DOSKEY - Instala el programa de memorizacin y de llamado de los comandos instalados anteriormente. De esta manera, se evita tener que volver a escribirlos. DOSSHELL - Llama a la superestructura de dilogo del DOS. Este dos shell ha sido suprimido en la versin DOS 6.2 ya que Microsoft consider que haba sido reemplazado ventajosamente por el Administrador de archivos de ese superprograma que es Windows. DRIVER.SYS - Administra las disqueteras, a travs del Config.Sys. DRIVPARM - Define los parmetros de perifricos en modo bloque, a travs del Config.Sys. DRIVESPACE - Reemplaza a DBLSPACE a partir del DOS 6.22, con las mismas funciones. ECHO - Vuelve a mostrar en pantalla o no, en eco, los comandos ejecutados en un archivo .BAT, segn se ponga o no en servicio este eco, usando ON u OFF respectivamente. Permite introducir un mensaje que ser mostrado en pantalla en todos los casos. EMM386 - Sirve de soporte a la memoria expandida. EMM386.EXE - Simula la memoria expandida en la memoria extendida, a travs del Config.sys. ERASE - Destruye uno o varios archivos del disco (y acta como el comando DEL). Opte por DEL ya que se escribe ms rpido. ERROLEVEL - Cdigo de errores para archivos .BAT Otra nocin ms para expertos. EXE2BIN - Convierte el formato .EXE en .BIN o .COM. Este comando, que no existe ms en los DOS 6, est destinado a los programadores. EXIT - Sale de un procesador de comandos. En la mayora de los casos, EXIT le permite salir del DOS para volver al programa que lo llama, Windows por ejemplo. EXPAND - Descomprime un archivo comprimido. A partir del DOS versin 5. FASTHELP - Muestra en pantalla la lista de comandos de la versin 6 con una breve explicacin. FASTOPEN - Proporciona un acceso rpido a los archivos que se usan con ms frecuencia, o a los ltimos que se han utilizado, memorizando su camino de acceso. FC - Comparacin de archivos. No est disponible en todas las versiones. FCBS - Especfica la cantidad de bloques de control de archivos, en un Config.Sys. Este comando est reservado a los expertos. FILES - Especfica la cantidad de archivos abiertos, en un Config.Sys.

15

FIND - Busca la cadena de caracteres indicada en un archivo y enva al perifrico activo de salida (el monitor, por ejemplo) todas las lneas en las que la encontr. FOR - Especfica la repeticin del mismo comando para cada una de las variables contenidas en la lista. GOTO - Es un direccionamiento incondicional a una lnea marcada con un rtulo del mismo nombre en un archivo .BAT. GRAFTABL - Carga la tabla de los caracteres grficos, los cdigos ASCII 128 a 255, para la visualizacin en pantalla. No existe ms en el DOS 6. GRAPHIC - Carga una secuencia que permite la impresin de la pantalla que incluye caracteres grficos, de cdigos 128 a 255. GWBASIC - Llamado del antiguo Basic avanzado de Microsoft. No existe ms en el DOS 6, en el cual ha sido reemplazado por el QBasic. HELP - Pedido de ayuda. Desde el DOS 5. HIMEM.SYS - Administrador de memoria extendida. IF - Comando de ejecucin condicional para archivo .BAT. INCLUDE - Incluye un bloque de configuracin en otro, a travs del Config.Sys. Nuevo comando con el DOS 6. INTERLNK - Conecta dos computadoras, por medio de sus puertos paralelos o en serie. Nuevo comando del DOS 6. INTERLNK.EXE - Administrador para Interlnk. Novedad del DOS versin 6. INTERSVR - Lanza el centro de recuperacin de datos InterLnk. Nuevo comando del DOS 6. JOIN - Asigna el contenido de un disco a un directorio de otro disco. No existe ms en el DOS 6. KEYB - Carga el programa que administra el teclado (reemplaza al que reside en la memoria muerta, para el teclado USA). LABEL - Crea, modifica o suprime el nombre atribuido a un disco. LASTDRIVE - Define la cantidad de unidades de disco en el Config.Sys. LH - Carga un programa en la memoria superior, generalmente en el Autoexec.bat. Otro nombre: LOADHIGH. LINK - Llama al editor de conexiones. LOADFIX - Carga un programa por encima de los primeros 64 Kb de memoria y lo ejecuta. Nuevo comando del DOS 6. LOADHIGH - Carga un programa en la memoria superior, generalmente a travs del Autoexec.bat. Desde el DOS 5. Otro nombre: LH. MACROS - Realizacin de macros con Doskey. MEM - Muestra en pantalla la memoria ocupada y la disponible. MEMMAKER - Administracin y optimizacin de la memoria, pero con los DOS 6. MENUCOLOR - Determina el color del texto y del fondo para el primer men, a travs del Config.Sys. A partir del DOS 6. MENUDEFAULT - Especfica el men por defecto, en el inicio. A partir del DOS 6. MENUITEM - A partir del DOS 6. Define un tem del men de arranque. MIRROR - Copia de seguridad para el seguimiento del borrado de archivos. Con el DOS 5. MKDIR - Crea un subdirectorio. Otro nombre de este comando: MD, por "Make Directory, creacin de un directorio. MODE - Establece las condiciones de funcionamiento de los perifricos, impresora, interface de video y conexiones en serie, y tambin sirve para la preparacin de las tablas de cdigos.

16

MORE - Para visualizar pgina por pgina en la pantalla (es decir, sin que desfilen ininterrumpidamente en la pantalla) MOVE - Mueve uno o varios archivos y da nuevo nombre a archivos o directorios. Nuevo comando con el DOS 6. MSAV - Programa antivirus. A partir del DOS 6. MSBACKUP - Nuevo procedimiento de copia de seguridad, a partir del DOS 6. MSD - Provee informacin tcnica sobre su computadora. A partir del DOS 6. NLSFUNC - Comando relativo a los idiomas nacionales. Su nombre proviene de "National Languages Support Function. Da informaciones complementarias sobre los pases y prepara el uso de las tablas de cdigos con CHCP NUMLOCK - Determina que la seccin numrica del teclado est bloqueada o no, a travs del Config.Sys. Nuevo comando a partir del DOS 6. PATH - Especifiica caminos de bsqueda alternativos para los archivos de comando (con la extensin .COM, o .EXE o .BAT) que no se encuentran en el directorio activo. Este comando se encuentra generalmente en el archivo Autoexec.bat. PAUSE - Suspende la ejecucin de un programa .BAT mostrando en pantalla un mensaje optativo de 121 caracteres como mximo. POWER - Pone en servicio o saca de servicio la administracin del consumo de energa. Nuevo comando a partir del DOS 6. POWER.EXE - Administrador de POWER. Nuevo, a partir del DOS 6. PRINT - Imprime el contenido de archivos, en segundo plano, mientras se prosigue con un trabajo en la pantalla. PRINTER.SYS - Se utiliza para conmutar las tablas de cdigos con las impresoras, a travs del Config.Sys. PROMPT - Define o muestra en pantalla los smbolos del sistema utilizados por el DOS. QBASIC - Es el nuevo lenguaje Basic de Microsoft. A partir del DOS 5. RAMDRIVE - Instala un disco virtual, a travs del Config.Sys. RD - Suprime un subdirectorio que debe estar obligatoriamente vaco (y que, por lo tanto, slo debe contener las marcas . y ..). El nombre completo de este comando es RMDIR. RECOVER - Interviene cuando hay que recuperar los datos de un archivo porque hay un sector defectuoso en el disco. Los datos de este sector se habrn perdido. No existe ms en el DOS 6. REM - Introduce observaciones, comentarios, en 123 caracteres como mximo por lnea de REM. REN - Cambia el nombre de un archivo. RENAME - Cambia el nombre de un archivo. Es lo mismo que REN, pero ms largo de escribir. REPLACE - Reemplaza o agrega selectivamente archivos que provienen de un disco fuente a un disco destinatario. RESTORE - Restaura, restablece el contenido de un disco a partir de su copia de seguridad anterior, con los DOS hasta el 5 inclusive. En el DOS 6, slo existe para la compatibilidad. RMDIR - Suprime un subdirectorio que debe estar obligatoriamente vaco (y que, por lo tanto, slo debe contener las marcas . y ..). El nombre abreviado es RD. SET - Sirve para definir el entorno de trabajo que requieren algunos programas, introduciendo un nombre seguido de su equivalencia. SETVER - Declara las versiones del DOS para algunas aplicaciones. SETVER.EXE - Administrador de SETVER. SHARE - Instala el programa para compartir archivos. SHELL - Instala un procesador de comandos.

17

SHIFT - Sirve para utilizar ms de 10 parmetros reemplazables numerados de 0 a 9, en las lneas de comando, marcando una diferencia de una posicin para cada SHIFT que se introduce. SHIPDISK - Bloquea los cabezales del disco duro antes de desplazarlo. Desapareci en el DOS 6. SIZER.EXE - Utilizado por el programa de optimizacin de la memoria MemMaker Novedad del DOS 6. SMARTDRV - Creacin de la antememoria de disco SmartDrive. SMARTDRV.EXE - Administrador de SmartDrv. SMARTMON - Programa de monitoreo (de vigilancia) de SmartDrive. SORT - Ordena datos. STACKS - Define las pilas, a travs del Config.Sys. SUBMENU - Define un tem del men de arranque abriendo un submen. Nuevo comando del DOS 6. SUBST - Sustituye un camino de acceso cuya descripcin es larga, y/o su unidad, por una unidad de disco ficticia que bastar con llamar luego. SWITCHES - Sustituye el teclado extendido por el teclado convencional. SYS - Copia los tres archivos que sirven de ncleo al sistema del disco fuente activo al disco destinatario. TEMP - Variable de entorno. TIME - Muestra en pantalla o configura la hora del sistema (incluidos los relojes permanentes, resguardados). TREE - Muestra los rboles de los directorios de un disco (y la lista de sus archivos con una clave suplementaria). TYPE - Muestra en pantalla el contenido de un archivo. UNDELETE - Recuperacin de archivos borrados. A partir de la versin DOS 5. UNFORMAT - Reconstruccin de un disco reformateado. A partir del DOS 5. VDISK - Instala un disco virtual, a travs del Config.Sys. Dej de estar incluido a partir del DOS 6. VER - Muestra en pantalla la versin activa del DOS. VERIFY - Pone en servicio (con ON) o anula (con OFF) la verificacin de los datos escritos en el disco. VOL - Muestra en pantalla el nombre del disco solicitado. VSAFE - Residente antivirus. XCOPY - Copia archivos selectivamente, inclusive los que provienen de subdirectorios. Es un comando excelente que puede servir incluso para efectuar copias de seguridad. 2.2. VARIABLES. Una variable es un espacio que podemos reservar el cual se le puede asignar diferentes valores segn nos convenga. Piensa que segn que tipo de lenguaje estemos utilizando para implementar nuestro cdigo pueden existir muchos tipos de variables diferentes. Para definir 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. Para inicializar una variable, poner un valor inicial que ms tarde podremos modificar, lo haremos de la siguiente forma. (Debemos tener en cuenta que una variable siempre debe tener un valor inicial).

18

Nmero. Para inicializar una variable de tipo numrica lo nico que tendremos que hacer es dar un nombre a la variable que hemos definido anteriormente, seguido de un igual (=) y el valor, en este caso un nmero, con el que deseemos inicializar nuestra variable. Ejemplo: nmero = 10 Texto. Para inicializar una variable de tipo texto lo nico que tendremos que hacer es dar un nombre a la variable que hemos definido anteriormente, seguido de un igual (=) y el valor, en este caso caracteres, con el que deseamos inicializar la variable, pero entre comillas. Ejemplo: nmero = "10" Observa que una variable numrica y una de texto, en el momento de iniciarla solo se diferencian en que el valor de inicializacin uno est entre comillas y el otro no. Mira detenidamente estos dos ejemplos: Valor = 10 y Valor = "10". Las 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. Caractersticas de las variables numricas. Con una variable de tipo numrica podremos hacer cualquier tipo de operacin, siempre teniendo presente, que operaciones nos deja hacer nuestro lenguaje de programacin. En este pequeo curso solo 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 que las que estn fuera. Sin tener en cuenta si estas son multiplicaciones, divisiones, sumas o restas. Observa 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. 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 deseemos ver 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

19

pasamos por un lugar determinado, las veces que se realiza una funcin, etc... La estructura de un contador sera la siguiente. Contador = Contador + 1. Explicaremos como funcionara este contador. A la derecha del igual se produce la operacin, que es 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.1. 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. Con una variable numrica se pueden utilizar 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. 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. 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. Ejemplo

20

x=3 escribir x En la primera lnea declaramos a x como una variable numrica que contiene el valor 3. En la segunda lnea, se muestra el valor de x en el rea de dibujo. Observemos que si hubiramos querido imprimir la letra x, deberamos haber escrito: escribir "x" Ahora veamos un ejemplo algo ms complejo: A = 2004 B = 25 C=A+B # el prximo comando muestra "2029" escribir C retroceder30 # el prximo comando muestra "2004 ms 25" escribir A + " ms " + B retroceder 30 #el prximo comando muestra "1979" escribir A - B En las primeras dos lneas, se declaran las variables A y B y se les asigna los valores 2004 y 25. En la tercer lnea se le asigna la operacin A + B (2029) a la variable C. El resto del cdigo consiste en 3 escribir y dos retroceder 30. 2.2.2. VARIABLES ALFANUMRICAS. En general, en los lenguajes de programacin, las variables alfanumricas se encierran entre comillas. As, en escribir "Hola programador" La cadena esta encerrada entre comillas. Las cadenas de texto pueden almacenarse en variables alfanumricas. Las variables numricas y alfanumricas difieren en el tipo de contenido que almacenan (nmeros y cadenas respectivamente) y a partir de all en el tipo de operaciones que podemos realizar con ellas. De este modo, no podremos realizar operaciones aritmticas ni condicionales con variables alfanumricas. Veamos ahora un ejemplo del uso de las cadenas de texto: x = "Hola " nombre = pregunta "Cual es tu nombre?" escribir x + nombre + ", Como estamos hoy?"

21

En la primera lnea asignamos la cadena Hola a la variable alfanumrica x. En la segunda, a la variable alfanumrica nombre se le asigna la salida del comando pregunta. En la tercera lnea el programa escribe una composicin de las tres variables en el rea de dibujo. Este programa nos pide que ingresemos un nombre. Entonces, por ejemplo, si ingresamos Fernanda, el programa nos responder Hola Fernanda, Como estamos hoy?. Observemos que en nuestro cdigo utilizamos el operador aritmtico correspondiente a la adicin (+). Este es el nico operador aritmtico que podemos utilizar con cadenas de texto, y la funcin que cumple es la de concatenar dichas. 2.3. CONSTANTES. Una constante representa a un valor (dato almacenado en memoria) que no puede cambiar durante la ejecucin de un programa. En C, una constante puede ser de tipo entero, real, carcter, cadena o enumerado. En cuanto a las dems, se pueden expresar de dos formas diferentes: 1.-Por su valor. 2.-Con un nombre (identificador). Ejemplo 1: Las siguientes constantes de tipo entero estn expresadas por su valor: -5 10 Para expresar una constante con un nombre, la constante debe ser declarada previamente. Todas las constantes que se declaran en un programa son definidas de la misma forma, indicando de cada una de ellas: 1.-Su nombre (mediante un identificador). 2.-El valor que simboliza (mediante una expresin). En pseudocdigo, para declarar una constante, vamos a utilizar la sintaxis: <nombre_de_la_constante> = <expresin> Y para declarar ms de una constante en una misma lnea, las separaremos por medio de comas (,). Ejemplo 2: De modo que, si se quieren declarar las constantes de tipo entero del ejemplo 1, asignndoles un identificador, se puede escribir, por ejemplo: TEMPERATURA = -5. MES = 10. O tambin: TEMPERATURA = -5, MES = 10

22

En programacin es una buena prctica escribir los identificadores de las constantes en maysculas, de esta forma es ms fcil localizarlos en el cdigo de un programa (o algoritmo). Durante la ejecucin de un programa, por medio del identificador de una constante, se puede hacer referencia al valor (dato) que simboliza, tantas veces como sea necesario. 2.3.1. CONSTANTES NUMRICAS. Una constante numrica (tipo Number) puede estar representada bajo la forma de un nmero decimal, octal o hexadecimal. Un nmero octal es un nmero en base 8, es decir, se utilizan solamente 8 cifras diferentes (0 a 7). Un nmero hexadecimal es un nmero en base 16, es decir, se utilizan solamente 16 cifras diferentes, que son las cifras decimales 0 a 9 complementadas con las 6 primeras letras del alfabeto, A a F (indiferentemente en maysculas o minsculas). Las bases matemticas y los mtodos de conversin concernientes a los nmeros octales y hexadecimales no son tratados aqu. Existen calculadoras, la misma calculadora de Windows en su forma cientfica, que se encargan de ello, aparte de que no son indispensables. Los nmeros octales y hexadecimales son nmeros enteros en JavaScript. Un nmero decimal se representa segn la sintaxis inglesa, es decir, con un punto en lugar de coma para separar los decimales. El nmero puede estar seguido de un exponente en base 10. Este exponente esta representado por la letra E - mayscula o minscula seguida del valor del exponente que podr ser un nmero positivo o negativo. Un nmero octal se identifica en JavaScript por la presencia de una cifra 0 en cabeza. Un nmero hexadecimal se identifica en JavaScript por los caracteres 0x o 0X en cabeza. Constante 314 3.14159 0.00314 .00314 3.14159E3 3.14E-3 3.14e-3 076 0x3e Valor decimal 314 3,14159 0,00314 0,00314 3141,59 0,00314 0,00314 62 62

2.3.2. CONSTANTES ALFANUMRICAS. Una constante de cadena se escribe entre comillas ("...").

23

Estos son ejemplos de una constante de cadena: "Aadir registros" "No se encuentran registros" "Factura" Una cadena vaca viene especificada por dos marcas de comillas sin nada entre ellas (""). 2.4. OPERADORES. Se definen seis tipos de operadores aritmticos, relacionales, de asignacin, lgicos, de direccin y de movimiento. Existe otro tipo de operador denominado molde que su funcin es hacer posible que una expresin sea de un tipo determinado utilizando la sintaxis (tipo) expresin; Siendo tipo uno de los tipos estndar de C (ver captulo 4). Por ejemplo, si se quiere asegurar que la expresin x/2 se evale de tipo float, se puede escribir: (float) x/2;. Operadores aritmticos. + Suma. - Resta. * Producto. / Cociente de una divisin. % Resto de una divisin.

Operadores lgicos. ! Not (no lgico). && And (y lgico). || Or ( lgico). Operadores relacionales. == Igual a. != No igual a. > Mayor que. < Menor que. >= Mayor o igual que. <= Menor o igual que. Operadores de asignacin. === ++ m++ m=m+1. -- m-- m=m-1. += m+=n m=m+n. -= m-=n m=m-n. *= m*=n m=m*n. /= m/=n m=m/n. %= m%=n m=m%n.

24

Los operadores de asignacin ++ y pueden ir antes o delante de una expresin formando una nueva expresin. Estas expresiones se denominan post-incrementos o preincrementos (decrementos si el operador es --) y son expresiones compuestas, normalmente son del tipo y=x++; (y=++x;). Existen una diferencia entre el post-incremento y el pre-incremento. El post-incremento primero suma uno a la variable (x en el ejemplo) y luego asigna ese valor (y en el ejemplo), mientras con el pre-incremento, la asignacin es anterior. Por ejemplo: y=x++; (y=++x;). Existen una diferencia entre el post-incremento y el pre-incremento. El post-incremento primero suma uno a la variable (x en el ejemplo) y luego asigna ese valor (y en el ejemplo), mientras con el pre-incremento, la asignacin es anterior. Por ejemplo: int x=1, y; y=x++; /* y es 1 y x vale 2 */ int x=1, y; y=++x; /* x vale 2 e y tambin vale 2 */

Operadores de direccin. Operador de contenido de apuntado u operador de indireccin & Operador de direccin. Operadores de movimiento. Existe un ltimo tipo de operadores, no comentado hasta el momento, los operadores de movimiento (<<, movimiento a la izquierda y >>, a la derecha). Su funcin es desplazar los bits de la palabra de memoria dada tantos espacios como se le indiquen a derecha o izquierda. La forma general es: expresion1<< expresion2. Los dos operandos deben ser del tipo entero, y mueve los bits de la expresion1 tantas posiciones como se lo indique la expresion2 (en este caso hacia la izquierda). Por ejemplo, sea x un entero con representacin interna: 00010001110011000101010111111111x<<4; da como resultado: 00011100110001010101111111110000 da como resultado: 00011100110001010101111111110000, da como 00011100110001010101111111110000. Prioridad y asociatividad de los operadores. Lista en la que se muestra el Operador y la Asociatividad. () [] De izquierda a derecha.

resultado:

25

- ++ -- ! ~ * & sizeof(tipo) De derecha a izquierda. * / % De izquierda a derecha. + - De izquierda a derecha. << >> De izquierda a derecha. < <= > >= De izquierda a derecha. == != De izquierda a derecha. & De izquierda a derecha. && De izquierda a derecha. || De izquierda a derecha. ?: De derecha a izquierda. = *= /= %= += -= &= <<= >>= De derecha a izquierda, De izquierda a derecha. 2.5. SENTENCIAS DE ENTRADA/SALIDA (E/S). Cuando nos referimos a entrada/salida estndar (E/S estndar) queremos decir que los datos o bien se estn leyendo del teclado, bien se estn escribiendo en el monitor de video. 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. En el lenguaje c++ tenemos varias alternativas para ingresar y/o mostrar datos, dependiendo de la librera que vamos a utilizar para desarrollar el programa, entre estas estn: iostream.h y sodio.h. < 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 estndar de C++. Ellas se incluyen en los archivos de cabecera iostream.h por lo que siempre que queramos utilizarlas deberemos introducir la lnea de cdigo #include <iostream.h>. Esta biblioteca es una implementacin orientada a objetos y est basada en el concepto de flujos. A nivel abstracto un flujo es un medio de describir la secuencia de datos de una fuente a un destino o sumidero. As, por ejemplo, cuando se introducen caracteres desde el teclado, se puede pensar en caracteres que fluyen o se trasladan desde el teclado a las estructuras de datos del programa. Los objetos de flujo que vienen predefinidos sern: cin, que toma caracteres de la entrada estndar (teclado); cout, pone caracteres en la salida estndar (pantalla); cerr y clog, ponen mensajes de error en la salida estndar. Estos objetos se utilizan mediante los operadores << y >>. El operador << se denomina operador de insercin; y apunta al objeto donde tiene que enviar la informacin. Por lo tanto la sintaxis de cout ser: cout<<variable1<<variable2<<...<<variablen; No olvidemos que las cadenas de texto son variables y se ponen entre " " (comillas dobles).

26

Por su parte >> se denomina operador de extraccin, lee informacin del flujo cin (a la izquierda del operador) y las almacena en las variables indicadas a la derecha). La sintaxis sera la siguiente: cin>>variable1>>...>>variablen; Un ejemplo de cdigo utilizando ambos objetos podra ser el siguiente: #include <iostream.h> ... main () { int i; cout<<"Introduce un nmero"; cin>>i; ... } ... Que mostrara por pantalla la frase "Introduce un nmero" y posteriormente almacenara el valor introducido por teclado en la variable i <STDIO.H> Operaciones de salida. Printf: Imprimir en pantalla Para utilizar la funcin printf en nuestros programas debemos incluir la directiva: #include <stdio.h> Si slo queremos imprimir una cadena basta con escribir la siguiente lnea de cdigo. printf( "Cadena" ); Como resultado muestra en pantalla: Cadena Lo que pongamos entre las comillas es lo que vamos a sacar por pantalla. Si volvemos a usar otro printf, por ejemplo: #include <stdio.h> void main() { printf( "Cadena" ); printf( "Segunda" ); } Obtendremos:

27

CadenaSegunda Este ejemplo nos muestra cmo funciona printf. Para escribir en la pantalla se usa un cursor que no vemos. Cuando escribimos algo el cursor va al final del texto. Cuando el texto llega al final de la fila, lo siguiente que pongamos ir a la fila siguiente. Si lo que queremos es sacar cada una en una lnea deberemos usar "\n". Es el indicador de retorno de carro. Lo que hace es saltar el cursor de escritura a la lnea siguiente: #include <stdio.h> void main() { printf( "Cadena\n" ); printf( "Segunda" ); } y tendremos: Cadena Segunda Tambin podemos poner ms 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 vlido. 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 smbolo " en pantalla? Por ejemplo imaginemos que queremos escribir: Esto es "extrao" Si para ello hacemos: printf( "Esto es "extrao"" ); obtendremos unos cuantos errores. El problema es que el smbolo " se usa para indicar al compilador el comienzo o el final de una cadena. As que en realidad le estaramos dando la cadena "Esto es", luego extrao y luego otra cadena vaca "". Pues resulta que printf no admite esto y de nuevo tenemos errores. La solucin es usar \". Veamos: printf( "Esto es \"extrao\"" ); Esta vez todo ir como la seda. Como vemos la contrabarra '\' sirve para indicarle al compilador que escriba caracteres que de otra forma no podramos. Esta contrabarra se usa en C para indicar al compilador que queremos meter smbolos especiales. Pero Y si lo que queremos es usar '\' como un carcter normal y poner por ejemplo Hola\Adis? Pues muy fcil, volvemos a usar '\':

28

printf( "Hola\\Adis" ); y esta doble '\' indica a C que lo que queremos es mostrar una '\'. Operaciones de entrada. Algo 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 estndar, crear nuestras propias interrupciones de teclado (MS-Dos) o usar funciones de alguna biblioteca diferente (como por ejemplo Allegro). Las funciones estndar estn bien para un programa sencillito. Pero cuando queremos hacer juegos por ejemplo, no suelen ser suficiente. Demasiado lentas o no nos dan todas las posibilidades que buscamos, como comprobar si hay varias teclas pulsadas. Para solucionar esto tenemos dos posibilidades: La ms complicada es crear nuestras propias interrupciones de teclado. Qu es una interrupcin de teclado? Es un pequeo 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 ms 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 ms que recoger sus frutos con un par de sencillas instrucciones. Esto soluciona mucho el trabajo y nos libra de tener que aprender cmo funcionan los aspectos ms oscuros del control del teclado. Vamos ahora con las funciones de la biblioteca estndar antes mencionadas. 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 nmero " ); scanf( "%i", &num ); printf( "Has tecleado el nmero %i\n", num ); } Primero vamos a ver una nota de esttica, para hacer los programas un poco ms elegantes. Parece una tontera, pero los pequeos detalles hacen que un programa gane mucho. El scanf no mueve el cursor de su posicin actual, as que en nuestro ejemplo queda: Introduce un nmero _ /* La barra horizontal indica dnde esta el cursor */

29

Esto es porque en el printf no hemos puesto al final el smbolo de salto de lnea '\n'. Adems hemos dejado un espacio al final de Introduce un nmero: para que as cuando tecleemos el nmero no salga pegado al mensaje. Si no hubisemos dejado el espacio quedara as al introducir el nmero 120 (es un ejemplo): Introduce un nmero120. Veamos cmo 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. Despus de la coma tenemos la variable donde almacenamos el dato, en este caso 'num'. Fjate que en el scanf la variable 'num' lleva delante el smbolo &, este es muy importante, sirve para indicar al compilador cual es la direccin (o posicin en la memoria) de la variable. Podemos preguntar por ms de una variable a la vez en un slo scanf, hay que poner un %i por cada variable: #include <stdio.h> void main() { int a, b, c; printf( "Introduce tres nmeros: " ); scanf( "%i %i %i", &a, &b, &c ); printf( "Has tecleado los nmeros %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. Tambin podemos pedir en un mismo scanf variables de distinto tipo: #include <stdio.h> void main() { int a; float b; printf( "Introduce dos nmeros: " ); scanf( "%i %f", &a, &b ); printf( "Has tecleado los nmeros %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 carcter por el teclado usamos las funciones getch y getche. Estas esperan a que el usuario introduzca un carcter 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:

30

#include <stdio.h> void main() { char letra; printf( "Introduce una letra: " ); fflush( stdout ); letra = getche(); printf( "\nHas introducido la letra: %c", letra ); } Resultado: Introduce una letra: a Has introducido la letra: a Qu es el fflush( stdout )?. Pues bien, cuando usamos la funcin printf, no escribimos directamente en la pantalla, sino en una memoria intermedia (lo que llaman un bufer). Cuando este bufer se llena o cuando metemos un carcter '\n' es cuando se enva el texto a la pantalla. En este ejemplo yo quera que apareciera el mensaje Introduce una letra: y el cursor se quedara justo despus, es decir, sin usar '\n'. Si se hace esto, en algunos compiladores el mensaje no se muestra en pantalla hasta que se pulsa una tecla (probar). Y la funcin fflush( stdout ) lo que hace es enviar a la pantalla lo que hay en ese bufer. Y ahora un ejemplo con getch: #include <stdio.h> void main() { char letra; printf( "Introduce una letra: " ); fflush( stdout ); letra = getch(); printf("\n has introducido la letra :%c", letra ); } 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. ANEXOS. Usos de printf y scanf printf("Mensaje"); Escribe Mensaje en la pantalla printf("Mensaje %d",Variable); Escribe Mensaje y el valor de la Variable en pantalla printf("Mensaje Escribe Mensaje y el valor de la Variable con 2 enteros %d",Variable:2:3); y 3 decimales

31

cprintf("Mensaje"); scanf("%d",&Variable); scanf("%d %f",&Variable1,&Variable2); Nota.

Escribe Mensaje en color especificado Asigna valor entero a Variable Asigna valor entero a Variable1 y valor real a Variable2

C++ ofrece una alternativa a las llamadas de funcion printf y scanf para manejar la entrada/salida de los tipos y cadenas de datos estandar. As en lugar de printf usamos el flujo estandar de salida cout y el operador << ("colocar en"); y en lugar de scanf usamos el flujo de entrada estandar cin y el operador >>("obtener de"). Estos operadores de insercin y extraccin de flujo, a diferencia de printf y scanf, no requieren de cadenas de formato y de formato y de especificadotes de conversin para indicar los tipos de datos que son extraidos o introducidos. Las siguientes funciones nos resultan indispensables para poder brindar una mejor presentacin de los datos en pantalla. Gotoxy: Posicionando el cursor (DOS). Esta funcin slo est disponible en compiladores de C que dispongan de la biblioteca <conio.h> Hemos visto que cuando usamos printf se escribe en la posicin actual del cursor y se mueve el cursor al final de la cadena que hemos escrito. Vale, pero qu pasa cuando queremos escribir en una posicin determinada de la pantalla? La solucin est en la funcin gotoxy. Supongamos que queremos escribir 'Hola' en la fila 10, columna 20 de la pantalla: #include <stdio.h> #include <conio.h> void main() { gotoxy( 20, 10 ); printf( "Hola" ); } (Nota: para usar gotoxy hay que incluir la biblioteca conio.h). Fjate que primero se pone la columna (x) y luego la fila (y). La esquina superior izquierda es la posicin (1, 1). Clrscr: Borrar la pantalla (DOS). Ahora ya slo nos falta saber cmo se borra la pantalla. Pues es tan fcil como usar: clrscr() (clear screen, borrar pantalla).

32

Esta funcin n solo borra la pantalla, sino que adems sita el cursor en la posicin (1, 1), en la esquina superior izquierda. #include <stdio.h> #include <conio.h> void main() { clrscr(); printf( "Hola" ); } Este mtodo slo vale para compiladores que incluyan el fichero stdio.h. UNIDAD III: SUBPROGRAMAS. El subprograma (tambin llamado procedimiento, funcin o rutina), como idea general, se presenta como un subalgoritmo que forma parte del algoritmo principal, el cual permite resolver una tarea especfica. Algunos lenguajes de programacin, como Visual Basic .NET, utilizan el nombre funcin para referirse a subrutinas que devuelven un valor. Una subrutina al ser llamada dentro de un programa hace que el cdigo principal se detenga y se dirija a ejecutar el cdigo de la subrutina, en cambio cuando se llama a una macro, el compilador toma el cdigo de la macro y lo implanta donde fue llamado, aumentando as el cdigo fuente y por consiguiente el objeto. Elementos de la declaracin de una subrutina. Las declaraciones de subrutinas generalmente son especificadas por: 1.-Un nombre nico en el mbito: nombre de la funcin con el que se identifica y se distingue de otras. No podr haber otra funcin ni procedimiento con ese nombre (salvo sobrecarga o polimorfismo en programacin orientada a objetos). 2.-Un tipo de dato de retorno: tipo de dato del valor que la subrutina devolver al terminar su ejecucin. 3.-Una lista de parmetros: especificacin del conjunto de argumentos (pueden ser cero, uno o ms) que la funcin debe recibir para realizar su tarea. 4.-El cdigo u rdenes de procesamiento: conjunto de rdenes y sentencias que debe ejecutar la subrutina. Ejemplos. PROGRAMA principal instruccin 1 instruccin 2 ... instruccin N ... SUBRUTINA NombreX ....... FIN SUBRUTINA

33

... FIN PROGRAMA principal. La siguiente funcin en C es la analoga al clculo del promedio matemtico. La funcin "Promedio" devuelve un valor decimal correspondiente a la suma de 2 valores enteros de entrada (A y B): float Promedio(int A, int B){ float r; r=(A+B)/2.0; return r; } As una llamada "Promedio(3, 5)" devolver el valor de tipo real (float) 4,0. 3.1. ESTRUCTURAS DE CONTROL: IF-THEN-ELSE. La estructura IF-ELSE permite establecer una bifurcacin o alternativa dentro de una secuencia de rdenes. Es decir, en ocasiones es posible que deseemos que el programa ejecute una instruccin o instrucciones, pero solo si se cumple determinada circunstancia, y, en caso contrario, o bien no hacer nada, o bien ejecutar otras instrucciones diferentes. Por ejemplo, queremos hacer un alias que a intervalos de un minuto mida nuestro lag, y solo si este supera los 15 segundos nos enve un mensaje a la pantalla de Status avisndonos de cuanto lag tenemos. Esto no es posible hacerlo mediante una secuencia lineal de instrucciones; es preciso que el programa discierna en algn momento si procede o no ejecutar la orden de imprimir un mensaje. Esta posibilidad es la que nos facilita la estructura IF. En definitiva, IF comparar valores, y ejecutar o no diferentes instrucciones, en funcin del resultado de la comparativa. Esta orden compara del contenido de dos variables, y solo en caso de que la primera variable sea mayor que la segunda enviar un mensaje a la pantalla de Status, y har sonar un sonido Wav que supuestamente tenemos dentro de un directorio de la unidad C: llamado "sonidos". Obsrvese que la condicin del if se debe de poner entre parntesis, y las instrucciones internas a ejecutar estarn encerradas entre llaves (si solo hay una instruccin no son necesarias las llaves). Como se puede ver en la sintaxis general del if, junto este se pueden emplear otras dos instrucciones: elseif y else, aunque estas solo de forma opcional. Si podemos leer la sintaxis de IF de la siguiente forma: Si ( pasa esto ) { Haz esto }. La del else if equivaldr a: En caso contrario, si ( pasa esto ) { Haz esto }.

34

El anexo else es una posibilidad que permite ejecutar una serie de instrucciones en caso de que lo anterior no se haya producido. Las instrucciones comprendidas dentro del else se ejecutarn siempre que no hay resultado cierta la condicin del if ni, de existir, la del elseif. Si no se especifica un else, el script sencillamente continuar a desde la instruccin siguiente al ltimo "}", o bien terminar si no hay nada ms. Es perfectamente posible "anidar" instrucciones if, es decir, incluir ms ifs dentro del bloque de instrucciones de un if. Por ejemplo, queremos hacer un alias que se llame "nmeros". Este, al ejecutarse, nos pedir tres nmeros cualesquiera que cargar en tres variables, a continuacin evaluar cual es el mayor de los tres y nos lo imprimir en la ventana de Status. Podramos hacer algo como lo siguiente: /nmeros { set %A $$?="Introduce el primer nmero" set %B $$?="Introduce el segundo nmero" set %C $$?="Introduce el tercer nmero" if ( %A > %B ) { if ( %A > %C ) { echo -s El mayor es %A } else { echo -s El mayor es %C } } } elseif ( %B > %C ) { echo -s El mayor es %B } else { echo -s El mayor es %C } unset %A %B %C Los operadores de comparacin que podemos utilizar dentro de la condicin de un if son los siguientes: A == B A != B A<B A>B A >= B A <= B A // B A \\ B A isin B A Igual a B A distinto de B A menor que B A mayor que B A menor o igual que B A menor o igual que B A es mltiplo de B A no es mltiplo de B La cadena de caracteres A se encuentra incluida dentro de la cadena 35

B A iswm B A isnum B La cadena A es idntica a la cadena B A es un nmero incluido dentro de la cadena de nmeros B. Si no se pone B se evala simplemente si A es un nmero Igual al anterior pero con letras en lugar de nmeros El nick A est en el canal B El nick A es operador en el canal B El nick A tiene voz en el canal B A est en este momento en el mismo canal que nosotros El nick A est en muestra lista de auto-op para el canal B (B opcional) A est en nuestra lista de ignorados A est en nuestra lista de protegidos en el canal B (B opcional) A est en nuestra lista de notify

A isletter B A ison B A isop B A isvo B A ischan A isauto B

A isignore A isprotect B A isnotify

En esta tabla se han usado, para hacerla ms comprensible, los operndos genricos A y B; en su lugar podemos usar valores numricos, cadenas de caracteres, variables (identificndolas con su nombre precedido del smbolo %), o identificadores (con su nombre precedido del smbolo $). Si anteponemos el smbolo ! delante de cualquiera de los operadores de la tabla anterior este ser negado, es decir, la condicin se evaluar como cierta no cuando suceda eso, sino cuando no suceda. Por ejemplo: !isauto quiere decir que la condicin se cumple cuando ese nick no est en la lista de auto-op. Este alias lista los Ops en canal donde nos encontramos. Este es el camino difcil, desde el momento que podemos usar el comando $opnick() en vez de utilizar el comando $nick() del servidor, pero esto nos dar un ejemplo de cmo el isop puede ser utilizado y de cmo el $null es devuelto una vez que alcanzamos el final de la lista. listops { 36

echo 4 * Escuchando Ops activado en # set %i 1 :next set %nick $nick(%i,#) if %nick == $null goto done if %nick isop # echo 3 %nick es un Op! inc %i goto next :done echo 4 * Fin de la lista de Ops } Este es un alias con definicin y activacin desde popups que le da Ops a los nick seleccionados en la lista de nicks. DarOps { %i = 0 %nicks = "" :nextnick inc %i if ($snick(%i,#) == $null) { if ($len(%nicks) > 0) mode # +oooo %nicks | halt } %nicks = %nicks $snick(%i,#) if (4 // %i) { mode # +oooo %nicks | %nicks = "" } goto nextnick } Este remote intercepta los Pings y enva un mensaje sobre los cerca o lejos que se encuentra el usuario. on 1:ctcpreply:PING* { if ($2 == $null) halt else { %pt = $ctime - $2 if (%pt < 0) set %pt 0 if (%pt < 5) echo 4 [PING reply] $nick esta demasiado cerca para mi gusto elseif (%pt < 20) echo 4 [PING reply] $nick se encuentra a la distancia correcta else echo 4 [PING reply] muerde el polvo $nick, muerde el polvo $nick } halt } Si la condicin es verdadera, se ejecuta el bloque de sentencias 1, de lo contrario, se ejecuta el bloque de sentencias 2. IF (Condicin) THEN (Bloque de sentencias 1) ELSE (Bloque de sentencias 2) END IF Select-Case.

37

Se evala la expresin, dando como resultado un nmero. Luego, se recorren los "Case" dentro de la estructura buscando que el nmero coincida con uno de los valores. 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 ningn valor, se ejecuta el bloque de sentencias de la seccin "Case Else". SELECT (Expresin) 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 3.2. CICLOS. Rutina que ejecuta un conjunto de instrucciones de manera repetitiva hasta que se cumple. FOR. En pseudocdigo, para escribir una instruccin repetitiva para se utiliza la sintaxis: para <variable> <valor_inicial> hasta <valor_final> [ incremento <valor_incremento> ] hacer <bloque_de_instrucciones> fin_para En una instruccin repetitiva para, siempre se utiliza una <variable> a la que se debe asignar un <valor_inicial>. En cada iteracin del bucle, al valor de la <variable> se le suma el <valor_incremento> y, cuando la <variable> supera el <valor_final>, el bucle finaliza. En consecuencia, cuando el flujo de un algoritmo llega a un bucle para, en primer lugar, se asigna el <valor_inicial> a la <variable> y, a partir de ese instante, existen dos posibilidades: Si el valor de la <variable> es mayor que el <valor_final>, entonces no se ejecuta el bloque de instrucciones, y el bucle para finaliza sin realizar ninguna iteracin. Si el valor de la <variable> es menor o igual que el <valor_final>, entonces, se ejecuta el bloque de instrucciones y, despus, se le suma el <valor_incremento> a la <variable>, volvindose, de nuevo, a comparar el valor de la <variable> con el <valor_final>. Y as sucesivamente, hasta que, el valor de la <variable> sea mayor que el <valor_final>.

38

En resumen, una instruccin repetitiva para permite ejecutar, repetidamente, un bloque de instrucciones, en base a un valor inicial y a un valor final. El bucle para es ideal usarlo cuando, de antemano, ya se sabe el nmero de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones. El bucle para es una variante del bucle mientras y, al igual que ste, puede iterar cero o ms veces. Sin embargo, el bucle para slo se suele usar cuando se conoce el nmero exacto de veces que tiene que iterar el bucle. ste es el caso del problema planteado en el ejemplo del apartado 10.1.1 Variable contador, en el cual, se sabe de antemano que el bucle tiene que iterar, exactamente, diez veces. Ejemplo 1: Por tanto, dicho problema, se puede resolver con una instruccin repetitiva para de la siguiente forma: algoritmo Numeros_del_1_al_10 variables entero contador inicio para contador 1 hasta 10 incremento 1 hacer escribir( contador ) fin_para fin Ejemplo 2: Cuando el incremento es 1, se puede omitir la palabra reservada incremento, y su valor. algoritmo Numeros_del_1_al_10 variables entero contador inicio /* Al no aparecer el valor del incremento, se entiende que es 1. */ para contador 1 hasta 10 hacer escribir( contador ) fin_para fin La traza de ambos algoritmos es la misma: Secuencia: 1 2 Accin (instruccin): contador 1 (Comprobar si contador es menor o igual que 10 ) contador s es menor o igual que 10. Inicio de la iteracin 1. escribir( contador ) Fin de la iteracin 1. Valor de: contador 1 1

39

4 5

6 ... n-3

(Sumar a contador el valor 1 ) (Comprobar si contador es menor o igual que 10 ) contador s es menor o igual que 10. Inicio de la iteracin 2. escribir( contador ) Fin de la iteracin 2. (Comprobar si contador es menor o igual que 10 ) contador s es menor o igual que 10. Inicio de la iteracin 10. escribir( contador ) Fin de la iteracin 10. (Sumar a contador el valor 1 ) (Comprobar si contador es menor o igual que 10 ) contador no es menor o igual que 10. El bucle finaliza despus de 10 iteraciones.

2 2

10

n-2 n-1 n

10 11 11

Figura. Traza de los ejemplos 1 y 2. Explicacin de la traza: Primeramente, se le asigna el valor 1 a contador (accin 1). A continuacin, se comprueba si contador es menor o igual que 10 (accin 2) y, puesto que esto es verdadero, se ejecuta el bloque de instrucciones del bucle para (una sola instruccin en este caso). As pues, se muestra por pantalla el valor de contador (accin 3). Despus, se incrementa en 1 el valor de la variable contador (accin 4). Posteriormente, se vuelve a comprobar si contador es menor o igual que 10 (accin 5). Y as sucesivamente, mientras que, el valor de contador sea menor o igual que 10, o dicho de otro modo, hasta que, el valor de contador sea mayor que 10. En este algoritmo, el bloque de instrucciones del bucle para se ejecuta diez veces (iteraciones). Ejemplo 3: Para resolver el problema del ejemplo del apartado 10.1.2 Cambios en un bucle mientras, utilizando un bucle para, debe utilizarse un incremento negativo. algoritmo Numeros_del_10_al_1 variables entero contador inicio para contador 10 hasta 1 incremento -1 hacer escribir( contador ) fin_para fin. En este algoritmo, el <valor_inicial> y el <valor_final> son el 10 y el 1, respectivamente, al revs que en el algoritmo anterior. De manera que, el bucle iterar, hasta que, el valor

40

de contador sea menor que 1, o dicho de otro modo, mientras que, el valor de contador sea mayor o igual que 1. Ejemplo 4: Por otra parte, tambin es posible omitir la palabra reservada incremento y su valor, entendindose, en ese caso, que es -1, ya que, el <valor_inicial> es mayor que el <valor_final> y, por tanto, slo es razonable un incremento negativo. algoritmo Numeros_del_10_al_1 variables entero contador inicio /* Al no aparecer el valor del incremento, se entiende que es -1. */ para contador 10 hasta 1 hacer escribir( contador ) fin_para fin Para los casos en que el incremento es negativo, tambin se puede utilizar la sintaxis: para <variable> <valor_inicial> hasta <valor_final> [ decremento <valor_decremento> ] hacer <bloque_de_instrucciones> fin_para /* En vez de "incremento", se utiliza "decremento". */ Ejemplo 5: As, podemos escribir: algoritmo Numeros_del_10_al_1 variables entero contador inicio para contador 10 hasta 1 decremento 1 hacer escribir( contador ) fin_para fin Por consiguiente, la sintaxis completa de una instruccin repetitiva para es: para <variable> <valor_inicial> hasta <valor_final> [ incremento <valor_incremento> | decremento <valor_decremento> ] hacer <bloque_de_instrucciones> fin_para El carcter tubera ( | ) se utiliza para indicar que, o bien se escribe: incremento <valor_incremento> o bien se escribe decremento <valor_decremento> pero, no ambos.

41

WHILE. En pseudocdigo, para escribir una instruccin repetitiva mientras, se utiliza la sintaxis: mientras ( <expresin_lgica> ) <bloque_de_instrucciones> fin_mientras Igual que en las instrucciones alternativas doble y simple, a la <expresin_lgica> de una instruccin repetitiva mientras, tambin se le llama condicin. Para que se ejecute el <bloque_de_instrucciones>, la condicin tiene que ser verdadera. Por el contrario, si la condicin es falsa, el <bloque_de_instrucciones> no se ejecuta. Por tanto, cuando el flujo de un algoritmo llega a un bucle mientras, existen dos posibilidades: Si la condicin se evala a falsa, el bloque de instrucciones no se ejecuta, y el bucle mientras finaliza sin realizar ninguna iteracin. Si la condicin se evala a verdadera, el bloque de instrucciones s que se ejecuta y, despus, se vuelve a evaluar la condicin, para decidir, de nuevo, si el bloque de instrucciones se vuelve a ejecutar o no. Y as sucesivamente, hasta que, la condicin sea falsa. El <bloque_de_instrucciones> de un bucle mientras puede ejecutarse cero o ms veces (iteraciones). Si el <bloque_de_instrucciones> se ejecuta al menos una vez, seguir ejecutndose repetidamente, mientras que, la condicin sea verdadera. Pero, hay que tener cuidado de que el bucle no sea infinito. Cuando la condicin de un bucle mientras se evala siempre a verdadera, se dice que se ha producido un bucle infinito, ya que, el algoritmo nunca termina. Un bucle infinito es un error lgico. Es importante hacer hincapi en el hecho de que, en un bucle mientras, primero se evala la condicin y, en el caso de que sta sea verdadera, entonces se ejecuta el bloque de instrucciones. Veremos que, en el bucle hacer...mientras, el procedimiento es al revs. En l, primero se ejecuta el bloque de instrucciones y, despus, se evala la condicin. Para que un bucle mientras no sea infinito, en el bloque de instrucciones debe ocurrir algo para que la condicin deje de ser verdadera. En la mayora de los casos, la condicin se hace falsa al cambiar el valor de una variable. En resumen, una instruccin repetitiva mientras permite ejecutar, repetidamente, (cero o ms veces) un bloque de instrucciones, mientras que, una determinada condicin sea verdadera. DOWHILE. En pseudocdigo, para escribir una instruccin repetitiva hacer...mientras se utiliza la sintaxis:

42

hacer <bloque_de_instrucciones> mientras ( <expresin_lgica> ) Como se puede apreciar, la instruccin repetitiva hacer...mientras, tambin hace uso de una condicin. En un bucle hacer...mientras, primero se ejecuta el bloque de instrucciones y, despus, se evala la condicin. En el caso de que sta sea verdadera, se vuelve a ejecutar el bloque de instrucciones. Y as sucesivamente, hasta que, la condicin sea falsa. Por consiguiente, cuando el flujo de un algoritmo llega a un bucle hacer...mientras, existen dos posibilidades: Se ejecuta el bloque de instrucciones y, despus, si la condicin se evala a falsa, el bloque de instrucciones no se vuelve a ejecutar, de manera que, el bucle hacer...mientras finaliza, habiendo realizado una sola iteracin. Se ejecuta el bloque de instrucciones y, a continuacin, si la condicin se evala a verdadera, el bloque de instrucciones se vuelve a ejecutar. Y as sucesivamente, hasta que la condicin sea falsa. El <bloque_de_instrucciones> de un bucle hacer...mientras puede ejecutarse una o ms veces (iteraciones). Tambin hay que prevenir que el bucle no sea infinito. En resumen, una instruccin repetitiva hacer...mientras permite ejecutar repetidamente (una o ms veces) un bloque de instrucciones, mientras que, una determinada condicin sea verdadera. Ejemplo 1: De modo que, utilizando un bucle hacer...mientras, el problema del ejemplo 1 del apartado anterior, 10.1 Repetitiva mientras, se puede resolver con el cdigo: algoritmo Numeros_del_1_al_10 variables entero contador inicio contador 1 /* Inicializacin del contador */ hacer escribir( contador ) /* Salida */ contador contador + 1 /* Incremento */ mientras ( contador <= 10 ) /* Condicin */ fin La traza del algoritmo es: Secuencia: 1 Accin (instruccin): contador 1 Inicio de la iteracin 1. Valor de: contador 1

43

2 3 4

5 6 ... n-3

escribir( contador ) contador contador + 1 Fin de la iteracin 1. (Comprobar si contador <= 10) La condicin es verdadera. Inicio de la iteracin 2. escribir( contador ) contador contador + 1 Fin de la iteracin 2. (Comprobar si contador <= 10) La condicin es verdadera. Inicio de la iteracin 10. escribir( contador ) contador contador + 1 Fin de la iteracin 10. (Comprobar si contador <= 10) La condicin es falsa. El bucle finaliza despus de 10 iteraciones.

1 2 2

2 3

10

n-2 n-1 n

10 11 11

Figura. Traza del ejemplo 1. Explicacin de la traza: En primer lugar, se le asigna el valor 1 a contador (accin 1). A continuacin, se ejecuta el bloque de instrucciones del bucle hacer... mientras, mostrndose por pantalla el valor de contador (accin 2) y, despus, se incrementa en 1 el valor de la variable contador (accin 3). Una vez ejecutado el bloque de instrucciones, se evala la condicin de salida del bucle ( contador <= 10 ) (accin 4) y, puesto que, es verdadera, se ejecuta, de nuevo, el bloque de instrucciones. Y as sucesivamente, mientras que, la condicin sea verdadera, o dicho de otro modo, hasta que, la condicin sea falsa. En este algoritmo, el bloque de instrucciones del bucle se ejecuta diez veces (iteraciones). Al igual que ocurre con la instruccin repetitiva mientras, cualquier pequeo descuido o error al escribir el cdigo del algoritmo, puede dar lugar a que la instruccin repetitiva hacer...mientras no funcione correctamente. Como ya se ha dicho, el bucle hacer...mientras puede iterar una o ms veces, por tanto, cuando un bloque de instrucciones debe iterar al menos una vez, generalmente, es mejor utilizar un bucle hacer...mientras que un bucle mientras, como por ejemplo, en el siguiente problema. Ejemplo 2: Se quiere disear el algoritmo de un programa que: 1) Pida por teclado un nmero (dato entero). 2) Pregunte al usuario si desea introducir otro o no. 3) Repita los pasos 1 y 2, mientras que, el usuario no responda 'n' de (no). 4) Muestre por pantalla la suma de los nmeros introducidos por el usuario. 44

En pantalla:

Solucin: algoritmo Suma_de_numeros_introducidos_por_el_usuario variables caracter seguir entero acumulador, numero inicio /* En acumulador se va a guardar la suma de los nmeros introducidos por el usuario. */ acumulador 0 hacer escribir( "Introduzca un nmero entero: " ) leer( numero ) acumulador acumulador + numero escribir( "Desea introducir otro nmero (s/n)?: " ) leer( seguir ) mientras ( seguir <> 'n' ) /* Mientras que el usuario desee introducir ms nmeros, el bucle iterar. */ escribir( "La suma de los nmeros introducidos es: ", acumulador ) fin UNIDAD IV: FUNCIONES. En programacin, una funcin es un grupo de instrucciones con un objetivo en particular y que se ejecuta al ser llamada desde otra funcin o procedimiento. Una funcin puede llamarse mltiples veces e incluso llamarse a s misma (funcin recurrente). Las funciones pueden recibir datos desde afuera al ser llamadas a travs de los parmetros y deben entregar un resultado. Se diferencian de los procedimientos porque estos no devuelven un resultado. En general las funciones deben tener un nombre nico en el mbito para poder ser llamadas, un tipo de dato de resultado, una lista de parmetros de entrada y su cdigo. 45

4.1. DEFINICIN. Una funcin es un conjunto de lneas de cdigo que realizan una tarea especfica y puede retornar un valor. Las funciones pueden tomar parmetros que modifiquen su funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comnmente utilizadas durante un programa y de esta manera reducir la cantidad de cdigo. Cuando una funcin es invocada se le pasa el control a la misma, una vez que esta finaliz con su tarea el control es devuelto al punto desde el cual la funcin fue llamada.

<tipo> [clase::] <nombre> ( [Parmetros] ) { cuerpo; } Ejemplo de una funcin Para comenzar, vamos a considerar el caso en el cual se desea crear la funcin cuadrado(), misma que deber volver el cuadrado de un nmero real (de punto flotante), es decir, cuadrado() aceptar nmeros de punto flotante y regresar una respuesta como nmero flotante. Nota: aunque para la funcin que veremos el tipo de retorno coincide con el tipo de parmetro pasado, algunas veces las cosas pueden cambiar, es decir, no es obligatorio que una funcin reciba un parmetro de un tipo y que tenga que regresar una respuesta de dicho tipo. // regresar el cuadrado de un nmero double cuadrado(double n) { return n*n; }

46

Parmetros. Normalmente, las funciones operan sobre ciertos valores pasados a las mismas ya sea como constantes literales o como variables, aunque se pueden definir funciones que no reciban parmetros. Existen dos formas en C++ de pasar parmetros a una funcin; por referencia o por valor. El hecho es que si en una declaracin de funcin se declaran parmetros por referencia, a los mismos no se les podr pasar valores literales ya que las referencias apuntan a objetos (variables o funciones) residentes en la memoria; por otro lado, si un parmetro es declarado para ser pasado por valor, el mismo puede pasarse como una constante literal o como una variable. Los parmetros pasados por referencia pueden ser alterados por la funcin que los reciba, mientras que los parametros pasados por valor o copa no pueden ser alterados por la funcin que los recibe, es decir, la funcin puede manipular a su antojo al parmetro, pero ningn cambio hecho sobre este se reflejar en el parmetro original. Parmetros por valor. La funcin cuadrado() (ver arriba) es un clsico ejemplo que muestra el paso de parmetros por valor, en ese sentido la funcin cuadrado() recibe una copia del parmetro n. En la misma funcin se puede observar que se realiza un calculo ( n*n ), sin embargo el parmetro original no sufrir cambio alguno, esto seguir siendo cierto an cuando dentro de la funcin hubiera una instruccin parecida a n = n * n; o n*=n;. Parmetros por referencia. Para mostrar un ejemplo del paso de parmetros por referencia, vamos a retomar el caso de la funcin cuadrado, salvo que en esta ocasin cambiaremos ligeramente la sintaxis para definir la misma. Veamos: // regresar el cuadrado de un nmero double cuadrado2(double &n) { n *= n; return n; } Al poner a prueba las funciones cuadrado() y cuadrado2() se podr verificar que la primera de estas no cambia el valor del parmetro original, mientras que la segunda s lo hace. 4.2. ESTRUCTURA DE UNA FUNCIN. Al igual que cualquier otro tipo los parmetros de tipo estruturado pueden pasarse por valor o por referencia, sin embargo, podra ser que si una estructura es pasada por valor el compilador mostrara una advertencia ( warning ) indicando que se pasado por valor una estructura, puesto que el paso de estructuras por valor es permitido usted puede ignorar la advertencia, pero lo mejor es pasar estructuras por referencia. Si una estructura es pasada

47

por valor y si esta es muy grande podria ser que se agotara la memoria en el segmento de pila ( Stack Segment ), aparte de que la llamada a la funcin sera ms lenta. Para ver un ejemplo, consideremos el caso del siguiente tipo estructurado: struct empleado { char nombre[32]; int edad; char sexo; }; Ahora, pensemos que deseamos escribir una funcin para imprimir variables del tipo empleado. As, la funcin puede escribirse de las tres maneras siguientes: // Parametro empleado pasado por valor void ImprimeEmpleadoV( empleado e) { printf("Nombre: %s\n", e.nombre); printf("Edad : %i\n", e.edad); printf("Sexo : %c\n", e.sexo); return; } // Parametro empleado pasado por referencia void ImprimeEmpleadoR( empleado &e ) { printf("Nombre: %s\n", e.nombre); printf("Edad : %i\n", e.edad); printf("Sexo : %c\n", e.sexo); return; } // Parametro empleado pasado como puntero void ImprimeEmpleadoP( empleado *e ) { printf("Nombre: %s\n", e->nombre); printf("Edad : %i\n", e->edad); printf("Sexo : %c\n", e->sexo); return; } Funciones sobrecargadas. C++, a diferencia del C estndar, permite declarar funciones con el mismo nombre y a esto se conoce como sobrecarga de funciones. Las funciones sobrecargadas pueden coincidir en tipo, pero al menos uno de sus parmetros tiene que ser diferente. En todo caso, si usted trata de declarar funciones sobrecargadas que coincidan en tipo y nmero de parmetros el compilador no se lo permitir. Para poner un ejemplo vamos a considerar el caso de dos funciones cuyo nombre ser divide, ambas regresarn el cociente de dos nmeros, salvo que una de ellas operar sobre nmeros enteros y la otra lo har sobre nmeros reales ( de punto flotante ).

48

Nota: cuando en los programas se hace una llamada a una funcin sobrecargada, el compilador determina a cual de las funciones invocar en base al tipo y nmero de parmetros pasados a la funcin. // programa : funciones03.cpp // autor : Oscar E. Palacios #include <iostream.h> #include <stdlib.h> using namespace std; // divide enteros int divide(int a, int b) { cout << "divisin entera" << endl; return ( (b != 0) ? a/b : 0); } // divide reales double divide(double a, double b) { cout << "divisin real" << endl; return ( (b != 0) ? a/b : 0); } // punto de prueba int main() { cout << divide(10, 3) << endl; cout << divide(10.0, 3.0) << endl; cin.get(); } 4.3. LLAMADO DE FUNCIONES. Una vez que en su programa se ha definido una funcin, esta puede ser llamada las veces que sean necesarias. Para llamar a una funcin basta con hacer referencia a su nombre y si la misma requiere de parmetros estos debern indicarse dentro de parentesis. Para llamar a una funcin que no requiera de parmetros se deber indicar el nombre de la misma seguida de parentesis vacios. Por ejemplo, para llamar a la funcin cuadrado() vista anteriormente, podemos emplear: cout << cuadrado(25); cout << cuadrado(X); R = cuadrado(X); // guardar en R el cuadrado de X UNIDAD V: ARREGLOS.

49

Un array (matriz o vector) es un conjunto finito y ordenado de elementos homogneos. La propiedad ordenado significa que el elemento primero, segundo y tercero,, ensimo de un array puede ser identificado. Los elementos del array son homogneos, es decir, del mismo tipo de datos. Los array tambin se conocen como matricesen matemticas y tablas en clculos financieros. En otras palabras un arreglo es una especie de variable que contiene muchos valores pero cada uno con una posicin diferente. Un arreglo puede ser unidimensional o vectorial, bidimensional o matricial, o multidimencional. 5.1. CONCEPTOS.

En programacin, una matriz o vector (llamados en ingls arrays) es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista lgico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). En principio, se puede considerar que todas las matrices son de una dimensin, la dimensin principal, pero los elementos de dicha fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de matrices multidimensionales, aunque las ms fciles de imaginar son los de una, dos y tres dimensiones. Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sera ms adecuado utilizar una lista, ya que esta estructura puede cambiar de tamao fcilmente durante la ejecucin de un programa. ndices. Todo vector se compone de un determinado nmero de elementos. Cada elemento es referenciado por la posicin que ocupa dentro del vector. Dichas posiciones son llamadas ndice y siempre son correlativos. Existen tres formas de indexar los elementos de una matriz: 1.-Indexacin base-cero (0): En este modo el primer elemento del vector ser la componente cero ('0') del mismo, es decir, tendr el indice '0'. En consecuencia, si el vector tiene 'n' componentes la ltima tendr como ndice el valor 'n-1'. El C es un ejemplo tpico de lenguaje que utiliza este modo de indexacin. 2.-Indexacin base-uno (1): En esta forma de indexacin, el primer elemento de la matriz tiene el indice '1' y el ltimo tiene el ndice 'n' (para una matriz de 'n' componentes). 3.-Indexacin base-n (n): Este es un modo verstil de indexacin en la que el ndice del primer elemento puede ser elegido libremente, en algunos lenguajes de programacin se

50

permite que los ndices puedan ser negativos e incluso de cualquier tipo escalar (tambin cadenas de caracteres). Notacin. La representacin de un elemento en un vector se suele hacer mediante el identificador del vector seguido del ndice entre corchetes, parntesis o llaves: Notacin vector[ndice_1,ndice_2...,ndice_N] vector[ndice_1][ndice_2]...[ndice_N] vector(ndice_1,ndice_2...,ndice_N) Ejemplos (Java, Lexico, Perl, etc.) (C, C++, PHP, etc.) (Basic)

Aunque muchas veces en pseudocdigo y en libros de matemtica se representan como letras acompaadas de un subndice numrico que indica la posicin a la que se quiere acceder. Por ejemplo, para un vector "A": A0,A1,A2,... (vector unidimensional). Forma de acceso. La forma de acceder a los elementos de la matriz es directa; esto significa que el elemento deseado es obtenido a partir de su ndice y no hay que ir buscndolo elemento por elemento (en contraposicin, en el caso de una lista, para llegar, por ejemplo, al tercer elemento hay que acceder a los dos anteriores o almacenar un apuntador o puntero que permita acceder de manera rpida a ese elemento. Para trabajar con vectores muchas veces es preciso recorrerlos. Esto se realiza por medio de bucles. El siguiente pseudocdigo muestra un algoritmo tpico para recorrer un vector y aplicar una funcin 'f(...)' a cada una de las componentes del vector: i=0 mientras (i < longitud) #Se realiza alguna operacin con el vector en la i-sima posicin f(v[i]) i=i+1 fin_mientras 5.2. ARREGLOS UNIDIMENSIONALES. Un arreglo unidimensional es un tipo de datos estructurado que est formado de una coleccin finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un ndice para cada elemento del arreglo que nos da su posicin relativa. Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se debe proporcionar la direccin base del arreglo, la cota superior y la inferior.

51

REPRESENTACION EN MEMORIA Los arreglos se representan en memoria de la forma siguiente: x : array[1..5] of integer

Para establecer el rango del arreglo (nmero total de elementos) que componen el arreglo se utiliza la siguiente formula: RANGO = Ls - (Li+1) donde: ls = Lmite superior del arreglo li = Lmite inferior del arreglo Para calcular la direccin de memoria de un elemento dentro de un arreglo se usa la siguiente formula: A[i] = base(A) + [(i-li) * w] donde: A = Identificador nico del arreglo i = Indice del elemento li = Lmite inferior w = Nmero de bytes tipo componente Si el arreglo en el cual estamos trabajando tiene un ndice numerativo utilizaremos las siguientes frmulas: RANGO = ord (ls) - (ord (li)+1) 52

A[i] = base (A) + [ord (i) - ord (li) * w]

Arreglos Bidimensionales. Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito ordenado y homogneo. El acceso a ellos tambin es en forma directa por medio de un par de ndices. Los arreglos bidimensionales se usan para representar datos que pueden verse como una tabla con filas y columnas. La primera dimensin del arreglo representa las columnas, cada elemento contiene un valor y cada dimensin representa una relacin La representacin en memoria se realiza de dos formas : almacenamiento por columnas o por renglones. Para determinar el nmero total de elementos en un arreglo bidimensional usaremos las siguientes frmulas: RANGO DE RENGLONES (R1) = Ls1 - (Li1+1) RANGO DE COLUMNAS (R2) = Ls2 - (Li2+1) No. TOTAL DE COMPONENTES = R1 * R2 REPRESENTACION EN MEMORIA POR COLUMNAS

x : array [1..5,1..7] of integer Para calcular la direccin de memoria de un elemento se usan la siguiente formula: A[i,j] = base (A) + [((j - li2) R1 + (i + li1))*w] REPRESENTACION EN MEMORIA POR RENGLONES

53

x : array [1..5,1..7] of integer Para calcular la direccin de memoria de un elemento se usan la siguiente formula: A[i,j] = base (A) + [((i - li1) R2 + (j + li2))*w] donde: i = Indice del rengln a calcular j = Indice de la columna a calcular li1 = Lmite inferior de renglones li2 = Lmite inferior de columnas w = Nmero de bytes tipo componente 5.3. ARREGLOS MULTIDIMENSIONALES. Este tambin es un tipo de dato estructurado, que est compuesto por n dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n ndices, uno para cada dimensin Para determinar el nmero de elementos en este tipo de arreglos se usan las siguientes frmulas: RANGO (Ri) = lsi - (lii + 1) No. TOTAL DE ELEMENTOS = R1 * R2* R3 * ...* Rn donde: i = 1 ... n n = No. total de dimensiones Para determinar la direccin de memoria se usa la siguiente formula: LOC A[i1,i2,i3,...,in] = base(A) + [(i1-li1)*R3*R4*Rn + (i2-li2)*R3*R2*... (in lin)*Rn]*w Operaciones Con Arreglos. Las operaciones en arreglos pueden clasificarse de la siguiente forma:

54

Lectura Escritura Asignacin Actualizacin Ordenacin Bsqueda a) LECTURA. Este proceso consiste en leer un dato de un arreglo y asignar un valor a cada uno de sus componentes. La lectura se realiza de la siguiente manera: para i desde 1 hasta N haz x<--arreglo[i] b) ESCRITURA. Consiste en asignarle un valor a cada elemento del arreglo. La escritura se realiza de la siguiente manera: para i desde 1 hasta N haz arreglo[i]<--x c) ASIGNACION. No es posible asignar directamente un valor a todo el arreglo, por lo que se realiza de la manera siguiente: para i desde 1 hasta N haz arreglo[i]<--algn_valor d) ACTUALIZACION. Dentro de esta operacin se encuentran las operaciones de eliminar, insertar y modificar datos. Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo est o no ordenado. Para arreglos ordenados los algoritmos de insercin, borrado y modificacin son los siguientes: 1.- Insertar. Si i< mensaje(arreglo contrario caso En arreglo[i]<--valor i<--i+1 entonces> 2.- Borrar. Si N>=1 entonces inicio i<--1 encontrado<--falso mientras i<=n y encontrado=falso inicio si arreglo[i]=valor_a_borrar entonces inicio encontrado<--verdadero

55

N<--N-1 para k desde i hasta N haz arreglo[k]<--arreglo[k-1] fin en caso contrario i<--i+1 fin fin Si encontrado=falso entonces mensaje (valor no encontrado)

3.- Modificar. Si N>=1 entonces inicio i<--1 encontrado<--falso mientras i<=N y encontrado=false haz inicio Si arreglo[i]=valor entonces arreglo[i]<--valor_nuevo encontrado<--verdadero En caso contrario i<--i+1 fin fin Ordenaciones en Arreglos. La importancia de mantener nuestros arreglos ordenados radica en que es mucho ms rpido tener acceso a un dato en un arreglo ordenado que en uno desordenado. Existen muchos algoritmos para la ordenacin de elementos en arreglos, enseguida veremos algunos de ellos. a) Seleccin Directa. Este mtodo consiste en seleccionar el elemento ms pequeo de nuestra lista para colocarlo al inicio y as excluirlo de la lista. Para ahorrar espacio, siempre que vayamos a colocar un elemento en su posicin correcta lo intercambiaremos por aquel que la est ocupando en ese momento. El algoritmo de seleccin directa es el siguiente: i <- 1 mientras i<= N haz min <-i j <- i + 1 mientras j <= N haz si arreglo[j] < [min] entonces

56

min <-j j <- j + 1 intercambia(arreglo[min],arreglo[i]) i <- i +1 b) Ordenacin por Burbuja. Es el mtodo de ordenacin ms utilizado por su fcil comprensin y programacin, pero es importante sealar que es el ms ineficiente de todos los mtodos . Este mtodo consiste en llevar los elementos menores a la izquierda del arreglo los mayores a la derecha del mismo. La idea bsica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre s hasta que todos se encuentren ordenados. i <- 1 mientras i < N haz j <- N mientras j > i haz si arreglo[j] < arreglo[j-1] entonces intercambia(arreglo[j],arreglo[j-1]) j<j-1 i <- i +1 c) Ordenacin por Mezcla, Este algoritmo consiste en partir el arreglo por la mitad, ordenar la mitad izquierda, ordenar la mitad derecha y mezclar las dos mitades ordenadas en un array ordenado. Este ltimo paso consiste en ir comparando pares sucesivos de elementos (uno de cada mitad) y poniendo el valor ms pequeo en el siguiente hueco. procedimiento mezclar(dat,izqp,izqu,derp,deru) inicio izqa <- izqp dera <- derp ind <- izqp mientras (izqa <= izqu) y (dera <= deru) haz si arreglo[izqa] < dat[dera] entonces temporal[ind] <- arreglo[izqa] izqa <- izqa + 1 en caso contrario temporal[ind] <- arreglo[dera] dera <- dera + 1 ind <- ind +1 mientras izqa <= izqu haz temporal[ind] <- arreglo[izqa] izqa <- izqa + 1 ind <- ind +1 mientras dera <= deru haz temporal[ind] <=dat[dera] dera <- dera + 1 ind <- ind + 1 para ind <- izqp hasta deru haz

57

arreglo[ind] <- temporal[ind] fin Bsquedas en Arreglos. Una bsqueda es el proceso mediante el cual podemos localizar un elemento con un valor especfico dentro de un conjunto de datos. Terminamos con xito la bsqueda cuando el elemento es encontrado. A continuacin veremos algunos de los algoritmos de bsqueda que existen.

a) Bsqueda Secuencial. A este mtodo tambien se le conoce como bsqueda lineal y consiste en empezar al inicio del conjunto de elementos , e ir atravez de ellos hasta encontrar el elemento indicado hasta llegar al final de arreglo. Este es el mtodo de bsqueda ms lento, pero si nuestro arreglo se encuentra completamente desordenado es el nico que nos podr ayudar a encontrar el dato que buscamos. ind <- 1 encontrado <- falso mientras no encontrado y ind < N haz si arreglo[ind] = valor_buscado entonces encontrado <- verdadero en caso contrario ind <- ind +1 b) Bsqueda Binaria. Las condiciones que debe cumplir el arreglo para poder usar bsqueda binaria son que el arreglo este ordenado y que se conozca el numero de elementos. Este mtodo consiste en lo siguiente: comparar el elemento buscado con el elemento situado en la mitad del arreglo, si tenemos suerte y los dos valores coinciden, en ese momento la bsqueda termina. Pero como existe un alto porcentaje de que esto no ocurra, repetiremos los pasos anteriores en la mitad inferior del arreglo si el elemento que buscamos resulto menor que el de la mitad del arreglo, o en la mitad superior si el elemento buscado fue mayor. La bsqueda termina cuando encontramos el elemento o cuando el tamao del arreglo a examinar sea cero. encontrado <- falso primero <- 1 ultimo <- N mientras primero <= ultimo y no encontrado haz mitad <- (primero + ultimo)/2 si arreglo[mitad] = valor_buscado entonces encntrado <- verdadero

58

en caso contrario si arreglo[mitad] > valor_buscado entonces ultimo <- mitad - 1 en caso contrario primero <- mitad + 1 c) Bsqueda por Hash. La idea principal de este mtodo consiste en aplicar una funcin que traduce el valor del elemento buscado en un rango de direcciones relativas. Una desventaja importante de este mtodo es que puede ocasionar colisiones. funcion hash (valor_buscado) inicio hash <- valor_buscado mod numero_primo fin inicio <- hash (valor) il <- inicio encontrado <- falso repite si arreglo[il] = valor entonces encontrado <- verdadero en caso contrario il <- (il +1) mod N hasta encontrado o il = inicio.

59

BIBLIOGRAFIA. www.wikipedia.com, www.carlospes.com/minidiccionario. www.computosimple.com www.eduteka.org. Microsoft Encarta 2009 www.rincondelvago/algoritmos. Tuturial lenguaje de programacin.emagister.com

60

Anda mungkin juga menyukai