Arreglo de Objetos y Ordenamiento Arreglos-1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 17

Arreglo de Objetos.

En estas notas de clase, se describe el concepto de


arreglos, métodos de ordenamiento y los tipos de
búsquedas más frecuentes en estas estructuras de
datos.
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

Arreglos de Objetos y Algoritmos de Ordenamiento en Arreglos

Introducción

Hemos visto anteriormente el concepto de arreglo unidimensional, que como cualquier


otra estructura de datos permite el almacenamiento de información, para su posterior
procesamiento.
Hasta el momento se ha trabajado con arreglos de tipo primitivos (se almacenaban
enteros, numéricos flotantes), pero hay algunas situaciones en que necesitamos
procesar información de un conjunto de entidades como alumnos, docentes, productos
etc.
En estos casos los arreglos nos permiten almacenar en cada celda de la estructura, “una
referencia” que apunta a un determinado objeto de una entidad.

Arreglo de Objetos

Para manipular arreglo de objetos en lenguaje Java, hay que cumplir los
siguientes pasos:

1. Declarar la variable que referenciará al arreglo: Es una variable que llevará la


referencia (dirección) de la primera posición del arreglo. Para ejemplificar vamos a usar la
clase alumno vista anteriormente en clase, para crear un arreglo de alumnos, entonces
primero definimos la variable “vec” de tipo Alumno:

Alumno vec[] ; //crea la variable que referencia al vector

Vec

2. Crear el arreglo de referencias: es un arreglo que llevará las referencias (direcciones)


de los objetos creados. Creamos el arreglo de referencias a Alumno:

vec = new Alumno [4]; //crea el arreglo con lugar para 4 referencias

Vector de referencias
Vec

3. Crear los objetos: crear cada objeto alumno y asignarle la referencia en algún lugar del
arreglo. Por ejemplo, podremos creamos todos los objetos juntos en un ciclo:

for (int i= 0; i< vec.length; i++)


vec[i] = new Alumno (...); //crea un objeto Alumno

Página-2-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

Vector de referencias
Vec

Objetos Alumno

4. Manipular los objetos: Acceder a cada objeto invocando algún método. Por ejemplo,
podremos invocar al método toString():

for (int i= 0; i< vec.length; i++)


System.out.println(“Alumno ”+ i +” : ”+vec[i].toString());

Ejercicio propuesto de aplicación del tema.

Usando la clase alumno, crear una clase ListadoAlumnos que maneje varios alumnos. Se pide
la realización de los siguientes métodos:

a. Constructores.
b. cargarAlumno(int indice, Alumno a)
c. toString()
d. BorrarAlumno(int legajo)
e. PromedioGeneral()
f. MayorPromedio()

Implementación.

Alumno ListadoAlumnos Aplicación


Tiene uno o más Usa un
main()

Clase de dato Clase contenedora Clase de ejecución

Codificación en Java

//Alumno.java

public class Alumno


{
private int legajo;
private String nombre;
private float promedio;

public Alumno()
{
legajo = 0;
nombre = "";

Página-3-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

promedio = 0;}

public Alumno(int l, String n, float p)


{

legajo = l;
nombre = n;
promedio = p; }

public void setNombre(String n)


{ nombre = n; }

public void setPromedio(float p)


{ promedio = p; }

public int getLegajo()


{ return legajo; }

public String getNombre()


{ return nombre; }

public float getPromedio()


{ return promedio; }

public String toString()


{
String aux;
aux = legajo+ ", "+nombre+", "+promedio;
return aux;
}
}//fin de la clase Alumno.

//ListadoAlumnos.java

class ListaAlumno
{ private Alumno vec[]; //Atributo.

public ListaAlumno(int n)
{
vec=new Alumno[n];
for(int i=0; i<n;i++)//No obligatorio…
vec[i]=null;
}

public void cargarAlumno(int indice,Alumno a)


{ vec[indice]=a;}

public String toString()


{ String aux= "Los alumnos son:";
for(int i=0;i<vec.length;i++)
aux+=vec[i].toString()+ ";";
return aux;
}

public boolean BorrarAlumno(int legajo)


{
boolean b=false;

for(int i=0;i<vec.length;i++)
if(vec[i]!=null)
if(leg==vec[i].getLegajo())
{
vec[i]=null;
b=true;
break;

Página-4-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

return b;
}

public float PromedioGeneral()


{
float p=0;
for(int i=0;i<vec.length;i++)
if(vec[i]!=null)
p+=vec[i].getPromedio();

return(p/vec.length);
}

public Alumno MayorPromedio()


{
float mayor = 0;
Alumno aux = null;
for(int i = 0; i < vec.length; i++)
if(vec[i] != null) && (vec[i].getPromedio() > mayor)
{
mayor = vec[i].getPromedio();
aux = vec[i];
}
return aux;
}
}//fin de la clase ListadoAlumnos

//Aplicación.java

public class Aplicacion


{
public static void main (String args[])
{ //Declaración de variables auxiliares
int l,valorLeg;
int num=0;
String n="";
float p;
Alumno alu=null;

//declara referencias a objeto ListaALumno


ListaAlumno a;
System.out.println("Ingrese nro de alumnos:");
num=In.readInt();
//crea el primer objeto ListaAlumnos(vector)
a = new ListaAlumno(num); //llama al constructor con
argumentos
for(int i=0;i<num;i++)
{ System.out.println("Legajo:");
l=In.readInt();
System.out.println("Nombre:");
n=In.readLine();
System.out.println("Promedio:");
p=In.readFloat();
alu=new Alumno(l,n,p);
a.CargarAlumno(i,a);//Carga un obj. Alumno en el arreglo
//en la posición i.
}

System.out.println(a.toString());//forma de mostrar el
arreglo que contiene los alumnos.

//Invoco al metodo que permite borrar


System.out.println("Ingrese el leg. del alumno a borrar:");
valorLeg=In.readInt();

Página-5-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

if(a.BorrarAlumno(valorLeg)==true)
{ System.out.println(“Se pudo borrar el alumno!”);}
else
{ System.out.println(“NO pudo borrar el alumno!”);}

System.out.println(“Promedio General:” + a. PromedioGeneral ());

System.out.println("El alumno de mayor de promedio es:"+


a.getMayorProm());
}
}//fin clase aplicacion

Algoritmos de Ordenamiento en Arreglos

¿Qué es ordenamiento?

Es la operación de arreglar los elementos de un arreglo en algún orden secuencial de


acuerdo a un criterio de ordenamiento.
El propósito principal de un ordenamiento es el de facilitar las búsquedas de los valores
almacenados en el arreglo.

Ejemplos de ordenamientos:
Dir. Telefónico, tablas de contenido, bibliotecas y diccionarios, etc.

El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en
una secuencia tal que represente un orden, el cual puede ser numérico, alfabético o incluso
alfanumérico, ascendente o descendente.

¿Cuándo conviene usar un método de ordenamiento?

Cuando se requiere hacer una cantidad considerable de búsquedas y es importante el factor


tiempo.

Tipos de ordenamientos:
Los 2 tipos de ordenamientos que se pueden realizar son: los internos y los externos.

Los internos:

Son aquellos en los que los valores a ordenar están en memoria principal, por lo que se
asume que el tiempo que se requiere para acceder cualquier elemento sea el mismo (a[1],
a[500], etc).

Los externos:

Son aquellos en los que los valores a ordenar están en memoria secundaria (disco, cinta,
cilindro magnético, etc), por lo que se asume que el tiempo que se requiere para acceder a
cualquier elemento depende de la última posición accesada (posición 1, posición 500, etc).

Eficiencia en tiempo de ejecución:

La eficiencia de los algoritmos se mide por el n mero de comparaciones e intercambios que


tienen que hacer, es decir, se toma n como el n mero de elementos que tiene el arreglo o
vector a ordenar y se dice que un algoritmo realiza O(n2) comparaciones cuando compara n
veces los n elementos, n x n = n2

Una medida de eficiencia es:

Contar el # de comparaciones (C)


Contar el # de movimientos de items (M)
Estos están en función de el #(n) de items a ser ordenados.

Página-6-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

Un "buen algoritmo" de ordenamiento requiere de un orden n log n comparaciones.

Algoritmos de ordenamiento:

Internos:

Inserción directa.
Inserción directa.
Inserción binaria.

Selección directa.
Selección directa.

Intercambio directo.
Burbuja.
Shake.

Inserción disminución incremental.


Shell.

Ordenamiento de árbol.
Heap.
Tournament.

Sort particionado.
Quick sort.
Merge sort.
Radix sort.
Cálculo de dirección.

Externos:
Straight merging.
Natural merging.
Balanced multiway merging.
Polyphase sort.
Distribution of initial runs.

Clasificación de los algoritmos de ordenamiento de información:

El hecho de que la información esta ordenada, nos sirve para poder encontrarla y accesarla
de manera más eficiente ya que de lo contrario se tendrá que hacer de manera secuencial.
A continuación se describirán 4 grupos de algoritmos para ordenar información:

Algoritmos de inserción:

En este tipo de algoritmo los elementos que van a ser ordenados son considerados uno a la
vez. Cada elemento es INSERTADO en la posición apropiada con respecto al resto de los
elementos ya ordenados.
Entre estos algoritmos se encuentran el de INSERCION DIRECTA, SHELL SORT, INSERCION
BINARIA y HASHING.

Algoritmos de intercambio:

En este tipo de algoritmos se toman los elementos de dos en dos, se comparan y se


INTERCAMBIAN si no están en el orden adecuado. Este proceso se repite hasta que se ha

Página-7-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

analizado todo el conjunto de elementos y ya no hay intercambios. Entre estos algoritmos se


encuentran el BURBUJA y QUICK SORT.

Algoritmos de selección:

En este tipo de algoritmos se SELECCIONA o se busca el elemento mas pequeño (o más


grande) de todo el conjunto de elementos y se coloca en su posición adecuada. Este proceso
se repite para el resto de los elementos hasta que todos son analizados. Entre estos
algoritmos se encuentra el de SELECCION DIRECTA.

Algoritmos de enumeración:

En este tipo de algoritmos cada elemento es comparado contra los demás. En la comparación
se cuenta cuántos elementos son más pequeños que el elemento que se esta analizando,
generando así una ENUMERACION. El número generado para cada elemento indicará su
posición.

El que usaremos para dar un cierto orden a los elementos contenidos en un arreglo es el de
selección directa.

Método de Selección.

Proceso en general. Por ejemplo para lograr un ordenamiento de menor a mayor.

1) Recorrer el arreglo usando dos índices. (i,j)


2) La variable i comenzará valiendo cero. (Apunta al primer elemento)
3) La variable j apuntará al elemento siguiente, indicado por i. Con este índice se
recorre hasta el final del arreglo, con un ciclo for.
4) En cada pasada del ciclo se compara el valor indicado por i, con el valor indicado
por j.
5) Es decir si se cumple: vec[i]>vec[j] , hago el intercambio.

El algoritmo de selección directa en Java, para un arreglo que almacena tipos de datos
primitivos, por ejemplo arreglo que almacena valores numéricos:

public void SeleccionDirecta()


{ int aux;
for(int i=0;i<vec.length-1;i++)
{ for(int j=i+1;vec.length;j++)
{ if(vec[i]>vec[j])
{ aux=vec[i]; //Intercambio…
vec[i]=vec[j];
vec[j]=aux;

}
}
}
}

En el caso de querer aplicar ordenamiento en un arreglo que almacena referencias a objetos,


el algoritmo queda de la siguiente forma.
Para ello tomaremos como ejemplo el caso explicado en la página 2, en la que almacenamos
alumnos en el arreglo.
Si quisiéramos ordenar el arreglo los alumnos por su número de legajo (en orden
ascendente), el algoritmo de selección directa en lenguaje Java tendría la siguiente
modificación:

Página-8-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

public void SeleccionDirecta()


{ Alumno aux=null; //TENER EN CUENTA ESTA DECLARACIÓN
for(int i=0;i<vec.length-1;i++)
{ for(int j=i+1;vec.length;j++)
{ if(vec[i].getLegajo()>vec[j].getLegajo())
{ aux=vec[i]; //Intercambio, guardo en aux el Alumno NO solo el legajo!…
vec[i]=vec[j];
vec[j]=aux;

}
}
}
}

Si quisiéramos ordenar el arreglo los alumnos por nombre (en orden ascendente), el
algoritmo de selección directa en lenguaje Java tendría la siguiente modificación:

public void SeleccionDirecta()


{ Alumno aux=null; //TENER EN CUENTA ESTA DECLARACIÓN
for(int i=0;i<vec.length-1;i++)
{ for(int j=i+1;vec.length;j++)
{ if(vec[i].getNombre().compareTo(vec[j].getNombre())>0)//Significa que
//cadena1 es mayor que cadena 2
{ aux=vec[i]; //Intercambio, guardo en aux el Alumno NO solo el legajo!…
vec[i]=vec[j];
vec[j]=aux;

}
}
}
}

En este caso la variante del algoritmo con respecto al anterior, es la inclusión del método
compareTo, incluido en clase String y que nos facilita la comparación de cadenas de
caracteres.

Para realizar un ordenamiento de mayor a menor, lo único que de se debe modificar en el


algoritmo es el cambio de signo en el condicional, es decir en lugar de mayor (>) debe ser
menor(<).

Búsqueda en Arreglos: Búsqueda Lineal

De las búsquedas en un arreglo es la más simple, pero es la menos eficiente. La idea es


buscar un valor en el arreglo de manera secuencial, es decir desde la primera posición del
arreglo hasta el final del mismo.

public int busquedaLineal(int n)


{ int i;
for (i=0;i<a.length;i++)
{ if (a[i] == n)
{ return i+1;
}
}
return -1; }

Página-9-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

Búsqueda Binaria

La búsqueda binaria sólo se puede implementar si el arreglo está ordenado. La idea consiste
en ir dividiendo el arreglo en mitades. Por ejemplo supongamos que tenemos este arreglo:

La condición para aplicar la búsqueda binaria, es que el arreglo este ordenado.

Por ejemplo:

int arreglo[10] = {2,4,6,8,10,12,14,16,18,20};

La clave que queremos buscar es 6. El algoritmo funciona de la siguiente manera

1. Se determinan un índice denominado izquierdo y un índice denominado derecha,


Izq=0 e Der=9 respectivamente.
2. Se determina un índice central, centro = (Izq + Der)/2, en este caso quedaría centro
= 4.
3. Evaluamos si arreglo [centro] es igual a la clave de búsqueda, si es igual ya
encontramos la clave y devolvemos centro(la posición donde está el valor buscado).
4. Si son distintos, evaluamos si arreglo[centro] es mayor o menor que la clave, como
el arreglo está ordenado al hacer esto ya podemos descartar una mitad del arreglo
asegurándonos que en esa mitad no está la clave que buscamos. En nuestro caso
arreglo[centro] = 4 < 6, entonces la parte del arreglo arreglo[0...4] ya puede
descartarse.
5. Reasignamos Izq o Der para obtener la nueva parte del arreglo en donde queremos
buscar. Izq, queda igual ya que sigue siendo el tope. Der lo tenemos subir hasta 5,
entonces quedaría Izq = 9, Der = 5. Y volvemos al paso 2.

Si la clave no fuese encontrada en algún momento Izq > Der, con un while vamos a
controlar esta condición para salir del ciclo en tal caso y devolver -1 (clave no encontrada).

La codificación para efectuar la búsqueda binaria es:

public int busquedaBinaria(int n)


{ int izq=0;
der=arreglo.length-1;
band=0;
while(izq<=der && band==0)
{ indice=(izq+der)/2;
if(arreglo[indice]==n)
band=1;
else
{ if(n>arreglo[indice])
izq=indice+1;
else
der=indice-1;
}

if(band==1)

Página-10-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

return indice;//devuelve el indice donde se encuentra


el valor
else
return -1;//devuelve este valor si no lo encuentra.
}
}

Página-11-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

PARTE PRÁCTICA. Arreglo de Objetos.

1. Un vivero necesita el desarrollo un programa, para administrar información acerca del


stock de plantas.
En la etapa de relevamiento, se han detectado las siguientes entidades:
Vivero: razón social, dirección, vector de plantas.
Planta:nombre, tipo(1-plantin,2-arbusto,3-árbol),stock,cantidad a reponer,precio.
Se pide:
1) El total de stock del vivero.
2) Informar las plantas, que tienen que reponer.(stock menor a cantidad a reponer)
3) Determinar la cantidad de plantas por tipo.
4) Informar los datos de la planta, que mayor stock posee en el periodo considerado.

Codificación en Java.

//Planta.java
public class Planta
{ //Atributos.
private String nombre;
private int tipo;
private int cant;
private int stock;
private float precio;
//Métodos.
public Planta()
{ nombre="";
tipo=0;
cant=0;
stock=0;
precio=0;}

public Planta(String n,int t,int c,int s, float p)


{ nombre=n;
tipo=t;
cant=c;
stock=s;
precio=p;}

public String getNombre()


{ return nombre;}

public int getTipo()


{ return tipo;}

public int getCantidad()


{ return cant;}

public int getStock()


{ return stock;}

public float getPrecio()


{ return precio;}

public String toString()


{ return nombre+ "" + tipo+ " "+ cant+ " " + stock+ " " + precio;}

public void setNombre(String n)


{ nombre=n;}

public void setTipo(int t)


{ tipo=t;}

Página-12-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

public void setCantidad(int c)


{ cant=c;}

public void setStock(int s)


{ stock=s;}

public void setPrecio(float p)


{ precio=p;}
}

//Vivero.java
public class Vivero
{//Atributos
private String razonS;
private String dir;
private Planta p[];

//Constructor sin Argumentos.


public Vivero()
{ razonS="";
dir="";
p=new Planta[20];

//Constructor con Argumentos


public Vivero(String r,String d,int n)
{ razonS=r;
dir=d;
p=new Planta[n];
for(int i=0;i<n;i++)
p[i]=null;
}

public String getRazon()


{return razonS;}

public String getDir()


{return dir;}

//método permite mostrar una componente del arreglo


public Planta getPlanta(int indice)
{ return p[indice];//muestra todos los datos del componente
}

public void setRazon(String r)


{ razonS=r;}

public void setDir(String d)


{ dir=d;}

//método permite cargar un componente del arreglo.


public void setPlanta(int indice,Planta pl)
{ p[indice]=pl;}

public String toString()


{ String aux;
aux=razonS+" "+dir + "Plantas:";
for(int i=0;i<p.length;i++)
aux+= p[i].toString() + " ";
return aux;
}

//Metodos de control.
public float TotalStock()
{ float acu=0;
for(int i=0;i<p.length;i++)
acu=acu+p[i].getCantidad();

Página-13-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

return acu;
}

public String StockMinimo()


{ String aux="";
for(int i=0;i<p.length;i++)
if(p[i].getCantidad()<p[i].getStock())
aux+=" ;" + p[i].toString();
return aux;
}

public String PlantaxTipo()


{ String aux;
int c1,c2,c3;
c1=c2=c3=0;
for(int i=0;i<p.length;i++)
{ switch(p[i].getTipo())
{ case 1: c1++;
break;
case 2: c2++;
break;
case 3: c3++;
break;
}
}
aux="La cantidad de planta1 es:" + c1 + "Tipo2:"+c2 +" Tipo3:" + c3;
return aux;
}

//Planta mayor stock posee


public String MayorStock()
{ int may=0;
int indice=0;
for(int i=0;i<p.length;i++)
{ if(i==0)
{may=p[i].getStock();
indice=i;}
else
{ if(p[i].getStock()>may)
{ may=p[i].getStock();
indice=i;}
}
}
return p[indice].toString();
}
}

//Aplicación.java
public class Aplicacion
{ public static void main(String args[])
{ //Declaración de varaibles auxiliares.
String r,d,nom;
Vivero v;
Planta pl;
int cant,t,c,s;
double p;
//Cargo los datos del vivero
System.out.println("Ingrese la razon social:");
r=In.readLine();
System.out.println("Ingrese la direccion:");
d=In.readLine();
System.out.println("Ingrese cantidad de plantas:");
cant=In.readInt();

//Creo obj. Vivero


v=new Vivero(r,d,cant);

//Cargo el arreglo con plantas.

Página-14-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

for(int i=0;i<cant;i++)
{ //Creo un obj. planta
System.out.println("Ingrese nombre:");
nom=In.readString();
System.out.println("Ingrese tipo:");
t=In.readInt();
System.out.println("Ingrese cantidad:");
c=In.readInt();
System.out.println("Ingrese stock:");
s=In.readInt();
System.out.println("Ingrese precio:");
p=In.readDouble();
pl = new Planta(nom, t, c, s, p);
v.setPlanta(i,pl);
}

System.out.println("Un elemento:" + v.getPlanta(0));


System.out.println("Total de stock: " + v.TotalStock());
System.out.println("Plantas a Reponer: " + v.StockMinimo());
System.out.println("Cant. por Tipo: " + v.PlantaxTipo());
System.out.println("La palnta que mayor stock tiene:" + v.MayorStock());
}
}

2. Una farmacia necesita procesar información sobre los medicamentos que


comercializa, se necesita almacenar dichos medicamentos en un arreglo, para su
posterior procesamiento.
Se detallan a continuación las entidades intervinientes.

Medicamento: código, descripción, presentación (1 - grageas, 2-jarabe, 3- inyectable),


precio venta, stock.
ListaMedicamentos: tiene como atributo el arreglo de Medicamentos.
Aplicación: posee el método main().

Además de los métodos de entrada y salida básicos. Se pide la realización de los


siguientes métodos:

CalcularPromedio(calcula el promedio de stock, de los medicamentos cuya presentación


sea jarabe)
MayorPrVta(Retorna la descripción del medicamento que tiene mayor precio de venta)
ModificarStock(Modifica el stock de un determinado medicamento del arreglo, se lo debe
buscar por su código, pasarlo como parámetro al método)

3. Desarrollar una clase que permita representar a los empleados, de una importante
empresa de nuestro medio.
Cada instancia de esta clase, debe contener los siguientes datos: legajo, nombre, área
que trabaja (1- Administración 2-Recepción 3-Otro) y sueldo.
Se pide:

a) Realizar el Diagrama de Clases, que represente las entidades intervinientes.


b) Determinar el promedio de sueldos cobrados por los empleados a fin de mes.
c) Calcular la cantidad de empleados que trabajan en el área de administración y cuyo
sueldo supere a 5000 pesos.
d) Mostrar el nombre del empleado que meno sueldo percibe y que pertenece al área de
recepción.

4. La biblioteca de nuestra universidad, nos ha solicitado el desarrollo de un programa,


que brinde información de los ejemplares que maneja. No se conoce con exactitud la
cantidad de los mismos, es
por ello que el usuario deberá ingresar por teclado este dato.
Cada ejemplar contiene los siguientes datos: código, titulo, autor, cant. ejemplares
disponibles, tipo(1-Solo Consulta 2-Para Préstamo).

Página-15-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

Se pide:

a) Realizar el Diagrama de Clases, identificando las entidades intervinientes.


b) Informar el título de los ejemplares, cuya cantidad de ejemplares supere un valor
ingresado por teclado.
c) Mostrar el código y título de los ejemplares, cuyo tipo se para préstamo y la cantidad
de ejemplares disponibles es cero.
d) Borrar un ejemplar, para ello ingresar por teclado su código. Informar si se pudo
borrar o no.

5. Una empresa de transporte necesita manejar información de las unidades que


componen su flota.
Para ello se necesita manejar un arreglo (de 50 elementos) que contenga en cada
posición una unidad de esa empresa.
La información que se necesita registrar de esas unidades son: nro de interno, chapa
patente y cant. de boletos vendidos.
Se pide:

a) Realizar el Diagrama de Clases, identificando las entidades intervinientes.


b) Informar la cantidad de unidades han vendido más boleto, que una determinada
cantidad (la misma deberá ser ingresada por teclado).
c) Informar el total de boletos vendidos, por la flota.
d) Calcular el promedio de boletos vendidos, para las unidades cuyo número de interno
sea superior a un valor ingresado por teclado.

6. Una Veterinaria encargada del cuidado de mascotas ha solicit ado la realización de un


software para obtener resultados sus respectivas mascotas.
De la Mascota se dispone los siguientes datos: nro que identifica la mascota, nombre,
edad, especie(1-gato 2-perro 3-Otros), raza, sexo.

El software requiere, el uso de una estructura que permita almacenar las mascotas. Se
deberá cargar el número n de mascotas, por teclado.
Se pide:

a) Diagrama de Clases.
b) Informar la cantidad de mascotas registradas en la veterinaria, por especie.(3
totales)
c) Informar los datos de la mascota de menor edad, cuya especie sea perro.
d) Informar el nombre de la mascota de mayor edad.

Página-16-
Algoritmos y Estructuras de Datos Curso: 1K7-1K8
Ing. Cynthia Corso.

Bibliografía Consultada.

 Material de clases para la cátedra “Algoritmos y Estructuras de Datos”, confeccionado


por la Ing. Analía Guzmán.
 “Algoritmos de Ordenamiento”, Autor: Raiger Murillo Moreno.

Página-17-

También podría gustarte