Tema 7 Vectores y cadenas de caracteres

Anuncio
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
Descargar