Está en la página 1de 33

REPUBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PAR LA DEFENSA UNIVERSIDAD NACIONAL EXPERIMENTAL POLITECNICA DE LA FUERZAS ARMADAS

T.S.U ANALISIS Y DISEO DE SISTEMAS SEMESTRE 2, SECCION 02 CIUDAD BOLIVAR ESTADO BOLIVAR

PROFESORA: DENIS ACOSTA

INTEGRANTES: RICHARD FLORES CI:19.475.691 DELSINE OLISMAR CI: 19.078.403 PAULA VERA CI: 20.555.808 STEPHANIE ORTIZ CI: 24.542.177 PAULO VERA CI: 21.178.991

CIUDAD BOLIVAR, 03 DE NOVIEMBRE DE 2012

INTRODUCCION
Los arreglos permiten implementar, representar y manipular de una manera muy conveniente al tipo abstracto de dato secuencia, en particular permiten implementar de manera sencilla los cambios de valores que pueda tener una variable tipo secuencia. Los arreglos se dividen:

Arreglos unidimensionales. Arreglos multidimensionales. Arreglo con mltiple subndices

Funciones y Procedimientos Funciones: una funcin del punto de vista de programacin, se define como un proceso que recibe valores de entrada (llamados argumentos) el cual retorna un valor resultante. Procedimientos: Los procedimientos pueden asimilar a una funcin que no retorna un resultado, y que puede retornarms de un valor mediante el uso de parmetros argumentos por referencia.

Lenguaje de programacin Un lenguaje de programacin es un idioma artificial diseado para expresar procesos que pueden ser llevadas a cabo por mquinas como las computadoras. Y est constituido por los diferentes tipos de lenguajes, lenguaje en mquina, lenguaje de bajo nivel, lenguaje de alto nivel, etc.

Arreglos La mayora de los lenguajes de programacin (JAVA, C, PASCAL, etc.) poseen el tipo arreglo. Como veremos, los arreglos permiten implementar, representar y manipular de una manera muy conveniente al tipo abstracto de dato secuencia, en particular permiten implementar de manera sencilla los cambios de valores que pueda tener una variable tipo secuencia. Un arreglo es un conjunto de datos o una estructura de datos homogneos que se encuentran ubicados en forma consecutiva en la memoria RAM (sirve para almacenar datos en forma temporal). Un arreglo puede definirse como un grupo o una coleccin finita, homognea y ordenada de elementos. Los arreglos pueden ser de los siguientes tipos:

De una dimensin. De dos dimensiones. De tres o ms dimensiones.

Tipos de arreglos

Arreglos unidimensionales. Arreglos multidimensionales. Arreglo con mltiple subndices.

Arreglos unidimensionales 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. Estn formados por un conjunto de elementos de un mismo tipo de datos que se almacenan bajo un mismo nombre, y se diferencian por la posicin que tiene cada elemento dentro del arreglo de datos. Al declarar un arreglo, se debe inicializar sus elementos antes de utilizarlos. Para declarar un arreglo tiene que indicar su tipo, un nombre nico y la cantidad de elementos que va a contener. Arreglos multidimensionales Es un tipo de dato estructurado, que est compuesto por dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n ndices, uno para cada dimensin. El trmino dimensin representa el nmero de ndices utilizados para referirse a un elemento particular en el

arreglo. Los arreglos de ms de una dimensin se llaman arreglos multidimensionales. Arreglos con mltiple subndices Es la representacin de tablas de valores, consistiendo de informacin arreglada en renglones y columnas. Para identificar un elemento particular de la tabla, deberemos de especificar dos subndices; el primero identifica el rengln del elemento y el segundo identifica la columna del elemento. A los arreglos que requieren dos subndices para identificar un elemento en particular se conocen como arreglo de doble subndice. Note que los arreglos de mltiples subndices pueden tener ms de dos subndices. El estndar ANSI indica que un sistema ANSI C debe soportar por lo menos 12 subndices de arreglo. Operaciones con arreglos Las operaciones en arreglos pueden clasificarse de la siguiente forma:

Lectura: este proceso consiste en leer un dato de un arreglo y asignar un valor a cada uno de sus componentes Escritura: Consiste en asignarle un valor a cada elemento del arreglo. Asignacin: No es posible asignar directamente un valor a todo el arreglo Actualizacin: 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. Ordenacin. Bsqueda. Insertar. Borrar. Modificar.

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, algunos de ellos son:

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. 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. 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. Funciones y Procedimientos Funciones: una funcin del punto de vista de programacin, se define como un proceso que recibe valores de entrada (llamados argumentos) el cual retorna un valor resultante. Las funciones son sub-programas dentro de un programa que se pueden invocar (ejecutar), desde cualquier parte del programa, es decir, desde otra funcin, desde la misma funcin o desde el programa principal cuantas veces sea necesario. Las funciones se usan cuando existen dos o ms porciones de algoritmos dentro de un programa que son iguales o muy similares, por ejemplo, en un algoritmo se puede emplear varias veces una porcin de algoritmo que eleva a una potencia dada un nmero real. De esta manera se define una funcin que al ser invocada ejecute dicho cdigo, y en el lugar donde estaba la porcin de algoritmo original, se hace un llamado (ejecucin) de la funcin creada.

Procedimientos: existen porciones de cdigo similares que no calculan un valor si no que por ejemplo, presentan informacin al usuario, leen una coleccin de datos o calculan ms de un valor. Como una funcin debe retornar un nico valor este tipo de porciones de cdigo no se podran codificar como funciones. Para superar este inconveniente se cre un concepto ms claro de un procedimiento. Los procedimientos pueden asimilar a una funcin que no retorna un resultado, y que puede retornar ms de un valor mediante el uso de parmetros argumentos por referencia. Los procedimientos son muy utilizados en los efectos laterales que se pueden llevar a cabo: imprimir en pantalla, modificar variables, leer datos, etc. Lenguaje de programacin Un lenguaje de programacin es un idioma artificial diseado para expresar procesos 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 por un conjunto de smbolos y reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el cdigo fuente de un programa informtico se le llama programacin. Tambin la palabra programacin se define como el proceso de creacin de un programa de computadora, mediante la aplicacin de procedimientos lgicos, a travs de los siguientes pasos:

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

Existe un error comn que trata por sinnimos los trminos 'lenguaje de programacin' y 'lenguaje informtico'. Los lenguajes informticos engloban a los lenguajes de programacin y a otros ms, como por ejemplo HTML

(lenguaje para el marcado de pginas web que no es propiamente un lenguaje de programacin, sino un conjunto de instrucciones que permiten disear el contenido de los documentos). Permite especificar de manera precisa sobre qu datos debe operar una computadora, cmo deben ser almacenados o transmitidos y qu acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a travs de un lenguaje que intenta estar relativamente prximo al lenguaje humano o natural. Una caracterstica relevante de los lenguajes de programacin es precisamente que ms de un programador pueda usar un conjunto comn de instrucciones que sean comprendidas entre ellos para realizar la construccin de un programa de forma colaborativa.lenguaje de programacin: es un conjunto de elementos y smbolos que permiten ejecutar una serie acciones con las cueles controlamos el computador . Tipos de lenguajes de programacin Lenguaje en maquina En informtica, cualquier lenguaje artificial que puede utilizarse para definir una secuencia de instrucciones para su procesamiento por un ordenador o computadora. Es complicado definir qu es y qu no es un lenguaje de programacin. Se asume generalmente que la traduccin de las instrucciones a un cdigo que comprende la computadora debe ser completamente sistemtica. Normalmente es la computadora la que realiza la traduccin. Lenguaje de bajo nivel Se llaman de bajo nivel porque estn muy cercanos al hardware del ordenador. Es necesario conocer a fondo la arquitectura de la mquina para la que se va a programar. El primer lenguaje de este tipo que se utiliz fue el lenguaje mquina, que consiste en un conjunto de instrucciones en binario, es decir, con ceros y unos, con los cuales se indica al ordenador qu hacer. Este lenguaje es muy complicado y la posibilidad de cometer errores es muy alta, por lo que ya no se utiliza. Para solventar estas dificultades apareci el lenguaje ensamblador, que consiste en asignar una abreviatura a cada instruccin en binario, de forma que sea ms fcil recordarla y ms difcil equivocarse. Sin embargo, con este lenguaje sigue siendo necesario conocer muy bien el hardware del ordenador.

Lenguaje de alto nivel Los primeros programas ensambladores producan slo una instruccin en lenguaje de mquina por cada instruccin del programa fuente. Para agilizar la codificacin, se desarrollaron programas ensambladores que podan producir una cantidad variable de instrucciones en lenguaje de mquina por cada instruccin del programa fuente Lenguajes compilados En informtica, un lenguaje cuyos programas se traducen a cdigo mquina antes de ejecutarse, a diferencia de un lenguaje interpretado, cuyos programas se traducen y ejecutan instruccin por instruccin. Lenguajes interpretados 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 corrida de compilacin para utilizarlo en una corrida de produccin futura, el programador slo carga el programa fuente en la computadora junto con los datos que se van a procesar Lenguajes de programacin declarativos Se les conoce como lenguajes declarativos en ciencias computacionales a aquellos lenguajes de programacin en los cuales se le indica a la computadora qu es lo que se desea obtener o qu es lo que se est buscando, por ejemplo: Obtener los nombres de todos los empleados que tengan ms de 32 aos. Eso se puede lograr con un lenguaje declarativo como SQL. Lenguaje de descripcin de mquina,lenguaje de programacin, como el PostScript, que se utiliza para describir la salida a una impresora o a una pantalla, que a su vez usan las instrucciones del lenguaje de descripcin de pgina para construir el texto y los grficos para crear la imagen de la pgina. El lenguaje de descripcin de pgina es como otros lenguajes de ordenador o computadora, con un flujo lgico de programa que permite una manipulacin sofisticada de la salida.

Cadena de caracteres

En programacin, una cadena de caracteres, palabra, ristra de caracteres o frase (string en ingls) es una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que pertenecen a un cierto lenguaje formal o alfabeto anlogas a una frase o a una oracin. En general, una cadena de caracteres es una sucesin de caracteres (letras, nmeros u otros signos o smbolos). Desde un punto de vista de la programacin, si no se ponen restricciones al alfabeto, una cadena podr estar formada por cualquier combinacin finita de todo el juego de caracteres disponibles (las letras de la 'a' a la 'z' y de la 'A' a la 'Z', los nmeros del '0' al '9', el espacio en blanco ' ', smbolos diversos '!', '@', '%', etc). En este mismo mbito (el de la programacin), se utilizan normalmente como un tipo de dato predefinido, para palabras, frases o cualquier otra sucesin de caracteres. En este caso, se almacenan en un vector de datos, o matriz de datos de una sola fila (array en ingls). Las cadenas se pueden almacenar fsicamente:

Seguidas. Enlazados letra a letra.

Generalmente son guardados un carcter a continuacin de otro por una cuestin de eficiencia de acceso. Un caso especial de cadena es la que contiene cero caracteres, a esta cadena se la llama cadena vaca; en teora de autmatas es comn denotar a la misma por medio de la letra griega .

Operacin con cadena de caracteres

Siguiendo en el mbito de la informtica, al considerar las cadenas como un tipo de datos, hay que definir (o conocer) cuales son las operaciones que podemos hacer con ellas, en principio stas podran ser muchas y llegar a ser muy sofisticadas, aqu se exponen algunas de ellas:

Asignacin: Consiste en asignarle una cadena a otra. Concatenacin: Consiste en unir dos cadenas o ms (o una cadena con un carcter) para formar una cadena de mayor tamao. Bsqueda: Consiste en localizar dentro de una cadena una subcadena ms pequea o un carcter.

Extraccin: Se trata de sacar fuera de una cadena una porcin de la misma segn su posicin dentro de ella. Comparacin: Se utiliza para comparar dos cadenas. Procedimientos La programacin con procedimientos tiene dos ventajas importantes: - Los procedimientos permiten dividir la programacin de una aplicacin en unidades de cdigo lgicas separadas, lo que facilita su depuracin y mantenimiento. - Los procedimientos utilizados en un programa pueden actuar como bloques bsicos en otros programas, normalmente con una mnima modificacin o incluso sin cambios.

Tipos de podrecimientos En Visual Basic se utilizan varios tipos de podrecimientos: - Los procedimientos Sub que no devuelven ningn valor. - Los procedimientos Function que devuelven un valor. - Los procedimientos Property que permiten crear propiedades para una clase. Si ha observado en los desarrollos realizados hasta ahora, los procedimientos conducidos por eventos son Sub. A su vez podemos clasificar los procedimientos en: - Procedimientos intrnsecos. Son los procedimientos predefinidos en Visual Basic. En este captulo estudiaremos los ms comunes dentro del tratamiento de cadenas de caracteres y expresiones numricas. - Procedimientos extrnsecos. Son los procedimientos definidos por el usuario.

Procedimientos Intrnsecos Los procedimientos intrnsecos los podemos clasificar en: - Procedimientos para manipular cadenas de caracteres. - Procedimientos para manipular expresiones numricas. - Procedimientos varios.

Procedimientos para cadenas de caracteres

Una cadena de caracteres es sinnimo de constante de caracteres (se denomina tambin literal) y es simplemente una secuencia de caracteres

ANSI encerrados entre comillas. Por ejemplo: "Introducir valor" "AFIOO8G-79" Una cadena de caracteres puede ser manipulada directamente o a travs de una variable de caracteres o variable alfanumrica en la que se haya almacenada previamente. Por ejemplo: Dim etiqueta As String etiqueta = InputBox("Etiqueta") etiqueta = etiqueta & "01" Utilizando el operador de concatenacin (&) y los procedimientos de cadenas de caracteres, podemos agrupar las variables y las constantes de caracteres para formar una expresin de caracteres. As mismo, utilizando los operadores de relacin podemos comparar cadenas de caracteres. Por ejemplo: Dim cad1 As String, cad2 As String ... If cad1 > cad2 Then... Decir que una cadena es menor, igual o mayor que otra, significa indicar si est antes por orden alfabtico, si tienen exactamente los mismos caracteres o si est despus por orden alfabtico, respectivamente.

Descripcin de Procedimientos para cadenas de caracteres A continuacin vamos a ver procedimientos que nos permiten manipular cadenas de caracteres: Funcin Len Da como resultado el nmero de caracteres de una cadena. Su sintaxis es: nombre_variable=Len(expresin_cadena) Ejemplo:

Text3.Text = Left(texto, 2) Funcin Left Da como resultado el nmero de caracteres de la expresin_de_cadena situados ms a la izquierda. Su sintaxis es: nombre_variable=Left(expresin_cadena, n) Ejemplo: Text3.Text = Left(texto, 2) donde expresin_de_cadena es cualquier expresin de cadenas de caracteres y n es una expresin numrica. Si n es mayor que Len (expresin_de_cadena), el resaltado es la cadena de caracteres completa. Si n es igual a 0, el resultado es una cadena de caracteres completa. Funcin Rigth Muestra los dos ltimos caracteres de la cadena texto y su sintaxis es: nombre_variable=Rigth(expresin_cadena, n) Ejemplo: Text3.Text = Right(texto, 2) Funcin Mid Muestra la cadena texto empezando por el primer carcter y con la longitud de la cadena texto y su sintaxis es: nombre_variable= Mid(expresin_cadena, n[,m]) Ejemplo: Text3.Text = Mid(texto, 1, Len(texto))

Funcin Instr Compara dos cadenas de caracteres a partir de una posicin numrica en la cadena devolviendo un 0 o un 1 en funcin de si son iguales o no y su sintaxis es: pos= Instr([n,]cadena,cadena_buscada) Ejemplo: Text5.Text = InStr(2, texto, texto) Funcin String Devuelve una cadena de caracteres a partir de un numero(por el que estar formada la cadena resultante) y una cadena que compararemos, y su sintaxis es: cadena = String(n,caracter) Ejemplo: Text6.Text = String(1, "a") Funcin Str Convierte una expresin numrica en en una expresin de caracteres y su sintaxis es: cadena = Str(n) Ejemplo: Text7.Text = Str(7) Funcin Val Devuelve el valor numrico de una cadena de caracteres y su sintaxis es: numero = Val(expresin_de_cadena) Ejemplo:

Text8.Text = Val(texto) Funcin Chr Devuelve el asci a un carcter introducido y su sintaxis es nombre_variable = Chr(codigo_caracter) Ejemplo: Text9.Text = Chr(7) Funcin Asc Devuelve el cdigo de caracter de la primera letra y su sintaxis es: codigo_caracter =Asc(expresin_de_cadena) Ejemplo: Text10.Text = Asc("j") Funcin Space Devuelve un numero de espacios y su sintaxis es: Cadena =space(numero) Ejemplo: Text11.Text = Space(4) Variable Date Devuelve la fecha del sistema y la guarda en una variable y su sintaxis es: cadena = Date

Ejemplo:

texto = Date Sentencia Time Devuelve la hora del sistema y su sintaxis es: cadena = Time

Ejemplo: texto = Time Funcin UCase y LCase Convierte una cadena de caracteres a maysculas y a minsculas respectivamente, y su sintaxis es: cadena=LCase(expresion_de_cadena) Ejemplo: Text15.Text = LCase(texto) Procedimientos para expresiones numricas Una expresin numrica puede ser una constante, una variable, una funcin o un conjunto de constantes, variables y funciones unidas por operadores. Funciones trigonometricas Las siguientes funciones dan como resultado los valores del seno, coseno, tangente y arco tangente, respectivamente. Su sintaxis es: valor = Sin (angulo) valor = Cos (angulo) valor = Tan(angulo) valor = Ant(angulo)

Funciones logartmicas y exponencial Log da como resultado el logaritmo neperiano (base e) y Exp da como resultado el valor del nmero e elevado a la expresin. Su sintaxis es: variable = Log(Expresin) variable = Exp(Expresin)

Funciones de Conversin

Visual Basic proporciona las funciones de conversin siguientes. Cada funcin convierte una expresin a un tipo de datos especfico. CBool(expresin) ---> conversin a un valor de tipo Boolean CByte(expresin) ---> conversin a un valor de tipo Byte CCur(expresin) ---> conversin a un valor de tipo Currency CDate(expresin) ---> conversin a un valor de tipo Date CDbl(expresin) ---> conversin a un valor de tipo Double CDec(expresin) ---> conversin a un valor de tipo Decimal CInt(expresin) ---> conversin a un valor de tipo Integer CLng(expresin) ---> conversin a un valor de tipo Long CSng(expresin) ---> conversin a un valor de tipo Single CVar(expresin) ---> conversin a un valor de tipo Variant LOS APUNTADORES:

Los apuntadores son variables que almacenan direcciones de memoria. En general una variable contiene un valor especfico dependiendo de como fue declarada. Un apuntador contiene la direccin de una variable que contiene un valor especfico. Una variable se refiere directamente a un valor y un apuntador se refiere indirectamente a un valor. Apuntadores usados en C debido a que a veces son la nica manera de expresar un clculo. Se puede llegar a obtener un cdigo ms compacto y eficiente.

Cuando se emplean sin cuidado pueden crear programas imposibles de entender. Cuentan con una declaracin propia. Los apuntadores disponen de dos operadores: El operador unario o mondico & devuelve la direccin de memoria de una variable; El operador de indireccin o desreferencia * devuelve el ``contenido de un objeto apuntado por un apuntador''. Declaracin De Apuntadores:

Cuando se declara una variable, el compilador reserva un espacio de memoria para ella y asocia el nombre de sta a la direccin de memoria desde donde comienzan los datos de esa variable. Las direcciones de memoria se suelen describir como nmeros en hexadecimal. Un apuntador es una variable cuyo valor es la direccin de memoria de otra variable. Se dice que un apuntador apunta a la variable cuyo valor se almacena a partir de la direccin de memoria que contiene el apuntador. Por ejemplo, si un apuntador p almacena la direccin de una variable x, se dice que p apunta a x.

Los apuntadores como cualquier otra variable deben de ser declarados antes de que puedan ser utilizados. El tipo de un apuntador lo proporciona implcitamente el tipo de la variable a la que apunta. Los apuntadores pueden ser declarados para apuntar a objetos de cualquier clase. La sintaxis general de declaracin es:

<tipo> * <variable>

Ejemplos de declaraciones: La variable contPtr es del tipo apuntador a entero, (int *) y se lee ``contPtr es un apuntador a int'' o ``contPtr apunta a una variable entera''.

NOTA: Un apuntador a cualquier tipo de variables es una direccin en memoria, la cual es una direccin entera, pero un apuntador NO es un entero. La razn por la cual se asocia un apuntador a un tipo de dato, es por que se debe conocer en cuantos bytes esta guardado el dato. De tal forma, que cuando se incrementa un apuntador, se incrementa el apuntador por un ``bloque'' de memoria, en donde el bloque esta en funcin del tamao del dato. Por lo tanto para un apuntador a un char, se agrega un byt a la direccin y para un apuntador a entero o a flotante se agregan 4 bytes. De esta forma si a un apuntador a flotante se le suman 2, el apuntador entonces se mueve dos posiciones float que equivalen a 8 bytes. Los Operadores De Los Apuntadores: Un operador de direccin &:

Representa la direccin de memoria de la variable que le sigue; Operador unario que regresa la direccin de su operando, ejemplo: main() { int y; int *yPtr; y = 5; yPtr = &y; } Un operador de indireccin o de desreferencia:

*. El operador * aplicado al nombre de un apuntador indica el valor de la variable apuntada; Regresa el valor del objeto hacia el cual su operando apunta, es decir un apuntador, ejemplo: main() { int x,y; int *py;

y = 5; *py = y; x = *py + 5; printf(''%d %d nn'',*py,x); }

Veamos con un ejemplo en C la diferencia entre todos estos conceptos Es decir: int x = 25, *pint; pint = &x; La variable pint contiene la direccin de memoria de la variable x. La expresin: *pint representa el valor de la variable (x) apuntada, es decir 25. La variable pint tambin tiene su propia direccin: &pint Inicializacin de apuntadores: < Almacenamiento > < Tipo > * < Nombre > = < Expresin > Si <Almacenamiento> es extern o static, <Expresin> deber ser una expresin constante del tipo <Tipo> expresado. Si <Almacenamiento> es auto, entonces <Expresin> puede ser cualquier expresin del <Tipo> especificado. Ejemplos: dor nulo a cualquier tipo de dato: int *p; p = NULL; //actualizacin static o extern se transforma segn la expresin: a) float mat[12]; float *punt = mat;

b) float mat[12]; float *punt = &mat[0]; cast apuntador a apuntador: int *punt = (int *) 123.456; Inicializa el apuntador con el entero. Esto es, en la direccin a la que apunta la variable punt se almacena el valor 123.

char *cadena = Esto es una cadena; Se pueden sumar o restar valores enteros a las direcciones de memoria en la forma: (aritmtica de apuntadores) static int x; int *punt = &x+2, *p = &x-1; APUNTADORES a objeto P y apuntador a objeto son equivalentes slo si P y Q son del mismo tipo. Aplicado a matrices: nombre_apuntador = nombre_matriz; Apuntadores y Funciones: Cuando C pasa argumentos a funciones, los pasa por valor, es decir, si el parmetro es modificado dentro de la funcin, una vez que termina la funcin el valor pasado de la variable permanece inalterado. Hay muchos casos que se quiere alterar el argumento pasado a la funcin y recibir el nuevo valor una vez que la funcin ha terminado. Para hacer lo anterior se debe usar una llamada por referencia, en C se puede simular pasando un puntero al argumento. Con esto se provoca que la computadora pase la direccin del argumento a la funcin.

Para entender mejor lo anterior consideremos la funcin swap() que intercambia el valor de dos argumentos enteros: void swap(int *px, int *py); main() { int x, y; x = 10; y = 20; printf("x=%d\ty=%d\n",x,y); swap(&x, &y); printf("x=%d\ty=%d\n",x,y); } void swap(int *px, int *py) { int temp; temp = *px; /* guarda el valor de la direccion x */ *px = *py; /* pone y en x */ *py = temp; /* pone x en y */ APUNTADORES Y ARREGLOS:

Existe una estrecha relacin entre apuntadores y arreglos, tanto que pueden ser usados en forma casi indistinta. En C, un nombre de un arreglo es un ndice a la direccin de comienzo del arreglo. En esencia, el nombre de un arreglo es un puntero al arreglo.

Una variable de tipo arreglo puede considerarse como un apuntadora tipo del arreglo. Los apuntadores pueden ser utilizados en cualquier operacin que involucre subndices de arreglos.

Ejemplo: main() { int tabla[10],i,x,*pt,*ptr; pt = &tabla[0]; x = *pt; for (i=0; i!10; i++) *(pt+i) = random(); ptr = tabla; for (i=0; i!10; i++) printf(''%d nn'',*(ptr+i),tabla[i]); }

Cuando se suma 1 a un apuntador el incremento se adecua al tamao en memoria del objeto apuntado. Un apuntador es una variable, por lo que operaciones como pa = a y pa++ son permitidas.

Un nombre de un arreglo es una constante, no una variable, de ah que a = pa o a++ o p = a. Arreglos de apuntadores:

Los arreglos pueden contener apuntadores. El uso ms comn es el de formar arreglos de cadenas de caracteres. Cada entrada en el arreglo es un apuntador al primer carcter de la cadena.

Sea la declaracin:

char * mensaje[4] = {''Hola'',''Adios'',''Bye'',''Salut''}

Cada cadena est almacenada en memoria como una cadena de caracteres terminada en NULL n0. En el arreglo no estn colocadas las cadenas, tan solo estn almacenados los apuntadores. Aunque el arreglo es de tamao fijo, permite el acceso a cadenas de caracteres de cualquier longitud.

En C se pueden tener arreglos de apuntadores ya que los apuntadores son variables. A continuacin se muestra un ejemplo de su uso: ordenar las lneas de un texto de diferente longitud. Los arreglos de apuntadores son una representacin de datos que manejan de una forma eficiente y conveniente lneas de texto de longitud variable. Cmo se puede hacer lo anterior?

que \n marca el fin de cada lnea.

apunta al primer caracter de cada lnea.

-- intercambiar (swap) los apuntadores (no el texto).

Arreglos de apuntadores (Ejemplo de ordenamiento de cadenas). Con lo anterior se elimina:


El manejo complicado del almacenamiento. Alta sobrecarga por el movimiento de lneas. Apuntadores y arreglos multidimensionales:

Puede provocar confusin el uso de arreglos de dos dimensiones y un arreglo de apuntadores. Considerar: int a[10][10]; int *b[10];

El uso de a y b puede ser parecido, desde el momento en que a[5][5] y b[5][5] son referencias validas a un int El arreglo a es un arreglo verdadero, existen 100 celdas de memoria asignadas y se efecta el clculo de subndices rectangulares convencional para localizar un elemento dado Sin embargo, a b la declaracin solo le asigna 10 apuntadores, cada uno de los cuales deber de apuntar a un arreglo de enteros

La desventajas de b son: Ocupa ms espacio, suponiendo que cada uno apunta a un arreglo de 10 elementos, el tamao ser de 10 apuntadores ms 100 elementos. Se debe de crear el espacio de los arreglos antes de asignarlos.
o o

La declaracin b tiene dos ventajas: El acceso se hace ms rpido, una indereccin es ms rapida que el hacer una multiplicacin seguida de una suma. El tamao de los arreglos apuntados por cada una de las diez localidades pueden ser diferentes.

Un arreglo multidimensional puede ser visto en varias formas en C, por ejemplo: Un arreglo de dos dimensiones es un arreglo de una dimensin, donde cada uno de los elementos es en s mismo un arreglo. Por lo tanto, la notacin a[n][m] nos indica que los elementos del arreglo estn guardados rengln por rengln. Cuando se pasa una arreglo bidimensional a una funcin se debe especificar el nmero de columnas -- el nmero de renglones es irrelevante. La razn de lo anterior, es nuevamente los apuntadores. C requiere conocer cuantas son las columnas para que pueda brincar de rengln en rengln en la memoria. Considerando que una funcin deba recibir int a[5][35], se puede declarar el argumento de la funcin como: f( int a[][35] ) { ..... } o an

f( int (*a)[35] ) { ..... } En el ltimo ejemplo se requieren los parnteis (*a) ya que [ ] tiene una precedencia ms alta que *. Por lo tanto: int (*a)[35]; declara un apuntador a un arreglo de 35 enteros, y por ejemplo si hacemos la siguiente referencia a+2, nos estaremos refiriendo a la direccin del primer elemento que se encuentran en el tercer rengln de la matriz supuesta, mientras que int *a[35]; declara un arreglo de 35 apuntadores a enteros. Ahora veamos la diferencia (sutil) entre apuntadores y arreglos. El manejo de cadenas es una aplicacin comn de esto. Considera: char *nomb[10]; char anomb[10][20]; En donde es vlido hacer nomb[3][4] y anomb[3][4] en C. Sin embargo: anomb es un arreglo verdadero de 200 elementos de dos dimensiones tipo char. El acceso de los elementos anomb en memoria se hace bajo la siguiente frmula 20*renglon + columna + direccin_base En cambio nomb tiene 10 apuntadores a elementos. NOTA: si cada apuntador en nomb indica un arreglo de 20 elementos entonces y solamente entonces 200 chars estarn disponibles (10 elementos). Con el primer tipo de declaracin se tiene la ventaja de que cada apuntador puede apuntar a arreglos de diferente longitud.

Considerar: char *nomb[] = { "No mes", "Ene", "Feb", "Mar", .... }; char anomb[][15] = { "No mes", "Ene", "Feb", "Mar", ... }; Lo cual grficamente se muestra en la figura. Se puede indicar que se hace un manejo ms eficiente del espacio haciendo uso de un arreglo de apuntadores y usando un arreglo bidimensional.

Arreglo de 2 dimensiones VS. arreglo de apuntadores. Diferentes formas de declarar a[i][j]: Cuando se ve la referencia a un arreglo de dos dimensiones, a[i][j] , no se puede deducir inmediatamente como fue declarado a: o Como un arreglo de 10 arreglos de tamao 20

int a[10][20]; o Como un arreglo de tamao 20 de vectores de longitud variable int *a[10]; o Como un apuntador de apuntadores a enteros int **a; o Como un apuntador a un arreglo de enteros de tama~no 20 int (* a)[20]; o Para poder direccionar un elemento de un apuntador de apuntadores se sigue la regla: tab[i][j] * ( *(tab + i) + j) ARGUMENTOS EN LA LNEA DE COMANDOS: o Existe una forma de transmitr al programa los argumentos de la lnea de comando, o parmetros, cuando comienza la ejecucin o Cuando se invoca el main() se le puede pasar dos argumentos, (los nombres son por convencin): o argc es el nmero de argumentos en la lnea de comandos. o argv[] es un apuntador a un arreglo de cadena de caracteres que contienen los argumentos, uno por cadena Ejemplo de uso: main( int argc, char *argv[]) { int i; for (i=0; i!argc; i++) printf(''Argumento %d :'' %s'',); }

Ya que el primer elemento del arreglo, ( *argv[] ) apunta a la cadena que contiene el nombre del comando, argc es al menos igual a 1.

Esta estructura de datos es creada por el sistema operativo, (Unix u otro), por lo que la nica preocupacin del programador es usarla, no generarla. Fallas comunes con apuntadores: A continuacin se muestran dos errores comunes que se hacen con los apuntadores: No asignar un apuntador a una direccin de memoria antes de usarlo: int *x *x = 100; lo adecuado ser, tener primeramente una localidad fsica de memoria, digamos int y; int *x, y; x = &y; *x = 100; Indireccin no vlida: Supongamos que se tiene una funcin llamada malloc() la cual trata de asignar memoria dinmicamente (en tiempo de ejecucin), la cual regresa un apuntador al bloque de memoria requerida si se pudo o un apuntador a nulo en otro caso. char *malloc() -- una funcin de la biblioteca estndar que se ver ms adelante. Supongamos que se tiene un apuntador char *p Considerar: *p = (char *) malloc(100): /* pide 100 bytes de la memoria */ *p = 'y'; Existe un error en el cdigo anterior. Cul es?

El * en la primera lnea ya que malloc regresa un apuntador y *p no apunta a ninguna direccin. El cdigo correcto deber ser: p = (char *) malloc(100); Ahora si malloc no puede regresar un bloque de memoria, entonces p es nulo, y por lo tanto no se podr hacer: *p = 'y'; Un buen programa en C debe revisar lo anterior, por lo que el cdigo anterior puede ser reescrito como: p = (char *) malloc(100): /* pide 100 bytes de la memoria */ if ( p == NULL ) { printf("Error: fuera de memoria\n"); exit(1); } *p = 'y';

Apuntadores de mayor complejidad: int *p; p es un apuntador a un entero int *p[10]; p es un arreglo de 10 apuntadores a enteros int (*p)[10]; p es un apuntador a un arreglo de 10 enteros int *p(void); p es una funcin que devuelve un apuntador a entero

int p(char *a); p es una funcin que acepta un argumento que es un apuntador a carcter, devuelve un entero int *p(char *a); p es una funcin que acepta un argumento que es un apuntador a carcter, devuelve un apuntador a entero int (*p)(char *a); p es un apuntador a funcin que acepta un argumento que es un apuntador a carcter, devuelve un apuntador a entero int (*p(char *a))[10]; p es una funcin que acepta un argumento que es un apuntador a carcter, devuelve un apuntador a un arreglo de 10 enteros int p(char (*a)[]); p es un apuntador a funcin que acepta un argumento que es un apuntador a un arreglo de caracteres, devuelve un apuntador a entero int p(char *a[]); p es un apuntador a funcin que acepta un argumento que es un arreglo de apuntadores a caracteres, devuelve un apuntador a entero int *p(char a[]); p es una funcin que acepta un argumento que es un arreglo de caracteres, devuelve un apuntador a entero int *p(char (*a)[]); p es una funcin que acepta un argumento que es un apuntador a un arreglo de caracteres, devuelve un apuntador a entero int *p(char *a[]); p es una funcin que acepta un argumento que es un apuntador a un arreglo de apuntadores a caracteres, devuelve un apuntador a entero int (*p)(char (*a)[]); p es una funcin que acepta un argumento que es un apuntador a un arreglo de caracteres, devuelve un apuntador a entero int *(*p)(char (*a)[]); p es un apuntador a una funcin que acepta un argumento que es un apuntador a un arreglo de apuntadores a caracteres, devuelve un apuntador a entero int *(*p)(char *a[]); p es un apuntador a una funcin que acepta un argumento que es un arreglo de apuntadores a caracteres, devuelve un apuntador a entero int(*p[10])(void); p es una arreglo de 10 apuntadores a funcin, cada funcin devuelve un entero

int (*p[10])(char * a); p es un arreglo de 10 apuntadores a funcin; cada funcin acepta un argumento que es un apuntador a carcter y devuelve un entero int *(*p[10])(char a); p es un arreglo de 10 apuntadores a funcin; cada funcin acepta un argumento que es un carcter, y devuelve un apuntador a entero char *(*p[10])(char * a); p es un arreglo de 10 apuntadores a funcin; cada funcin acepta un argumentoque es un carcter, y devuelve un apuntador a carcter.

Conclusin Al tratar el tema de lenguajes de programacin estamos hablando de los arreglos y de los tipos de lenguaje donde cada de uno de ellos cumplen con una funcin de disear y expresar procesos que pueden ser llevados a cabos por maquinas como la computadora. Donde a travs de pasos cumplen con la ejecucin, como: El desarrollo lgico del programa para resolver un problema en partcula tambin tomando en cuenta el lenguaje de mquina que consta de nmeros binarios (cero y uno) el lenguaje de alto y bajo nivel , lenguaje compiladores , lenguaje interpretados y los lenguaje compiladores. Son lenguajes donde su desarrollo consiste en la funcin y la ejecucin de ensamblaje o compilacin del programa hasta convertirlo en el proceso que se desea ejecutar.