Ir ao conteúdo
  • Cadastre-se

Como criar esse programa no Pascal ???


pvfinger

Posts recomendados

E ae gente tudo bom??? peço a ajuda de todos que posso me ajudar com esse programa no pascal, sou muito leigo em relação a isso e to passando um problema danado pra resolver esse exercicio.e ainda tenho q converter esse programa pro visualg....HELPP

Este trabalho consiste no desenvolvimento de um programa que fará uma pesquisa sobre as eleições para presidente do Brasil que ocorrerão neste ano.O programa devera ler as respostas dadas por um numero indeterminado de eleitores.Para cada eleitor serão lidos:

Em qual candidato votara em presidente.

1.	Jose Serra.     2. Dilma Rousseff.     3. Marina Silva.
A opinião sobre os 8 anos do governo Lula:
1.Ótimo. 4.Ruim.
2.Bom. 5.Péssimo.
3.Regular.
O fim dos dados é indicado por um valor de candidato q não esteja no intervalo de 1 a 3.
Sendo fornecidos esses dados , faça um programa que calcule:
*Numero de eleitores que responderam as questões .
*A porcentagem de eleitores satisfeitos com o governo Lula(resposta =Ótimo e Bom).
*A porcentagem de eleitores como regular o governo Lula.
*A porcentagem de eleitores insatisfeitos com o governo Lula(resposta=ruim e péssimo).
Um exemplo da execução do programa :
Entrada de Dados
Voto: 1
Opinião: 5
Voto: 3
Opinião: 2
..............
Voto : 87
Opinião: 3
Resultados
Total de eleitores consultados: 87.
Porcentagem de eleitores satisfeitos com Lula: 87.00%
Porcentagem de eleitores que responderam como regular: 7.00%
Porcentagem de eleitores insatisfeitos com Lula: 6.00%
O vencedor foi : Dilma com 37.93 dos votos
O segundo colocado foi : Jose Serra com 33.33 dos votos
O terceiro colocado foi: Marina Silva

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Coloque aí o que conseguiu fazer que tentaremos ajudá-lo.

- Os demais frequentadores do fórum poderão ajudá-lo a tirar dúvidas, mas não irão fazer seu trabalho por você, por isso tente ao menos fazer seus exercícios e poste suas dúvidas, senão nunca irá aprender se fizerem tudo por você.
Link para o comentário
Compartilhar em outros sites

program EX01;
uses wincrt;
var
voto,soma_votos,jose,dilma,marina,opiniao,satisfeitos,
insatisfeitos,regular:integer;
begin

Writeln('Em qual candidato votará em presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
readln(voto);

writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
readln(opiniao);

voto:=3;
opiniao:=5
while (voto<>0) and (opinião<=5)
begin
eleitores:=eleitores+1;
writeln('Voto:')readln(voto);
writeln('Opinião:')readln(opnião);
if voto = 1 then jose:=jose+1 else
if voto = 2 then dilma:=dilma+1 else
if voto = 3 then marina:=marina+1;

if (opiniao = 1) or (opiniao = 2) then satisfeitos:=satisfeitos+1 else
if (opiniao = 4) of (opiniao = 5) then insatisfeitos:=insatisfeitos+1 else
if (opiniao = 3) then regular:=regular+1;

Até essa parte eu consigo fazer dai pra frente não sei qual calculo que eu terei q usar para calcular o total de eleitores , as opiniões e as porcentagem dos concorrentes,faço curso tecnico de informatica mais sou muito lesado nessa materia.

Link para o comentário
Compartilhar em outros sites

Total de eleitores voce já tem.

Quando o usuário informar algum valor que sai do loop, é só você da "Writeln" na variavel "eleitores".O mesmo com as opinioes.

Agora porcentagem é matematica:

porcentagemcandidato := (totalvotos/eleitores)*100

Resolveu?

Para ajustar as casas decimais, como a variavel é "real".

Exiba assim:

Writeln("Porcentagem Candidato X:",porcent:5:2);

5 = numero de casas antes da virgula

2 = numero de casas depois da virgula

Isso é só um exemplo.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP


uses wincrt;
var
voto,soma_votos,jose,dilma,marina,opiniao,satisfeitos,
insatisfeitos,regular:integer;
begin

Writeln('Em qual candidato votará em presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
readln(voto);

writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
readln(opiniao);

voto:=3;
opiniao:=5
while (voto<>0) and (opinião<=5)
begin
eleitores:=eleitores+1;
writeln('Voto:')readln(voto);
writeln('Opinião:')readln(opnião);
if voto = 1 then jose:=jose+1 else
if voto = 2 then dilma:=dilma+1 else
if voto = 3 then marina:=marina+1;

if (opiniao = 1) or (opiniao = 2) then satisfeitos:=satisfeitos+1 else
if (opiniao = 4) of (opiniao = 5) then insatisfeitos:=insatisfeitos+1 else
if (opiniao = 3) then regular:=regular+1;
program EX01;

Até essa parte eu consigo fazer dai pra frente não sei qual calculo que eu terei q usar para calcular o total de eleitores , as opiniões e as porcentagem dos concorrentes,faço curso tecnico de informatica mais sou muito lesado nessa materia.

Olá,

- Organização do laço de repetição

Observe que a cada loop (volta da repetição) deverá ser refeito as perguntas para um novo usuário. LOGO, as perguntas devem ficar dentro do laço, e não fora.

OBS.: Uma técnica que costumo praticar é deixar o programa sempre compilável (não confunda com pronto). Esse processo ajuda a evitar erro, como saber onde colocar os "ends" dos "begins" por exemplo. É bem simples, a base é você sempre já colocar os "begins" já com seus respectivos "ends". (ex.: Se você colocou um "begin" do While, já teria que ter o "end" dele). Ai você meio que vai preenchendo dentro e compilando o programa de tempos em tempos, para vê se tem algum erro... como por exemplo você colocou "Opiniao" com acento num readln, também faltou colocar ";" depois do Writeln...

writeln('Voto:')readln(voto);
writeln('Opinião:')readln(opnião);

Por ai vai...

Abaixo seu código com pequenas modificações e já compilável.


uses wincrt;
var
(*
soma_votos

//seria melhor "eleitores" (assim como já está no programa)
*)
eleitores, {quantidade de votos já computados}

voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular :integer;
begin
{leitura do voto do usuário}
Writeln('Em qual candidato votará em presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
readln(voto);

{leitura da opinião do usuário}
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
readln(opiniao);

(*
voto:=3;
opiniao:=5

//por quê você está atribuindo um valor a essas variáveis?
//neste caso, você substituirá o valor digitado pelo usuário.
*)
while (voto<>0) and (opiniao<=5) do {faltou colocar o "do" do while}
begin
eleitores:=eleitores+1;
(*
writeln('Voto:'); readln(voto);
writeln('Opinião:'); readln(opnião);

//obs.: O que faz descer a linha do "whiteln" é o "ln", se for "white"
sem "ln", o cursor fica na mesma linha. (ou seja deixar os comandos na
mesma linha não tem efeito nenhum, pois o que separa cada instrução da
outra é o ";")
*)
write('Voto:'); readln(voto);
write('Opinião:'); readln(opiniao);
if voto = 1 then jose:=jose+1
else if voto = 2 then dilma:=dilma+1
else if voto = 3 then marina:=marina+1;

if (opiniao = 1) or (opiniao = 2) then satisfeitos:=satisfeitos+1
else if (opiniao = 4) or (opiniao = 5) then insatisfeitos:=insatisfeitos+1
else if (opiniao = 3) then regular:=regular+1;
end; {end while}
end.
program EX01;

Aqui uma versão mais aprimorada:

OBS.: O código NÃO está pronto, falta implementar alguns detalhes, como: Calcular as porcentagens, definir posição dos candidatos, exibir os resultados, entre outras... só deixei como uma base mesmo.

program EX01;
uses crt; {wincrt;}
var
eleitores, {quantidade de eleitores computados}

voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular :integer;
BEGIN
{preparando a tela}
TextColor(White); {cor do texto branco (mais claro)}
TextBackGround(Black); {cor do fundo preto (já é o padrão, mais não custa né?)}
ClrScr; {limpa a tela}

{INICIALIZANDO AS VARIÁVEIS}
eleitores:=0;
voto:=0;
opiniao:=0;
jose:=0;
dilma:=0;
marina:=0;
satisfeitos:=0;
insatisfeitos:=0;
regular:=0;
{OBS.: Como os valores são "0", não precisaria fazer esse processo pois o
Pascal automaticamente zera os valores..., mas é bom ir acostumando com esse
conceito, pois nem sempre essa característica é válida}

voto:=1; {somente para poder entrar no laço!!!}
while (voto=1) or (voto=2) or (voto=3) do
{enquanto voto for igual de 1, 2 e 3 (sai quando for diferente de algum}
begin
ClrScr;
eleitores:=eleitores+1; {atualiza a quantidade de eleitores}

writeln('ELEITOR NÚMERO: ',eleitores);

{leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
writeln;
write('Voto: '); readln(voto);

{leitura da opinião do usuário}
writeln;
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: '); readln(opiniao);

{apuração do voto do usuário}
if voto = 1 then jose:=jose+1
else if voto = 2 then dilma:=dilma+1
else if voto = 3 then marina:=marina+1;

{apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
satisfeitos:=satisfeitos+1
else if (opiniao = 3) then
regular:=regular+1
else if (opiniao = 4) or (opiniao = 5) then
insatisfeitos:=insatisfeitos+1;
end; {end while}

{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('TOTAL DE VOTOS:', eleitores);
writeln;



writeln('OBRIGADO POR USAR MEU PROGRAMA');
ReadKey; {pause antes de fechar}
END.

Se precisar de ajudar é só avisar... vá quebrando a cabeça um pouco e tentando fazer as modificações necessárias. Se precisar de ajuda é só avisar.

PS: Mesmo quando tiver já "feito tudo" e precisar de umas análises é só pedir também.

Abraços

Link para o comentário
Compartilhar em outros sites

Existe algum tipo de comando que substiua o "ClrScr;" ou alguma outra coisa que o eu possa fazer para que o programa sempre volte na tela das perguntas sobre o candidado e a opinião ???

ps:Porcentagem de Satisfeitos.

pr:Porcentagem Regular.

pin:Porcentagem Insatisfeitos.

----------------------------------

Para calcular as porcentagem das opiniões eu teria que criar mais 3 variaveis e fazer esse calculo...

ps:=(satisfeitos/eleitores)*100;

pr:=(regular/eleitores)*100;

pin:=(insatisfeitos/eleitores)*100;

to colocando ele antes da exebição dos resultados depois do ultimo end; e aparece esse erro Erro 26:Type mismatch o que seria esse erro ???

valeu galera esse forum ta sendo uma ajuda muito boa... agradeço a todo mundo ae !

fiz algumas mudanças mais até agora ele esta assim :

OBS:falta definir a posição dos cadidatos.

program EX01;
uses wincrt;
var
eleitores, {quantidade de eleitores computados}

voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular,
{Porcentagem das Opiniões}
ps{porcentagem satisfeitos},
pr{porcentagem regular},
pin{porcentagem insatisfeitos}:integer;
BEGIN

{INICIALIZANDO AS VARIÁVEIS}
eleitores:=0;
voto:=0;
opiniao:=0;
jose:=0;
dilma:=0;
marina:=0;
satisfeitos:=0;
insatisfeitos:=0;
regular:=0;

voto:=1; {somente para poder entrar no laço!!!}
while (voto=1) or (voto=2) or (voto=3) do
{enquanto voto for igual de 1, 2 e 3 (sai quando for diferente de algum}
begin
ClrScr;
eleitores:=eleitores+1; {atualiza a quantidade de eleitores}

writeln('ELEITOR NÚMERO: ',eleitores);

{leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
writeln;
write('Voto: '); readln(voto);

{leitura da opinião do usuário}
writeln;
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: '); readln(opiniao);

{apuração do voto do usuário}
if voto = 1 then jose:=jose+1
else if voto = 2 then dilma:=dilma+1
else if voto = 3 then marina:=marina+1;

{apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
satisfeitos:=satisfeitos+1
else if (opiniao = 3) then
regular:=regular+1
else if (opiniao = 4) or (opiniao = 5) then
insatisfeitos:=insatisfeitos+1;

end; {end while}

{ps:=(satisfeitos/eleitores)*100;
pr:=(regular/eleitores)*100;
pin:=(insatisfeitos/eleitores)*100;}

{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('Total de eleitores consultados:', eleitores);
writeln;
writeln('Porcentagem de eleitores satisfeitos com o Lula:',ps);
writeln;
writeln('Porcentagem de eleitores que respoderam como regular o governo Lula:',pr);
writeln;
writeln('Porcentagem de eleitores insatisfeito com Lula:',pin);

writeln('OBRIGADO POR USAR MEU PROGRAMA');

END.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá,

pvfinger,

1) Uso do ClrScr

exite algum tipo de comando que substiua o "ClrScr;" ou alguma outra coisa que o eu possa fazer para que o programa sempre volte na tela das perguntas sobre o candidado e a opinião ???

Uma coisa não está relacionada a outra. "ClrScr" é simplesmente um comando (da biblioteca WinCRT) que serve para limpar a tela. (eu esqueci de colocar um comentário para ajudar)

ClrScr; {limpa a tela]

2) Sobre o erro "Erro 26:Type mismatch"

to colocando ele antes da exebição dos resultados depois do ultimo end; e aparece esse erro Erro 26:Type mismatch o que seria esse erro ???

Type mismatch, como a própria tradução literal do inglês (Tipo incompatível) sugere, é que você está tentando atribuir uma valor a uma variável onde o tipo do valor não corresponde ao tipo que a variável suporta.

Ex.

var
numero :real;

begin
numero:='abcdef';
end;

Inteiro (integer) NÃO são incompatíveis com Letras (string)

No seu caso, você está inserindo um valor real (satisfeitos/eleitores)*100), dentro de uma variável que só suporta inteiros (ps :integer). Veja que a divisão de inteiros por inteiros nem sempre vai dar outro inteiro, pelo contrário, é muito mais provável que dê uma fração (número real), daí o Pascal irá automaticamente converter o resultado em real, e como explicado anteriormente, não será possível inserir no inteiro. (o compilador já percebe que é um erro, e não deixa compilar)

PS: Observe que apesar de ambos serem números (integer e real), o integer é "muito menos amplo" que o real. Se fosse o oposto funcionaria, já que os números inteiros (integer) está contido nos númeris reais (real), ou seja, os reais também aceitam inteiros!!!

3) Sobre laços de repetições

Creio que você já deve ter estudado os laços de repetições, no Pascal existem três While, Repeat e For (existem outras formas, mas não vem ao caso).

Os laços de repetições têm a finalidade de "repetir" instruções, ou seja, no cado do While, os comandos serão repetidos "enquanto a dada condição for verdadeira". Tudo que estiver associado ao While será repetido até que a condição deixe de ser verdadeira. (da mesma forma que o "if", se tiver mais de um comando, necessitará colocar um begin/end).

Veja como está estruturado o seu Programa.

Inicializa as variáveis (zera os valores)
Enquanto for um voto válido
início
-Limpa a tela
-Atualiza a quantidade de leitores
-Exibe as opções de voto
-Ler o voto
-Exibe as opções de opinião
-Ler a opinião
-Apura o voto
-Apura a opinião
fim
Calcula as porcentagens
Exibe os resultados

Após "Apurar a opinião", o programa voltará para verificar "se o voto ainda é válido", se for repetirá as instruções, senão ele "pulará" direto para próxima linha depois do "fim", que é "calcular as porcentagens".

É assim que a programação funciona, o Pascal simplesmente vai seguindo ordens. A questão é saber COMO "mandar" ele fazer (sintaxe) e quais comandos e a ordem deles usar (lógica).

Dê uma futucada neste tópico aqui do FCR.

Tópicos importantes da seção (Pascal/Dephi)

Se tiver dúvidas sobre o programa é mandar

Abraços

Link para o comentário
Compartilhar em outros sites

Poxa depois de muito custo acabei fraga ae :

program EX01;
uses wincrt;
var
eleitores, {quantidade de eleitores computados}

voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular:integer;
{Porcentagem das Opiniões}
ps{porcentagem satisfeitos},
pr{porcentagem regular},
pin{porcentagem insatisfeitos},
pj{porcentagem jose},
pd{porcentagem dilma},
pm{porcentagem marina}:real;
BEGIN

{INICIALIZANDO AS VARIÁVEIS}

eleitores:=0;
voto:=0;
opiniao:=0;
jose:=0;
dilma:=0;
marina:=0;
satisfeitos:=0;
insatisfeitos:=0;
regular:=0;


voto:=1;
opiniao:=1; {somente para poder entrar no laço!!!}
while (voto=1) or (voto=2) or (voto=3) and (opiniao=1) or (opiniao=2) or
(opiniao=3) or (opiniao=4) or (opiniao=5) do

{enquanto voto for igual de 1, 2 e 3 (sai quando for diferente de algum}
begin
ClrScr;
eleitores:=eleitores+1; {atualiza a quantidade de eleitores}

writeln('ELEITOR NÚMERO: ',eleitores);

{leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
writeln;
write('Voto: '); readln(voto);

{leitura da opinião do usuário}
writeln;
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: '); readln(opiniao);
{pj,pd,pm}
{apuração do voto do usuário}
if voto = 1 then jose:=jose+1;
pj:=(jose/eleitores)*100;
if voto = 2 then dilma:=dilma+1;
pd:=(dilma/eleitores)*100;
if voto = 3 then marina:=marina+1;
pm:=(marina/eleitores)*100;


{apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
satisfeitos:=satisfeitos+1;
ps:=(satisfeitos/(eleitores)*100);
if (opiniao = 3) then
regular:=regular+1;
pr:=(regular/eleitores)*100;
if (opiniao = 4) or (opiniao = 5) then
insatisfeitos:=insatisfeitos+1;
pin:=(insatisfeitos/eleitores)*100;



end;
{colocação dos candidatos}
if (pj>pd) and (pj>pm) then
writeln('O vencedor foi:Jose Serra:',pj:5:2);
if pd>pm then
begin
writeln('O segundo colocado foi Dilma Rousseff:',pd:5:2);
writeln('O terceiro colocado foi Marina Silva:',pm:5:2);
end
else
begin
writeln('O segundo colocado foi Marina Silva:',pm:5:2);
writeln('O terceito colocado foi Dilma Rousseff:',pd:5:2);
end;
if (pd>pj) and (pd>pm) then
begin
writeln(' Vencedor foi:Dilma Rousseff:',pd:5:2);
if pj>pm then
begin
writeln('O segundo colocado foi jose Serra:',pj:5:2);
writeln('O terceiro colocado foi Marina Silva:',pm:5:2);
end
else
begin
writeln('O segundo colocado foi Marina silva:',pm:5:2);
writeln('O terceiro colocado foi Jose Serra:',pj:5:2);
end;
if (pm>pj) and (pm>pd) then
begin
writeln('O vencedor foi Marina Silva:',pm:5:2);
if pd>pj then
begin
writeln('O segundo colocado foi Dilma Rousseff:',pd:5:2);
writeln('O terceiro colocado foi Jose sera:',pj:5:2);
end
else
begin
writeln('O segundo colocado foi Jose Serra:',pj:5:2);
writeln('O terceiro colocado foi Dilma Rousseff:',pd:5:2);
end;
end;
end;

{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('Total de eleitores consultados:', eleitores);
writeln;
writeln('Porcentagem de eleitores satisfeitos com o Lula:',ps:5:2,'%');
writeln;
writeln('Porcentagem de eleitores que respoderam como regular o governo Lula:',pr:5:2,'%');
writeln;
writeln('Porcentagem de eleitores insatisfeito com Lula:',pin:5:2,'%');

end.

agradeço a todos

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Poxa depois de muito custo acabei fraga ae :


uses wincrt;
var
eleitores, {quantidade de eleitores computados}

voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular:integer;
{Porcentagem das Opiniões}
ps{porcentagem satisfeitos},
pr{porcentagem regular},
pin{porcentagem insatisfeitos},
pj{porcentagem jose},
pd{porcentagem dilma},
pm{porcentagem marina}:real;
BEGIN

{INICIALIZANDO AS VARIÁVEIS}

eleitores:=0;
voto:=0;
opiniao:=0;
jose:=0;
dilma:=0;
marina:=0;
satisfeitos:=0;
insatisfeitos:=0;
regular:=0;


voto:=1;
opiniao:=1; {somente para poder entrar no laço!!!}
while (voto=1) or (voto=2) or (voto=3) and (opiniao=1) or (opiniao=2) or
(opiniao=3) or (opiniao=4) or (opiniao=5) do

{enquanto voto for igual de 1, 2 e 3 (sai quando for diferente de algum}
begin
ClrScr;
eleitores:=eleitores+1; {atualiza a quantidade de eleitores}

writeln('ELEITOR NÚMERO: ',eleitores);

{leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
writeln;
write('Voto: '); readln(voto);

{leitura da opinião do usuário}
writeln;
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: '); readln(opiniao);
{pj,pd,pm}
{apuração do voto do usuário}
if voto = 1 then jose:=jose+1;
pj:=(jose/eleitores)*100;
if voto = 2 then dilma:=dilma+1;
pd:=(dilma/eleitores)*100;
if voto = 3 then marina:=marina+1;
pm:=(marina/eleitores)*100;


{apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
satisfeitos:=satisfeitos+1;
ps:=(satisfeitos/(eleitores)*100);
if (opiniao = 3) then
regular:=regular+1;
pr:=(regular/eleitores)*100;
if (opiniao = 4) or (opiniao = 5) then
insatisfeitos:=insatisfeitos+1;
pin:=(insatisfeitos/eleitores)*100;



end;
{colocação dos candidatos}
if (pj>pd) and (pj>pm) then
writeln('O vencedor foi:Jose Serra:',pj:5:2);
if pd>pm then
begin
writeln('O segundo colocado foi Dilma Rousseff:',pd:5:2);
writeln('O terceiro colocado foi Marina Silva:',pm:5:2);
end
else
begin
writeln('O segundo colocado foi Marina Silva:',pm:5:2);
writeln('O terceito colocado foi Dilma Rousseff:',pd:5:2);
end;
if (pd>pj) and (pd>pm) then
begin
writeln(' Vencedor foi:Dilma Rousseff:',pd:5:2);
if pj>pm then
begin
writeln('O segundo colocado foi jose Serra:',pj:5:2);
writeln('O terceiro colocado foi Marina Silva:',pm:5:2);
end
else
begin
writeln('O segundo colocado foi Marina silva:',pm:5:2);
writeln('O terceiro colocado foi Jose Serra:',pj:5:2);
end;
if (pm>pj) and (pm>pd) then
begin
writeln('O vencedor foi Marina Silva:',pm:5:2);
if pd>pj then
begin
writeln('O segundo colocado foi Dilma Rousseff:',pd:5:2);
writeln('O terceiro colocado foi Jose sera:',pj:5:2);
end
else
begin
writeln('O segundo colocado foi Jose Serra:',pj:5:2);
writeln('O terceiro colocado foi Dilma Rousseff:',pd:5:2);
end;
end;
end;

{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('Total de eleitores consultados:', eleitores);
writeln;
writeln('Porcentagem de eleitores satisfeitos com o Lula:',ps:5:2,'%');
writeln;
writeln('Porcentagem de eleitores que respoderam como regular o governo Lula:',pr:5:2,'%');
writeln;
writeln('Porcentagem de eleitores insatisfeito com Lula:',pin:5:2,'%');

end.
program EX01;

agradeço a todos

Olá,

pvfinger, só uns detalhes...

1) Cálculo das porcentagens

Você está fazendo os cálculos das porcentagens dentro do laço de repetição, ou seja, a cada novo eleitor está sendo feito esse cálculo sem necessidade, já que a cada novo eleitor esse valor será renovado (está fazendo cálculos desnecessários). Observe que ele só deve ser feito UMA VEZ (já que só está mostrando uma).

Corrija isso (tanto para o voto, tanto para a opinião)

2) Sobre a identação do código

Veja

 {apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
[COLOR="Blue"] satisfeitos:=satisfeitos+1;[/COLOR]
[COLOR="Red"] ps:=(satisfeitos/(eleitores)*100);[/COLOR]
if (opiniao = 3) then
regular:=regular+1;
pr:=(regular/eleitores)*100;
if (opiniao = 4) or (opiniao = 5) then
insatisfeitos:=insatisfeitos+1;
pin:=(insatisfeitos/eleitores)*100;

Por exemplo, o trecho em azul está identado em relação ao "if" pois está "associado" a ele, mas ai vem o trecho em vermelho.... :huh:

Se ele deveria está associado também ao "if" (só ser executado se o a condição do "if" for verdadeira), ai você deveria colocar um "begin/end", já que o "if" só se "associa" a um comando!!!

Ficaria assim:

if (opiniao = 1) or (opiniao = 2) then
begin
satisfeitos:=satisfeitos+1;
ps:=(satisfeitos/(eleitores)*100);
end;

Mas se essa linha em azul não tiver associada, ela deverá ser recuada, para deixar o programa melhor identado.

Assim:

if (opiniao = 1) or (opiniao = 2) then
satisfeitos:=satisfeitos+1;
ps:=(satisfeitos/(eleitores)*100);

Ou seja, a identação NÃO INFLUENCIA NA LÓGICA, mas fica VISUALMENTE CLARO que NÃO pertence ao "if"...

OBSERVAÇÃO: De qualquer forma essa linha em vermelho não deveria está ai (dentro ou fora do "if"), mas sim fora do While (vide tópico 1) )

****

Abaixo seu código identado (seguindo o mesmo padrão do que estava)

program EX01;
uses crt;
var
eleitores, {quantidade de eleitores computados}

voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular:integer;
{Porcentagem das Opiniões}
ps{porcentagem satisfeitos},
pr{porcentagem regular},
pin{porcentagem insatisfeitos},
pj{porcentagem jose},
pd{porcentagem dilma},
pm{porcentagem marina}:real;
BEGIN

{INICIALIZANDO AS VARIÁVEIS}

eleitores:=0;
voto:=0;
opiniao:=0;
jose:=0;
dilma:=0;
marina:=0;
satisfeitos:=0;
insatisfeitos:=0;
regular:=0;


voto:=1;
opiniao:=1; {somente para poder entrar no laço!!!}
while (voto=1) or (voto=2) or (voto=3) and (opiniao=1) or (opiniao=2) or
(opiniao=3) or (opiniao=4) or (opiniao=5) do
{enquanto voto for igual de 1, 2 e 3 (sai quando for diferente de algum}
begin
ClrScr;
eleitores:=eleitores+1; {atualiza a quantidade de eleitores}

writeln('ELEITOR NÚMERO: ',eleitores);

{leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
writeln;
write('Voto: '); readln(voto);

{leitura da opinião do usuário}
writeln;
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: '); readln(opiniao);
{pj,pd,pm}
{apuração do voto do usuário}
if voto = 1 then jose:=jose+1;
pj:=(jose/eleitores)*100;
if voto = 2 then dilma:=dilma+1;
pd:=(dilma/eleitores)*100;
if voto = 3 then marina:=marina+1;
pm:=(marina/eleitores)*100;


{apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
satisfeitos:=satisfeitos+1;
ps:=(satisfeitos/(eleitores)*100);
if (opiniao = 3) then
regular:=regular+1;
pr:=(regular/eleitores)*100;
if (opiniao = 4) or (opiniao = 5) then
insatisfeitos:=insatisfeitos+1;
pin:=(insatisfeitos/eleitores)*100;
end; {fim while}

{colocação dos candidatos}
[COLOR="Red"]if (pj>pd) and (pj>pm) then
writeln('O vencedor foi:Jose Serra:',pj:5:2);
if pd>pm then
begin
writeln('O segundo colocado foi Dilma Rousseff:',pd:5:2);
writeln('O terceiro colocado foi Marina Silva:',pm:5:2);
end
else
begin
writeln('O segundo colocado foi Marina Silva:',pm:5:2);
writeln('O terceito colocado foi Dilma Rousseff:',pd:5:2);
end;[/COLOR]

[COLOR="Blue"]if (pd>pj) and (pd>pm) then
begin
writeln(' Vencedor foi:Dilma Rousseff:',pd:5:2);
if pj>pm then
begin
writeln('O segundo colocado foi jose Serra:',pj:5:2);
writeln('O terceiro colocado foi Marina Silva:',pm:5:2);
end
else
begin
writeln('O segundo colocado foi Marina silva:',pm:5:2);
writeln('O terceiro colocado foi Jose Serra:',pj:5:2);
end;

if (pm>pj) and (pm>pd) then
begin
writeln('O vencedor foi Marina Silva:',pm:5:2);
if pd>pj then
begin
writeln('O segundo colocado foi Dilma Rousseff:',pd:5:2);
writeln('O terceiro colocado foi Jose sera:',pj:5:2);
end
else
begin
writeln('O segundo colocado foi Jose Serra:',pj:5:2);
writeln('O terceiro colocado foi Dilma Rousseff:',pd:5:2);
end;
end;
end;[/COLOR]

{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('Total de eleitores consultados:', eleitores);
writeln;
writeln('Porcentagem de eleitores satisfeitos com o Lula:',ps:5:2,'%');
writeln;
writeln('Porcentagem de eleitores que respoderam como regular o governo Lula:',pr:5:2,'%');
writeln;
writeln('Porcentagem de eleitores insatisfeito com Lula:',pin:5:2,'%');

ReadKey;
end.

Eu acredito que esteja faltando uns "begin/end" ai nesses trechos em vemelho e azul.

- No vermelho não tem um "begin/end" para acoplar os "if" do segundo e terceiro colocados (esses "if" devem ficar dentro do "if" que verifica o primeiro colocado)

- Já no azul você colocou um "begin/end" para para acoplar o segundo e terceiro, mas ao mesmo tempo juntou também a verificação do outro "if", ou seja, do terceiro bloco (do "if" da Marina Silva está dentro do "if" da Dilma Rousseff)... Conseguiu entender??? :wacko:

Pelo que eu entendi da tua lógica... deveriam ser 3 blocos de "ifs", um para para cada presidente..

***

SOBRE VisuAlg (acho que é assim, e não VisualG) ^_^

Olha, eu nunca tinha ouvido falar, mas dei uma pesquisada no Google... Aparentemente ele é muito semelhante ao Pascal, o que muda basicamente é o nome dos comandos, ou seja, uma está em inglês e o outro em português..

Como disse antes, eu não conheço a sintaxe do VisuAlg, mas pelos exemplos que eu vi eu diria: "É basicamente uma tradução do Pascal". É como se fosse um Portugol.

Aqui uma apostila sobre VisuAlg interessante que encontrei

http://www.guanabara.info/logica/Apostilas/VisuAlg_Ref.pdf

(Mesmo sendo para VisuAlg, o conteúdo está também relacionado ao Pascal, claro que no caso mudará os comandos)

Dê uma pesquisada na net..

*****

PS: Sobre o seu programa, algumas coisas ainda têm que ser feitas, como por exemplo fazer o programa parar de ler as votações logo quando o usuário digitar um valor inválido para o voto (que não seja 1,2,3), pois do jeito que está, o voto inválido TAMBÉM está sendo calculado no TOTAL, e mesmo com um voto inválido a opinião AINDA continua sendo lida (se o voto for inválido, não deverá ler mais a opinião nem contabilizar no total o resultado).

Ou seja, um voto que não seja 1,2,3 vai sair como se fosse "nulo". Ex. Tente votar somente em 1 só presidente e veja o resultado!!!... Melhor, faça esse teste com os 3 presidente e compare se o resultado estão corretos. ^_^

Qualquer coisa é só postar

Abraços

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Quando eu aperto '0' para cancelar o programa ainda me pergunta qual opinião.. queria saber como faz pra quando o usuario digitar zero o programa seja finalizado.

Olá,

pvfinger...

1) Sobre a "finalização" do programa

queria saber como faz pra quando o usuario digitar zero o programa seja finalizado.

Na verdade existem dois detalhes ai...

a) O programa NÃO deve ser finalizado em si, mas sim PARAR de ler votos, ou seja, deve exibir os dados.

B) Na verdade as opções de votos que devem parar a votação (e não finalizar o programa) não é somente "0", mas sim todo e qualquer voto que não seja 1, 2 e 3... (como no exemplo do enunciado: "87").

Veja o que diz o enunciado:

O fim dos dados é indicado por um valor de candidato q não esteja no intervalo de 1 a 3.

2) Estrutura para leitura do voto

viniciusbmatos sugeriu uma boa forma de leitura de dados...

repeat
readln(opiniao)
until opiniao in [0..3];
if opiniao=0 then exit;

OBS.: Na verdade o correto seria: "write('Voto: '); readln(voto);" e "if voto=0 then exit;"

Está dividido em duas partes.. a do Repeat, que "protege" a leitura do voto como só sendo um número entre 0 e 3 (incluindo-os), e a do if, que verifica se o voto foi "0", daí finalizando o programa.

Mas veja, como disse antes o programa NÃO DEVE SER FINALIZADO, mas sim parar de ler votos.... o comando exit, NÃO seve para o seu caso, o comando mais correto seria break.

Veja a diferença

EXIT: leva o programa a executar o "end.", ou seja, após ser executado o exit, o programa vai direto para o "end.",... logo, quando o programa executa o "end.", finaliza o programa.. (resumindo, exit serve para fechar o programa, não de modo forçado, mas sim fazendo o programa ir para o fim...)

PS: existe um comando similar ao exit, o comando HALT, esse sim FINALIZA NA MARRA!!! (são semelhantes, mas tem uma diferença)

BREAK: finaliza um for, while ou repeat, ou seja, simplesmente para o laço de repetição e vai para a próxima instrução.

Mas, partindo do princípio que comentei no tópico 1), esse código NÃO VAI SERVIR para ler os votos... (a ideia pode ser aproveitada para leitura da opinião por exemplo), já que QUALQUER número "é válido", sendo que 1,2,3 é voto e o restando finaliza a leitura de votos!!! ^_^

Logo você SÓ precisará inserir o if, mas usando o break, em vez do exit.

  write('Voto: '); readln(voto);
[COLOR="Blue"] if voto=0 then
break; {finaliza o while}
[/COLOR]

***

Se você quiser inserir essa "proteção para não ler número inválidos" na opinião, aqui o código:

Substitua:

  write('Opinião: '); readln(opiniao);

Por

  write('Opinião: ');
repeat
ClrEol; {limpa a linha a parti da posição do cursor}
readln(opiniao);
GotoXY(10,WhereY-1); {posiciona novamente ao lado do texto "Opinião: "}
(*
GotoXY(x,y) = vai para coordenada (x,y) da tela (coluna e linha respect.)}
WhereX=coordenada atual X (coluna) e WhereY = coordenada atual Y (linha)
*)
until opiniao in [1..5];

***

Ainda falta você ajustar os "ifs" da verificação do primeiro, segundo e terceiro colocado para presidente (vide meu tópico anterior ma parte de "{colocação dos candidatos}", que está em azul e vermelho...)

Por favor, se surgir novas dúvidas, e tiver feito algumas mudanças, poste também o seu código para gente dar uma olhada... ou se já finalizou, poste aqui também.

No aguardo

Abraços

Link para o comentário
Compartilhar em outros sites

program EX01;
uses wincrt;
var
eleitores, {quantidade de eleitores computados}

voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular:integer;

{Porcentagem das Opiniões}
ps{porcentagem satisfeitos},
pr{porcentagem regular},
pin{porcentagem insatisfeitos},

{Porcentagem Votos}
pj{porcentagem jose},
pd{porcentagem dilma},
pm{porcentagem marina}:real;
BEGIN

{INICIALIZANDO AS VARIÁVEIS}

eleitores:=0;
voto:=0;
opiniao:=0;
jose:=0;
dilma:=0;
marina:=0;
satisfeitos:=0;
insatisfeitos:=0;
regular:=0;


voto:=1;
opiniao:=1;
while (voto=1) or (voto=2) or (voto=3) do

begin
ClrScr;{limpa a tela para o proximo eleitor}
eleitores:=eleitores+1;

writeln('ELEITOR NÚMERO: ',eleitores);

{leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
writeln('___________________');
write('Voto: '); readln(voto);

{leitura da opinião}
writeln('____________________');
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: '); readln(opiniao);

if voto=0 then
begin
eleitores:=eleitores-1
end;

{apuração do voto do usuário}
if voto = 1 then jose:=jose+1;
pj:=(jose/eleitores)*100;
if voto = 2 then dilma:=dilma+1;
pd:=(dilma/eleitores)*100;
if voto = 3 then marina:=marina+1;
pm:=(marina/eleitores)*100;


{apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
begin
satisfeitos:=satisfeitos+1;
ps:=(satisfeitos/(eleitores)*100);
end;

if (opiniao = 3) then
begin
regular:=regular+1;
pr:=(regular/eleitores)*100;
end;
if (opiniao = 4) or (opiniao = 5) then
begin
insatisfeitos:=insatisfeitos+1;
pin:=(insatisfeitos/eleitores)*100;
end;


{apuração dos vencedores}
if (pj>pd) and (pj>pm) then {Jose Serra}
writeln('O vencedor foi:Jose Serra:',pj:5:2);
if pd>pm then
begin
writeln('O segundo colocado foi Dilma Rousseff:',pd:5:2);
writeln('O terceiro colocado foi Marina Silva:',pm:5:2);
end
else
begin
writeln('O segundo colocado foi Marina Silva:',pm:5:2);
writeln('O terceito colocado foi Dilma Rousseff:',pd:5:2);
end;

if (pd>pj) and (pd>pm) then {Dilma Rousseff}
begin
writeln(' Vencedor foi:Dilma Rousseff:',pd:5:2);
if pj>pm then
begin
writeln('O segundo colocado foi jose Serra:',pj:5:2);
writeln('O terceiro colocado foi Marina Silva:',pm:5:2);
end
else
begin
writeln('O segundo colocado foi Marina silva:',pm:5:2);
writeln('O terceiro colocado foi Jose Serra:',pj:5:2);
end;

if (pm>pj) and (pm>pd) then {Marina Silva}
begin
writeln('O vencedor foi Marina Silva:',pm:5:2);
if pd>pj then
begin
writeln('O segundo colocado foi Dilma Rousseff:',pd:5:2);
writeln('O terceiro colocado foi Jose sera:',pj:5:2);
end
else
begin
writeln('O segundo colocado foi Jose Serra:',pj:5:2);
writeln('O terceiro colocado foi Dilma Rousseff:',pd:5:2);
end;
end;
end;


{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('Total de eleitores consultados:', eleitores);
writeln;
writeln('Porcentagem de eleitores satisfeitos com o Lula:',ps:5:2,'%');
writeln;
writeln('Porcentagem de eleitores que respoderam como regular o governo Lula:',pr:5:2,'%');
writeln;
writeln('Porcentagem de eleitores insatisfeito com Lula:',pin:5:2,'%');
end;
end.

Meu codigo ta assim, ainda não consigo achar meu erros..nossa vou tomar nabas com com essa parada so muito lesado pra essas paradas.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
cara meu codigo ta assim, ainda não consigo achar meu erros..nossa vou tomar nabas com com essa parada so muito lesado pra essas paradas.

Olá,

pvfinger, é normal, todo mundo tem dificuldades no início. Vamos fazer assim... abaixo fiz quase todas (se não todas!) as modificações para você dá uma estudada. Leia-o e tente entender todo o processo... compare com o seu código...

Baixe e estude esse eBook..

Link: Livro: Programando com Pascal (Download Gratuito)

Se tiver dúvidas sobre alguma parte do código é só perguntar.

Código NÃO tratando possíveis empates


uses crt;
var
eleitores, {quantidade de eleitores computados}
voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular:integer;

{Porcentagem das Opiniões}
ps{porcentagem satisfeitos},
pr{porcentagem regular},
pin{porcentagem insatisfeitos},

{Porcentagem Votos}
pj{porcentagem jose},
pd{porcentagem dilma},
pm{porcentagem marina}:real;
BEGIN
{INICIALIZANDO AS VARIÁVEIS}
eleitores:=0;
voto:=0;
opiniao:=0;
jose:=0;
dilma:=0;
marina:=0;
satisfeitos:=0;
insatisfeitos:=0;
regular:=0;
voto:=1;
while (voto=1) or (voto=2) or (voto=3) do
begin
ClrScr;{limpa a tela para o proximo eleitor}

writeln('ELEITOR NÚMERO com ',eleitores+1);

{leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente com ');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('___________________');
write('Voto: '); readln(voto);
if (voto<>1) and (voto<>2) and (voto<>3) then {se voto inválido}
break; {finaliza o while}
eleitores:=eleitores+1;
{leitura da opinião}
writeln('____________________');
writeln('A opinião sobre os oitos anos de governo Lula com ');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: ');
repeat
ClrEol; {limpa a linha a partir da posição do cursor}
readln(opiniao);
GotoXY(10,WhereY-1); {posiciona novamente ao lado do texto "Opinião: "}
(*
GotoXY(x,y) = vai para coordenada (x,y) da tela (coluna e linha respect.)}
WhereX=coordenada atual X (coluna) e WhereY = coordenada atual Y (linha)
*)
until opiniao in [1..5];

{apuração do voto do usuário}
if voto = 1 then
jose:=jose+1
else
if voto = 2 then
dilma:=dilma+1
else
marina:=marina+1;

{apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
satisfeitos:=satisfeitos+1
else
if (opiniao = 3) then
regular:=regular+1
else
if (opiniao = 4) or (opiniao = 5) then
insatisfeitos:=insatisfeitos+1;
end; {fim while}

if eleitores>0 then
begin
{cálculo das porcentagem de cada usuário}
pj:=(jose/eleitores)*100;
pd:=(dilma/eleitores)*100;
pm:=(marina/eleitores)*100;

{cáculo da porcentagem da opinião}
ps:=(satisfeitos/(eleitores)*100);
pr:=(regular/eleitores)*100;
pin:=(insatisfeitos/eleitores)*100;

writeln;
writeln;
{apuração dos vencedores}
if (pj>pd) and (pj>pm) then {José Serra}
begin
writeln('O vencedor foi José Serra com ',pj:0:2,'%');
if pd>pm then
begin
writeln('O segundo colocado foi Dilma Rousseff com ',pd:0:2,'%');
writeln('O terceiro colocado foi Marina Silva com ',pm:0:2,'%');
end
else
begin
writeln('O segundo colocado foi Marina Silva com ',pm:0:2,'%');
writeln('O terceito colocado foi Dilma Rousseff com ',pd:0:2,'%');
end;
end {fim if José Serra}
else
if (pd>pj) and (pd>pm) then {Dilma Rousseff}
begin
writeln(' Vencedor foi Dilma Rousseff com ',pd:0:2,'%');
if pj>pm then
begin
writeln('O segundo colocado foi Jose Serra com ',pj:0:2,'%');
writeln('O terceiro colocado foi Marina Silva com ',pm:0:2,'%');
end
else
begin
writeln('O segundo colocado foi Marina Silva com ',pm:0:2,'%');
writeln('O terceiro colocado foi Jose Serra com ',pj:0:2,'%');
end;
end {fim if Dilma Rousseff}
else
if (pm>pj) and (pm>pd) then {Marina Silva}
begin
writeln('O vencedor foi Marina Silva com ',pm:0:2,'%');
if pd>pj then
begin
writeln('O segundo colocado foi Dilma Rousseff com ',pd:0:2,'%');
writeln('O terceiro colocado foi Jose sera com ',pj:0:2,'%');
end
else
begin
writeln('O segundo colocado foi Jose Serra com ',pj:0:2,'%');
writeln('O terceiro colocado foi Dilma Rousseff com ',pd:0:2,'%');
end;
end; {fim if Marina Silva}

{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('Total de eleitores consultados com ', eleitores);
writeln;
writeln('Porcentagem de eleitores satisfeitos com o Lula',ps:0:2,'%','%');
writeln;
writeln('Porcentagem de eleitores que respoderam como regular o governo Lula ',pr:0:2,'%','%');
writeln;
writeln('Porcentagem de eleitores insatisfeito com Lula ',pin:0:2,'%','%');
end {fim if eleitores>0}
else
writeln('Não houve votação');
end.
program EX01;

Código aceitando empates


uses crt;
var
eleitores, {quantidade de eleitores computados}
voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular:integer;

{Porcentagem das Opiniões}
ps{porcentagem satisfeitos},
pr{porcentagem regular},
pin{porcentagem insatisfeitos},

{Porcentagem Votos}
pj{porcentagem jose},
pd{porcentagem dilma},
pm{porcentagem marina}:real;
BEGIN
{INICIALIZANDO AS VARIÁVEIS}
eleitores:=0;
voto:=0;
opiniao:=0;
jose:=0;
dilma:=0;
marina:=0;
satisfeitos:=0;
insatisfeitos:=0;
regular:=0;
voto:=1;
while (voto=1) or (voto=2) or (voto=3) do
begin
ClrScr;{limpa a tela para o proximo eleitor}

writeln('ELEITOR NÚMERO com ',eleitores+1);

{leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente com ');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('___________________');
write('Voto: '); readln(voto);
if (voto<>1) and (voto<>2) and (voto<>3) then {se voto inválido}
break; {finaliza o while}
eleitores:=eleitores+1;

{leitura da opinião}
writeln('____________________');
writeln('A opinião sobre os oitos anos de governo Lula com ');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: ');
repeat
ClrEol; {limpa a linha a partir da posição do cursor}
readln(opiniao);
GotoXY(10,WhereY-1); {posiciona novamente ao lado do texto "Opinião: "}
(*
GotoXY(x,y) = vai para coordenada (x,y) da tela (coluna e linha respect.)}
WhereX=coordenada atual X (coluna) e WhereY = coordenada atual Y (linha)
*)
until opiniao in [1..5];

{apuração do voto do usuário}
if voto = 1 then
jose:=jose+1
else
if voto = 2 then
dilma:=dilma+1
else
marina:=marina+1;

{apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
satisfeitos:=satisfeitos+1
else
if (opiniao = 3) then
regular:=regular+1
else
if (opiniao = 4) or (opiniao = 5) then
insatisfeitos:=insatisfeitos+1;
end; {fim while}

if eleitores>0 then
begin
{cálculo das porcentagem de cada usuário}
pj:=(jose/eleitores)*100;
pd:=(dilma/eleitores)*100;
pm:=(marina/eleitores)*100;

{cáculo da porcentagem da opinião}
ps:=(satisfeitos/(eleitores)*100);
pr:=(regular/eleitores)*100;
pin:=(insatisfeitos/eleitores)*100;

writeln;
writeln;
{apuração dos vencedores}
if (pj>pd) and (pj>pm) then {José Serra}
begin
writeln('O vencedor foi José Serra com ',pj:0:2,'%');
if pd>pm then
begin
writeln('O segundo colocado foi Dilma Rousseff com ',pd:0:2,'%');
writeln('O terceiro colocado foi Marina Silva com ',pm:0:2,'%');
end
else
if pm>pd then
begin
writeln('O segundo colocado foi Marina Silva com ',pm:0:2,'%');
writeln('O terceito colocado foi Dilma Rousseff com ',pd:0:2,'%');
end
else
begin
writeln('Empatado em segundo ficaram: Marina Silva com ',pm:0:2,'%',
' e Dilma Rousseff com ',pd:0:2,'%');
end;
end {fim if José Serra}
else
if (pd>pj) and (pd>pm) then {Dilma Rousseff}
begin
writeln(' Vencedor foi Dilma Rousseff com ',pd:0:2,'%');
if pj>pm then
begin
writeln('O segundo colocado foi Jose Serra com ',pj:0:2,'%');
writeln('O terceiro colocado foi Marina Silva com ',pm:0:2,'%');
end
else
if pm>pj then
begin
writeln('O segundo colocado foi Marina Silva com ',pm:0:2,'%');
writeln('O terceiro colocado foi Jose Serra com ',pj:0:2,'%');
end
else
writeln('Empatado em segundo ficaram: Jose Serra com ',pj:0:2,'%',
' e Marina Silva com ',pm:0:2,'%');
end {fim if Dilma Rousseff}
else
if (pm>pj) and (pm>pd) then {Marina Silva}
begin
writeln('O vencedor foi Marina Silva com ',pm:0:2,'%');
if pd>pj then
begin
writeln('O segundo colocado foi Dilma Rousseff com ',pd:0:2,'%');
writeln('O terceiro colocado foi Jose sera com ',pj:0:2,'%');
end
else
if pj>pd then
begin
writeln('O segundo colocado foi Jose Serra com ',pj:0:2,'%');
writeln('O terceiro colocado foi Dilma Rousseff com ',pd:0:2,'%');
end
else
writeln('Empatado em segundo ficaram: Jose Serra com ',pj:0:2,'%',
' e Dilma Rousseff com ',pd:0:2,'%');
end {fim if Marina Silva}
else
if pj=pd then {empate entre José Serra e Dilma Rousseff}
begin
writeln('Ouve um empate entre Jose Serra com ',pj:0:2,'%',
' e Dilma Rousseff com ',pd:0:2,'%');
writeln('O terceiro colocado foi Marina Silva com ',pm:0:2,'%');
end {fim José Serra e Dilma Rouseff}
else
if pj=pm then {empate entre José Serra e Marina Silva}
begin
writeln('Ouve um empate entre Jose Serra com ',pj:0:2,'%',
' e Marina Silva com ',pm:0:2,'%');
writeln('O terceiro colocado foi Dilma Rousseff com ',pd:0:2,'%');
end
else {empate entre Dilma Rousseff e Marina Silva}
begin
writeln('Ouve um empate entre os três candidadots');
writeln('Jose Serra com ',pj:0:2,'%');
writeln('Marina Silva com ',pm:0:2,'%');
writeln('Dilma Rousseff com ',pd:0:2,'%');
end;


{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('Total de eleitores consultados com ', eleitores);
writeln;
writeln('Porcentagem de eleitores satisfeitos com o Lula',ps:0:2,'%','%');
writeln;
writeln('Porcentagem de eleitores que respoderam como regular o governo Lula ',pr:0:2,'%','%');
writeln;
writeln('Porcentagem de eleitores insatisfeito com Lula ',pin:0:2,'%','%');
end; {fim if eleitores>0}
end.
program EX01;

PS Tente também fazer outros exercícios. Se for o caso crie um novo tópico com as dúvidas que vierem a existir neles.

No aguardo

Abraços

Link para o comentário
Compartilhar em outros sites

"

repeat   
ClrEol; {limpa a linha a partir da posição do cursor}
readln(opiniao);
GotoXY(10,WhereY-1); {posiciona novamente ao lado do texto "Opinião: "}
(*
GotoXY(x,y) = vai para coordenada (x,y) da tela (coluna e linha respect.)}
WhereX=coordenada atual X (coluna) e WhereY = coordenada atual Y (linha)
*)
until opiniao in [1..5]

" cara e esse comando que eu uso pra poder finalizar o programa .. asim q o usuario digitar um voto diferente de 1,2 e 3 ??

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
"
repeat   
ClrEol; {limpa a linha a partir da posição do cursor}
readln(opiniao);
GotoXY(10,WhereY-1); {posiciona novamente ao lado do texto "Opinião: "}
(*
GotoXY(x,y) = vai para coordenada (x,y) da tela (coluna e linha respect.)}
WhereX=coordenada atual X (coluna) e WhereY = coordenada atual Y (linha)
*)
until opiniao in [1..5]

" cara e esse comando que eu uso pra poder finalizar o programa .. asim q o usuario digitar um voto diferente de 1,2 e 3 ??

Olá,

pvfinger, o trecho relacionado a validação do código é outro, veja.

  {leitura do voto do usuário}
[COLOR="Red"] writeln;
writeln('Em qual candidato votará para presidente com ');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('___________________');
write('Voto: '); readln(voto);[/COLOR]
[COLOR="Blue"] if (voto<>1) and (voto<>2) and (voto<>3) then {se voto inválido}
break; {finaliza o while}[/COLOR]

Está divido em duas parte... a leitura do valor e a verificação se foi inserido um voto inválido.

O trecho citado é para leitura da opinião

repeat   
ClrEol; {limpa a linha a partir da posição do cursor}
readln(opiniao);
GotoXY(10,WhereY-1); {posiciona novamente ao lado do texto "Opinião: "}
(*
GotoXY(x,y) = vai para coordenada (x,y) da tela (coluna e linha respect.)}
WhereX=coordenada atual X (coluna) e WhereY = coordenada atual Y (linha)
*)
until opiniao in [1..5]

Esse trecho mais robusto é simplesmente pelo fato de proteger ao leitura SÓ ACEITANDO VALORES DE 1 A 5.

Sem essa proteção poderia ficar assim...

  {leitura da opinião do usuário}
writeln;
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: '); [COLOR="Blue"]readln(opiniao);

Ou seja, um realdln puro. Neste caso, se o usuário digitar um valor que não seja no intervalo de 1 a 5, o programa vai aceitar e não será computado em nenhuma das opções.

É simples...

Para leitura dos valores dos usuários é preciso o quê?

1) Informar o que você precisar ler

Para o voto

  writeln;
writeln('Em qual candidato votará para presidente com ');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('___________________');
write('Voto: ')

Para opinião

  writeln;
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: ');

2) Ler o valor pelo console (via teclado)

Para o voto

readln(voto);

Para a opinião

readln(opiniao);

***

Mas existem outros detalhes...

1) Se o voto for nulo, TEM QUE PARAR de ler

Então insere

  if (voto<>1) and (voto<>2) and (voto<>3) then {se voto inválido}
break; {finaliza o while}

2) Na opinião só deverá ser aceito números de 1 a 5

Então em vez de só usar um readln, usamos um lógica mais robusta!!!

repeat   
ClrEol;
readln(opiniao);
GotoXY(10,WhereY-1);
until opiniao in [1..5]

Nesse caso, o Pascal vai ficar tentando ler o número "até" que digite um valor no intervalo de 1 a 5..

A intenção desse código é "validar" a opinião. A característica dele é no caso, quando o usuário digitar um valor inválido, o Pascal irá ler outro número, mas o detalhe é que vai ler na mesma posição (na tela) de antes. O que permite isso é a combinação do GotoXY() com o ClrEol. Sem eles, a cada tentativa a tela ia descer uma linha, deixando a tela do programa feia!!!

A magia da programação vem ai... é implementar as funcionalidades na perspectiva do computador. É entender a capacidade (recursos disponíveis) da linguagem e combiná-los, para que na visão do usuário, ela se comporte de determinado modo.

Entendeu?

Qualquer dúvida é só postar

Abraços

Link para o comentário
Compartilhar em outros sites

 {leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente com ');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('___________________');
write('Voto: '); readln(voto);
if (voto<>1) and (voto<>2) and (voto<>3) then {se voto inválido}
break; {finaliza o while}

cara mais quando o usuario digita um numero um voto diferente de 1,2 e 3 o programa trava, sem mostrar os dados de saida cara..e o pascal não indentifica o break ... poderia trocar ele pelo exit ???

Link para o comentário
Compartilhar em outros sites

Acrescente uma linha ao final do programa do EstilingueAtomico:


{...}
{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('Total de eleitores consultados com ', eleitores);
writeln;
writeln('Porcentagem de eleitores satisfeitos com o Lula: ',ps:0:2,'%','%');
writeln;
writeln('Porcentagem de eleitores que respoderam como regular o governo Lula: ',pr:0:2,'%','%');
writeln;
writeln('Porcentagem de eleitores insatisfeito com Lula: ',pin:0:2,'%','%');
[B]readkey;[/B]
end; {fim if eleitores>0}
end.

Link para o comentário
Compartilhar em outros sites

program EX01;
uses wincrt;
var
eleitores, {quantidade de eleitores computados}

voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular:integer;

{Porcentagem das Opiniões}
ps{porcentagem satisfeitos},
pr{porcentagem regular},
pin{porcentagem insatisfeitos},

{Porcentagem Votos}
pj{porcentagem jose},
pd{porcentagem dilma},
pm{porcentagem marina}:real;
BEGIN

{INICIALIZANDO AS VARIÁVEIS}

eleitores:=0;
voto:=0;
opiniao:=0;
jose:=0;
dilma:=0;
marina:=0;
satisfeitos:=0;
insatisfeitos:=0;
regular:=0;


voto:=1;
opiniao:=1;
while (voto=1) or (voto=2) or (voto=3) do

begin
ClrScr;{limpa a tela para o proximo eleitor}
eleitores:=eleitores+1;

writeln('ELEITOR NÚMERO: ',eleitores);

{leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
writeln('___________________');
write('Voto: '); readln(voto);

{leitura da opinião}
writeln('____________________');
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: '); readln(opiniao);

if voto=0 then
begin
eleitores:=eleitores-1
end;

{apuração do voto do usuário}
if voto = 1 then jose:=jose+1;
pj:=(jose/eleitores)*100;
if voto = 2 then dilma:=dilma+1;
pd:=(dilma/eleitores)*100;
if voto = 3 then marina:=marina+1;
pm:=(marina/eleitores)*100;


{apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
begin
satisfeitos:=satisfeitos+1;
ps:=(satisfeitos/(eleitores)*100);
end;

if (opiniao = 3) then
begin
regular:=regular+1;
pr:=(regular/eleitores)*100;
end;
if (opiniao = 4) or (opiniao = 5) then
begin
insatisfeitos:=insatisfeitos+1;
pin:=(insatisfeitos/eleitores)*100;
end;


{apuração dos vencedores}
if (pj>pd) and (pj>pm) then {José Serra}
begin
writeln('O vencedor foi José Serra com ',pj:0:2,'%');
if pd>pm then
begin
writeln('O segundo colocado foi Dilma Rousseff com ',pd:0:2,'%');
writeln('O terceiro colocado foi Marina Silva com ',pm:0:2,'%');
end
else
begin
writeln('O segundo colocado foi Marina Silva com ',pm:0:2,'%');
writeln('O terceito colocado foi Dilma Rousseff com ',pd:0:2,'%');
end;
end {fim if José Serra}
else
if (pd>pj) and (pd>pm) then {Dilma Rousseff}
begin
writeln('O Vencedor foi Dilma Rousseff com ',pd:0:2,'%');
if pj>pm then
begin
writeln('O segundo colocado foi Jose Serra com ',pj:0:2,'%');
writeln('O terceiro colocado foi Marina Silva com ',pm:0:2,'%');
end
else
begin
writeln('O segundo colocado foi Marina Silva com ',pm:0:2,'%');
writeln('O terceiro colocado foi Jose Serra com ',pj:0:2,'%');
end;
end {fim if Dilma Rousseff}
else
if (pm>pj) and (pm>pd) then {Marina Silva}
begin
writeln('O vencedor foi Marina Silva com ',pm:0:2,'%');
if pd>pj then
begin
writeln('O segundo colocado foi Dilma Rousseff com ',pd:0:2,'%');
writeln('O terceiro colocado foi Jose sera com ',pj:0:2,'%');
end
else
begin
writeln('O segundo colocado foi Jose Serra com ',pj:0:2,'%');
writeln('O terceiro colocado foi Dilma Rousseff com ',pd:0:2,'%');
end;
end; {fim if Marina Silva}
end;


{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('Total de eleitores consultados:', eleitores);
writeln;
writeln('Porcentagem de eleitores satisfeitos com o Lula:',ps:5:2,'%');
writeln;
writeln('Porcentagem de eleitores que respoderam como regular o governo Lula:',pr:5:2,'%');
writeln;
writeln('Porcentagem de eleitores insatisfeito com Lula:',pin:5:2,'%');

end.

cara mudei umas paradas que estavam erradas na apuração do eleitor.. fiz coloquei a linha q você falou mais nada mudou ... quando o usuario digitar um voto diferente do que se pede . o programa ainda pergunta a opinião.

Link para o comentário
Compartilhar em outros sites

Corrigi algumas coisas em seu programa, mas não analisei por completo. O resultado:


uses crt;
var
eleitores, {quantidade de eleitores computados}

voto, {voto do usuário}
opiniao, {opnião do usuário}

{TOTAL DE VOTOS PARA CADA CANDIDATO}
jose,
dilma,
marina,

{TOTAL DE VOTOS PARA AS OPINIÕES}
satisfeitos,
insatisfeitos,
regular:integer;

{Porcentagem das Opiniões}
ps{porcentagem satisfeitos},
pr{porcentagem regular},
pin{porcentagem insatisfeitos},

{Porcentagem Votos}
pj{porcentagem jose},
pd{porcentagem dilma},
pm{porcentagem marina}:real;
BEGIN

{INICIALIZANDO AS VARIÁVEIS}

eleitores:=0;
voto:=0;
opiniao:=0;
jose:=0;
dilma:=0;
marina:=0;
satisfeitos:=0;
insatisfeitos:=0;
regular:=0;


voto:=1;
opiniao:=1;
while (voto in [1..3]) do

begin
ClrScr;{limpa a tela para o proximo eleitor}
eleitores:=eleitores+1;

writeln('ELEITOR NÚMERO: ',eleitores);

{leitura do voto do usuário}
writeln;
writeln('Em qual candidato votará para presidente:');
writeln('1. Jose Serra');
writeln('2. Dilma Rousseff');
writeln('3. Marina Silva');
writeln('0. para cancelar');
writeln('___________________');
write('Voto: ');
repeat
ClrEol;
readln(voto);
GotoXY(7,WhereY-1);
until voto in [0..3];
writeln;

if voto <> 0 then
begin
{leitura da opinião}
writeln('____________________');
writeln('A opinião sobre os oitos anos de governo Lula:');
writeln('1. Otimo');
writeln('2. Bom');
writeln('3. Regular');
writeln('4. Ruim');
writeln('5. Péssimo');
writeln;
write('Opinião: ');
repeat
ClrEol;
readln(opiniao);
GotoXY(10,WhereY-1);
until opiniao in [1..5];

{apuração do voto do usuário}
if voto = 1 then jose:=jose+1;
if voto = 2 then dilma:=dilma+1;
if voto = 3 then marina:=marina+1;


{apuração da opinião}
if (opiniao = 1) or (opiniao = 2) then
satisfeitos:=satisfeitos+1;
if (opiniao = 3) then
regular:=regular+1;
if (opiniao = 4) or (opiniao = 5) then
insatisfeitos:=insatisfeitos+1;
end
else
begin
eleitores:=eleitores-1;
{cálculo dos resultados}
pj:=(jose/eleitores)*100;
pd:=(dilma/eleitores)*100;
pm:=(marina/eleitores)*100;
ps:=(satisfeitos/(eleitores)*100);
pr:=(regular/eleitores)*100;
pin:=(insatisfeitos/eleitores)*100;

{apuração dos vencedores}
if (pj>pd) and (pj>pm) then {José Serra}
begin
writeln('O vencedor foi José Serra com ',pj:0:2,'%');
if pd>pm then
begin
writeln('O segundo colocado foi Dilma Rousseff com ',pd:0:2,'%');
writeln('O terceiro colocado foi Marina Silva com ',pm:0:2,'%');
end
else
begin
writeln('O segundo colocado foi Marina Silva com ',pm:0:2,'%');
writeln('O terceito colocado foi Dilma Rousseff com ',pd:0:2,'%');
end;
end {fim if José Serra}
else
if (pd>pj) and (pd>pm) then {Dilma Rousseff}
begin
writeln('O Vencedor foi Dilma Rousseff com ',pd:0:2,'%');
if pj>pm then
begin
writeln('O segundo colocado foi Jose Serra com ',pj:0:2,'%');
writeln('O terceiro colocado foi Marina Silva com ',pm:0:2,'%');
end
else
begin
writeln('O segundo colocado foi Marina Silva com ',pm:0:2,'%');
writeln('O terceiro colocado foi Jose Serra com ',pj:0:2,'%');
end;
end {fim if Dilma Rousseff}
else
if (pm>pj) and (pm>pd) then {Marina Silva}
begin
writeln('O vencedor foi Marina Silva com ',pm:0:2,'%');
if pd>pj then
begin
writeln('O segundo colocado foi Dilma Rousseff com ',pd:0:2,'%');
writeln('O terceiro colocado foi Jose sera com ',pj:0:2,'%');
end
else
begin
writeln('O segundo colocado foi Jose Serra com ',pj:0:2,'%');
writeln('O terceiro colocado foi Dilma Rousseff com ',pd:0:2,'%');
end;
end; {fim if Marina Silva}
end;
end;


{EXIBIÇÃO DOS RESULTADOS}
writeln;
writeln('Total de eleitores consultados:', eleitores);
writeln;
writeln('Porcentagem de eleitores satisfeitos com o Lula:',ps:5:2,'%');
writeln;
writeln('Porcentagem de eleitores que respoderam como regular o governo Lula:',pr:5:2,'%');
writeln;
writeln('Porcentagem de eleitores insatisfeito com Lula:',pin:5:2,'%');
readkey;
end.
program EX01;

(O código do EstilingueAtomico está melhor)

Mas pode ser assim também:



Uses
Crt, SysUtils;

Type
TVot = Record
Serra, Dilma, Marina: Byte;
End;
TOp = Array [1..5] Of Byte;

Var
ContVotos: TVot;
ContOpinioes: TOp;
Voto: Byte;
Tecla: Char;

Function LerVoto(QtdEleitores: Byte) :Byte;
Var
Receb: String;
Erro, Saida: Integer;
Begin
TextColor(Yellow);
WriteLn(QtdEleitores:0,#167,' eleitor :');
WriteLn('Qual ser',#160,' seu voto para Presidente da Rep',#163,'blica nas Elei',#135,#229,'es 2010?');
TextColor(LightRed);
WriteLn('.........................................');
WriteLn('1. Jos',#130,' Serra');
WriteLn('2. Dilma Rousseff');
WriteLn('3. Marina Silva');
WriteLn(' ou 0 para terminar');
WriteLn('.........................................');
TextColor(LightCyan);
Window(1, WhereY, 80, 25);
Repeat
ClrScr;
ReadLn(Receb);
Val(Receb, Saida, Erro);
Until (Erro = 0) And (Saida In [0..4]);
LerVoto := Saida;
TextColor(Yellow);
Window(1, 1, 80, 25);
ClrScr;
End;

Function LerOpiniao(QtdEleitores: Byte) :Byte;
Var
Receb: String;
Erro, Saida: Integer;
Begin
TextColor(Yellow);
WriteLn(QtdEleitores:0,#167,' eleitor :');
WriteLn('Qual a sua opini',#198,'o sobre os oito anos de governo do Presidente Lula?');
TextColor(LightRed);
WriteLn('.........................................');
WriteLn('1. P',#130,'ssimo'); // coloquei péssimo primeiro
WriteLn('2. Ruim'); // para ficar parecido
WriteLn('3. Regular'); // com uma nota de 0 a 5
WriteLn('4. Bom');
WriteLn('5. ',#224,'timo');
WriteLn('.........................................');
TextColor(LightCyan);
Window(1, WhereY, 80, 25);
Repeat
ClrScr;
ReadLn(Receb);
Val(Receb, Saida, Erro);
Until (Erro = 0) And (Saida In [1..5]);
LerOpiniao := Saida;
TextColor(Yellow);
Window(1, 1, 80, 25);
End;

Procedure Apuracao (InCVot: TVot; InCOP: TOp);
Var
Eleitores, Max: Byte;
(* Begin - "Procedure"s *)
Procedure EscreveSerra;
Begin
{Serra}
TextColor(Yellow);
Write('Serra ');
TextColor(LightGreen);
Write(InCVot.Serra:Max);
TextColor(Yellow);
Write(' voto');
If InCVot.Serra>1 Then
Write('s ')
Else
Write(' ');
TextColor(LightGreen);
WriteLn((100*InCVot.Serra/Eleitores):6:2,'%');
TextColor(Yellow);
End;
Procedure EscreveDilma;
Begin
{Dilma}
TextColor(Yellow);
Write('Dilma ');
TextColor(LightGreen);
Write(InCVot.Dilma:Max);
TextColor(Yellow);
Write(' voto');
If InCVot.Dilma>1 Then
Write('s ')
Else
Write(' ');
TextColor(LightGreen);
WriteLn((100*InCVot.Dilma/Eleitores):6:2,'%');
TextColor(Yellow);
End;
Procedure EscreveMarina;
Begin
{Marina}
TextColor(Yellow);
Write('Marina ');
TextColor(LightGreen);
Write(InCVot.Marina:Max);
TextColor(Yellow);
Write(' voto');
If InCVot.Marina>1 Then
Write('s ')
Else
Write(' ');
TextColor(LightGreen);
WriteLn((100*InCVot.Marina/Eleitores):6:2,'%');
TextColor(Yellow);
End;
(* End - "Procedure"s *)
Begin
Eleitores := InCVot.Serra + InCVot.Dilma + InCVot.Marina;
Max := Length(IntToStr(Eleitores));
{Voto para Presidente}
WriteLn('.........................................');
WriteLn('Voto para Presidente:');
WriteLn('.........................................');
If (InCVot.Serra > InCVot.Dilma) And (InCVot.Serra > InCVot.Marina) Then {1º = Serra}
Begin
Write('1',#167,' ');
EscreveSerra;
If InCVot.Dilma > InCVot.Marina Then {2º = Dilma, 3º = Marina}
Begin
Write('2',#167,' ');
EscreveDilma;
Write('3',#167,' ');
EscreveMarina;
End
Else
If InCVot.Marina > InCVot.Dilma Then {2º = Marina, 3º = Dilma}
Begin
Write('2',#167,' ');
EscreveMarina;
Write('3',#167,' ');
EscreveDilma;
End
Else {2º = Marina = Dilma}
Begin
Write('2',#167,' ');
EscreveMarina;
Write('2',#167,' ');
EscreveDilma;
End;
End
Else
If (InCVot.Dilma > InCVot.Marina) And (InCVot.Dilma > InCVot.Serra) Then {1º = Dilma}
Begin
Write('1',#167,' ');
EscreveDilma;
If InCVot.Serra > InCVot.Marina Then {2º = Serra, 3º = Marina}
Begin
Write('2',#167,' ');
EscreveSerra;
Write('3',#167,' ');
EscreveMarina;
End
Else
If InCVot.Marina > InCVot.Serra Then {2º = Marina, 3º = Serra}
Begin
Write('2',#167,' ');
EscreveMarina;
Write('3',#167,' ');
EscreveSerra;
End
Else {2º = Marina = Serra}
Begin
Write('2',#167,' ');
EscreveSerra;
Write('2',#167,' ');
EscreveMarina;
End;
End
Else
If (InCVot.Marina > InCVot.Serra) And (InCVot.Marina > InCVot.Dilma) Then {1º = Marina}
Begin
Write('1',#167,' ');
EscreveMarina;
If InCVot.Serra > InCVot.Dilma Then {2º = Serra, 3º = Dilma}
Begin
Write('2',#167,' ');
EscreveSerra;
Write('3',#167,' ');
EscreveDilma;
End
Else
If InCVot.Dilma > InCVot.Serra Then {2º = Dilma, 3º = Serra}
Begin
Write('2',#167,' ');
EscreveDilma;
Write('3',#167,' ');
EscreveSerra;
End
Else {2º = Dilma = Serra}
Begin
Write('2',#167,' ');
EscreveSerra;
Write('2',#167,' ');
EscreveDilma;
End;
End
Else {Empates para 1º lugar}
If (InCVot.Serra = InCVot.Dilma) And (InCVot.Marina < InCVot.Dilma) Then {1º = Serra = Dilma, 2º = Marina}
Begin
Write('1',#167,' ');
EscreveSerra;
Write('1',#167,' ');
EscreveDilma;
Write('2',#167,' ');
EscreveMarina;
End
Else
If (InCVot.Serra = InCVot.Marina) And (InCVot.Dilma < InCVot.Serra) Then {1º = Serra = Marina, 2º = Dilma}
Begin
Write('1',#167,' ');
EscreveSerra;
Write('1',#167,' ');
EscreveMarina;
Write('2',#167,' ');
EscreveDilma;
End
Else
If (InCVot.Dilma = InCVot.Marina) And (InCVot.Serra < InCVot.Dilma) Then {1º = Dilma = Marina, 2º = Serra}
Begin
Write('1',#167,' ');
EscreveDilma;
Write('1',#167,' ');
EscreveMarina;
Write('2',#167,' ');
EscreveSerra;
End
Else {Empate total}
Begin
Write('1',#167,' ');
EscreveSerra;
Write('1',#167,' ');
EscreveDilma;
Write('1',#167,' ');
EscreveMarina;
End;
{Aprovação do Lula}
TextColor(Yellow);
WriteLn('.........................................');
WriteLn('Aprova',#135,#198,'o do governo Lula:');
WriteLn('.........................................');
{Ruim ou Péssimo}
Write('Ruim ou p',#130,'ssimo: ');
TextColor(LightGreen);
Write((100*(InCOp[1]+InCOp[2])/Eleitores):6:2,'% ');
Write((InCOp[1]+InCOp[2]):Max);
TextColor(Yellow);
Write(' eleitor');
If InCop[1]+InCop[2] > 1 Then
Write('es');
WriteLn;
TextColor(Yellow);
{Regular}
Write('Regular : ');
TextColor(LightGreen);
Write((100*InCOp[3]/Eleitores):6:2,'% ');
Write(InCOp[3]:Max);
TextColor(Yellow);
Write(' eleitor');
If InCop[3] > 1 Then
Write('es');
WriteLn;
TextColor(Yellow);
{Bom ou Ótimo}
Write('Bom ou ',#224,'timo : ');
TextColor(LightGreen);
Write((100*(InCop[4]+InCop[5])/Eleitores):6:2,'% ');
Write((InCOp[4]+InCOp[5]):Max);
TextColor(Yellow);
Write(' eleitor');
If InCop[4]+InCop[5] > 1 Then
Write('es');
WriteLn;
TextColor(Yellow);
WriteLn('.........................................');
End;

Begin
ContVotos.Dilma := 0;
ContVotos.Serra := 0;
ContVotos.Marina := 0;
TextColor(Yellow);
WriteLn('Seja bem vindo(a) ',#133,' nossa pesquisa.');
WriteLn('Pressione ENTER para iniciar...');
Repeat
Tecla := ReadKey
Until Ord(Tecla) = 13;
ClrScr;
Repeat
{Ler voto}
Voto := LerVoto(ContVotos.Dilma+ContVotos.Serra+ContVotos.Marina+1);
With ContVotos Do
Case Voto Of
1: Serra +=1 ;
2: Dilma +=1;
3: Marina +=1;
End;
{Ler opinião}
If Voto <> 0 Then
Begin
Voto := LerOpiniao(ContVotos.Dilma+ContVotos.Serra+ContVotos.Marina);
ContOpinioes[Voto] +=1;
End;
Until Voto = 0;
Apuracao(ContVotos,ContOpinioes);
ReadKey;
End.
Program EX01;

(Não seria bom se adicionássemos uma pesquisa para o 2º turno com os dois mais votados, caso o primeiro colocado não tenha mais de 50% dos votos?)

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!