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

GPumas

[dúvida] Programa para contagem de votos

11 mensagens neste tópico

Boas,

Eu estou a fazer um trabalho de programação em que tenho de desenvolver um programa de contagem de votos.

O programa deve pedir ao utilizador ( ou utilizadores já que o número de eleitores é definido logo no início do programa pelo utilizador ) para introduzir as pontuações para A, B, ou C, segundo algumas regras que agora não interessam. Depois disto deve aparecer no ecrã a soma das pontuações de A B e C ordenadas da maior para a menor. Como forma de desempate deve recorrer-se à média, se necessário.

Já tenho feito até à introdução das pontuações e respectivas restrições, mas os passos seguintes não sei como fazer. Penso que tanto a soma como a média das pontuações deve ser feita por métodos mas ainda não consegui perceber como funcionam.

Aceitam-se sugestões.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tanto a média como a soma, podes calcular através de simples ciclo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como? Eu já tenho um for criado para o número de eleitores e um if else para as restrições na atribuição de pontuações.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o q é q n consegues fazer em concreto?

Se tens o numero de votos, tens a soma.

E a média é dividir o numero de votos pelo numero de eleitores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O programa consiste no seguinte:

inicialmente o utilizador deve indicar o número de eleitores que vão votar.

depois cada eleitor deve introduzir uma nota de 0 a 100 para cada uma das opções: A, B e C.

O que eu pretendo fazer agora é somar as pontuações atribuídas a cada uma das opções e mostrar cada uma delas no ecrã por ordem decrescente.

Ex:

eleitor 1: 10 pontos para A; 20 para B; 30 para C ----- Valores introduzidos

eleitor 2: 50 para A; 30 para B; 40 para C    ------------ pelo utilizador

.

.

eleitor n

C: 70 ---------- Aparecer no ecrã depois

A: 60 ---------- de todos os utilizadores

B: 50 ---------- introduzirem as pontuações

Além disto ainda tenho de criar um método com a média que será utilizado caso alguma das opções esteja empatada.

Penso que agora me expliquei bem mas se mesmo assim não perceberes alguma coisa diz.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

até agora tenho isto:

import java.util.Scanner;



/** 
*@author
*/ 


    public class votos { 
    public static void main (String [] args ) {


        /** Le um valor introduzido pelo utilizador
        que vai definir o numero de votantes */

    Scanner numvotantes = new Scanner (System.in);
    
    System.out.print("Numero de eleitores: ");
    int votantes =  numvotantes.nextInt();
    
    

    /** Faz o scan das pontuaçoes introduzidas pelo utilizador*/
    
    
    for(int eleitor =1; eleitor<= votantes; eleitor++){
        System.out.println ("Faca o favor de introduzir a pontuacao desejada. Eleitor "+eleitor);
    Scanner pontos =new Scanner (System.in);
    System.out.print("pontuacao para A: ");
    int votoa= pontos.nextInt();
    System.out.print("pontuacao para B: ");
    int votob =pontos.nextInt();
    System.out.print("pontuacao para C: ");
    int votoc = pontos.nextInt ();
    
    
    if(votoa>100 || votob>100 || votoc>100 || votoa+votob+votoc>100){
       eleitor= eleitor - 1;
       System.out.println ("Pontuacao introduzida invalida. Efectue nova votacao");}
    else System.out.println ("obrigado pelo seu voto");

    
           }
    }
    }

O que me falta fazer é somar a pontuação obtida por cada uma das opções (e ordenar por ordem decrescente) e também criar uma forma de caso existam opções empatadas seja feito o esempate (terá de ser pela média)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

até agora tenho isto:

import java.util.Scanner;



/** 
*@author
*/ 


    public class votos { 
    public static void main (String [] args ) {


        /** Le um valor introduzido pelo utilizador
        que vai definir o numero de votantes */

    Scanner numvotantes = new Scanner (System.in);
    
    System.out.print("Numero de eleitores: ");
    int votantes =  numvotantes.nextInt();
    
    

    /** Faz o scan das pontuaçoes introduzidas pelo utilizador*/
    
    
    for(int eleitor =1; eleitor<= votantes; eleitor++){
        System.out.println ("Faca o favor de introduzir a pontuacao desejada. Eleitor "+eleitor);
    Scanner pontos =new Scanner (System.in);
    System.out.print("pontuacao para A: ");
    int votoa= pontos.nextInt();
    System.out.print("pontuacao para B: ");
    int votob =pontos.nextInt();
    System.out.print("pontuacao para C: ");
    int votoc = pontos.nextInt ();
    
    
    if(votoa>100 || votob>100 || votoc>100 || votoa+votob+votoc>100){
       eleitor= eleitor - 1;
       System.out.println ("Pontuacao introduzida invalida. Efectue nova votacao");}
    else System.out.println ("obrigado pelo seu voto");

    
           }
    }
    }

O que me falta fazer é somar a pontuação obtida por cada uma das opções (e ordenar por ordem decrescente) e também criar uma forma de caso existam opções empatadas seja feito o esempate (terá de ser pela média)

Podias inserir o resultado, pode haver quem tenha uma dúvida semelhante :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código final foi este

import java.util.Scanner;

public class votos2 {
    public static void main (String [] args ) {

/** Le um valor introduzido pelo utilizador
    que vai definir o numero de eleitores */


Scanner numvotantes = new Scanner (System.in);
int votantes = 0;

do{
    
    System.out.print("Numero de eleitores: ");
    votantes = numvotantes.nextInt();
    
    if( votantes<1 )
	System.out.println("Numero de eleitores invalido. ");
    System.out.println("");
    
}
while(votantes< 1);



int somaA = 0;
int somaB = 0;
int somaC = 0;
int contadora = 0;
int contadorb = 0;
int contadorc = 0;
boolean erro= false;


/** Faz o scan das pontuacoes introduzidas pelo utilizador*/



for(int eleitor =1; eleitor<= votantes; eleitor++) 
    {

	System.out.println("");
	System.out.println ("Eleitor " + eleitor +", faca o favor de introduzir a pontuacao desejada.  ( A soma das pontuacoes atribuidas a cada uma das opcoes nao deve exceder o numero 100 e, alem disso, nao deve atribuir valores negativos nem superiores a 100 a nenhuma das opcoes ).");
	System.out.println("");

	Scanner pontos =new Scanner (System.in);

	do{
	    
	    System.out.print("Pontuacao para A: ");
	    int votoa = pontos.nextInt();
	    
	    System.out.print("Pontuacao para B: ");
	    int votob =pontos.nextInt();
	    
	    System.out.print("Pontuacao para C: ");	    
	    int votoc = pontos.nextInt ();
	    
	    
	    
	    /** Aplica as restricoes */
	    
	    
	    if(votoa>100 || votob>100 || votoc>100 || votoa+votob+votoc>100){
		erro=true;

		System.out.println("");
		System.out.println ("A pontuacao que introduziu nao respeita as regras. Efectue nova votacao");
		System.out.println("");

	    }
	    
	    else {

		somaA += votoa;
		somaB += votob;
		somaC += votoc;
		erro=false;
		System.out.println("");	
		System.out.println ("Obrigado pelo seu voto");

		if (votoa>0 && votoa<=100 ) 
		    contadora ++;
		if (votob>0 && votob<=100 ) 
		    contadorb ++;
		if (votoc>0 && votoc<=100 ) 
		    contadorc ++;
	    }
	    
	}while(erro);
    }



/** Faz a media de cada uma das opcoes*/


double mediaA = Math.round(((double) somaA/(double) contadora)*10.0)/10.0;
double mediaB = Math.round(((double) somaB/(double) contadorb)*10.0)/10.0;
double mediaC = Math.round(((double) somaC/(double) contadorc)*10.0)/10.0;



/** Imprime no ecra o valor da pontuacao obtida por cada uma das opcoes e tambem a media*/


System.out.println("");	

System.out.println("Pontuacao total de A = " +somaA );
System.out.println("Media de A = " + mediaA);

System.out.println("");

System.out.println("Pontuacao total de B = " +somaB );
System.out.println("Media de B = " + mediaB);

System.out.println("");

System.out.println("Pontuacao total de C = " +somaC);
System.out.println("Media de C = " + mediaC);

    }
    
}

Nova dúvida: Tenho de implementar um método para aplicar restrições aos votos.

Vou tentar exemplificar:

Eleitor 1 [ A B C D] : 10 20 30 40 //voto correcto

Eleitor 2 [ A B C D] : 20 20 30 40 //voto inválido pois a somadas votações excede 100

Podem dar-me um exemplo de como fazer este método e como o invocar no main?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja estás a fazer essa validação quando fazes "votoa+votob+votoc>100"

Agora o que não estás a verificar é se as votações são positivas.

Conselho: Estas a programar, usa objectos, não programes Java há lá C.

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