Post on 30-Nov-2018
Programação de Computadores
Instituto de Computação UFFDepartamento de Ciência da Computação
Otton Teixeira da Silveira Filho
Conteúdo
● Alguns Conceitos sobre Linguagens
● Conceito de Algoritmo
● Pseudocódigo
● Tipos de Variáveis
● Operadores
● Estruturas de Controle
● Estruturas de Dados
● Subprogramação
Variáveis
Variáveis
São espaços reservados na memória do computador que será lido e escrito de uma forma pré-estabelecida
Variáveis
As linguagens de programação trabalham em geral com tipos de variáveis que ocupam valores múltiplos de bytes
1 B
2 B
4 B
8 B
16 B
Variáveis
Os tipos de variáveis mais comuns nas linguagens de programação são usadas para representar
Caracteres, “inteiros” curtos - 1 B
Números “inteiros” - 2 B
Números “inteiros” longos e de ponto flutuante - 4 B
Números de ponto flutuante - 8 B
Números de ponto flutuante - 16 B
Variáveis
Caracteres - 1 B
Variáveis
Números “inteiros” - 2 B e “inteiros“ longos - 4 B
Variáveis
Números de ponto flutuante - 4 B e 8 B
FORTRAN
Vamos agora centrar foco na linguagem a ser usada neste curso, ou seja, o FORTRAN nome este originário de
FOR(mula) TRAN(slation)
FORTRAN
Adotaremos a convenção que todo e qualquer comando FORTRAN será escrito em minúsculas enquanto as variáveis do usuário (ou seja, você) serão escritas em minúsculas.
FORTRAN
Adotaremos a convenção que todo e qualquer comando FORTRAN será escrito em minúsculas enquanto as variáveis do usuário (ou seja, você) serão escritas em minúsculas.
Isto facilita a leitura do código o que, por sua vez, ajuda a corrigir possíveis erros de digitação.
Variáveis
Em FORTRAN as variáveis que usaremos são do tipo
LOGICAL - 1 B
CHARACTER - 1 B
INTEGER - 2 B
INTEGER*4 - 4 B
REAL ou REAL*4 - 4 B
REAL*8 - 8 B
Variáveis
Em FORTRAN as variáveis que usaremos são do tipo
LOGICAL – Representa dois estados: .TRUE. e .FALSE.
CHARACTER – Podemos representar os caracteres convencionados na tabela ASCII, embora haja alternativa
INTEGER – Representamos um subconjunto dos inteiros com sinal [-32 768, 32767]
INTEGER*4 – Representamos um subconjunto dos inteiros com sinal [- 2 147 483 648, 2 147 483 647]
REAL ou REAL*4 – Representamos um subconjunto dos reais com aproximadamente 7 algarismos significativos [10-38, 1038]
DOUBLE PRECISION ou REAL*8 - Representamos um subconjunto dos reais com aproximadamente 16 algarismos significativos [ 10-308, 10308]
Variáveis
● Em FORTRAN especificaremos as variáveis usando os caracteres do alfabeto A-Z mais os caracteres dos algarismos 0-9
● Uma variável não poderá começar por um numeral
● FORTRAN não distingue letras maiúsculas de minúsculas
● O nome da variável será reconhecível até 6 caracteres
● Convencionalmente variáveis que começam pelas letras i, j, k, l, m e n são do tipo inteiro mas isto pode ser alterado
Variáveis
● Exemplos válidos
a
Ab
dados
xpto2
Variáveis
● Exemplos não válidos
_a
:w
+dados
2xpto
a e A serão considerados idênticos
Variáveis
Semana
SEMANA
semana
semanas
serão considerados idênticos nas versões padrão de FORTRAN
Variáveis
A distinção entre um número de tipo INTEGER e um número de tipo REAL é feita pelo uso de um ponto decimal nestes últimos
Assim uma atribuição de um INTEGER se dá como
a = 123
e um no caso de REAL
a = 123.
● Como os computadores foram primeiramente desenvolvidos na Inglaterra e nos Estados Unidos da América, nas linguagens de computação se usa o ponto como separador decimal e não vírgula como no Brasil, Portugal, Alemanha, França, Rússia e outros países.
Operadores
Operador de atribuição
Atribuição não é igualdade
Caracter Operação Exemplo
= a ←b a=b
Operadores
Operadores aritméticos
Caracteres Tipos operados Operação Exemplo
+ INTEGER e REAL Soma, operador unário a+b; +b
- INTEGER e REAL Subtração, operador unário a-b; -b
/ INTEGER e REAL divisão a/b
* INTEGER e REAL multiplicação a * b
** INTEGER e REAL potenciação a ** b
Operadores
Operadores aritméticos
Se a e b INTEGER e a = 3 e b = 5
a+b resulta em 8
a-b resulta em -2
a/b resulta em 0
b/a resulta em 1
b ** a resulta em 125
Operadores
Operadores aritméticos
Se a e b REAL e a = 3.0 e b = 5.0
a+b resulta em 8.0
a-b resulta em -2.0
a/b resulta em 0.6
b/a resulta em 1.6666666
b ** a resulta em 125.0
Operadores
E se a e b forem de tipos diferentes?
Operadores
E se a e b forem de tipos diferentes?
● Tome cuidado com estas operações
● Tome como referência a tabela de “fraqueza“
Operadores
Subconjunto da tabela de fraqueza
● Na operação de tipos mistos o valor mais “fraco“ é convertido ao tipo mais “forte“
● Não é toda linguagem que faz este tipo de conversão
Tipo Fraqueza relativa
INTEGER 1
INTEGER*4 2
REAL 3
REAL*8 4
Operadores
Operadores lógicos
Caracteres Operação Exemplo
.NOT. não .NOT.b
.AND. e a.AND.b
.OR. ou a.OR.b
Operadores
Tabela verdade para o operador lógico NÃO
NÃO Operando Resultado
V F
F V
Operadores
Tabela verdade para o operador lógico E
E Operando 1 Operando 2 Resultado
F F F
F V F
V F F
V V V
Operadores
Tabela verdade para o operador lógico OU
OU Operando 1 Operando 2 Resultado
F F F
F V V
V F V
V V V
Operadores
Operadores relacionais
O resultado da comparação será verdadeiro ou falso
Caracteres Operação Exemplo
.EQ. Igual a a.EQ.b
.NE. Não igual a.NE.b
.LT. Menor que a.LT.b
.LE. Menor ou igual a a.LE.b
.GT. Maior que a.GT.b
.GE. Maior ou igual a a.GE.b
Operadores
Os operadores tem prioridades
Operador Prioridade
** 1
* e / 2
+ e - 3
.EQ. 4
.NE. 4.LT. 4
.LE. 4
.GT. 4
.GE. 4
.NOT. 5
.AND. 6
.OR. 7
Operadores
Os operadores tem prioridades
As prioridades podem ser alteradas
pelo uso de parênteses
Operador Prioridade
** 1
* e / 2
+ e - 3
.EQ. 4
.NE. 4.LT. 4
.LE. 4
.GT. 4
.GE. 4
.NOT. 5
.AND. 6
.OR. 7
Alguns “comandos“ úteis
● Comando de Leitura
READ (*, *) variável1, variável2, …
Lê as variáveis apresentadas no dispositivo padrão de entrada, em geral o teclado
● Comando de escrita
WRITE( *,*) variável1, variável2, ...
Escreve as variáveis apresentadas no dispositivo padrão de saída, em geral a tela
Alguns “comandos“ úteis
● Comando de escrita
WRITE( *,*) ‘um texto’
Escreve literalmente o que for encontrado entre aspas simples
Estrutura de um programa em FORTRAN
Um programa em FORTRAN tem uma estrutura para a linha
Estrutura de um programa em FORTRAN
Um programa em FORTRAN tem uma estrutura para a linha
● As primeiras cinco colunas são reservadas para índices de referência para laços de repetição e formatos de impressão e indicação de comentários (C, * ou ! Na primeira coluna)
● A coluna seis é para indicar que é uma continuação da linha anterior
● Nas colunas de 7 até 72 se escrevem os comandos
● As colunas de 73 até 80 são reservadas para numeração do cartão
Estrutura de um programa em FORTRAN
Um cartão correspondia a uma linha do programa
Estrutura de um programa em FORTRAN
Estrutura geral
PROGRAM nome
declaração 1
declaração 2
…
comando 1
comando 2
STOP
END
Um exemplo de programa
Margareth Hamilton com uma
listagem do programa que ela
elaborou para o Projeto Apollo
Um exemplo de programa
E aqui ela testando um programa no interior de uma cápsula Apollo
Um exemplo simples
Some dois números do tipo INTEGER, atribua esta soma a outra variável e imprima este resultado
Um exemplo simples
Some dois números do tipo INTEGER, atribua esta soma a outra variável e imprima este resultado
PROGRAM soma INTEGER a, b, c a = 3 b = 5 c = a+b WRITE (*,*) c STOP END
Uma nota
Transgrediremos o padrão FORTRAN 77 em relação a alguns comandos
No entanto, tais transgressões são comuns à maioria dos compiladores FORTRAN 77, em particular o Force (que é o recomendado aqui no curso) que foi baseado no G77 do Projeto GNU
No ambiente Linux há o gfortran, descendente do G77 mas que também compila códigos em FORTRAN 95
Testes em FORTRAN
Apresentemos uma estrutura condicional do FORTRAN que pode ser usado de várias formas
i) IF (condição lógica) comando comando
Exemplo: … IF (x .LT. y) x = x + 1 asq = sin(x) ...
Testes em FORTRAN
Apresentemos uma estrutura condicional do FORTRAN que pode ser usado de várias formas
ii) IF (condição lógica) THEN comando(s) ENDIF
Exemplo: … IF (x .GT. y) THEN asq = sin(x) isq = cos(y) ENDIF sisc = x ...
Testes em FORTRAN
Apresentemos uma estrutura condicional do FORTRAN que pode ser usado de várias formas
iii) IF (condição lógica) THEN comando(s) ELSE comando(s) ENDIF
Exemplo: … IF (x .GT. y) THEN asq = sin(x) isq = cos(y) ELSE sisc = x ENDIF …
Mais um exemplo simples
Leia duas variáveis do tipo INTEGER a e b. Se a for maior que b, some as duas variáveis, caso não subtraia b de a.Imprima o resultado seja qual for a operação feita
PROGRAM teste1 INTEGER a, b, c READ (*,*) a, b IF (a.GT.b) c = a + b c = a-b WRITE (*,*) c STOP END
E mais um exemplo...
Leia duas variáveis do tipo INTEGER a e b. Imprima primeiro o menor valor.
PROGRAM teste2 INTEGER a, b READ(*,*) a, b IF (a.GT.b) THEN WRITE (*,*) b ELSE WRITE (*,*) a ENDIF STOP END
E mais um exemplo...
Leia duas variáveis do tipo INTEGER a e b. Se uma delas for negativa ache o módulo deste valor e multiplique pelo outro valor. Se não, calcule a soma. Imprima o resultado.
PROGRAM teste3 INTEGER a, b READ(*,*) a, b IF (a.LT.0) THEN a = -a WRITE (*,*) a * b ELSE IF (b.LT.0) THEN b = -b WRITE (*,*) a * b ELSE WRITE(*,*) a + b ENDIF ENDIF STOP END
E mais um exemplo...
Leia duas variáveis do tipo INTEGER a e b. Se ambas forem negativas imprima o produto das variáveis, caso não imprima a soma das mesmas.
PROGRAM teste3 INTEGER a, b READ(*,*) a, b IF (a.LT.0) THEN IF (b.LT.0) THEN WRITE (*,*) a * b ENDIF ELSE WRITE(*,*) a + b ENDIF STOP END
E mais um exemplo...
Leia duas variáveis do tipo INTEGER a e b. Se ambas forem negativas imprima o produto das variáveis, caso não imprima a soma das mesmas.
PROGRAM teste3 INTEGER a, b READ(*,*) a, b IF (a.LT.0) THEN IF (b.LT.0) THEN WRITE (*,*) a * b ENDIF ELSE WRITE(*,*) a + b ENDIF STOP END
Mas é isto que queremos?
E mais um exemplo...
Leia duas variáveis do tipo INTEGER a e b. Se ambas forem negativas imprima o produto das variáveis, caso não imprima a soma das mesmas.
PROGRAM teste3a INTEGER a, b READ(*,*) a, b IF (a.LT.0.AND.b.LT.0) THEN WRITE (*,*) a * b ELSE WRITE(*,*) a + b ENDIF STOP END
E mais um exemplo...
Observe que o uso do Chinês em sala de aula facilitou perceber os erros de lógica que surgiram neste exemplo