0% encontró este documento útil (0 votos)
29 vistas8 páginas

Informatica Usal Tema 4

Este documento trata sobre vectores (arrays) en el lenguaje C. Explica conceptos como arrays unidimensionales y multidimensionales, el paso de arrays a funciones, y la inicialización de arrays. Cubre temas como la sintaxis para declarar arrays, cómo acceder a sus componentes mediante índices, y ejemplos de código para leer y escribir arrays unidimensionales y matrices.

Cargado por

Jose Cabanillas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
29 vistas8 páginas

Informatica Usal Tema 4

Este documento trata sobre vectores (arrays) en el lenguaje C. Explica conceptos como arrays unidimensionales y multidimensionales, el paso de arrays a funciones, y la inicialización de arrays. Cubre temas como la sintaxis para declarar arrays, cómo acceder a sus componentes mediante índices, y ejemplos de código para leer y escribir arrays unidimensionales y matrices.

Cargado por

Jose Cabanillas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Lenguaje C: Tema 4.

VECTORES
Vectores

TEMA 4.
VECTORES (ARRAYS)

1. INTRODUCCIÓN
2. ARRAYS UNIDIMENSIONALES
3. ARRAYS MULTIDIMENSIONALES. MATRICES.
4. PASO DE ARRAYS A FUNCIONES
5. INICIALIZACIÓN DE ARRAYS
6. OPERACIONES SOBRE ARRAYS
7. CADENAS DE CARACTERES (STRINGS)

Ampliación de Programación 1

Lenguaje C: 1. Introducción
Vectores

9 Los tipos de datos vistos hasta ahora se denominan escalares o


elementales
8 Las variables de estos tipos pueden tomar valores simples (un número
entero, un número real, un carácter)

9 Un vector es un tipo de datos constituido por un número fijo de


componentes del mismo tipo, llamado tipo base
8 Ejemplo: las notas de un alumno durante un curso se pueden guardar en un
vector de números reales
8 Es una estructura de acceso aleatorio: cada componente puede ser accedida
arbitrariamente

9 Los vectores pueden ser unidimensionales o multidimensionales

9 En los lenguajes de programación los vectores se suelen llamar arrays

Ampliación de Programación 2

1
Lenguaje C: 2. Arrays unidimensionales
Vectores

9 Sintaxis de la declaración de un array unidimensional en C

tipoBase nombreArray[expresionConstante];

9 Ejemplo: un array unidimensional de 5 enteros, llamado vector

int vector[5];

8 Con la declaración del vector anterior, se dispone de espacio en memoria


central para almacenar 5 valores enteros, referenciados con el nombre vector

Ampliación de Programación 3

Lenguaje C: 2. Arrays unidimensionales


Vectores

9 Para acceder a cada componente del array se escribe el nombre seguido


de la posición o índice, entre corchetes, de esa componente dentro del
vector

8 Se debe tener en cuenta que los índices comienzan en 0


8 Ejemplo: dada la declaración
int vector[5];
los índices del vector van de 0 a 4:

0 1 2 3 4 Índices
vector 3 4 1 4 7

vector[0] vector[1] vector[2] vector[3] vector[4]

Ampliación de Programación 4

2
Lenguaje C: 2. Arrays unidimensionales
Vectores

9 Ejemplo: lectura y escritura de un array de enteros


void main(void)
{
int v[10]; // array de 10 enteros
int i;

for (i=0; i<10; i++)


{
printf(“Valor %d: ”, i);
scanf(“%d”, &v[i]);
}

printf(“Valores leidos:\n”);

for (i=0; i<10; i++)


printf(“Componente %d: %d\n”, i, v[i]);
}

Ampliación de Programación 5

Lenguaje C: 3. Arrays multidimensionales


Vectores

9 Un array multidimensional se define de forma análoga a los


unidimensionales, separando cada uno de los índices por un par de
corchetes
9 Sintaxis de la declaración:

tipoBase nombreArray[constante1][constante2] ... [constanteN];

9 Ejemplo: declaración de un array bidimensional de 3x3 elementos


(matriz) de números reales:
float matriz[3][3];

8 El primer índice corresponde a las filas de la matriz y el segundo a las columnas


8 Para acceder a la componente (i,j):

matriz[i][j];

Ampliación de Programación 6

3
Lenguaje C: 3. Arrays multidimensionales
Vectores

9 Ejemplo: lectura y escritura de una matriz 3x3


#include <stdio.h>

#define NUMFILAS 3 // escribimos la matriz por filas


#define NUMCOLUMNAS 4
for (i=0; i<NUMFILAS; i++)
void main(void) {
{ // escribimos la fila i
float m[NUMFILAS][NUMCOLUMNAS]; for (j=0; j<NUMCOLUMNAS; j++)
int i,j; {
printf(“%.3f”, m[i][j]);
// leemos la matriz por filas }
for (i=0; i<NUMFILAS; i++) printf(“\n”);
{ }
// leemos la fila i }
for (j=0; j<NUMCOLUMNAS; j++)
{
printf(“Elemento (%d,%d): “,i,j);
scanf(“%f”, &m[i][j]);
}
}

Ampliación de Programación 7

Lenguaje C: 4. Paso de Arrays a funciones.


Vectores

9 Para declarar que una función recibe un array como parámetro, se debe declarar
el parámetro como un array del tipo base adecuado
8 Si el array es unidimensional, no es necesario especificar el tamaño del mismo
(corchetes vacíos).
8 Si el array es multidimensional, se debe especificar el tamaño de todas las
dimensiones, excepto el de la primera, que se puede dejar vacío.

9 En la llamada a la función que espera un array como parámetro, el nombre del


mismo debe aparecer solo, sin corchetes ni índices
8 De esa forma, se permite que el array completo sea pasado como parámetro a la
función.

9 Los arrays se pasan por dirección: al pasar un array como parámetro no se hace
una copia para la función de los valores de los elementos del array
8 El nombre de un array representa la dirección de memoria donde se encuentra la
primera componente del mismo, y a partir de esta dirección se accede a todas las
componentes .

Ampliación de Programación 8

4
Lenguaje C: 4. Paso de arrays a funciones
Vectores

9 Ejemplo: arrays unidimensionales


void AsignarVector(int destino[], int origen[])
#include <stdio.h> {
int i;
#define TAM 5
for (i=0; i<TAM; i++)
void LeerVector(int v[]) destino[i] = origen[i];
{ }
int i;
void main(void)
for (i=0; i<TAM; i++) {
scanf(“%d”, &v[i]); int v1[TAM], v2[TAM];
}
printf(“Introducir el vector 1: “);
void EscribirVector(int v[]) LeerVector(v1);
{ AsignarVector(v2,v1);
int i; printf(“Vector 2: “);
EscribirVector(v2);
for (i=0; i<TAM; i++) }
printf(“%d ”, v[i]);
}

Ampliación de Programación 9

Lenguaje C: 4. Paso de arrays a funciones


Vectores

9 Ejemplos: arrays bidimensionales void EscribirMatriz(float m[][NUMCOLUMNAS])


{
#include <stdio.h>
for (i=0; i<NUMFILAS; i++)
#define NUMFILAS 3 {
#define NUMCOLUMNAS 4 // escribimos la fila i
for (j=0; j<NUMCOLUMNAS; j++)
{
void LeerMatriz(float m[][NUMCOLUMNAS]) printf(“%.3f”, m[i][j]);
{ }
int i,j; printf(“\n”);
}
for (i=0; i<NUMFILAS; i++) }
{
// leemos la fila i void main(void)
for (j=0; j<NUMCOLUMNAS; j++) {
{ float matriz[NUMFILAS][NUMCOLUMNAS];
printf(“Elemento (%d,%d): “,i,j);
scanf(“%f”, &m[i][j]); LeerMatriz(matriz);
} EscribirMatriz(matriz);
} }
}

Ampliación de Programación 10

5
Lenguaje C: 5. Inicialización de arrays
Vectores

9 Se puede asignar valores iniciales a las componentes de un array en la


declaración
8 En la inicialización se puede omitir el tamaño del array

9 Ejemplo: inicialización de un array unidimensional


int v[5] = {7, -5, 0, 4, 1 };
int v[] = {7, -5, 0, 4, 1 }; // Equivalente a la anterior

9 Ejemplo: inicialización de un array bidimensional


int m[2][3] = {9, 0, -1, 3, 4, 7 };
int m[][3] = {9, 0, -1, 3, 4, 7 };

⎛ 9 0 − 1⎞
m = ⎜⎜ ⎟⎟
⎝3 4 7⎠

Ampliación de Programación 11

Lenguaje C: 6. Operaciones sobre arrays


Vectores

9 En C no existen funciones estándar para el manejo de arrays generales:


por ejemplo no existen funciones para leer, sumar, multiplicar o escribir
dos vectores
9 Las distintas operaciones sobre arrays se han de efectuar elemento a
elemento usando sentencias de iteración
9 La programación de estas operaciones se suele hacer con funciones
9 Las operaciones de manipulación de arrays más frecuentes son las
siguientes:
8 Lectura, escritura, asignación
8 Comparación
8 Búsqueda de un elemento dentro de un vector
8 Ordenación

Ampliación de Programación 12

6
Lenguaje C: 7. Cadenas de caracteres
Vectores

9 Una cadena de caracteres es un array unidimensional de caracteres


terminado con el carácter nulo (‘\0’)
8 Este carácter nulo se utiliza para indicar el fin de la cadena y no aparece
cuando se muestra en pantalla
9 Una constante de este tipo se expresa escribiendo la cadena de
caracteres entre comillas (“”)
8 Ejemplo: “hola”
8 Las cadenas de caracteres se pueden inicializar igual que cualquier otro
array

char cad[5] = “hola”; DECLARACIONES EQUIVALENTES


char cad[5] = { ’h’, ’o’ , ’l’, ’a’, ’\0’ };

8 Nótese la diferencia entre las constantes de tipo carácter (‘a’) y las


constantes de tipo cadena (“a”). La cadena “a” está formada por dos
caracteres: ‘a’ y ‘\0’

Ampliación de Programación 13

Lenguaje C: 7. Cadenas de caracteres


Vectores

9 Una cadena de n caracteres necesita un array de n+1 elementos, puesto


que hay que añadir el carácter ‘\0’ que indica el fin de la cadena

“hola” h o l a \0

9 En la inicialización se puede omitir el tamaño del array:


char cad[] = “hola”;
9 Existen numerosas funciones de librería en C para el tratamiento de
cadenas, cuyos prototipos se encuentran en <string.h>
9 Para la lectura y escritura de cadenas con printf y scanf, se utiliza el
formato %s

Ampliación de Programación 14

7
Lenguaje C: 7. Cadenas de caracteres
Vectores

9 Ejemplo: función que extrae una subcadena


9 Ejemplo: función que
de la cadena a desde la posición p hasta
calcula la longitud de una
p+q, y la copia en la cadena b
cadena
void SubCad(char a[],char b[],
int LongitudCad(char cad[])
unsigned p, unsigned q)
{
{
int i;
int i, longa;
i=0;
longa = LongitudCad(a);
while (cad[i] != ‘\0’)
i = p;
i++;
while ( (i<p+q) && (i<=longa) )
{
return(i);
b[i-p] = a[i];
}
i++;
}
b[i-p] = ‘\0’; /* marca de fin de cadena */
}

Ampliación de Programación 15

Lenguaje C: 7. Cadenas de caracteres


Vectores

9 Ejemplo: función que comprueba si dos cadenas son iguales


int CadenasIguales(char a[], char b[])
{
/* devuelve verdadero si las cadenas a y b son iguales,
falso en caso contrario */
int iguales, longitud, i;

iguales = 1; // verdadero
longitud = LongitudCad(a);
if (longitud != LongitudCad(b))
iguales = 0; // falso
else
{
for (i=0; i<longitud && iguales; i++)
if (a[i] != b[i])
iguales = 0; // falso
}
return(iguales);
}

Ampliación de Programación 16

También podría gustarte