Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
ALGORITMOS DEFINIÇÃO. Algoritmo é a especificação de um conjunto finito, completo e ordenado de operações que devem ser executadas a fim de solucionar um problema ou realizar uma tarefa. FORMAS DE REPRESENTAÇÃO: - Descrição Narrativa - Fluxograma - Pseudocógio Descrição Narrativa Expressão dos algoritimos em uma linguagem humana: português, inglês, etc. Exemplo: Cálculo da média de um aluno - Obter as notas das duas provas - Calcular a média ponderada: 40% da primeira nota e 60% da segunda. - Se a média inferior a 7.0, o aluno foi reprovado, senão ele foi aprovado. Esta forma é pouco útil para especificar algoritmos inerentes à implementação computacional. Por esta forma, não serão objeto de estudo. - Fluxograma Os flugramas são representações gráficas de um algoritmo. São compostos por um conjunto de símbolos que expressam determinadas operações comuns aos algoritmos computacionais. No escopo de nossa abordagem utilizarmos inicialmente apenas os símbolos abaixo apresentados: = Marcas de Início e Fim do Fluxograma = Entrada de Dados (obtém os dados necessários à execução do algoritmo – Ex. teclado = Saída de Dados (enviam informação para o dispositivo de saída. Ex. monitor ) = Comando de atribuição (ou chamada de módulo/função) = Decisão (permitem condicionar o fluxo de execução das operações) = Setas (indicam o fluxo de execução das operações) Exemplo: Cálculo da média de um aluno .F. Início N1, N2 Média = N1*0,4+N2*0,6 Média < 7,0 “Aprovado” “Reprovado” Fim .V. - Pseudocódigo Forma de reprentação muito próxima do formato clássico das linguagens de programação de alto nível. Há duas vantagens básicas nesse tipo de representação: (1) menos provável surgimento de ambiguidade em comparação com a “descrição narrativa” e; (2) tradução facilitada para linguagens de programação. Estrutura Básica do Pseudocódigo. Algoritmo <nome do algoritmo> Var <nome ou lista de variáveis > : <tipo> Início <conteúdo do algoritmo> Fim. Exemplo: Cálculo da média de um aluno Algoritmo Média Var N1, N2, Média : real Início LER N1, N2 Média = N1*0,4 + N2*0,6 SE Média < 7.0 Então ESCREVER “Reprovado” Senão ESCREVER “Aprovado” FSE Fim. VARIÁVEIS: - Tipos de Variáveis 1. Inteiras: representam valores que pertencem ao conjunto dos número inteiros. 2. Reais: representam valores numéricos fracionários. 3. Alfanuméricos: variáveis cujo conteúdo são letras, palavras ou cadeia de caracteres alfanuméricos. Também conhecidas como “strings”. Importante que o seu conteúdo é delimitado por aspas. Ex.: Nome <- “Ana” 4. Lógicos: representam os valores lógicos “verdadeiro” ou “falso”. Por vezes representados como valores inteiros onde zero é o valor falso e um é o valor verdadeiro. - Variáveis e Armazenamento na Memória Memória é o conjunto células onde se armazenam os dados de um programa (e não só). Cada célula possui um endereço (numérico) específico. Pode-se fazer uma analogia entre entre uma qualquer coluna de dados do Excel e um segmento de memória, onde cada célula pode assumir um valor e a localização da célula é dada pelo número da linha onde se encontra A capacidade de armazenamento de cada uma dessas células depende da arquitetura da memória: cada célula pode armazenar uma quantidade “0”s e “1” de acordo como quantidade de bits que são acessados. Vamos estudar o caso geral: cada célula “contém” 8 bits. Esse conjunto de 8 bits é chamado de byte. O byte é a menor porção acessível de memória. Um byte de 8 bits é numerado em ordem decrescente de 7 a 0, onde o bit 7 é o mais significativo (MSB – Most Significant Bit) e o bit 0 é o menos significativo (LSB – Least Significant Bit) Cada bit armazena uma informação binária, 0 ou 1, então esse byte possui 2 8 =256 estados possíveis. No correr deste documento, cada posição de memória terá 8 bits. Armazenamento de Dados do Tipo Alfanúmérico (texto) Para armazenar um valor alfanumérico, será suficiente reservar-se uma posição de memória para cada letra/dígito desse tipo de variável. Senão vejamos: imagine que a variável chamada objeto recebe o valor “casa”, ou objeto <- “casa”; Mas, se as posições de memória só guardam uma sequência de “0”s e “1”s, como representar esse valor na memória ? Veja a tabela a seguir: end Conteúdo base 10 ASCII 15 0 1 1 0 0 0 1 1 99 C 16 0 1 1 0 0 0 0 1 97 A 17 0 1 1 1 0 0 1 0 115 S 18 0 1 1 0 0 0 0 1 97 A Existe a chamada Tabela ASCII (American Standard Code for Information Interchange), onde cada caractere é associado a um número (código) que pode variar de 0 a 255, portanto 256 possibilidades. Armazenamento de Dados do Tipo Inteiro As linguagens de programação permitem a definição de diversos tipos de variáveis, como por exemplo: short int (inteiros entre -32.768 a +32.767); short unsigned integer (0 a 65.535); ou integer (-2.147.483.648 a +2.147.483.647). O dois primeiro tipos apresentados necessitam de 2 bytes (ou seja, duas posições de memória para serem armazenados). O tipo integer necessita de 4 bytes. Não é difícil perceber: quantos mais bytes disponíveis para se armazenar um número, maior a faixa de valores que poderão ser representados. Para ilustrar, vamos analisar um tipo de variável hipotético que armazena valores inteiros em apenas um byte: Assim, há 8 posições disponíveis para uma representação em binário de um número. Vamos analisar o maior e menor número possível: 000000002 = 010 111111112 = 25510 Como ser constata acima com um byte seria possível armazenar qualquer valor inteiro entre 0 e 255. Mas como representar inteiros menores que zero ? Para isso será necessário “sacrificar” 1 bit que passará a representar o sinal. Assim é possível o seguinte: 011111112 => 0 (-) 11111112 = -12710 111111112 => 1(+) 11111112 = 12710 Acima, o bit mais sinificativo (mais à esquerda) foi utilizado para representar o sinal. Com 2 bytes teríamos: 11111111 111111112 => 65.53510 M(32) M(33) Veja que, não por acaso, o valor acima calculado é o valor máximo do tipo “short unsigned integer” anteriormente citado. M(32) e M(33) acima são exemplos de possíveis posições de memória onde as duas sequências de 8 bits estariam armazenadas. - Atributos de Variáveis A uma variável estão sempre associados: Nome: definido pelo programador e que deve: (1) iniciar com uma letra e; (2) não deve conter símbolos especiais, exceto a sublinha ( _ ). Endereço de Memória: posição do primeiro byte onde a variável começa a ser armazenada. Tipo: tipo de informação que será armazenada (número inteiro, número real, texto, etc). O tipo determina o número de bytes necessários para armazenar a variável na memória. Informação: valor da variável em um momento específico. O Nome, Endereço e Tipo são fixos durante a execução de um programa, o Informação varia durante a execução do programa. - Definição de Variáveis em Algoritmos Todas as variáveis utilizadas nos algoritmos devem ser definidas no início dos mesmos, de uma das seguintes formas: VAR <nome_da_variável> : <tipo_da_variável> ou VAR <lista_de_variáveis> : <tipo_das_variáveis> Variáveis de tipos diferentes devem ser declaradas em linhas diferentes. Exemplo: VAR nome: : literal[10] Idade, Nfilhos, : inteiro Salario, : real Gerente : lógico - Expressões O armazenamento de valores na memória é fundamental, mas não suficiente para as tarefas executadas em um algoritmo. É necessário também mecanismos que permitam utilizar essas variáveis de maneira que possam ser alteradas ou sirvam de base para cálculos específicos, que resultam na atualização de outras variáveis. As variáveis podem ser manipuladas através de expressões. As expressões permitem combinar variáveis, constantes e operadores de maneira a calcular um resultado. As constantes são valores que, durante a execução de um programa, não tem o seu valor alterado em nenhum momento. Por exemplo, quando se deseja criar um algoritimo para calculo de áreas, o valor de PI (PI =3,1415…) deve ser armanezado na memória de maneira a ser utilizado, por exemplo, no cálculo da área do círculo. Note que o valor nessa posição de memória, não sofrerá qualquer alteração, pois o valor de PI é constante. Os operadores são os elementos que determinam a maneira pela qual os dados serão processados, determinando o resultado obtido. Tipos de Operadores Os tipos de operadores distinguem-se pelo tipo de dados sobre os quais operam e pelo valor resultante de sua avaliação, são eles: Operadores Aritméticos Operadores Lógicos Operadores Relacionais Alfanuméricos Operadores Aritméticos São operadores que incidem sobre variáveis numéricas e o resultado produzido é também numérico. Existe relação de precedência de execução entre esses operadores que se apresenta na tabela abaixo. Operador (Operação) Prioridade + (Manutenção de Sinal) - (Inversão de Sinal) 1º ** (Exponenciação) 2º * (Multiplicação), / (Divisão), % (Resto da Divisão Inteira) 3º + (Adição), - (Subtração) 4º A ordem de execução de uma operação numa expressão é: primeiro os operadores de maior prioridade. Para operadores de mesma prioridade executa-se primeiro o que estiver mais a esquerda na expressão. Exemplo: Var n1, n2, n3, total : inteiro Início Ler n1, n2, n3 (imagine-se que o utilizador introduz 4, 3, 2) total = n1 + n2 * n3 / n1 – n2**n3 * n1 Escreva total Fim No exemplo anteriror, é a seguinte a ordem das operações (prioridade): total = n1 + n2 * n3 / n1 – n2**n3 * n1 n2**n3 = 3**2 = 9 (chamaremos de r1 a este resultado) total = n1 + n2 * n3 / n1 – r1 * n1 n2 * n3 = 3 * 2 = 6 (r2) total = n1 + r2 / n1 – r1 * n1 r2 / n1 = 6 * 4 = 24 (r3) total = n1 + r3 – r1 * n1 r1 * n1 = 9 * 4 = 36 (r4) total = n1 + r3 – r4 n1 + r3 = 4 + 24 = 28 (r5) total = r5 – r4 r5 – r4 = 28 – 36 = -8 (total) Os operadores aritméticos usam números inteiros e reais. Operações entre números inteiros resulta número inteiro. Qualquer operação que inclua números reais resulta número real. Operadores Lógicos São operadores que incidem sobre variáveis lógicas, cujos valores possíveis são: verdadeiro ou falso. O resultado produzido é também um valor lógico. Os operadores lógicos básicos são: NOT; OR; AND (ou, em português: NEGAÇÃO; OU; E). O operador lógico NOT é unário, ou seja, incide apenas sobre uma variável lógica. Os operadores OR e AND operam sobre duas (ou mais) variáveis lógicas. O resultado produzido por esses operadores é apresentado na tabela a seguir: Variáveis NOT OR AND L1 L2 ! L2 L1 || L2 L1 && L2 .F. .F. .V. .F. .F. .F. .V. .F .V. .F. .V. .F. .V. .V. .F. .V. .V. .F. .V. .V. Também esses operadores existe prioridade entre esses operadores da seguinte maneira: Operador Prioridade .NOT. 1º .AND. 2º .OR. 3º Operadores Relacionais São operadores que incidem sobre variáveis tanto sobre variáveis numéricas, lógicas ou alfanuméricas. Esses operadores efetuam operações de comparações entre dois conjuntos de expessões e retornam o resultado verdadeiro ou falso, conforme os valores comparados. Operador Símbolo Exemplo Resultado maior > n1 > n2 1 (verdadeiro) se o “teste” ao lado for verdade, 0 (falso) caso contrário menor < n1 < n2 maior ou igual >= n1 >= n2 menor ou igual <= n1 <= n2 igual == n1 == n2 diferente != n1 != n2 Operadores Alfanuméricos Manipulam variáveis com conteúdo texto. Os tipos de operadores variam bastante de uma linguagem para outra. Como exemplo de um operador alfanumérico tem-se a “concatenação” Exemplo: v1 = “Fim”; v2 = “de”; v3 = “semana” Frase <= v1 & “-“ & v2 & “-“ & v3 Frase = “Fim-de-semana” Avaliação de Expressões As expressões podem conter vários tipos de operadores dos tipos apresentados. Assim é necessário definir também a prioridade de execução entre os todos os tipos de operadores. Prioridade (Símbolo) 1º (!) (-) (++) (--) 2º (*) (/) (%) 3º (+) (-) 4º (<) (>) (<=) (>=) 5º (==) (!=) 6º (&&) 7º (||) 8º (=) Obs: (1) Operadores de maior prioridade devem ser avaliados primeiro. Quando a prioridade for igual, deve-se avaliar da esquerda para a direita. (2) As subexpressões entre parênteses devem ser avaliadas primeiro. (3) Muito cuidado na utilização do operador relacional igual (==) e variáveis reais. Muitas vezes dois números reais podem ser iguais, mas, devidos a arredondamentos nos cálculos, diferem de maneira residual. Assim uma expressão do tipo nr1 == nr2, pode ser falsa ainda que os dois números reais sejam iguais. INSTRUÇÕES BÁSICAS É o conjunto de comandos disponíveis para a realização de tarefas computacionais. Possibilitam a comunicação com o usuário (comandos de entrada e saída), processamento dos dados (comando de atribuição) e controle do fluxo de execução das instruções (comandos de decisão). Cada um dos comandos possui uma sintaxe e uma semântica: - sintaxe – é a forma como os comandos devem ser escritos para que possam ser entendidos pelo programador. - semântica – ação propriamente dita que será executada pelo comando. - Instrução de Atribuição Forma pela qual é possível armazenar, numa variável, o valor calculado em uma expressão. Sintaxe em Pseudocódigo: < Variável > = < Expressão > Sintaxe em Fluxogramas: Semântica: O valor calculado na expressão é armazenado na posição de memória da variável que aparece à esquerda do comando. IMPORTANTE: O tipo de dado resultante do cálculo da expressão deve ser compatível com o tipo de dado da variável. < Variável > = < Expressão > Exemplo de aplicação da ATRIBUIÇÃO: - Construa um algoritmo que calcule a área de um retângulo com lados medindo 10 e 15 cm. O resultado deve ser colocado numa variável chamada “area_ret”. - Pseudocódigo: Algoritmo Calc_Area_Retangulo Var L1, L2, area : real Início L1 = 10 L2 = 15 Area = L1 * L2 Fim - Fluxograma: L1 = 10; L2 = 15 Area = L1 * L2 Início Fim Fim Fim Area = L1 * L2 Fim Area = L1 * L2 Fim L1 = 10; L2 = 15 Area = L1 * L2 Fim Início L1 = 10; L2 = 15 Area = L1 * L2 Fim IMPORTANTE Avalie o seguinte conjunto de intruções de atribuição: VL1 = 10 VL1 = VL1 * 2 VL2 = VL1 / 4 Qual o valor assumido por VL2? Resposta: 5 …. POR QUE ? Vamos avaliar como é processado este comando de atribuição: VL1 = VL1 * 2 A ordem em que a operação primitiva de atribuição a seguinte: 1. EFETUAM-SE TODOS OS CÁLCULOS QUE ESTÃO A DIREITA DO COMANDO DE ATRIBUIÇÃO. Ou seja, VL1 * 2 = 10 * 2 = 20 2. O RESULTADO OBTIDO NO PONTO ANTERIOR É COLOCADO NA VARIÁVEL QUE ESTÁ A ESQUERDA DO COMANDO DE ATRIBUIÇÃO. VL1 = 20 - Instrução de Entrada de Dados Forma pela qual é possível obter os dados necessários para se executar a tarefa descrita pelo algoritmo. Sintaxe em Pseudocódigo: LER < lista de variáveis > Sintaxe em Fluxogramas: Semântica: Através de um dispositivo de entrada são fornecidos dados que são colocados nas posições de memória das variáveis apresentadas em <lista de variáveis>. <lista de variáveis> Exemplo de aplicação da ENTRADA DE DADOS: - Construa um algoritmo que leia os dois valores dos comprimentos dos lados necessários para o cálculo da área de um retângulo. O resultado deve ser colocado numa variável chamada “area_ret”. - Pseudocódigo: Algoritmo Calc_Area_Retangulo Var L1, L2, area : real Início LER L1, L2 Area = L1 * L2 Fim - Fluxograma: Area = L1 * L2 Início Fim Fim Fim Area = L1 * L2 Fim Area = L1 * L2 Fim Area = L1 * L2 Fim Início Area = L1 * L2 Fim L1, L2 - Instrução de Saída de Dados Forma pela qual é possível apresentar o resultado produzido pela execução do algoritmo. Sintaxe em Pseudocódigo: ESCREVER < lista de variáveis > e/ou < texto> Sintaxe em Fluxogramas: Semântica: Os valores (variáveis ou texto) presentes no comando são enviados para o dispositivo de saída e apresentados ao usuário. <lista de variáveis> e/ou <texto> Exemplo de aplicação da SAÍDA DE DADOS: - Construa um algoritmo que leia os dois valores dos comprimentos dos lados necessários para o cálculo da área de um retângulo. O resultado deve ser colocado numa variável chamada “area_ret” e deve ser apresentado ao usuário. - Pseudocódigo: Algoritmo Calc_Area_Retangulo Var L1, L2, area : real Início LER L1, L2 Area = L1 * L2 ESCREVA area Fim - Fluxograma: Fim Início Area = L1 * L2 L1, L2 “Área =”, Area CONTROLE DO FLUXO DE EXECUÇÃO DO ALGORITMO A execução de um algoritmo é uma sequência ordenada de passos bem definidos e não ambíguos que conduzem a resolução de um problema. Entretanto, na maioria das vezes, a execução das intruções é condicionada a algum resultado lógico prévio. Por exemplo, escrever o se um aluno foi ou não “aprovado” numa disciplina. Existirá uma instrução ‘ESCREVER “Aprovado” ‘, entretanto essa instrução só deverá ser executada se a média do aluno não for inferior a 7,0. Ou, seja o fluxo de execução do algoritmo poderá ou não “passar” por essa instrução. A ordem de execução das instruções é determinado por três tipos de estruturas básicas de controle do fluxo de instruções de um algoritmo: Estruturas Seqüenciais Estruturas de Decisão Estruturas de Repetição Associado ao conceito de “fluxo de execução do algoritmo” está associado o conceito de “bloco de comandos”. Um bloco de comandos é o conjunto de intruções que será executado consoante o resultado das condições expressas nas Estruturas de Decisão ou que estejam contidos no “laço” associado às Estruturas de Repetição. Esse conceito só se tornará claro, após o entendimento dessas Estruturas que serão apresentadas de seguida. - Estruturas Seqüenciais Os comandos são executados em fila. Um comando só é executado após o término do comando anterior. A representação dessa estrutura é apresentada a seguir: Fluxograma: Pseudocódigo: ... <Comando 1> <Comando 2> <Comando 3> ... Todos os exemplos apresentados previamente neste documento são exemplo de estrutura sequenciais. <Comando 1> <Comando 2> <Comando 3> - Estruturas de Decisão O fluxo de execução das instruções é determinado pela avaliação de uma ou mais condições. Essas condições são apresentas no formato de expressões lógicas. Seguindo o exemplo anterior temos algo como: ... SE nota >= 7,0 ENTÃO ESCREVER “Aprovado” SENÃO ESCREVER “Reprovado” FSE ... Observe que quando o fluxo de execução atravessa essa parte do algoritmo, apenas uma das instruções “ESCREVER” é que será executada. Qual delas será executada é determinada pela expressão lógica “nota >= 7,0”. Caso isso seja uma “verdade” então a instrução a ser executada será a que escreve “Aprovado”, senão, será a outra. Existem dois subtipos desta estrutura: Estrutura de decisão do tipo SE Estrutura de decisão do tipo ESCOLHA Estruturas de Decisão Tipo SE Nessa estrutura é avaliada uma expressão lógica, chamda condição, que poderá ser simples ou composta de expressões e variáveis de todos os tipos. Exemplo de uma condição: status = “Inscrito” && Nota >= 7 && Freq >= 0,75 Essa condição será verdadeira se (1) o aluno estiver com a sua inscrição na disciplina regularizada, (2) se a sua nota final for superior a 7,0 e (3) se compareceu a pelo menos 75% das aulas Há dois comandos que implementam estrutura de decisão do tipo SE: SE ... {SENÃO} ... FSE SE ... SENÃO-SE (n) ... {SENÃO} ... FSE COMANDO: SE ... {SENÃO} ... FSE Sintaxe em Pseudocódigo: SE <condição> ENTÃO <bloco de comandos 1> SENÃO <bloco de comandos 2> FSE Sintaxe em Fluxogramas: Semântica: Na execução do comando “SE”, em primeiro lugar a “condição” é avaliada, desta avaliação resulta ser “verdadeira” ou “falsa”. Caso seja verdadeira são executados os comando incluídos no “bloco de comandos 1”. Caso contrário há duas possibilidades: (1) executam-se os comandos chamados “bloco de comandos 2” (ver o 1º diagrama acima), ou (2) nada é executado (2º diagrama). Note que a sintaxe do pseudocódigo contém um trecho em azul, isso indica que essa parte do comando é opcional. IMPORTANTE: apenas 1 dos blocos é executado !!! Feito o descrito acima o algoritmo segue o fluxo normal, executando o próximo comando após o FSE. <condição> <bloco com 2> .V. <bloco com 1> .F. ou <condição> <bloco com 1> .F. .V. Exemplo 1: Algoritmo para informar se uma pessoa é menor de idade: Pseudocódigo Fluxograma Algortimo “Menor de Idade” Var idade: inteiro; Início LER idade SE idade < 18 ENTÃO ESCREVER “Menor” FSE Fim. Exemplo 2: Algoritmo para informar se uma pessoa é menor ou maior de idade: Pseudocódigo Fluxograma Algortimo “Menor ou Maior” Var idade: inteiro; Início LER idade SE idade < 18 ENTÃO ESCREVER “Menor” SENÃO ESCREVER “Maior” FSE Fim. idade Início Fim “Menor nor” .F. .V. idade<18 Início Fim idade “Menor nor” “Maior .F. .V. idade<18 COMANDO: SE ... SENÃO-SE {n} ... {SENÃO} ... FSE Sintaxe em Pseudocódigo: Sintaxe em Fluxograma: SE <condição 1> ENTÃO <bloco de comandos 1> SENÃO-SE <condição 2> <bloco de comandos 2> ... SENÃO-SE <condição n+1> <bloco de comandos n+1> SENÃO <bloco de comandos n+2> FSE Semântica: Ao chegar se neste comando (que neste parágrafo chamaremos de “C-SE-SENÃO”), inicialmente a “condição 1” é avaliada. Caso seja verdadeira, “executa-se o bloco de comandos 1” e segue para o próximo comando (estará terminado“C-SE-SENÃO”). Caso essa “condição 1” seja falsa então a “condição 2” é avaliada e, caso seja verdadeira, “executa-se o bloco de comandos 2” e o comando “C-SE-SENÃO” está finalizado. Caso “condição 2” seja falsa, avalia-se a próxima condição e continua-se de forma análoga ao que foi feito para condições 1 e 2 até a última condição. Se todas as condições já foram avaliadas e todas são falsas, então executa-se o “bloco de comandos n+2” e o comando “C-SE- SENÃO” está finalizado. Importante: tudo o que está escrito em azul acima é opcional. .F. .V. <cond2> <blc com 2> .F. .V. <cond n+1> <blc com n+1> <blc com n+2> .F. .V. <cond1> <blc com 1> Exemplo: Algoritmo para indicar se 5 número inteiros estão ordenados: Pseudocódigo Fluxograma Algortimo “O Maior de 5 inteiros” Var n1, n2, n3, n4, n5, Mn: inteiro; Início LER n1, n2, n3, n4, n5 SE n1 > n 2 ENTÃO ESCREVER “Seq. NÃO ord.” SENÃO-SE n2 > n 3 ENTÃO ESCREVER “Seq. NÃO ord.” SENÃO-SE n3 > n 4 ENTÃO ESCREVER “Seq. NÃO ord.” SENÃO-SE n4 > n 5 ENTÃO ESCREVER “Seq. NÃO ord.” SENÃO ESCREVER “Seq. ORDENADA” FSE Fim. .F. .V. n1 > n2 “Seq N Ord” .F. .V. n2 > n3 “Seq N Ord” .F. .V. n3 > n4 “Seq N Ord” .F. .V. n4 > n5 “Seq N Ord” “Seq ORD” Início Fim n1,n2,n3,n4,n5 Estruturas de Decisão Tipo ESCOLHA Nessa estrutura o valor de uma variável é avaliado e executar-se-á o bloco de comandos associado ao valor que a variável possui no momento. Sintaxe em Pseudocódigo: Sintaxe em Fluxograma: ESCOLHA <variável v> CASO < valor 1 > < bloco de comandos 1> FC CASO < valor 2> < bloco de comandos 2> FC ... CASO < valor n> < bloco de comandos n> FC SENÃO < bloco de comandos n+1> FESCOLHA ... .F. .V. <blc com 1> < v=vl 1> .F. .V. <blc com 2> < v=vl 2> .F. .V. <blc com n> < v=vl n> ... <blc com n+1> Semântica: Este comando permite selecionar a execução de um ou mais dentre diversos blocos de comando disponíveis conforme o valor da < variável E>. O comando percorre sequencialmente, de cima para baixo, cada um dos “CASO” até encontrar o que tem o valor igual ao da “variável v”. Uma vez encontrado esse valor, serão executados todos os blocos de comandos daí para baixo até uma de duas situações se verifica: (1) chegar-se ao “FESCOLHA” ou (2) encontra o primeiro “FC”. Importante: O “FC” é opcional, assim, a linhas tracejadas no fluxograma representam as possíveis opções de fluxo de execução do algoritmo. Ou seja, se associado a condição <v= vl1> estiver associado o “FC”, então o fluxo que se deve usar é o que está representado mais à direita no fluxograma (ou seja, liga-se diretamente à saída do comando). Caso não exista o “FC”, então após a execução do <blc com 1>, será executado o <blc com 2> e todos os outros posteriores até que se chegue ao fim do comando ou que se encontre o primeiro “FC”. A seguir, o exemplo do pseudocódigo e fluxograma onde só existe um “FC” associado ao CASO <valor 2>, note a diferença no fluxograma. ESCOLHA <variável v> CASO < valor 1 > < bloco de comandos 1> CASO < valor 2> < bloco de comandos 2> FC CASO < valor 3> < bloco de comandos 3> SENÃO < bloco de comandos 4> FESCOLHA <blc com 4> <blc com 1> <blc com 2> .V. .F. < v=vl 1> .V. .F. < v=vl 2> <blc com 3> .V. < v=vl 3> .F.