Caderno de
Física Computacional
Lógica de programação
Pseudolinguagem
Prof. Dr. Luís Fernando de Oliveira
Universidade do Estado do Rio de Janeiro – UERJ Centro de Tecnologia e Ciência – CTC
Instituto de Física Armando Dias Tavares – IFADT
Sumário
1 Pseudolinguagem 3
1.1 Instruções preliminares. . . 3
1.1.1 Escopo. . . 3
1.1.2 Comentários . . . 3
1.1.3 Operador de atribuição . . . 3
1.2 Dados definidos . . . 4
1.2.1 Natureza dos dados . . . 4
1.2.2 Valores constantes . . . 4
1.2.3 Constantes . . . 4
1.2.4 Variáveis primitivas . . . 4
1.2.5 Variáveis indexadas com alocação estática . . . 5
1.2.6 Variáveis indexadas com alocação dinâmica . . . 6
1.3 Dados estruturados . . . 7
1.3.1 Definição da estrutura de dados (registro) . . . 7
1.3.2 Variáveis de estruturas . . . 8
1.4 Entrada e saída de dados . . . 9
1.4.1 Entrada e saída em dispositivos padrões . . . 9
1.4.2 Entrada e saída em arquivos . . . 10
1.5 Operações sobre dados . . . 13
1.5.1 Operador literal . . . 13
1.5.2 Operadores aritméticos . . . 13
1.5.3 Operadores lógicos . . . 15
1.5.4 Operadores relacionais . . . 16
1.6 Operações sobre o fluxo de execução . . . 17
1.6.1 Instrução de desvio simples . . . 17
1.6.2 Instrução de desvio composto . . . 17
1.6.3 Instrução de desvio encadeado . . . 18
1.6.4 Instrução de repetição incondicional (infinita) . . . 19
1.6.5 Instrução de interrupção . . . 19
1.6.6 Instrução de repetição pré-condicionada . . . 21
1.6.7 Instruções de repetição pós-condicionada . . . 21
1.6.8 Instrução de repetição incremental . . . 22
1.7 Modularização da lógica . . . 24
1.7.1 Passagem de argumentos . . . 24
1.7.2 Funções . . . 24
1.7.3 Subrotinas . . . 24
Lógica de programação
1
Pseudolinguagem
1.1
Instruções preliminares
1.1.1 Escopo
Sintaxes
Algoritmo identificador
Fim algoritmoidentificador
onde:
identificador sequência literal que identifica de forma exclusiva a lógica como um todo
1.1.2 Comentários
Sintaxe
{ comentário }
onde:
comentário texto auxiliar, elucidativo, explicativo, observação; enfim, compõe a documentação interna da lógica
1.1.3 Operador de atribuição
Sintaxe
rótulo ← informação
onde:
rótulo identificador do elemento de destino que receberá a informação informação informação que será atribuída ao elemento identificado porrótulo
1.2
Dados definidos
1.2.1 Natureza dos dados
1.2.2 Valores constantes
1.2.3 Constantes
Sintaxe
declarar rótulo natureza constante(rótulo ← valor) { comentário }
onde:
declarar termo que indica a ação de declaração de um ou mais dados rótulo identificador do dado
natureza natureza do dado (numérico, literal ou lógico) constante termo que indica que o dado não pode ser alterado
valor valor atribuído ao dado diretamente na sua declaração - obrigatório
Exemplo
Declarar a constante pinumérica cujo valor constante é 3,1415:
declarar pinumérico constante(pi←3,1415) { constante pi }
1.2.4 Variáveis primitivas
Sintaxes
declarar rótulo natureza { comentário }
declarar rótulo natureza (rótulo ← valor) { comentário } declarar rótulo1, ... , rótulon natureza { comentário } declarar rótulo1, ... , rótulon natureza (rótulo1 ←valor1 ; ... ; rótulon ← valorn) { comentário }
onde:
declarar termo que indica a ação de declaração de um ou mais dados rótulo, rótuloi identificadores dos dados – quando mais de um rótulo presente na
declaração, separá-los por vírgulas
natureza natureza do dado (numérico, literal, lógico ou arquivo) rótulo ← valor,
rótuloi ← valori
valores atribuído aos dados diretamente na declaração - a inicialização de cada dado é opcional; cada atribuição deve ser separada por ponto-e-vírgula
Exemplos
1. Declarar a variável x do tipo numérico:
declarar xnumérico
2. Declarar a variável slógica cujo valor inicial é falso:
declarar slógico(s← falso)
5
declarar arq arquivo
4. Declarar as variáveis x,y e z do tipo literais:
declarar x, y, z literais
5. Declarar as variáveis ae bliterais cujos valores iniciais são ’t’ e ’%’:
declarar a, blógico (a← ’t’ ;b← ’%’)
6. Declarar as variáveis gamae deltanuméricas cujo valor inicial de deltaé 0,003:
declarar gama, deltanuméricos (delta←0,003)
7. Declararentrada esaida como referências a arquivos: declarar entrada,saída arquivos
1.2.5 Variáveis indexadas com alocação estática
Sintaxes
declarar rótulo[n]natureza {lista com n elementos } declarar rótulo[n]natureza (rótulo ←[valor1;. . .;valorn])
declarar rótulo[p, q]natureza { matriz de p linhas por q colunas } declararrótulo[p, q]natureza(rótulo←[[valor11;. . .;valor1q];. . .; [valorp1;. . .;valorpq]])
declarar rótulo[d1, . . . ,dm]natureza {estrutura com m dimensões }
onde:
declarar termo que indica a ação de declaração de um ou mais dados rótulo identificador do dado
[. . .] dimensão do dado
n, p, q, d1, ... , dm valores correspondentes aos totais de elementos por dimensão natureza natureza do dado (numérico, literal ou lógico)
valori...j valor atribuído ao elemento de índices (i, . . . , j); a inicialização do dado é opcional, no entanto, se presente, todos os elementos devem ser inicializados
Exemplos
1. Declarar a listaX (unidimensional) do tipo numérico com 30 elementos:
declarar X[30]numérico
2. Declarar a listaS={1,2,3,4,5} do tipo numérico:
declarar S[5]numérico (S ← [ 10 ; 20 ; 30 ; 40 ; 50 ]) ou
3. Declarar astring(lista de valores literais)saudaçãocom 26 caracteres cujo conteúdo inicial é "Bom dia.":
declararsaudação[26] literal(saudação ←[ ’B’ ; ’o’ ; ’m’ ; ’ ’ ; ’d’ ; ’i’ ; ’a’ ; ’.’ ] ) ou
declararsaudação[26] literal(saudação[1]←’B’;saudação[2]←’o’; saudação[3]←’m’; saudação[4]←’ ’; saudação[5]←’d’; saudação[6]←’i’; saudação[7]←’a’; sauda-ção[8]←’.’)
ou
declarar saudação[26] literal(saudação←"Bom dia.") {somente strings! }
4. Declarar a matriz identidadeI 3x3:
declarar I[3,3] numérico (I ←[[1; 0; 0]; [0; 1; 0]; [0; 0; 1]])
5. Declarar uma matriz numérica com 5 dimensões (3x4x5x6x7) chamadamat: declarar mat[3,4,5,6,7]numérica
6. Declarar a lista destrings chamadaturma com 10strings de 20 caracteres: declarar turma[10,20] literal
7. Declarar a matriz D do tipo literal onde cada string tenha 20 caracteres e capacidade para 12strings:
declarar D[12,20] literal
1.2.6 Variáveis indexadas com alocação dinâmica
Sintaxes
declarar rótulo[∗]natureza { lista unidimensional com comprimento indefinido } declarar rótulo[∗,∗]natureza { matriz sem comprimentos definidos } declarar rótulo[∗, . . . ,∗]natureza { estrutura multidimensional sem comprimentos definidos }
alocarrótulo[n] {alocação de n elementos para a lista } alocarrótulo[p,q] {alocação de p linhas e q colunas para a matriz } alocarrótulo[d1, . . . ,dm] {alocação de cada comprimento das m dimensões }
desalocarrótulo { liberação da alocação }
onde:
declarar termo que indica a ação de declaração de um ou mais dados rótulo identificador do dado
[. . .] dimensão do dado
n, p, q, d1, ... , dm valores correspondentes aos totais de elementos por dimensão natureza natureza do dado (numérico, literal ou lógico)
Exemplos
7
declarar rótulo[∗,∗]numérico { comentário }
alocarrótulo[3,3] { comentário }
2. Liberar...
1. desalocarrótulo { comentário }
1.3
Dados estruturados
1.3.1 Definição da estrutura de dados (registro)
Sintaxes
definir registrorótulo_reg
| declarar lista de rótulos naturezaA { campos de naturezaA }
| declarar outra lista de rótulos naturezaB { campos de naturezaB }
| declarar outra lista de rótulos naturezaC {campos de naturezaC }
| { demais declarações de dados }
fim registro
onde:
definir registro termos de indicam o início de uma nova definição de estrutura de dados
rótulo_reg identificador do registro que está sendo definido - age como se fosse um novo tipo de dado, uma nova natureza de informação rótulos sequência de identificadores dos campos de natureza específica naturezaA, naturezaB,
naturezaC
naturezas dos dados (numérico, literal, lógico ou arquivo)
fim registro indica o encerramento da definição atual
Exemplos
1. definir um registro chamadocomplexo cujos campos sãoreal eimag do tipo numérico:
definir registrocomplexo
| declarar real, imag numéricos {partes real e imaginária }
fim registro
2. definir um registro chamado RG cujos campos são nome (string com 64 caracteres),
identidade (numérico) e gênero (literal):
definir registroRG
| declarar nome[64] literal { campostringnome } | declarar identidade numérico { campo numérico identidade } | declarar gênero literal { campo literal gênero }
fim registro
3. definir um registro chamadocadastrocujos campos sãonome(string com 64 caracteres)
e nascimento(um registro com os camposdia,mêse ano numéricos):
definir registrodata
| declarar dia,mês,anonuméricos { campos dia, mês e ano }
definir registrocadastro
| declarar nome[64] literal { campostringnome } | declarar nascimentodata {campo nascimentodo registro data }
fim registro
1.3.2 Variáveis de estruturas
Sintaxes
declarar rótulo rótulo_reg
declarar rótulo rótulo_reg(rótulo.campo1 ← valor1 ;rótulo.campo2 ← valor2 ; ... ) declarar rótulo rótulo_reg(rótulo ←rótulo_reg(valor1 ;valor2 ; ...) )
onde:
declarar termo que indica a declaração de um dado rótulo identificador do dado
rotulo_reg natureza do dado que está sendo declarado
campoi identificador do campo declarado na estrutura do registro valori valor atribuído ao i-ésimo campo
Exemplos
1. Declarar uma lista chamada zdo registro complexo com 10 elementos:
definir registrocomplexo
| declarar real, imag numéricos {partes real e imaginária }
fim registro
declarar z[10] complexo
2. Declarar uma variável z2 do registro complexo ondez2 é o número complexo 10−2i:
definir registrocomplexo
| declarar real, imag numéricos {partes real e imaginária }
fim registro
declarar z2 complexo(z2.real ←10 ; z2.imag ← −2)
ou
definir registrocomplexo
| declarar real, imag numéricos {partes real e imaginária }
fim registro
declarar z2 complexo(z2←complexo(10;−2))
3. Declarar uma variável chamada funcionário do tipo registro RG e atribuir aos campos os seguintes conteúdos: nome deve receber "Francisco da Silva",identidade 100145 esexo ’M’:
definir registroRG
| declarar nome[64] literal { campostringnome } | declarar identidade numérico { campo numérico identidade } | declarar gênero literal { campo literal gênero }
fim registro
9
funcionário.identidade←100145 ; funcionário.sexo←’M’) ou
definir registroRG
| declarar nome[64] literal { campostringnome } | declarar identidade numérico { campo numérico identidade } | declarar gênero literal { campo literal gênero }
fim registro
declarar funcionárioRG (funcionário← RG("Francisco da Silva"; 100145 ; ’M’))
4. Declarar uma variável empregado do registro cadastro e atribuir os seguintes dados na inicialização: nome recebe "João"e a data de nascimento é 10/5/1980:
definir registrodata
| declarar dia,mês,anonuméricos { campos dia, mês e ano }
fim registro
definir registrocadastro
| declarar nome[64] literal { campostringnome } | declarar nascimentodata {campo nascimentodo registro data }
fim registro
declararempregado cadastro(empregado← cadastro("João",data(10,5,1980))) ou
definir registrodata
| declarar dia,mês,anonuméricos { campos dia, mês e ano }
fim registro
definir registrocadastro
| declarar nome[64] literal { campostringnome } | declarar nascimentodata {campo nascimentodo registro data }
fim registro
declarar empregadocadastro (empregado.nome← "João";
empregado.nascimento← data(10,5,1980))
1.4
Entrada e saída de dados
1.4.1 Entrada e saída em dispositivos padrões
Sintaxes
lerlista de rótulos { entrada de dados pelo dispositivo padrão de entrada } escreverlista de rótulos e/ou valores constantes{ saída de dados no dispositivo padrão de saída }
onde:
lista de rótulos identificadores dos dados que armazenarão as informações inseridas pelo dispositivo padrão de entrada
lista de rótulos e/ou valores constantes
composição de dados (variáveis, constantes e valores constantes) a serem apresentados no dispositivo padrão de saída
Exemplos
Algoritmoexemplo_ler_e_escrever_1
declarar x, ynuméricos { variáveis }
1. lerx,y { ler elementos da entrada } 2. escrever"O valor de x é: ",x, " e o valor de y é: ", y { escrever na saída } Fim algoritmo
2. Ler do dispositivo de entrada padrão (teclado) umastring e armazená-la na variávelinfo; depois imprimi-la no dispositivo de saída padrão (monitor):
Algoritmoexemplo_ler_e_escrever_2
declarar inf o[64]literal { variáveis }
1. lerinf o {ler string do dispositivo de entrada } 2. escrever"você digitou ",inf o {escrever no dispositivo de saída } Fim algoritmo
3. Ler do dispositivo de entrada padrão (teclado) os dados de um funcionário e armazená-los numa variável do tipo cadastro (conforme exemplo da seção anterior):
Algoritmoexemplo_ler_e_escrever_3
definir registrodata
| declarar dia,mês,anonuméricos { campos dia, mês e ano }
fim registro
definir registrocadastro
| declarar nome[64] literal { campostringnome } | declarar nascimentodata { camponascimentodo tipo data }
fim registro
declarar funcionáriocadastro { funcionário é uma variável do tipo cadastro }
1. escrever"Entre com o nome do funcionário:"
2. lerfuncionário.nome { ler nome }
3. escrever"Entre com o dia, mês e ano do aniversário:"
4. lerfuncionário.nascimento.dia {ler dia }
5. lerfuncionário.nascimento.mês { ler mês }
6. lerfuncionário.nascimento.ano { ler ano }
Fim algoritmo
1.4.2 Entrada e saída em arquivos
Sintaxes
{abertura de um arquivo }
abrir arquivocomorótulo de referência paraoperação a ser realizada
{fechamento de um arquivo } fecharrótulo de referência
11
{saída de dados a partir do arquivo referenciado }
escreverlista de rótulos e/ou valores constantes em rótulo de referência onde:
arquivo dado literal que identifica o arquivo operação a ser
realizada
ação sobre o arquivo (leitura ou escrita)
rótulo de referência identificador da referência pelo qual o arquivo será acessado lista de rótulos identificadores dos dados que armazenarão as informações
inseridas pelo dispositivo padrão de entrada lista de rótulos e/ou
valores constantes
composição de dados (variáveis, constantes e valores constantes) a serem apresentados no dispositivo padrão de saída
Exemplos
1. Salvar no arquivo "matriz"uma matriz identidade 3×3: Algoritmoexemplo_escrever_arquivo
declarar arq_mat arquivo {referência ao arquivo } declarar mat[3,3]numérico { matriz identidade }
1. mat←[[1; 0; 0]; [0; 1; 0]; [0; 0; 1]] {atribui a matriz identidade à mat } {associa o arquivo "matriz" à referência arq_mat }
2. abrir "matriz"como arq_mat paraescrita
3. escrevermat[1,1], mat[1,2],mat[1,3]em arq_mat{escreve elementos da 1a linha }
4. escrevermat[2,1], mat[2,2],mat[2,3]em arq_mat{escreve elementos da 2a linha }
5. escrevermat[3,1], mat[3,2],mat[3,3]em arq_mat{escreve elementos da 3a linha }
6. fechararq_mat Fim algoritmo
2. Ler do arquivo "matriz"a matriz identidade 3×3 e escrever no dispositivo padrão (monitor): Algoritmoexemplo_ler_arquivo
declarar arq_dados arquivo {referência ao arquivo }
declarar I[3,3]numérico { matriz 3x3 }
{associa o arquivo "matriz"à referência arq_dados } 1. abrir "matriz"como arq_dados paraleitura
| { lê do arquivo "matriz" }
2. | lerI[1,1], I[1,2], I[1,3] dearq_dados {lê os elementos da 1a linha } 3. | lerI[2,1], I[2,2], I[2,3] dearq_dados {lê os elementos da 2a linha } 4. | lerI[3,1], I[3,2], I[3,3] dearq_dados {lê os elementos da 3a linha } 5. fechararq_dados
{escreve no dispositivo de saída padrão }
6. escreverI[1,1], I[1,2],I[1,3] { elementos da 1a linha } 7. escreverI[2,1], I[2,2],I[2,3] { elementos da 2a linha } 8. escreverI[3,1], I[3,2],I[3,3] { elementos da 3a linha } Fim algoritmo
um arquivo chamado "lista.txt": Algoritmoexemplo_arquivo_1
definir registrodata
| declarar dia,mês,anonuméricos { campos dia, mês e ano }
fim registro
definir registrocadastro
| declarar nome[64] literal { campostringnome } | declarar nascimentodata { camponascimentodo tipo data }
fim registro
declarar dadosarquivo {referência ao arquivo } declarar funcionáriocadastro { funcionário é uma variável do tipo cadastro }
1. escrever"Entre com o nome do funcionário:"
2. lerfuncionário.nome { ler nome }
3. escrever"Entre com o dia, mês e ano do aniversário:"
4. lerfuncionário.nascimento.dia {ler dia }
5. lerfuncionário.nascimento.mês { ler mês }
6. lerfuncionário.nascimento.ano { ler ano }
7. abrir "lista.txt"comodados paraescrita {associa o arquivo "lista.txt" à referência dados }
8. | escreverfuncionário.nome emdados { escreve o nome no arquivo } 9. | escreverfuncionário.nascimento.dia emdados {escreve o dia no arquivo } 10. | escreverfuncionário.nascimento.mês em dados { escreve o mês no arquivo } 11. | escreverfuncionário.nascimento.ano emdados { escreve o ano no arquivo } 12. fechardados
Fim algoritmo
4. Ler do arquivo "lista.txt"os dados de um funcionário segundo o registro cadastro:
Algoritmoexemplo_arquivo_2
definir registrodata
| declarar dia,mês,anonuméricos { campos dia, mês e ano }
fim registro
definir registrocadastro
| declarar nome[64] literal { campostringnome } | declarar nascimentodata { camponascimentodo tipo data }
fim registro
declarar funcionáriocadastro { funcionário é uma variável do tipo cadastro } declarar dadosarquivo {referência ao arquivo } declarar nome_arq[32]literal { armazena o nome do arquivo }
1. nome_arq← "lista.txt" { atribui a string "lista.txt" à variável nome_arq } {associa o arquivo cujo nome está em nome_arq à referência dados }
2. abrir nome_arqcomo dadosparaleitura
3. | lerfuncionário.nome dedados { lê nome do arquivo } 4. | lerfuncionário.nascimento.dia dedados {lê dia do arquivo } 5. | lerfuncionário.nascimento.mês dedados { lê mês do arquivo } 6. | lerfuncionário.nascimento.ano dedados { lê ano do arquivo } 7. fechardados
13
9. escrever"nascimento: ",funcionário.nascimento.dia, "/",funcionário.nascimento.mês, "/",
funcionário.nascimento.ano {escreve o dia/mês/ano no monitor } Fim algoritmo
1.5
Operações sobre dados
1.5.1 Operador literal
Sintaxe
res←op1+op2 { concatenação }
onde:
res variável literal de destino
opi operandos: valores literais constantes, constantes literais ou variáveis literais
Exemplos
1. Concatenar diretamente as strings constantes "Bom dia. " e "Como vai?" e armazenar o resultado emsaudação:
Algoritmoexemplo_concatenação_1
declarar saudação[26]literal
saudação ←"Bom dia. "+ "Como vai?" { o resultado é "Bom dia. Como vai?" } Fim algoritmo
2. Armazenar as strings constantes "Bom dia. " e "Como vai?" em duas variáveis e, depois, concatená-las usando as variáveis; armazenar o resultado em saudação:
Algoritmoexemplo_concatenação_2
declarar saudação[26]literal
declarar parte1[10], parte2[10]literal
parte1← "Bom dia. "
parte2← "Como vai?"
saudação ←parte1 + parte2 { o resultado é "Bom dia. Como vai?" } Fim algoritmo
1.5.2 Operadores aritméticos
Sintaxes
res←op1+op2 {soma }
res←op1−op2 {subtração }
res←op1∗op2 { multiplicação }
res←op1/op2 { divisão }
res←op1%op2 {resto de divisão de inteiros }
res←op1∗ ∗ op2 { potenciação }
res← −op { inversão de sinal }
res variável numérica de destino
opi operandos: valores numéricos constantes, constantes numéricas ou variáveis numéricas
Exemplos
1. adição de valores numéricos Algoritmoexemplo_adição
declarar a, b, cnuméricos
1. a←3 2. b←1
3. c←a+b { c←4 }
Fim algoritmoexemplo_adição
2. subtração de valores numéricos Algoritmoexemplo_subtração
declarar a, b, cnuméricos
1. a←3 2. b←1
3. c←a−b { c←2 }
Fim algoritmoexemplo_subtração
3. multiplicação de valores numéricos Algoritmoexemplo_multiplicação
declarar a, b, cnuméricos
1. a←3 2. b←1
3. c←a∗b { c←3 }
Fim algoritmoexemplo_multiplicação
4. divisão de valores numéricos Algoritmoexemplo_divisão
declarar a, b, cnuméricos
1. a←3 2. b←2
3. c←a/b { c←1,5 }
Fim algoritmoexemplo_divisão
5. resto da divisão de inteiros
Algoritmoexemplo_resto_da_divisão
declarar a, b, cnuméricos
{6 é divisível por 2; resto é 0 } 1. a←6
15
3. c←a%b { c←0 }
{8 não é divisível por 3; resto é 2 } 4. a←8
5. b←3
6. c←a%b { c←2 }
Fim algoritmoexemplo_resto_da_divisão
6. potenciação de valores numéricos Algoritmoexemplo_potenciação
declarar a, b, cnuméricos
1. a←3 2. b←2
3. c← a ** b { c←9 }
Fim algoritmoexemplo_potenciação
7. inversão de sinal de valores numéricos
Algoritmoexemplo_inversão_de_sinal
declarar a, bnuméricos
1. a←3
2. b← −a { b← −3 }
3. a← −9
4. b← −a { b←9 }
Fim algoritmoexemplo_inversão_de_sinal
1.5.3 Operadores lógicos
Sintaxe
res←op1 e op2 { E lógico (interseção) }
res←op1 ou op2 { OU lógico (união)}
res←não op { NÃO lógico (complemento) }
onde:
res variável lógica de destino
opi operandos: valores lógicos constantes, constantes lógicas ou variáveis lógicas
Exemplos
1. operação E lógico
Algoritmoexemplo_E_lógico
declarar a, b, cnuméricos
1. a←falso 2. b←falso
3. c←aeb { c ←falso }
6. c←aeb { c ←falso }
7. a←verdadeiro 8. b←falso
9. c←aeb { c ←falso }
10. a←verdadeiro 11. b←verdadeiro
12. c←aeb { c ←verdadeiro }
Fim algoritmo
2. operação OU lógico
Algoritmoexemplo_OU_lógico
declarar a, b, cnuméricos
1. a←falso 2. b←falso
3. c←aou b { c ←falso }
4. a←falso 5. b←verdadeiro
6. c←aou b { c ←verdadeiro }
7. a←verdadeiro 8. b←falso
9. c←aou b { c ←verdadeiro }
10. a←verdadeiro 11. b←verdadeiro
12. c←aou b { c ←verdadeiro }
Fim algoritmo
3. operação NÃO lógico
Algoritmoexemplo_NÃO_lógico
declarar a, bnuméricos
1. a←falso
2. b← nãoa { b←verdadeiro }
3. a←verdadeiro
4. b← nãoa { b←falso }
Fim algoritmo
1.5.4 Operadores relacionais
Sintaxes
res←op1> op2 {maior que }
res←op1>=op2
res←op1≥op2 {maior ou igual a }
res←op1< op2 { menor que }
res←op1<=op2
17
res←op1=op2 {igualdade, equivalência }
res←op1 /= op2
res←op16=op2 {desigualdade, não equivalência }
onde:
res variável lógica de destino
opi operandos: valores constantes, constantes ou variáveis, todos de mesma natureza
Exemplos
Algoritmoexemplo_NÃO_lógico
declarar alógico
1. a←5>3 {a←verdadeiro }
2. a←5≥3 {a←verdadeiro }
3. a←5<3 {a←falso }
4. a←5≤3 {a←falso }
5. a←5 = 3 {a←falso }
6. a←56= 3 {a←verdadeiro }
Fim algoritmo
1.6
Operações sobre o fluxo de execução
1.6.1 Instrução de desvio simples
Sintaxe
se(condição), então
| { executar bloco de instruções no caso de condição ser avaliada verdadeiro}
fim se
onde:
condição condição lógica a ser avaliada
Exemplo
1. Escrever "O valor de x é positivo não nulo" no dispositivo padrão de saída caso o valor de
x seja maior que zero:
Algoritmoexemplo_desvio_simples
declarar xnumérico
1. escrever"Entre com o valor de x: " 2. lerx
3. se(x >0),então
4. | escrever"O valor de x é positivo não nulo" 5. fim se
Fim algoritmo
1.6.2 Instrução de desvio composto
Sintaxe
| { executar bloco de instruções no caso de condição ser avaliada verdadeiro}
senão
| { executar bloco de instruções no caso de condição ser avaliada falso}
fim se
onde:
condição condição lógica a ser avaliada
Exemplo
1. Escrever "O valor de x é positivo não nulo" no dispositivo padrão de saída caso o valor de
x seja maior que zero, caso contrário, escrever "O valor de x é negativo ou nulo":
Algoritmoexemplo_desvio_composto_1
declarar xnumérico
1. escrever"Entre com o valor de x: " 2. lerx
3. se(x >0),então
4. | escrever"O valor de x é positivo não nulo" 5. senão
6. | escrever"O valor de x é negativo ou nulo" 7. fim se
Fim algoritmo
2. Determinar se o valor dex é negativo, nulo ou positivo: Algoritmoexemplo_desvio_composto_2
declarar xnumérico
1. escrever"Entre com o valor de x: " 2. lerx
3. se(x <0),então
4. | escrever"O valor de x é negativo" 5. senão
6. | se (x >0), então
7. | | escrever"O valor de x é positivo" 8. | senão
9. | | escrever"O valor de x é nulo" 10. | fim se
11. fim se
Fim algoritmo
1.6.3 Instrução de desvio encadeado
Sintaxe
se(condição1), então
| { executar bloco de instruções caso condição1 seja avaliadaverdadeiro} senão se (condição2),então
| { executar bloco de instruções caso condição2 seja avaliadaverdadeiro} senão se (condição3),então
| { executar bloco de instruções caso condição3 seja avaliadaverdadeiro}
19
{continua a estrutura de "senão se (condição), então" até não ter mais alternativas... } | { ... }
senão
| {executar bloco de instruções caso nenhuma condição anterior for avaliadaverdadeiro }
fim se
onde:
condiçãoi condições lógicas a serem avaliadas
Exemplo
1. :
Algoritmoexemplo_desvio_encadeado_1 {bloco de instruções }
{bloco de instruções } {bloco de instruções } {bloco de instruções } {bloco de instruções }
Fim algoritmo
1.6.4 Instrução de repetição incondicional (infinita)
Sintaxe
fazer
| { bloco de instruções }
fim fazer
Exemplo
1. Repetição infinita de números inteiro a partir de 0: Algoritmoexemplo_repetição_infinita
declarar i, passonumérico (i←0;passo←1)
1. fazer
2. | escreveri 3. | i←i+passo
4. fim fazer
Fim algoritmo
1.6.5 Instrução de interrupção
Sintaxe
parar
Exemplos
Algoritmoexemplo_repetição_1
declarar i, passonumérico (passo←1;i←0)
1. fazer
2. | se (i <10),então { enquanto i for menor que 10... } 3. | | escreveri { escreve no dispositivo de saída } 4. | | i←i+passo
5. | senão { quando a condição falhar... }
6. | | parar {interrompe a repetição } 7. | fim se
8. fim fazer
Fim algoritmo
2. Imprimir a sequência de 0 até 9: Algoritmoexemplo_repetição_2
declarar i, passonumérico (passo←1)
1. i←0 2. fazer
3. | se (i >9),então { quando i for maior que 9... } 4. | | parar { interrompe-se a repetição } 5. | senão
6. | | escreveri { até lá, escreve no dispositivo de saída } 7. | | i←i+passo
8. | fim se
9. fim fazer
Fim algoritmo
3. Imprimir a sequência de 0 até 9: Algoritmoexemplo_repetição_3
declarar i, passonumérico
1. passo←1 2. i←0 3. fazer
4. | se (i >9),então { quando i for maior que 9... } 5. | | parar { interrompe-se a repetição } 6. | fim se
7. | escreveri { até lá, escreve no dispositivo de saída } 8. | i←i+passo
9. fim fazer
Fim algoritmo
4. Imprimir a sequência de 0 até 9:
Algoritmoexemplo_repetição_4
declarar i, passonumérico (i←0;passo←1)
1. fazer
21
4. | se (i >9),então { até que i seja maior que 9... } 5. | | parar {para, então, interromper a repetição } 6. | fim se
7. fim fazer
Fim algoritmo
5. Imprimir a sequência de 0 até 9: Algoritmoexemplo_repetição_5
declarar i, passonumérico
1. passo←1 2. i←0 3. fazer
4. | escreveri { escreve no dispositivo de saída } 5. | i←i+passo
6. | se ( não(i <10)),então {quando i não for menor que 10... } 7. | | parar {ou seja, quando i for maior que 9, para a repetição } 8. | fim se
9. fim fazer
Fim algoritmo
1.6.6 Instrução de repetição pré-condicionada
Sintaxe
enquanto (condição),fazer
| { bloco de instruções }
fim enquanto
onde:
condição condição lógica a ser avaliada
Exemplo
1. Imprimir a sequência de 0 até 9:
Algoritmoexemplo_repetição_precondicionada
declarar inumérico
1. i←0
2. enquanto(i <10), fazer {primeiro testa o valor de i }
3. | escrever"i = ", i {imprime o valor de i }
4. | i←i+ 1 { incrementa i }
5. fim enquanto
Fim algoritmo
1.6.7 Instruções de repetição pós-condicionada
Sintaxes
fazer
enquanto (condição)
ou
repetir
| { bloco de instruções }
até que (condição)
onde:
condição condição lógica a ser avaliada
Exemplos
1. Imprimir a sequência de 0 até 9:
Algoritmoexemplo_repetição_precondicionada_1
declarar inumérico
1. i←0 2. fazer
3. | escrever"i = ", i { imprime o número antes de incrementar }
4. | i←i+ 1 {incrementa e... }
5. enquanto(i <10) { para quando i não for mais menor que 10 }
Fim algoritmo
2. Imprimir a sequência de 0 até 9:
Algoritmoexemplo_repetição_precondicionada_2
declarar inumérico
1. i←0 2. repetir
3. | escrever"i = ", i {imprime o valor de i }
4. | i←i+ 1 {incrementa e... }
5. até que (i >9)) { para quando i for maior que 9 }
Fim algoritmo
3. Imprimir a sequência de 0 até 9:
Algoritmoexemplo_repetição_precondicionada_3
declarar inumérico
1. i←0 2. repetir
3. | escrever"i = ", i {imprime o valor de i }
4. | i←i+ 1 {incrementa e... }
5. até que (não (i <10)) {ou seja, para quando i for maior que 9 } Fim algoritmo
1.6.8 Instrução de repetição incremental
Sintaxe
23
| { bloco de instruções }
fim para
onde:
rótulo identificador do dado usado para controlar a repetição; chamado de variável contadora
início valor inicial atribuído à variável contadora
fim valor final que a variável controladora poderá assumir inclusive razão passo da progressão da contagem, para valor de razão positivo, ou da
regressão da contagem, para valor de razão negativo;
no caso de incremento ou decremento unitário, o termo passo e a razão (1 ou −1) podem ser omitidos
Exemplos
1. Contagem progressiva unitária
Algoritmoexemplo_repetição_incremental_1
declarar m numérico
1. param de1 até10, fazer { incremento unitário }
2. | escreverm/10 {imprime o valor de m/10 }
3. fim para
Fim algoritmo
2. Contagem progressiva na razão de 2:
Algoritmoexemplo_repetição_incremental_2
declarar m numérico
1. param de1 até10 passo2,fazer { razão de incremento igual a 2 } 2. | escreverm/10 {imprime o valor de m/10 }
3. fim para
Fim algoritmo
3. Contagem regressiva unitária:
Algoritmoexemplo_repetição_incremental_3
declarar m numérico
1. param de10 até1, fazer { razão de incremento igual a−1 }
2. | escreverm/10 {imprime o valor de m/10 }
3. fim para
Fim algoritmo
4. Contagem regressiva com razão−3:
Algoritmoexemplo_repetição_incremental_4
declarar m numérico
1. param de10 até1 passo−3,fazer { razão de incremento igual a−3 } 2. | escreverm/10 {imprime o valor de m/10 }
Fim algoritmo
1.7
Modularização da lógica
1.7.1 Passagem de argumentos
1.7.2 Funções
Sintaxes
Função rótulo_func(argumentos)natureza_func
declarar argumentos natureza (mecanismo_passagem) declarar dados_locais natureza
{bloco de instruções }
retornar dado_retorno Fim função
onde:
rótulo_func identificador da função
argumentos identificadores de dados utilizados para passagem de parâmetros
natureza_func natureza do valor de retorno da função
mecanismo_passagem forma como os argumentos são transferidos para o escopo da função: por cópiaou por referência
dados_locais identificadores de dados utilizados localmente na função
Exemplos
1.
1.7.3 Subrotinas
Sintaxes
Subrotinarótulo_subrot (argumentos)
declarar argumentos natureza (mecanismo_passagem) declarar dados_locais natureza
{bloco de instruções }
Fim subrotina
onde:
rótulo_subrot identificador da subrotina
argumentos identificadores de dados utilizados para passagem de parâmetros
mecanismo_passagem forma como os argumentos são transferidos para o escopo da subrotina: por cópia ou por referência
dados_locais identificadores de dados utilizados localmente na função
Exemplos
Referências Bibliográficas
[1] MANZANO, J. A. N. G.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento de programação de computadores. 26. ed. (rev). São Paulo: Érica, 2012.