Tema 7 Vectores y cadenas de caracteres...se escribe en la cadena), cuando se encuentra el fin de...
Transcript of Tema 7 Vectores y cadenas de caracteres...se escribe en la cadena), cuando se encuentra el fin de...
Tema 7Vectores y cadenas de caracteres
Fundamentos de Informática
2Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Índice1. ¿Qué es un vector?2. Vectores unidimensionales3. Cadenas de caracteres4. Paso de vectores unidimensionales a funciones.5. Vectores multidimensionales: matrices6. Paso de vectores multidimensionales a funciones
1
Introducción
4Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
¿Qué es un VECTOR?
• Un VECTOR es un conjuntoconjunto de datos del mismo tipotipo 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.
5Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
¿Qué es un VECTOR?
Referencia el tercer elemento de la variable Lista.Para asignar:Para asignar:
Lista[2]= -11;Para extraer informaciPara extraer informacióón:n:
printf(“El valor es %d”,Lista[2]);resultado=Lista[2];
DeclaraciDeclaracióón del VECTORn del VECTOR
int Lista[6];
• Los índices son números enteros positivos que están encerrados entre corchetes.
15 -20 -11 70 -3 5
0 31 2 4 5
ListaVector Vector
unidimensionalunidimensional
6Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
¿Qué es un VECTOR?
Vector Vector
BidimensionalBidimensional
óó MatrizMatriz
15 -20 64 70 -3 5
0 31 2 4 5
43 2 11 -4 11 27
11 17 -47 -11 -12 1
0
1
2
Referencia el elemento de la tercera fila y la cuarta columna de la variable ListaPara asignar:Para asignar:
Lista[2][3]=-11;Para extraer informaciPara extraer informacióón:n:
printf(“El valor es %d”,Lista[2][3]);resultado=Lista[2][3];
DeclaraciDeclaracióón del la matriz:n del la matriz:
int Lista[3][6];
ListaLista
2
Vectores unidimensionales
8Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Vectores unidimensionales• Es un conjunto de elementos del mismo tipo.• Declaración:
tipo nombre_vector[TAMAtipo nombre_vector[TAMAÑÑO];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.
9Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Vectores unidimensionales: EjemploDeclaración de un vector de 10 elementos enteros
Primera posición del vector
Última posición del vector
Elemento t del vector x
#include<stdio.h>int main(void){int x[10];int t;
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”);for ( t = 0 ; t<10 ; t++ ) {printf(“%d”, x[t]); /*escribir los elementos*/
}return 0;
} ¿Cuál es la salida del programa?
10Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Vectores unidimensionales: Ejemplo
Si cambia el tamaño del vector con cambiar el valor del #define es suficiente
El mismo ejemplo anterior utilizando #define:
#include<stdio.h>#define N 10void main(void){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*/
}}
MUCHO MEJOR
11Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
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,tipo vector[N] = {valor1, valor2,…….., valor N.., valor N‐‐1};1};
siendo N el número de elementos de la variable vector
12Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
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); ERRORERRORprintf(“%d”, lista); ERRORERROR
13Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
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 4int main(void){
int ejemplo[N] ={1,2,3,4}; /*inicializar un vector en el momento de la declaración*/
int copy[N];int i;
for ( i=0 ; i < N ; i++) {copy[i]= ejemplo[i]; /*copiar un vector en otro*/
}for ( i= 0; i<N; i++) {
printf(“%d”, ejemplo[i]); /*escribir los elementos*/
}return 0;
}
14Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Vectores unidimensionales: Ejemplo
Dirección de la posición i del vector ejemplo, donde se va a guardar el valor leído mediante scanf()
Programa que calcula la media de 20 dígitos leídos desde el teclado
#include<stdio.h>#define N 20int 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++) {/*sumar los números*/sum = sum + ejemplo[i];}printf(“La media es %d\n”, sum/N);return 0;
}
3
Cadenas de caracteres
16Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y 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 :
1. 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];
– 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’
17Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
• 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);
Cadenas de caracteres: Lectura
18Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
• 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);
Cadenas de caracteres: escritura
19Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
#include<stdio.h>#define N 10int main(void){
char cad[N];gets(cad);puts(cad);…
}
• Las funciones printf(), scanf(), gets() y puts() permiten trabajar directamente sobre cadenas sin necesidad de utilizar bucles.
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.
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).
#include<stdio.h>#define N 10int main(void){char cad[N];scanf(“%s”, cad );printf(“%s”, cad);……
}
Cadenas de caracteres: Lectura
20Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
• 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
Cadenas de caracteres: Lectura
21Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Cadenas de caracteres: lectura
#include <stdio.h>#define N 10
int main(void){
char cad[N];
fgets (cad, N, stdin);
puts(cad);…
}
• De momento, vamos a utilizar la función de la siguiente manera:
Indica que lee de la entrada estándar
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)
22Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Ejemplo cadenas de caracteres
#include<stdio.h>#include<ctype.h>#define TAM 80int main(void){
char letras[TAM];int cont;
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;
}
Programa que lee una línea de texto carácter a carácter y la transforma escribiéndola en mayúsculas
23Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Ejemplo cadenas de caracteres
#include<stdio.h>#include<ctype.h>#define TAM 80int main(void){
char letras[TAM];int cont;
fgets(letras, TAM, stdin)
for (cont = 0; cont< TAM; cont++) {/*escribir en mayúscula*/putchar( toupper(letras[cont]) );
}return 0;
}
Programa que lee una línea de texto con fgets() y la transforma escribiéndola en mayúsculas
24Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
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);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);strcat( cad1, cad2);
Advertencia: Mucho cuidado al copiar o concatenar dos cadenas coAdvertencia: Mucho cuidado al copiar o concatenar dos cadenas con strcpy() o n strcpy() o strcat() ya que si nos pasamos del tamastrcat() ya que si nos pasamos del tamañño reservado para la cadena de o reservado para la cadena de caracteres, el compilador no nos avisa y puede fallar en la ejeccaracteres, el compilador no nos avisa y puede fallar en la ejecuciucióón.n.
25Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
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);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);strlen(cad);
Ejercicio: Programar en C estas cuatro funciones.
26Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Cadenas de Caracteres: Ejemplos
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;
}
EJEMPLO 1#include<stdio.h>#include<string.h>int main(void){ char cad[80];
strcpy(cad, “Hola”);printf(“%s”, cad);return 0;
}
EJEMPLO 2Es 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;
}
27Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
#include<stdio.h>#include<string.h>#define N 80int main(void){
char cad[N];printf(“introduzca una cadena: “);
fgets(cad, N, stdin);printf(“%d”, strlen(cad));return 0;
}
Cadenas de Caracteres: Ejemplos
#include<stdio.h>#include<string.h>#define N 80int 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;
}
EJEMPLO 5
Programa que imprime una cadena al revés
EJEMPLO 4
Programa que imprime la longitud de la cadena leída
28Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
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.
29Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
• 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.
Paso de vectores unidimensionales a funciones
30Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
#include <stdio.h>#define N 100float Media(int a, float x[ ]);int main(void){
int n;float med;float lista[N];………..med = Media(n, lista );………
}float Media(int a, float x[ ] ) /*definición de función*/{……….}
Paso de vectores unidimensionales a funciones
Parámetro formal(tipo del vector y corchetes)
Parámetro real (nombre del vector) Dirección del primer elemento
Prototipo de la función
31Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Paso de vectores unidimensionales a funciones
Parámetro real: se pasa como argumento real la dirección del primer elemento del vector, que viene determinada por el nombre de la variable vector, en este caso a.
Prototipo de la función
#include<stdio.h>#define N 3void 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]);}return 0;
}
32Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Paso de vectores unidimensionales a funciones
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.
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]);}
}
33Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Paso de vectores unidimensionales a funciones
Comprobar que no se sobrepasa el tamaño del vector
#include <stdio.h>#define TAM 100void Reordenar(int n, int x[ ]);intmain(void ){ int i; int n;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;
}
34Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
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
35Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
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];
36Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
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};
x[0][0] = 1 x[0][1] = 2 x[0][2] = 3x[1][0] = 4 x[1][1] = 5 x[1][2] = 6
int x[2][3] = {{1,2,3},{4,5,6} };
En todos estos casos se consigue lo mismo
Ejemplo 1
Ejemplo 2
Ejemplo 3
37Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
Vectores multidimensionales: Ejemplo#include<stdio.h>#define M 2#define N 3int 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 03 4 1
38Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
#include<stdio.h>#define NF 3#define NC 4int main(void){int a[NF][NC];int i, j;
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;
}
Programa que lee y escribe una matriz bidimensional de 3 filas y 4 columnas
Vectores multidimensionales: Ejemplo
39Departamento de Sistemas InformáticosEscuela Técnica Superior de Ingeniería ICAI
Vectores y cadenas de caracteres
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.
#include <stdio.h>#define N 3#define M 5void InicializaMatriz(int matriz[ ] [M]);int main (void) {
int mat[N][M];.......InicializaMatriz(mat);.....
}
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;
}}
}
Ejemplo: Función que inicializa una matriz de 3x5
Escuela Técnica Superior de Ingeniería ICAIAlberto Aguilera 2528015 MadridTel +34 91 542 28 00Fax + 34 91 542 31 76Iwww.icai.upcomillas.es
www.upcomillas.es