Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Me deem opiniões de mudança no código, e amplificar meu código :D


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

faça um algoritmo que receba o sexo da pessoa, a idade e também mostre a soma das pessoas do sexo feminino. O mesmo deve receber no total de 10 pessoas.

Já fiz o algoritmo, e quero aprimoramentos, comando para deixar isso mais massa, qualquer aperfeiçoamento irá me ajudar futuramente a deixar meus códigos mais ricos. :)

 

me mostrem algo que poderia ser mais simples(mudanças no algoritmo), e também quero dicas para melhoras, até então agradecerei amigos!!!

Program exercicio_4;
Var Sexo: string[1];  {Serve para declarar uma string de 1 caracter}
    idade,idadesM ,idades, contadorM, contadorF, contador: integer;
    Nome :string;
 Begin
 idadesM:=0;
 idades:=0;
 idade:=0;
 
   Clrscr;
   While contador < 10 do {contador while, vai servir para resetar os IFs}
    Begin
      Clrscr;  {limpa o que tiver atrás(Se eu colocar uma Writeln ele nem aparecerá)}
      inc(contador);  {mesmo que contador:=contador+1}
     Writeln('-------Prepara-------');
     Writeln('Digite o nome da pessoa: ');
     Read(Nome);
     Writeln('Digite o Sexo M para masculino e F para feminino: ');  {atribuindo as variáveis, sem excessoes}
     Read(sexo);
     Writeln('Digite a idade dela: ');
     Read(idade);
     Textcolor(contador);
     
      If (sexo='f') or (sexo='F') then  {Fazendo uma exceção interna, ou seja, isso pega uma informação e identifica se é verdadeira ou não}
       Begin
        inc(contadorF);
        idades:=idades+idade;            {Se verdadeira, executa os comandos, soma e muda cor}
         TextColor(Random(14)+1);
       end
       else   
	 If (sexo='m') or (sexo='M') then    {Para ter onde armazenar os masculinos...}
	  Begin
	   inc(contadorM);
	   idadesM:=idadesM+idade;
	   TextColor(Random(14)+1);
	  end
	  Else
	   begin
	   contadorM:=contadorM-1;           {Se caso F ou M faz digitado errado, será eliminado 1 contagem, e continuara(tipo um reset)}
	   end;
	      
    end; {Fim do while}
    If contadorF <> 0 then           {para n ter furos}
    Begin
     Writeln('A soma das idades femininas é: ',idades); {Fim}
    End;
    Repeat
    until
    Keypressed;{Finaliza ao clicar qualquer tecla}

 End.

 

 

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

  • Membro VIP
  • Solução

Olá.

 

Vamos lá.

 

Inicialmente só um detalhe sobre o enunciado:

 

13 horas atrás, AnonymousLPH disse:

Faça um algoritmo que receba o sexo da pessoa, a idade e também mostre a soma das pessoas do sexo feminino. O mesmo O programa deve receber no total de 10 pessoas.

 

Ou seja: não se usa "o mesmo" como sendo uma espécie de "pronome pessoal". Para entender melhor sobre isso, dá um Google... ;).

 

Outro ponto é que pede para ler o "nome", mas o mesmo este não é utilizado para algo.

 

 

Sobre:

13 horas atrás, AnonymousLPH disse:

Já fiz o algoritmo, e quero aprimoramentos, comando para deixar isso mais massa, qualquer aperfeiçoamento irá me ajudar futuramente a deixar meus códigos mais ricos. :)

 

Segue um código resumido:

program Exercicio_4;
{
Faça um algoritmo que receba o sexo da pessoa, a idade e mostre a soma
das pessoas do sexo feminino. O programa deve receber no total de 10 
pessoas.
}
uses
  CRT;
var
  nome :string;
  sexo :char;
  idade,
  somaIdadeFeminino,
  contadorPessoas :integer;
  
begin
contadorPessoas := 0; //obs.: no Pascal não precisa, pois é "zerada" automaticamente, mas é recomendado utilizar!
Clrscr;
while contadorPessoas < 3 do
  begin
  Inc(contadorPessoas);
  ClrScr;
  writeln('----- CADASTRO DE DADOS PESSOAIS -----');
  write  ('Nome : '); readln(nome);
  write  ('Sexo : '); readln(sexo);
  write  ('Idade: '); readln(idade);
  TextColor(contadorPessoas); //será uma boa ideia?
  if (UpCase(sexo) = 'F') then
    begin
    Inc(somaIdadeFeminino, idade);
    {TextColor(Random(14) + 1);} //está mudando algumas vezes sem usar antes
    end
  end;
TextColor(Random(14) + 1);
writeln('A soma das idades femininas é: ',somaIdadeFeminino);
ReadKey();
end.

 

Sugiro comparar com o seu código... qualquer dúvidas, reclamações, sugestões e só postar.

 

No aguardo.

 

Link para o comentário
Compartilhar em outros sites

@Simon Viegas N entendo ainda o porque desse

uses
  CRT;

 

adicionado 9 minutos depois

@Simon Viegas Não entendi essa parte também e no meu pascalzim ta dando erro:

if (UpCase(sexo) = 'F') then
    begin
    Inc(somaIdadeFeminino, idade);
    {TextColor(Random(14) + 1);} //está mudando algumas vezes sem usar antes
    end

 

adicionado 11 minutos depois
if (UpCase(sexo) = 'F') then
    begin
    Somaidadefeminino:=somaidadefeminino+ idade;
    {TextColor(Random(14) + 1);} //está mudando algumas vezes sem usar antes
    end

Mas já resolvi

adicionado 22 minutos depois

@Simon Viegas  Isso vai fazer com que a variável Char leia maiúsculo e minusculo de F?

if (UpCase(sexo) = 'F') then

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Sobre:

8 horas atrás, AnonymousLPH disse:

@Simon Viegas N entendo ainda o porque desse


uses
  CRT;

 

A diretiva (acho que chama assim esses comandos) uses serve para possibilitar carregar bibliotecas externas. Resumidamente falando, servem para carregar "comandos extras"... No exemplo, a CRT vai "disponibilizar" comandos como o ReadKey(), ClrScr(),TextColor(), TextBackground() etc. No caso do PascalZim, essa biblioteca CRT (ou WinCRT) já vem incorporada ao programa... meio que um mecanismo para facilitar o uso para os iniciantes (não precisarem se preocupar em carregá-la).

 

Pense assim... no Pascal devem existir centenas ou milhares de comandos disponíveis... daí, ficaria inviável deixar tudo sempre disponível para todos, pois os programas iriam ficar grandes sem necessidade. Daí, com o uso de "bibliotecas" (units), podemos carregar apenas o que queremos. No caso do writeln(), readln(), Sqrt()Inc() etc, estas ficam na unit System. Por serem comuns, já são pré-carregados... ou seja: como se existisse um "uses System" interno, entende? (assim como no PascalZim funcionam como se já tivessem um uses CRT, assim não sendo necessário invocar a biblioteca).

 

 

Sobre:

8 horas atrás, AnonymousLPH disse:

@Simon Viegas Não entendi essa parte também e no meu pascalzim ta dando erro:


if (UpCase(sexo) = 'F') then
    begin
    Inc(somaIdadeFeminino, idade);
    {TextColor(Random(14) + 1);} //está mudando algumas vezes sem usar antes
    en

 

Qual erro estava dando?

 

 

Sobre:

8 horas atrás, AnonymousLPH disse:

@Simon Viegas  Isso vai fazer com que a variável Char leia maiúsculo e minusculo de F?


if (UpCase(sexo) = 'F') then

 

Não. UpCase() é uma function (função) da biblioteca System (aquele que é carregada automaticamente) que "recebe um caractere, ou uma cadeia de caracteres, e retorna o respectivo caractere em maiúsculo. Daí, nesse if acima, está recebendo um char pelo parâmetro e vai retornar na própria function o caractere em maiúsculo correspondente. Ex.: se passou "f", vai retorna "F". Se passou "a", vai retornar "A". obs.: se o caractere já for maiúsculo, vai retorna ele mesmo. Ex.: se passou "M", vai retornar "M".

 

Outra forma de fazer seria assim:

sexo := UpCase(sexo); //a variável sexo vai receber o correspondente em maiúsculo do seu próprio valor
if (sexo = 'F') then

 

 

 

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Simon Viegas disse:

Sobre:

 

A diretiva (acho que chama assim esses comandos) uses serve para possibilitar carregar bibliotecas externas. Resumidamente falando, servem para carregar "comandos extras"... No exemplo, a CRT vai "disponibilizar" comandos como o ReadKey(), ClrScr(),TextColor(), TextBackground() etc. No caso do PascalZim, essa biblioteca CRT (ou WinCRT) já vem incorporada ao programa... meio que um mecanismo para facilitar o uso para os iniciantes (não precisarem se preocupar em carregá-la).

 

Pense assim... no Pascal devem existir centenas ou milhares de comandos disponíveis... daí, ficaria inviável deixar tudo sempre disponível para todos, pois os programas iriam ficar grandes sem necessidade. Daí, com o uso de "bibliotecas" (units), podemos carregar apenas o que queremos. No caso do writeln(), readln(), Sqrt()Inc() etc, estas ficam na unit System. Por serem comuns, já são pré-carregados... ou seja: como se existisse um "uses System" interno, entende? (assim como no PascalZim funcionam como se já tivessem um uses CRT, assim não sendo necessário invocar a biblioteca).

 

 

Sobre:

 

Qual erro estava dando?

 

 

Sobre:

 

Não. UpCase() é uma function (função) da biblioteca System (aquele que é carregada automaticamente) que "recebe um caractere, ou uma cadeia de caracteres, e retorna o respectivo caractere em maiúsculo. Daí, nesse if acima, está recebendo um char pelo parâmetro e vai retornar na própria function o caractere em maiúsculo correspondente. Ex.: se passou "f", vai retorna "F". Se passou "a", vai retornar "A". obs.: se o caractere já for maiúsculo, vai retorna ele mesmo. Ex.: se passou "M", vai retornar "M".

 

Outra forma de fazer seria assim:


sexo := UpCase(sexo); //a variável sexo vai receber o correspondente em maiúsculo do seu próprio valor
if (sexo = 'F') then

 

 

 

 

Simon, tu esta limpando minhas duvidas, obrigado. 

 O erro era na parte de concatenação. Ai não dava play, modifiquei e deu. Obs: no pascalzim

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

  • Membro VIP

Citando:

1 hora atrás, AnonymousLPH disse:

 O erro era na parte de concatenação. Ai não dava play, modifiquei e deu. Obs: no pascalzim

 

Adendo 1: se atente no detalhes.. por exemplo: é "PascalZim" ou "Pascalzim". É nome próprio! ;)

 

Ah! tá!

De:

Em 26/08/2019 às 10:16, Simon Viegas disse:

Inc(somaIdadeFeminino, idade);

 

Para:

 

12 horas atrás, AnonymousLPH disse:

    Somaidadefeminino:=somaidadefeminino+ idade;

 

Adendo 2: mantenha o padrão das coisas. Em vez de "Somaidadefeminino" e "somaidadefeminino", fique apenas com o "somaIdadeFeminino". (no Pascal não faz diferença! mas porque mudar a estrutura das nomenclaturas? fica muito mais elegante e funcional manter a coerência)

 

Se for isso, pode ser relacionada a versão que está utilizando. Testei aqui no PZim 6.0.3.1 e funcionou normalmente. Por favor, poste aí o erro que ocorreu para eu entender melhor.

 

Adendo 3:  o que o Inc() faz é "incrementar" (increment), que apesar de ter relação com o "+", é diferente de "concatenar". Segue

 

"Bara" + " Bahêa" = "Bora Bahêa" //concatenação

"123" + "456" = "123456" //concatenação

123 + 456 = 579 //aqui já é uma "incrementação", ou seja: incrementando 456 onde já tem 123 (no caso poderia chamar de "adição" mesmo).

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
17 minutos atrás, AnonymousLPH disse:

@Simon Viegas Entendi, muito obrigado por ser exigente, isso faz meus passos pra frente serem mais largos haha,

 

Segue o barco... quanto mais cedo e se acostumando (e seguindo padrões), mas prático fica o desenvolvimento.

 

 

17 minutos atrás, AnonymousLPH disse:

me disseram que em java isso faz diferença

 

Faz. É chamado de case-sensitive. Geralmente as linguagens de programação são assim. Mas mesmo se não fosse, é interessante manter um padrão...

 

20 minutos atrás, AnonymousLPH disse:

onde posso encontrar essa versão do Pzm?

 

http://pascalzimbr.blogspot.com/p/blog-page.html

 

 

Mas poste aí o que está acontecendo atualmente..

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Deve ser a versão mesmo. Baixe uma versão mais atualizada e testa aí.

 

Obs.: o PascalZim é Portável... ou seja: pode copiar a pasta e deixar num pendrive ou algo do tipo. Particularmente eu deixo dentro do OneDrive no PC. Ex.:

 

tela1.png

 

No caso, você pode ficar com as duas versões do PascalZim sem problemas. Na tela acima, tenho como exemplo o VisuAlg, onde caso eu precise utilizar uma outra versão, basta descompactar.

 

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