Coruniversitaria, Corporación Universitaria de Ibagué
Facultad de Ingeniería de Sistemas

Estructuras de Datos I 

Inicio

Generalidades

Ejercicios

Talleres

Proyecto

Ejercicios "amistosos"

 Arreglos

  Un arreglo (Array) es una estructura de datos en la que se almacena una colección de elementos del mismo tipo (por ejemplo, los sueldos de los empleados de una empresa). Un arreglo contiene una lista de un número finito de elementos que se caracteriza por:
a). Almacenar los elementos del arreglo en posiciones de    memoria contiguas.
b). Los elementos son homogéneos (datos del mismo  tipo).
c). Tener un único nombre de variable (p. ej. sueldos) que representa a todos los elementos, los cuales se diferencian por un índice o subíndice.
d). Acceso directo o aleatorio a los elementos individuales del arreglo.

Los arreglos se clasifican en: Unidimensionales (vectores/listas), Bidimensionales (tablas/matrices) y Multidimensionales.

 

// Un ejemplo sencillo de arreglo en Java:

// SumaArreglo.java
// Cálculo de la suma de los elementos de un arreglo unidimensional (vector)
import javax.swing.*;

public class SumaArreglo {
public static void main( String args[] )
{
int a[] = { 1, 2, 3, 4, 5, 7, 13, 18, 25, 27 };
int total = 0;

for ( int i = 0; i < a.length; i++ )
total += a[ i ];

JOptionPane.showMessageDialog( null,
"Total de elementos en el arreglo: " + total,
"Suma de los elementos del arreglo",
JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 );
} // fin de main
} // fin de la clase SumaArreglo

// Calcular el promedio de los números impares del arreglo anterior.

___________________________________________________

// Creación de un arreglo unidimensional en Java
// Almacenar el total de toneladas de arroz cosechadas durante cada mes del año 2009
import javax.swing.*;

public class Tona {
public static void main( String args[] ){
final int T=12;
int Tonelar[] = {1,2,3,4,5,6,7,8,9,10,11,12};
String mes[] = {"Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"};
int i;
String vector="";

for ( i = 0; i < Tonelar.length; i++ ){
Tonelar[i]=Integer.parseInt(JOptionPane.showInputDialog("Cantidad de toneladas de arroz?"));
vector+= Tonelar[i]+" ";
}

JOptionPane.showMessageDialog( null, "Toneladas mensuales de arroz:\n " + vector,
"Arroz",
JOptionPane.INFORMATION_MESSAGE );

} // fin de main
} // fin de la clase Tona

// Modificar el programa para que imprima en cada línea el nombre del mes y su correspondiente cantidad de toneladas de arroz

___________________________________________________

  • Leer en un arreglo unidimensional (vector) el total de goles anotados por los equipos en el actual campeonato de fútbol profesional colombiano. Calcular el promedio de goles y determinar e imprimir cuántos equipos marcaron una cantidad de goles superior al promedio.

// Creacion de un arreglo unidimensional en C++

#include "iostream.h"
#include "conio.h"
#define lp clrscr()
#define T  20      // tamaño del arreglo

void main(){
   int goles[T],i;  // Declaración del arreglo y su índice
   int sumag=0, conte=0, ne, promeg; lp;

do{
         lp
         cout <<"Cuantos equipos hay en el campeonato? -> ";
         cin>>ne;
         if(ne<2 || ne>T){ // validación de entrada de dato
           cout << "ERROR! numero de equipos no puede ser < 2 ni > "<<T<<endl;
           cout << "Por favor, intente de nuevo...";getch();}
    }while(ne<2 || ne>T);
   cout << "Digite el total de goles marcados por los "<<ne<<"  equipos ";
   cout << "en el campeonato de futbol profesional Colombiano..."<< endl;
   for (i=0;i<ne;i++){    // para leer todo el arreglo
        cout << "Equipo No."<<(i+1)<<endl;
        cout << "Goles ->"; cin >> goles[i];
        sumag = sumag + goles[i]; lp;
   }
   promeg = sumag/ne;
   lp;
   cout << "Listado del vector... "<<endl;
   for (i=0;i<ne;i++){
         if(goles[i] > promeg)
            conte++;
   cout << goles[i] << " ";
   }
   cout <<endl<<"Promedio =  "<<promeg<<"  goles"<<endl;
   cout <<"Equipos con total de goles superior al promedio:  "<<conte;
   getch();
}

// El siguiente programa inicializa un arreglo de caracteres
#include "iostream.h"
#include "conio.h"
#include "dos.h"
#define cls clrscr()

char u[]="UNIVERSIDAD DE I B A G U E"; // Arreglo de caracteres

void titulo()
{
   int i=0,k=26;
   cls;
   while (i<=30)
   {
     gotoxy(k+1,12);
     cout << "";   //ALT-16
     gotoxy(k,12);
     cout << u[i];
     sleep(3);
     i++;
     k++;
   }
   gotoxy(38,14);
   cout << "TOLIMA";
   sleep(5);
}

void main()
{
   titulo(); //Llamado a la funcion
}

 

  • Llenar una matriz con el valor de las ventas de la discotienda "TuMusiK" durante cada mes del primer semestre del año anterior, en los géneros musicales Balada, Salsa, Pop y Vallenato. Determinar e imprimir el total de ventas de la discotienda, cuál fue la mayor venta, en qué mes y en cuál género musical se registró.

#include "iostream.h"
#include "iomanip.h"
#include "conio.h"
#define lp clrscr()
#define F 6 // cantidad de filas
#define C 4 // cantidad de columnas
char *meses []={"Enero","Febrero","Marzo","Abril","Mayo","Junio"};
char *musica[]={"Balada","Salsa","Pop","Vallenato"};
//inicializacion de arreglos de constantes tipo cadena

void main(){
   float  ventas[F][C];   // Declaracion de la matriz
   int i,j,mes,genero; float mayorv, vlr_tot=0; lp;
   cout << "Digite el total de ventas de la discotienda ";
   cout << "TuMusiK en el primer semestre..."<< endl;
   for (i=0;i<F;i++){ // para leer toda la matriz
         cout << "Total de ventas "<<meses[i]<<endl;
      for (j=0;j<C;j++){
            cout << musica[j]<<": $";
            cin >> ventas[i][j];
            vlr_tot = vlr_tot + ventas[i][j];
      } lp;
   }
   mayorv=ventas[0][0];
   mes=genero=0;
   lp;
   cout << "Listado de la tabla... "<<endl;
   for (i=0;i<F;i++){
      for (j=0;j<C;j++){
            cout <<setw(3)<< ventas[i][j]<<" ";
            if (ventas[i][j] >= mayorv){
                mayorv=ventas[i][j];
                mes=i;
                genero=j;
            }
      }
     cout << endl;
   }
   cout <<endl<< "Total ventas de TuMusiK : $"<<vlr_tot;
   cout <<endl<< "La mayor venta fue : $"<<mayorv;
   cout <<endl<< "En el mes de -> "<<meses[mes];
   cout <<endl<< "Genero musical -> "<<musica[genero];
   getch();
}

 ARREGLOS CON FUNCIONES PARAMETRIZADAS

#include "iostream.h"
#include "conio.h"
#include "stdio.h"
#define T 10
#define cls clrscr()
// Ejemplo del paso de direccion de un arreglo
// a una funcion
int i;

void ciudades(char ciud[][10])
{
 do{
   cls;
   cout << "Digite un numero (1-10) -> ";
   cin >> i;
   i--;
   if(i>=0 && i<T){
      cout <<ciud[i]<<endl;
      getch();}
 }while(i<T);
cout << "Hasta pronto!";
getch();
}

void main(){
  char ciud[T][10];
  cls;
  cout << "Digite el nombre de "<<T<< " ciudades de  Colombia:"<<endl;
  for(i=0;i<T;i++){
      cout << (i+1)<<": ";
      gets(ciud[i]);
  }
  ciudades(ciud); // paso de arreglo a la funcion
}

 Codificar los siguientes programas de computación en Lenguaje C/C++ :

  1. Escriba un programa que lea en un arreglo la estatura de los jugadores de un equipo de la NBA y permita calcular: a) Cuántos jugadores tienen estatura superior a la media,  b) Cuántos jugadores tienen estatura entre 1.95m y 2.10m, y c) Cuál es la estatura del basketbolista más alto.

  2. Escriba un programa que permita almacenar en un vector las temperaturas tomadas a las 7 de la mañana en Ibagué durante el mes de Marzo. El programa debe imprimir: a) Cuál fue la temperatura promedio  b) Cuántos dias registraron temperatura superior a la media  c) En qué día se registró la temperatura más baja  d) Porcentaje de los dias que tuvieron una temperatura inferior a 25 grados.

  3. La fábrica de ropa interior "Tanguita S.A." tiene 17 puntos de venta y necesita un programa que lea las ventas mensuales de los 17 almacenes, calcule el promedio de ventas de la fábrica y determine cuáles almacenes obtuvieron ventas superiores a la media. Utilizar arreglos paralelos.

  4. Laura y Andrea compiten por la medalla olímpica de gimnasia en el Tolima. Leer por teclado los puntajes emitidos por los 5 jueces, hallar el promedio de cada gimnasta y determinar quién es la campeona.

  5. Almacenar en un vector la nota promedio de los 7 mejores estudiantes de Sistemas de la Universidad de Ibagué y determinar cuál es el promedio del alumno que se encuentra en la parte media del arreglo.

  6. Leer por teclado 27 números enteros en un arreglo y determinar e imprimir cuántos números son primos, cuántos son negativos, ceros y positivos.

  7. Leer por teclado N números enteros en un arreglo y determinar e imprimir cuántos números son pares y cuántos son impares.

  8. Calcular la media de los N números anteriores y computar e imprimir la desviación de cada número respecto a la media. d = x[i] - media

  9. Escriba un programa que lea dos números binarios de 8 bits c/u y permita calcular e imprimir la suma y la resta de los números.

  10. Leer en un vector la edad de los alumnos del curso de Programación e imprimirlas en orden ascendente.(Utilice el método de intercambio directo).

  11. Invertir el contenido de N números enteros almacenados en un arreglo. El primero se vuelve el último; el segundo el penúltimo, etc. Ordenar e imprimir el vector.

  12. Escribir un programa que lea una frase en un arreglo y determine e imprima cuántas palabras y cuántos espacios en blanco hay en la frase.

  13. Inicializar un arreglo con los años 1981, 1982, 1983... 2004. Determine e imprima cuáles años son bisiestos. Un año es bisiesto si es divisible por 4 y no divisible por 100 o es divisible por 400.

  14. En las elecciones a la alcaldía de Chaparral se presentan 5 candidatos (con identificadores 1,2...5). Los votos para cada candidato se teclean de manera desorganizada. Escriba un programa que proporcione la siguiente información:  a) El número de votos de cada candidato al final de la elección,  b) El candidato ganador, el número de votos que obtuvo y el porcentaje correspondiente del total de la elección. (Suponga que el candidato ganador no empató en número de votos con otro candidato).

  15. Leer un arreglo unidimensional de tipo entero con las calificaciones de un grupo de tecnólogos que presentaron examen de ingreso a una empresa de desarrollo de software. Calcular e imprimir lo siguiente:  a)Media aritmética,  b) la varianza,  c) la desviación estándar, y  d) la moda.

  16. Calcular e imprimir la sumatoria de los elementos positivos de la diagonal principal de una matriz de 4 x 4.

  17. Se dispone de una tabla T de 50 números reales distintos de cero. Crear una nueva tabla en la que todos sus elementos resulten de dividir los elementos de la tabla T por el elemento K, siendo K un valor dado por teclado.

  18. Las notas de un colegio se tienen en una matriz de 30 x 5 elementos (30, número de alumnos; 5, número de asignaturas). Imprimir las notas de cada alumno y su media. Cada alumno tiene como mínimo 2 asignaturas y máximo 5, aunque no necesariamente todos los alumnos tienen 5 materias.

  19. Leer dos arreglos bidimensionales A(MxN) y B(MxN), calcular la suma de los arreglos A y B, y almacenar el resultado en el arreglo C(MxN) e imprimirlo.

  20. Llenar de ceros una matriz cuadrada A(NxN), excepto en la diagonal principal donde se debe asignar 1. Imprimir la matriz booleana resultante.

  21. Leer una matriz A(MxN) de tipo entero y generar e imprimir la matriz T(NxM) con la traspuesta de la matriz A. La transpuesta de una matriz se obtiene al escribir las filas de la matriz A como columnas.

  22. Escriba un programa que permita manejar la venta de localidades del 'Teatro Pijao', en donde las filas están marcadas de la A a la Z y cada fila tiene asientos marcados del 1 al 10. Se debe pedir al usuario la elección de asientos concretos hasta que escoja alguno que no esté reservado; posteriormente pedirá el nombre del cliente para asignarle su lugar.

  23. Los costos mensuales de producción de los 4  departamentos de una fábrica de bebidas (Gaseosa, Jugos, Refajo y Cerveza) se almacenan en una matriz de 12 x 4. Calcular e imprimir:  a) Cuántos departamentos tuvieron costo de producción mayor o igual al promedio  b) En qué mes se produjo el menor costo de producción    c) Costo promedio de producción de la fábrica durante el primer semestre.

  24. Escriba un programa que inicialice una tabla con nombres de 10 países y sus capitales. Implemente una función que acepte el nombre de un país como entrada y escriba su correspondiente capital y viceversa. La función debe ejecutarse repetidamente hasta que se introduzca la palabra Fin

  25. Codifique un programa que genere e imprima un 'cuadrado mágico' de dimensión N (N es entero, positivo e impar). Un cuadrado mágico es una matriz cuadrada de orden N, que contiene los números naturales del 1 al NxN, y donde la suma de cualquiera de los renglones, columnas o diagonales principales es siempre la misma. Puede utilizar los siguientes pasos para generar un cuadrado mágico:

    1. El número 1 se coloca en la casilla central del primer renglón.

    2. El siguiente número se coloca en la casilla correspondiente al renglón anterior y columna posterior.

    3. El renglón anterior al primero es el último, y la columna posterior a la última es la primera.

    4. Si el número es un sucesor de un múltiplo de N, no se aplica la regla 2, sino que se coloca en la casilla del renglón posterior y en la misma columna.

Arriba  

 


Inicio | Biografía | Cursos | Para pensar... | Para reflexionar... | Para reir | Enlaces

 
Profesor Gustavo Martínez Villalobos
Email: gmartin@nevado.cui.edu.co
Facultad de Ingeniería de Sistemas, Coruniversitaria
Ibagué, Tolima, COLOMBIA