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

Estructuras de Datos II 

Inicio

Generalidades

Ejercicios

Talleres

Proyecto

Ejercicios "amistosos"

 Listas y registros

 Primero, un breve  'rewind'  de Estructuras de Datos I.
 

#include "iostream.h"
#include "conio.h"
#include "stdio.h"
#define lp clrscr()
#define ESC 27
// Programita ejemplo para crear e imprimir una lista enlazada.

struct nodo{
   long codg;       // info1
   char nom[20]; // info2
   nodo *sig;      // puntero al siguiente nodo
}*p,*inicio=0;

void imprilista(){
    cout << "Contenido de la LISTA..." << endl;
    p=inicio;       // Dirección del primer nodo de la lista
    if (p == 0){
        cout << "Lista vacía!";getch();}
    else{
        while (p != 0){
                cout << p->codg << " " << p->nom << endl;
                p=p->sig;
        }
    }
    cout << endl << "Hasta pronto...!";
}

void crearlista(){
   lp;
   int tecla;
   inicio=new nodo;   // para crear el primer nodo
   if (inicio == 0){
      cout << "Memoria insuficiente!";getch();}
   else{
      p=inicio;
     do{
          lp;
          cout << "INFORMACION DEL ALUMNO" << endl;
          cout << "Codigo? : "; cin >> p->codg;
          cout << "Nombre -> "; gets(p->nom);
          p->sig=0;
          cout << "ENTER para Continuar, ESC para Salir...";
          tecla=getch();
          if (tecla != ESC){
             p->sig=new nodo;   // crea nuevo nodo
             p=p->sig;}
     }while(tecla != ESC);
   }
}

void main(){
     crearlista();lp;
     //textbackground(GREEN);textcolor(RED);
     imprilista(); getch();
}

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

  1. Crear una lista enlazada para guardar el directorio telefónico de los alumnos del curso de Datos II. Diseñar un menú con las opciones de Adicionar, Consultar, Modificar, Borrar  e Imprimir nodos de la lista.
  2. Ana y Rocío compiten por la medalla olímpica de gimnasia en el Tolima. Utilizar una estructura dinámica para leer por teclado los puntajes emitidos por los 5 jueces, hallar el promedio de cada gimnasta y determinar quién es la campeona.
  3. Crear una lista enlazada con los sueldos de N empleados e imprimir la lista en forma descendente.
  4. Escriba una función que imprima en orden inverso los elementos de una lista enlazada. Recorra la lista apilando cada elemento en una pila. Cuando alcance el fin de la lista enlazada, extraiga repetidamente la cima hasta que la pila se quede vacía.
  5. Una eliminación en una lista enlazada nos genera el siguiente problema: cuando el elemento actual es borrado, ¿cuál se convierte en el nuevo elemento actual? Discuta varias alternativas.
  6. Una cola puede ser implementada utilizando un vector y manteniendo su tamaño actual. Los elementos de la cola se almacenan en posiciones consecutivas del vector, con el primer elemento siempre en la posición 0. Escriba las funciones para Insertar y Retirar. Consultar cómo sería su implementación en lenguaje Java.  (Implementar una cola utilizando un vector NO es el método más eficiente. Trate de localizar la razón principal por la que alguna de las operaciones es ineficiente y proponga una implementación alternativa que resulte plenamente satisfactoria).

Registros

// Programa ejemplo para crear un arreglo de registros:
#include "iostream.h"
#include "conio.h"
#include "stdio.h"
#define T 20 // tamaño del arreglo
#define lp clrscr();
#define g gotoxy

struct fecha{       // Registro fecha
    int dd,mm,aa; // dia,mes,año
};
struct jugador{   // Registro jugador
    int codi,num_cami;  // código y número de camiseta
    char nombre[25],sexo;
    char equipo[20];
    float estatura;
    fecha fe_naci; // Registro anidado - fecha de nacimiento
};
// arreglo de registros de tipo jugador inicializado con un registro
jugador futbolista[T]={77,10,"David Andres Martinez V.",'M',"DEPORTES TOLIMA",1.70,18,12,85};
int i,nr;

void titulos(){
    g(15,7); cout <<"CODIGO JUGADOR:";
    g(15,8); cout <<"NOMBRE :";
    g(15,9); cout <<"SEXO <F/M> :";
    g(15,10); cout <<"ESTATURA :";
    g(15,11); cout <<"Nro. CAMISETA :";
    g(15,12); cout <<"EQUIPO :";
    g(15,13); cout <<"FECHA DE NACIMIENTO";
    g(24,14); cout <<"DIA :";
    g(24,15); cout <<"MES :";
    g(24,16); cout <<"AÑO :";
}
void adicionar(){
    for(i=1;i<nr;i++){
         lp
         g(18,5);cout <<"I N G R E S O D E J U G A D O R";
         titulos(); //Llama la funcion titulos()
         g(35,7); cin>>futbolista[i].codi;
         g(35,8); gets(futbolista[i].nombre);
         g(35,9); cin>>futbolista[i].sexo;
         g(35,10);cin >>futbolista[i].estatura;
         g(35,11);cin >>futbolista[i].num_cami;
         g(35,12);gets(futbolista[i].equipo);
         g(35,14);cin>>futbolista[i].fe_naci.dd;
         g(35,15);cin>>futbolista[i].fe_naci.mm;
         g(35,16);cin>>futbolista[i].fe_naci.aa;
    }
}
void imprimir(){
    for(i=0;i<nr;i++){
         lp
         g(18,5);cout <<"LISTA DE JUGADORES";
         titulos(); g(35,7);
         cout<<futbolista[i].codi; g(35,8);
         cout<<futbolista[i].nombre; g(35,9);
         cout<<futbolista[i].sexo; g(35,10);
         cout<<futbolista[i].estatura; g(35,11);
         cout<<futbolista[i].num_cami; g(35,12);
         cout<<futbolista[i].equipo; g(35,14);
         cout<<futbolista[i].fe_naci.dd; g(35,15);
         cout<<futbolista[i].fe_naci.mm; g(35,16);
         cout<<futbolista[i].fe_naci.aa; g(35,18);
         cout<<"Presione ENTER para continuar..."; getche();
    }
}
void main(){
    do{
         lp
         cout <<"Cuantos registros desea procesar? -> ";
         cin>>nr;
         if(nr<2 || nr>T){ // validación de entrada de dato
           cout << "ERROR! numero de registros no puede ser < 2 ni > "<<T<<endl;
           cout << "Por favor, intente de nuevo...";getch();}
    }while(nr<2 || nr>T);
    adicionar();
    imprimir();
}

  1. Un médico almacena la siguiente información de sus pacientes: Cédula, nombre, teléfono, fecha de última visita, si tiene seguridad social y un campo de observaciones. Escriba un programa con las siguientes opciones:

a) Leer los registros de todos los pacientes

b) Leer el nombre de un paciente y visualizar la fecha de su última visita.

c) Imprimir el listado de todos los pacientes ordenado alfabéticamente.

d) ¿Cuántos pacientes tienen seguridad social?

2. Escriba un programa para leer la cédula, nombre, código de programa, teléfono y sueldo de todos los profesores de la universidad. Calcular un aumento del 7% a los docentes del programa de Sistemas e imprimir un listado general de profesores ordenado por cédula.

3. En el Instituto de Educación a Distancia IDEAD se tienen los siguientes datos por cada alumno: Nombre, código, fecha de nacimiento, número de semestres cursados y calificación promedio por semestre. Escriba un programa modular que lea registros de N alumnos y: a) Imprimir el código y nombre de estudiantes con promedio general superior o igual a 4.0.  b) Actualizar los campos que correspondan cuando un estudiante ha finalizado un semestre.

 ------------------------------------------------------------------------------------


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