Ir ao conteúdo
  • Cadastre-se

Help VB!


xDhiegoX

Posts recomendados

Eae galera..fmz?

to fazendo o 1º ano de informatica e estamos criando um programinha básico de eleicao..

O que ta acontecendo é o seguinte..

Tem 6 eleitores e vamos fazer de conta que o resultado seja essa:

Eleitor 1: 15 votos

Eleitor 2: 1 voto

Eleitor 3: 20 votos

Eleitor 4: 50 votos

Eleitor 5: 10 votos

Eleitor 6: 8 votos

Eu preciso tirar a porcentagem de cada um e se passar do 50% +1 tem o 2º turno..

Minha duvida é como eu faco para tirar a porcentagem de cada eleitor e dar exatos 100%?

Link para o comentário
Compartilhar em outros sites

Valeu pela ajuda .

So mais uma coisa..

Eu usei esses comandos:

Label11 = Text1 / Text7 * (100)

Label12 = Text2 / Text7 * (100)

Label13 = Text3 / Text7 * (100)

Label14 = Text4 / Text7 * (100)

Label15 = Text5 / Text7 * (100)

Label16 = Text6 / Text7 * (100)

ele da a porcentagem certa so que se deixar algum eleito sem voto, ele da erro..porque?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Postado Originalmente por xDhiegoX@29 de março de 2005, 17:54

Label11 = Text1 / Text7 * (100)

Label12 = Text2 / Text7 * (100)

Label13 = Text3 / Text7 * (100)

Label14 = Text4 / Text7 * (100)

Label15 = Text5 / Text7 * (100)

Label16 = Text6 / Text7 * (100)

A primeira regra que um desenvolvedor precisa aprender é: controles NÃO SÃO variáveis. Jamais use controles para fazer o trabalho que uma variável com tipo de dados correto faz melhor.

Acostume-se à declarar variáveis, armazenar valores, calcular e DEPOIS no final exibir esses valores em controles.

Bom, fiz um esboço aqui pra te ajudar, ele calcula os percentuais e enumera os candidatos em ordem decrescente (do mais para o menos votado), exibindo o resultado no final.

Claro que você pode aperfeiçoar o código, recuperando nomes de candidatos e quantidade de votos à partir de dados digitados em controles TextBox, pois esse exemplo eu fiz com valores fixos (usando o mesmo esquema que você passou).

Note que eu coloquei nomes de variáveis bem "auto-explicativos". Isso e mais os comentários vão ajudá-lo à entender como funciona.

Coloque um CommandButton num Form, e copie esse código:

Private Sub Command1_Click()
   
   'Quantidade fixa de Candidatos (pode ser variável também)
   Const QuantidadeCandidatos As Long = 6
   
   'Armazena os nomes dos Candidatos
   '(isto não é necessário, serve apenas para efeito "estético")
   Dim CandidatoNome() As String
   'Armazena a quantidade de votos
   Dim CandidatoVotos() As Long
   'Armazena os percentuais de votos
   Dim CandidatoPercVotos() As Double
   'Soma de todos os votos
   Dim TotalDeVotos As Long
   
   'Numa comparação dentro da estrutura 'For Next',
   'armazena o maior percentual de votos encontrado
   Dim MaiorPercentualAteAgora As Double
   'Numa comparação dentro da estrutura 'For Next',
   'armazena o índice do Candidato com maior percentual de votos
   Dim IndiceCandidatoComMaiorPercentualAteAgora As Long
   'Para eliminar os candidatos já comparados, armazena-se
   'o respectivo índice em uma string separada por vírgulas
   Dim IndicesDosCandidatosComMaisVotos As Variant
   
   'Contadores para estruturas 'For... Next'
   Dim CandidatoAtual As Long, IndiceCandidato As Long
   
   'Outras variáveis
   Dim MensagemResultado As String
   
   '--------------------------------------------------
   
   'Redimensionando arrays para 6 candidatos
   ReDim CandidatoNome(1 To QuantidadeCandidatos)
   ReDim CandidatoVotos(1 To QuantidadeCandidatos)
   ReDim CandidatoPercVotos(1 To QuantidadeCandidatos)
   ReDim CandidatoMaiorPercentualAteAgora(1 To QuantidadeCandidatos)
   
   'Definindo os nomes
   'Veja que cada Candidato tem o seu índice no array, e todas as
   'informações do candidato podem ser encontradas pelo seu índice
   CandidatoNome(1) = "Saturnino"
   CandidatoNome(2) = "Astrogildo"
   CandidatoNome(3) = "Teobaldo"
   CandidatoNome(4) = "Azuclécio"
   CandidatoNome(5) = "Beneplácito"
   CandidatoNome(6) = "Demétrio"
   
   'Computando os votos
   CandidatoVotos(1) = 582
   CandidatoVotos(2) = 2036
   CandidatoVotos(3) = 7854
   CandidatoVotos(4) = 1245
   CandidatoVotos(5) = 9987
   CandidatoVotos(6) = 4523

   'Somando o total de votos
   For CandidatoAtual = 1 To QuantidadeCandidatos
       TotalDeVotos = (TotalDeVotos + CandidatoVotos(CandidatoAtual))
   Next
   
   'Definindo percentuais
   For CandidatoAtual = 1 To QuantidadeCandidatos
       CandidatoPercVotos(CandidatoAtual) = (CandidatoVotos(CandidatoAtual) * 100) / TotalDeVotos
   Next
   
   'À partir daqui, a lista será ordenada em ordem
   'descrescente, do maior para o menor percentual
   MaiorPercentualAteAgora = 0
   
   'Comparar o resultado de cada Candidato...
   For CandidatoAtual = 1 To QuantidadeCandidatos
       
       '... entre eles mesmos, ...
       For IndiceCandidato = 1 To QuantidadeCandidatos
           
           '... porém "pulando" os que já foram comparados antes (ver explicação mais abaixo)
           If Not (InStr(1, IndicesDosCandidatosComMaisVotos, IndiceCandidato, vbTextCompare) > 0) Then
               'Se o Candidato atualmente comparado for o maior entre todos
               'armazenar temporariamente o seu índice e continuar comparando
               If CandidatoPercVotos(IndiceCandidato) >= MaiorPercentualAteAgora Then
                   MaiorPercentualAteAgora = CandidatoPercVotos(IndiceCandidato)
                   IndiceCandidatoComMaiorPercentualAteAgora = IndiceCandidato
               End If
           End If
           
       Next
       
       'Final da comparação: o candidato com maior percentual de votos
       'não poderá mais ser comparado, do contrário ele SEMPRE vai aparecer
       'em todas as colocações.
       'Para eliminar os candidatos já comparados, basta armazenar o respectivo
       'índice numa string separada por vírgulas. Na próxima execução da estrutura
       ''For IndiceCandidato...', a função 'InStr' se encarrega de verificar se
       'o índice já foi comparado anteriormente, se for encontrado dentro da string.
       IndicesDosCandidatosComMaisVotos = IndicesDosCandidatosComMaisVotos & IndiceCandidatoComMaiorPercentualAteAgora & ","
       
       'Zerar os marcadores para a próxima comparação
       IndiceCandidatoComMaiorPercentualAteAgora = 0
       MaiorPercentualAteAgora = 0
       
   Next
   
   'Apenas para remover a última virgula...
   IndicesDosCandidatosComMaisVotos = Mid$(IndicesDosCandidatosComMaisVotos, 1, Len(IndicesDosCandidatosComMaisVotos) - 1)
   
   'Separando os índices em arrays
   IndicesDosCandidatosComMaisVotos = Split(IndicesDosCandidatosComMaisVotos, Chr$(44), , vbTextCompare)
       
   'Preparando a mensagem
   For CandidatoAtual = 1 To QuantidadeCandidatos
       MensagemResultado = MensagemResultado & CandidatoAtual & "° lugar: " & _
                           CandidatoNome(IndicesDosCandidatosComMaisVotos(CandidatoAtual - 1)) & " (" & _
                           CandidatoVotos(IndicesDosCandidatosComMaisVotos(CandidatoAtual - 1)) & " votos, " & _
                           Format$(CandidatoPercVotos(IndicesDosCandidatosComMaisVotos(CandidatoAtual - 1)), "0.00") & "% do total)" & vbNewLine
   Next
   
   MsgBox MensagemResultado, vbInformation, "Resultado"
   
   'Esvaziando arrays e variáveis 'Variant' para liberar memória
   Erase CandidatoNome
   Erase CandidatoVotos
   Erase CandidatoPercVotos
   Set IndicesDosCandidatosComMaisVotos = Nothing
   
End Sub

[]'s

Link para o comentário
Compartilhar em outros sites

Postado Originalmente por rudinei2612@30 de março de 2005, 10:58

Matemática eu não sei nada

Amigo, esta na hora de estudar um pouco de lógica!

Ah, o que você chama de eleitores são na verdade candidatos...

os eleitores votam, os candidatos recebem os votos!

PS: está fazendo cursando onde?

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!