APÊNDICE
I
Codificação de Algoritmos em Linguagens de Programação: Pascal, Fortran e Modula-2
SUMÁRIO I.1 Conversão de algoritmos
I.1
I.2 Práticas de programação
CONVERSÃO DE ALGORITMOS Para converter um algoritmo escrito em linguagem natural em algumas das ferramentas de programação: diagramas de fluxo, diagramas N-S e pseudocódigo, poderão ser utilizadas as tabelas seguintes, que consideramos as equivalências correspondentes. Para sua correta conversão, deveremos buscar na coluna de instruções o elemento correspondente do algoritmo e nas seguintes colunas suas equivalentes ferramentas de programação.
.
V ← E / V = E
V ← E V = variável E = expressão (constante, variável ou expressão) ler lista de variáveis
Atribuição
Entrada de dados
ler lista ler lista de variáveisde variáveis
V ← E
Escrita de uma tabela de variáveis.
fim
algoritmo identificador
Diagrama N-S
ler lista de variáveis ler lista de variáveis
Escrevemos as variáveis e os tipos na tabela de variáveis juntamente com o diagrama de fluxo.
Modelo 1 (dentro do algoritmo na seção de declaração). var nome11, nome12, ...: tipo1; nome21, nome22...: tipo2 Modelo2. Descrição de variáveis e tipos na tabela de variáveis
fim
início
Declaração de variáveis
algoritmo identificador [seção de declaração de variáveis e constantes] início . . . fim
Estrutura do algoritmo
Diagrama de fluxo
Pseudocódigo
Instruções (ações)
Tabela I.1 Conversão de algoritmos em ferramentas de programação
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
(Continua)
Pseudocódigo escrever lista de expressões
S1 S2 S3
. . . Sn
1. {fase descritiva do comentário} 2. {fase descritiva do comentário} ir_a etiqueta
Instruções (ações)
Saída de dados
Instrução combinada
Comentários
Bifurcação incondicional
AA
11 ir_a ir_aetiqueta etiqueta
Sn Sn
Sn Sn
fase descritiva do algoritmo
.. .. ..
S2 S2
S1 S1
escrever escrever lista variáveis escrever lista variáveis lista variáveis
Diagrama N-S
S1 S1
S1 S1
escrever lista variáveis
Diagrama de fluxo
Tabela I.1 Conversão de algoritmos em ferramentas de programação (cont.)
Codificação de algoritmos em linguagens de programação: Pascal, Fortran e Modula-2mm
(Continua)
Pseudocódigo
Modelo 1: se condição então S1 S2 . . Sn fim_se Modelo 2: se condição então S1 S2 . . Sn fim_se Modelo 3: se condição então S1
Modelo 1: se condição então S11 S12 . . S1n se não S21 S22 . . S2n fim_se Modelo 2: se condição então S1 se não S2 fim_se
Instruções (ações)
Seletiva alternativa simples
Seletiva alternativa dupla
S2 Sn
S2 Sn
Não
S21 S22 S2n
S11 S12 S1n
S11 S12 S1n
S2n
S22
S21
Sim Condição Sim Condição Não Não
Não S1
S1
Sim Condição Sim Condição
Diagrama de fluxo
Sn
S2
S2
Sn
S1
S1
Sim
Condição
*
Não
Condição
Diagrama N-S
Sim
S22 . . . S2n
S12 . . . S1n
S12 . . . S1n
S21
S11 S11
*
S2n
. . .
S22
S21
Condição Condição Sim Não
* Seta ou Branco * Seta ou Branco
Sim
Tabela I.1 Conversão de algoritmos em ferramentas de programação (cont.)
Não
Não
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
(Continua)
conforme_seja expressão fazer
Seletiva alternativa múltipla E1:S11 S12 . . . S1n E2:S21 22 . . . S2n En:Sn1 Sn2 . . S1n em_outro_caso Sx1 Sx2 . . Sxn fim_conforme
Pseudocódigo
Instruções (ações)
E1 E2 E3
E3
expresexpresE2 são são En
Em outro Em outro caso caso En
S1n S1nS2n S2nS3n S3nSnn SnnSxn Sxn
S11 S11S21 S21S31 S31Sn1 Sn1Sx1 Sx1 S12 S12S22 S22S32 S32Sn2 Sn2Sx2 Sx2
E1
Diagrama de fluxo
Tabela I.1 Conversão de algoritmos em ferramentas de programação (cont.)
S4n S4nSx1 Sx1
S4n S4n
S1n S1n S2n S2n
S11 S11 S21 S21 .. S22 .. S12 S12 S22 . .. . . .. . . .
Sxn Sxn Snn Snn
Sx1 Sx1 Sn1 Sn1 Sx2 Sx2 Sn2 Sn2 . . .. . . .. . . ..
E1 E1 E2 E2 . . . . . . En En Ex Ex
Modelo 2: 2: Modelo
expressão expressão E2 E2 S11 S11 Em Em E3 E3 S12 S12 outrooutro S21 S21 . S22 . S22 E4 E4 casocaso . . . S31 . S31 S41 S41Sx1 Sx1 . . . S32 . S32 . S42 . S42Sx2 Sx2 . . S1n S1n . .. . . . S2n S2n . .. . . . . . . . S3n S3n
E1 E1
Modelo Modelo 1: 1:
Diagrama N-S
Codificação de algoritmos em linguagens de programação: Pascal, Fortran e Modula-2mm
(Continua)
Pseudocódigo iterar S1 S2 . . sair_se condição . . S3 . . Sn fim_iterar
Instruções (ações)
repetitiva iterar
Sn Sn
S3 S3
Não Não
Sim Sim Condição Condição
S2 S2
S1 S1
Diagrama de fluxo
Modelo Modelo2: 2:
S1 S1 S2 S2 Não Não
Ações Ações
Sair_se Sair_secondição condição
Sn Sn
Sair Sair
Condição Condição
S3 S3
Sim Sim
iterar iterar
Modelo Modelo1: 1:
Diagrama N-S
repetir repetir
Tabela I.1 Conversão de algoritmos em ferramentas de programação (cont.)
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
(Continua)
Pseudocódigo enquanto condição S1 S2 . . Sn fim_enquanto
repetir S1 S2 . . . Sn até_que condição
Instruções (ações)
repetitiva enquanto
repetitiva repetir
Sn
S2
S1
Não
NãoSim
Sim
Condição Condição
Sn
S2
S1
Modelo 1: Modelo 1:
S3 S3
S2 S2
S1 S1
Sim Sim
Não Não
Condição Condição
até_que condição até_que condição
enquanto condição enquanto condição
Diagrama N-S
repetir
Diagrama de fluxo
repetir
Conversão de algoritmos em ferramentas de programação (cont.)
repetir repetir
Tabela I.1
Codificação de algoritmos em linguagens de programação: Pascal, Fortran e Modula-2mm
(Continua)
S1 S2 . . Sn fim_desde Modelo 2: para V de Vi a Vf fazer S1 S2 . . Sn fim_para
S2
S1
V=Vf V=Vf Sim
S1
S2
Sn
S1
S2
Sn
Não
Não
V=Vf+xV=Vf+x
V>Vf V>Vf
Modelo Modelo 2: 2:
Não
Condição Condição V = Vf V = Vf Não Sim Sim
V ← Vi V+ ← x Vi + x
S2
S1
V← Vi V← Vi
Modelo Modelo 1: 1:
Modelo 1: desde V=Vi até Vf [incremento x] fazer
repetitivas desde
Diagrama de fluxo
Pseudocódigo
Instruções (ações)
Sim
Tabela I.1 Conversão de algoritmos em ferramentas de programação (cont.)
= Vi V = ViVaté Vfaté Vf
desdedesde
Diagrama N-S
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
(Continua)
Sn
S2
S1
Repetir V=Vi Vf=x Modelo 4:
Sn
S2
S1
Não V=Vf+x
V=Vf
Modelo 3:
V>Vf
Sim
Codificação de algoritmos em linguagens de programação: Pascal, Fortran e Modula-2mm
início S1 S2 . . Sn fim
[sessão de declarações]
algoritmo identificador
Estrutura do algoritmo
Pseudocódigo
const nome = valor; type nome = tipo de dados; var nome, nome,...:tipo; procedure/function [definição do subprograma] begin S1 S2 . . . Sn . . . Sn end
program identificador (input-output)
Pascal
(declaração de variáveis e constantes) IMPLICIT CHARACTER PARAMETER (declaração de arrays) DIMENSION (declaração de funções) COMMON EQUIVALENCE EXTERNAL INTRINSIC (inicialização de variáveis) DATA (definição de funções de sentença) Instruções executáveis . . . END
PROGRAM identificador (opcional)
FORTRAN
Tabela I.2 Conversão de pseudocódigos em programas
END nomemódulo
<declaração de procedimentos> BEGIN <sentenças>
<lista de importar> <declaração de constantes> <declaração de tipo> <declaração de variáveis>
MODULE nomemódulo;
Modula-2
10mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
(Continua)
Pascal
Leitura de dados ler lista de variáveis
V ← E
Atribuição
read (lista de variáveis) readln (lista de variáveis)
V: = E
Declaração de variáveis var lista de nomes1: var lista nomes1: tipo 1 tipo1 lista de nomes2: lista nomes 2: tipo 2 tipo2
Pseudocódigo
READ (n, f) lista de variáveis n número unidade entrada f etiqueta sentença FORMAT READ (*,*) lista de variáveis READ f, lista
Read (c) ReadString (s) ReadInt (i) ReadReal (x) c: tipo CHAR i = integer s = tipo cadeia x = tipo real
V: = E
tipo é INTEGER REAL BOOLEAN CARDINAL BITSET CHAR
tipo é INTEGER REAL DOUBLE PRECISION LOGICAL COMPLEX CHARACTER * n (n, comprimento da cadeia)
V = E
VAR <lista de variáveis>: tipo
Modula-2
tipo lista de variáveis
FORTRAN
Tabela I.2 Conversão de pseudocódigos em programas (cont.)
Codificação de algoritmos em linguagens de programação: Pascal, Fortran e Modula-2mm11
(Continua)
1. Isto é um comentário 2. * isto é um comentário Nota: C ou * se escrevem na primeira coluna
1. IF lógico IF (condição) S IF (condição) GOTO etiqueta
1. {mensagem} 2. (*mensagem *)
1. if condição then begin S1 S2 . . Sn end 2. if condição then begin S1 S2 . . Sn end 3. if condição then se else S2
Comentários
Seletivas Alternativa simples se condição então S1 S2 . . Sn fim_se
2. IF de blocos IF condição THEN S1 S2 . . Sn END IF
WRITE (n, f) lista de expressões WRITE (*,*) lista de expressões WRITE f, lista de expressões PRINT f, lista de expressões
write (lista de expressões) writeln (lista de expressões)
Escrita de dados escrever lista de expressões
FORTRAN
Pascal
Pseudocódigo
Tabela I.2 Conversão de pseudocódigos em programas (cont.)
. . Sn END
IF condição THEN S1 S2
(*comentários*)
WriteReal (x, n) WriteLn
WriteInt (i, n)
WriteString (s)
Write (c)
Modula-2
12mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
(Continua)
1. if condição then S11 S12 . . S1n else begin S21 S22 . . S2n end
2. if condição then begin S11 S12 . . S1n end else begin S12 S22 . . S2n end
Pascal
se condição então S11 S12 se não S21 S22 fim_se
Alternativa dupla
Pseudocódigo
IF condição THEN S11 S12 . . S1n ELSE S21 S22 . . S2n ENDIF
FORTRAN
Tabela I.2 Conversão de pseudocódigos em programas (cont.)
IF condição THEN S11 S12 . . S1n ELSE S21 S22 . . S2n END
Modula-2
Codificação de algoritmos em linguagens de programação: Pascal, Fortran e Modula-2mm13
(Continua)
repeat S1 S2 . . Sn until condição 1. for v: = vi 2. for v: = vi 3. for v: = vi begin S1 S2 . . Sn end 4. for v: = vi begin S1 S2 . . Sn end
Notas: 1 e 3, incrementos positivos; 2 e 4, incrementos negativos
repetitiva (desde para) desde V = Vi até Vf [incremento x] fazer ... fim_desde
n CONTINUE
downto Vf do
n etiqueta de linha m1 valor inicial m2 valor final m3 incremento
DO n i = ml, m2, m3 . . .
to vf do S1 downto Vf do S1 to Vf do
FOR V: = Vi TO Vf [BY x] DO S1 S2 . . Sn end
REPEAT S1 S2 . . Sn UNTIL condição
END
repetitiva (repetir) repetir S1 S2 . . Sn fim_repetir
WHILE condição DO S1 S2 . . Sn
Modula-2
1. while condição do begin S1 S2 . . Sn end 2. while condição do S1
repetitiva (enquanto) enquanto S1 S2 . . Sn fim_enquanto
FORTRAN
Pascal
Pseudocódigo
Tabela I.2 Conversão de pseudocódigos em programas (cont.)
14mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
(Continua)
Pascal S11 S12 . . S1n while not condição do begin S21 S22 . . S2n S11 S12 . . end
Pseudocódigo
repetitiva iterar iterar S11 S12 . . Sn sair se condição S21 S22 . . S2n fim_iterar LOOP S1 S2 . .
UNTIL condição LOOP S11 S12 . . EXIT S21 S22 END
Modula-2
FORTRAN
Tabela I.2 Conversão de pseudocódigos em programas (cont). Codificação de algoritmos em linguagens de programação: Pascal, Fortran e Modula-2mm15
16mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
I.2
PRÁTICAS DE PROGRAMAÇÃO Exemplo I.1 Calcular o volume de um cilindro círculo Análise A fórmula do volume do cilindro é V = p · R² · H Variáveis de entrada: RAIO, ALTURA de tipo real Variáveis de saída: VOLUME de tipo real Constantes: π = PI = 3,141592 Algoritmo Os passos gerais do algoritmo são: início determinar os valores do raio R e altura H o volume é obtido com a expressão V = p * R2 * H calcular e escrever o valor de V fim
Pseudocódigo algoritmo volume {declaração de variáveis e constantes} var RAIO, ALTURA, VOLUME = real constante PI = 3,141592 início {leitura de dados} ler RAIO, ALTURA {processo} VOLUME → PI * RAIO * ALTURA {saída de dados} escrever VOLUME fim
Codificação em Visual BASIC 100 110 120 130 140 150 160 170 180 190 200 210 220
‘programa volume ‘cálculo do volume de um cilindro ‘ ‘declaração de variáveis DEFSNG RAIO, ALTURA, VOLUME ‘início das sentenças executáveis ‘entrada de dados PI = 3,141592 INPUT RAIO, ALTURA VOLUME = PI * RAIO ^ 2 * ALTURA ‘saída de dados PRINT ‘o volume é’, VOLUME END
Codificação em FORTRAN C
PROGRAM cilindro Calcular o volume de um cilindro INTEGER SAÍDA DATA ENTRADA, SAÍDA/5, 6/
Codificação de algoritmos em linguagens de programação: Pascal, Fortran e Modula-2mm17
DATA PI /3,141592/ READ (ENTRADA, 100) RAIO, ALTURA VOLUME = PI * RAIO * RAIO * ALTURA WRITE (SAÍDA, 200) VOLUME STOP 100 FORMAT (2 F8.0) 200 FORMAT (‘o volume é’, F8.2) END
NOTA: Os dispositivos físicos do teclado e tela são atribuídos aos números de dispositivos 5 e 6 respectivamente. Codificação em Pascal program CILINDRO (INPUT, OUTPUT) {calcular o volume de um cilindro} const PI = 3,141592 var RAIO, ALTURA, VOLUME: real begin {leitura de dados} read (RAIO, ALTURA) VOLUME: = PI * SQR (RAIO) * ALTURA write (‘o volume é’, VOLUME = 8:2) end {fim de CILINDROS}
Codificação em MODULA-2 MODULE cilindro {calcular o volume de um cilindro} FROM EasyInOut IMPORT ReadReal, WriteReal, WriteString; CONST PI = 3.14.1592 VAR Raio, Altura, Volume: REAL BEGIN ReadReal (Raio); ReadReal (Altura) Volume := PI * Raio * Raio * Altura WriteString (‘o volume é ’); WriteReal (Volume, 8,2) END cilindro
Exemplo I.2 Calcular a média aritmética de uma série indeterminada de números positivos Análise A média de uma série de números X1, X2..., Xn responde à fórmula: MÉDIA =
X1 + X2 + ... + Xn n
18mmFundamentos de programação – Algoritmos, estruturas de dados e objetos São necessários um somador que realize a soma dos números e um contador que conte o total de números: Variáveis de entrada X: real. Variáveis de saída MÉDIA: real. Variáveis intermédias N: inteira; SOMA: real. Consideremos como valor final de arquivo (FF) ou valor sentinela o número –99. Pseudocódigo algoritmo MÉDIA {cálculo da média aritmética de N números positivos lidos do teclado} {variáveis inteiras = N; variáveis reais = X, MÉDIA, SOMA} início {inicialização de variáveis} N ← 0 SOMA ← 0 {Leitura de dados} ler X enquanto X < > FF fazer {FF, fim de arquivo ou valor sentinela} N ← N + 1 SOMA ← SOMA + X ler X fim_enquanto MÉDIA ← SOMA/N escrever ‘o total de números é ’, N escrever ‘a média é = ’, MÉDIA fim
BASIC 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260
‘Programa MÉDIA ‘cálculo da medida aritmética de N números, lidos do teclado ‘ variáveis inteiras = N; variáveis reais = X, MÉDIA, SOMA DEFIN N DEFSNG X, MÉDIA, SOMA N = 0 SOMA = 0 INPUT X WHILE X < > - 99 N = N + 1 SOMA = SOMA + X INPUT X WEND MÉDIA = SOMA/N PRINT “o total de números é”, N PRINT “a média é = “, MÉDIA END
PASCAL program média (input, output); {cálculo da média aritmética de N números lidos do teclado} var X, SOMA, MÉDIA = real; N : integer;
Codificação de algoritmos em linguagens de programação: Pascal, Fortran e Modula-2mm19
begin N = 0; SOMA : = 0; read (X); while not eof do begin N : = N + 1; SOMA : = SOMA + X; read (x) end; MÉDIA : = SOMA/N; writeln (‘o total de números é’); writeln (‘a média é’); end.
Codificação em FORTRAN C 100 200
PROGRAM MÉDIA Cálculo da média aritmética de N números lidos do teclado INTEGER N REAL X, SOMA, MÉDIA N = 0 SOMA = 0 READ (5, * , END = 200) X N = N + 1 SOMA = SOMA + X GO TO 100 MÉDIA = SOMA/N PRINT *, ‘o total de números é’, N PRINT *, ‘a média é’, MÉDIA END
Codificação em MODULA-2 MODULE Média FROM RealInOut IMPORT ReadReal, Flag, WriteReal; FROM InOut IMPORT WriteInt, WriteString, Writeln; (*Cálculo da média aritmética de N números positivos lidos do teclado *) VAR X, SOMA, MÉDIA: REAL; n: INTEGER;
BEGIN n:= 0 SOMA:= 0 WriteString (‘Ler uma série de números’); Writeln; ReadReal (X); Writeln; WHILE Flag DO n:= M + 1 Soma:= Soma + X; ReadReal (X); Writeln END; Média:= Soma/FLOAT (n8); Writeln; WriteString (‘o total de número é’); WriteInt (n, 8); Writeln; WriteString (‘a média é = ’); WriteReal (média, 10); END Média.