Ir ao conteúdo
  • Cadastre-se

Codigo em Pascal


Ir à solução Resolvido por Pedro Math.pi,

Posts recomendados

Bom dia pessoal,

Não sei o que está dando errado neste codigo, podem me ajudar ?

Program Pzim ;	var idade, idosos, motoristas, eleitores : integer;Beginidosos := 0;motoristas := 0;eleitores := 0;		write( 'Digite a idade da pessoa: ' ) ; 		read( idade ) ; 		while ( idade > 0 ) do 		begin		   write( 'Digite a idade da pessoa: ' ) ; 		   read( idade ) ;				                      if ( idade >= 16 ) then;                      eleitores := eleitores + 1;           	         if ( idade >= 18 ) then;           	         motoristas := motoristas + 1;           		     if ( idade >= 65 ) then                             idosos := idosos + 1;                end;	   writeln( 'A quantidade de eleitores é: ', eleitores ) ; 	   writeln( 'A quantidade de motoristas é: ', motoristas ) ; 	   writeln( 'A quantidade de idosos é: ', idosos ) ;   End.

Outra coisa, porque estou tendo que repetir o pedido de idade dentro do While ? se eu retirar não funciona.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Fabio Aragao

Você não pode perguntar a idade 2 vezes seguidas. Jogue os códigos das linhas 13 e 14 para antes do 'end' do while.

O programa vai trabalhar a idade digitada lá no começo e antes de acabar o while e ele vai ler a próxima idade e voltar ao começo do while com a nova idade a ser testada.

 

'then' não usa ponto e vírgula ';'.

 

Use 'if else'. Do jeito que está fazendo, ele vai testar com os 3 ifs. O número 15, por exemplo, vai ser válido para os 3, pois ele é menor de 16 anos, menor de 18 anos e menor de 65 anos.

Link para o comentário
Compartilhar em outros sites

@Fabio Aragao

Você não pode perguntar a idade 2 vezes seguidas. Jogue os códigos das linhas 13 e 14 para antes do 'end' do while.

O programa vai trabalhar a idade digitada lá no começo e antes de acabar o while e ele vai ler a próxima idade e voltar ao começo do while com a nova idade a ser testada.

 

'then' não usa ponto e vírgula ';'.

 

Use 'if else'. Do jeito que está fazendo, ele vai testar com os 3 ifs. O número 15, por exemplo, vai ser válido para os 3, pois ele é menor de 16 anos, menor de 18 anos e menor de 65 anos.

 

 

@Math.Pi

 

Creio que entendi o que voce falou

Program Pzim ;	var idade, idosos, motoristas, eleitores : integer;Beginidosos := 0;motoristas := 0;eleitores := 0;		write( 'Digite a idade da pessoa: ' ) ; 		read( idade ) ; 		  while ( idade > 0 ) do 		    begin			if ( idade >= 16 ) then                        eleitores := eleitores + 1                      else                	if ( idade >= 18 ) then           	        motoristas := motoristas + 1           	      else           	        if ( idade >= 65 ) then                        idosos := idosos + 1;                      write( 'Digite a idade da pessoa: ' ) ; 		      read( idade ) ;                     end;	   writeln( 'A quantidade de eleitores é: ', eleitores ) ; 	   writeln( 'A quantidade de motoristas é: ', motoristas ) ; 	   writeln( 'A quantidade de idosos é: ', idosos ) ;   End.

Mas continua exibindo de maneira incorreta.

 

Digite a idade da pessoa: 18
Digite a idade da pessoa: 0
A quantidade de eleitores é: 1
A quantidade de motoristas é: 0
A quantidade de idosos é: 0
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

Basicamente precisa corrigir a lógica da estrutura de seleção. As "sentenças" dos ifs estão incompletas.

 

 

 

Ex.: Supondo que informou o tal 18..

if ( idade >= 16 ) then

Então, 18 é maior que 16? Sim, é!

 

...e como está usando o else (já que são mutuamente exclusivas entre si), não vai ser verificado o restante! (obs.: o else está certo, o que está "errado" são as sentenças).

Para facilitar um pouco: você precisará de duas condições para cada um dos dois primeiros ifs.

 

 

PS: Não use read, USE SOMENTE readln!!

PS2: Apenas como comentário... veja, essa classificação etária está um pouca estranha, já que de fato NÃO SÃO excludentes, ou seja, pode ser eleitor e ao mesmo tempo ser motorista, e também ser idoso.... RESUMINDO: precisaria revisar o "enunciado" (problema proposto).

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Olá.

 

Basicamente precisa corrigir a lógica da estrutura de seleção. As "sentenças" dos ifs estão incompletas.

 

 

 

Ex.: Supondo que informou o tal 18..

if ( idade >= 16 ) then

Então, 18 é maior que 16? Sim, é!

 

...e como está usando o else (já que são mutuamente exclusivas entre si), não vai ser verificado o restante! (obs.: o else está certo, o que está "errado" são as sentenças).

Para facilitar um pouco: você precisará de duas condições para cada um dos dois primeiros ifs.

 

 

PS: Não use read, USE SOMENTE readln!!

PS2: Apenas como comentário... veja, essa classificação etária está um pouca estranha, já que de fato NÃO SÃO excludentes, ou seja, pode ser eleitor e ao mesmo tempo ser motorista, e também ser idoso.... RESUMINDO: precisaria revisar o "enunciado" (problema proposto).

 

No aguardo.

 

 

Funcionou deste jeito....

Program Pzim ;	var idade, idosos, motoristas, eleitores : integer;Beginidosos := 0;motoristas := 0;eleitores := 0;          write( 'Digite a idade da pessoa: ' ) ; 	  readln( idade ) ; 		while ( idade > 0 ) do 		 begin		   if ( idade >= 16 )  then                   eleitores := eleitores + 1;                      if ( idade >= 18 )  then           	      motoristas := motoristas + 1;                        if ( idade >= 65 ) then                        idosos := idosos + 1;                            write( 'Digite a idade da pessoa: ' ) ; 		            readln( idade ) ;                   end;	   writeln( 'A quantidade de eleitores é: ', eleitores ) ; 	   writeln( 'A quantidade de motoristas é: ', motoristas ) ; 	   writeln( 'A quantidade de idosos é: ', idosos ) ;   End.

Tirei os "elses" e coloquei duas linhas antes do end; do begin conforme informou o amigo @Math.Pi

 

 

Segue Enunciado:

1) Solicitar várias idades e informar:

    a. Quantidade de idosos (ID >= 65)

    b. Quantidade de eleitores (ID >= 16)

    c. Soma das idades das pessoas aptas a dirigir (ID >= 18) "Fiquei em duvida na questão do somatório de idades e exibi o somatório de pessoas aptas"

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução

@Fabio Aragao

Acho que entendi o que quer testar.


Se a pessoa for maior de 16 ela será eleitora.

Se for maior de 18, ela será eleitora e motorista.

Se for maior de 65 anos, ela será eleitora, motorista e idosa.


Pra fazer a soma das idades você precisará usar uma variável de soma dentro do if idade >= 18 e incrementar as idades.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

Funcionou deste jeito....

Program Pzim ;	var idade, idosos, motoristas, eleitores : integer;Beginidosos := 0;motoristas := 0;eleitores := 0;          write( 'Digite a idade da pessoa: ' ) ; 	  readln( idade ) ; 		while ( idade > 0 ) do 		 begin		   if ( idade >= 16 )  then                   eleitores := eleitores + 1;                      if ( idade >= 18 )  then           	      motoristas := motoristas + 1;                        if ( idade >= 65 ) then                        idosos := idosos + 1;                            write( 'Digite a idade da pessoa: ' ) ; 		            readln( idade ) ;                   end;	   writeln( 'A quantidade de eleitores é: ', eleitores ) ; 	   writeln( 'A quantidade de motoristas é: ', motoristas ) ; 	   writeln( 'A quantidade de idosos é: ', idosos ) ;   End.
Tirei os "elses" e coloquei duas linhas antes do end; do begin conforme informou o amigo @Math.Pi

Segue Enunciado:

1) Solicitar várias idades e informar:

a. Quantidade de idosos (ID >= 65)

b. Quantidade de eleitores (ID >= 16)

c. Soma das idades das pessoas aptas a dirigir (ID >= 18) "Fiquei em duvida na questão do somatório de idades e exibi o somatório de pessoas aptas"

Nesse caso, de fato não deve ter o else mesmo, pois como já sugerido, pode ser uma coisa e outra ao mesmo tempo.

Em relação ainda ao enunciado, a ideia é que seja seguido o que está se pedindo, por exemplo, em nenhum momento está se pedindo a quantidade de motoristas... :D

Sobre o enunciado:

a. OK; (só está fora da ordem)

b. OK; (tb fora de ordem)

c. Você exibiu o "total de idades", mas ele pede a "Soma das idades das pessoas aptas a dirigir", ou seja, "somar as idades", em vez de "contar a quantidade"...

PS: tá precisando agora dar uma arrumada na identação. Os ifs são independentes entre si, logo devem ficar alinhados na mesma coluna...

PS2: Existem diversos padrões, mas o princípio é p mesmo..., no meu, o código que você postou ficaria assim:

program Pzim;var   idade,  idosos, motoristas, eleitores : integer; beginidosos    :=0;motoristas:=0;eleitores :=0;write('Digite a idade da pessoa: '); readln(idade);while (idade > 0) do  begin  if (idade >= 16) then    eleitores:=eleitores + 1;  if (idade >= 18) then  //<--percebe que esse if fica no mesmo alinhamento do begin. Visualmente percebe-se que não depende do if anterior    motoristas:=motoristas + 1;  if (idade >= 65) then    idosos:=idosos+1;  write( 'Digite a idade da pessoa: ' ) ;   readln( idade ) ;   end;writeln( 'A quantidade de eleitores é : ',eleitores);writeln( 'A quantidade de motoristas é: ',motoristas);writeln( 'A quantidade de idosos é    : ',idosos );end.

No aguardo.

Abraços

Link para o comentário
Compartilhar em outros sites

@Fabio Aragao

Acho que entendi o que quer testar.

Se a pessoa for maior de 16 ela será eleitora.

Se for maior de 18, ela será eleitora e motorista.

Se for maior de 65 anos, ela será eleitora, motorista e idosa.

Pra fazer a soma das idades você precisará usar uma variável de soma dentro do if idade >= 18 e incrementar as idades.

@Math.Pi justamente isso!!!!

Olá.

Nesse caso, de fato não deve ter o else mesmo, pois como já sugerido, pode ser uma coisa e outra ao mesmo tempo.

Em relação ainda ao enunciado, a ideia é que seja seguido o que está se pedindo, por exemplo, em nenhum momento está se pedindo a quantidade de motoristas... :D

Sobre o enunciado:

a. OK; (só está fora da ordem)

b. OK; (tb fora de ordem)

c. Você exibiu o "total de idades", mas ele pede a "Soma das idades das pessoas aptas a dirigir", ou seja, "somar as idades", em vez de "contar a quantidade"...

PS: tá precisando agora dar uma arrumada na identação. Os ifs são independentes entre si, logo devem ficar alinhados na mesma coluna...

PS2: Existem diversos padrões, mas o princípio é p mesmo..., no meu, o código que você postou ficaria assim:

 

program Pzim;var   idade,  idosos, motoristas, eleitores : integer; beginidosos    :=0;motoristas:=0;eleitores :=0;write('Digite a idade da pessoa: '); readln(idade);while (idade > 0) do  begin  if (idade >= 16) then    eleitores:=eleitores + 1;  if (idade >= 18) then  //<--percebe que esse if fica no mesmo alinhamento do begin. Visualmente percebe-se que não depende do if anterior    motoristas:=motoristas + 1;  if (idade >= 65) then    idosos:=idosos+1;  write( 'Digite a idade da pessoa: ' ) ;   readln( idade ) ;   end;writeln( 'A quantidade de eleitores é : ',eleitores);writeln( 'A quantidade de motoristas é: ',motoristas);writeln( 'A quantidade de idosos é    : ',idosos );end.
No aguardo.

Abraços

 

@Simon Viegas beleza Simon, eu so preciso mesmo me acostumar com a questão da identação, no restante tenho é muito que aprender... rs

Neste forum tenho tirado muitas duvidas nesta minha nova Jornada.. 

Agradeço a todos...

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

Visitante
Este tópico está impedido de receber 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...