Sie sind auf Seite 1von 30

Arreglos

Ing. Manuel Castaeda


Arreglos
Coleccin de datos o
variables del mismo tipo,
referenciados bajo un
mismo nombre y
almacenados en
localidades consecutivas
de memoria.

tipo nombre[tam];
Arreglo unidimensional
Arreglo unidimensional
Permite almacenar N elementos de un
mismo tipo y acceder a ellos mediante
un ndice. El primer elemento del arreglo
es el elemento cero.

Sintaxis para declararlo:

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 Cadena de caracteres

La cadena hola se almacena en memoria

y su longitud es de 4 no se incluye al carcter


nulo
Arreglo Cadena de caracteres
En este ejemplo se declara una cadena de caracteres denominada cadena y reserva espacio para
almacenar los siguientes caracteres:

'H' o' 'l a' '\0

#include<stdio.h>
#include<stdlib.h>

main()
{
char cadena[]="hola";
printf("La cadena es %s \n", cadena);
printf("Los caracteres son:\n");
printf("%c\n", cadena[0]);
printf("%c\n", cadena[1]);
printf("%c\n", cadena[2]);
printf("%c\n", cadena[3]);
printf("%c\n", cadena[4]);
system("pause");
}
cadena[i], representar el i-esimo carcter de la cadena
Arreglo Cadena de caracteres

Tambin se pueden declarar cadenas sin


inicializarlas, pero en estos casos es
indispensable indicar el tamao que tendrn:

char cadena[10];
Arreglo Cadena de caracteres
Biblioteca string.h, descripcin de algunas
funciones
Nombres Descripcin

memcpy copia n bytes entre dos reas de memoria que no deben solaparse

copia n bytes entre dos reas de memoria; al contrario que memcpy las reas
memmove
pueden solaparse

busca un valor a partir de una direccin de memoria dada y devuelve un puntero a


memchr
la primera ocurrencia del valor buscado o NULL si no se encuentra

memcmp compara los n primeros caracteres de dos reas de memoria

memset sobre escribe un rea de memoria con un patrn de bytes dado

strcat aade una cadena al final de otra

strncat aade los n primeros caracteres de una cadena al final de otra

strchr localiza un carcter en una cadena, buscando desde el principio


Arreglo Cadena de caracteres
Biblioteca string.h, descripcin de algunas
funciones
strrchr localiza un carcter en una cadena, buscando desde el final
strcmp compara dos cadenas alfabticamente ('a'!='A')
strncmp compara los n primeros caracteres de dos cadenas numricamente ('a'!='A')
strcoll compara dos cadenas segn la colacin actual ('a'=='A')
strcpy copia una cadena en otra
strncpy copia los n primeros caracteres de una cadena en otra

strerror devuelve la cadena con el mensaje de error correspondiente al nmero de error dado
strlen devuelve la longitud de una cadena
devuelve la posicin del primer carcter de una cadena que no coincide con ninguno de
strspn
los caracteres de otra cadena dada
devuelve la posicin del primer carcter que coincide con alguno de los caracteres de otra
strcspn
cadena dada

strpbrk encuentra la primera ocurrencia de alguno de los caracteres de una cadena dada en otra
strstr busca una cadena dentro de otra
strtok parte una cadena en una secuencia de tokens
strxfrm transforma una cadena en su forma de colacin (??)
strrev invierte una cadena
Arreglo Cadena de caracteres
Ejemplo:

main()
{
char cadena[20];
printf("Introduzca una cadena:");
scanf("%s",cadena);
printf("La cadena es %s\n",cadena);
system("pause");
}

En este ejemplo scanf solamente leer caracteres hasta


encontrar un espacio
Arreglo Cadena de caracteres
Ejemplo:

main()
{
char linea[50];
printf("Introduzca una linea:\n");
gets(linea);
printf("\nLa cadena es: %s\n",linea);
system("pause");
}

En este ejemplo gets permite leer caracteres hasta


encontrar un retorno de lnea (enter)
Arreglo Cadena de caracteres
PASAR Cadenas A FUNCIONES

Para pasar cadenas a funciones como


argumentos, se especifica el nombre del
arreglo sin corchetes

Llamada funcion(arr);

Prototipo funcion(char arr[]);


Arreglo Cadena de caracteres
//Programa que lee una cadena de caracteres mediante una funcin

#include<stdio.h>
#include<stdlib.h>
char * lee(char linea[]); //la funcin devolvera un apuntador en este caso el nombre de la cadena

main()
{
char linea[50];
printf("Introduzca una linea:\n");
lee(linea);
printf("\nLa cadena es: %s\n",linea);
system("pause");
}

char * lee(char s[]){


gets(s);
return s;
}
Arreglo unidimensional

Para recorrer un arreglo ya sea para llenarlo o


para leerlo podemos auxiliarnos de las
sentencias for y while, es ms comn utilizar la
sentencia for
Arreglo unidimensional
Recorrer un arreglo con for

main()
{
int A[10],i; //Es importante definir el tamao del arreglo pues es necesario
//para reservar espacio en memoria

for(i=0;i<10;i++){ //recorrera los elementos del arreglo desde el elemento 0


printf("Dame el elemento %d: ",i);
scanf("%d",&A[i]); //en cada iteracin se leer desde el teclado un valor
}

for(i=0;i<10;i++) //Es necesario volver a recorrer el arreglo para leerlo


printf("A[%d]= %d: \n",i,A[i]);
system("pause"); //como solo se afecta a una lnea podemos prescindir de {}
}
Arreglo unidimensional
Recorrer un arreglo con while

main()
{
int A[10],i=0; //Es importante definir el tamao del arreglo pues es necesario
//para reservar espacio en memoria

while(i<10){/ /recorrera los elementos del arreglo desde el elemento 0


printf("Dame el elemento %d: ",i);
scanf("%d",&A[i]); //en cada iteracin se leer desde el teclado un valor
i++;
}

i=0; //Se debe inicializar el indice de nuevo a 0

while(i<10){ //Es necesario volver a recorrer el arreglo para leerlo


printf("A[%d]= %d: \n",i,A[i]);
i++;
}
system("pause");
}
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);


Arreglo unidimensional
//programa que suma los elementos de un arreglo

#include<stdio.h>
#include<stdlib.h>

int sumar(int X[],int n);

main(){
int A[4]={1,2,3,4}; //Se inicializa el arreglo al momento de declararlo

printf("La suma de los elementos del arreglo es %d \n", sumar(A,4));


system("pause");
}

int sumar(int X[],int n){


int i,suma=0;

for(i=0;i<n;i++)
suma+=X[i];

return suma;
}
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]


Arreglo multidimensional
Para recorrer un arreglo multidimensional podremos utilizar una sentencias
for anidadas una para cada dimensin
for(i=0;i<3;i++)
for(j=0;j<3;j++)

Se ejecutara mas o menos as

i=0,j=0
i=0,j=1
i=0,j=2

i=1,j=0
i=1,j=1
i=1,j=2

i=2,j=0
i=2,j=1
i=2,j=2
Arreglo multidimensional
Entonces se llenarn primero todas las
columnas de la primera fila luego todas las
columnas de la segunda fila y as hasta
terminar con el llenado del arreglo

Sintaxis para declararlo

tipo nombre[tam1][tam2][tam3][tamn];
Arreglo multidimensional
Programa que llena e imprime un arreglo bidimensional

#include<stdio.h>
#include<stdlib.h>

main()
{
int A[3][3],i,j; //Es importante definir el tamao del arreglo pues es necesario
//para reservar espacio en memoria

for(i=0;i<3;i++) //recorrer los elementos del arreglo desde el elemento 0


for(j=0;j<3;j++){
printf("Dame el elemento %d,%d: ",i,j);
scanf("%d",&A[i][j]); //en cada iteracin se leer desde el teclado un valor
}

for(i=0;i<3;i++){ //Es necesario volver a recorrer el arreglo para leerlo


printf("\n");
for(j=0;j<3;j++)
printf("\tA[%d][%d]= %d ",i,j,A[i][j]);

}
printf("\n");
system("pause"); //como solo se afecta a una lnea podemos prescindir de {}
}
Arreglo multidimensional
Programa que suma todos los elementos de un arreglo bidimensional

#include<stdio.h>
#include<stdlib.h>

main()
{
int A[3][3],i,j; //Es importante definir el tamao del arreglo pues es necesario
//para reservar espacio en memoria
int suma=0; //se inicializa suma con 0 ya que de lo contrario tendra cualquier otro valor
for(i=0;i<3;i++) //recorrera los elementos del arreglo desde el elemento 0
for(j=0;j<3;j++){
printf("Dame el elemento %d,%d: ",i,j);
scanf("%d",&A[i][j]); //en cada iteracin se leer desde el teclado un valor
}

for(i=0;i<3;i++){ //Es necesario volver a recorrer el arreglo para leerlo


for(j=0;j<3;j++)
suma+=A[i][j];
}
printf("La suma de todos los elementos de arreglo es: %d\n",suma);

printf("\n");
system("pause"); //como solo se afecta a una lnea podemos prescindir de {}
}
Arreglo multidimensional
PASAR ARREGLOS bidimensionales A FUNCIONES

Para pasar arreglos a funciones como argumentos, se


especifica el nombre del arreglo sin corchetes y el
tamao de cada dimensin. Con la diferencia que es
necesario especificar el tamao de la segunda
dimensin.

Llamada funcion(arr, 3,3);

Prototipo funcion(int arr[][3], int tam1,tam2);


Arreglo multidimensional
#include<stdio.h>
#include<stdlib.h>

int sumar(int B[][3], int n);

main()
{
int A[3][3],i,j; //Es importante definir el tamao del arreglo pues es necesario
Programa que suma todos los
//para reservar espacio en memoria elementos de un arreglo bidimensional
for(i=0;i<3;i++)
for(j=0;j<3;j++){
//recorrera los elementos del arreglo desde el elemento 0 usando funcin
printf("Dame el elemento %d,%d: ",i,j);
scanf("%d",&A[i][j]);//en cada iteracin se leer desde el teclado un valor
}

printf("La suma de todos los elementos de arreglo es: %d\n",sumar(A,3));

printf("\n");
system("pause"); //como solo se afecta a una lnea podemos prescindir de {}
}

int sumar(int B[][3], int n){


int suma=0; //se inicializa suma con 0 ya que de lo contrario tendra cualquier otro valor
int i,j; //Se necesitan declarar nuevamente esatas variables pues son locales a la funcin sumar

for(i=0;i<n;i++){ //Es necesario volver a recorrer el arreglo para leerlo


for(j=0;j<3;j++)
suma+=B[i][j];
}
return suma;
}
Arreglo multidimensional
Un programa que nos resuelva problemas con arreglos
de 3 elementos o de 4 o de 5 no es muy til, ya que
necesitamos un programa distinto para cada
dimensin.

Esto es debido a que necesitamos conocer el tamao


del arreglo en el momento de declararlo, sin embargo
podemos preguntarle al usuario el tamao antes de
declarar nuestro arreglo.

Los programadores estructurados puristas diran que


esto esta prohibido, sin embargo
Arreglo multidimensional
#include<stdio.h>
#include<stdlib.h> Programa que lee e imprime un arreglo
unidimensional donde el usuario define el
main() tamao
{
int n,i;
printf("De que tamao es tu arreglo: ");
scanf("%d",&n);
int A[n]; // Ahora el tamao del arreglo (n), es una variable
//cuyo valor se conoce antes de declarar el arreglo

for(i=0;i<n;i++){ //recorrera los elementos del arreglo desde el elemento 0 y hasta n


printf("Dame el elemento %d: ",i);
scanf("%d",&A[i]);//en cada iteracin se leer desde el teclado un valor
}

for(i=0;i<n;i++) //Es necesario volver a recorrer el arreglo para leerlo


printf("A[%d]= %d \n",i,A[i]);
system("pause"); //como solo se afecta a una lnea podemos prescindir de {}
}

Das könnte Ihnen auch gefallen