You are on page 1of 21

REPBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACION SUPERIOR UNIVERSIDAD NACIONAL EXPERIMENTAL DE LA FUERZA ARMADA

2do SEMESTRE DE ANLISIS Y DISEO DE SISTEMAS SECCIN I

PROFESOR: ING. DENIS ACOSTA

ALUMNAS: YELVIC VSQUEZ DIORAIMA ARRIOJA YUSNEYDI GONZALEZ LEIDA CHALON

CIUDAD BOLVAR 28 DE OCTUBRE DEL 2012

INTRODUCCIN El presente documento trata de explicar de manera clara y sencilla las secuencias ordenadas que se utilizan en programacin como lo son las cadenas de caracteres, los cuales cuentan con unas caractersticas importantes que nos ayudaran a su correcta elaboracin cuando sea necesario utilizarlas adems de esto conoceremos como se mide la longitud de una cadena y las operaciones bsicas que pueden realizarse como son: asignacin, comparacin y concatenacin, y conoceremos los procedimientos y funciones para el tratamiento y manejo de cadenas de caracteres. En el desarrollo de los sistemas necesitamos conocer los apuntadores que son un tipo especial de variable que en lugar de contener un valor o dato, contiene una direccin de memoria por lo que aprenderemos a declararlos y conoceremos sus funciones. Por ultimo describiremos los mtodos de ordenamiento mejor conocidos como ordenamiento burbuja y ordenamiento rpido. Esperamos que la informacin sea de especial ayuda.

CADENA DE CARACTERES Concepto. una cadena de caracteres (tambin llamada strings) 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). Una cadena podr estar formada por cualquier combinacin finita de todo el juego de caracteres disponibles En este mismo mbito, 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. Enlazadas letra a letra.

Caractersticas. 1-.Una cadena suele ser representada entre comillas dobles superiores ("palabra"), mientras que un carcter de esa cadena (un char en ingls) suele ser representado entre comillas simples ('p'). 2-.Generalmente para acceder a un carcter en una posicin determinada se suele usar la forma variable[posicin] como cuando se accede a un vector. 3-.Para poder mostrar una comilla (") dentro de la cadena y no tener problemas con las comillas que la delimitan, se usan secuencias de escape.

Longitud de una cadena de caracteres. Los textos en C/C++ se almacenan como cadenas de caracteres en arrays de char. Estos arrays son como cualquier otro array. La diferencia est en que el ltimo carcter del array debe ser uno especial (NULL) que indica el final del texto. Esto supone que siempre hay que reservar una posicin de ms para cualquier texto. Ejemplo: char Texto[5] = "Hola"; En memoria quedara lo siguiente Texto[0]=H Texto[1]=o Texto[2]=l Texto[3]=a Texto[4]=NULL

Es muy importante que se reserve 1 carcter ms siempre, porque si no escribiremos el NULL en lugares reservados para otras variables, o incluso para el propio programa. En la declaracin el nmero 5 hace referencia al nmero de caracteres reservados (del 0 al 4), NO a la ltima posicin del array. Es muy importante saber que memoria estamos utilizando para no sobrepasar los lmites. Operaciones entre cadenas Las operaciones bsicas con String son: asignacin, comparacin y concatenacin. 1-.Asignacin: Es la operacin mediante la cual es posible asignar una cadena a otra cadena, incluso aunque esta ltima sea de longitud fsica ms pequea. En este caso, no se produce ningn error en tiempo de compilacin ni en tiempo de ejecucin. Se producir un truncamiento de los datos de la cadena mayor a la longitud fsica mxima de la cadena ms pequea.

Ejemplo: Var Cad1 : string[15]; Begin Cad1 := `Hola Margarita, cmo ests? End. En este caso se asignar a Cad1 la cadena `Hola Margarita,. Se producir un truncamiento de los datos de la cadena mayor a la longitud fsica mxima de la cadena ms pequea. 2-. Comparaciones: Las comparaciones de cadenas de caracteres se hacen segn el orden de los caracteres en el cdigo ASCII y con los operadores de relacin. `0 < `1 `A < `B `a < `h `1 < `2 `C < `D `m > `b `8 < `9 `M > `B `p < `r

3-. Concatenacin: Es otra operacin bsica que se pueda realizar con cadenas es la concatenacin. La operacin de concatenacin. La concatenacin es el proceso de combinar dos o ms cadenas en una sola cadena. Turbo Pascal proporciona dos mtodos independientes para realizar la concatenacin. a-.Mediante el operador de concatenacin (+) Frase:= `Perro que ladra + `no muerde, +mientras est ladrando Producira una sola cadena almacenada en la variable Frase: `Perro que ladra no muerde, mientras est ladrando b-. Mediante la funcin concat Program union;

Var Cad1,Cad2,Cad3 : string [40]; Begin Cad1 := `Programa; Cad2 := ` de computadora; Cad3 := Concat (Cad1,Cad2); Write (`La frase completa es `,Cad3); End.

Procedimientos y funciones para el tratamiento y manejo de cadenas El tratamiento de cadenas es muy importante, existen bastantes funciones para el manejo de cadenas, a continuacin mencionamos las ms usadas. 1. Split (cadena, separador). Divide una cadena en varias usando un carcter separador. 2. Mid (cadena, inicio, longitud). Devuelve una subcadena de otra, empezando por inicio y de longitud. 3. trim (cadena). Elimina los espacios iniciales y finales de una cadena. 4. instr (cadena1, cadena2). Busca la cadena2 dentro de cadena1 indicndonos la posicin en la que se encuentra. 5. replace (texto, cadena1, cadena2). Remplaza la cadena1 por la cadena2 en el texto. 6. left (cadena, num). Devuelve los nmeros caracteres de cadena empezando por la izquierda.

Las cadenas permiten otras operaciones como las siguientes:

- Funcin Lenght : Proporciona la longitud lgica de una cadena de caracteres y devuelve un valor entero. La sintaxis es: Lenght (cadena) Ejemplo: Lenght (`Esto es una prueba); Esta instruccin devolvera el valor de 16. - Funcin Delete : Borra o elimina una subcadena de una cadena. Una subcadena es una cadena contenida dentro de otra de mayor longitud. La sintaxis es: Delete (cadena, posicin, nmero) Cadena: Representa la cadena original o fuente Posicin: Representa la posicin del primer carcter a suprimir Nmero: Es la cantidad de caracteres que se borrarn (debe ser un valor entero) - Funcin Insert: Inserta una subcadena en una cadena. La sintaxis es la siguiente: Insert (Cad1, cadena, posicin) Cad1: Cadena a insertar Cadena: Cadena donde se insertar Posicin: Carcter a partir del cual se insertar Cad1 Si una vez insertada la nueva cadena el tamao total excede al lmite de la variable, se truncar la cadena hasta su longitud mxima. - Funcin Pos (Posicin): Esta funcin permite determinar si una cadena est contenida en otra. En este caso, la funcin devuelve la posicin donde comienza la cadena buscada en la cadena fuente. Si la cadena no existe, se devuelve un resultado de 0. Utiliza la siguiente sintaxis:

Pos (Cadena buscada, Cadena fuente) - Funcin Copy (Copiar): Esta funcin devuelve una cadena de caracteres (subcadena) extrada de una cadena. Copy (Cadena, Posicin, Nmero) Cadena: Expresin tipo cadena (fuente) Posicin: Primer carcter a extraer (tipo entero) Nmero: Total de caracteres a extraer (tipo entero) Si la posicin es mayor que la longitud de "Cadena", se devuelve una cadena vaca; si el nmero especifica ms caracteres que los indicados desde posicin, slo se devuelve el resto de la cadena. Ejemplo: Ch:= `Esto es una cadena muy larga; Ch2:= Copy (Ch, 1, 18); Write (Ch2) Esto producira la cadena `Esto es una cadena. - Funcin de conversin a maysculas (Upcase): Esta funcin toma un argumento de tipo char y devuelve la correspondiente equivalencia de la expresin en mayscula. Si la expresin ya est en mayscula o no tiene ningn carcter equivalente en mayscula, se devuelve el carcter sin modificar. Sintaxis: Upcase (Letra) Letra es de tipo char. Por ejemplo: Upcase (`a) devuelve `A. - Acceso a posiciones individuales en una cadena Como las cadenas son arrays, se puede acceder a sus elementos en forma individual.

Ejemplo: Nombre:= Picapiedra Entonces: Nombre[1] P Nombre[2] Nombre[3] i c

Nombre[4] a Nombre[5] p Nombre[6] i Nombre[7] e Nombre[8] d Nombre[9] r Nombre[10] a

APUNTADORES Un apuntador es un tipo especial de variable que en lugar de contener un valor o dato, contiene una direccin de memoria. As como los datos pueden modificarse cuando se trabaja con una variable normal, el valor de la direccin almacenada en un apuntador tambin puede modificarse. Usualmente, la direccin almacenada en el apuntador es la direccin correspondiente a alguna otra variable del programa. Tambin podramos decir que un puntero es una variable que representa la posicin (ms que el valor) de otro dato, tal como una variable o un elemento de un array. Cuando una variable puntero es definida, el nombre de la variable debe ir precedido de un asterisco (*). Este identifica que la variable es un puntero. int *ptr; ptr = &count /* Guarda direccin de count en ptr */ /* el operador unario & retorna la direccin de la variable */ Para tomar el valor o contenido que es almacenado en la localidad de memoria en el apuntador, es necesario de referenciar al apuntador. Esto se hace usando el operador unario. int total; total = *ptr; /* The value in the address stored in ptr is assigned to total */ La mejor manera de aprender apuntadores es con la prctica y los ejemplos. Declaracin de punteros int *p_entero; float *p_real; char *caracter;

Sern declaraciones de punteros que contendrn la direccin de memoria de un entero, un real y un carcter respectivamente.

<tipo> es cualquier tipo de variable en C. <identificador> es el nombre del puntero. El tipo o tipo base, indica el tipo de variables que se podrn manipular a travs del puntero. Es importante conocer el tipo base de un puntero, puesto que toda la aritmtica de punteros se realiza con relacin a la base.

& Devuelve la direccin de memoria del operando. * Devuelve el valor almacenado en la direccin de memoria que determina el operando. Es importante que los punteros siempre apunten a variables del mismo tipo. Si se mezclan los tipos, los resultados son errneos. Tambin es importante inicializar los punteros antes de utilizarlos. Si no se inicializan, es decir, si no apuntan a algn sitio vlido, se pueden alterar otras zonas de memoria, ya sea del propio programa o del sistema operativo. Los punteros se pueden comparar entre ellos y se pueden asignar direcciones de memoria. Adems, se pueden decrementar o incrementar. El incremento o el decremento vara segn el tipo de dato al que apunten. A los punteros tambin se les puede sumar o restar nmeros enteros.

No se puede realizar ninguna otra operacin aritmtica con los punteros.

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 */ }

Expresiones y Aritmtica de punteros. Un puntero apunta a una direccin de memoria. El lenguaje C permite sumar o restar cantidades enteras al puntero, para que apunte a una direccin diferentey esto es conocido como aritmtica de punteros. Consideremos un puntero a enteros:

int* ptr; ptr apuntar a cierta direccin de memoria:

Pero tambin tendrn sentido las expresiones ptr+1, ptr+2, etc. La expresin ptr+k es un puntero que apunta a la direccin de ptr sumndole k veces el espacio ocupado por un elemento del tipo al que apunta (en este caso un int):

Ejemplo de aritmtica de punteros

int vector [100]; int *ptr; ... ptr = &vector[0]; *ptr = 33; *(ptr+1) = 44; *(ptr+2) = 90;

/* un vector de enteros */ /* un puntero a enteros */

/* ptr apunta al principio del vector */ /* igual que vector[0] = 33 */ /* igual que vector[1] = 44 */ /* igual que vector[2] = 90 */

La expresin que se suma al puntero ha de ser entera y no tiene por qu ser constante. Obsrvese que ptr es lo mismo que ptr+0.

La expresin sumada NO es el nmero de bytes que se suman a la direccin, es el nmero de elementos del tipo al que apunta el puntero:

/* Supongamos que un "char" ocupa 1 byte */ /* y que un "double" ocupa 8 bytes */

char* ptrchar; double* ptrdouble;

*(ptrchar+3) = 33; /* la direccin es ptrchar + 3 bytes */

*(ptrdouble+3) = 33.0; /* la direccin es ptrdouble + 24 bytes, ya que cada double ocupa 8 bytes */

El compilador "sabe" cmo calcular la direccin segn el tipo. A un puntero se le puede aplicar cualquier clase de operacin de suma o resta (incluyendo los incrementos y decrementos).

/* Rellenar de unos los elementos del 10 al 20 */

int* ptr; int vector [100]; int i;

/* el puntero */ /* el vector */ /* variable contadora */

ptr = &vector[0]; ptr+=10;

/* ptr apunta al origen del vector */ /* ptr apunta a vector[10] */

for ( i=0; i<=10; i++ ) { *ptr = 1; /* ptr++; } asigna 1 a la posicin de memoria apuntada por "ptr" */ /* ptr pasa al siguiente elemento */

Mtodos de ordenamiento 1) Bubble Sort (Ordenamiento Burbuja): Es el algoritmo de ordenamiento ms sencillo de todos, conocido tambin como mtodo del intercambio directo, el funcionamiento se basa en la revisin de cada elemento de la lista que va a ser ordenada con el elemento siguiente, intercambiando sus posiciones si estn en el orden equivocado, para esto se requieren varias revisiones hasta que ya no se necesiten ms intercambios, lo que indica que la lista ha sido ordenada. El origen del nombre de este algoritmo proviene de la forma con la que suben por la lista los elementos durante los intercambios, tal y como si fueran "burbujas", el algoritmo fundamental de este mtodo es la simple comparacin de elementos siendo as el ms fcil de implementar. 2) Quick Sort (Ordenamiento Rpido): Es el algoritmo de ordenamiento ms eficiente de todos, se basa en la tcnica de "Divide y Vencers", que permite en promedio, ordenar n elementos en un tiempo proporcional a n*log(n). Algoritmo Fundamental: Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote. Resituar los dems elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que l, y al otro los mayores. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la implementacin deseada. En este momento, el pivote ocupa exactamente el lugar que le corresponder en la lista ordenada. La lista queda separada en dos sublistas, una formada por los elementos a la izquierda del pivote, y otra por los elementos a su derecha.

Repetir este proceso de forma recursiva para cada sublista mientras stas contengan ms de un elemento. Una vez terminado este proceso todos los elementos estarn ordenados. La implementacin es claramente recursiva y suponiendo el pivote el primer elemento del array, el programa sera:

#include<stdio.h> void ordenar(int *,int,int); void main() { // Dar valores al array ordenar(array,0,N-1); // Para llamar a la funcin } void ordenar(int *array,int desde,int hasta) { int i,d,aux; // i realiza la bsqueda de izquierda a derecha // y j realiza la bsqueda de derecha a izquierda. if(desde>=hasta) return; for(i=desde+1,d=hasta;;) // Valores iniciales de la bsqueda. { for(;i<=hasta && array<=*(array+desde);i++); // Primera bsqueda for(;d>=0 && *(array+d)>=*(array+desde);d--); // segunda bsqueda if(i<d) // si no se han cruzado: { aux=*(array+i); // Intercambiar. *(array+i)=*(array+d); *(array+d)=aux; } else // si se han cruzado: break; // salir del bucle.

} if(d==desde-1) // Si la segunda bsqueda se sale del array d=desde; // es que el pivote es el elemento // ms pequeo: se cambia con l mismo. aux=*(array+d); // Colocar el pivote *(array+d)=*(array+desde); // en su posicin. *(array+desde)=aux;

ordenar(array,desde,d-1); // Ordenar el primer array. ordenar(array,d+1,hasta); // Ordenar el segundo array. }

CONCLUSION Despus de desarrollar los temas hemos comprendido la importancia que tienen las secuencias ordenadas en la programacin como lo son las cadenas de caracteres (tambin llamadas strings) sus caractersticas que nos ayudan a su correcta elaboracin y que es muy importante que se reserve 1 carcter ms siempre en la medicin de la cadena porque si no escribiremos el NULL en lugares reservados para otras variables, o incluso para el propio programa podemos equivocarnos en la medicin, las operaciones bsicas que pueden realizarse en las cadenas son: asignacin, comparacin y concatenacin, adems de esto conocemos los procedimientos y funciones para el tratamiento y manejo de cadenas. Los apuntadores son un punto importante en el desarrollo de los sistemas por lo que aprendimos a declararlos y conocer sus funciones y los mtodos de ordenamiento. 1) Bubble Sort (Ordenamiento Burbuja): 2) Quick Sort (Ordenamiento Rpido):

ANEXOS

Esta imagen muestra la relacin entre las cadenas de caracteres, las frmulas bien formadas y los teoremas. En algunos sistemas formales, sin embargo, el conjunto de los teoremas coincide con el de las frmulas bien formadas.

Ejemplos de algunas operaciones comunes Asignacin: asignarle una cadena a otra char *strcpy(char [], const char[]); # en C cadena1=cadena2; # en C++ Concatenacin: unir dos cadenas de caracteres. $pareja = "Joshua"." y "."Lidia" # en Perl y PHP;

pareja = "Luisa" & " y " & "Carmen" # en Visual Basic; pareja = "Luisa" + " y " + "Carmen"; # en C++ y Java con la clase String. strcat(cadena1,cadena2); strcat(cadena1, cadena3); # en C (Debe haber suficiente espacio en la primera)

N de caracteres de una cadena int strlen(const char[]); # en C Devuelve el n de caracteres sin contar el '\0' cadena.length(); # en C++

Comparacin: Compara dos cadenas en orden lexicogrfico int strcmp(const char[], const char[]); # en C Devuelvee <0 si la 1 es menor, >0 si es mayor y 0 si son iguales cadena1==cadena2; cadena1>cadena2; etc. # en C++ Devuelve un valor de verdad

Bibliografa. http://es.wikipedia.org/wiki/Cadena_de_caracteres http://www.lawebdelprogramador.com/foros/C_Visual_C/990406TAMAnO_DE_UNA_CADENA_DE_CARACTERES.html http://www.emagister.com/curso-introduccion-lenguaje-pascal/operaciones-strings http://www.nociondigital.com/webmasters/php-tutorial-funciones-para-el-tratamientode-cadenas-de-caracteres-detalle-96.html http://www.aprenderaprogramar.com/index.php?option=com_attachments&task=dow nload&id=506 http://ldc.usb.ve/~gabro/teaching/CI2126/Clase1_Apuntadores.htm http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap8/cap82.htm http://fismat.umich.mx/mn1/manual/node9.html#SECTION00920000000000000000 http://sopa.dis.ulpgc.es/so/cpp/intro_c/introc71.htm

You might also like