domingo, 17 de mayo de 2015

Guía de Algoritmica y Programación. Unidad 1 y 2

Publicadas por Unknown



PNFI UNESUR
Ing. Maryleivis Palomares.
Trayecto 1 Trimestre 2

UNIDAD 1: ARREGLOS.
Ø  Los Arreglos: Definición, Clasificación y Operaciones Básicos.
Ø  Métodos de Ordenamiento.
Ø  Métodos de Búsqueda.

1.1.- DEFINICIÓN DE ARREGLOS.
Podemos entender como arreglos al conjunto de posiciones en memoria que están relacionadas entre sí por tener el mismo nombre y poseer una colección de datos del mismo tipo. Cada posición de almacenamiento es llamado "elemento del arreglo" el cual es guardado de forma secuencial en la memoria.
Es un identificador que referencia un conjunto de datos del mismo tipo. Por ejemplo si declaramos un arreglo de tipo int llamado edades, podremos crear un conjunto de datos de ese tipo y utilizar uno u otro con sólo cambiar el índice que lo referencia. El índice será valor entero y positivo.
NOTA: En los lenguajes de programación como C y C++ los arreglos o arrays por su nombre en inglés comienzan por el número 0.
Índice: es cada uno de los elementos que componen el arreglo, el cual esta referenciado por una posición correlativa y numerada en forma entera.
1.2.- CLASIFICACIÓN DE ARREGLOS.
A) Unidimensional o Vector.
Un vector es un array unidimensional, es decir, sólo utiliza un índice para referenciar a cada uno de los elementos. Su declaración será:
             tipo nombre [tamaño];
 
     El tipo puede ser cualquiera de los ya conocidos y el tamaño indica el número de elementos del vector ( se debe indicar entre corchetes [ ] ). En el ejemplo puedes observar que la variable i es utilizada como índice, el primer for sirve para rellenar el vector y el segundo para visualizarlo. Como ves, las posiciones van de 0 a 9 ( total 10 elementos ).
 
/* Declaración de un array. */
 
#include <stdio.h>
 
int main() /* Rellenamos del 0 - 9 */
{
             int vector[10],i;
             for (i=0;i<10;i++) vector[i]=i;
             for (i=0;i<10;i++) printf(" %d",vector[i]);
             return 0;
}
     Podemos inicializar (asignarle valores) un vector en el momento de declararlo. Si lo hacemos así no es necesario indicar el tamaño. Su sintaxis es:
             tipo nombre []={ valor 1, valor 2...}
 
     Ejemplos:
             int vector[]={1,2,3,4,5,6,7,8};
             char vector[]="programador";
             char vector[]={'p','r','o','g','r','a','m','a','d','o','r'};
 
    Una particularidad con los vectores de tipo char (cadena de caracteres), es que deberemos indicar en que elemento se encuentra el fin de la cadena mediante el caracter nulo (\0). Esto no lo controla el compilador, y tendremos que ser nosotros los que insertemos este caracter al final de la cadena.Por tanto, en un vector de 10 elementos de tipo char podremos rellenar un máximo de 9, es decir, hasta vector[8]. Si sólo rellenamos los 5 primeros, hasta vector[4], debemos asignar el caracter nulo a vector[5].
Es muy sencillo: vector[5]='\0'; .
Ahora veremos un ejemplo de como se rellena un vector de tipo char.
 
/* Vector de tipo char. */
 
#include <stdio.h>
 
int main() /* Rellenamos un vector char */
{
             char cadena[20];
             int i;
             for (i=0;i<19 && cadena[i-1]!=13;i++)
                          cadena[i]=getche( );
             if (i==19) cadena[i]='\0';
             else cadena[i-1]='\0';
             printf("\n%s",cadena);
             return 0;
}
Podemos ver que en el for se encuentran dos condiciones:
          1.- Que no se hayan rellenado todos los elementos (i<19).
         2.- Que el usuario no haya pulsado la tecla ENTER, cuyo código ASCII es 13. (cadena[x-i]!=13).
También podemos observar una nueva función llamada getche( ), que se encuentra en conio.h. Esta función permite la entrada de un caracter por teclado. Después se encuentra un if, que comprueba si se ha rellenado todo el vector. Si es cierto, coloca el caracter nulo en el elemento nº20 (cadena[19]). En caso contrario tenemos el else, que asigna el caracter nulo al elemento que almacenó el caracter ENTER. En resumen: al declarar una cadena deberemos reservar una posición más que la longitud que queremos que tenga dicha cadena.
B)Multidimensionales o Matrices.
Una matriz es un array multidimensional. Se definen igual que los vectores excepto que se requiere un índice por cada dimensión.
Es una estructura de datos estática y de un mismo tipo de datos, y de longitud fija que almacena datos de forma matricial. De igual forma que los arreglos unidimensionales, el almacenamiento de los datos en la memoria se realiza de forma secuencial y son accedidos mediante índices.  Los arreglos multidimensionales son también conocidos como matrices. Por lo tanto  se llama matriz de orden "m×n" a un conjunto rectangular de elementos  dispuestos en filas "m" y en columnas "n", siendo m y n números naturales.  Las matrices se denotan con letras mayúsculas: A, B, C, ... y los elementos de las mismas con letras minúsculas y subíndices que indican el lugar ocupado: a, b, c, ... Un elemento genérico que ocupe la fila i y la columna j se escribe i,j. Si el elemento genérico aparece entre paréntesis también representa a toda la matriz: A (i,j).
Una matriz de orden 3x4 se muestra a continuación,   siendo M una matriz de 3 filas y 4 columnas, la representación gráfica de sus posiciones sería la siguiente:
M 3x4
Filas = 3, columnas = 4


columnas


c1
c2
c3
c4
f1
m[f0,c0]
m[f0,c1]
m[f0,c2]
m[f0,c3]
filas
f2
m[f1,c0]
m[f1,c1]
m[f1,c2]
m[f1,c3]
f3
m[f2,c0]
m[f2,c1]
m[f2,c2]
m[f2,c3]







La sintaxis de una matriz en Lenguaje C es la siguiente:
             tipo nombre [tamaño 1][tamaño 2]...;
 
Una matriz bidimensional se podría representar gráficamente como una tabla con filas y columnas.

La matriz tridimensional se utiliza, por ejemplo, para trabajos gráficos con objetos 3D.
En el ejemplo puedes ver como se rellena y visualiza una matriz bidimensional. Se necesitan dos bucles para cada una de las operaciones. Un bucle controla las filas y otro las columnas.
 
/* Matriz bidimensional. */
 
#include <stdio.h>
 
int main() /* Rellenamos una matriz */
{
             int x,i,numeros[3][4];
             /* rellenamos la matriz */
             for (x=0;x<3;x++)
                          for (i=0;i<4;i++)
                                      scanf("%d",&numeros[x][i]);
             /* visualizamos la matriz */
             for (x=0;x<3;x++)
                          for (i=0;i<4;i++)
                                      printf("%d",numeros[x][i]);
             return 0;
}
Si al declarar una matriz también queremos inicializarla, habrá que tener en cuenta el orden en el que los valores son asignados a los elementos de la matriz. Veamos algunos ejemplos:
 
             int numeros[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
 
quedarían asignados de la siguiente manera:
             numeros[0][0]=1   numeros[0][1]=2     numeros[0][2]=3     numeros[0][3]=4
             numeros[1][0]=5   numeros[1][1]=6     numeros[1][2]=7     numeros[1][3]=8
             numeros[2][0]=9   numeros[2][1]=10   numeros[2][2]=11   numeros[2][3]=12

También se pueden inicializar cadenas de texto:
char dias[7][10]={"lunes","martes","miércoles","jueves","viernes","sábado","domingo"};
 
Para referirnos a cada palabra bastaría con el primer índice:
             printf("%s",dias[i]);

Un arreglo está limitado en la cantidad de datos que puede albergar solo por la cantidad de memoria disponible
Los arreglos se clasifican en:
A) ARREGLO UNIDIMENSIONAL:
 ( ARRAY LINEAL O VECTOR )

En matemática es conocido como Vector.   Eje:  Cantidad de canastas anotadas por el equipo peruano en cada uno de los 5 partidos del Sudamericano 2000

Tamaño 5
C)ARREGLO BIDIMENSIONAL
(ARRAY BIDIMENSIONAL O MATRIZ )

Dos o más vectores de igual tamaño donde sus elementos de igual índice están relacionados.  Eje: Descripción de productos y sus respectivos precios (8 tipos de productos).
Tamaño 8

C)ARREGLO MULTIDIMENSIONAL
 ( N - DIMENSIONAL)

En matemática es conocido como Matriz,  o en base de datos como  tabla.  Eje: Los sueldos de 10 empleados en cada uno de los meses de Enero a Junio 2000
Tamaño 10x6


Eje: Estados (libre u ocupado) de las 10 aulas en cada uno de los 4 pisos de los 5  pabellones.

Tamaño 10x4x5 

1.3.-OPERACIONES BÁSICAS CON ARREGLOS:
Recordando un poco, en la definición de arreglos veamos esta serie de ejemplos:
   int var1[10];
   char nombre[50];
   float numeros[200];
   long double cantidades[25];        
Si tomamos el primer caso, estamos declarando un array de 10 variables enteras, cada una de ellas quedará individualizada por el subíndice que sigue al nombre del mismo es decir:
   var1[0] , var1[1] , … , hasta var1[9] .       
Nótese que la CANTIDAD de elementos es 10, pero su numeración va de 0 a 9 , y no de 1 a 10 . En resumen un array de N elementos tiene subíndices válidos entre 0 y N - 1. Cualquier otro número usado como subíndice, traerá datos de otras zonas de memoria, cuyo contenido es impredecible. Se puede referenciar a cada elemento, en forma individual, tal como se ha hecho con las variables anteriormente, por ejemplo:
   var1[5] = 40 ;
   contador = var1[3] + 7 ;
   if(var1[0] >> = 37)
   ..................        
También es posible utilizar como subíndice expresiones aritméticas, valores enteros retornados por funciones, entre otros. Así podríamos escribir:
   printf(" %d " , var1[ ++i] ) ;
   var1[8] = var1[ i + j ] ;
   ...............................
   int funcion(void) ;
   var1[0] = var1[funcion() ] * 15 ;    
Por supuesto los subíndices resultantes de las operaciones tienen que estar acotados a aquellos para los que el array fue declarado y ser enteros. Inicialización de Arreglos: La inicialización de los arrays sigue las mismas reglas que vimos para los otros tipos de variables, es decir: Si se declaran como globales (afuera del cuerpo de todas las funciones) cada uno de sus elementos será automáticamente inicializado a cero. Si en cambio, su declaración es local a una función, no se realiza ninguna inicialización, quedando a cargo del programa cargar los valores de inicio. La inicialización de un array local, puede realizarse en su declaración, dando una lista de valores iníciales:
   int numero[8] = { 4 , 7 , 0 , 0 , 0 , 9 , 8 , 7 } ;              
Obsérvese que la lista está delimitada por llaves. Otra posibilidad, sólo válida cuando se inicializan todos los elementos del array, es escribir:
   int numero[] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , } ;        
Donde se obvia la declaración de la cantidad de elementos, ya que está implícita en la lista de valores constantes.
También se puede inicializar parcialmente un array, por ejemplo:
   int numero[10] = { 1 , 1 , 1 } ;
          
En éste caso los tres primeros elementos del mismo valdrán 1, y los restantes cero en el caso que la declaración sea global, ó cualquier valor impredecible en el caso de que sea local.
Ø  MÉTODOS DE ORDENAMIENTO:
 La ordenación o clasificación es el proceso de organizar datos en algún orden o secuencia específica, tal como creciente o decreciente, para datos numéricos, o alfabéticos, para datos de caracteres. Los métodos de ordenación más directos son los que se realizan en el espacio ocupado por el array. Los más populares son:
Método de Intercambio o de Burbuja:
Se basa en el principio de comparar pares de elementos adyacentes e intercambiarlos entre si hasta que estén todos ordenados. Supongamos que se desea clasificar en orden ascendente el vector o lista:
9, 8, 0, 2, 5, 1, 3, 2, 9
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]
Los pasos a dar son:
- CompararA[1] yA[2] si están en orden, se mantienen como están, en caso contrario se intercambian entre si.
- A continuación se comparan los elementos 2 y 3; de nuevo se intercambian si es necesario.
- El proceso continua hasta que cada elemento del vector ha sido comparado con sus elementos adyacentes y se han realizado los intercambios necesarios.
Este video muestra de manera simple el ordenamiento de burbuja:
Ejemplo Práctico
   /*Ordenamiento Burbuja */
   #include <stdio.h>
   #include <conio.h>
   #define TAM 9
   int main()
   {
       int a[TAM] = { 9, 8, 0, 2, 5, 1, 3, 2, 9};
       int i, pasada, aux;
       printf("Datos en el orden inicial:\n\n");
           for(i=0;i<=TAM-1;i++)
               printf("%4d",a[i]);
       for (pasada=1;pasada<=TAM-1;pasada++) /*pasadas*/
           for (i=0;i<=TAM-2;i++)
               if (a[i]>a[i+1]) /*comparación */
               {
                   /*intercambio*/
                   aux=a[i];
                   a[i] = a[i+1];
                   a[i+1] = aux;
               }
       printf( "\n\nDatos ordenados en sentido ascendente:\n\n" );
         for (i=0;i<=TAM-1;i++ )
               printf("%4d", a[i]);
       printf("\n");
       getch();
   return 0;
   }
                       
Ordenamiento por inserción (Insertion Sort).
Consiste en insertar un elemento en el vector en una parte ya ordenada de este vector y comenzar de nuevo con los elementos restantes. Por ser utilizado generalmente por losjugadores de cartas se le conoce también por el método de la baraja. Por ejemplo, supóngase que se tiene la lista desordenada;
5 14 24 39 43 65 84 45
Para insertar el elemento 45, habrá que insertar entre 43 y 65, lo que supone desplazar a la derecha todos aquellos números de valor superior a 45, es decir, saltar sobre 65 y 84.
5 14 24 39 43 65 84 45
El método se basa en comparaciones y desplazamientos sucesivos. El algoritmo de clasificaciones de un vector X para N elementos se realiza con un recorrido de todo el vector y la inserción del elemento correspondiente en el lugar adecuado. El recorrido se realiza desde el segundo elemento al n-ésimo.
Veamos el siguiente ejemplo.
Ejemplo Práctico.
#include <stdio.h>
int arreglo[10] = {3,10,1,8,15,5,12,6,5,4}; /*Declaracion e inicialización
del arreglo. */
      
/*imprimearreglo - Funcion que muestra por pantalla
el contenido de un arreglo.*/
void imprimearreglo() {
   int i; for (i=0;i<10;i++)
       printf("Elemento %d: %d \n",i,arreglo[i]);
}
      
void main() /*Funcion Principal del Programa*/
{
   int i,j,k;
   imprimearreglo();
   for (i=1; i<10; i++) {
       j=i;
           while (j>=0 && arreglo[j]<arreglo[j-1]) {
               k=arreglo[j];
               arreglo[j]=arreglo[j-1];
               arreglo[j-1]=k;
               j--;
           }
   }
   printf("\n\nArreglo ordenado \n\n");
   imprimearreglo();
}                                  
Ordenamiento Rápido (Quicksort).
El ordenamiento rápido (quicksort en inglés) es un algoritmo basado en la técnica de divide y vencerás, que permite, en promedio, ordenar n elementos en un tiempo proporcional a n log n. Esta es la técnica de ordenamiento más rápida conocida. El algoritmo fundamental es el siguiente:
Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote.
Resituar los demás 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. 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 más de un elemento. Una vez terminado este proceso todos los elementos estarán ordenados. Como se puede suponer, la eficiencia del algoritmo depende de la posición en la que termine el pivote elegido.
Veamos el siguiente ejemplo.
Puedes ver otra explicación, esta vez con voz 
Pseudocódigo QuickSort:
Nombre Función: OrdRap
Parámetros:
   Lista a ordenar (lista)
   Índice inferior (inf)
   Índice superior (sup)
   // Inicialización de variables
   1. elem_div = lista [sup];
   2. i = inf - 1;
   3. j = sup;
   4. cont = 1;
   // Verificamos que no se crucen los límites
   5. if (inf >= sup)
  6. retornar;
   // Clasificamos la sublista
   7. while (cont)
   8. while (lista [++i] < elem_div);
   9. while (lista [--j] > elem_div);
   10. if (i < j)
   11. temp = lista[i];
   12. lista[i] = lista[j];
   13. lista[j] = temp;
   14. else
   15. cont = 0;
   // Copiamos el elemento de división
   // en su posición final
   16. temp = lista[i];
   17. lista[i] = lista[sup];
   18. lista[sup] = temp;
   // Aplicamos la función
   19. OrdRap (lista, inf, i - 1);
   20. OrdRap (lista, i + 1, sup);
                      
Ejemplo de Implementación de Quicksort en C
void SortArray (int array[],int first,int last)
{
   int i,j,p,t;
   // i se hace igual al índice del primer elemento
   i= first;
   // y j igual al índice del último elemento
   j= last;
   // p se hace igual al elemento pivote del arreglo
   p= array[(first+last)/2];
   do {
       // se hace la partición del arreglo
       while (array[i]<p) i++;
       while (p<array[j]) j--;
       if (i<=j) {
               // se intercambian los elementos i-esimo y j-esimo del arreglo
               t= array[i];
               array[i]= array[j];
               array[j]= t;
               i++; j--;
           }
   } while (i<=j);
   if (first<j) SortArray(array,first,j);
   if (i<last) SortArray(array,i,last);
}
Ø  METODOS DE BUSQUEDA:
       La búsqueda es una operación que tiene por objeto la localización de un elemento dentro de la estructura de datos (arreglo). A menudo un programador estará trabajando con grandes cantidades de datos almacenados en arreglos y pudiera resultar necesario determinar si un arreglo contiene un valor que coincide con algún valor clave o buscado.
Búsqueda secuencial
Este algoritmo compara uno a uno los elementos del arreglo hasta recorrerlo por completo indicando si el número buscado existe.Su implementación es la siguiente:
   #include <stdio.h>
   #include <conio.h>
   #include <stdlib.h>
   #define TAM 10
  
   void main() {
   int a[TAM], temp, i, j, num;
  
   randomize(); //Inicializa el generador de numeros aleatorios
   printf ("Llenando arreglo con números aleatorios\n");
   for (i=0; i< TAM; i++)
       a[i]=random(100);
   printf ("Numero a buscar? ");
   scanf ("%d", &num);
   for (i=0; i< TAM; i++)
       if (a[i] == num){
           printf ("\nValor encontrado");
           printf ("\nPosicion: %d", i);               
       }
        else
           printf ("\nNo existe");
       printf ("El arreglo era:\n");
       for (i=0; i< TAM; i++)
           printf ("%d ", a[i]);
   getch();
   }                               
Búsqueda binaria
Este algoritmo permite buscar de una manera más eficiente un dato dentro de un arreglo, para hacer esto se determina el elemento central del arreglo y se compara con el valor que se está buscando, si coincide termina la búsqueda y en caso de no ser así se determina si el dato es mayor o menor que el elemento central, de esta forma se elimina una mitad del arreglo junto con el elemento central para repetir el proceso hasta encontrarlo o tener solo un elemento en el arreglo.
Para poder aplicar este algoritmo se requiere que el arreglo este ordenado. Su implementación es la siguiente:
 #include <stdio.h>
   #include <conio.h>
   #include <stdlib.h>
   #define TAM 15
  
   void main(){
       int a[TAM], busca, temp, bajo, alto, central;
  
   printf("Llenando el arreglo con números aleatorios\n");
   randomize(); //Inicializa el generador de aleatorios
   for (int i=0; i< TAM; i++)
       a[i]=random(100);
           //Implementacion de Ordenamiento por burbuja de menor a mayor
           printf ("Ordenando arreglo...\n");
           for (int j=1; j <= TAM; j++)
               for (i=0; i< TAM-1; i++)
                   if (a[i] > a[i+1]){
                       temp = a[i];
                       a[i] = a[i+1];
                       a[i+1] = temp;
                   }
  
           //Implementacion de busqueda binaria
           printf ("\nIntroduce un numero a buscar: ");
           scanf ("%d", &busca);
  
           bajo = 0;
           alto = TAM-1;
           central = (bajo+alto)/2;
           while (bajo < alto && busca != a[central]){
              if(busca > a[central])
                   bajo = central+1;
               else
                   alto = central-1;
               central=(bajo+alto)/2;
           }
  
           if (busca == a[central])
               printf("\n%d encontrado en posicion %d", busca, central);
           else
               printf("\n%d no existe", busca);
           printf ("\n\nEl arreglo ordenado era\n\n");
           for (i=0; i< TAM; i++)
               printf ("%d ", a[i]);
   getch();
   }

UNIDAD 2: TRATAMIENTO DE CADENAS DE CARACTERES.
Ø  Definición, Funciones Asociadas y Operaciones con Cadenas.

2.1.-DEFINICION.
      En programación, una cadena de caracteres, o frase (string en inglés) es una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que pertenecen a un cierto alfabeto. En general, una cadena de caracteres es una sucesión de caracteres (letras, números u otros signos o símbolos).
Desde un punto de vista de la programación, si no se ponen restricciones al alfabeto, una cadena podrá estar formada por cualquier combinación finita de todo el juego caracteres disponibles (las letras de la 'a' a la 'z' y de la 'A' a la 'Z', los números del '0' al '9', el espacio en blanco ' ', símbolos diversos '!', '@', '%', etc.).En este mismo ámbito (el de la programación), se utilizan normalmente como un tipo de dato predefinido, para palabras, frases o cualquier otra sucesión de caracteres. En este caso, se almacenan en un vector de datos, o matriz de datos de una sola fila (array en inglés).
Representación de cadenas.
Una cadena suele ser representada entre comillas dobles superiores ("palabra"), mientras que un carácter de esa cadena (un char en inglés) suele ser representado entre comillas simples ('p').
Ejemplo, en C:
Char c = 'a';
Char str [5] = "hola";
2.2.- Funciones Asociadas.
En programación, una función es un grupo de instrucciones con un objetivo en particular y que se ejecuta al ser llamada desde otra función o procedimiento. Una función puede llamarse múltiples veces e incluso llamarse a sí misma.
Ø  strlen.
Es una función asociada al tratamiento de cadenas que se usa para devolver la longitud de dicha cadena, es decir, el número de caracteres. Su importancia radica en que permite al programador controlar el volumen de caracteres que el usuario pueda introducir en determinado momento. Esta función puede ser necesaria para un Sistema de Registro de Usuarios, o para un Sistema de Comentarios, o para un programa que manipule gran cantidad de caracteres que pueda ser difícil controlar. La función strlen no discrimina entre mayúsculas y minúsculas.

/*Este programa devuelve el numero de caracteres de un texto cualquiera*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(){
char txt[30];
int st;
printf("Ingresa un texto cualquiera: \n");
scanf("%s",txt);
st=strlen(txt);
printf("Su longitud es de %i",st);
Ø  strcmp.
La función retorna un número entero mayor, igual, o menor que cero, apropiadamente según la cadena apuntada por s1 es mayor, igual, o menor que la cadena, s2.
#include <stdio.h>
#include <string.h>
int main()
{
   char s1[5] = "Abeja";
   char s2[5] = "abeja";
   int i;

   printf( "s1=%s\t", s1 );
   printf( "s2=%s\n", s2 );

   i = strcmp( s1, s2 );
   printf( "s1 es " );
   if( i < 0 )  printf( "menor que" );
   else if( i > 0 )  printf( "mayor que" );
   else  printf( "igual a" );
printf( " s2\n" );

   return 0;
}
Ø  strcpy.
En lenguaje C, para asignar una expresión de cadena a un array de caracteres, no se puede utilizar el operador de asignación (=). Para ello, se puede utilizar la función strcpy, que está disponible en la bibiliteca estándar de C. La sintaxis de una llamada a strcpy es:
strcpy( <variable_destino>, <cadena_fuente> )
La función strcpy copia el contenido de la <cadena_fuente> en la <variable_destino>, siendo ésta un array de caracteres.
Ejemplo: Habiendo declarado el  siguiente array de caracteres:
En pseudocódigo:
cadena ciudad

En lenguaje C:
char ciudad[6];
es posible escribir
En pseudocódigo:
ciudad ← "Roma" (instrucción de asignación)
En lenguaje C:
strcpy( ciudad, "Roma" ) (instrucción de expresión)
Por tanto, en memoria tendremos:
Descripción: Ejemplo array ciudad en memoria
La declaración de la función strcpy se encuentra en el archivo de cabecera string.h. Por tanto, para poder usar dicha función en un programa, hay que escribir:
#include <string.h>
 2.3.- Operaciones con Cadenas.
Siguiendo en el ámbito de la informática, 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 podrían ser muchas y llegar a ser muy sofisticadas, aquí se exponen algunas de ellas:
Ø  Asignación: Consiste en asignarle una cadena a otra.
char *strcpy(char [], const char[]); # en C
cadena1=cadena2; # en C++
Ø  Concatenación: Consiste en unir dos cadenas o más (o una cadena con un carácter) para formar una cadena de mayor tamaño.

$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)

Ø  Búsqueda: Esta operación localiza si una determinada cadena forma parte de otra cadena más grande o buscar la posición en que aparece un determinado carácter o secuencia de caracteres en un texto. El resultado de la función es un valor entero.
Posición (cadena, subcadena)
Subcadena:     Es el texto que se trata de localizar.
    Ejemplo:
nombre ----> 'Marielena'
Posición (nombre,'elena')             Produce  5.
La función Posición, al tomar también un valor numérico entero se puede utilizar en expresiones aritméticas o en instrucciones de asignación a variables numéricas.
Ø  Extracción: Se trata de sacar fuera de una cadena una porción de la misma según su posición dentro de ella.
Esta operación permite la extracción de una parte específica de una cadena: subcadena.
          Subcadena(cadena, inicio, longitud)
Cadena: Es la cadena de la que debe extraerse una subcadena.
Inicio: Es un número o expresión numérica entera que corresponde a la posición inicial de la subcadena.
Longitud: Es la longitud de la subcadena.
Ejemplos:
subcadena('abcdefgh',3,6) Equivale a 'cdef'
subcadena('Tecnológico',1,3) Equivale a 'Tec'
subcadena('México',5,2) Equivale a 'co'
Ø  Comparación: Se utiliza para comparar dos cadenas.
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.

0 comentarios: