You are on page 1of 25

Arreglos

Ing. Manuel Castaeda


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

Llamada funcion(arr, 5);
Prototipo funcion(int arr[], int tamao);
Solucin
#include <stdio.h>
#include <stdlib.h>

int F(int B[], int tam, int numero);

main(){

int A[100],num,i,n;

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]);
}

for(i=0;i<n;i++){
printf("\n");
for(j=0;j<m;j++){
printf("\t%d",A[i][j]);
}}



printf("\nDame el numero a buscar: ");
scanf("%d",&num);

for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(num==A[i][j])
cuenta++;

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

void free(void *ap);
free(ap);
Ejemplo Malloc
#include <stdio.h>
#include <stdlib.h>

main(){


float *ap;
int n=3,i;

ap =(float *)malloc(n*sizeof(float));

for(i=0;i<n;i++)
{
printf("\nCual es peso de tu amigo %d: ",i);
scanf("%f", &ap[i]);
}

for(i=0;i<n;i++)
printf("\nLas edades son\n %f",ap[i]);

system("PAUSE");
}

You might also like