Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

itsari

[Resolvido] como resolveriam este programa?

Recommended Posts

itsari

O programa consiste na simulação de uma “Máquina de Venda”, como por exemplo, uma máquina de café ou de chocolates e sandes.

Tem que se introduzir uma quantia em moedas suficientes para a compra do produto desejado, depois a máquina fornece o produto e o respectivo troco utilizando o menor número de moedas possível.

Para difucultar, os botões da interface tem as imagens das respectivas moedas a colocar na máquina (0,10; 0,20; 0,50; 1, 2€)

Obrigado pla ajuda

Share this post


Link to post
Share on other sites
softklin

Pelo modo como estás a apresentar o trabalho, parece que queres que o façam por ti. Todos nós trabalhamos, ou estudamos, ou temos mais que fazer senão estar a fazer trabalhos de outros.

O teu programa é simples, basta arrastares os botões e as labels para o formulário, e definires as propriedades correctas (imagens, cores, textos, ...). A coisa mais complicada que possa haver aí é o algoritmo do troco, em que te sugiro o seguinte:

Guardas o troco a dar numa variável, seja troco. Depois percorres o array de moedas disponíveis para dar, por ordem decrescente (da de maior valor para a de menor), e vez qual o valor máximo que podes decrementar do troco, até este ser 0.

Exemplos:

Troco: € 0.90

--> 0.50  +  0.20  +  0.20

Troco: € 1

--> 1

Troco: € 5.40

--> 2  +  2  +  1  +  0.20  +    0.20

NOTA: Assumi que as moedas que tens disponíveis na máquina eram as que disseste em cima. Tens de esclarecer com o teu professor o que fazer no caso do troco ser inferior a 10 cêntimos, por exemplo.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
itsari

Eu só preciso me uma orientação de como começar este problema, sei que depois para dar o troco terei que utilizar a função MOD, penso eu.

Tendo de colocar uma variável "soma" em cada botão certo? porque a intenção é quando se clica no botão com a imagem da moeda ele adiciona a soma dessa moeda numa text box.. não sei se me fiz entender :S

Share this post


Link to post
Share on other sites
softklin

sei que depois para dar o troco terei que utilizar a função MOD, penso eu.

Não precisas de complicar: ser seguires o meu método de cima, obtens o menor número de moedas, apenas fazendo subtracções, e verificar se já chegou ou não a zero (ou seja, não há mais troco para dar).

Tendo de colocar uma variável "soma" em cada botão certo? porque a intenção é quando se clica no botão com a imagem da moeda ele adiciona a soma dessa moeda numa text box.. não sei se me fiz entender :S

Não, porque se colocares uma variável soma em cada botão, ela apenas vai estar definida para esse botão, logo a variável apenas pode ser usada se for global. Tens uma explicação sobre isso em:

http://www.geocities.com/ResearchTriangle/System/6408/vbasic/fr_vbasic.htm#VARI

Ou podes pegar na textbox e acumulares lá o total a pagar, é capaz de ficar mais fácil. No text de cada botão de produto, pões o valor numérico, e depois o código de cada botão será algo como:

dim total as Single
total = Val(txtTotal.text)    ' a tua textbox de total
total += Val(btnBolo.text)  ' aqui substituis pelo nome do botao respectivo
txtTotal.text = total           ' é atribuido o novo valor ao total, e actualiza a textbox do montante a pagar


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
itsari

2h5pf1y.jpg

A interface é esta. a intenção é o utilizador escolher o produto, depois clicar nos botões e consoante ele carrega nos botões aparece na text box "total" o valor já colocado. Depois é so comprar o produto.

Depois tava a pensar por o MOD para aparecer o nr de moedas em cada text box respectivo da moeda.

Por exemplo:

o utilizador mete 5€ e o produto custa 1€;

Na text box de 2€ aparece o nr 2, nas outras 0;

mas assim é capaz de ser complicado..

Vou ter de programar os radio buttons com os valores de cada item e mais os botões. Vou tentar fazer isso agora.

Cumps

Share this post


Link to post
Share on other sites
anolsi

Isso está a ser feito em VB.Net, não está?


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
softklin

Depois tava a pensar por o MOD para aparecer o nr de moedas em cada text box respectivo da moeda.

Por exemplo:

o utilizador mete 5€ e o produto custa 1€;

Na text box de 2€ aparece o nr 2, nas outras 0;

mas assim é capaz de ser complicado..

Não não! Ainda é mais directo que a minha ideia. Tens é que te lembrar de subtrair no troco. fazes um ciclo while, com a condição de que enquanto o troco a dar não chegar a zero, vai fazendo o MOD pelas moedas. Usa o mesmo método que te descrevi em cima, mas usando o MOD é mais directo.

No meio disto tudo, não te esqueças de verificar se o utilizador já deu o dinheiro necessário para comprar os produtos. ;)


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
M@KO

Por exemplo:

o utilizador mete 5€ e o produto custa 1€;

isto nao faz muito sentido. acho k ficava bem pores um

SE total >=1€ ENTAO nao aceitar mais moedas

uma vez que o produto mais caro é 1€ nao faz sentido aceitar 2 moedas de 2€.

Share this post


Link to post
Share on other sites
softklin

M@KO, acho que o interesse do trabalho é por o pessoal a trabalhar com o MOD, porque sem dúvida é exagerado, mas repara que o programa foca grande atenção no algoritmo do troco. Até porque nas máquinas por o dinheiro que quiseres, e se tiveres a mais, no fim da compra, dá-te o troco.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
itsari

Sim penso que o MOD é o essencial do programa. Até porque o prof colocou um extra que se pusermos € inferior ao pedido ele não dá o produto. e ai usamos a função IF.

Isto está complicado, ainda só defeni as propriedades dos Radio Button. Agora vou tentar que clicando em cada botão actualize a text box do total.

Share this post


Link to post
Share on other sites
itsari

Pessoal estou aqui com umas dúvidas..

Já consegui por o total a actualizar qd carregamos nos botões das moedas, mas agr aparece-me outro prob. q são as message box:

Private Sub btn6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncomprar.Click

        If rb1.Checked = True And total < 0.5 Then

If rb1.Checked = True And total < 0.5 Then

            MessageBox.Show("Insira dinheiro suficiente")

        Else

            MessageBox.Show("Comprou o produto. Obrigado")

        End If

       

        If rb2.Checked = True And total < 0.6 Then

            MessageBox.Show("Insira dinheiro suficiente")

        Else

            MessageBox.Show("Comprou o produto.Obrigado")

            rb1.Checked = False

        End If

        If rb3.Checked = True And total < 0.4 Then

            MessageBox.Show("Insira dinheiro suficiente")

        Else

            MessageBox.Show("Comprou o produto.Obrigado")

        End If

        If rb4.Checked = True And total < 1 Then

            MessageBox.Show("Insira dinheiro suficiente")

        Else

            MessageBox.Show("Comprou o produto.Obrigado")

        End If

    End Sub

A questão prende-se q qd um utilizador não mete dinheiro suficiente para o 2do produto (neste caso rb2) ele aparece a msg do " comprou o produto" e só dps a outra do " n tem dinheiro suficiente".

Alguem me sabe dizer porque isto acontece e como resolver?

Obrg

Share this post


Link to post
Share on other sites
softklin

Tenta fazer assim para cada produto (mudando o nome da caixa e o custo)

        If rb2.Checked = True And total < 0.6 Then
            MessageBox.Show("Insira dinheiro suficiente")
            exit sub
        Else
            MessageBox.Show("Comprou o produto.Obrigado")
            exit sub
        End If

O Exit Sub permite sair da rotina actual, sem processar o resto que vem para baixo.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
itsari

Olá.

Já consegui resolver aquela situação mas agora o MOD ta-me dar-me em doido!  :wallbash:

então suponhamos que a v2 é a variável 2€ e a v1 a variável de 1€ e assim sucessivamente, então:

v2 = total (das moedas inseridas) / ??

vresto = total mod ??

v1 = vresto / ??

N consigo perceber pelo q tnh q dividir  :(

Se puderem ajudem-me

Obrg

Share this post


Link to post
Share on other sites
softklin

Eu hoje de manhã ia responder, mas acabei por não chegar lá com o mod, só com a divisão mesmo... Podes deixar aqui o código respeitante ao MOD, sff?


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
itsari

Sorry só responder agr.

Segue o código final.. Acabei por não utilizar o MOD..

vtwix = 0.5

        troco = total - vtwix

        txt5.Text = troco * 100 \ 200

        vresto = troco * 100

        vresto = vresto - txt5.Text * 200

        txt4.Text = vresto \ 100

        vresto = vresto - txt4.Text * 100

        txt3.Text = vresto \ 50

        vresto = vresto - txt3.Text * 50

        txt2.Text = vresto \ 20

        vresto = vresto - txt2.Text * 20

        txt1.Text = vresto \ 10

        vresto = vresto - txt1.Text * 10

        If total < 50 / 100 Then

            MessageBox.Show("Insira Dinheiro Suficiente.")

        Else

            MessageBox.Show("Comprou o Produto. O seu troco é " & troco & " €")

            txt6.Text = ""

            total = 0

        End If

E está a funcionar a 100%.

Thanxxx pela ajuda  :cheesygrin:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.