Ir ao conteúdo
  • Cadastre-se

C Exercício votação Urna eletrônica


Kojii

Posts recomendados

Pessoal, estou travado em uma parte desse exercício, não estou sabendo como fazer a parte de contagem de votos dos candidatos e a porcentagem deles, alguém consegue me ajudar? dar alguma orientação, etc

 

o enunciado diz: Em um ano de eleições municipais, dois candidatos disputam a prefeitura de Bicas: Número: 1 - Candidato João e Número 2 - Candidato Marta. Elabore um programa que permita ao eleitor votar nos candidatos, uma espécie de urna eletrônica. O eleitor poderá votar também em branco e, até mesmo, anular seu voto digitando um número que não seja de um dos candidatos. Ao final do dia, o presidente da seção deverá digitar o código 017000569999 para encerrar a votação. O programa deve então, emitir o boletim de urna contendo: i) Total de Votos; ii) Total de Votos Brancos; iii) Total de Votos Nulos; iv) Total de Votos do Candidato Número 1; Percentagem de Votos do Candidato 1; Total de Votos do Candidato 2; Percentagem de Votos do Candidato 2

 

Fiz isso até o momento:

#include <stdio.h>
#include <stdlib.h>

int main(void){

    int listaCodigos [4], i;
    char candidatos[][20] = {"Joao", "Marta", "Voto Nulo", "Voto em Branco"};
    int saida = 2;
    int voto;
    int total_voto = 0;



    printf("Digite 1 para votar em Joao, 2 para votar em Marta\n3 para voto nulo e 4 para votar em branco\n\n");


    for(i = 0; i < 4; i++){
        listaCodigos[i] = 0;
    }

    while(saida >= 0 && saida < 100){
        printf("Digite seu voto. Para encerrar, digite o codigo da urna: ");
        scanf("%d", &voto);

        if(voto >= 1 && voto <= 100)
            listaCodigos[voto - 1]++;
            saida = voto;
            total_voto = total_voto + listaCodigos[i];

    }

    for(i = 0; i < 4; i++){
        printf("\nCandidato %s recebeu %d votos \n", candidatos[i], listaCodigos[i]);

        if(saida == 17000569999){
            break;
        }
    }

    printf("\ntotal: %d\n\n", total_voto);

    return 0;

}

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Visão simplista serve?

Crie variáveis com os nomes (número de votos)  joao, marta, nulo e branco e if's simples dentro de um while.. algo como:

while (voto!= 17000569999) //saída
{
scanf("%d", &voto);
if (voto==1) joao++;
//...
if (voto==4) branco++;
}
//imprima resultado

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@.if fiz conforme você sugeriu, funciona, porém o primeiro voto não contabiliza, tentei algumas mudanças e continuou... o que poderia ser?

 

#include <stdio.h>
#include <stdlib.h>

int main(void){

    int joao = 0, marta = 0, branco = 0, nulo = 0;
    int voto = 0;



    printf("Digite 1 para votar em Joao, 2 para votar em Marta\n3 para voto nulo e 4 para votar em branco: ");
    scanf("%d", &voto);


    while (voto!= 0) //saída

{

    printf("Digite 1 para votar em Joao, 2 para votar em Marta\n3 para voto nulo e 4 para votar em branco: ");

    scanf("%d", &voto);{
    if (voto==1) joao++;
    
    }

    if (voto==4) branco++;{
        
    }
    
    if(voto==2) marta++;{
        
    }

    if(voto==3) nulo++;{
        
    }
    


}

    printf("votos Joao: %d\n", joao);
    printf("votos Marta: %d\n", marta);
    printf("votos Nulo: %d\n", nulo);
    printf("votos Branco: %d\n", branco);


return 0;

}

 

Link para o comentário
Compartilhar em outros sites

7 horas atrás, .if disse:

O 1º scan está fora do while e não contabiliza. Prestenção.

 

Oi, Amigo!  :)  (Não tô te seguindo!)

Passei por aqui e fiquei curiosa com esses programas em linguagem C. Aí baixei um compilador (Dev -C++ 5.11) e estou tentando resolver alguns desses problemas que aparecem por aqui...

 

Como você conseguiu resolver esse problema? Estou quebrando a cabeça e não consigo...(tentei colocar o scanf dentro do while mas não funcionou...):(

 

Aí dei um jeitinho e funcionou mas não é o correto...

 

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<locale.h>

// 

main()
{
    setlocale(LC_ALL,"portuguese");
    

    int joao = 0, marta = 0, branco = 0, nulo = 0;
    int voto = 0;

    printf("Digite: \n1 para votar em Joao \n2 para votar em Marta \n3 para voto nulo \n4 para votar em branco \n5 para iniciar a votação::bye: ");
    scanf("%d", &voto);
   

    while (voto!= 0) //saída

{

    printf("\nDigite: \n1 para votar em Joao \n2 para votar em Marta \n3 para voto nulo \n4 para votar em branco: ");

    scanf("%d", &voto);{
    if (voto==1) joao++;
    
    
    }

    if (voto==4) branco++;{
        
    }
    
    if(voto==2) marta++;{
        
    }

    if(voto==3) nulo++;{
        
    }
    


}
    printf("\n\nApuração: \n
    ");
    printf("votos Joao: %d\n", joao);
    printf("votos Marta: %d\n", marta);
    printf("votos Nulo: %d\n", nulo);
    printf("votos Branco: %d\n", branco);


    

    
    
    
getchar();
printf("\n\n");
system("pause");
return(0);    

29 minutos atrás, Maria Cristina Oliveira disse:

Como você conseguiu resolver esse problema? Estou quebrando a cabeça e não consigo...(tentei colocar o scanf dentro do while mas não funcionou...):(

 

Opa!  Já resolvi...

 

Fiz int voto = 9;  e também assim:

 

/*printf("Digite: \n1 para votar em Joao \n2 para votar em Marta \n3 para voto nulo \n4 para votar em branco ");

scanf("%d", &voto);*/

 

(É que eu ainda estou me estranhando com esse compilador...)👍

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Escreva em torno dos dados. É o caminho simples.

 

O dado aqui é o voto. E o voto é um número. Mas tem o voto nulo e o voto em branco, e o "voto" de encerramento.

 

Do enunciado:

 

Em 16/06/2021 às 13:02, Kojii disse:

Número: 1 - Candidato João e Número 2 - Candidato Marta. Elabore um programa que permita ao eleitor votar nos candidatos, uma espécie de urna eletrônica. O eleitor poderá votar também em branco e, até mesmo, anular seu voto digitando um número que não seja de um dos candidatos. Ao final do dia, o presidente da seção deverá digitar o código 017000569999 para encerrar a votação. O programa deve então, emitir o boletim de urna contendo: i) Total de Votos; ii) Total de Votos Brancos; iii) Total de Votos Nulos; iv) Total de Votos do Candidato Número 1; Percentagem de Votos do Candidato 1; Total de Votos do Candidato 2; Percentagem de Votos do Candidato 2

 

Note a pegadinha do voto final com um zero à esquerda. Então não deve ser lido como um número.
 

017000569999 encerra a votação, mas 17000569999 é um voto nulo e a eleição segue. 1 vota no João, 2 na Marta e qualquer outro número é um voto nulo. Se não for um número o voto é BRANCO.

 

Isso sugere algo bem simples: use fgets() e leia as linhas até ler o valor de encerramento, lendo até 13 posições ( os 12 mais o zero do final).

  • Se for o valor final encerre as contas, mostre os resultados e termine o programa. 
  • Se não for converte o número para int pra não ter que testar dígito a dígito.
  • se for 1 Joao
  • se for 2 Marta
  • se for outro número voto nulo
  • se não for nada disso o voto é branco. 

Um loop e uns testes.

 

EXEMPLO

 

O programa abaixo é praticamente uma possível solução e mostra

 

C:\Clube>  gcc -o  tst -Wall voto.c
C:\Clube>  ./tst
Seu voto: 
[Nao leu um numero] Voto em branco 1
Seu voto:
[Nao leu um numero] Voto em branco 2
Seu voto: 1
[Lido 1] Voto 1 em Joao
Seu voto: 2
[Lido 2] Voto 1 em Marta
Seu voto: 3
[Lido 3] Voto nulo 1
Seu voto: 3
[Lido 3] Voto nulo 2
Seu voto: 2
[Lido 2] Voto 2 em Marta
Seu voto: 1
[Lido 1] Voto 2 em Joao
Seu voto: 1
[Lido 1] Voto 3 em Joao
Seu voto: 17000569999
[Lido 17000569999] Voto nulo 3
Seu voto: 017000569999
FINAL! Joao: 3 Marta: 2 Brancos: 2 Nulos: 3
C:\Clube> 

 

O código C

 

#include <stdio.h>
#include <string.h>

int main(void)
{
    const char* final = "017000569999";
    char        voto[13] = {0};
    unsigned    joao = 0;
    unsigned    marta = 0;
    unsigned    brancos = 0;
    unsigned    nulos = 0;
    unsigned long long int numero = 0; // pode ter 12 digitos
    int         res = 0;

    printf("Seu voto: ");
    while( strcmp( fgets(voto, sizeof(voto), stdin), final ) != 0 )
    {   // enquanto nao ler o comando final
        res = sscanf( voto, "%llu", &numero);
        if ( res == 1 ) 
            printf("[Lido %llu] ", numero);
        else
            printf("[Nao leu um numero] ");

        // nao leu um numero entao o voto foi em branco
        if ( res != 1 )
        {
            brancos +=1;
            printf("Voto em branco %u\n", brancos );
        }
        else
            switch( numero ) // nulo ou marta ou joao
            { 
                case 1:
                    joao += 1;
                    printf("Voto %u em Joao\n", joao );
                    break;

                case 2:
                    marta += 1;
                    printf("Voto %u em Marta\n", marta );
                    break;

                default:
                    nulos += 1;
                    printf("Voto nulo %u\n", nulos );
            };   	// switch()   
            printf("Seu voto: ");
    }; // while()      
    printf("FINAL! Joao: %d Marta: %d Brancos: %d Nulos: %d\n",
        joao, marta, brancos, nulos );
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...