Arreglos Coleccin de variables del mismo tipo, referenciados bajo un mismo nombre y almacenados en localidades consecutivas de memoria.
tipo nombre[tam]; Arreglo unidimensional Permite almacenar N elementos de un mismo tipo y acceder a ellos mediante un ndice. El primer elemento elemento del arreglo es el elemento cero
tipo nombre[tam]; Arreglo unidimensional Los arreglos ocupan espacio en memoria y se reserva al momento de declararlos Ej. void main (){ int A[10]; float B[5]; char cadena []=palabra; }
Arreglo unidimensional Ejercicio
Elaborar un programa que al recibir los datos de tipo entero en un arreglo unidimensional de 100 elementos determine cuantas veces se encuentra un nmero dentro del arreglo.
Arreglo unidimensional Datos:
A[100] - Arreglo nombre: A, tamao:100 num variable tipo entera, es el nmero que se buscar cuenta variable de tipo entera en la que se ir almacenando cuantas veces se repite el nmero buscado Arreglo unidimensional Es posible especificar el tamao de un arreglo mediante una constante simblica:
#define TAM 10 int S[TAM]; Arreglo unidimensional PASAR ARREGLOS A FUNCIONES
Para pasar arreglos a funciones como argumentos, se especifica el nombre del arreglo sin corchetes y el tamao
printf("\nDame el tamao del arreglo"); scanf("%d",&n);
for(i=0;i<n;i++){ printf("\nDame el elemento A[%d]: ",i); scanf("%d",&A[i]); }
printf("\nDame el numero a buscar: "); scanf("%d",&num);
F(A,n,num);
system("PAUSE"); }
int F(int B[], int tam, int numero){ int i, cuenta=0;
for(i=0;i<tam;i++) if(numero==B[i]) cuenta++;
printf("\nEl numero %d se repite %d veces ",numero,cuenta); return cuenta; } Arreglo multidimensional Un uso comn de los arreglos multidimensionales es la representacin de tablas que organizan informacin en filas y columnas
Para identificar un elemento de una tabla se usan dos subndices el primero corresponde a las filas y el segundo a las columnas. Arreglo multidimensional Arreglo multidimensional Columna 0 Columna 1 Columna 2 Columna 3 Fila 0 a[0][0] a[0][1] a[0][2] a[0][3] Fila 1 a[1][0] a[1][1] a[1][2] a[1][3] Fila 2 a[2][0] a[2][1] a[2][2] a[2][3] Solucin con matriz bidimensional #include <stdio.h> #include <stdlib.h>
main(){
int A[100][100],num,i,j,n,m,cuenta;
printf("\nDame el numero de filas: "); scanf("%d",&n);
printf("\nDame el numero de columnas: "); scanf("%d",&m);
for(i=0;i<n;i++) for(j=0;j<m;j++){
printf("\nDame el elemento A[%d][%d]: ",i,j); scanf("%d",&A[i][j]); }
printf("\nEl numero %d se repite %d veces ",num,cuenta);
system("PAUSE"); } Arreglos y apuntadores Para entender el concepto de apuntador es necesario tener en claro el como los datos son almacenados en memoria.
El nombre de la variable determina el tipo (char,int,float o double) y la direccin determina donde esta almacenada. Arreglos y apuntadores El conocer la direccin de una variable nos permite:
que las funciones cambien el valor de sus argumentos. Pasar arreglos de forma eficiente entre funciones Reservar memoria en tiempo de ejecucin en lugar de en tiempo de compilacin Arreglos y apuntadores El valor de cada variable en un programa se guarda en una localidad de memoria cuyo tamao esta determinado por el tipo de dato de la variable. La posicin de esta localidad de memoria es almacenada en la direccin de la variable.
Es como si cada variable estuviera compuesta de dos partes: su valor y su direccin Arreglos y apuntadores Un apuntador es una variable que contiene la direccin de otra variable y se representa por medio de los operadores de direccin (&) e indireccin (*)
& direccin de una variable * Permite el acceso a una variable tipo *nombre
Arreglos y apuntadores Operaciones con apuntadores Suma y resta con enteros Produce una nueva localidad de memoria Comparacin Normalmente se usa para saber si dos apuntadores apuntan a una misma localidad de memoria o no La resta de dos apuntadores Da como resultado el nmero de variables entre las dos direcciones
Llamada a funcin por referencia Cuando llamamos a una funcin con argumentos que deben modificarse, se pasan las direcciones de dichos argumentos, esto se lleva a cabo mediante la aplicacin del operador direccin (&) a la variable que se modifica. Cuando la direccin de una variable se pasa a una funcin debemos utilizar el operador indireccin, para modificar el valor de dicha ubicacin en la memoria. Ejemplo apuntadores #include <stdio.h> #include <stdlib.h>
int f(int *x); int f1(int x);
main(){
int a=3;
f1(a); printf("\nEl valor de a despues de la funcin por valor es %d", a);
f(&a); printf("\nEl valor de a despues de la funcin por referencia es %d\n", a);
system("PAUSE");
}
int f(int *x){
return *x=*x**x**x; }
int f1(int x){
return x=x*x*x; }
Memoria dinmica Las variables y los arreglos en C ocupan un espacio en memoria, con un tamao predefinido, este no se puede variar durante la ejecucin del programa.
Por medio de apuntadores se puede reservar o liberar memoria dinmicamente, para ello se utiliza la funcin malloc Memoria dinmica La funcin malloc solicita una seccin de memoria del tamao especificado como argumento. Devuelve un apuntador a la zona de memoria concedida.
void* malloc (unsigned numero_de_bytes);
El tamao es un nmero entero y significaran el numero de bytes reservados. Memoria dinmica Si malloc es incapaz de conceder el espacio en memoria devuelve un apuntador nulo
Char* ap=(char*) malloc (1000);
Operador sizeof(tipo) Obtiene el tamao de los tipos de variables Memoria dinmica Funcin free
Cuando una zona de memoria reservado con mallo ya no es se necesita, puede ser liberada mediante la funcin free