Está en la página 1de 6

Nombre y Apellido: Curso: 5º Año

Práctico Fecha inicio: Fecha fin:

Lenguaje en C: Arreglos Unidimensionales

OBJETIVO

Aplicar el concepto de arreglos en diversas situaciones problemáticas, aprovechando las


propiedades del recurso a la hora de manejar gran volumen de datos.
En esta primer parte se introduce el concepto de arreglo y se trabaja con variables de tipo char e
int, pero siempre manejando cantidades numéricas. En la segunda parte de Arreglos en C, se verá el
trabajo con cadenas de caracteres.

CONCEPTO

A modo sintético, un arreglo en C (array) es un conjunto de variables del mismo tipo y bajo el
mismo “nombre”, diferenciándose entre ellas por un subíndice. Esto implica que puede generarse
un arreglo o más, de diversos tipos (char, int, float, etc) en casos de manejar determinados tipos de
datos que guardan cierta correlación entre ellos.
Lo “más importante en un arreglo” es que todas las variables que este contiene, se encuentran
consecutivamente una tras otra en memoria; esto implica que a la hora de acceder a los elementos
del arreglo, se logra con menos trabajo del procesador de la computadora, pues aritméticamente
solo tiene que generar un “incremento” o “decremento” para pasar de un valor al siguiente.

A continuación se listan una serie de actividades para que usted comprenda el concepto y pueda
aprovecharlo de la mejor manera.

ACTIVIDADES

1- Copie en la consola de Code Blocks, el siguiente código ¡PERO NO LO EJECUTE AÚN!

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

int main()
{
char num[12]; //Arreglo de doce elementos sin inicializar
char i;
for(i = 0; i < 12; i++)
num[i] = 0;
for(i = 0; i < 12; i++)
printf("\n Valor del elemento %d del arreglo: %d",i ,num[i]);
printf("\n\n");
system("PAUSE");
return 0;
}

Página 1 de 6
a- ¿de qué tipo es el arreglo generado? ¿Cuántas variables contiene dicho arreglo? Realice un
esquema en el cual indique todos los elementos del arreglo, pensando que el lugar de
memoria en que se almacenan dichas variables es una porción de una hoja, la cual puede
contener filas (renglones) y columnas.
b- ¿Qué función cumple en este programa el primer ciclo for?
c- ¿Qué realiza el segundo ciclo for de este programa?

IMPORTANTE (1):
Algo que usted no debe perder de vista, es que si un arreglo tiene un tamaño de
“diez” por dar un ejemplo, entonces los subíndices de dicho arreglo irán de “0,1,2,….,9”.
Siempre los elementos de un arreglo comienzan con el subíndice “cero”. Por lo tanto, el
primer elemento de un arreglo “valor” (esto es un ejemplo valido para cualquier caso), será
valor[0].

IMPORTANTE (2):
Usted se preguntará: ¿Por qué el arreglo esta creado de tipo char, siendo que se
utiliza para almacenar números en este caso, y luego en el printf se muestra con conversión “%d”?
Respuesta sencilla: “El tipo de datos char es de 8 bits de largo (256 combinaciones), y el tipo int
tiene 16 (65536). Esto “NO SIGNIFICA” que un char solo pueda/deba ser utilizado para caracteres,
sino que también puede ser utilizado para números sin signo no mayores que 255. Por eso mismo,
como en el ejemplo se utilizan cantidades chicas es que se prefiere como tipo de datos al char y no
al int. Por último, como nos interesa el valor numérico de los elementos del arreglo, es que en
printf se utiliza la conversión %d, sin importar que el arreglo sea char”.

d- Finalmente ejecute el código en el compilador, y verifique su funcionamiento.

2- Copie en la consola de Code Blocks, el siguiente código ¡PERO NO LO EJECUTE AÚN!

int main()
{
char num[12] = {1,4,6,2,10,56,31,70,12,10,12,16}; //Arreglo de doce elementos
inicializado
char i, a, b;
for(i = 0; i < 12; i++)
printf("\n Valor del elemento %d del arreglo: %d",i ,num[i]);
printf("\n\n");
a = 3;
b = 4;
printf("Valor: %d", num[a+b]);
printf("\n\n");
system("PAUSE");
return 0;
}

Página 2 de 6
a- Observe como aquí el arreglo es inicializado con valores “aleatorios”. Lo importante es
utilizar correspondientemente la sintaxis para inicializarlo (entre llaves y cada valor
separado por “comas”).
b- ¿Qué función cumple el ciclo for?
c- ¿Qué mostrará la línea printf("Valor: %d", num[a+b]); ?

3- Genere un programa que posea un arreglo de “diez” elementos de tipo entero, e


inicialícelos con valores que usted desee (evite utilizar cantidad numéricas muy
grandes). Posteriormente usted deberá calcular el promedio de la suma de todos los
valores del arreglo.
Usted debe escribir el código que solucione el problema anterior, y debe en
consecuencia compilarlo y probar su funcionamiento.

CONSEJO:
Normalmente al trabajar con arreglos que contengan datos como por ejemplo
“notas” de un curso de alumnos, suele ser necesario trabajar con promedios o cálculos
de esta índole, en la cual “el número de elementos del arreglo, posee vínculo con algún
parámetro de la operación a realizar”. Por ejemplo si se posee un arreglo de cinco
elementos que contienen notas, al calcular un promedio de ellas la operación sería
sumar los elementos y dividir por “cinco”. También debería considerarse que para sumar
los valores normalmente se realiza un acumulador con un for, y la cantidad de
iteraciones del ciclo están relacionadas al tamaño del arreglo (cinco).
En conclusión, es adecuado utilizar la directiva “define” que sirve para crear constantes
que durante el tiempo de ejecución del código no pueden ser modificadas. Supongamos
el ejemplo de recién de un arreglo de “cinco” elementos. En este caso puede resolverse
lo siguiente:

#define TAM 5 //TAM es nuestra constante de valor “cinco”

int main()
{
char num[TAM] = {1,4,6,2,10 }; //Arreglo de “cinco” elementos
for(i = 0; i < TAM; i++)

.
.
.
.
Return 0;
}

Página 3 de 6
4- Genere un programa que pida por teclado las notas de 30 alumnos de un curso, y que
luego realice las siguientes operaciones:
a- Cálculo del promedio de las notas.
b- Contabilizar la cantidad de notas que hay de cada una, considerando que las
calificaciones van del 1 al 10. Por ejemplo: se registran 2 unos, 1 dos, ….., 10 siete,
etc…
c- Imprimir un histograma con asteriscos en línea, que haga visible la cantidad de notas
de cada tipo. Esto sería:

Cantidad de uno: **

Cantidad de dos: *

Cantidad de siete: **********

IMPORTANTE: para resolver este problema utilice dos arreglos. Uno de ellos contendrá
las calificaciones, y en el otro se deberá almacenar la cantidad de notas que se repiten
de cada tipo; es decir, el segundo arreglo deberá contabilizar la frecuencia de
recurrencia de cada nota, de las ingresadas por teclado. Es recomendable que usted
realice un diagrama de flujos por “rústico” que pueda ser, de modo tal que usted ordene
la idea de como proceder, pues puede que no resulte intuitiva, y no es adecuado escribir
código en C e ir corrigiendo en base a los errores de compilación “ASÍ NO SE APRENDE
DEMASIADO”.

Como último consejo, utilice definiciones “define” para aquellos tipos de datos que sean
importantes y constantes a lo largo del código, como ya se ha ejemplificado
anteriormente.

5- Generar la resolución del mismo problema anterior, pero de manera “mucho más
optimizada”. Probablemente usted utilizó ciclos for e instrucciones if, para contabilizar
la frecuencia con que cada nota se ha hecho presente. ¡Existe una manera mucho más
eficiente de contabilizar este tipo de información, utilizando “el valor de un arreglo,
como índice de otro arreglo”. Si no logra comprender a que refiere esto, o no lo imagina,
luego se resolverá en clases, pero ¡no deje de intentar pensar en que significa esto!

6- Se posee un sistema electrónico que sensa la temperatura de un recinto cada una hora,
durante 24hs. Lo que se desea es realizar un algoritmo que pueda determinar al final del
proceso de sensado diario, cuantas veces dicha temperatura supero los 50ºC, y a qué
hora lo hizo. Por lo usted deberá:

Página 4 de 6
a- Ingresar a modo de prueba por teclado, las 24 mediciones de temperatura realizadas
a lo largo del día.
b- Realizar utilizando adecuadamente arreglos, la resolución del ejercicio en cuestión.

7- Considere el siguiente arreglo de tipo “char”, ya inicializado para este ejemplo: char
num[5] = {1,56,31,70,16};. Lo que se desea es ordenarlo de “mayor” a “menor”, sin
perder información, y haciéndolo en este mismo arreglo.
El método de resolución de este tipo de problemáticas se suele denominar “Método de
la Burbuja”. Lo que se propone es:
a- Escriba gráficamente en papel al arreglo como una columna con cinco filas, y analice
pensando en que podría usted hacer para ir intercambiando los valores dentro del
arreglo, y con ayuda de alguna variable auxiliar, de modo tal de que todos los valores
queden ordenados según se pide.
b- Una vez propuesta alguna manera de resolución que usted haya logrado, genere un
método (esto es una actividad cuyo único fin es que usted piense, y observe que esto
es cuestión pura de razonamiento).
c- Investigue a cerca del método de la burbuja, y compare con lo que usted haya
logrado realizar.

8- Considere el ejercicio número 6, en el cual usted ingresaba 24 valores de temperaturas,


considerando que estos valores se ingresan en orden desde las 00hs hasta las 23hs. En
este ejercicio se desea ordenar de menor a mayor las temperaturas ingresadas, y luego
mostrarlas en pantalla en este orden, “sin perder jamás de vista la hora a la cual fue
ingresada cada una”. Por lo tanto usted debe:
a- Ingresar aleatoriamente las temperaturas registradas.
b- Mostrar en pantalla la temperatura, y la hora a la que este fue ingresada, en el orden
cronológico de ingreso.
c- Generar el orden requerido según el método de la burbuja, y sin que se borren las
impresiones de pantalla anterior, imprimir los datos en el nuevo orden.
d- Verificar que las temperaturas y las horas a las cuales fueron ingresadas, no hayan
dejado de coincidir; esto significa que el proceso ha sido bien realizado.

9- Utilizando arreglos en C, realizar un programa que sea capaz de recibir por teclado las
calificaciones de 10 alumnos. Una vez finalizado el pedido de los valores por teclado,
imprima un mensaje con el valor del promedio. A su vez, genere un ciclo que posibilite
volver a cargar nuevos valores, o que permite culminar la ejecución. Por ejemplo al
terminar, si el usuario ingresa “1”, se continúa y si se ingresa “0” se termina el proceso y
se sale del programa.
10- Realizar un programa que permita ingresar 20 valores comprendidos entre “0 y 100”, y
efectuar una rutina de cálculo que me indique cuantos, de los valores ingresados, son
mayores a 80. A su vez, deberá imprimirse uno o varios mensajes, indicando en que
posiciones del arreglo se encuentran dichos valores mayores a 80.

Página 5 de 6
11- Existen situaciones problemáticas, en las cuales suele ser necesario reordenar valores de
forma creciente o decreciente, considerando que en su ingreso por teclado (o por
cualquier otro medio) se han ingresado de manera aleatoria.
Una técnica para realizar reordenamiento, se denomina “método de la burbuja”. Dicho
método lo que plantea es, comparar los valores que se desean ordenar (necesariamente
estos valores deben estar en un arreglo), comenzando por el primero y comparándolo con
su subsiguiente. Dependiendo como resulte la operación de comparación, dicho valor será
“permutado” con su subsiguiente. Esto se repite hasta llegar al ante último elemento del
arreglo.
Este ciclo de recorrer y comparar los valores del arreglo, debe realizarse “N-1” veces, donde
N es la cantidad de elementos que dicho arreglo posee.

Considerando la operación anteriormente descripta, realice un programa que pida 10


valores por teclado y que los ordene, según se indique en un menú de opciones, de mayor a
menor, o de menor a mayor, utilizando el método de la burbuja.

Página 6 de 6

También podría gustarte