• Nenhum resultado encontrado

Caderno de Física Computacional

N/A
N/A
Protected

Academic year: 2019

Share "Caderno de Física Computacional"

Copied!
29
0
0

Texto

(1)

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

(2)
(3)

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

(4)
(5)

Lógica de programação

(6)
(7)

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ótuloinformaçã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

(8)

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ótulonvalorn) { 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ótulovalor,

rótuloivalori

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(sfalso)

(9)

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

(10)

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

(11)

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 }

(12)

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

(13)

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(empregadocadastro("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.nascimentodata(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

(14)

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

(15)

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

(16)

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

(17)

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

resop1+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

resop1+op2 {soma }

resop1−op2 {subtração }

resop1∗op2 { multiplicação }

resop1/op2 { divisão }

resop1%op2 {resto de divisão de inteiros }

resop1∗ ∗ op2 { potenciação }

res← −op { inversão de sinal }

(18)

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. ca+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. cab { 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. cab { 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. ca/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

(19)

15

3. ca%b { c←0 }

{8 não é divisível por 3; resto é 2 } 4. a←8

5. b←3

6. ca%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

resop1 e op2 { E lógico (interseção) }

resop1 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. afalso 2. bfalso

3. caeb { c ←falso }

(20)

6. caeb { c ←falso }

7. averdadeiro 8. bfalso

9. caeb { c ←falso }

10. averdadeiro 11. bverdadeiro

12. caeb { c ←verdadeiro }

Fim algoritmo

2. operação OU lógico

Algoritmoexemplo_OU_lógico

declarar a, b, cnuméricos

1. afalso 2. bfalso

3. caou b { c ←falso }

4. afalso 5. bverdadeiro

6. caou b { c ←verdadeiro }

7. averdadeiro 8. bfalso

9. caou b { c ←verdadeiro }

10. averdadeiro 11. bverdadeiro

12. caou b { c ←verdadeiro }

Fim algoritmo

3. operação NÃO lógico

Algoritmoexemplo_NÃO_lógico

declarar a, bnuméricos

1. afalso

2. bnãoa { bverdadeiro }

3. averdadeiro

4. bnãoa { bfalso }

Fim algoritmo

1.5.4 Operadores relacionais

Sintaxes

resop1> op2 {maior que }

resop1>=op2

resop1≥op2 {maior ou igual a }

resop1< op2 { menor que }

resop1<=op2

(21)

17

resop1=op2 {igualdade, equivalência }

resop1 /= op2

resop16=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 {averdadeiro }

2. a←5≥3 {averdadeiro }

3. a←5<3 {afalso }

4. a←5≤3 {afalso }

5. a←5 = 3 {afalso }

6. a←56= 3 {averdadeiro }

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

(22)

| { 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}

(23)

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. | ii+passo

4. fim fazer

Fim algoritmo

1.6.5 Instrução de interrupção

Sintaxe

parar

Exemplos

(24)

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. | | ii+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. | | ii+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. | ii+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

(25)

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. | ii+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. | ii+ 1 { incrementa i }

5. fim enquanto

Fim algoritmo

1.6.7 Instruções de repetição pós-condicionada

Sintaxes

fazer

(26)

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. | ii+ 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. | ii+ 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. | ii+ 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

(27)

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 }

(28)

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

(29)

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.

Referências

Documentos relacionados

Este presente artigo é o resultado de um estudo de caso que buscou apresentar o surgimento da atividade turística dentro da favela de Paraisópolis, uma

Changes in the gut microbiota appears to be a key element in the pathogenesis of hepatic and gastrointestinal disorders, including non-alcoholic fatty liver disease, alcoholic

Em cada caso foram obtidos três grupos de imagens, compreendendo as valvas cardíacas, a área da meia altura e o interior da câmara ventricular esquerda (evidenciando o septo e

Avaliar, quanto à adesão de suas camadas, filmes coextrusados de PET/PEBD e PET/EVOH/PEBD usados na fabricação de embalagens para alimentos, assim como estudar as interfaces e

Mineração de conhecimento interativa em níveis diferentes de abstração: Como é  difícil  prever  o  que  exatamente  pode  ser  descoberto  de  um  banco 

 Numéricos das das Propriedades Propriedades do do Ar Ar Úmido, Úmido, Cartas Cartas Psicrométricas, Psicrométricas, Processos Processos Psicrométricos, Psicrométricos,

As principais indicações para a realização foram a suspeita de tuberculose (458 pacientes) e uso de imunobiológicos (380 pacientes).. A maior prevalência de resultado positivo

Pela primeira vez foi organizado e produzido um livro com a participação de inúmeros filiados denominado &#34;Cerimonial por Cerimonialistas&#34;, lançado por ocasião da realização