Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Problema Del Restaurante. Ejercicio
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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.

Public Function numdeplatos(docenasdehuevo As Integer, kilosdechorizo As Float) As Integer
  
  
  
End
 


He encontrado dos formas de hacerlo. Razonar la respuesta.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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, 10:53; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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:

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
 


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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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, 16:14; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Problema Del Restaurante. Ejercicio 
 
Añado los ordinogramas.

Básico:

 procedimentob_sico

Mejor depurado:

 procedimientomejorusado

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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Ejercicio Con String[] tincho Aplicaciones/Fragmentos de Código 3 Sabado, 11 Junio 2016, 18:58 Ver último mensaje
tincho
No hay nuevos mensajes Problema Con La Tecla De F1 Shell Instalación 4 Jueves, 09 Febrero 2012, 01:11 Ver último mensaje
Shell
No hay nuevos mensajes Problema Con FileView shordi Controles/Librerías/Componentes 0 Viernes, 25 Septiembre 2015, 11:36 Ver último mensaje
shordi
No hay nuevos mensajes Problema Con Los Apóstrofes jsoto61 Bases de Datos 5 Jueves, 18 Marzo 2010, 23:12 Ver último mensaje
jguardon
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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
No puede descargar archivos
No puede publicar eventos en el calendario