Vous êtes sur la page 1sur 17

NDICE

Fundamentos de Programacin
1 Arreglos .....2

1.1 Estructura de Datos.....2


1.2 Qu es un Arreglo?.............................2
1.3 Declaracin de Arreglos.....3
1.4 Manejo de Arreglos......3
1.5 Leer e Imprimir un Arreglo........4
1.6 Ejercicio...4
1.7 Inicializacin...6
1.8 Bsqueda en un Arreglo....6
1.9 Solucin Dato a buscar:...7
1.10 Operador sizeof7
1.11 Cmo calcular el tamao de un arreglo?.............................................................7

2 Vectores......................................... 8
3 Matrices..... 11
3.1 Las matrices son objetos..13

3.2 Inicializar matrices..13


3.3 Matrices unidimensionales......13
3.4 Matrices multidimensionales.......14
3.5 Matriz escalonada.......14

4 Bibliografa.............. 15

Fundamentos de Programacin Arreglos


1.1 Estructura de Datos
Se puede considerar un conjunto de datos,
Como una sola entidad
Como un solo tipo de dato
De esta forma, se reduce la complejidad de un problema.
Un programa est formado por:
Estructuras de control y llamadas a funciones (el algoritmo de nuestro programa).
Datos, con sus respectivos tipos, ya sean estos atmicos o complejos, juntos forman una jerarqua
(la estructura de datos del programa).
PROGRAMA = ALGORITMO + ESTRUCTURA DE DATOS
1.2 Qu es un Arreglo?
Basndonos en los tipos de datos atmicos, podemos crear otros ms complejos.
Un arreglo es una coleccin, o grupo de datos, donde:
Cada dato tiene su posicin (primero, segundo, tercero)
Y todos los datos del grupo son del mismo tipo, es decir, o todos son enteros, o todos son reales,
etc.
La mejor forma de visualizar un arreglo es:
Como un grupo de cajas, una detrs de otra
Donde cada caja representa un dato del arreglo o un elemento.
Podemos concluir que un arreglo tiene:
Tamao: cuantas cajas va a tener, el nmero de datos.
Tipo: cul es el tipo de todos los datos del arreglo.
Nombre: el nico nombre bajo el cual vamos a dirigirnos al mismo.
Jams olvidar que un arreglo tiene un tipo
NO EXISTEN ARREGLOS MEZCLADOS

1.3 Declaracin de Arreglos


Al declarar una variable cualquiera siempre indicamos: tipo y nombre. Por ejemplo: int a;
Para declarar un arreglo, se debe indicar
Tipo
Nombre y
Tamao
Un arreglo de 10 elementos enteros, se declara:
int ArregloEnteros[10];
Y lo podemos visualizar:
Cada elemento del grupo va a estar identificado por un valor numrico, llamado ndice .
En C el primer elemento de un arreglo tiene el ndice 0.
Siempre, para indicar el tamao de un arreglo, se utilizara una constante , jams una variable.
Jams olvidar, el tamao de un arreglo es una constante 0 1 2 3 4 5 6 7 8 9 ArregloEnteros
1.4 Manejo de Arreglos
Tenemos ahora 10 enteros bajo un mismo nombre
Cmo accedemos a uno de esos datos?
Usamos el nombre del arreglo y el ndice que identifica al elemento: nombre_arreglo[indice]
Si se desea asignar el valor de 2 al primer elemento del arreglo:
arregloEntero[0] = 2;
arregloEntero[1] = 9;
arregloEntero[4] = 1:
Cada elemento es en efecto una variable del tipo declarado para el arreglo
Es muy importante recordar que:
El ndice de un elemento, no es el valor (contenido) de dicho elemento.
El ndice puede ser cualquier expresin que retorne un valor entero.

Para asignar a todos los elementos del arreglo, un mismo valor, lo mas prctico es usar un lazo for:
for(i = 0; i < 10; i++)
{
arregloEntero[ i ] = 0;
}
0 1 2 3 4 5 6 7 8 9 ArregloEnteros 2 9 1
1.5 Leer e Imprimir un Arreglo
Acabamos de ver un ejemplo para acceder a todos los elementos de una arreglo de una forma
prctica.
Si tenemos 10 elementos en un arreglo, y queremos pedir que los ingresen por teclado, debemos
repetir el ingreso 10 veces:
for(i = 0; i < 10; i++)
{
scanf(%d,&a);
arregloEnteros[i] = a;
}
As mismo, para imprimir todos los elementos de un arreglo, deberamos repetir el proceso de
imprimir, pero diez veces:
for(i = 0; i < 10; i++)
{
printf(Elemento %d:%d , i, ArregloEnteros[i]);
}

1.6 Ejercicio
Programa que permite el ingreso de las notas de un curso de 20 alumnos. Una vez ingresados, debe
mostrarse el promedio de las mismas.
#include <stdio.h>

#define MAX 20
void main(){
double notas[MAX]; double total, promedio;
int i,a; total = 0; for(i = 0; i < MAX; i++)
{ printf(&quot;Ingrese Alumno %d:&quot;,i+1);
scanf(%d,&a); notas[i]=a;
}
for(i = 0; i < MAX; i++)
{
total = total + notas[i];
}
promedio = (double)total / (double)MAX; printf(&quot;Promedio: %.2f&quot;,promedio);
getch();
}
El usuario del programa no tiene por qu saber que los ndices van desde 0, se le pueden mostrar
desde 1
En lugar de almacenar valores en los elementos de un arreglo, algunas aplicaciones usan los
arreglos para almacenar ndices, que permiten llevar estadsticas, de un dato en particular.
Por ejemplo:
Se pidi a 40 estudiantes que calificaran la calidad de la comida de la cafetera en una escala del 1
al 10 (1 es terrible y 10 excelente).
Escriba un programa en C que pida las 40 respuestas y luego muestre un resumen del resultado.
Arreglos Para Tabular
Un arreglo en C tambin se puede inicializar de las siguientes formas:
Crear un arreglo de 3 elementos
Inicializando cada elemento:

int A[]={11,2,8};
int A[3]={11,2,8};
Inicializando todos los elementos con el mismo valor:
int A[3]={0};
Inicializacin de un Arreglo
En C, los elementos de un arreglo pueden ser de cualquier tipo
Esto quiere decir que los elementos de un arreglo pueden ser a su vez, arreglos.
Arreglos de arreglos, se conocen como arreglos multidimensionales.
El mas comn de estos, es el de dos dimensiones, conocido tambin como Matriz o Tabla .
Un ejemplo de una matriz, es un tablero de tres en raya.
Este es un arreglo de 3 elementos, donde cada elemento es un arreglo, de tres elementos tambin.
Arreglos Multidimensionales int A[3][3]; A[0] A[1] A[2] A[0][0] A[1][0] A[2][0] A[0]1] A[1][1] A[2][1] A[0][2]
A[1][2] A[2][2]
1.7 Inicializacin
Un arreglo multidimensional tambin se puede inicializar
static double MatrizIdentidad[3][3] =
{
{1,0,0},
{0,1,0}
{0,0,1}
};
As podemos inicializar todos los elementos de una matriz desde el inicio, sin necesidad de usar
lazos anidados.
1.8 Bsqueda en un Arreglo
Se refiere al proceso para encontrar un elemento particular en un arreglo.
Una de las estrategias ms comunes y simples para buscar un dato en un arreglo es:

Revisar uno por uno los elementos del mismo, este mtodo se conoce como bsqueda lineal .
Escribir una funcin que determine si un valor dado se encuentra en un arreglo de elementos
enteros, y si es as, indique su posicin1.9 Solucin Dato a buscar:
58 int EncontrarElemento(int valor, int arreglo[ ] ,int n) { for(i=0; i <10; i++) { if (valor = = arreglo [ i ] )
return(i); } return(-1); } 19 12 1 2 58 100 3 4 45 25 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]
1.10 Operador sizeof
Un char ocupa un byte.
Cuantos bytes ocupa un entero? un real?
una cadena?
Depende de cada mquina
Podemos averiguarlo usando el operador sizeof.
sizeof(int) devuelve el nmero de bytes que necesita un dato de tipo int.
CUIDADO : sizeof es un operador, no una funcin.
1.11 Cmo calcular el tamao de un arreglo?
Si inicializamos una arreglo sin indicar su ancho
Cmo podemos saber el ancho, para futuros usos en el programa?
sizeof(Arreglo) devuelve 32 sizeof(Arreglo[0]) devuelve el desfase:
sizeof(Arreglo)/sizeof(Arreglo[0]) devuelve 4, justo el nmero de elementos del arreglo. 1000 1008
1016 1024 1032 Arreglo[0] Arreglo[1] Arreglo[2] Arreglo[3] Arreglo[4]

2 Vectores

Los vectores son una forma de almacenar datos que permiten contener una serie de valores del
mismo tipo, cada uno de los valores contenidos tiene una posicin asociada que se usar para
accederlos. Est posicin o ndice ser siempre un nmero entero positivo.
En C la cantidad de elementos que podr contener un vector es fijo, y en principio se define cuando
se declara el vector. Los vectores se pueden declarar de la siguiente forma:
tipo_elemento nombre[largo];
Esto declara la variable nombre como un vector de tipo_elementos que podr
contener largo cantidad de elementos, y cada uno de estos elemento podr contener un valor de
tipotipo_elemento.
Por ejemplo:
double valores[128];
En este ejemplo declaramos un vector de 128 elementos del tipo double, los ndices de los
elementos iran entre 0 (para el primer elemento y 127 para el ltimo).
De la misma forma que con las otras declaraciones de variables que hemos visto se le puede
asignar un valor iniciar a los elementos.
O tambin se pueden declarar:
tipo_elemento nombre[largo]={valor_0, valor_1, valor_2};
En caso estamos asignadole valores a los primeros 3 elementos del vector nombre. Notar
que largo debe ser mayor o igual a la cantidad de valores que le estamos asignando al vector, en el
caso de ser la misma cantidad no aporta informacin, por lo que el lenguaje nos permite escribir:
tipo_elemento nombre[]={valor_0, valor_1, valor_2};
Que declarar nombre como el vector de largo 3.
Para acceder a un elemento accederemos a travs de su posicin. Es decir:
tipo_elemento elemento;
...

elemento = nombre[2];
Asumiendo que tenemos el vector anterior definido estaramos guardando valor_2 en elemento.
Veamos algunos ejemplos:
/*
* Ejemplo : El producto escalar de dos vectores
*/
#include <stdio.h>
double producto_escalar(double v1[], double v2[], int d);
int main()
{
const int largo = 3;
double vector_1[] = {5,1,0};
double vector_2[] = {-1,5,3};
double resultado = producto_escalar(vector_1, vector_2, largo);
// imprime el resultado
printf("(%f, %f, %f) . (%f, %f, %f) = %f\n",
vector_1[0], vector_1[1], vector_1[2],
vector_2[0], vector_2[1], vector_2[2],
resultado);
return 0;
}
/* producto escalar entre dos vectores */
double producto_escalar(double v1[], double v2[], int d)
{
double resultado = 0;
int i;
for (i=0; i < d; i++) {
resultado += v1[i] * v2[i];
}
return resultado;
}
En el ejemplo anterior usamos los vectores de C para representar vectores matemticos y calcular el
producto escalar entre ellos. Una peculiaridad que se puede notar es que al recibir un arreglo en una
funcin no se especifica el largo, volveremos a esto en un captulo posterior.

Otra funcin clsica es la bsqueda de un mximo o mnimo, que podemos escribirla de la siguiente
manera:
int buscar_maximo(double valores[], int num_valores)
{
int maximo_pos = 0;
for (int i = 1; i < num_valores; i++) {
if (valores[i] > valores[maximo_pos]) {
maximo_pos = i;
}
}
return maximo_pos;
}
Otro ejemplo sencillo, calcular el promedio de los valores.
double promedio(double valores[], int largo)
{
double suma=0;
for (int i=0;i<largo;i++) {
suma+=valores[i];
}
return suma/largo;
}
Cuando una funcin recibe un vector por parmetro y cambia su contenido y el cambio es
permanente (se ve an fuera de la funcin). Esto puede parecer extrao despus del nfasis que
pusimos en resaltar que todos los parmetros de una funcin se reciben por valor, pero se aclarar
en el siguiente captulo.
Mientras tanto usemos esto para definir una funcin que le aplique otra funcin que recibe por
parmetro a cada elemento del vector, guardando el resultado en el mismo vector y una llamada de
ejemplo a esta.
void cuadrados(double vector[], int largo)
{
for (int i=0;i<largo;i++) {
vector[i]=cuadrado(vector[i]);
}
}
...
double cuadrado(double valor) {
return valor*valor;
}

...
cuadrados(elementos,num_elem);
...
De la misma forma que venimos usando vectores de tipos bsicos, podemos tener vectores de
vectores, estos se declaran de la siguiente forma:
int matriz[3][7];
int tabla[3][4]={ { 1, 2, 3, 4},
{ 5, 6, 7, 8}, /* los espacios y saltos de lneas no son tomados en cuenta */
{ 9,10,11,12} };
double v[2][2][2];
...
printf("tabla[0][1]: %i\n", tabla[0][3]); // Imprime 4
printf("tabla[2][0]: %i\n", tabla[2][0]); // Imprime 9
...
En este ejemplo tabla es un vector de longitud 3, cuyos elementos son vectores de longitud 4 de
elementos de tipo int.
En resumen, suponiendo que v[n] es un vector de cualquier tipo de dato con n cantidad de
posiciones, al vector v se le aplican las siguientes reglas:
1. La primera posicin siempre ser v[0]
2. La ltima posicin es v[n-1]
3. En versiones previas a C99 n es una constante definida antes de la declaracin de v[n]

3 Matrices
En las matrices de C#, los ndices empiezan en cero. Las matrices de C# funcionan de forma similar
a como lo hacen en la mayora de los lenguajes populares; existen, sin embargo, algunas diferencias
que se deben conocer.
Cuando se declara una matriz, los corchetes ([]) deben ir despus del tipo, no despus del
identificador. Colocar los corchetes despus del identificador no es sintcticamente vlido en C#.
int[] table; // not int table[];
Otro detalle es que el tamao de la matriz no forma parte de su tipo, como ocurre en el lenguaje C.
Esto permite declarar una matriz y asignarle cualquier matriz de objetos int, independientemente de
la longitud de la matriz.

int[] numbers; // declare numbers as an int array of any size


numbers = new int[10]; // numbers is a 10-element array
numbers = new int[20]; // now it's a 20-element array
Declarar matrices
C# admite matrices de una dimensin, matrices multidimensionales (matrices rectangulares) y
matrices de matrices (matrices escalonadas). El siguiente ejemplo muestra cmo declarar diferentes
tipos de matrices:
Matrices unidimensionales:
int[] numbers;
Matrices multidimensionales:
string[,] names;
Matrices de matrices (escalonadas):
byte[][] scores;
La declaracin de matrices (como se muestra arriba) no crea realmente las matrices. En C#, las
matrices son objetos (se explica ms adelante en este tutorial) cuyas instancias deben crearse. Los
siguientes ejemplos muestran cmo crear matrices:
Matrices unidimensionales:
int[] numbers = new int[5];
Matrices multidimensionales:
string[,] names = new string[5,4];
Matrices de matrices (escalonadas):
byte[][] scores = new byte[5][];
for (int x = 0; x < scores.Length; x++)
{
scores[x] = new byte[4];
}
Tambin se pueden utilizar matrices ms grandes. Por ejemplo, se puede utilizar una matriz
rectangular de tres dimensiones:
int[,,] buttons = new int[4,5,3];

Incluso, se pueden combinar matrices rectangulares y escalonadas. Por ejemplo, el siguiente cdigo
declara una matriz unidimensional que contiene matrices tridimensionales de matrices
bidimensionales de tipo int:
int[][,,][,] numbers;
Ejemplo
El siguiente es un programa completo en C# que declara y crea instancias de las matrices
comentadas anteriormente.
// arrays.cs
using System;
class DeclareArraysSample
{
public static void Main()
{
// Single-dimensional array
int[] numbers = new int[5];
// Multidimensional array
string[,] names = new string[5,4];
// Array-of-arrays (jagged array)
byte[][] scores = new byte[5][];
// Create the jagged array
for (int i = 0; i < scores.Length; i++)
{
scores[i] = new byte[i+3];
}
// Print length of each row
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine("Length of row {0} is {1}", i, scores[i].Length);
}
}
}
Resultado
Length of row 0 is 3
Length of row 1 is 4
Length of row 2 is 5
Length of row 3 is 6
Length of row 4 is 7

3.1 Las matrices son objetos


En C#, las matrices son realmente objetos. System.Array es el tipo base abstracto de todos los
tipos de matrices. Las propiedades y otros miembros de la clase System.Array se pueden utilizar
cuando sea necesario. Un ejemplo de esto sera utilizar la propiedad Length para obtener la longitud
de una matriz. El siguiente cdigo asigna la longitud de la matriz numbers, que es 5, a una variable
denominada LengthOfNumbers:
int[] numbers = {1, 2, 3, 4, 5};
int LengthOfNumbers = numbers.Length;
La clase System.Array proporciona muchos otros mtodos y propiedades tiles, como mtodos
para ordenar, buscar y copiar matrices.
Usar foreach con matrices
C# dispone de la instruccin foreach. Esta instruccin proporciona un modo simple y limpio de iterar
en los elementos de una matriz. Por ejemplo, el siguiente cdigo crea una matriz
denominada numbers y la recorre mediante la instruccin foreach:
int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};
foreach (int i in numbers)
{
System.Console.WriteLine(i);
}
Con matrices multidimensionales, se puede utilizar el mismo mtodo para recorrer los elementos,
por ejemplo:
int[,] numbers = new int[3, 2] {{9, 99}, {3, 33}, {5, 55}};
foreach(int i in numbers)
{
Console.Write("{0} ", i);
}
El resultado de este ejemplo es:
9 99 3 33 5 55
Sin embargo, con matrices multidimensionales, utilizar un bucle for anidado proporciona ms control
sobre los elementos de la matriz.

3.2 Inicializar matrices


C# proporciona mtodos simples y sencillos para inicializar matrices en el momento de la
declaracin encerrando los valores iniciales entre llaves ({}). Los siguientes ejemplos muestran
diferentes modos de inicializar diferentes tipos de matrices.
Nota Si no inicializa una matriz en el momento de la declaracin, sus miembros se inicializan
automticamente con el valor inicial predeterminado para el tipo de matriz. Adems, si declara la
matriz como campo de un tipo, se establecer con el valor predeterminado null cuando cree la
instancia del tipo.

3.3 Matrices unidimensionales


int[] numbers = new int[5] {1, 2, 3, 4, 5};
string[] names = new string[3] {"Matt", "Joanne", "Robert"};
El tamao de la matriz se puede omitir, como se indica a continuacin:
int[] numbers = new int[] {1, 2, 3, 4, 5};
string[] names = new string[] {"Matt", "Joanne", "Robert"};
Tambin se puede omitir el operador new si se utiliza un inicializador como el siguiente:
int[] numbers = {1, 2, 3, 4, 5};
string[] names = {"Matt", "Joanne", "Robert"};

3.4 Matrices multidimensionales


int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"} };
El tamao de la matriz se puede omitir, como se indica a continuacin:
int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[,] { {"Mike","Amy"}, {"Mary","Albert"} };
Tambin se puede omitir el operador new si se utiliza un inicializador como el siguiente:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = { {"Mike", "Amy"}, {"Mary", "Albert"} };

3.5 Matriz escalonada (matriz de matrices)


Las matrices escalonadas se pueden inicializar como en el siguiente ejemplo:
int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
El tamao de la primera matriz se puede omitir, como se indica a continuacin:

int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
O bien
int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
Observe que no existe sintaxis de inicializacin para los elementos de una matriz escalonada.
Acceso a miembros de matrices
El acceso a los miembros de una matriz es sencillo y similar al de los miembros de una matriz de C o
C++. Por ejemplo, el siguiente cdigo crea una matriz denominada numbers y, a continuacin,
asigna un 5 al quinto elemento de la matriz:
int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
numbers[4] = 5;
El siguiente cdigo declara una matriz multidimensional y asigna el valor 5 al miembro ubicado en [1,
1]:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
numbers[1, 1] = 5;
La siguiente es una declaracin de una matriz escalonada de una sola dimensin que contiene dos
elementos. El primer elemento es una matriz de dos enteros, mientras que el segundo es una matriz
de tres enteros:
int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5}
};
La siguiente instruccin asigna 58 al primer elemento de la primera matriz y 667 al segundo
elemento de la segunda matriz:
numbers[0][0] = 58;
numbers[1][1] = 667;

4 Bibliografa
Arreglos
http://es.slideshare.net/javi2401/arreglos-en-c-presentation
Vectores
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Vectores
Matrices
https://msdn.microsoft.com/es-ec/library/aa288453(v=vs.71).aspx

Vous aimerez peut-être aussi