La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tablas y Cadenas CONTENIDO Tablas

Presentaciones similares


Presentación del tema: "Tablas y Cadenas CONTENIDO Tablas"— Transcripción de la presentación:

1 Tablas y Cadenas CONTENIDO Tablas
Declaración de variables TABLA y definición de tipos. Manejo de TABLAS. Paso de parámetros de variables tipo TABLA. Cadenas de Caracteres (un caso especial de tablas) Declaración de variables CADENAS y definición de tipos. Manejo de Cadenas. La librería String.h. Paso de parámetros de Cadenas. Curso Práctica 5

2 Tablas Una tabla es un conjunto de datos (llamados elementos), con las siguientes propiedades: Son del mismo tipo (int, char, float, etc.). Se denominan por el mismo nombre (el de la tabla) y se diferencian unos de otros mediante su posición (usando índices). Se denomina dimensión de una tabla al número máximo de elementos que la componen. ¡Atención! Distinguir entre número máximo de elementos (N) y número real de elementos (n) (Se puede preparar una tabla para una máximo de "N"elementos pero en cada ejecución trabajar con la información de sólo "n" elementos ,evidentemente n <= N. En C, n < N ) Curso Práctica 5

3 Tablas Declaración de variables de tipo tabla: (LEA vs C) LEA C
Tabla unidimensional: nombre: tabla[dim] de tipo Tabla multidimensional: nombre: tabla[dim_1, dim_2, ..., dim_N] de tipo C Tabla unidimensional: tipo nombre [dim]; Tabla multidimensional: tipo nombre [dim_1][dim_2]...[dim_N]; Curso Práctica 5

4 Tablas Declaración de variables de tipo tabla: (Ejemplos) LEA C const
TAM: 10 MAXCAR: 80 NHORAS: 24 NFIL: 2 NCOL: 5 var v: tabla[TAM] de entero palabra: tabla[MAXCAR] de caracter tempera: tabla[NHORAS] de real m: tabla[NFIL, NCOL] de entero dias_semana: tabla[7,10] de caracter C #define TAM 10 #define MAXCAR 80 #define NHORAS 24 #define NFIL 2 #define NCOL 5 int v [TAM]; char palabra [MAXCAR]; double tempera [NHORAS]; int m [NFIL][NCOL]; char dias_semana [7] [10]; Tablas unidimensionales Tablas bidimensionales Curso Práctica 5

5 Tablas ¡No ocupan memoria! Declaración de tipo tabla: (LEA vs C) LEA C
Tabla unidimensional: Nombre: tabla [dim] de tipo Tabla multidimensional: Nombre: tabla[dim_1, dim_2, ..., dim_N] de tipo C Tabla unidimensional: typedef tipo Nombre [dim]; Tabla multidimensional: typedef tipo Nombre [dim_1][dim_2]...[dim_N]; Curso Práctica 5

6 Tablas Declaración de tipos de tabla y de variables: (Ejemplos I) LEA
Declaración de tipos Declaración de variables Vector10: tabla[TAM] de entero v: Vector10 Cadena: tabla[MAXCAR] de carácter palabra: Cadena Tempe: tabla[NHORAS] de real tempera: Tempe Matriz2x5: tabla[NFIL, NCOL] de entero m: Matriz2x5 C Declaración de tipos Declaración de variables typedef int Vector10[TAM]; Vector10 v; typedef char Cadena[MAXCAR]; Cadena palabra; typedef double Tempe[NHORAS]; Tempe tempera; typedef int Matriz2x5[NFIL][NCOL]; Matriz2x5 m; Curso Práctica 5

7 Tablas Declaración de tipos de tabla y de variables: (Ejemplos II) C
Declaración de tipos Declaración de variables typedef int Vector10[TAM]; Vector10 v; typedef char Cadena[MAXCAR]; Cadena palabra; typedef double Tempe[NHORAS]; Tempe tempera; typedef int Matriz2x5[NFIL][NCOL]; Matriz2x5 m; v 10 elementos Si recordamos que: #define TAM 10 #define MAXCAR 80 #define NHORAS 24 #define NFIL 2 #define NCOL 5 palabra ... 80 elementos tempera ... 24 elementos m 10 elementos Curso Práctica 5

8 Tablas Acceso a los elementos de una tabla
Se realiza usando números enteros llamados índices. LEA variable_tabla[índice] i := v[6] (el índice comienza en 1) palabra[1] := 'A’ m[2,3] := 5 v palabra m 1 C variable_tabla[índice] i = v[5]; (el índice comienza en 0) palabra[0] = 'A’; m[1][2] = 5; Curso Práctica 5

9 otra tabla (la primera fila)
Tablas Uso del nombre de una tabla El nombre de una tabla es la dirección donde comienza la tabla, es decir, donde el compilador ubica la tabla, por tanto es una constante que no se puede modificar. Vector10 v; FF3A v v = &v[0] = FF3A palabra ... DA23 Cadena palabra; palabra = &palabra[0] =DA23 m F9B1 Matriz2x5 m; m = m[0] = &m[0][0] =F9B1 Es a su vez el nombre de otra tabla (la primera fila) Curso Práctica 5

10 Pasa la dirección de comienzo de vector
Tablas Paso de una tabla como parámetro (Por referencia - variable) LEA Llamada: funcion2 ( n_elementos, vector ) Definición: proc funcion2 (ent n: entero, ent/sal v: Vector10) var i: entero prin desde i:=1 hasta n v[ i ] := v[ i ] + 1 fdesde fin C Prototipo: /* cualquiera vale */ void funcion2 (int, Vector10); void funcion2 (int, int [ ]); void funcion2 (int, int *); Llamada: funcion2 ( n_elementos, vector ); Definición: void funcion2 ( int n, Vector10 v ) { int i; for ( i=0; i<n; i++) v[ i ]++; } Pasa la dirección de comienzo de vector Pasa el número real de elementos, para que la función2 sepa hasta donde recorrer Curso Práctica 5

11 Tablas Paso de una tabla como parámetro por valor: (unidimensional)
El compilador avisa si encuentra en la función1 una sentencia que modifica la tabla LEA Llamada: funcion1 (vector, n_elementos) Definición: proc funcion1 (ent v: Vector10, n: entero) var i: entero prin desde i:=1 hasta n escribir v[ i ] fdesde fin C Prototipo: /* cualquiera vale */ void funcion1 (const Vector10, int); void funcion1 (const int [ ], int); void funcion1 (const int *, int); Llamada: funcion1 (vector, n_elementos); Definición: void funcion1 (const Vector10 v, int n) { int i; for ( i=0; i<n; i++) printf ("%d\n", v[ i ] ); } Curso Práctica 5

12 Tablas Paso de una tabla como parámetro por valor: (multidimensional)
LEA Llamada: funcion3 (matriz, f, c) Definición: proc funcion3 (ent m: Matriz2x5, a: entero, b: entero) var i,j: entero prin desde i:=1 hasta a desde j:=1 hasta b escribir m[ i , j ] fdesde fin C Prototipo: /* cualquiera vale */ void funcion3 (const Matriz2x5, int, int); void funcion3 (const int [ ][ 5], int, int); Llamada: funcion3 ( matriz, f, c); Definición: void funcion3 (const Matriz2x5 m, int a, int b) { int i, j; for ( i=0; i<a; i++) for ( j=0; j<b; j++) printf ("%d\n", m[ i ][ j ]); } Curso Práctica 5

13 Cadenas de Caracteres El lenguaje C no tiene tipo predefinidos de datos para almacenar cadenas de caracteres. Se puede conseguir un tipo de dato que permita el almacenamiento de cadenas de caracteres mediante el uso de tablas. Declaración de Cadena: (LEA vs C) LEA nombre: cadena C char nombre [dim]; Curso Práctica 5

14 Cadenas de Caracteres Declaración de Cadena: (Ejemplo) C
#define MAXCAR 256 char palabra [MAXCAR]; char palabra [MAXCAR]={'H','o','l','a','\0'}; char palabra [MAXCAR]="Hola"; Se pueden inicializar en el momento de la declaración char palabra [ ]="Hola"; La dimensión se ajusta al tamaño del valor inicial H o l a \0 El último elemento de la cadena es el carácter '\0' maxcar-1 H o l a \0 ? ? ? Curso Práctica 5

15 Cadenas de Caracteres ¡No ocupa memoria!
Definición del Tipo Cadena: (LEA vs C) LEA const MAXCAR: 255 tipos cadena: tabla[MAXCAR] de caracter var palabra: cadena C #define MAXCAR 256 typedef char Cadena[MAXCAR]; Cadena palabra; ¡No ocupa memoria! Curso Práctica 5

16 Cadenas de Caracteres Acceso a los elementos de una cadena
Se realizan usando números enteros llamados índices. LEA nombre_cadena[índice] palabra[1] := ’h’ (el índice comienza en 1) palabra h o l a \0 ? ? ? C nombre_cadena[índice] palabra[0] = ’h’; (el índice comienza en 0) Curso Práctica 5

17 ¡cadena es una dirección!
Cadenas de Caracteres Lectura y Escritura de Cadenas: (LEA vs C) Sin el & ¡cadena es una dirección! LEA Lectura leer cadena Escritura escribir cadena C Lectura scanf ("%s", cadena); gets (cadena); Escritura printf ("%s", cadena); puts (cadena); Curso Práctica 5

18 Cadenas de Caracteres Lectura y Escritura de Cadenas: (Ejemplos) LEA C
leer palabra Escritura escribir “Hola” C Lectura scanf ("%s", palabra); gets (palabra); Escritura printf ("%s", “Hola”); puts (“Hola”); Diferencia entre scanf y gets: scanf se detiene al encontrar un espacio en blanco, un tabulador o un ‘\n’, que no se lee (se quedan en el buffer de entrada -con fflush(stdin) se limpia el buffer- ), y añade un ‘\0’ al final. gets lee hasta encontrar un ‘\n’, que se lee (el buffer de entrada queda vacío), y se sustituye por un ‘\0’. Curso Práctica 5

19 Estas funciones están incluidas en el fichero de cabecera string.h
Cadenas de Caracteres Funciones para la manipulación de cadenas:(LEA vs C) LEA longitud := >, <, >=, <=, =, <> C strlen( ) /* longitud */ strcpy( ) /* asignación */ strcmp( ) /* comparación */ Estas funciones están incluidas en el fichero de cabecera string.h Curso Práctica 5

20 Cadenas de Caracteres Funciones para la manipulación de cadenas:(Ejemplos) LEA l := longitud (cadena) cadena1 := “Hola” si (cadena1 = cadena2) escribir "Las cadenas son iguales" si (cadena1 > cadena2) escribir "La 1ª cadena es mayor" si (cadena1 < cadena2) escribir "La 1ª cadena es menor" C l = strlen (cadena); strcpy (cadena1, “Hola”); if ( strcmp (cadena1, cadena2) == 0) puts ("Las cadenas son iguales"); if ( strcmp(cadena1, cadena2) > 0) puts ("La 1ª cadena es mayor"); if ( strcmp (cadena1, cadena2) < 0) puts ("La 1ª cadena es menor"); Curso Práctica 5

21 Cadenas de Caracteres Tabla de cadenas:(LEA vs C) LEA C
nombre: tabla[dim] de cadena C Cadena nombre[dim]; Curso Práctica 5

22 Cadenas de Caracteres Tabla de cadenas:(Ejemplo) LEA C 256 7 const
NDIAS: 7 var diasSemana: tabla[NDIAS] de cadena C #define NDIAS 7 #define MAXCAR 256 typedef char Cadena[MAXCAR]; Cadena diasSemana[NDIAS]; Cadena diasSemana[NDIAS] = {“lunes”, “martes”, ”miércoles”, ”jueves”, “viernes”, ”sábado”, “domingo”}; L u n e s \0 M a r t i é c o l J v V S á b d D m g 256 7 Curso Práctica 5

23 Cadenas de Caracteres Cadenas en C y Punteros
Alternativas para la declaración de una cadena a) Cadena palabra; b) char palabra[MAXCAR]; c) char *palabra; ¡Atención! No son equivalentes. En el caso b) se reserva memoria, en el caso c) no. Sin embargo, ambos sirven para recorrer una cadena. En la definición de una función a) void funcion (Cadena cadena1, Cadena cadena2) b) void funcion (char cadena1[ ], char cadena2[ ] ) c) void funcion (char *cadena1, char *cadena2) válido porque el nombre de una tabla es la dirección del comienzo de la tabla en memoria, por tanto, se puede almacenar en un puntero. Curso Práctica 5


Descargar ppt "Tablas y Cadenas CONTENIDO Tablas"

Presentaciones similares


Anuncios Google