top of page

Exercício nº 3

Calculadora de Idade 

Objetivos do Programa

Este programa tem como objetivo calcular a idade do utilizador. 

Para isso é pedido ao utilizador que indique o ano em que nasceu e lhe é perguntado se já fez anos este ano. Em caso afirmativo, é perguntado também o mês (em algarismo(s)), em caso negativo é dada logo a resposta de quantos anos e meses tem.

O programa é interrompido, isto é, a pessoa pode sair do programa quando indicar um ano ou mês negativo ou se pressionar uma letra, sendo que esta informação é dada ao utilizador, de modo a contornar os erros fatais.Caso o utilizador marque um ano superior a 2016 ou um mês superior a 12 o programa reporta o erro mas não sai do programa, volta ao início.  

Algoritmia

Programa idade;

(Inserir variáveis necessárias)

Começar

Escrever (informar ao utilizador) o objetivo do programa;

Escrever qual é a condição para sair do programa: ano negativo;

 

Pedir que o utilizador indique o ano completo em que nasceu em número;

 

Ler o ano que o utilizador introduz;

Se o ano for menor que zero, reportar erro (escrever "Erro, este programa só calcula a idade depois do ano de nascimento de Cristo") e sair;

Se o ano for superior a 2016 reportar erro (escrever "Erro. Este programa calcula a idade de pessoas que já tenham nascido");

Se o ano for entre zero e 2016 :

Começar 

Escrever (perguntar) "Já fez anos este ano? se sim-s se nao-n"; 

Ler resposta;

Caso a resposta seja s então

Começar

    Perguntar o mês

    Ler o mês

    Se o mês for menor que 1, então sair, se for maior que 12 reportar erro;

     Se o mês for entre 1 e 12 então:  

     A idade será = 2016-ano;                                Os meses serão =12- mes;  

     Escrever"A sua idade é: ", idade,  " anos e", meses, " meses";

Acabar;

Caso a resposta seja n então

Começar  

     A idade será = 2016-ano;

     Escrever "A sua idade é ", idade " anos e 11 meses". (Porque estamos em Dezembro-Limitação do programa);

Acabar

Caso a resposta seja outra coisa escrever que essa opção não existe;

Acabar case;

Repetir até o ano ou o mes;

Fim. 

 

Codificação

Program idade ;
var idade,ano,mes,meses: integer;
                        fez: char;                    
Begin
repeat
writeln('Este programa indica a sua idade cronológica.');
writeln('Para sair, digite um ano ou um mes negativo ou uma letra.');
writeln('');
Write('Indique o ano completo em que nasceu (em número): ');
Readln(ano);
 If ano<0 then writeln('Erro. Este programa apenas calcula a idade de pessoas que tenham nascido depois de Cristo')
  else 
     If ano>2016 then writeln('Erro! Este programa foi feito para utiizadores que tenham nascido.')
     else 
        begin
         writeln('Já fez anos este ano (responda s ou n)?'); Readln(fez);
            Case fez of
                 's': begin
                      writeln('Em que mês? ');                                       readln(mes);
                         if mes<1 then exit
                           else
                            if mes>12 then writeln('Erro! Os meses começam em 1 e terminam em 12.')
                         else
                            begin                                                      idade:=2016-ano;                                               meses:=12-mes;
            writeln('A sua idade é: ', idade,  ' anos e', meses, ' meses');
                             end;
                          end ;                                        
                    'n': begin
                             idade:=2016-ano;
            writeln(' A sua idade é: ', idade,'anos e 11 meses.');
                           end
                                                        
                      else writeln('Essa opção não existe');
                 end;
            end;
        writeln('');
until ano<0;                                                                                                                                                                
End.

Obs.: Em caso de não ser legível, existe, nas imagens abaixo, um print do programa feito no Pascal.

Explicação

(alternativas e limitações)

Para que o programa descubra a idade da pessoa , este precisa de ter o conhecimento do ano e do mês em que nasceu.Para isso, o programa pede, primeiramente, o ano e, aqui encontramos a primeira limitação deste programa: não  adivinha a idade da pessoa caso essa tenha nascido antes de Cristo, no entanto, diz isso assim que o ano negativo for introduzido e, automaticamente, sai do programa, uma vez que a inserção de um ano ou um mês negativo (ou uma letra) conduz à saída do programa, tal como lhe é informado logo no início, de modo a contornar os erros fatais. E, se o ano for superior a 2016 o programa diz que não calcula a idade de pessoas que ainda não tenham nascido, o que eu não considero uma limitação pois não existe idade negativa.Para estes "se" eu utilizei o if uma vez que temos apenas três opções (menor que zero, superior a 2016 ou outro). Assim, se o ano for entre zero e 2016 o programa pergunta ao utilizador se este já fez anos este ano. Caso a resposta seja s (é dito ao utilizador que este pode responder s ou n) o programa pergunta em que mês e, utilizei ifs em relação ao mês porque só existem 3 opções: ou o mês é negativo e o programa diz que os meses vão de 1 a 12 e sai do programa porque isso é uma condição para se sair ou o mês é superior a 12 e o programa apenas reporta o erro mas não sai ou outro (o mês está entre 1 e 12- o 12 entre porque a pessoa pode já ter feito anos este mês). Portanto, imaginemos que a pessoa indica, em algarismos, um mês entre 1 e 12, inclusive, o programa faz as contas e indica a idade da pessoa, em anos e em meses. Caso a resposta à pergunta seja "n" o programa faz a operação e diz que a pessoa tem x anos e 11 meses (porque estamos em Dezembro- mais uma limitação: o programa só é válido até 31 de Dezembro de 2016). Caso a resposta for outra coisa, o programa diz que essa opção não existe, isto porque, nos case, as variáveis têm de ser integer ou char, se a pessoa escrever mais do que uma letra , o programa lê unicamente a primeira letra introduzida e se não for uma palavra que começa com s ou n então o programa diz que essa opção não existe e continua a correr, voltando ao início. E, se for introduzido um número, acontece o mesmo  "essa opção não existe". Por isso, resolvi apenas dar ao utilizador a informação que só pode responder s ou n. Aqui utilizei o case porque não vi vantagens do if e o case oferece, neste parte, uma estrutura mais organizada, a meu ver. O programa continua até a pessoa escrever um ano ou um mês negativo ou na pergunta se já fez anos responder um inteiro ou uma string (limitação). Para o programa ser menos limitado, poderíamos, em alternativa, utilizar functions ou procedures já feitas do Pascal que indicam o tempo real, assim, o programa seria válido não só até 31 de Dezembro de 2016. No entanto, as minhas tentativas de fazer isso não foram bem sucedidas já que é necessário recorrer a ficheiros já existentes na aplicação, que eu não tinha- as bibliotecas.No entanto,  apesar de todas as limitações do meu programa, eu penso que este está bastante completo, lógico e fácil de utilizar para quem não conhece como funcionam os compiladores Pascal, já que está toda a informação escrita, e alguns erros fatais evitados. Está o máximo user-friendly possível, a meu ver e, para reduzirmos algumas das limitações, bastaria tirar a parte do mês no entanto, eu resolvi mantê-la para testar se com muitos ifs o computador baralha-se. Neste programa, não se baralhou, o programa está lógico e penso que seja fácil também de perceber. 

Funcionamento do Programa

Nikoletta Matsur 12ºB nº18

bottom of page