|
Página 1 de 1
|
Problema Del Restaurante. Ejercicio
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Problema Del Restaurante. Ejercicio
Buenas!.
Os propongo resolver un problema:
Se trata de un restaurante que es el mejor haciendo "huevos" con "chorizos".
Tenemos que averiguar cuantos platos se pueden hacer si:
- Cada plato está formado por 2 huevos y 200g de chorizo.
A la función hay que pasarle la cantidad de huevos y chorizos que tenemos en la despensa.
Creando una función resolver el problema.
He encontrado dos formas de hacerlo. Razonar la respuesta.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#1 Martes, 28 Abril 2020, 20:55 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Problema Del Restaurante. Ejercicio
Muevo el hilo a "Retos"
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#2 Martes, 28 Abril 2020, 21:15 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Problema Del Restaurante. Ejercicio
Ups, no sabía que había un subforo para esto.
Aunque puedo verlo directamente al responder. Ahora ya sé que se encuentra en Aplicaciones/Fragmentos de Código.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Miercoles, 29 Abril 2020, 09:53; editado 1 vez
|
#3 Miercoles, 29 Abril 2020, 09:50 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Problema Del Restaurante. Ejercicio
Bueno!.
Gran interés!. (Ocurre en todos los foros de programación).
El problema no es resolver el ejercicio, es usar la lógica para encontrar la mejor solución.
Y eso es lo más complicado. Y que se debe ejercer.
Forma que lo haríamos, paso a paso. Si tenemos una cantidad de ingredientes y sabemos que necesitamos,
podemos ir restando una y otra vez de los ingredientes disponibles y crear un plato, llegará un momento que no
podamos hacer más platos.
' Procedimiento habitual
Public Function numdeplatosv1(docenasdehuevo As Integer, kilosdechorizo As Float) As Integer
Dim totalingrediente1 As Integer
Dim totalingrediente2 As Float
Dim totaldeplatos As Integer
'Cantidad total de los ingredientes
'Unidades
totalingrediente1 += docenasdehuevo * 12
'Gramos
totalingrediente2 += kilosdechorizo * 1000
'Se necesita para un plato:
' 2 huevos
' 200g de chorizo
'Vamos eliminando de las existencias los ingredientes necesarios por cada plato
Repeat
totalingrediente1 -= HUEVOSPORPLATO
totalingrediente2 -= CHORIZOPORPLATO
totaldeplatos += 1
Until totalingrediente1 < 2 Or totalingrediente2 < 200
Return totaldeplatos
End
Pero y si...decimos, si se nos acaba uno de los ingredientes necesario para un plato,
no tenemos por que continuar....esto resulta un poco más complejo de pensar la primera vez.
'Pocedimiento alternativo y más rápido
Public Function numdeplatosv2(docenasdehuevo As Integer, kilosdechorizo As Float) As Integer
Dim totalingrediente1 As Integer
Dim totalingrediente2 As Float
'Cantidad total de los ingredientes
'Unidades
totalingrediente1 += docenasdehuevo * 12
'Gramos
totalingrediente2 += kilosdechorizo * 1000
'Se necesita para un plato:
' 2 huevos
' 200g de chorizo
'Si se acaba uno de los ingredientes ya no podemos hacer más plato
'Devolvemos la cantidad de platos máximos que se admite con un total de un ingredientes
If totalingrediente1 / HUEVOSPORPLATO < totalingrediente2 / CHORIZOPORPLATO Then
Return totalingrediente1 / HUEVOSPORPLATO
Else
Return totalingrediente2 / CHORIZOPORPLATO
Endif
End
Fijaros que el condicional comprueba dos ingredientes..Pero y si ahora le queremos
añadir "patatas fritas!" al plato, ahora serian más ingredientes...esa condición no nos valdría..
Y si...usamos otras cosas....
Saludos
Descripción: |
Problema de lógica. Encontrar cuantos platos podemos hacer con dos ingredientes |
Descargar |
Nombre del archivo: |
Restaurante-0.0.1.tar.gz |
Tamaño: |
11.71 KB |
Descargado: |
338 veces |
Descripción: |
Problema de lógica. Encontrar cuantos platos podemos hacer con dos ingredientes |
Descargar |
Nombre del archivo: |
Restaurante-0.0.1.tar.gz |
Tamaño: |
11.71 KB |
Descargado: |
338 veces |
Descripción: |
Problema de lógica. Encontrar cuantos platos podemos hacer con dos ingredientes |
Descargar |
Nombre del archivo: |
Restaurante-0.0.1.tar.gz |
Tamaño: |
11.71 KB |
Descargado: |
338 veces |
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#4 Lunes, 04 May 2020, 14:14 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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.
Apliquemos ahora programación orientada a o objeto. Usamos dos clases.
Ingrediente:
Plato:
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
Y el bloque principal:
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
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
Descripción: |
Resolver el problema del restaurante usando la programación orientada a objetos. Sin interfaz gráfica. |
Descargar |
Nombre del archivo: |
RestaurantePOO-0.0.1.tar.gz |
Tamaño: |
12.35 KB |
Descargado: |
347 veces |
Descripción: |
Resolver el problema del restaurante usando la programación orientada a objetos. Sin interfaz gráfica. |
Descargar |
Nombre del archivo: |
RestaurantePOO-0.0.1.tar.gz |
Tamaño: |
12.35 KB |
Descargado: |
347 veces |
Descripción: |
Resolver el problema del restaurante usando la programación orientada a objetos. Sin interfaz gráfica. |
Descargar |
Nombre del archivo: |
RestaurantePOO-0.0.1.tar.gz |
Tamaño: |
12.35 KB |
Descargado: |
347 veces |
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#5 Lunes, 04 May 2020, 14:22 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Problema Del Restaurante. Ejercicio
¿ Sabéis que cuando nos acostumbramos a la programación por procedimientos cometemos errores a la hora de crear el mismo programa en POO ?.
Visto eso. Mejor comenzar directamente por POO..
Dice un dicho. "La programación por procedimientos a la hora de depurarla es como llevar encima un calamar gigante y no puedes evitar que algún tentáculo
te de en toda la cara."
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#6 Lunes, 04 May 2020, 14:26 |
|
|
tercoIDE
Analista Programador
Registrado: Noviembre 2013
Mensajes: 713
Edad: 54
|
Re: Problema Del Restaurante. Ejercicio
una vez que uno comprende POO, pasa a un plano superlativo en programacion
se transforma en Jedi
=================== "Los IF son mas rápidos" - autor anónimo
|
#7 Lunes, 04 May 2020, 14:45 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Problema Del Restaurante. Ejercicio
tercoIDE:
Citar:
una vez que uno comprende POO, pasa a un plano superlativo en programacion
se transforma en Jedi
Bueno, pero no quita que nos podamos equivocar también...
En ese caso la localización se simplifica más.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Lunes, 04 May 2020, 15:14; editado 1 vez
|
#8 Lunes, 04 May 2020, 15:11 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Problema Del Restaurante. Ejercicio
Añado los ordinogramas.
Básico:
Mejor depurado:
Código en PseInt:
Citar:
Algoritmo Restaurante
Escribir numdeplatosv1(3, 1);
Escribir numdeplatosv2(3, 1);
FinAlgoritmo
Funcion platos <- numdeplatosv1(docenasdehuevo, kilosdechorizo)
Definir platos Como Entero;
docenasdehuevo <- docenasdehuevo * 12;
kilosdechorizo <- kilosdechorizo * 1000;
platos <- 0;
Repetir
docenasdehuevo<-docenasdehuevo - 2;
kilosdechorizo<-kilosdechorizo - 200;
platos<-platos + 1;
Hasta Que (docenasdehuevo<2 o kilosdechorizo<200)
FinFuncion
Funcion platos <- numdeplatosv2(docenasdehuevo , kilosdechorizo)
Definir n1 Como Entero;
Definir n2 Como Real;
Definir platos Como Entero;
n1 <- (docenasdehuevo * 12) / 2 ;
n2 <- (kilosdechorizo * 1000) / 200;
si n1 < n2 Entonces
// Devolver n1
platos <- n1;
sino
// Devolver n2
platos <- n2;
FinSi
FinFuncion
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#9 Lunes, 04 May 2020, 15:13 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|