Вы находитесь на странице: 1из 25

Practicasprofesionales

DepartamentodeComputacin

Universidad Nacional Autnoma de Nicaragua - Len


Departamento de Computacin
Practicas Profesionales
Elaborado por:
Lic. Luis Ernesto Daz Beteta

Arreglos

Facultad de Ciencias y Tecnologa

Un arreglo es un conjunto finito de componentes del mismo tipo, los cuales se


diferencian o relacionan a travs de un subndice. Todos los elementos del arreglo
estn ubicados de forma consecutiva y tienen el mismo tamao o espacio en memoria
y por lo tanto igual forma de almacenamiento

Generalidades
Una variable permite que el contenido que se encuentra almacenado en el espacio de memoria asignado a dicha
variable, pueda ser alterado en el transcurso de la ejecucin del programa. Debemos comprender que a una
variable se le asigna un espacio en memoria donde se puede guardar de forma temporal un nico valor, bien sea
numrico, carcter o lgico.
Frecuentemente tenemos la necesidad de almacenar una coleccin de datos del mismo tipo. Por ejemplo, cuando
se leen las notas de los estudiantes de un curso en particular. Los datos siempre que estn relacionados se pueden
organizar en estructuras, de tal manera que podemos tener un conjunto de datos numricos, lgicos, o caracteres
manejados a travs de un mismo nombre.
Una estructura de datos es la organizacin que reciben los datos para que sean tratados como una unidad, esta
unidad recibe el nombre de arreglo. Un arreglo es un conjunto finito de componentes del mismo tipo, los cuales
se diferencian o relacionan a travs de un subndice. Todos los elementos del arreglo estn ubicados de forma
consecutiva y tienen el mismo tamao o espacio en memoria y por lo tanto igual forma de almacenamiento.

Practicasprofesionales

DepartamentodeComputacin

Conceptodearreglo
Un arreglo se define en forma abstracta como una coleccin finita de elementos homogneos ubicados de
forma consecutiva en memoria. Entindase por finito que todo arreglo tiene una cantidad especifica de
elementos y por homogneos que todos los elementos pertenecientes al arreglo son del mismo tipo, por
ejemplo, un arreglo puede almacenar enteros o caracteres pero no ambos.
A cada uno de los datos que se almacenan en el arreglo se le llama elemento del arreglo y se enumeran
consecutivamente por medio de valores enteros a los que llamamos ndices. Al ndice ms pequeo del arreglo
se le denomina limite_inferior (lower) y al alto se le denomina limite_superior (upper).
Los elementos del arreglo pueden ser de cualquier tipo de dato o campo. Un arreglo puede contener, por
ejemplo, la edad de los alumnos de una clase o las temperaturas de cada da de un mes en una ciudad
determinada.

Declaracindeunarreglo
Los arreglos se declaran igual que cualquier otro tipo de variable, excepto que se le debe indicar al compilador el
tamao o longitud del mismo. Para indicar al compilador el tamao o longitud del arreglo se debe hacer seguir
al nombre del arreglo el tamao encerrado entre corchetes. La sintaxis para declarar un arreglo es:
tipo nombre_arreglo [tamao(, tamao, ...)];
Donde:
tipo, corresponde al tipo de datos que sern almacenados en el arreglo.
nombre_arreglo, corresponde al identificador por medio del cual podemos referenciar al arreglo.
tamao, es la cantidad de elementos que ser capaz de almacenar el arreglo.

Atencin
Obsrvese que en la sintaxis de declaracin de un arreglo tenemos una parte encerrada dentro de parntesis,
esto indica que esa parte es opcional. El por que de esto, se explicara en la parte de clasificacin de un arreglo.
Al declarar un arreglo es necesario indicarle al compilador la longitud (tamao) del mismo ya que el compilador
reservara espacio de memoria suficiente para almacenar a cada uno de los elementos del arreglo.
Ejemplos de declaracin de arreglos:
int a[5]; //se declara un arreglo capaz de almacenar 5 elementos
float z[10]; //se declara un arreglo capaz de almacenar 10 elementos
double mi_arreglo[8]; //se declara un arreglo capaz de almacenar 8 elementos

Practicasprofesionales

DepartamentodeComputacin

Es posible que al momento de la declaracin de un arreglo dejemos los corchetes vacios, de la forma:
int array[]; //Esto es un ERROR

La lnea de cdigo anterior genera un error puesto que el compilador necesita saber cuanta memoria reservar
para el arreglo. Para solucionar este problema debemos especificar los elementos que formaran parte del arreglo
de la forma:
int array[]={1,2,3,5,6};

El compilador asignara un espacio de memoria para el arreglo llamado array con capacidad de almacenar 5
elementos y colocara los elementos desde la posicin 0 hasta la posicin 4 conforme fueron declarados.

Clasificacindeunarreglo
Como hemos mencionado anteriormente un arreglo al momento de su declaracin debe poseer un tamao o
longitud ya que el compilador asignara la memoria suficiente para poder almacenar a cada uno de los elementos
del arreglo. Un arreglo adems de poseer un tamao tambin posee una dimensin, de tal forma que un arreglo
puede clasificarse de forma general en: vectores (arreglos de una sola dimensin) o arreglos dimensionales
(arreglos que tienen ms de una dimensin).
Arreglos unidimensionales o vectores
Un vector es un arreglo donde los elementos que lo conforman estn dispuestos bajo un mismo concepto de
clasificacin (fila o columna), es decir, los datos estn organizados de una manera lineal, por lo que para hacer
referencia a un elemento del arreglo es necesario un nico ndice, que indique la posicin relativa del elemento
en el arreglo.
Grficamente un vector puede ser representado como fila o como columna, por ejemplo si tenemos la siguiente
declaracin:
int Vector[6];

El arreglo llamado vector puede ser representado por medio de cualquiera de las siguientes formas:

Practicasprofesionales

DepartamentodeComputacin

IMPORTANTE!!!!!
En el apartado Concepto de arreglo, se hablo sobre el limite_inferior (lower) y sobre el limite_superior
(upper). Normalmente el valor de lower es cero y el valor de upper es el equivalente al tamao del arreglo
menos la unidad, en otras palabras si el tamao del arreglo es de 6 elementos lower posee el valor 0 y upper el
valor 5 (n-1, siendo n el tamao del arreglo)

Atencin
Cabe sealar que normalmente los arreglos inician en la posicin 0 y terminan en la posicin n-1. Estas
posiciones de los ndices del arreglo esta dada por el lenguaje de programacin que se utilice.

Arreglos dimensionales
Se considera arreglo dimensional a todo aquel que posee ms de una dimensin, normalmente se distinguen los
arreglos de dos dimensiones como bidimensionales y arreglos de ms de dos dimensiones como
multidimensionales.
A los arreglos de dos dimensiones (bidimensionales) se les conoce como matrices y son estructuras de datos que
organizan su informacin en forma de tablas, es decir, los elementos que la conforman estn dispuestos bajo dos
conceptos de clasificacin (fila y columna). Para poder indicar el lugar donde se encuentra un determinado
elemento, es necesario utilizar dos ndices: uno para indicar el rengln o fila y otro para indicar la columna.
Puede mirarse una matriz como un vector de vectores; por lo tanto, es un conjunto de componentes en el que se
necesitan dos subndices para identificar un elemento que pertenezca al arreglo.
Por ejemplo, si tenemos un arreglo llamado matriz de dos dimensiones como se muestra a continuacin:
int matriz[3, 6];

Grficamente podemos representar al arreglo bidimensional como se muestra a continuacin:


0

Un arreglo bidimensional N * M tiene N filas y M columnas; por lo


tanto, tiene N * M elementos dispuestos interiormente en memoria en
forma sucesiva.

1
2
Al declarar un arreglo de ms de dos dimensiones o multidimensional podemos por ejemplo declarar un arreglo
de tres dimensiones llamado matriz_multi de la siguiente forma:
int matriz_multi[2][4][3]

A continuacin se presenta un ejemplo grfico de un arreglo multidimensional de N x M x 3

Practicasprofesionales

DepartamentodeComputacin

Manipulandoelcontenidodeunarreglo
Para acceder al contenido de un arreglo, se utiliza un valor entero positivo al que llamaremos ndice. Este valor
puede ser dado por una constante, variable o una expresin aritmtica.
Dos operaciones bsicas pueden ser llevadas a cabo sobre los elementos de un arreglo, estas son:
Almacenamiento: establecer un valor al elemento del arreglo.
Extraccin: se obtiene el valor de un elemento del arreglo
Por ejemplo, si definimos un arreglo llamado array con un tamao de 3 elementos como se muestra a
continuacin:
int array[3];

La memoria en la computadora esta dispuesta de forma lineal y debemos


estar consientes que antes del arreglo y despus del mismo pueden estar
colocados valores correspondienes a otras variables.
El identificador del arreglo es una referencia al inicio del mismo, es decir, el
nombre del arreglo posse la direccin de memoria del elemento 0.
Sern validos todos accesos a los elementos del arreglo que esten en el rango de 0 a 2, es decir, que si intentamos
acceder a una posicin anterior a 0 o a una posicin posterior a 2 del arreglo llamado array se producir un error
de acceso.

Practicasprofesionales

DepartamentodeComputacin

Cada elemento de un arreglo es accedido mediante el nombre del mismo y un valor entero positivo que
corresponde a la posicin que se desea acceder.
Operacin de almacenamiento en un arreglo
Esta operacin nos permite almacenar un valor en la posicin que se indique por medio del ndice, por ejemplo:
si necesitamos almacenar el valor 10 en la posicin 1 de el arreglo array, las sentencias seran:
int array[3];
array[1] = 10; //Almacena el valor 10 en la posicin 1 del array

Operacin de extraccin en un arreglo


Esta operacin permite acceder al valor que se encuentra almacenado en la posicin indicada por medio del
ndice y devuelve ese valor a una variable, por ejemplo: si lo que deseamos es recuperar el valor almmacenado
en la posicin 1 del array anterior . Las sentencias de cdigo sera:
int array[3];
int value;
value = array[1]; //Obtiene el valor ubicado en la posicin 1 del array

Atencin
Normalmente ni el compilador ni el lenguaje de programacin proporcionan un mecanismo que compruebe que los valores
de los ndices del arreglo estn dentro del rango valido. As, por ejemplo, si accede a elementos fuera del rango el
compilador no producir ningn error, lo que puede producir un fallo en su programa, dependiendo del contexto en que
se encuentre el error.
Es tarea del programador asegurarse que no se accede a un ndice fuera del rango definido del arreglo, es decir que el valor
no sea menor que el valor de lower ni mayor que upper.

Antes de continuar, debemos saber algo muy importante, todo identificador de un arreglo almacena la direccin
de inicio del arreglo mismo, entonces, el nombre del arreglo referencia a la posicin 0 del arreglo.
Ejemplo:
#include <stdio.h>
int main(){
int array[5]={5,2,3,7,8};
printf("\nDireccin de inicio del arreglo es: %x ", &array);
printf("\nDireccin del elemento 0 del arreglo es: %x ", &array[0]);
putchar('\n');
return 0;
}

Practicasprofesionales

DepartamentodeComputacin

Resultado:
Como se muestra en la imagen, en ambos casos la
direccin de memoria es la misma, por ende para
acceder a los elementos de un arreglo nos basta con
conocer su direccin de inicio y la cantidad de
desplazamientos que corresponden a la posicin del
elemento en el arreglo.
Ejemplo:
#include <stdio.h>
int main(){
int array[]={5, 2, 3, 6, 8, 4, 7, 1, 3, 9};
int i, n=sizeof(array)/sizeof(int);
for( i=0; i<n; i++ )
printf("La direccion de memoria del elmento %d es %x\n", i, (array+i) );

putchar('\n');
return 0;

Resultado:

En en ejemplo anterior se accede a las posiciones de memoria del arreglo utilizando (array+i).
Esto es asi gracias a que array, es una referencia al inicio del arreglo y la variable i, corresponde al
desplazamiento que se realiza desde el inicio del arreglo
En la imagen ubicada en la siguiete pgina se muestra como se veria (hipoteticamente) nuestro arreglo llamado
array en memoria, mostrando cada una de las posiciones de memoria de los elementos que conforman el arreglo.
Adems de muestra a la variable array apuntando al inicio del arreglo.

Practicasprofesionales

DepartamentodeComputacin
Si por medio de la expresin (array+i) podemos acceder a la direccin
de memoria de un elemento en el arreglo, entonces Cmo podemos
aceder al contenido?. Mediante la expresin *(array+i).
Si deseamos acceder a la posicin 4 del arreglo llamado array para
almacenar el valor 7, lo podemos realizar por medio de una de las
siguientes lneas de cdigo:
array[4]=7; //notacion arreglo
*(arrary+4)=7; //notacion puntero

En la segunda lnea, array posee la direccin de incio del arreglo, lo


que significa: que del inicio del arreglo se movera 4 espacios y ahi
colocar el valor 7.

Ejemplo:
#include <stdio.h>
int main(){
int array[]={5, 2, 3, 6, 8, 4, 7, 1, 3, 9};
int i, n=sizeof(array)/sizeof(int);
for( i=0; i<n; i++ )
printf("El contendio del elmento %d es %d\n", i, *(array+i) );
putchar('\n');
return 0;
}

Resultado:

Practicasprofesionales

DepartamentodeComputacin

Ejemplos
Ejemplo 1
Crear un programa por medio del cual se pidan las edades de 5 personas y presente en pantalla la edad promedio
del grupo.
Datos de entrada
Los valores correspondientes a las 5 edades
Datos de salida
La edad promedio del grupo de personas
Definicin de variables
edades, corresponde al arreglo de 5 elementos que almacenara las edades.
indice, valor que determinara cual es el ndice del arreglo a manipular.
sum, almacenara la suma de las edades (valor inicial 0).
prom, almacenara el resultado de la expresin que calcule el promedio de las edades (valor inicial 0).
Proceso
El proceso que se debe de llevar a cabo para saber la edad promedio de 5 personas, lo podemos resumir en los
siguientes pasos:
Pedir las edades de las 5 personas, esto se realizara por medio de un ciclo
Sumar cada una de las edades
Sacar el promedio de las edades (sum/5)
presentar la edad promedio en pantalla
Solucin
#include <stdio.h>
int main(){
int edades[5];
int indice=0, sum=0;
float prom = 0;
while( indice < 5 ){
printf("Ingrese la edad %d: ", indice+1);
scanf("%d", &edades[indice]); //Almacena la edad ingresada
indice++;
}
//Se realiza la suma de todas las edades
for( indice = 0; indice < 5; indice++ )
sum = sum + edades[indice]; //Obtiene el valor almacenado en edades
prom = sum / 5;
printf("\nEl promedio de edad es %f: \n", prom);
return 0;
}

Practicasprofesionales

DepartamentodeComputacin

Resultado
Como se puede observar en la captura de pantalla, al
momento de ejecutar el programa, se introducen los
varloes correspondientes a 5 edades y luego se presenta en
pantalla el resultado correspondiente al promedio de las
edades ingresadas.

Ejemplo 2
Un restaurante desea saber cuales son las opiniones sobre un nuevo plato, se realizara una encuesta a los
empleados (15 personas) del restaurante a los cuales se les pide que indiquen por medio de un numero del 1 al 10
su opinin. Elabore un algoritmo que pida a las 15 personas las opiniones y luego que presente el resultado.
Datos de entrada
Se necesitan capturar las 15 opiniones, para la cual se a de crear un ciclo que lo haga
Se utilizara un arreglo de diez elementos para crear la frecuencia de opiniones, cada uno de los
elementos debe ser iniciado a cero.
Datos de salida
Se mostrara la frecuencia que obtuvo en cada uno de posibles valores
Definicin de variables
opiniones, sera un arreglo de 10 elementos. Este almacenar la frecuencia de las opiniones
contador, variable que llevara la secuencia de entrevistados
opinion, sera la variable que almacenar la opinin de la persona
Proceso
Pasos a seguir para solucionar el problema:
1. Crear un arreglo de 10 elementos
2. Iniciar a 0 cada uno de los elementos del arreglo
3. Pedir la opinin de las 15 personas
4. En la posicin correspondiente (entre 1 y 10) se incrementara en uno el valor que este en esa posicin.
5. Presentar los resultados

10

Practicasprofesionales

DepartamentodeComputacin

Solucin
#include <stdio.h>
int main(){
int opiniones[10]; //Almacena la frecuencia de opiniones
int contador, opinion;
for( contador = 0; contador < 10; contador++ )
opiniones[contador] = 0; //Inicializa a todos elementos con el valor 0
//Se piden las 15 opiniones
for( contador = 0; contador < 15; contador++ ) {
do{ //Se repite mientras el valor no este en el rango
printf("\nIngrese su opinion ingresando un valor en el rango 1-10\n -> ");
scanf("%d", &opinion); //Leer la opinion
}while( opinion < 1 || opinion > 10 );
opiniones[opinion-1]++; //Incrementa en 1 la frecuencia de la opinion
}
for( contador = 0; contador < 10; contador++ )
printf("\nLa opcion %d, tiene %d opiniones", contador+1,opiniones[contador]);

putchar('\n');
return 0;

Atencin
Al momento de declara un arreglo, el compilador asignara memoria para que se puedan almacenar cada uno de
los elementos del arreglo, pero no se le da valores a dichos elementos. Por tal razn debemos de tener cuidado
y no asumir que estos elementos tienen valores.
Por ello en el ejemplo anterior se inicia con el valor cero a cada uno de los elementos del arreglo opiniones.
Resultado
En esta captura de pantalla, slo se muestran los resultados de
ingresar las opiniones, no se presenta la ejecucin completa debido
al tamao de la imagen.

11

Practicasprofesionales

DepartamentodeComputacin

Ejemplo 3
Modifique el ejercicio anterior, de tal forma que presente los resultados como un histograma. Presentar un
asterisco por cada opinin recibida.
Solucin
#include <stdio.h>
int main(){
int opiniones[10]; //Almacena la frecuencia de opiniones
int contador, opinion;
for( contador = 0; contador < 10; contador++ )
opiniones[contador] = 0; //Inicializa a todos elementos con el valor 0
//Se piden las 15 opiniones
for( contador = 0; contador < 15; contador++ ) {
do{ //Se repite mientras el valor no este en el rango
printf("Ingrese su opinion ingresando un valor en el rango 1-10\n -> ");
scanf("%d", &opinion); //Leer la opinion
}while( opinion < 1 || opinion > 10 );
}

opiniones[opinion-1]++; //Incrementa en 1 la frecuencia de la opinion

printf("\nCalificion \t Frecuencia");
for( contador = 0; contador < 10; contador++ ){
printf("\n%5d \t\t ", contador+1);
for( opinion = 0; opinion < opiniones[contador]; opinion++ )
printf(" *");
}
putchar('\n');
return 0;
}

Resultado
Como se puede obsevar en el resultado obtenido en la encuesta,
ahora se presenta un * por cada repeticin de la opinin

12

Practicasprofesionales

DepartamentodeComputacin

Ejemplo 4
Elaborar un programa que solicite al usuario ingrese 10 valores enteros y que luego muestre en pantalla la
posicin y el valor correspodiente al elemento de mayor valor.
Datos de entrada
Los elementos del vector.
Datos de salida
La posicin que ocupa el mayor de los elementos del arreglo.
Definicin de variables
vector: Nombre asignado al arreglo de 10 elementos.
pos_mayor: Lugar dentro del arreglo donde se encuentra el valor mayor.
mayor: Variable que almacena el valor mayor
Proceso
Para encontrar la posicin que ocupa el mayor elemento del vector es necesario recorrer todo el arreglo mediante
un ciclo, asumiendo que el primer elemento es el mayor y se recorre el vector a partir de la posicin 2 en
adelante, cambiando el valor de la posicin cada vez que se encuentre un elemento de mayor peso.
Solucin
#include <stdio.h>
int main(){
int vector[10]; //Almacena la frecuencia de opiniones
int pos_mayor, mayor, i;
for( i = 0; i < 10; i++ ) {
printf("Ingrese el elemento %d: ", i+1);
scanf("%d", &vector[i]);
}
pos_mayor = 0; //Se asume que el mayor es el primer elemento
mayor = vector[0]; //Se asumen que el primer elemento es el mayor
for( i = 0; i < 10; i++ ) {
if( vector[i] > mayor ){
pos_mayor = i;
mayor = vector[i];
}
}
printf("El
pos_mayor);

elemento

%d

ubicado

en

la

putchar('\n');
return 0;

13

posicion

%d

es

el

mayor",

mayor,

Practicasprofesionales

DepartamentodeComputacin

Resultado
Como se puede observar en la imagen, se
ingresaron 10 valores y luego al recorrer el
arreglo se obtiene que el valor mayor se
encuentra en la pocisin 8 del arreglo.

Ejemplo 5
El presente ejemplo muestra como almacenar elementos dentro de las posiciones de un arreglo de dos
dimensiones.
Solucin
#include <stdio.h>
int main(){
int a[3][4]; //Matriz de de 3 filas x 4 columnas
int i, j;
for( i = 0; i < 3; i++ ) { //Controla el acceso a las filas
//Controla el acceso a las columnas
for( j = 0; j < 4; j++ ) {
printf("Ingrese el elemento %d, %d: ", i, j);
scanf("%d", &a[i][j]);
}
}
printf("\n\n/**** Valores ingresados ****/\n");
for( i = 0; i < 3; i++ ) { //Controla el acceso a las filas
//Controla el acceso a las columnas
for( j = 0; j < 4; j++ ) {
printf("%3d", a[i][j] );
}
putchar('\n');
}
putchar('\n');
return 0;
}

14

Practicasprofesionales

DepartamentodeComputacin

Si nos imaginamos el como se vera el arreglo a grficamente, seria por ejemplo:

Para poder almacenar un valor en el elemento correspondiente a la fila 2 columna 3, realizamos la siguiente
sentencia:
a[2][3] = Valor; //Donde valor corresponde al elemento a almacenar.

Por tal motivo para poder almacenar un elemento dentro de un arreglo dimensional necesitamos dos ndices, el
primer ndice para la primera dimensin (fila) y el segundo ndice para segunda dimensin (columna). Por ello
en el ejemplo anterior tenemos la sentencia:
scanf("%d", &a[i][j]);

Esta sentencia permite almacenar un elemento dentro del arreglo a en la posicin dada por los valores de los
ndices fila y columna.
Resultado
En la captura de pantalla podemos observar, que se le solicita al
usuario el ingreso de los elementos de la matriz, iniciando en la
posicin 0,0 hasta la posicin 2,3. Una vez que el usuario termino
en el ingreso de los numeros se muestra en pantalla los elementos
introducidos en forma de matriz.

15

Practicasprofesionales

DepartamentodeComputacin

Ejemplo 6
Realice un programa que obtenga la suma de dos matrices, si las matrices A=(aij) y B=(bij) tienen la misma
dimensin, la matriz suma es: A+B=(aij+bij).
La matriz suma se obtienen sumando los elementos de las dos matrices que ocupan la misma misma posicin.
Ejemplo:

Datos de entrada
Se solicitara al usuario el ingreso de cada uno de los elementos de las dos matrices .
Datos de salida
Se presentara en pantalla el resultado de la suma de las dos matrices
Definicin de variables
mtA: matriz A, arreglo donde se ingresaran los datos de la primera matriz.
MtB: matrizB, arreglo donde se colocaran los datos de la segunda matriz.
MtC: matriz C, arreglo donde se colocara el resultade de sumar a mtA y mtB
fil: variable que se utilizara para recorrer las filas de las matrices
col: variable que se utilizara para recorrer las columnas de las matrices
Proceso

Se solicitara al usuario que ingrese los datos de la matriz A y B


Se realizara un recorrido por cada posicin de las matrices A y B, sumando los valores que esten
en la posicin fil, col. el resultado ser ubicado en la posicin adecuada en la matriz C
Presentar el resultado de la suma de las matrices
Solucin
#include <stdio.h>
#define FILAS 3
#define COLUMNAS 3
int main(){
int mtA[FILAS][COLUMNAS], mtB[FILAS][COLUMNAS];
int mtC[FILAS][COLUMNAS];
int fil, col;
printf("DATOS DE LA MATRIZ \"A\" \n");
for( fil=0; fil<FILAS; fil++ ){
for( col=0; col<COLUMNAS; col++ ){
printf("Ingrese el elemento %d,%d -> ", fil, col);
scanf("%d", &mtA[fil][col]);

16

Practicasprofesionales

DepartamentodeComputacin

}
}
printf("DATOS DE LA MATRIZ \"B\" \n");
for( fil=0; fil<FILAS; fil++ ){
for( col=0; col<COLUMNAS; col++ ){
printf("Ingrese el elemento %d,%d -> ", fil, col);
scanf("%d", &mtB[fil][col]);
}
}
//Se realiza la suma de cada elemnto de las matrices A y B
for( fil=0; fil<FILAS; fil++ ){
for( col=0; col<COLUMNAS; col++ ){
mtC[fil][col] = mtA[fil][col] + mtB[fil][col];
}
}
for( fil=0; fil<FILAS; fil++ ){
for( col=0; col<COLUMNAS; col++ ){
printf(" %d", mtC[fil][col]);
}
putchar('\n');
}
putchar('\n');
return 0;
}

Resultado
Com podemos observar en la captura de pantalla de la ejecucin del
programa, se le solicita al usuario que ingrese los valores de los
elementos de las matrices A y B. Luego se presenta el resultado de la
suma de ambas matrices.

17

Practicasprofesionales

DepartamentodeComputacin

Ejemplo 7
Realice un programa que muestre un tablero de ajedrez, este tablero mostrara B en posicin de las casilas
blancas y N en las posiciones en las que se encuentren las casillas negras. A continuacin se muestra una
representacin de un tablero en forma de matriz.

Para colocar el carcter B para las casillas blancas o N para las casillas negras, debemos sumar los valores de las
filas y columnas, tal como se muestra en la siguiente imagen.
Observe que la casilla donde la suma de la fila y columna da como resultado un
valor par se muestran marcadas en rojo. Son estas posiciones las que corresponden
a las casillas blancas y las impares a las casillas negras.

Datos de entrada
No se ingresaran datos por parte del usuario
Datos de salida
Se presentara el tablero de ajedrez, mostrando B para las casillas blancas y N para las negras.
Definicin de variables
t: matriz de 8x8 que representa al tablero de ajedrez
fil: variable que se utilizara para recorrer las filas de las matrices
col: variable que se utilizara para recorrer las columnas de las matrices
Proceso

Se realizara un recorrido por cada una de las posiciones de la matriz de 8x8.


En la posicion donde la suma de la fila y columna de par se colocara un cero y un uno en las
impares.
Se recorrera de nuevo la matriz presentando en pantalla una B donde se encuentre el valor cero
y una N donde se encuentre el valor uno.

18

Practicasprofesionales

DepartamentodeComputacin

Solucin
#include <stdio.h>
typedef int tablero[8][8];
int main(){
tablero t;
int fil, col;
for( fil=0; fil<8; fil++ ){
for( col=0; col<8; col++ ){
if( (fil + col) % 2 == 0 ) //Si la suma de la fila y la columna es par
t[fil][col] = 0;
else
t[fil][col] = 1;
}
}
for( fil=0; fil<8; fil++ ){
for( col=0; col<8; col++ ){
if( t[fil][col] == 0 )
printf("%3c", 'B');
else
printf("%3c", 'N');
}
putchar('\n');
}

putchar('\n');
return 0;

Resultado
En la sentencia
typedef int tablero[8][8];
Se define un nuevo tipo de datos llamado tablero que corresponde a una
matriz de 8x8 donde cada uno de los elementos del arreglo sern valores
enteros. De esta forma podemos crear variables a partir del nuevo tipo de
dato creado, por ejemplo:
tablero t; //t sera una matriz de 8x8 elementos

El cdigo presentado como solucin al problema planteado puede ser mejorado logrando reducir las lneas de
codigo, tal como se muestra a continuacin:

19

Practicasprofesionales

DepartamentodeComputacin

#include <stdio.h>
typedef int tablero[8][8];
int main(){
tablero t;
int fil, col;
for( fil=0; fil<8; fil++ ){
for( col=0; col<8; col++ )
t[fil][col] = ( (fil + col) % 2 == 0 ) ? 0: 1;//Usando operator ternario
}
for( fil=0; fil<8; fil++ ){
for( col=0; col<8; col++ )
printf("%3c", (t[fil][col] == 0)?'B':'N' );
}

putchar('\n');

putchar('\n');
return 0;

Pasandoarreglosafuncin
Devemos recordar que el nombre de un array es la direccin de comienzo de d icho array,. esto significa que al
pasar un arreglo a una funcin, lo que estamos pasando es la direccin de inicio del arreglo. Por eso decimos que
los arrays son siempre pasados por referencia, porque no se pasa una copia de todos sus elementos; por tanto se
trabajan sobre el mismo espacio de memoria, en otras palabras, sobre el mismo array.
Ejemplo:
#include <stdio.h>
void PrensetarArreglo(int a[], int n );
int main(){
int array[]={5, 2, 3, 6, 8, 4, 7, 1, 3, 9};
int n=sizeof(array)/sizeof(int);
PrensetarArreglo( array, n );

putchar('\n');
return 0;

20

Practicasprofesionales

DepartamentodeComputacin

void PrensetarArreglo(int a[], int n ){


int i;
for( i=0; i<n; i++ )
printf("El contendio del elmento %d es %d\n", i, *(a+i) );
}

En este ejemplo, el primer parmetro de la funcin


PresentarDatos es un array de una dimensin. Cuando se declara
un array como parmetro de una funcin, si es unidimensional no
se requiere que se especifique su dimensin, lo que indica que no
hay que hacer una reserva de memoria para una copia total del
array; conclusin, lo que se pasa es la direccin del array.

Si el array es multidimensional, entonces no se requiere que se especifique la primera dimensin, pero s las
restantes, como puede ver a continuacin:
#include <stdio.h>
#define MAX 3
void PrensetarMatriz(int a[][MAX]);
int main(){
int matriz[MAX][MAX]={
{5, 2, 3},
{4, 7, 1},
{2, 0, 2}};
PrensetarMatriz( matriz );
putchar('\n');
return 0;
}
void PrensetarMatriz(int a[][MAX]){
int i, j;
for( i=0; i<MAX; i++ ){
for( j=0; j<MAX; j++ )
printf("%3d", a[i][j] );
putchar('\n');
}
}

21

Practicasprofesionales

DepartamentodeComputacin

En este otro ejemplo el parmetro de la funcin PresentarMatriz es un array de dos dimensiones. El tener que
especificar la segunda dimensin hace que la funcin dependa de ese valor externo lo que supone declarar esa
constante cuando utilicemos esta funcin en otros programas. Esto podra solucionarse con un fichero de
cabecera en el que se incluyera tanto el prototipo de la funcin como la definicin de la constante.
Cuando alguno de los parmetros de una funcin representa un array de una dimensin es indiferente declararlo
como array o como puntero. En el siguiente ejemplo, puede ver el que el parmetro declarado primeramente
como un array y a continuacin como un puntero; el comportamiento es el mismo.
#include <stdio.h>
void PrensetarArreglo(int *a, int n );
int main(){
int array[]={5, 2, 3, 6, 8};
int n=sizeof(array)/sizeof(int);
PrensetarArreglo( array, n );

putchar('\n');
return 0;

void PrensetarArreglo(int *a, int n ){


int i;
for( i=0; i<n; i++ )
printf("El contendio del elmento %d es %d\n", i, *(a+i) );
}

Atencin
El identificador de un array y un puntero no son lo mismo, pero en el caso de arrays de una dimensin podemos
utllizar en lugar del nombre del array, un puntero que almacene la direccin de comienzo del array para acceder
a los elementos del mismo.

Puesto que el identificador de un array y un puntero no son 1o mismo, imposibilita el utilizar el identificador de
un array de dos dimensiones en lugar del nombre del array como una direccin; para resover esto debemos
utilizar un puntero a un puntero (doble puntero) que almacene la direccin de comienzo del array con el fin de
acceder a los elementos del mismo.

22

Practicasprofesionales

DepartamentodeComputacin

Autoevaluacin
1.2.3.4.5.-

Segn lo explicado, cuales son para usted las ventajas de utilizar arreglos
Cul es la sintaxis de declaracin de un arreglo?
Qu hace el compilador cuando se declara un arreglo?
Explique, que es un ndice
De acuerdo al siguiente trozo de cdigo, diga si se produce o no un error y porque.
int arreglo[5];
arreglo[13]<-3;

6.De acuerdo al siguiente trozo de cdigo, diga si se produce o no un error y si lo se produce diga cual es
la solucin.
int arreglo1[5];
int arreglo2[5];
// ...
arreglo2 = arreglo1;

7.-

Cuantos ndicas se necesitan para poder acceder a una posicin cualquiera en una matriz.

Resuelvalossiguientesejercicios
1. Realice un algoritmo que pida un arreglo de N elementos y luego que presente dicho arreglo en orden
inverso. Por ejemplo, si tenemos un arreglo llamado vector como se presenta a continuacin:
2

Este se muestra en pantalla en orden inverso, es decir en el orden: 9,1,7,5,4,2


2. Hacer un programa que lea una matriz de NF filas y NC columnas y calcule la suma de las filas y de las
columnas, dejando los resultados en dos vectores, uno con la sumas de las filas y otro con la suma de las
columnas; imprima los dos vectores resultantes.
3. Hacer un programa que encuentre e imprima la matriz transpuesta de una matriz MAT. La matriz
transpuesta de la matriz MAT se encuentra intercambiando las filas por las columnas y las columnas por
las filas. Si TMAT es la matriz transpuesta de MAT, implica entonces que TMAT [columna, fila] es
igual a MAT [fila, columna].

Si el contenido de MAT es:

El contenido de TMAT es:

23

Practicasprofesionales

DepartamentodeComputacin

Como se puede ver, se invierte el orden de la matriz; es decir, el nmero de filas de MAT es igual al
nmero de columnas de TMAT y el nmero de columnas se invierte por el nmero de filas de TMAT.
4. Realice un programa que calcule el producto de dos matrices. A y B son multiplicables si el nmero de
columnas de A coincide con el nmero de filas de B El elemento cij de la matriz producto se obtiene
multiplicando cada elemento de la fila i de la matriz A por cada elemento de la columna j de la matriz
B y sumndolos.

5. Realice un programa que genere valores aleatorios entre 0 y 100 cada uno de estos valores sera
ingresado en un arreglo de 10 elementos. Una vez generado los valores del vector ordenarlos de forma
ascendente y posteormente presentar en pantalla el arreglo ordenado.
6. Realice un programa que obtenga por medio de el algoritmo conocido como la criba de Eratostenes los
numeros primos que esten en el rango de 2 a 100.
Este algoritmo permite hallar todos los nmeros primos menores que un nmero natural dado n. Se
forma una tabla con todos los nmeros naturales comprendidos entre 2 y n, y se van tachando los
nmeros que no son primos de la siguiente manera: Comenzando por el 2, se tachan todos sus mltiplos;
comenzando de nuevo, cuando se encuentra un nmero entero que no ha sido tachado, ese nmero es
declarado primo, y se procede a tachar todos sus mltiplos, as sucesivamente. El proceso termina
cuando el cuadrado del mayor nmero confirmado como primo es mayor que n.
Determinemos, mediante el siguiente ejemplo, el proceso para determinar la lista de los nmeros primos
menores de 20.
Primer paso: listar los numeros naturales comprendidos entre 2 y 20.

Segundo paso: Se toma el primer nmero no rayado ni marcado, como nmero primo.

Tercer paso: Se tachan todos los mltiplos del nmero que se acaba de indicar como primo.

24

Practicasprofesionales

DepartamentodeComputacin

Cuarto paso: Si el cuadrado del primer nmero que no ha sido rayado ni marcado es inferior a 20,
entonces se repite el segundo paso. Si no, el algoritmo termina, y todos los enteros no tachados son
declarados primos. Como 3 = 9 < 20, se vuelve al segundo paso

En el cuarto paso, el primer nmero que no ha sido tachado ni marcado es 5. Como su cuadrado es
mayor que 20, el algoritmo termina y se consideran primos todos los nmeros que no han sido tachados.
Como resultado se obtienen los nmeros primos comprendidos entre 2 y 20, y estos son:
2, 3, 5, 7, 11, 13, 17, 19.

25

Вам также может понравиться