https://foro.gambas-es.org/viewtopic.php?f=15&t=8006&p=48296#p48296 ----------------------------------- Shell Lunes, 04 May 2020, 14:22 Re: Problema Del Restaurante. Ejercicio ----------------------------------- Pues la última parte. No he usado una interfaz gráfica. Quedaría mejor..pero eso es lo de menos, o quizás..no. :-D Apliquemos ahora programación orientada a o objeto. Usamos dos clases. Ingrediente: [code linenumbers=false syntax=gambas] Private hnombre As String Private hunidades As Integer Property Read nombre As String Property unidades As Integer Public Sub _new($nombre As String, $unidades As Integer) hnombre = $nombre hunidades = $unidades End Private Function nombre_Read() As String Return hnombre End Private Function unidades_Read() As Integer Return hunidades End Private Sub unidades_Write(Value As Integer) hunidades = Value End Public Sub addIngrediente(cantidad As Float) hunidades += cantidad End [/code] Plato: [code linenumbers=false syntax=gambas] Private hnombredelplato As String Property nombredelplato As String Private hingredientesparaplato As Collection Property Read ingredientesparaplato As Collection Public Sub _new(nomdeplato As String, ...) Dim ingredientenecesario As Ingrediente Dim nomingrediente As Ingrediente hnombredelplato = nomdeplato hingredientesparaplato = New Collection For Each nomingrediente In Param ingredientenecesario = New Ingrediente(nomingrediente.nombre, nomingrediente.unidades) hingredientesparaplato.Add(ingredientenecesario, ingredientenecesario.nombre) Next End Private Function nombredelplato_Read() As String Return hnombredelplato End Private Sub nombredelplato_Write(Value As String) hnombredelplato = Value End 'Probablemente se pueda abreviar Public Function TotalDePlatos(existencias As Ingrediente[]) As Integer Dim totaldeplatosposiblesconingrediente As Integer Dim ingredienteconmenosexistencias As Ingrediente Dim i As Integer ingredienteconmenosexistencias = existencias[0] totaldeplatosposiblesconingrediente = ingredienteconmenosexistencias.unidades / hingredientesparaplato[ingredienteconmenosexistencias.nombre].unidades For i = 1 To existencias.Count - 1 If totaldeplatosposiblesconingrediente < existencias[i].unidades / hingredientesparaplato[ingredienteconmenosexistencias.nombre].unidades Then ingredienteconmenosexistencias = existencias[i] Endif Next Return ingredienteconmenosexistencias.unidades / hingredientesparaplato[ingredienteconmenosexistencias.nombre].unidades End Private Function ingredientesparaplato_Read() As Collection Return hingredientesparaplato End [/code] Y el bloque principal: [code linenumbers=false syntax=gambas] Public Sub Main() Dim platohuevoconchorizos As Plato 'Los ingredientes que necesitamos Dim ingredientenecesario1 As Ingrediente Dim ingredientenecesario2 As Ingrediente 'Los que vamos a tener que comprar Dim existenciasdeingrediente1 As Ingrediente Dim existenciasdeingrediente2 As Ingrediente 'Todo los ingredientes que voy a tener del mismo plato Dim existenciastotales As New Ingrediente[] 'Ingredientes para hacer un plato de huevos con chorizos ingredientenecesario1 = New Ingrediente("huevos", 2) ingredientenecesario2 = New Ingrediente("chorizos", 200) 'Vamos al mercado a comprar los ingredientes...:-D existenciasdeingrediente1 = New Ingrediente(ingredientenecesario1.nombre, 0) existenciasdeingrediente1.addIngrediente(36) existenciasdeingrediente2 = New Ingrediente(ingredientenecesario2.nombre, 0) existenciasdeingrediente2.addIngrediente(1000) ' Y los añadimos a la despensa existenciastotales.Add(existenciasdeingrediente1) existenciastotales.Add(existenciasdeingrediente2) 'Leemos la receta y le añadimos los ingredientes que necesita platohuevoconchorizos = New Plato("Huevos con chorizos", ingredientenecesario1, ingredientenecesario2) 'Con los que tenemos en la despensa podemos hacer: Print Subst("Platos que se pueden preparar: &1", platohuevoconchorizos.TotalDePlatos(existenciastotales)) End [/code] Como habréis visto he usado unidades, no kg en la mayoría de los problemas. La solución es la misma. Ahora se le añade una GUI y quedará mejor. Pero para la lógica no se necesitan florituras. Si para los ojos y atraer usuarios.. Saludos