Home    Forum    Search    FAQ    Register    Log in


Post new topic  Reply to topic 
Page 1 of 1
 
 
Problema Del Restaurante. Ejercicio
Author Message
Quote   Download Post  
Post 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 - ProfilePMWebsite 
Back to topPage bottom
Quote   Download Post  
Post 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 - ProfilePM 
Back to topPage bottom
Quote   Download Post  
Post 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"
 
Last edited by Shell on Wednesday, 29 April 2020, 09:53; edited 1 time in total 
Shell - ProfilePMWebsite 
Back to topPage bottom
Quote   Download Post  
Post 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

Restaurante-0.0.1.tar.gz
Description: Problema de lógica. Encontrar cuantos platos podemos hacer con dos ingredientes 
Download
Filename: Restaurante-0.0.1.tar.gz
Filesize: 11.71 KB
Downloaded: 334 Time(s)
Restaurante-0.0.1.tar.gz
Description: Problema de lógica. Encontrar cuantos platos podemos hacer con dos ingredientes 
Download
Filename: Restaurante-0.0.1.tar.gz
Filesize: 11.71 KB
Downloaded: 334 Time(s)
Restaurante-0.0.1.tar.gz
Description: Problema de lógica. Encontrar cuantos platos podemos hacer con dos ingredientes 
Download
Filename: Restaurante-0.0.1.tar.gz
Filesize: 11.71 KB
Downloaded: 334 Time(s)

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - ProfilePMWebsite 
Back to topPage bottom
Quote   Download Post  
Post 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

RestaurantePOO-0.0.1.tar.gz
Description: Resolver el problema del restaurante usando la programación orientada a objetos. Sin interfaz gráfica. 
Download
Filename: RestaurantePOO-0.0.1.tar.gz
Filesize: 12.35 KB
Downloaded: 334 Time(s)
RestaurantePOO-0.0.1.tar.gz
Description: Resolver el problema del restaurante usando la programación orientada a objetos. Sin interfaz gráfica. 
Download
Filename: RestaurantePOO-0.0.1.tar.gz
Filesize: 12.35 KB
Downloaded: 334 Time(s)
RestaurantePOO-0.0.1.tar.gz
Description: Resolver el problema del restaurante usando la programación orientada a objetos. Sin interfaz gráfica. 
Download
Filename: RestaurantePOO-0.0.1.tar.gz
Filesize: 12.35 KB
Downloaded: 334 Time(s)

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - ProfilePMWebsite 
Back to topPage bottom
Quote   Download Post  
Post 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 - ProfilePMWebsite 
Back to topPage bottom
Quote   Download Post  
Post 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 - ProfilePM 
Back to topPage bottom
Quote   Download Post  
Post 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"
 
Last edited by Shell on Monday, 04 May 2020, 15:14; edited 1 time in total 
Shell - ProfilePMWebsite 
Back to topPage bottom
Quote   Download Post  
Post 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 - ProfilePMWebsite 
Back to topPage bottom
Display posts from previous:    
 
HideSimilar Topics
Topic Author Forum Replies Last Post
No new posts Problema Con Hbox. Shell General 4 Thursday, 26 July 2012, 00:15 View latest post
Shell
No new posts Problema Con Ssh Y La Solucion. jousseph General 0 Thursday, 05 September 2013, 01:14 View latest post
jousseph
No new posts Problema Con ShowModal frajanic General 20 Saturday, 11 July 2015, 08:59 View latest post
Shell
No new posts Ejercicio Con String[] tincho Aplicaciones/Fragmentos de Código 3 Saturday, 11 June 2016, 17:58 View latest post
tincho
 

Post new topic  Reply to topic  Page 1 of 1
 

Users browsing this topic: 0 Registered, 0 Hidden and 0 Guests
Registered Users: None


 
Permissions List
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events



  

 

cron