Está en la página 1de 26

Estructura de Datos IV Ciclo

Universidad Nacional Pedro Ruiz Gallo


Escuela Profesional Computación e Informática

Algoritmos y Estructura de Datos II

Docente: MSc Jessie Leila Bravo Jaico

SEPARATA Nro 01
Memoria Dinámica
Hasta ahora hemos trabajado con variables estáticas, las cuales no varian su tamaño
hasta la culminación del programa, desperdiciando espacio de memoria, en cambio
trabajar con memoria dinámica nos ofrece las siguientes ventajas:
 Se crean las variables conforme se requieran y se liberan cuando ya no se
necesitan.
 Optimiza el uso de la memoria.
 Más rápido, dado que trabajamos con direcciones de memoria directamente.
Para trabajar con memoria dinámica es necesario comprender un nuevo tipo de dato
llamado puntero o apuntador.

Apuntadores o Punteros

1.- Definición: Un puntero es una dirección de un dato simple o estructurado.

entero
real
Datos Simples caracter
Dirección lógico

Datos Estructurados Arreglos - Matrices


Cadenas - Tablas
Registros
Listas – Pilas - Colas
Arboles
Grafos

Un puntero ocupa 2 bytes de memoria en los tipos de memoria: Small y Tiny y 4 bytes
en los tipos de memoria: Large y Huge.

-1-
Estructura de Datos IV Ciclo

2.- Declaración de un puntero:

Sintaxis:
<tipo> * <nom_punt>
entero * px

En C/C++:
int *px;

3.- Representación:

a. Perdido: Estado del puntero cuando recien se declara. Tiene una dirección
aleatoria.

int * px;

px

b. Tierra: Estado del puntero al ser inicializado. Tiene una dirección Cero.

int * px;
px = NULL; (NULL es una constante que existe en C/C+)

px

c. Asignado: Puntero que apunta a una dirección de memoria válida.

Aplicando a variables estáticas:

int x ; (Variable estática)


int *px; (Declaración del puntero)
px = &x (El “&” extrae la dirección de la variable estática x)

px x
px es un puntero asignado a una variable estática llamada x.

Aplicando a variables dinámicas (recomendable):

int *px;
px = new int;

px
px es un puntero asignado a una variable dinámica anónima.

-2-
Estructura de Datos IV Ciclo

4. Operaciones:

4.1.- Extracción de Dirección: (&)

int x;
int * px;

px = x;

4.2.- Asignación de valores:

*px = 10;

Al trabajar con punteros se debe diferenciar claramente el apuntador de la


variable a la cual apunta. En el ejemplo anterior vemos que el apuntador está
asignado a una variable estática x, pero esto no es conveniente dado que no será
posible liberar dicha variable cuando ya no la necesitemos, es por eso que
gracias a los punteros podemos crear variables dinámicamente utilizando los
operadores de C++. Como son: new y delete.

5. Creación y liberación de variables dinámicas

Creación

Para crear una variable dinámica se utiliza el operador new, la ventaja de este tipo de
variable es que se puede crear en el momento que se requiera y liberar (que significa
liberar el espacio de memoria que ocupaba la variable creada) cuando ya no se la
necesite.

Sintaxis:

<puntero> = new <tipo_dato>;

Ejemplo:

int *px;
px

px= new int;


px

px está asignado a una variable creada dinámicamente, la cual no tiene nombre es por
ello que se le conoce como variable anónima y la única forma de acceder a ella es a
través del puntero px.
Se está creando una variable dinámica de tipo entero, esta variable ocupa 2 bytes en
memoria, por ser de tipo entero.

-3-
Estructura de Datos IV Ciclo

Liberación
Liberar una variable significa dejar libre el espacio de memoria que ocupa, la cual
puede ser usada por otra aplicación u otra variable, de esta forma se optimiza el uso de
la memoria y permite el desarrollo de aplicaciones más eficientes y rápidas.

Sintaxis:
delete <puntero>;

Ejemplo:
delete px;

Se libera el espacio de memoria que ocupa la variable que apunta px.

6. Aclarando conceptos

Se debe diferenciar el puntero de la variable o dato al cual apunta.

px

puntero variable
o dato
dinámico

Cuando la variable es estática tiene un nombre como en el caso de la variable x, creada


anteriormente, pero si la variable es dinámica, es decir, creada con el operador new, la
variable es anónima, es decir no tiene nombre, por lo tanto la única forma de acceder a
esta variable es a través del puntero.

En memoria tanto puntero como variable asignada tienen una dirección y ocupan un
espacio de memoria.

Dirección de
memoria
05F0
px 09F2

09F2 valor
Variable
20
dinámica

dirección

-4-
Estructura de Datos IV Ciclo

Por lo tanto, tenemos:

Dirección : 05F0 &px

Puntero
Valor : 09F2 px

Dirección : 09F2 px
Variable o Dato

Valor : 20 *px

Algunos ejemplos con sentencias en C:

a. Creación de una variable dinámica de tipo entero

int *px;

px = new int;

b. Asignación de un valor a la variable en forma directa

*px = 20;

c. Asignación de un valor a la variable a través de las funciones de entrada de C


(scanf):

scanf(“%d”, px);

En este caso colocamos directamente px, como segundo argumento dado que la
sintaxis de la función scanf requiere de la dirección de la variable, mas no
directamente la variable.

Con la funciones de entrada / salida de C++:

cin >> *px;

d. Mostrando la dirección de la variable dinámica y su valor

printf(“ La dirección de la variable dinámica es: %p y su valor: %d”, px, *px);

%p: Es el formato de printf para mostrar una dirección.

-5-
Estructura de Datos IV Ciclo

Con la funciones de entrada / salida de C++:

cout<<”La dirección de la variable dinámica es: ”<<px<<” y su valor: ”<<*px;

e. Mostrando la dirección del puntero y su valor

printf(“ La dirección del puntero es: %p y su valor: %p”, &px, px);

Con la funciones de entrada / salida de C++:

cout<<”La dirección del puntero es: ”<<&px<<” y su valor: ”<<px;

-6-
Estructura de Datos IV Ciclo

Puntero sobre Arreglos (Arreglo Dinámico)

1. Creación del arreglo dinámico:

int *pA;
pA = new int[5];

1º elemento: *pA = 10;


2º elemento: *( pA + 1) = 15;
3º elemento: *( pA + 2) = 16;

Notación puntero sub_índice:


pA[1] = 15;
pA[2] = 16;
pA[0] = 10;

2.- Lectura de los elementos del arreglo dinámico:

int i;

1° forma:

for(i = 0; i < 5; i++)


{
printf(“\npA[%d]: ”, i+1);
scanf(“%d”, pA+i);
}

Con la funciones de entrada / salida de C++:

for(i = 0; i < 5; i++)


{
cout<<”\npA[“<<i+1<<”]: “;
cin>>*(pA+i);
}

2º forma:
for(i = 0; i < 5; i++)
{
printf(“\npA[%d]: ”, i+1);
scanf(“%d”, &pA[i]);
}

-7-
Estructura de Datos IV Ciclo

Con la funciones de entrada / salida de C++:

for(i = 0; i < 5; i++)


{
cout<<”\npA[“<<i+1<<”]: “;
cin>>pA[i];
}

3.- Escritura de los elementos del arreglo dinámico:

int i;

1° forma:
for(i = 0; i < 5; i++)
printf(“\npA[%d]: %d”, i+1, *(pA+i));

Con la funciones de entrada / salida de C++:

for(i = 0; i < 5; i++)


cout<<”\npA[“<<i+1<<”]: “<<*(pA+i);

2º forma:
for(i = 0; i < 5; i++)
printf(“\npA[%d]: %d”, i+1, pA[i]);

Con la funciones de entrada / salida de C++:

for(i = 0; i < 5; i++)


cout<<”\npA[“<<i+1<<”]: “<<pA[i];

-8-
Estructura de Datos IV Ciclo

Ejemplo de Arreglo Dinámico

#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<math.h>

#define MAX 10

void main()
{

int *pa = new int[MAX];


int May, i, Men, Aux, j, N=0, Pos, X, Resp, Sw = 0;

clrscr();

// Inicializando Arreglo Dinámico

for(i = 0; i < MAX; i++)


pa[i] = 0;

// Menú de Opciones

do{
clrscr();
cout<<"\n\n\t\t\MENU DE OPCIONES\n\n";

cout<<"\n\t1.-Leer datos \n";


cout<<"\n\t2.-Hallar el mayor \n";
cout<<"\n\t3.-Hallar el menor \n";
cout<<"\n\t4.-Buscar un numero \n";
cout<<"\n\t5.-Ordenar en forma ascendente \n";
cout<<"\n\t6.-Ordenar en forma descendente\n";
cout<<"\n\t7.-Insertar \n";
cout<<"\n\t8.-Eliminar \n";
cout<<"\n\t9.-Mostrar \n";
cout<<"\n\t10.-Salir \n";

do{
cout<<"\n\n\t\t ¨QUE OPERACION DESEA REALIZAR\n";
cout<<"\n\n\t\t\t OPCIÓN: ";
cin>>Resp;
}while(! (Resp > 0 && Resp <= 10) );

-9-
Estructura de Datos IV Ciclo

switch(Resp){

case 1: clrscr();cout<<"\n\t\t\t***Lectura de datos***\n\n";

do{
cout<<"\n\t Ingrese el número de elementos:";
cin>>N;
}while(!(N > 0 && N <= MAX));

for(i = 0; i < N; i++)


do {
cout<<"\n Elemento "<<i+1<<": ";
cin>>pa[i];
}while(!(pa[i] > 0));
break;

case 2: clrscr();cout<<"\n\t\t\t***Hallar el mayor***\n\n";


May = pa[0];

for(i = 0; i < N; i++)


if(pa[i] > May)
May = pa[i];

cout<<"\n\t\t\tEl mayor número es:"<<May;

for(i = 0; i < N; i++)


if(pa[i] == May)
cout<<"\n\n El elemento está en la posición: "<<i+1;

getch();break;

case 3: clrscr();cout<<"\n\t\t\t***Hallar el menor***\n\n";

Men = pa[0];

for(i = 0; i < N; i++)


if(pa[i] < Men)
Men = pa[i];

cout<<"\n\t\t El menor es:"<<Men;

for(i = 0; i < N; i++)


if(pa[i] == Men)
cout<<"\n\n El elemento esta en la posicion: "<<i+1;

getch(); break;

- 10 -
Estructura de Datos IV Ciclo

case 4: clrscr();cout<<"\n\t\t\t***Búsqueda de un número***\n\n";


do
{
cout<<"Ingrese el número a buscar: ";
cin>>X;
}while(! (X > 0));

for(i = 0; i < N; i++)


if(pa[i] == X)
{
cout<<"\n Posición: "<<i+1;
Sw = 1;
}

if(Sw == 0)
cout<<" \n El número NO existe";

getch();break;

case 5: clrscr();cout<<"\n\t\t\t***Ordenar en forma ascendente***\n\n";

for(i =0; i<N-1; i++)


for(j = i+1; j<N; j++)
if(pa[i] > pa[j])
{
Aux = pa[i];
pa[i] = pa[j];
pa[j] = Aux;
}

for(i = 0; i < N; i++)


cout<<"\n Elemento"<<”[”<<i+1<<”]: ”<<pa[i];
getch();break;

case 6:clrscr();cout<<"\n\t\t\t***Ordenar en forma descendente***\n\n";

for(i =0; i< N-1; i++)


for(j = i+1; j<N; j++)
if(pa[i] < pa[j])
{
Aux = pa[i];
pa[i] = pa[j];
pa[j] = Aux;
}

for(i = 0; i < N; i++)


cout<<"\n Elemento"<<”[”<<i+1<<”]: ”<<pa[i];
getch();break;

- 11 -
Estructura de Datos IV Ciclo

case 7: clrscr();cout<<"\n\t\t\t***Insertar***\n\n";

if(N < MAX)


{
do
{
cout<<"\n Ingresar la posición a insertar: ";
cin>>Pos;
}while(! (Pos > 0 && Pos <= N+1) );

do
{
cout<<"Ingrese valor a insertar: ";
cin>>X;
}while(!(X > 0));

for(i = N; i > Pos-1; i--)


pa[i]=pa[i-1];

pa[Pos - 1] = X;
N++;
cout<<”\nNuevo arreglo\n”;
for(i = 0; i < N; i++)
cout<<"\n Elemento"<<”[”<<i+1<<”]: ”<<pa[i];
getch();

}
else
{
cout<<"\n No hay espacio ";
getch();
}
break;

case 8: clrscr();cout<<"\n\t\t\t***Eliminar***\n\n";

if(N > 0)
{
do
{
cout<<"\n Ingresar la posición a eliminar: ";
cin>>Pos;
}while(! (Pos > 0 && Pos <= N) );

for(i = Pos - 1; i < N - 1; i++)


pa[i] = pa[i+1];

N--;

- 12 -
Estructura de Datos IV Ciclo

cout<<”\nNuevo arreglo\n”;
for(i = 0; i < N; i++)
cout<<"\n Elemento"<<”[”<<i+1<<”]: ”<<pa[i];
getch();

}
else
{
cout<<" \n No hay elementos a eliminar ";
getch();
}
break;

case 9: clrscr();cout<<"\n\t\t\t***Mostrar el Arreglo***\n\n";

for(i = 0; i < N; i++)


cout<<"\n Elemento"<<”[”<<i+1<<”]: ”<<pa[i];
getch();break;

case 10: clrscr();cout<<"\n\t\t\t***Salir del Programa***\n\n";


delete [] pa;
getch();break;
}
} while(Resp != 10);
}

- 13 -
Estructura de Datos IV Ciclo

Puntero sobre Registro (Registro Dinámico)

Definición de la Estructura Alumno

Lo primero que debemos hacer es definir el registro Alumno como se indica a


continuación:

struct Alumno
{ char Codigo [MAXCOD];
char Nombre [LIM];
int Edad;
int Notas [MAXNO];
};

Donde: MAXCOD, LIM y MAXNO son constantes.

Creación del Registro Dinámico Alumno

Luego creamos el puntero que debe ser de tipo Alumno, para después crear con el
operador new el registro dinámico Alumno.

Alumno *pA; (Creando el puntero de tipo Alumno)


pA = new Alumno; (Creando la variable dinámica de tipo Alumno)

Diagrama de Datos

Código[ ] Edad

pA
Nombre[ ] Notas[ ]

Acceso a los campos del Registro Alumno

Existen dos formas de acceder a los campos del registro Alumno:

a) (.) punto, solo se utiliza cuando el lado izquierdo es un valor


b)  (indirección) Se utiliza cuando el lado izquierdo es un puntero

- 14 -
Estructura de Datos IV Ciclo

1º forma:
( * pA) . Edad = 20;
valor

2º forma:
pA  Edad = 20;
dirección

Ejemplos:

a. Asignando un valor de 18 al campo Edad del Alumno

pA  Edad = 18;

b. Copiando cadenas

strcpy (pA  Nombre, "Edwin");

c. Leyendo el campo Nombre del Alumno

printf("Ingrese nombre:");
scanf (“%s”, pA  Nombre);

cout<<”Ingrese Nombre:”;
cin>>pANombre;

Operaciones Básicas

a. Inicializar la estructura Alumno

pACodigo[0] = NULL;
pANombre[0] = NULL;
pAEdad = 0;
for(int i = 0; i < MAXNO; i++)
pANotas[i] = 0;

b. Leer la estructura Alumno

cout<<”Ingrese Código del alumno: ”;


cin>> pACodigo;
cout<<”Ingrese Nombre del alumno: ”;
cin>> pANombre;
cout<<”Ingrese Edad del alumno: ”;
cin>> pAEdad;

- 15 -
Estructura de Datos IV Ciclo

cout<<”Ingrese Notas del alumno: ”;


for(int i = 0; i < MAXNO; i++)
{ cout<<”Nota[“<<i+1<<”]:”;
cin>>pANotas[i]; }

c. Mostrar la estructura Alumno

cout<<”Código del alumno: ”<< pACodigo;


cout<<”Nombre del alumno: ”<<pANombre;
cout<<”Edad del alumno: ”<<pAEdad;
cout<<”Notas del alumno: ”;
for(int i = 0; i < MAXNO; i++)
cout<<”Nota[“<<i+1<<”]: ”<<pANotas[i];

d. Liberar la estructura Alumno

delete pA;

- 16 -
Estructura de Datos IV Ciclo

Ejemplo de Registro Dinámico

#include<conio.h>
#include<iostream.h>
#include<dos.h>
#include<ctype.h>
#include<stdio.h>

#define MAXCOD 11
#define LIM 50
#define MAXSEX 2

//Definición de la estructura Alumno

struct Alumno
{
char Codigo[MAXCOD];
char Nombre[LIM];
int Edad;
char Telefono [8];
char Direccion[LIM];
int Sexo; //Campo Categorizado
};

char Sexo[MAXSEX][10]={"Femenino","Masculino"};

void main()
{
clrscr();
Alumno*pA;
pA=new Alumno;

// Inicializamos el Registro Dinamico

pA->Codigo[0]=NULL;
pA->Nombre[0]=NULL;
pA->Edad=0;
pA->Telefono[0]=NULL;
pA->Direccion[0]=NULL;
pA->Sexo=0;

//Lectura de Datos
cout<<"\n\tBIENVENIDOS A LA UNIVERSIDAD SANTO TORIBIO DE MOGROVEJO"<<"\n";

getch();

gotoxy(22,7);cout<<" Nuevo Alumno ";

- 17 -
Estructura de Datos IV Ciclo

gotoxy(22,11);cout<<" Codigo: ";


cin>>pA->Codigo;
gotoxy(22,12);cout<<" Nombre: ";
gets(pA->Nombre);

do{
gotoxy(22,13);cout<<" Edad : "; clreol();
cin>>pA->Edad;
}while( !(pA->Edad >= 19 && pA->Edad <= 30));

gotoxy(22,14);cout<<" Direccion: ";


gets(pA->Direccion);

gotoxy(22,15);cout<<" Telefono: ";


cin>>pA->Telefono;

do{
gotoxy(22,16);cout<<" Sexo[0:Femenino 1:Masculino]: "; clreol();
cin>>pA->Sexo;
}while(!(pA->Sexo == 0 || pA->Sexo == 1));

//Mostrar el alumno ingresado

cout<<"\n\t Ahora se observarán los datos ingresados";

clrscr();

cout<<"\n\t\t Alumno "<<"\n\n";


cout<<"\n\n\t Codigo:"<<pA->Codigo;
cout<<"\n\n\t Nombre:"<<pA->Nombre;
cout<<"\n\n\t Edad:"<<pA->Edad;
cout<<"\n\n\t Direccion:"<<pA->Direccion;
cout<<"\n\n\t Telefono :"<<pA->Telefono;
cout<<"\n\n\t Sexo :"<<Sexo[pA->Sexo];

getch();

//Liberar el arreglo dinámico

delete pA;

- 18 -
Estructura de Datos IV Ciclo

Puntero sobre Arreglo de Registros


Definición de la Estructura Alumno
Primero definimos la estructura Alumno como sigue:
struct Alumno
{ char Codigo [MAXCOD];
char Nombre [LIM];
int Edad;
int Notas [MAXNO];
};
Creación del arreglo dinámico de Alumnos
Luego creamos el puntero que debe ser de tipo Alumno, para después crear con el
operador new el arreglo dinámico de Alumnos.

Alumno *pA; (Creando el puntero de tipo Alumno)


pA = new Alumno[MAX]; (Creando un arreglo dinámico de 5 Alumnos)
int N; (Número de elementos ingresados)

Diagrama de Datos

[]
Código[ ] Edad

pA
Primer Alumno
Nombre[ ] Notas[ ]
0

Código[ ] Edad

Nombre[ ] Notas[ ] Segundo Alumno


1

Código[ ] Edad

Nombre[ ] Notas[ ]
2 Tercer Alumno

...
- 19 -
Estructura de Datos IV Ciclo

Acceso a los Campos:

Asignar un valor a la edad del primer alumno:


pA[0]. Edad = 18;

Asignar un valor a la primera nota del 2º alumno:


pA[1].Notas [0] = 16;

Leer la edad del segundo alumno:


scanf(“%d”, &pA[1]. Edad);

cin >> pA[1].Edad;

Mostrar el nombre del primer alumno:


printf(“Nombre: %s”, pA[0].Nombre);

cout<<”Nombre: “<<pA[0].Nombre;

Operaciones Básicas

a. Inicializar el Arreglo dinámico de Alumnos

for(int i = 0; i < MAX; i++)


{ pA[i].Codigo[0] = NULL;
pA[i].Nombre[0] = NULL;
pA[i].Edad = 0;
for(int j = 0; j < MAXNO; j++)
pA[i].Notas[j] = 0;
}

b. Leer el Arreglo dinámico de Alumnos


do{
cout<<"\n\t Ingrese el número de alumnos: ";
cin>>N;
}while(!(N > 0 && N <= MAX));

for(int i = 0; i < N; i++)


{ cout<<”Ingrese Código del alumno: ”;
cin>> pA[i].Codigo;
cout<<”Ingrese Nombre del alumno: ”;
cin>> pA[i].Nombre;
cout<<”Ingrese Edad del alumno: ”;
cin>> pA[i].Edad;
cout<<”Ingrese Notas del alumno: ”;
for(int j = 0; j < MAXNO; j++)
{ cout<<”Nota[“<<j+1<<”]:”;
cin>>pA[i].Notas[j]; }
}

- 20 -
Estructura de Datos IV Ciclo

c. Mostrar el Arreglo dinámico de Alumnos

for(int i = 0; i < MAX; i++)


{ cout<<”Código del alumno: ”<< pA[i].Codigo;
cout<<”Nombre del alumno: ”<<pA[i].Nombre;
cout<<”Edad del alumno: ”<<pA[i].Edad;
cout<<”Notas del alumno: ”;
for(int j = 0; j < MAXNO; j++)
cout<<”Nota[“<<j+1<<”]: ”<<pA[i].Notas[j];
}

d. Liberar el Arreglo dinámico de Alumnos

delete [ ] pA;

- 21 -
Estructura de Datos IV Ciclo

Ejemplo de Arreglo de Registros


Elaborar un programa que permita registrar los datos de N alumnos, tales como: código,
nombre, edad, dirección, teléfono, sexo y realizar las siguientes operaciones:

a. Leer los alumnos


b. Promedio de las Edades
c. Qeé alumno tiene la mayor edad
d. Cuántos alumnos hombres y mujeres hay
e. Ordenar por el campo Nombre en forma ascendente
f. Mostrar Alumnos

#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<ctype.h>

#define MAX 10
#define MAXCOD 11
#define LIM 50
#define MAXSEX 2

struct Alumno
{
char Codigo[MAXCOD];
char Nombre[LIM];
int Edad;
int Sexo; //Campo categorizado
char Direccion[LIM];
char Telefono[8];
};

char Sexo[MAXSEX][10] = {"Femenino", "Masculino"};

void main()
{
clrscr();

Alumno *pA=new Alumno[MAX];

int Rpta;
int May=0,i,j,N=0,c=0,v=0,Suma=0;
float Prom;

- 22 -
Estructura de Datos IV Ciclo

//Inicializando Arreglo de Registros

for(i=0;i<MAX;i++)
{
pA[i].Codigo[0]=NULL;
pA[i].Nombre[0]=NULL;
pA[i].Edad=0;
pA[i].Sexo=0;
pA[i].Direccion[0]=NULL;
pA[i].Telefono[0]=NULL;
}
//Menú de Opciones
do
{
clrscr();
cout<<"\n\n\t\t\MENU DE OPCIONES\n\n";
cout<<"\n\t1.-Leer datos \n";
cout<<"\n\t2.-Promedio de las Edades \n";
cout<<"\n\t3.-Mayor Edad \n";
cout<<"\n\t4.-Cuántos alumnos hombres y mujeres hay \n";
cout<<"\n\t5.-Ordenar por el campo Nombre en forma ascendente\n";
cout<<"\n\t6.-Mostrar Alumnos\n";
cout<<"\n\t7.-Salir del Programa \n";
do{
cout<<"\n\n\t\t ¨¿QUE OPERACION DESEA REALIZAR? \n";
cout<<"\n\n\t\t\t OPCION: ";
cin>>Rpta;
}while(! (Rpta > 0 && Rpta <= 7) );

switch(Rpta)
{
case 1:clrscr();cout<<"\n\t\t\t***Lectura de datos***\n\n";
do{
cout<<"\n\t Ingrese el número de alumnos: ";
cin>>N;
}while(!(N > 0 && N <= MAX));

- 23 -
Estructura de Datos IV Ciclo

for(i=0;i<N;i++)
{
cout<<"\n\n\t alumno"<<i+1;
cout<<"\n Codigo: ";
cin>>pA[i].Codigo;
cout<<"\n Nombre: ";
gets (pA[i].Nombre);
do
{
cout<<"\n**Edad(Entre 16 a 59): ";
cout<<"\n Edad: ";
cin>>pA[i].Edad;
}while(!(pA[i].Edad>15 && pA[i].Edad<60));
do
{
cout<<"\n Sexo[0:Femenino 1:Masculino]: ";
cin>>pA[i].Sexo;
}while(!(pA[i].Sexo==0 || pA[i].Sexo== 1));
cout<<"\n Direccion: ";
gets(pA[i].Direccion);
cout<<"\n Telefono: ";
cin>>pA[i].Telefono;
}
break;

case 2:clrscr();cout<<"\n\t\t\t***Promedio de la Edad***\n\n";

for(i = 0;i < N;i++)


Suma += pA[i].Edad;
Prom=(float)Suma/N;

cout<<"\n\n El Promedio de las Edades es: "<<Prom;


getch();break;

case 3: clrscr();cout<<"\n\t\t\t***Mayor Edad***\n\n";

for(i = 0;i < N;i++)


if(pA[i].Edad > May)
May = pA[i].Edad;
cout<<"\n\n La Mayor Edad es:"<<May;

for(i=0;i<N;i++)
if(pA[i].Edad == May)
cout<<"\n\n Alumno: "<<pA[i].Nombre;
getch();break;

- 24 -
Estructura de Datos IV Ciclo

case 4:clrscr();cout<<"\n\t\t\t***Mujeres y hombres***\n\n";

for(i=0;i<N;i++)
{
if(pA[i].Sexo == 0)
c++;
else
v++;
}
cout<<"\n\n\t**El número de alumnos hombres es:"<<v;
cout<<"\n\n\t**El número de alumnos mujeres es:"<<c;
getch();break;

case 5:clrscr();cout<<"\n\t**Ordenar por el Nombre**\n\n";


//Primero ordenamos el arreglo
Alumno Aux;
for(i = 0;i < N-1; i++)
for(j = i+1; j < N; j++)
if(strcmp(pA[i].Nombre,pA[j].Nombre)>0)
{ Aux=pA[i];
pA[i]=pA[j];
pA[j]=Aux;
}
//Ahora mostramos los datos de los alumnos

for(i = 0; i < N; i++)


{
cout<<"\n\n***Alumno "<<i+1<<"***\n";
cout<<"\n Codigo: "<<pA[i].Codigo;
cout<<"\n Nombre: "<<pA[i].Nombre;
cout<<"\n Edad: "<<pA[i].Edad;
cout<<"\n Sexo: "<<Sexo[pA[i].Sexo];
cout<<"\n Direccion: "<<pA[i].Direccion;
cout<<"\n Telefono: "<<pA[i].Telefono;
}
getch();break;

case 6: clrscr();cout<<"\n\t\t\t***Mostrar***\n\n";
for(i = 0; i < N; i++)
{
cout<<"\n\n***Alumno "<<i+1<<"***\n";
cout<<"\n Codigo: "<<pA[i].Codigo;
cout<<"\n Nombre: "<<pA[i].Nombre;
cout<<"\n Edad: "<<pA[i].Edad;
cout<<"\n Sexo: "<<Sexo[pA[i].Sexo];
cout<<"\n Direccion: "<<pA[i].Direccion;
cout<<"\n Telefono: "<<pA[i].Telefono;
}
getch();break;

- 25 -
Estructura de Datos IV Ciclo

case 7:clrscr();cout<<"\n\t\t\t***Salir del Programa***\n\n";


delete [] pA;
getch();break;
}

} while(Rpta != 7);

- 26 -

También podría gustarte