Lenguaje Programación II Instituto Universitario de Gerencia y Tecnología Ejemplo de Arreglos Caracas 15 de Mayo de 2009 Caracas Caracas FC El Caracas FC participa en 3 especialidades del futbol: F(Futbol), P(Futbol playa) y S(Futbol sala). El Club participa tanto en torneos locales (TL) como torneos internacionales (TI) distribuidos de la siguiente forma: el equipo F participa en 1 torneo local, 3 torneos internacionales; el equipo P participa en 2 torneos locales, 1 torneo internacional y el equipo S participa en 2 torneos locales, 2 torneo internacional. Por cada torneos local e internacional el Club debe comprar una cantidad de juegos de uniforme tanto como local (cuando juega en casa - UL) como visitante (cuando juega en la casa del equipo contrario - UV). Para los torneos locales se utilizan 20 uniformes de local y 12 uniformes de visitante; para los internacionales se utilizan 10 uniformes de local y 6 uniformes de visitante. Se desea: 1. Escribir una matriz que describa la cantidad y tipo de torneo en cada especialidad y otra matriz que exprese el número de uniformes locales y visitantes de cada torneo. 2. Calcular una matriz, a partir de las anteriores, que exprese la cantidad total de uniformes utilizados, tanto locales como visitantes, en cada especialidad. 3. Determinar la cantidad total de uniformes por cada especialidad y la cantidad total de uniformes de locales y uniformes de visitantes utilizadas en la participación de todos los torneos. 4. ¿Que especialidad posee la mayor cantidad de uniformes y que tipo de uniforme posee el mayor uso? 1 Caso de Uso 2 Diagrama de Clases 3 Código fuente Public Class Arreglos Private fila As Integer Private columna As Integer Private profundidad As Integer Private f As Integer Private c As Integer Private p As Integer ' Método que llena un arreglo de 1 dimensión Public Function llenarVector(ByVal vector As Array) As Array ' Se determina las dimensiones del arreglo mediante ' el método GetUpperBound ' (0) fila Me.fila = vector.GetUpperBound(0) ' se recorre el arreglo y se llena For Me.f = 0 To Me.fila Console.Write("ingrese valor (" + Me.f.ToString + "): ") vector(Me.f) = Console.ReadLine Next Me.f Return vector End Function ' Método que llena un arreglo de 2 dimensiones Public Function llenarMatriz(ByVal matriz As Array) As Array ' Se determina las dimensiones del arreglo mediante ' el método GetUpperBound ' (0) fila ' (1) columna Me.fila = matriz.GetUpperBound(0) Me.columna = matriz.GetUpperBound(1) ' se recorre el arreglo y se llena For Me.f = 0 To Me.fila For Me.c = 0 To columna Console.Write("ingrese valor (" + Me.f.ToString + "," _ + Me.c.ToString + "): ") matriz(Me.f, Me.c) = Console.ReadLine Next Me.c Next Me.f Return matriz End Function 4 ' Método que llena un arreglo de 3 dimensiones Public Function llenarCubo(ByVal cubo As Array) As Array ' se determina las dimensiones del cubo mediante ' el método GetUpperBound ' (0) fila ' (1) columna ' (2) profundidad Me.fila = cubo.GetUpperBound(0) Me.columna = cubo.GetUpperBound(1) Me.profundidad = cubo.GetUpperBound(2) ' Se recorre el arreglo y se llena For Me.p = 0 To Me.profundidad For Me.f = 0 To Me.fila For Me.c = 0 To Me.columna Console.Write("ingrese valor (" + Me.f.ToString + "," _ + Me.c.ToString + "," _ + Me.p.ToString + "): ") cubo(Me.f, Me.c, Me.p) = Console.ReadLine Next Me.c Next Me.f Next Me.p Return cubo End Function ' método que muestra el contenido de un arreglo de 2 dimensiones Public Sub mostrarMatriz(ByVal matriz As Array) Me.fila = matriz.GetUpperBound(0) Me.columna = matriz.GetUpperBound(1) For Me.f = 0 To Me.fila For Me.c = 0 To Me.columna Console.Write(matriz(Me.f, Me.c).ToString + " ") Next Me.c Console.WriteLine() Next Me.f End Sub End Class 5 Public Class Futbol Private uniforme As Integer Private especialidad As Integer Private torneo As Integer Private u As Integer Private e As Integer Private t As Integer Private total As Integer Private mayor As Integer Public Function calcularUE(ByVal TU As Array, _ ByVal TE As Array) As Array Me.torneo = TU.GetUpperBound(0) Me.uniforme = TU.GetUpperBound(1) Me.especialidad = TE.GetUpperBound(1) ' matriz resultante Dim UE(uniforme, especialidad) As Integer For Me.t = 0 To Me.torneo For Me.u = 0 To Me.uniforme For Me.e = 0 To Me.especialidad UE(Me.u, Me.e) += TU(Me.t, Me.u) * TE(Me.t, Me.e) Next Me.e Next Me.u Next Me.t Return UE End Function Public Sub totalUniformeEspecilidad(ByVal UE As Array) Me.uniforme = UE.GetUpperBound(0) Me.especialidad = UE.GetUpperBound(1) For Me.e = 0 To especialidad Me.total = 0 For Me.u = 0 To uniforme Me.total += UE(Me.u, Me.e) Next Me.u Console.WriteLine("Total uniformes por la especialidad " _ + Me.e.ToString + " es: " _ + Me.total.ToString) Next Me.e End Sub 6 Public Sub totalUniformesTipo(ByVal UE As Array) Me.uniforme = UE.GetUpperBound(0) Me.especialidad = UE.GetUpperBound(1) For Me.u = 0 To Me.uniforme Me.total = 0 For Me.e = 0 To Me.especialidad Me.total = Me.total + UE(Me.u, Me.e) Next Me.e Console.WriteLine("Total uniformes " _ + Me.e.ToString + " es: " _ + Me.total.ToString) Next Me.u End Sub Public Sub especialidadMayorUso(ByVal UE As Array) Dim mayorEspecialidad As Integer Me.uniforme = UE.GetUpperBound(0) Me.especialidad = UE.GetUpperBound(1) For Me.e = 0 To Me.especialidad Me.total = 0 For Me.u = 0 To Me.uniforme total += UE(Me.u, Me.e) Next u If Me.total > Me.mayor Then Me.mayor = Me.total mayorEspecialidad = Me.e End If Next Me.e Console.WriteLine("La especialidad " _ + mayorEspecialidad.ToString + _ " posee la mayor catidad de uniformes con un total de: " _ + Me.mayor.ToString) End Sub 7 Public Sub uniformeMayorUso(ByVal UE As Array) Dim mayorUniforme As Integer Me.uniforme = UE.GetUpperBound(0) Me.especialidad = UE.GetUpperBound(1) For Me.u = 0 To Me.uniforme Me.total = 0 For Me.e = 0 To Me.especialidad Me.total += UE(Me.u, Me.e) Next Me.e If Me.total > Me.mayor Then Me.mayor = Me.total mayorUniforme = Me.u End If Next Me.u Console.WriteLine("El uniforme " + mayorUniforme.ToString + _ " es el mas usado con un total de: " _ + Me.mayor.ToString) End Sub End Class 8 Module Modulo Private Private ' fila: Private ' fila: Private ' fila: Private caracasFC As New Futbol operacionesArreglos As New Arreglos Torneo, columna: Uniforme torneoUniforme(1, 1) As Integer Torneo, columna: Especialidad torneoEspecialidad(1, 2) As Integer Uniforme, columna: Especialidad uniformeEspecialidad(1, 2) As Integer Sub Main() llenarTorneoUniforme() llenarTorneoEspecialidad() calcularUniformeEspecialidad() totalUniformeEspecilidad() totalUniformesTipo() especialidadMayorUso() uniformeMayorUso() Console.ReadLine() End Sub Private Sub llenarTorneoUniforme() ' matriz que expresa el número de uniformes locales y visitantes ' de cada especialidad. Console.WriteLine("Torneo - Uniforme") torneoUniforme = operacionesArreglos.llenarMatriz(torneoUniforme) 'caracasFC.mostrar(torneoUniforme) End Sub Private Sub llenarTorneoEspecialidad() ' matriz que expresa el cantidad y tipo de torneo en cada especialidad. Console.WriteLine() Console.WriteLine("Torneo - Especialidad") torneoEspecialidad = operacionesArreglos.llenarMatriz(torneoEspecialidad) 'caracasFC.mostrar(torneoEspecialidad) End Sub Private Sub calcularUniformeEspecialidad() ' matriz que expresa la cantidad total de uniformes utilizados, ' tanto locales como visitantes, en cada especialidad. Console.WriteLine() Console.WriteLine("Uniforme - Especialidad") uniformeEspecialidad = caracasFC.calcularUE(torneoUniforme, torneoEspecialidad) 'caracasFC.mostrar(uniformeEspecialidad) End Sub Private Sub totalUniformeEspecilidad() ' Cantidad total de uniformes por cada especialidad. Console.WriteLine() caracasFC.totalUniformeEspecilidad(uniformeEspecialidad) End Sub 9 Private Sub totalUniformesTipo() ' Cantidad total de uniformes de locales y uniformes de visitantes ' utilizadas en la participación de todos los torneos. Console.WriteLine() caracasFC.totalUniformesTipo(uniformeEspecialidad) End Sub Private Sub especialidadMayorUso() ' especialidad posee la mayor cantidad de uniformes Console.WriteLine() caracasFC.especialidadMayorUso(uniformeEspecialidad) End Sub Private Sub uniformeMayorUso() ' tipo de uniforme con mayor uso Console.WriteLine() caracasFC.uniformeMayorUso(uniformeEspecialidad) End Sub End Module 10