Sei sulla pagina 1di 16

El AB del C - Alvarez/Ceballos/Alvarez 72

ARREGLOS
UNIDIMENSIONALES Y
BIDIMENSIONALES
I Qu son arreglos unidimensionales?
Un arreglo de una dimensin (unidimensional) (vector o array) es un tipo de datos
estructurado compuesto de un nmero de elementos finitos y elementos del mismo tipo.
I Cmo se declara un arreglo unidimensional?
F Para declarar un arreglo se debe tener en cuenta:
tipo nombre[tamao];

Tipo
: Algn tipo de datos (int.float,char,....)
Nombre : Nombre que damos al arreglo
Tamao : Nmero de elementos del arreglo

I Qu pasa cuando se declara un arreglo unidimensional?


F Cuando se declara un arreglo, el compilador reserva un bloque de memoria lo
suficientemente grande como para guardar el arreglo completo. Los elementos
individuales del arreglo son guardados en posiciones consecutivas de memoria.
F Ejemplo 1: declarar un vector A de tipo entero de 10 elementos
int a[10];
I Cmo accesar el contenido de un arreglo unidimensional?
F Los elementos individuales de los arreglos son accesados usando el nombre del arreglo,
seguido del subndice del elemento encerrado entre corchetes.
nombre_arreglo[posicin];
I Cul es el esquema de numeracin de los elementos del arreglo?
F Cuando use arreglos no olvide el esquema de numeracin de los elementos: en un
arreglo de n elementos los subndices permitidos van de 0 a n-1. Si se usa un valor de

El AB del C - Alvarez/Ceballos/Alvarez 73

subndice n se pueden tener errores de programa. El compilador de C no se da cuenta si el


programa usa un subndice de arreglo que est fuera de los lmites. El programa compila y
enlaza, pero, por lo general, los subndices fuera de rango producen resultados errneos.
I Cmo inicializar un arreglo unidimensional?
F Se puede inicializar a todo o parte del arreglo cuando se declara. Escriba a continuacin
de la declaracin del arreglo un signo igual y una lista de valores, encerrados entre llaves y
separados por comas. Los valores listados son asignados en orden a los elementos del
arreglo, comenzando con el nmero 0.
int arreglo[5] = {1, 2, 3, 4, 5};
int arreglo[ ] = {1, 2, 3, 4, 5, 6};
Tambin se pueden incluir menos valores de inicializacin.
int arreglo[5] = {1, 2, 3};
Si se incluyen demasiados valores inicializados (ms inicializadores que elementos
del arreglo), el compilador detecta un error.

I Cmo inicializar un arreglo unidimensional de caracteres?


F De manera similar a otros tipos de datos del C, los arreglos de caracteres pueden ser
inicializados cuando son declarados.

Se puede asignar valor, elemento por elemento, a los arreglos de caracteres.


char cadena[10] = {'L', 'e', 'n', 'g', 'u', 'a', 'j', 'e' '\0' };

Sin embargo, es ms conveniente usar una cadena literal, que es una secuencia de
caracteres encerrada entre comillas dobles.
char cadena[10] = "Lenguaje";

Cuando se usa una cadena literal en el programa, el compilador aade automticamente el


carcter nulo de terminacin al final de la cadena.
Nota 1: Si no se especifica el nmero del subndice cuando se declara al arreglo, el
compilador calcula el tamao del arreglo.

El AB del C - Alvarez/Ceballos/Alvarez 74

char cadena[ ] = "Lenguaje"


: TALLER 1
1. Leer e imprimir un vector de nmeros enteros.
#include <stdio.h>
#include <conio.h>
#define DIM 3
/* DEFINICION DE FUNCIONES */
void leer_vector(int vec[ ])
{
for(int i=0;i<DIM;i++)
{
printf("Vector[%d] = ",i+1);
scanf("%d",&vec[i]);
}
}
void imprimir_vector(int vec[ ])
{
for(int i=0;i<DIM;i++)
{
printf("\nVector[%d] = %d",i+1,vec[i]);
}
}
void main(void)
{
int vector[DIM];
clrscr();
leer_vector(vector);
clrscr();
imprimir_vector(vector);
getch();
}

El AB del C - Alvarez/Ceballos/Alvarez 75

2. /* Lee un vector de enteros e imprimir la suma de sus elementos de un vector de nmeros


enteros.*/
#include <stdio.h>
#include <conio.h>
#define DIM 3
/* DEFINICION DE FUNCIONES */
void leer_vector(int vec[ ])
{
for(int i=0;i<DIM;i++)
{
printf("Vector[%d] = ",i+1);
scanf("%d",&vec[i]);
}
}
int suma_elementos(int vec[ ])
{
int sum=0;
for(int i=0;i<DIM;i++)
sum = sum + vec[i];
return sum;
}
void main(void)
{
int suma, vector[DIM];
clrscr();
leer_vector(vector);
suma = suma_elementos(vector);
printf("La suma es = %d",suma);
getch();
}
3. /* Encontrar el elemento mximo en un vector de nmeros enteros.*/
#include <stdio.h>
#include <conio.h>

El AB del C - Alvarez/Ceballos/Alvarez 76

#define DIM 3
/* DEFINICION DE FUNCIONES */
void leer_vector(int vec[ ])
{
for(int i=0;i<DIM;i++)
{
printf("Vector[%d] = ",i+1);
scanf("%d",&vec[i]);
}
}
int elemento_max(int vec[ ])
{
int mayor,i;
mayor = vec[0];
i=1;
while(i<DIM)
{
if(vec[i] > mayor)
mayor = vec[i];
i++;
}
return mayor;
}
void main(void)
{
int mayor, vector[DIM];
clrscr();
leer_vector(vector);
mayor = elemento_max(vector);
printf("Elemento maximo contenido en el array = %d",mayor);
getch();
}
4. /* Encontrar la media aritmtica de un vector de nmeros reales.*/
#include <stdio.h>
#include <conio.h>

El AB del C - Alvarez/Ceballos/Alvarez 77

#define DIM 3
/* DEFINICION DE FUNCIONES */
void leer_vector(float vec[ ])
{
for(int i=0;i<DIM;i++)
{
printf("Vector[%d] = ",i+1);
scanf("%f",&vec[i]);
}
}
float suma_elementos(float vec[ ])
{
float sum=0;
for(int i=0;i<DIM;i++)
sum = sum + vec[i];
return sum;
}
void main(void)
{
float suma, vector[DIM];
clrscr();
leer_vector(vector);
suma = suma_elementos(vector);
printf("La media es = %.2f",suma/DIM);
getch();
}
5. /* Leer una lnea de texto en minscula y escribirla en mayscula*/
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#define TAMANO 8
void main()
{
clrscr();

El AB del C - Alvarez/Ceballos/Alvarez 78

char letra[TAMANO];
int cont;
for(cont=0; cont<TAMANO; cont++)
letra[cont] = getchar();
for(cont=0; cont<TAMANO;cont++)
printf("%c",toupper(letra[cont]));
getch();
}
6. /* Calcular la varianza de los valores de un arreglo de nmeros enteros.*/
#include <stdio.h>
#include <conio.h>
#define DIM 3
/* DEFINICION DE FUNCIONES */
void leer_vector(int vec[ ])
{
for(int i=0;i<DIM;i++)
{
printf("Vector[%d] = ",i+1);
scanf("%d",&vec[i]);
}
}
int suma_elementos(int vec[ ])
{
int sum=0;
for(int i=0;i<DIM;i++)
sum = sum + vec[i];
return sum;
}
void main(void)
{
int suma, vector[DIM];
float med, sum=0;
clrscr();
leer_vector(vector);
suma = suma_elementos(vector);
med = (float) suma/DIM; /* valor medio en el array */

El AB del C - Alvarez/Ceballos/Alvarez 79

for(int i=0;i<DIM;i++)
sum = sum + ((vector[i]-med)*(vector[i]-med));
/* calcula la suma de cada elemento del array - el valor medio */
printf("La varianza es = %f ",sum/DIM);
getch();
}
: TALLER 2
1. /* Leer dos vectores de nmeros enteros e imprimir su producto escalar*/
#include <stdio.h>
#include <conio.h>
#define TAM 50
/* DEFINICION DE FUNCIONES */
void leer_vector(float vec[ ],int dimension)
{
for(int i=0;i<dimension;i++)
{
printf("Vector[%d] = ",i+1);
scanf("%f",&vec[i]);
}
}
void producto_punto(float vec1[ ], float vec2[ ], int dimension)
{
float suma=0;
/* multiplica componente a componente y lo suma en el acumulador */
for(int i=0;i<dimension;i++)
suma = suma + vec1[i]*vec2[i];
printf("Producto Punto = %.2f ",suma);
}
void main(void)
{
float vector1[TAM];
float vector2[TAM];
int dim;
clrscr();
printf("Producto Punto\n");
printf("Entre dimensin de los vectores: ");

El AB del C - Alvarez/Ceballos/Alvarez 80

scanf("%d",&dim);
printf("Entre primer vector\n");
leer_vector(vector1,dim);
printf("Entre segundo vector\n");
leer_vector(vector2,dim);
producto_punto(vector1,vector2,dim);
getch();
}
2. /* Leer un vector de nmeros enteros e imprimir su norma.*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define TAM 50
/* DEFINICION DE FUNCIONES */
void leer_vector(float vec[ ],int dimension)
{
for(int i=0;i<dimension;i++)
{
printf("Vector[%d] = ",i+1);
scanf("%f",&vec[i]);
}
}
void norma(float vec[ ], int dimension)
{
float suma=0;
/* raz cuadrada del producto punto */
for(int i=0;i<dimension;i++)
suma = suma + vec[i]*vec[i];
printf("Norma = %.2f ",sqrt(suma));
}
void main(void)
{
float vector[TAM];
int dim;
clrscr();
printf("Norma\n");

El AB del C - Alvarez/Ceballos/Alvarez 81

printf("Entre dimensin del vector: ");


scanf("%d",&dim);
printf("Entre primer vector\n");
leer_vector(vector,dim);
norma(vector,dim);
getch();
}
I Qu son arreglos bidimensionales?
F Los arreglos bidimensionales son definidos prcticamente de la misma manera que
los arreglos unidimensionales, excepto que se requiere un par separado de corchetes
para cada ndice.
I Estructura
Presentan una estructura de columnas y renglones.
Filas

Columnas
I Cmo se declara un arreglo bidimensional?
F La forma de declarar un arreglo bidimensional es similar a la declaracin de los
arreglos de una dimensin, exceptuando que aqu se manejan dos subndices, uno para
las filas y otro para las columnas.
Para declarar un arreglo se debe tener en cuenta:

Tipo
:Algn tipo de datos
Nombre
:Nombre que damos al arreglo
Tamao1 y Tamao2
:Expresiones enteras positivas que indican el
nmero de elementos del arreglo asociado con cada ndice.

Tipo nombre[tamao1][tamao2];

El AB del C - Alvarez/Ceballos/Alvarez 82

I Cmo inicializar un arreglo bidimensional?


Si la definicin de un arreglo bidimensional incluye la asignacin de valores iniciales, se debe
tener cuidado en el orden en que los valores son asignados a los elementos del arreglo
F La regla es que el ltimo ndice (el de ms a la derecha) es el que se incrementa ms
rpidamente, y el primer ndice (el de ms a la izquierda) es el que se incrementa ms
lentamente. As los elementos de un arreglo bidimensional deben ser asignados por filas,
esto es, primero sern asignados los elementos de la primera fila, luego los elementos de
la segunda y as sucesivamente.
int vector[3][3] = {1,2,3,4,5,6,7,8,9};
El resultado de esta asignacin ser como sigue:
vector[0][0]=1
vector[1][0]=4
vector[2][0]=7

vector[0][1]=2
vector[1][1]=5
vector[2][1]=8

vector[0][2]=3
vector[1][2]=6
vector[2][2]=9

I Existe otra forma de inicializar los arreglos bidimensionales?


F El orden natural en el que los valores iniciales son asignados se puede alterar formando
grupos de valores iniciales encerrados entre llaves({...}).
int matriz[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
Si hay pocos elementos dentro de cada par de llaves, al resto de los elementos de cada fila se
le asignarn ceros. Por otra parte, el nmero de valores dentro de cada par de llaves no puede
exceder del tamao de fila definido
: TALLER 1
1. /* Sumar el contenido de dos matrices*/
#include <stdio.h>
#include <conio.h>
/* DEFINICION DE FUNCIONES */

El AB del C - Alvarez/Ceballos/Alvarez 83

void lee_matriz(int m,int n, int matriz[10][10])


{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
printf("x[%d,%d]=",i+1,j+1);
scanf("%d",&matriz[i][j]);
}
}
void imp_matriz(int m,int n, int matriz[10][10])
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%4d",matriz[i][j]);
printf("\n");
}
}
void suma_matriz(int m,int n,int matriz1[10][10], int matriz2[10][10],int matriz3[10][10])
{
int i,j;
/* suma componente a componente de cada matriz
y lo almacena en una tercera matriz
*/
for(i=0;i<m;i++)
for(j=0;j<n;j++)
matriz3[i][j]=matriz1[i][j]+matriz2[i][j];
}
void main()
{
int matriz1[10][10],matriz2[10][10],matriz3[10][10];
int filas,col;
clrscr();
printf("\n");
printf("Suma de matrices\n");
printf("Numero de filas: ");
scanf("%d",&filas);
printf("Numero de columnas: ");
scanf("%d",&col);

El AB del C - Alvarez/Ceballos/Alvarez 84

lee_matriz(filas,col,matriz1);
printf("Primera Matriz\n");
imp_matriz(filas,col,matriz1);
printf("\n");
lee_matriz(filas,col,matriz2);
printf("\n");
printf("Segunda Matriz\n");
imp_matriz(filas,col,matriz2);
suma_matriz(filas,col,matriz1,matriz2,matriz3);
printf("\n\n");
printf("La suma de las dos matrices es:\n");
imp_matriz(filas,col,matriz3);
getch();
}
2. /* Multiplicar una matriz por un escalar */
#include <stdio.h>
#include <conio.h>
/* DEFINICION DE FUNCIONES */
void lee_matriz(int m,int n, int matriz[10][10])
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
printf("x[%d,%d]=",i+1,j+1);
scanf("%d",&matriz[i][j]);
}
}
void imp_matriz(int m,int n, int matriz[10][10])
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%4d",matriz[i][j]);
printf("\n");
}
}

El AB del C - Alvarez/Ceballos/Alvarez 85

void multiplicar_escalar(int m,int n,int matriz1[10][10],int matriz2[10][10], int escalar)


{
/* multiplica cada elemento de la matriz por el escalar entrado por el usuario
guardando el resultado en otra matriz */
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
matriz2[i][j]=matriz1[i][j]*escalar;
}
void main()
{
int matriz1[10][10],matriz2[10][10],matriz3[10][10];
int filas,col,num;
clrscr();
printf("\n");
printf("Multiplicacion por escalar\n");
printf("Numero de filas: ");
scanf("%d",&filas);
printf("Numero de columnas: ");
scanf("%d",&col);
printf("Entre escalar: ");
scanf("%d",&num);
lee_matriz(filas,col,matriz1);
printf("Matriz\n");
imp_matriz(filas,col,matriz1);
printf("\n");
multiplicar_escalar(filas,col,matriz1,matriz2,num);
printf("\n");
printf("Matriz resultante \n");
imp_matriz(filas,col,matriz2);
getch();
}
3. /* Invertir una matriz */
#include <stdio.h>
#include <conio.h>
/* DEFINICION DE FUNCIONES */
void lee_matriz(int m,int n, int matriz[10][10])
{

El AB del C - Alvarez/Ceballos/Alvarez 86

int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
printf("x[%d,%d]=",i+1,j+1);
scanf("%d",&matriz[i][j]);
}
}
void imp_matriz(int m,int n, int matriz[10][10])
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%4d",matriz[i][j]);
printf("\n");
}
}
void invertir_vector(int n,int vector[])
{
/* invierte un vector de nmeros enteros */
int i,j;
int vector2[20];
j=n-1;
for(i=0;i<n;i++)
{
vector2[j]=vector[i];
j--;
}
for(i=0;i<n;i++)
vector[i]=vector2[i];
}
void invertir_matriz(int dim1,int dim2,int matriz[10][10])
{
int i,j,k=0,m=0;
int vec[50];
for(int l=0;l<dim1*dim2;l++)
vec[l]=0;
for(i=0;i<dim1;i++)

El AB del C - Alvarez/Ceballos/Alvarez 87

for(j=0;j<dim2;j++)
{
/* paso de los elementos de la matriz al vector en orden */
vec[k]=matriz[i][j];
k++;
}
invertir_vector(dim1*dim2,vec); /* invierte los elementos */
m=0;
for(i=0;i<dim1;i++)
for(j=0;j<dim2;j++)
{
/* asignacin de valores del vector ya invertido
a la matriz original
*/
matriz[i][j]=vec[m];
m++;
}
}
void main()
{
int matriz[10][10];
int fil,col;
clrscr();
printf("\n");
printf("Invertir matriz\n");
printf("Entre dimensiones de la matriz\n");
printf("Filas: ");
scanf("%d",&fil);
printf("Columnas: ");
scanf("%d",&col);
lee_matriz(fil,col,matriz);
imp_matriz(fil,col,matriz);
invertir_matriz(fil,col,matriz);
printf("Matriz invertida\n");
imp_matriz(fil,col,matriz);
getch();
}

Potrebbero piacerti anche