Tema 7 Vectores y cadenas de caracteres Fundamentos de Informática Índice 1. 2. 3. 4. 5. 6. ¿Qué es un vector? Vectores unidimensionales Cadenas de caracteres Paso de vectores unidimensionales a funciones. Vectores multidimensionales: matrices Paso de vectores multidimensionales a funciones Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 2 1 Introducción ¿Qué es un VECTOR? Un VECTOR es un conjunto de datos del mismo tipo al que se hace referencia mediante un identificador (nombre) común. • Un VECTOR puede tener varias dimensiones. – 1 dimensión ‐> VECTOR – 2 dimensiones ‐> MATRIZ – 3 dimensiones, etc. • La referencia a elementos concretos del VECTOR se lleva a cabo utilizando el nombre del VECTOR y uno o más índices (dependiendo de las dimensiones). • La primera posición de un vector en cada una de sus dimensiones es siempre cero. • Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 4 ¿Qué es un VECTOR? • Los índices son números enteros positivos que están encerrados entre corchetes. Vector 15 Lista 0 -20 -11 1 2 Declaración del VECTOR int Lista[6]; Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI 70 3 -3 4 5 unidimensional 5 Referencia el tercer elemento de la variable Lista. Para asignar: Lista[2]= -11; Para extraer información: printf(“El valor es %d”,Lista[2]); resultado=Lista[2]; Vectores y cadenas de caracteres 5 ¿Qué es un VECTOR? Lista 0 0 1 15 -20 2 64 3 70 4 -3 5 5 Bidimensional 1 43 2 11 -4 11 27 2 11 17 -47 -11 -12 1 Declaración del la matriz: int Lista[3][6]; Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vector ó Matriz Referencia el elemento de la tercera fila y la cuarta columna de la variable Lista Para asignar: Lista[2][3]=-11; Para extraer información: printf(“El valor es %d”,Lista[2][3]); resultado=Lista[2][3]; Vectores y cadenas de caracteres 6 2 Vectores unidimensionales Vectores unidimensionales Es un conjunto de elementos del mismo tipo. • Declaración: tipo nombre_vector[TAMAÑO]; – Tipo • Hace referencia al tipo de los datos contenidos en el vector. – Tamaño • Hace referencia al número de elementos máximos que puede contener el VECTOR. • OJO: Este tamaño se define en tiempo de compilación y no puede modificarse a lo largo del programa. Programación estática versus programación dinámica. Muy útil la utilización del #define para los tamaños • En la ejecución del programa, se reservan tantos huecos como el tamaño definido del vector, siendo cada hueco del tamaño requerido por el tipo de dato del vector. • El primer elemento de un VECTOR tiene obligatoriamente índice 0. • Si un VECTOR tiene como máximo n elementos, el último elemento se referenciará con el índice n‐1. • Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 8 Vectores unidimensionales: Ejemplo #include<stdio.h> int main(void) { int x[10]; int t; Declaración de un vector de 10 elementos enteros Primera posición del vector Última posición del vector for ( t = 0 ; t<10 ; t++ ) { x[t] = t; /*asigna un valor a cada elemento del vector*/ } printf(“Los elementos del vector x son:\n”); Elemento t del vector x for ( t = 0 ; t<10 ; t++ ) { printf(“%d”, x[t]); /*escribir los elementos*/ } return 0; ¿Cuál es la salida del programa? } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 9 Vectores unidimensionales: Ejemplo El mismo ejemplo anterior utilizando #define: MUCHO MEJOR #include<stdio.h> Si cambia el tamaño del vector #define N 10 con cambiar el valor del #define void main(void) es suficiente { int x[N]; int t; for ( t = 0 ; t < N ; t++ ) { x[t] = t; /* asigna un valor a cada elemento del vector */ } printf(“Los elementos del vector x son:\n”); for ( t = 0 ; t < N ; t++ ) { printf(“%d”, x[t]); /*escribir los elementos*/ } } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 10 Advertencias • C no hace comprobaciones sobre los VECTORES: – Mucho cuidado con intentar acceder, tanto para escribir como para leer, a alguna posición inexistente del vector. • C no nos dirá nada y se producirá un error en tiempo de ejecución. • Como mucho nos podrá avisar con un “warning” si el error es muy evidente. • Será necesario definir un tamaño suficientemente grande para cada caso (pero hay que optimizar recursos) • Es posible inicializar los elementos de un vector en el momento de la declaración de la variable: tipo vector[N] = {valor1, valor2,….., valor N‐1}; siendo N el número de elementos de la variable vector Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 11 Manejo de VECTORES • C no permite realizar operaciones con vectores completos (salvo en el caso de las cadenas de caracteres en las que sí existen funciones de C que manejan la cadena al completo): int lista[10]; scanf(“%d”,&lista); ERROR printf(“%d”, lista); ERROR Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 12 Manejo de VECTORES Para llevar a cabo estas operaciones es necesario hacer uso de bucles. • Generalmente se utilizan bucles for: el grado de anidamiento depende de la dimensión del VECTOR • #include<stdio.h> #define N 4 int main(void) { int ejemplo[N] ={1,2,3,4}; int copy[N]; int i; /*inicializar un vector en el momento de la declaración*/ for ( i=0 ; i < N ; i++) { copy[i]= ejemplo[i]; /*copiar } for ( i= 0; i<N; i++) { printf(“%d”, ejemplo[i]); } return 0; un vector en otro*/ /*escribir los elementos*/ } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 13 Vectores unidimensionales: Ejemplo #include<stdio.h> Programa que calcula la media de 20 #define N 20 dígitos leídos desde el teclado int main(void) { int ejemplo[N]; int i; int sum; for (i = 0; i<N; i++) { printf(“Escriba el número %d: “, i); scanf(“%d”, &ejemplo[i] ); /*rellenar el vector*/ } sum = 0; for ( i= 0; i<N; i++) { Dirección de la posición i del vector /*sumar los números*/ ejemplo, donde se va a guardar el valor sum = sum + ejemplo[i]; leído mediante scanf() } printf(“La media es %d\n”, sum/N); return 0; } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 14 3 Cadenas de caracteres Cadenas de caracteres • Es un VECTOR unidimensional que almacena caracteres. • Se diferencia de un VECTOR de un tipo numérico en que : el último carácter de la cadena va seguido por del carácter ‘\0’, que indica el fin de cadena. 2. Existen funciones en C que las manejan como un conjunto. Declaración char nombre[N]; 1. • En una cadena de caracteres de N posiciones sólo es posible almacenar una cadena de N‐1 caracteres. – La última posición de la cadena está ocupada por el carácter ‘\0’ No confundir: – “a”: cadena de dos caracteres (comilla doble), el carácter ‘a’ y el ‘\0’ (el propio compilador cuando encuentra una cadena de caracteres inserta automáticamente el ‘\0’) – ‘a’: carácter (comilla simple) El final de una cadena de caracteres viene marcado por un carácter especial que es el carácter nulo ‘\0’ – • • Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 16 Cadenas de caracteres: Lectura • Función gets(): – – – – – – Entrada de cadena de caracteres El argumento debe ser una variable de varios elementos (vector de caracteres o cadena de caracteres) de tipo carácter. Lee de la entrada estándar una cadena de caracteres Si ha habido error, gets() devuelve NULL Prototipo: char *gets( char *cadena_de_caracteres ); Utilización: char cadena[30]; gets(cadena); Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 17 Cadenas de caracteres: escritura • Función printf() con especificador de formato %s: – • Utilización: printf("%s, cadena); printf("La cadena vale: %s\n",cadena); Función puts(): – – Prototipo: int puts( char * cadena_de_caracteres ); Utilización: puts(cadena); Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 18 Cadenas de caracteres: Lectura • Las funciones printf(), scanf(), gets() y puts() permiten trabajar directamente sobre cadenas sin necesidad de utilizar bucles. #include<stdio.h> #define N 10 int main(void) { char cad[N]; gets(cad); puts(cad); … } #include<stdio.h> #define N 10 int main(void) { char cad[N]; scanf(“%s”, cad ); printf(“%s”, cad); …… } ATENCIÓN: Cuando se lee una cadena de caracteres, no se utiliza ‘&’ con el nombre de la variable (el propio nombre de la variable ya es la dirección de la primera posición del vector, como se verá en el tema 7). Peligros: • Cuidado al utilizar scanf(“%s”, cad); ya que SÓLO lee una palabra (no una frase), pues cuando encuentra el carácter ‘ n’ o ‘ ’ (el carácter blanco), scanf() finaliza la lectura del buffer. Por lo tanto, es mejor utilizar gets(cad); para leer una frase. • Sin embargo, tanto scanf() como gets() no realizan ningún control para evitar leer más caracteres de los reservados por la variable vector, lo que resulta muy peligroso. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 19 Cadenas de caracteres: Lectura • La mejor opción para leer cadenas de caracteres: fgets() ya que: – Esta función controla que el número de caracteres leído no excedan el tamaño de la cadena destino, indicando dicho tamaño en el segundo argumento de la función. – Lee una frase completa, no únicamente palabras. • El prototipo de la función es: char * fgets(char *cadena, int tam cad, FILE *puntero a archivo). – Lee una cadena de caracteres del archivo apuntado por puntero a archivo y la almacena en cadena. – La lectura se acaba cuando se encuentra el carácter ‘ n’ (que SÍ se escribe en la cadena), cuando se encuentra el fin de fichero (en este caso no se escribe ‘ n’ en la cadena) o cuando se han leído tam cad-1 caracteres. En todos estos casos, se escribe un carácter ‘ 0’ en la cadena a continuación del último carácter leído. – Valor de retorno: • Éxito: es un puntero a la cadena leída. • Fracaso: NULL, si se llega al final de fichero u ocurre un error Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 20 Cadenas de caracteres: lectura • De momento, vamos a utilizar la función de la siguiente manera: #include <stdio.h> #define N 10 int main(void) { char cad[N]; Indica que lee de la entrada estándar fgets (cad, N, stdin); puts(cad); … Tamaño de la cadena destino, donde se va a guardar la frase leída. } Identificador de la cadena destino (nombre de la variable de tipo cadena) Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 21 Ejemplo cadenas de caracteres #include<stdio.h> #include<ctype.h> #define TAM 80 int main(void) { char letras[TAM]; int cont; } Programa que lee una línea de texto carácter a carácter y la transforma escribiéndola en mayúsculas for (cont = 0; cont< TAM; cont++) { /*leer carácter a carácter*/ letras[cont] = getchar(); } for (cont = 0; cont< TAM; cont++) { /*escribir en mayúscula*/ putchar( toupper(letras[cont]) ); } return 0; Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 22 Ejemplo cadenas de caracteres #include<stdio.h> #include<ctype.h> #define TAM 80 int main(void) { char letras[TAM]; int cont; Programa que lee una línea de texto con fgets() y la transforma escribiéndola en mayúsculas fgets(letras, TAM, stdin) } for (cont = 0; cont< TAM; cont++) { /*escribir en mayúscula*/ putchar( toupper(letras[cont]) ); } return 0; Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 23 Funciones para el manejo de cadenas Hay que incluir el archivo de cabecera string.h • strcpy(), “string copy” Se utiliza para copiar el contenido de la cadena cad2 en la cadena cad1. La forma general de esta función es: strcpy(cad1, cad2); • strcat(), “string cat” La función strcat() añade la cad2 al final de la cad1 y lo almacena en la cad1. La forma general de esta función es: strcat( cad1, cad2); • Advertencia: Mucho cuidado al copiar o concatenar dos cadenas con strcpy() o strcat() ya que si nos pasamos del tamaño reservado para la cadena de caracteres, el compilador no nos avisa y puede fallar en la ejecución. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 24 Funciones para el manejo de cadenas strcmp(), “string compare” – Compara dos cadenas (según el orden de los caracteres en la tabla ASCII): • Si las cadenas son iguales, la función devuelve un cero. • Si cad1 es mayor que cad2 la función devuelve un número positivo. • Si cad1 es menor que cad2 la función devuelve un número negativo. – La forma general de la función es: strcmp(cad1, cad2); • strlen(), “string length” – Devuelve la longitud de la cadena, sin contar el carácter ‘\0’. La forma general de la función es: strlen(cad); • Ejercicio: Programar en C estas cuatro funciones. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 25 Cadenas de Caracteres: Ejemplos EJEMPLO 1 #include<stdio.h> #include<string.h> int main(void) { char cad[80]; strcpy(cad, “Hola”); printf(“%s”, cad); return 0; } EJEMPLO 2 Es un error hacer: cad=“Hola”; #include<stdio.h> #include<string.h> int main(void) { char cad1[20]; char cad2[10]; strcpy(cad1, “Hola”); strcpy(cad2, “amigos”); strcat(cad1, cad2); printf(“%s”, cad1); return 0; } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI EJEMPLO 3 /* Función que indica si la contraseña introducida por el usuario es correcta (devuelve 1) o incorrecta (devuelve 0) */ int Contrasegna(void) { char c[N]; int resultado; } printf(“introduzca contraseña: “); fgets(c, N, stdin); if ( strcmp(c, “Abracadabra”) != 0) { printf(“contraseña incorrecta\n”); resultado = 0; } else { resultado = 1; } return resultado; Vectores y cadenas de caracteres 26 Cadenas de Caracteres: Ejemplos EJEMPLO 4 EJEMPLO 5 Programa que imprime la longitud de la cadena leída Programa que imprime una cadena al revés #include<stdio.h> #include<string.h> #define N 80 int main(void) { char cad[N]; printf(“introduzca una cadena: “); fgets(cad, N, stdin); printf(“%d”, strlen(cad)); return 0; } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI #include<stdio.h> #include<string.h> #define N 80 int main(void) { char cad[N]; int i; printf(“Introduzca una cadena: “); fgets(cad, N, stdin); for (i = strlen(cad) –1; i>=0;i--) { printf(“%c”, cad[i]); } return 0; } Vectores y cadenas de caracteres 27 Paso de vectores unidimensionales a funciones Una función puede tener como argumento tanto vectores unidimensionales (vectores o cadenas de caracteres) como vectores multidimensionales (matrices). • Paso de argumento de un vector unidimensional: Se puede pasar como argumento un vector unidimensional completo a una función. La manera de hacerlo es: – Se utiliza el nombre del vector sin corchetes y sin índices como parámetro real en la llamada a la función. – En el correspondiente parámetro formal se debe escribir el tipo, el nombre del vector y un par de corchetes vacíos. – Se debe declarar el prototipo de la función (en este caso la declaración del nombre del vector es opcional, pero se debe escribir el tipo y dos corchetes vacíos). Como las cadenas de caracteres son vectores unidimensionales de tipo carácter, se cumplen estas mismas normas. • Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 28 Paso de vectores unidimensionales a funciones • • • • • • Cuando se pasa un vector a una función no se pasan los valores del vector, sino sólo la dirección del primer elemento. El nombre del vector se interpreta como la dirección del primer elemento. El parámetro formal de la función se convierte en un puntero al primer elemento. En el paso de vectores a una función se realiza un PASO POR REFERENCIA, en vez de un paso por valor (como hemos usado hasta ahora). Cualquier cambio en los elementos del vector modificará los valores originales del mismo. Como la instrucción return sólo puede devolver un valor a la función que la invocó, el uso de parámetros por referencia permite devolver más de un valor. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 29 Paso de vectores unidimensionales a funciones #include <stdio.h> #define N 100 float Media(int a, float x[ ]); Prototipo de la función int main(void) { int n; float med; Parámetro real float lista[N]; (nombre del vector) ……….. Dirección del primer elemento med = Media(n, lista ); ……… } float Media(int a, float x[ ] ) /*definición de función*/ { Parámetro formal ………. } (tipo del vector y corchetes) Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 30 Paso de vectores unidimensionales a funciones #include<stdio.h> #define N 3 Prototipo de la función void Modificar(int x[ ]); int main(void) { int a[N]; int i; printf(“los valores\n”); for (i=0;i<N;i++) { scanf(“%d:”, &a[i]); } printf(“\n”); printf(“\nlos valores originales en main son: “); for (i=0;i<N; i++) { printf(“%d “, a[i]); } printf(“\n”); Modificar( a ); printf(“\nlos valores en main depues del cambio son: “); for (i=0;i<N; i++) { printf(“%d”,a[i]); Parámetro real: se pasa como argumento real la } dirección del primer elemento del vector, que viene return 0; determinada por el nombre de la variable vector, en } este caso a. Vectores y cadenas de caracteres Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI 31 Paso de vectores unidimensionales a funciones Parámetro formal: la variable x tomará en cada llamada a la función la dirección del primer elemento de la variable vector con que se le llame. void Modificar(int x[ ] ) { int i; for (i=0;i<N; i++) { x[i]=2*x[i]; } printf(“\nEn modificar los valores son: “); for (i=0;i<N; i++) { printf (“%d “,x[i]); } } Se modifican los valores del vector x. Por la llamada a la función modificar(a), en este caso la variable x apunta al primer elemento de la variable vector a. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 32 Paso de vectores unidimensionales a funciones #include <stdio.h> #define TAM 100 void Reordenar(int n, int x[ ]); int main(void ) Comprobar que no se { int i; sobrepasa el tamaño del int n; vector int x[TAM]; do { printf(“\n¿Cuantos numeros va a introducir?\n “); printf(“No pueden ser mas de %d numeros”, TAM); scanf(“%d”, &n); } while (n > TAM || n <= 0); for (i = 0; i< n; i++) { printf(“i = %d x = “, i+1); scanf(“%d”, &x[i]); } Reordenar(n,x); printf(“\nLista de números reordenada:\n”); for (i = 0;i< n; i++) { printf(“i = %d x = %d\n”, i+1,x[i]); } return 0; } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 33 Paso de vectores unidimensionales a funciones void Reordenar(int n, int x[ ]) { int k; int i; int temp; for (k= 0; k< n-1; k++) { for (i = k+1; i< n; i++) { if (x[i] < x[k]) { temp = x[k]; x[k] = x[i]; x[i] = temp; } } } Ejemplo de ordenación: n=5 3 4 1 9 2 0 1 2 3 4 } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 34 Vectores multidimensionales ó Matrices El concepto es el mismo que en el caso de los vectores unidimensionales. – Hay que definir más de un índice (tantos como dimensiones). – Para referenciar a un elemento concreto hay que utilizar más de un índice. – El recorrido de un vector multidimensional se lleva a cabo anidando varios for. • El grado de anidamiento dependerá del número de dimensiones del vector. – A los vectores multidimensionales también se les llama matrices. • Declaración: tipo nombre [M][N]; – Por ejemplo, una variable de nombre “lista_numeros” de tipo vector bidimensional de enteros con M filas y N columnas se declara como: int lista_numeros[M][N]; • Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 35 Vectores multidimensionales • Inicialización de un vector multidimensional: – Se asignan por filas, de manera que primero se asignan los elementos de la primera fila, luego los de la segunda, etc. – Si hay pocos elementos dentro de cada par de llaves, se asigna cero a los elementos que falten. – El número de elementos dentro de cada par de llaves no puede exceder el tamaño definido de la fila int x[2][3] = {1,2,3,4,5,6}; Ejemplo 1 Ejemplo 2 x[0][0] = 1 x[1][0] = 4 int x[0][1] = 2 x[1][1] = 5 En todos estos casos se consigue lo mismo x[0][2] = 3 x[1][2] = 6 x[2][3] = {{1,2,3},{4,5,6} }; Ejemplo 3 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 36 Vectores multidimensionales: Ejemplo #include<stdio.h> #define M 2 #define N 3 int main(void) { int x[M][N]= {{6,2}, {3,4,1}}; int i, j; for (i = 0; i <M; i++) { /* Recorre filas */ for (j = 0; j < N; j++) { /* Recorre columnas */ printf(“%d”, x[i][j]); } printf(“\n”); } return 0; Resultado: 6 2 0 341 } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Vectores y cadenas de caracteres 37 Vectores multidimensionales: Ejemplo #include<stdio.h> #define NF 3 #define NC 4 int main(void) { int a[NF][NC]; int i, j; Programa que lee y escribe una matriz bidimensional de 3 filas y 4 columnas for (i=0;i<NF;i++) { for (j=0;j<NC;j++) { printf(“Elemento %d,%d : “, i,j); scanf(“%d”,&a[i][j]); } } printf(“\nLa matriz introducida es:\n\n”); for (i =0;i <NF;i++) { for (j =0;j <NC;j++) { printf(“%d ”,a[i][j]); } printf(“\n”); } return 0; Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI } Vectores y cadenas de caracteres 38 Paso de vectores multidimensionales a funciones • Paso de un vector multidimensional: Se puede pasar un vector multidimensional completo a una función como argumento. – Es similar al paso de un vector unidimensional salvo porque es necesario en el parámetro formal especificar todos los índices excepto el primer índice que se escribe entre corchetes vacíos. Ejemplo: Función que inicializa una matriz de 3x5 #include <stdio.h> #define N 3 #define M 5 void InicializaMatriz(int matriz[ ] [M]); int main (void) { int mat[N][M]; ....... InicializaMatriz(mat); ..... Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI } void InicializaMatriz(int matriz[ ] [M]) { int n; int m; for (n=0; n< N; n++) { for (m=0; m<M; m++) { mat[n][m] = 0; } } } Vectores y cadenas de caracteres 39 Escuela Técnica Superior de Ingeniería ICAI Alberto Aguilera 25 28015 Madrid Tel +34 91 542 28 00 Fax + 34 91 542 31 76 Iwww.icai.upcomillas.es www.upcomillas.es