Exercício nº 2
Classificação Qualitativa
Objetivos do Programa
O objetivo deste programa é atribuir uma classificação qualitativa a um determinado valor inserido que corresponde a uma nota.
Para isso, primeiro é pedido ao utilizador que introduza um número numa escala de zero a duzentos e de seguida informa o mesmo o que esse número é, qualitativamente (Fraco, satisfaz, Muito bom, etc.). Se o utilizador digitar algo fora da escala, o programa reporta o erro ao utilizador e continua a funcionar até o mesmo digitar uma letra ou pressionar um número negativo, e o mesmo é informado sobre isto no início de cada repetição.
Algoritmia
Programa classificacao;
(Escrever variáveis)
Começar
Escrever (Informar ao utilizador) o que este programa faz;
Escrever qual é a condição que permite que o utilizador saia do programa;
Pedir que o utilizador introduza a sua nota numa determinada escala;
Ler nota;
Caso a nota seja
entre 0 e 24 escrever "Fraco.";
entre 25 e 54 escrever "Muito mau.";
entre 55 e 94 escrever "Mau";
entre 95 e 104 escrever "Satisfaz Pouco";
entre 105 e 114 escrever "Satisfaz";
entre 115 e 134 escrever "Satisfaz +";
entre 135 e 154 escrever "Bom";
entre 155 e 164 escrever "Bom +";
entre 165 e 184 escrever " Muito Bom";
entre 185 e 194 escrever "Muito Bom +";
entre 195 e 200 escrever "Excelente, parabéns!";
outro então escrever "Erro, as notas são numa escala de 0 a 200.";
Acabar case;
Repetir o programa até ser introduzida uma nota negativa;
Fim.
Codificação
Program classificacao ;
var nota:integer;
Begin
repeat
writeln('Este programa atribui uma classificação qualitativa a valores introduzidos.');
writeln('Um número negativo ou uma letra interrompem a execução do programa.');
write('Introduza o valor da nota na escala de 0 até 200: ');
read(nota);
CASE nota OF
0..24:writeln('Fraco.');
25..54:writeln('Muito mau.');
55..94:writeln('Mau.');
95..104:writeln('Satisfaz Pouco.');
105..114:writeln('Satisfaz.');
115..134:writeln('Satisfaz +.');
135..154:writeln('Bom.');
155..164:writeln('Bom +.');
165..184:writeln('Muito Bom !');
185..194:writeln('Muito Bom +!');
195..200:writeln('Excelente! Parabéns!');
else writeln('Erro, as notas são numa escala de 0 a 200.');
end;
writeln('');
until nota<0;
End.
Explicação
(alternativas e limitações)
Sendo o objetivo deste programa atribuir uma classificação qualitativa a valores númericos introduzidos, eu defini uma escala para esses valores: de 0 a 200. Isto porque, se a mesma fosse de 0 a 20, haveriam valores decimais ou então, ter-se-ia informar ao utilizador que este tem que apresentar um valor arredondado às unidades, já que "case of " não funciona com números reais, apenas com variáveis do tipo inteiro ou "char" o que faria o programa mais limitado. Então optei pela escala indicada. E, numa tentativa de contornar os erros fatais informei ao utilizador que este deveria pressionar um cactere não numérico ou então uma nota negativa para sair do programa.
O programa vai funcionar até que o utilizador faça o que lhe foi indicado para sair. Para isso, utilizei repeat until, podendo, em alternativa, ter usado while, mas nesse caso, o utilizador, se quisesse sair, teria que pressionar uma letra e um número negativo não teria o mesmo efeito. Como o programa é pequeno, e valores negativos não entram na escala, não faz muita diferença usar repeat ou while. Para poder ser usado o for, teríamos que acrescentar mais duas variáveis e perguntar à pessoa quantas vezes ela queria realizar o programa, de seguida, teria que ser dada a instrução para ler a variável e fazer um ciclo " for (variável2):=1 to (variável lida) do". No entanto, a pessoa pode não querer decidir logo quantas vezes quer repetir o programa ou então, imaginemos que esta diz que quer fazer 1 vez, se após isso terminar, ela quiser fazer mais uma, terá que voltar a clicar F9, e, a meu ver, isso torna o programa mais limitado por isso usei repeat until.
Usei também Case of uma vez que : temos intervalos fixos ( 0 até 100 p.ex.), e temos muitas opções, obviamente que era possível fazer o mesmo com if mas como são demasiadas opções, num programa mais extenso, isto poderia gerar conflitos e o programa poderia não compliar por ser muito grande, então o case of tornou-se útil, ao contrário do exemplo anterior (Ex.1).
Caso o utilizador digite um número fora da escala, o programa responde que há um erro na escala e se esse número for negativo, além de dar essa informação de estar fora da escala, o programa acaba, tal como dito ao utilizador.
Funcionamento do Programa


Tentativa: 0 (o programa continua a funcionar).

Tentativas: -0 e -1 ( só -1 destas duas opçõesinterrompe o programa)
