Julgamento de múltiplos ramos com uma única expressão
Se você precisar executar lógicas diferentes conforme valores distintos da mesma expressão, a instrução case .. of .. end é extremamente adequada.
case SomeValue of
0: DoSomething;
1: DoSomethingElse;
2: begin
IfItsTwoThenDoThis;
AndAlsoDoThis;
end;
3..10: DoSomethingInCaseItsInThisRange;
11, 21, 31: AndDoSomethingForTheseSpecialValues;
else
DoSomethingInCaseOfUnexpectedValue;
end;Code language: JavaScript (javascript)
O ramo else é opcional e equivale ao default presente na instrução switch das linguagens da família C.
Se nenhum ramo corresponder e nenhum else for declarado, nenhum código será executado.
Se você tem familiaridade com linguagens tipo C e comparar com a instrução switch, perceberá que o case do Pascal não possui passagem automática (fall-through). Essa é uma vantagem projetada intencionalmente no Pascal. Não é necessário adicionar manualmente instruções break; apenas um ramo case será executado por vez, e após a execução o bloco case todo é encerrado imediatamente.
5 formas válidas de correspondência
case num of
5: Writeln('Igual a 5'); // Valor único
1,3,5: Writeln('Corresponde a um entre 1, 3 e 5'); // Múltiplos valores separados por vírgula
10..20: Writeln('Intervalo de 10 a 20'); // Faixa numérica contínua
'a'..'z': Writeln('Letras minúsculas'); // Faixas de caracteres também são suportadas
else
Writeln('Nenhum valor correspondente');
end;Code language: JavaScript (javascript)
Ramos com várias linhas de código devem ser envolvidos por begin..end
case n of
2: begin
Writeln('Ramo 2');
Writeln('Executar várias linhas de código');
end;
end;Code language: JavaScript (javascript)
O exemplo abaixo recebe um número ASCII entre 1 e 128 e classifica o caractere ASCII correspondente com base no valor informado.
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program AsciiJudge;
// Procedimento encapsulado: recebe código ASCII 0-128 para classificação
procedure JudgeAsciiCode(code: Integer);
begin
case code of
// 1. Correspondência de valor único + múltiplas linhas com begin end (Enter ASCII=13)
13: begin
Writeln('======== Tecla Enter Especial ========');
Writeln('Código ASCII: 13 Caractere de controle retorno de carro');
Writeln('=======================================');
end;
// 2. Múltiplos valores discretos separados por vírgula: todos caracteres de controle 0-12, 14-31
0,1,2,3,4,5,6,7,8,9,10,11,12,14,15..31:
Writeln('Tipo: Caractere de controle');
// 3. Correspondência por faixa: algarismos 0~9 ASCII 48~57
48..57: Writeln('Tipo: Algarismos 0-9');
// Faixa: Letras maiúsculas A-Z
65..90: Writeln('Tipo: Letras maiúsculas A-Z');
// Faixa: Letras minúsculas a-z
97..122: Writeln('Tipo: Letras minúsculas a-z');
// 4. Ramo padrão else + múltiplas linhas com begin end (pontuação e símbolos)
else
begin
Writeln('Tipo: Pontuação / Símbolo');
Writeln('Código ASCII informado: ', code);
end;
end;
end;
var
asciiNum: Integer;
begin
Write('Informe um número ASCII entre 0 e 128: ');
ReadLn(asciiNum);
// Restringir intervalo de entrada
if (asciiNum >= 0) and (asciiNum <= 128) then
JudgeAsciiCode(asciiNum)
else
Writeln('O valor informado está fora do intervalo 0~128, inválido!');
ReadLn;
end.Code language: PHP (php)
Para saber mais sobre códigos ASCII, consulte o artigo abaixo: ASCII table – Table of ASCII codes, characters and symbols
Julgamento condicional de múltiplos valores (instrução case)