lunes, 15 de noviembre de 2010

Arreglos(puntos extra)

¿Que es un arreglo?

Un arreglo es una coleccion de objetos numerados del mismo tipo, donde cada variable o celda en el arreglo tiene un indice. Todas las celdas estan numeras del 0 al N, donde N es el número de celdas que hay.

Los arreglos pueden ser de diferentes tipos:

  • arreglo unidimencional
  • arreglo bidimencionas
  • arreglo multidimencional

Arreglo Unidimencional

Un arreglo unidimensional es una colección finita, homogena y ordenadqa de datos, en el que se hace referencia a cada elemento de arreglo por medio de un indice. Este ultimo indica la casilla(Celda) en la que se encuentra el elemento.

Un arreglo unidimencional permite almacenar N elementos del mismo tipo( enteros,reales,caracteres,cadenas de caracteres etc.) y acceder a ellos por medio de un indice

Estos arreglos se distinguen por dos partes fundamentales as cuales son:
  • Componentes
  • Indice
Estos se declaran entre corchetes por ejemplo A [0] es que quieres estar en la primera celda.

Gráficamente se pueden representar como una "lista" por que en si van guardando los datos de una forma ordenada en forma de lista.



Esta es la representación gráficamente de lo que es un arreglo unidimensional lo puse para que se imaginaran haci mas facil de lo que estamos hablando, como ven los numeros 3,13,23,33,43 son numeros que estan guardados en el arreglo, el cual tiene un tipo de indice que es del 0 al 4 por que son el numero de celdas que hay en el arreglo.

Ejemplo

Bueno este es un programa que yo hice en segundo semestre, en la materia de programacion basica, lo hice con funciones para poder hacer mas ordenado y facil el programa, bueno se trata de un arreglo el cual puede contener numeros no mayor a 100, y puede navegar en el arreglo y decirte cual es el numero mayor y además de buscar el numero que desees diciéndote si esta en el arreglo y si no esta.

#include

void leer();
void mayores();
void busqueda();

int lista[100],n,i,mayor,encontrado, buscada;

main()

{

leer();
mayores();
busqueda();

}
void leer()
{
printf("De que tamaño quieres tu lista? ");
scanf("%d",&n);
for(i=0;i
{
printf("Dame la variable numero [%d] ",i);
scanf("%d",&lista[i]);
}
}

void mayores()
{
for(i=1;i
{
if(lista[i]>mayor)
{
mayor = lista[i];
}
}
printf("La variable mayor es %d",mayor);
getche();
}
void busqueda()
{
buscada=0;
printf("Cual es el numero que quieres buscar? ");
scanf("%d",&encontrado);
for(i=0;i
{
if(encontrado==lista[i])
{
encontrado=1;
}
}
if(buscada==1)
{
printf("Si se encontro");
}else{
printf("no se encontro");
}
printf("Elemento encontrado [%d]= %d", i,encontrado);


getche();
}

Arreglos Bidimencionales

Un arreglo bidimensional es una colección finita, homogénea y ordenada de datos, en la que hace referencia a cada elemento del arreglo por medio de dos índices. El primero de los índices se utiliza para indicar la fila y el segundo para indicar columnas.
Un arreglo bidimencional permite almacenar N x M elementos de un mismo tipo y acceder a cada uno de ellos. Para hacer referencia a un componente de un arreglo bidimensional debemos utilizar tanto el nombre del arreglo, como los índices del elemento.
Por ejemplo si queremos acceder a un elemento de la primera fila con la primera columna se dice A[0][0], en cambio si queremos acceder al quinto elemento de la primera fila, debemos escribir A[0][4].
En cuanto a la representación grafica a los arreglos bidimensionales se les cnoce también como matrices por que se representan de esa forma por que conforma de filas y columnas.


Como ven esta imagen representa gráficamente lo que es una arreglo bidimensional pues te da el numero de filas al igual que las columnas, y representas lo números guardados en el mismo.
Ejemplo
Bueno este ejemplo tambien lo hice yo cuando estaba en segundo semestre era un ejercicio que teníamos que hacer en la clase de programación básica, igual que el anterior , bueno este trata de un arreglo bidimensional que es la variable cal[10][10], el cual el objetivo es guardar todas las calificaciones de 10 alumnos y además de todos los tipos de exámenes.
#include

void leer();
void incisoa();
void incisob();
void incisoc();


int suma=0, n,m,j ,i,mayor=0,contar=0, suma1=0;
float prom[10], cal[10][10], promG[10],porc;
main()
{
      leer();
      incisoa();
      incisob();
      incisoc();
}

void leer()
{
     printf("Cuaantos alumnos son? ");
     scanf("%d",&n);
     printf("Cuantos examenes son? ");
     scanf("%d",&m);
     for(i=1;i<=n;i++)
     { 
                     printf("\nDame las calificaciones del alumno numero %d",i);
                     for(j=1;j<=m;j++)
                     {
                                     printf("\nDame la calificacion numero %d ",j);
                                     scanf("%f",&cal[i][j]);
                     }
     }
}

void incisoa()
{
     suma=0;
     for(i=1;i<=n;i++)
     {
                     for(j=0;j<=m;j++)
                     {
                                     suma= suma + cal[i][j];
                                    
                     }              
                     prom[i] = suma / m;
                     suma=0;
     }
     for(i=1;i<=n;i++)
     {
                           printf("\nEl promedio del alumno %d es %f ",i, prom[i]);
     }
}

void incisob()
{
     j=3;
     mayor=cal[1][j];
    
     for(i=2;i<=n;i++)
     {
                     if(cal[i][j]>mayor)
                     {
                                        mayor=cal[i][j];
                     }
     }
     printf("\n\nEl que tiene el mayor promedio en el tercer examen es %d\n",mayor);
}
    
void incisoc()
{
     for(i=1;i<=n;i++)
     {
                      suma1=suma1+prom[i];
     }
     promG[i] = suma1/n;
     porc = promG[i]*100/n;
     printf("El promedio del grupo es %f y el porcentaje del 100 es %f", promG,porc);
     getche();
}

Arreglo multidimensional

Este también es un tipo de dato estructurado, que está compuesto por n dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n índices, uno para cada dimensión.
C permite arreglos con mas de una dimension , el formato general es:
tipo nombre_arreglo [ tam1 ][ tam2 ] ... [ tamN];

Estos arreglos grafiacamente se representan de la siguiente manera:
Bueno en este grafico se muestra lo que es en realidad un arreglo multidimensional pues como ven guarda los elemento de una forma ordenada, pero en una figura en forma de cubo, pues asi tendría su forma en la vida real, no como el unidimensional que es una lista ni como el bidimensional que es una matriz.

Estando en internet me encontré una formula para determinar la dirección de memoria la cual es la siguiente:
LOC A[i1,i2,i3,...,in] = base(A) + [(i1-li1)*R3*R4*Rn + (i2-li2)*R3*R2*... (in - lin)*Rn]*w
Bueno en este tema, no sabia mucho en si, y pues como no tenia ningun ejemplo y no se hacer un arrego multidimencional , pues decidi no poner nada, pues no queria copiar uno en internet para no tener problemas.
Ojalas les haya gustado mi entrada, y pues les haya servido de algo, no se enriquesido este repaso del semestre pasado,  igual en algo les a de ayudar, bueno muchas gracias por leerlo.
Alfonso Manuel Aguilar Leyva

1 comentario:

  1. ORTOGRAFIAAAAAAAA! Pues, tres puntos extra de todos modos. Cuida más la escritura, por favor.

    ResponderEliminar