Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Arrays y funciones en C: Declaración, inicialización, manipulación y recorrido, Ejercicios de Informática

Cómo declarar, inicializar, manipular y recorrer arrays y funciones en el lenguaje de programación c. Además, se detalla el uso de arrays bidimensionales o matrices, y las diferentes maneras de recorrarlos. El documento también incluye ejemplos prácticos.

Tipo: Ejercicios

Antes del 2010

Subido el 30/08/2008

josellle
josellle 🇪🇸

4.4

(60)

148 documentos

1 / 59

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
q CONCEPTO DE VECTOR O ARRAY
ü Concepto
Vector, arreglo o array: Objeto que permite
definir un almacenamiento (con un nombre común) en
memoria principal de una colección de datos:
del mismo tipo
ordenados de manera secuencial (en posiciones
contigüas de memoria), de manera que cada dato
ocupa una posición determinada ( 0, 1, 2 …)
denominada índice. La forma de acceder a un dato
determinado es indicar su número de posición.
Ejemplo
- Notas de los alumnos de una clase ordenadas por
número de orden del alumno
Índice 0123456
NOTAS 7.5 2 6 9 2 4 6
NOTAS [3]=9
- Número de que se obtiene en cada una de las
tiradas de un dado
Índice 0123456
TIRADAS 5626512
TIRADAS [6]=2
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b

Vista previa parcial del texto

¡Descarga Arrays y funciones en C: Declaración, inicialización, manipulación y recorrido y más Ejercicios en PDF de Informática solo en Docsity!

q CONCEPTO DE VECTOR O ARRAY

¸ Concepto

Vector , arreglo o array : Objeto que permite definir un almacenamiento (con un nombre común) en memoria principal de una colección de datos:

  • del mismo tipo
  • ordenados de manera secuencial (en posiciones contigüas de memoria), de manera que cada dato ocupa una posición determinada ( 0, 1, 2 …) denominada índice. La forma de acceder a un dato determinado es indicar su número de posición.

Ejemplo

  • Notas de los alumnos de una clase ordenadas por número de orden del alumno

Índice 0 1 2 3 4 5 6 NOTAS 7.5 2 6 9 2 4 6 NOTAS [ 3 ]=

  • Número de que se obtiene en cada una de las tiradas de un dado

Índice 0 1 2 3 4 5 6 TIRADAS 5 6 2 6 5 1 2 TIRADAS [ 6 ]=

¸ Declaración

tipo_dato identificadorV[dimensión]

El tipo indica al compilador cuantos bytes se necesitan para cada elemento y la dimensión cuantos elementos. Es típico definir la dimensión con #define dimensión N

  • Se puede inicializar un vector al declarlo
  • Solo se deberían declarar sin dimensión los vectores de caracteres inicializados:

char vector[]=”hola”

¸ Acceso

identificadorV[indice]

Donde indice es una variable int o char (numérica)

  • Un array indexado se utiliza exactamente igual a como se utilizaría una variable del tipo base del vector (asignarle un valor,usarla en expresiones)
  • No se comprueba que el índice está dentro de los límites (‘0’ y ‘dimensión-1’): es responsabilidad del programador evitar escribir o leer fuera de los limites.
  • Escribir fuera de los límites de un array es especialmente pernicioso: se altera el contenido de posiciones de memoria que pueden contener cualquier cosa (otras variables, código máquina).

q ARRAYS Y FUNCIONES

  • Un array declarado como variable local de una función se usa igual que cualquier otra variable
  • Un array que aparezca como parámetro de una función presenta algunas particularidades:

1-Llamada a una función que tenga como parámetro un array: se escribe el nombre del array sin corchetes

2-Declaración como parámetro formal en la cabecera

de una función: se escribe tipo nombreVector []

(sin escribir un tamaño, aunque no sería incorrecto). 3- Los vectores no se pueden devolver en una función (return), por lo que si se desea que una función modifique un array en principio tendríamos que pasarlos como parámetro por referencia. Esto no es necesario ya que los vectores se pasan siempre por referencia (son en realidad punteros). Por tanto cualquier cambio que haga una función en un array pasado como parámetro será un cambio permanente. Un error típico del programador en C novato es confiar que un array pasado como parámetro actual a una función no se modificará. Tampoco es necesario utilizar el operador & delante del nombre del array. El nombre de un array equivale sintácticamente a la dirección del elemento cero (es decir array == &array[0]).

#include

/*Declaración alternativa: ‘ *void visualizar(int *)* ’ */

/prototipo: Declaración sin poner nombre del array/ void visualizar(int []);

int main() /* rellenamos y visualizamos */ { int array[25],i; for (i=0;i<25;i++) { printf("Elemento nº %d",i+1); scanf("%d",&array[i]); } visualizar(array); //o también: visualizar(&array[0]) }

/Declaración alternativa ‘ void visualizar(int * array)/

/*Implementación: obligatorio poner nombre al array */ void visualizar(int array[])

int i; for (i=0;i<25;i++) printf("%d",array[i]); }

Ó Lectura de los datos en un vector o array

void lee (int vector[]) { int i; for (i=0; i

q MATRICES:

ARRAYS MULTIDIMENSIONALES

¸ Concepto

Los arrays pueden tener 1 dimensión (los estudiados antes) o 2 (arrays bidimensionales o matrices), 3 o mas.

En una matriz:

  • Se distribuye la información en forma de tabla por filas y columnas.
  • Las filas y columnas se indexan desde 0 en adelante.
  • En la intersección de una fila y una columna hay un solo dato (identificado por num_fila y num_ columna)

Las matrices suelen utilizarse para relacionar dos magnitudes, como por ejemplo, la nota de un determinado alumno en una determinada asignatura.

El alumno 1 en la asignatura 2 tiene un 4 Boletin[2][1]=

Boletin[Nasig][Nalum]

q MATRICES Y FUNCIONES

  • Una matriz declarada como variable local de una función se usa igual que cualquier otra variable
  • Una matriz que aparezca como parámetro de una función presenta algunas particularidades:

1-Llamada a una función que tenga como parámetro una matriz: escribir nombre de matriz sin corchetes ni &

2-Declaración como parámetro formal en la cabecera de una función se escribe sin tamaño para las filas y a continuación [dimensión] para las columnas:

tipo nombreMatriz [][Columnas]

En general, si el argumento es una matriz n- dimensional es obligatorio especificar todas las dimensiones menos la primera

Tipo nombreMatriz [][DIM2][DIM3]

La razón es que una matriz se almacena realmente en memoria “por filas”.

Por ejemplo, en el caso bidimensional:

Puede verse así: El vector multidimensional es un vector de dimensión DIM1 en el que en cada posición hay a su vez un vector de dimensión DIM2, y asi sucesivamente:

Para que el compilador pueda indexar correctamene la matriz matriz[2][4], necesita conocer DIM2:

matriz[ 2 ][ 4 ]

posición de la Fila 2 , Columna 4

posición Nº: 2 *DIM2+ 4

int matriz[3][7] En memoria:

DIM DIM 4

m[i][j]=0; }

Ó Imprimir el contenido de una matriz

void imprimir (int m[][COLUMNAS]) { int i,j; for (i=0;i Ó Ejemplo de trabajo con matrices

#define FILAS 3 #define COLUMNAS 4

void inicializa(int m[][COLUMNAS]); void imprime (int m[][COLUMNAS]); void lee (int m[][COLUMNAS]); int main() { int m[FILAS][ COLUMNAS] ;

inicializa(m); lee(m); imprime (m); }

Ó ARITMETICA DE PUNTEROS

  • Un puntero contiene una dirección de memoria (un número): podemos sumar o restar una cantidad a un puntero, haciendo que el puntero apunte a otra dirección de memoria.
  • Todos los operadores aritméticos de suma y resta son aplicables a punteros (+ , - , += , -= , ++,--)
  • Semántica: Sumar (restar) la cantidad de 1 a un puntero, hace que el puntero se incremente (decremente) no en 1, si no en una cantidad igual al número de bytes del tipo base; es decir, se hace que el puntero apunte al siguiente dato en memoria de ese tipo.
  • Si se restan dos punteros que apuntan a dos posiciones de un array, se obtiene el número de elementos que hay almacenados entre ambos punteros.

Por ejemplo:

int main(int argc, char * argsv[])

{ char cvar[5]={‘a’,’b’,’c’,’d’,’e’}; //Tamaño: 5 bytes char * pcvar;

int ivar[5]={1,2,3,4,5}; //Tamaño: 5x2== 10 bytes int * pivar,pivar2;

pcvar=&cvar; printf(“Letra %c,dirección %p”,pcvar,pcvar); //’a’,FF pcvar++; printf(“Letra %c,dirección %p”,pcvar,pcvar); //’b’,FF pcvar+=3; printf(“Letra %c,dirección %p”,*pcvar,pcvar); //’e’,FF

pivar=pivar2=&ivar; printf(“Numero %i,direccion %p”,pivar,pivar);// 1, FF pivar++; printf(“Numero %i,direccion %p”,pivar,pivar);// 2, FF pivar+=3; printf(“Numero %i,direccion %p”,*pivar,pivar);// 5, FF0F

printf(“El tamaño del array de caracteres es%i”,pivar-pivar2); }

FF00 FF

FF07 FF0F

q PUNTEROS Y VECTORES

¸ Los operadores de punteros y vectores son

intercambiables: se puede trabajar con los elementos de un array mediante operaciones de punteros y se pueden manipular punteros con el operador de indexación [] de arrays. En realidad el identificador de un vector es un puntero a su primer elemento.

int *pv; int vector[10]; //vector==&vector[0]

pv=vector; // o pv=&vector[0]

if (pv == vector) printf (“Esto siempre es cierto”);

Ó Desplazamiento sobre un array

Los elementos del array se almacenan en posiciones consecutivas de memoria, asi que para referirse a un elemento del array basta con desplazar el puntero a la posición deseada :

vector == &vector[0] == pv == &pv[0] (vector+1) == &vector[1] == (pv +1) == &pv[1] (vector+2) == &vector[2] == (pv+2) == &pv[2]

pv vector

Ó Modificación del contenido de una posición

Al tratarse de un puntero, al identificador de un vector se le puede aplicar el operador * para obtener el contenido de la dirección a la que apunta:

*vector == vector[0] == *pv == pv[0] *(vector+1) == vector[1] == *(pv+1) == pv[1] *(vector+1) == vector[2] == *(pv+2) == pv[2]

¸ Diferentes estilos para recorrer un array

1º. Operador de Indexación []

#include #define DIM 10 int main() { int i, x=1, vector[DIM];

for (i=0; i