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

san115592

[Resolvido] Ajuda na resolução de ex de VB

18 mensagens neste tópico

problema: uma firma tem viaturas de 7, 4 e 1m lugar , progarama que receba um x nunero de pessoas e faça a distribuição possivel de forma a utilizar o menos número de carros.

Sou iniciante no VB, e neste problema n posso usar os IF o Then e Else, algém me ajuda, apenas posso usar os operadores >e < =,

já escrevi este código está meio errado, porque se inserir 6 pessoas deveria dar-me a opção de um carro de 7, fiz-me compreender?

Estou aflita alguém me pode ajudar.

Este foi o codigo que já fiz mas fala-me aqui algo, pf ajudem, acho que bloquei

Dim carros7 As Integer
Dim Npessoas As Integer
Dim carros4 As Integer
Dim carros1 As Integer
Dim Result1 As Integer
Dim result2 As Integer
Dim Result3 As Integer

Npessoas = TextBox1.Text
carros7 = Npessoas \ 7
Result1 = Npessoas Mod 7
Label7.Text = carros7 & " carros" & " de 7 lugares"
carros4 = Result1 \ 4
result2 = Result1 Mod 4
Label4.Text = carros4 & " carros" & " de 4 lugares"
carros1 = result2 \ 1
Result3 = result2 Mod 1
Label1.Text = carros1 & " carros" & " de 1 lugar"

Obrigada fico a aguardar

Um bem haja!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa mas não entendo o que queres!

Explica lá melhor qual o objectivo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando testas o carro de 7 lugares soma 6 ao número de pessoas.

Quando testas o carro de 4 lugares soma 3 ao número de pessoas.

Quando testas o carro de 1 lugar soma 0 ao número de pessoas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigada

Posso estar a ver mal , isto resolvia-se com 'if's' só que o, prof não quer ......mas continua a não dar, tenho este codigo:

Dim Npessoas As Integer

        Dim carros7 As Integer

        Dim carros4 As Integer

        Dim carros1 As Integer

        Dim Result1 As Integer

        Dim result2 As Integer

        Dim Result3 As Integer

        Npessoas = TextBox1.Text

        carros7 = (Npessoas + 6) \ 7

        Result1 = Npessoas Mod 7

        Label7.Text = carros7 & " carros" & " de 7 lugares"

        carros4 = (Result1 + 3) \ 4

        result2 = Result1 Mod 4

        Label4.Text = carros4 & " carros" & " de 4 lugares"

        carros1 = result2 \ 1

        Result3 = result2 Mod 1

        Label1.Text = carros1 & " carros" & " de 1 lugar"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Querias a solução complesta não era ?  :P

Mas tens de puxar um pouco pela cabeça e só assim aprendes. Além disso não é o objectivo de um fórum resolver problemas mas apenas ajudar.

Espero que compreendas!  :confused:

Aqui vai a lógica sem "If's"

Total = 40

Calcular número 7 carros = total / 7

Calcular número 4 carros = (total - (carros 7 usados * 7))/4

Calcular número 1 carros = (total - (carros 7 usados * 7) + (carros 4 usados * 4))/1

Dica:

Em todos usas o função Fix() para de dar apenas a parte inteira.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa enviar para o privado foi sem mal, sou kota mas novata nos fóruns,

Obrigada e Bem haja!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmmmm ... esclarece-me uma coisa.

Podes escolher sempre carros de 7 lugares para minimizar o número de carros.

Se forem 3 pessoas, um carro de 7 lugares é só um carro (assim como um carro de 4 lugares é só um carro também).

Ou não?

O objectivo não é minimizar o número de carros?

Se calhar é minimizar o número de carros sem ter carros com assentos vazios?

A minha ideia de somar 6 (ou 3, ou 0) dava-te sempre o número mínimo de carros de 7 lugares (1 pessoa ==> 1 carro de 7 lugares) LOL

===============

Outra coisa: como é que podes usar > e <= sem IFs (e THENs e ELSEs)?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu percebi, mas dou como exemplo se por acaso tivesse 12 pessoas eu tenho de distribuir por todos os tipos de carro, é isso que o prof pretende , a perugunta que me fazes n te sei responder, eu trabalho em informática embora na area dde redes mas tenho visto algum codigo sej ele VB Pascal e usamos sempre IFS e THENs etc, eu interroguei o prof, ele disse-me ' Só o que ensinei' perante isto!!!???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O meu filho esteve hoje em casa e supostamente tinha me dado a resposta ao exercício mas está com algumas falhas...

Dim Npessoas As Double
        Dim carros7 As Double
        Dim carros_7 As Double
        Dim carros_6 As Double
        Dim carros_5 As Double
        Dim carros4 As Double
        Dim carros_4 As Double
        Dim carros_3 As Double
        Dim carros_2 As Double
        Dim carros1 As Double
        Dim Result1 As Double
        Dim Result2 As Double
        Dim Result3 As Double
        Dim Result4 As Double
        Dim Result5 As Double
        Dim Result6 As Double

        Npessoas = TextBox1.Text

        carros_7 = Npessoas \ 7
        Result1 = Npessoas Mod 7
        'Se numero de numero de pessoas final for igual a 6
        carros_6 = (Result1 + 1) \ 7
        Result2 = (Result1 + 1) Mod 7
        'Se numero de pessoas final for igual a 5
        carros_5 = (Result2 + 2) \ 7
        Result3 = (Result2 + 2) Mod 7

        carros7 = carros_7 + carros_6 + carros_5
        Label7.Text = carros7 & " carros" & " de 7 lugares"

        carros_4 = Result3 \ 4
        Result4 = Result3 Mod 4
        'Se o numero de pessoas final for igual a 3
        carros_3 = (Result4 + 1) \ 4
        Result5 = (Result4 + 1) Mod 4
        'Se o numero de pessoas final for igual a 2
        carros_2 = (Result5 + 2) \ 4
        Result6 = (Result5 + 2) Mod 4

        carros4 = carros_4 + carros_3 + carros_2
        Label4.Text = carros4 & " carros" & " de 4 lugares"

        carros1 = Result6 \ 1
        Label1.Text = carros1 & " carros" & " de 1 lugar"

Ele disse-me que este exercício deve de ser para o professor introduzir os if's brevemente... digam-me aí onde e´que falhou o raciocínio dele.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já está tudo a trabalhar mas com um erro no fim...

        Dim Npessoas As Double
        Dim carros7 As Double
        Dim carros_7 As Double
        Dim carros_6 As Double
        Dim carros_5 As Double
        Dim carros4 As Double
        Dim carros_4 As Double
        Dim carros_3 As Double
        Dim carros_2 As Double
        Dim carros1 As Double
        Dim Result1 As Double
        Dim Result2 As Double
        Dim Result3 As Double
        Dim Result4 As Double
        Dim Result5 As Double
        Dim Result6 As Double

        Npessoas = TextBox1.Text

        carros_7 = Npessoas \ 7
        Result1 = Npessoas Mod 7
        'Se numero de numero de pessoas final for igual a 6
        carros_6 = (Result1 + 1) \ 7
        Result2 = (((Result1 + 1) Mod 7) - 1)
        'Se numero de pessoas final for igual a 5
        carros_5 = (Result2 + 2) \ 7
        Result3 = (((Result2 + 2) Mod 7) - 2)

        carros7 = carros_7 + carros_6 + carros_5
        Label7.Text = carros7 & " carros" & " de 7 lugares"

        carros_4 = Result3 \ 4
        Result4 = Result3 Mod 4
        'Se o numero de pessoas final for igual a 3
        carros_3 = (Result4 + 1) \ 4
        Result5 = (((Result4 + 1) Mod 4) - 1)
        'Se o numero de pessoas final for igual a 2
        carros_2 = (Result5 + 2) \ 4
        Result6 = (((Result5 + 2) Mod 4) - 2)

        carros4 = carros_4 + carros_3 + carros_2
        Label4.Text = carros4 & " carros" & " de 4 lugares"


        carros1 = Result6 \ 1
        Label1.Text = carros1 & " carros" & " de 1 lugar"

O erro é, se o número de pessoas não for certo (houver lugares vazios no carro) aparece-me por exemplo para duas pessoas:

0 carros de 7 lugares

1 carro de 4 lugares

-2 carros de um lugar

Como é que eu me desembaraço desta? Into acontece com todos os casos em que existam lugares vazios.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é o resultado em carros de 1 lugar quando começas com números diferentes de pessoas?

Para 2 pessoas é -2 ... e tu queres 0.

Para 3 pessoas é ___ ... e tu queres ___

Sem IFs (!!!!!) como é que hás-de converter o resultado obtido para o pretendido?

É da mesma forma que ajustaste o número de carros de 4 lugares.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é o resultado em carros de 1 lugar quando começas com números diferentes de pessoas?

Para 2 pessoas é -2 ... e tu queres 0.

Para 3 pessoas é ___ ... e tu queres ___

Sem IFs (!!!!!) como é que hás-de converter o resultado obtido para o pretendido?

É da mesma forma que ajustaste o número de carros de 4 lugares.

Para 3 pessoas aparece -1 e eu queria 0. (seria 1 carro de 4  lugares)

Para 5 pessoas aparece -2 e eu queria 0. (seria 1 carro de 7  lugares)

Para 6 pessoas aparece -1 e eu queria 0. (seria 1 carro de 7 lugares)

Sempre que existem carros com lugares vazios dá -1 carros de 1 lugar ou -2 carros de 1 lugar.

É isto que eu agora não consigo resolver...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para 3 pessoas aparece -1 e eu queria 0. (seria 1 carro de 4  lugares)

Para 5 pessoas aparece -2 e eu queria 0. (seria 1 carro de 7  lugares)

Para 6 pessoas aparece -1 e eu queria 0. (seria 1 carro de 7 lugares)

Sempre que existem carros com lugares vazios dá -1 carros de 1 lugar ou -2 carros de 1 lugar.

É isto que eu agora não consigo resolver...

Ok ... esses -1, -2, etc. são o que está na variável Result6.

Deixa por isso aqui com outro formato

Result6 Pretendido
  -2        0
  -1        0
   0        0
   1        1

Porque é que, ao calcular o número de carros de 4 lugares, fizeste

        carros_4 = Result3 \ 4
        Result4 = Result3 Mod 4
        'Se o numero de pessoas final for igual a 3
        carros_3 = (Result4 + 1) \ 4
        Result5 = (((Result4 + 1) Mod 4) - 1)
        'Se o numero de pessoas final for igual a 2
        carros_2 = (Result5 + 2) \ 4
        Result6 = (((Result5 + 2) Mod 4) - 2)

O que é que não estava bem em Result3?

Porque é que precisaste de andar a somar e subtrair coisas aos vários Results?

O que é que não está bem em Result6?

O que é que é preciso somar e subtrair para obter o resultado pretendido?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se entendi bem, eu fazia assim:

Dim carros7 As Integer
Dim carros4 As Integer
Dim carros1 As Integer

Dim total As Integer

total = InputBox("Indicar o total de carros!")

carros7 = total \ 7
carros4 = (total - (carros7 * 7)) \ 4
carros1 = (total - ((carros7 * 7) + (carros4 * 4))) \ 1

Debug.Print "Distribuição para " & total & " carro(s)"
Debug.Print carros7 & " carro(s) de 7 lugares"
Debug.Print carros4 & " carro(s) de 4 lugares"
Debug.Print carros1 & " carro(s) de 1 lugares"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hehehe jpaulino

6 pessoas ==> 1 carro de 7 lugares (e não 0 + 1 + 2)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hehehe jpaulino

6 pessoas ==> 1 carro de 7 lugares (e não 0 + 1 + 2)

Foi isso que entendi ... talvés errado :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se inserir 6 pessoas deveria dar-me a opção de um carro de 7, fiz-me compreender?

Ok, não li bem  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O meu filho hoje à hora de almoço já me deu a resposta... É bastante simples agora que vejo a solução.

        Dim Npessoas As Integer
        Dim carros7 As Integer
        Dim caros_7 As Integer
        Dim carros_6 As Integer
        Dim carros_5 As Integer
        Dim carros4 As Integer
        Dim carros_4 As Integer
        Dim carros_3 As Integer
        Dim carros_2 As Integer
        Dim carros1 As Integer
        Dim Result1 As Integer
        Dim result2 As Integer
        Dim result3 As Integer
        Dim result4 As Integer
        Dim result5 As Integer
        Dim result6 As Integer

        Npessoas = TextBox1.Text

        caros_7 = Npessoas \ 7
        Result1 = Npessoas Mod 7
        'se numero de pessoas final for igual a 6, entao faz-se a divisao inteira por 6 e o resto por 6
        carros_6 = Result1 \ 6
        result2 = Result1 Mod 6
        'se numero de pessoas final for igual a 5
        carros_5 = result2 \ 5
        result3 = result2 Mod 5

        carros7 = caros_7 + carros_6 + carros_5
        Label1.Text = carros7 & " carros " & "de 7 lugares"

        carros_4 = result3 \ 4
        result4 = result3 Mod 4
        ' se o numero de pessoas final for igau a 3
        carros_3 = result4 \ 3
        result5 = result4 Mod 3
        'se numero de pessoas final for igual a 2
        carros_2 = result5 \ 2
        result6 = result5 Mod 2

        carros4 = carros_4 + carros_3 + carros_2
        Label2.Text = carros4 & " carros " & "de 4 lugares"

        carros1 = result6 \ 1
        Label3.Text = carros1 & " carros " & "de 1 lugares"

Se quiserem bloquear o tópico estão á vontade. Obrigada por toda a ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora