Neste capítulo aprenderemos a ler informações numéricas, fazer cálculo com os números lidos e imprimir os resultados obtidos. Aprenderemos também como tornar nosso programa claro de forma que outra pessoa possa entendê-lo, escolhendo convenientemente, as “palavras” com as quais iremos trabalhar, bem como “comentários” que iremos fazer ao longo do programa.
O conceito principal a ser aprendido neste capítulo é idéia de variável. Variável é uma posição de memória na qual iremos armazenar (guardar) os valores lidos ou atribuídos. Essa variável deverá ser identificada através de um nome. O nome ou identificador de variável é uma palavra com tamanho de até 31 caracteres entre letras e números, sendo que, o primeiro caractere da palavra deve ser obrigatoriamente uma letra.
As variáveis mais comuns podem ser de quatro tipos, a depender da espécie de dados que elas devem guardar.
Por exemplo:
· 50 é um valor do tipo inteiro, portanto deve ser armazenada numa variável do tipo inteiro (INTEGER);
· 27.5 é um valor do tipo real, portanto deve ser armazenada numa variável do tipo real (REAL);
· “UFCG” ou 4HUFCG é valor formado por um conjunto de caracteres literais, portanto deve ser armazenada numa variável de caracteres (CHARACTER).
· .TRUE. é um valor do tipo lógico, portanto deve ser armazenada numa variável lógica (LOGICAL).
Quando em um programa é estabelecido que uma variável é de um determinado tipo, por exemplo, do tipo real, então ela será sempre do tipo real, embora o valor numérico do seu conteúdo possa variar durante o programa.
São através de declarações feitas no inicio do nosso programa que o computador sabe o tipo de variável com a qual vamos trabalhar.
Por exemplo, para dizer que a variável BASE é do tipo real, escrevemos:
REAL :: BASE
Para declarar ALTURA como uma variável inteira, escrevemos:
INTEGER :: ALTURA
Para declarar NOME como uma variável cadeia de caracteres, escrevemos:
CHARACTER(LEN = 30) :: NOME
Para declarar RESPOSTA como uma variável do tipo lógica, escrevemos:
LOGICAL :: RESPOSTA
Quando temos mais de uma variável inteira ou real a declarar, escrevemos todas elas separando uma da outra através de vírgulas, ou seja:
REAL :: BASE, AREA, PI
INTEGER :: ALTURA, RAIO
CHARACTER(LEN = 30) :: NOME, ENDERECO, CURSO
LOGICAL :: RESPOSTA, RESULTADO
Vamos aprender agora dois tipos de comandos FORTRAN que executarão tarefas específicas quando o programa for operado.Estes são “comandos executáveis” assim como o comando PRINT, visto no capítulo anterior. Eles são o comando de atribuição e o comando de leitura a partir do teclado.
ATRIBUIÇÃO - Formato:
<identificador de variável> = <expressão>
<identificador de variável> - o nome definido para a variável na sua declaração.
<expressão> - é uma expressão que pode conter constantes, variáveis ou expressões aritméticas.
No capítulo anterior aprendemos a escrever expressões aritméticas do tipo:
5 + 3 / 2. * 27
(9 + 2.7) * 3
Agora aprenderemos também expressões como:
2 * PI * RAIO
PI * RAIO ** 2
ou seja, expressões que envolvem constantes e variáveis.
Exemplo: Calcular a área de um triângulo de base e altura quaisquer.
BASE = 4; ALTURA = 8
ÁREA = BASE * ALTURA / 2
Nós também podemos atribuir diretamente valores à variáveis e depois operarmos com elas.
Exemplo: Calcular a área de um círculo cujo raio é igual a
REAL :: RAIO, PI ,AREA
RAIO = 2.0
PI = 355/113.
AREA = PI * RAIO ** 2
A atribuição direta foi feita às variáveis PI e RAIO enquanto que a variável AREA tem seu valor atribuído através da através da expressão PI * RAIO ** 2.
Veremos agora um exemplo de programa ilustrando os valores que algumas variáveis assumem durante a execução de cada comando deste programa:
|
|
VALOR
DAS VARIÁVEIS NA MEMÓRIA |
||
LINHA
|
PROGRAMA |
X |
Y |
Z |
1 |
PROGRAM
EXEMPLO |
|
|
|
2 |
IMPLICIT NONE |
|
|
|
3 |
INTEGER :: X, Y, Z |
- |
- |
- |
4 |
X = 5 |
5 |
- |
- |
5 |
Y = 7 |
5 |
7 |
- |
6 |
Z = X + Y |
5 |
7 |
12 |
7 |
X = X + 5 |
10 |
7 |
12 |
8 |
X = Z |
12 |
7 |
12 |
9 |
Y = Z |
12 |
12 |
12 |
10 |
X = X + Y + Z |
36 |
12 |
12 |
11 |
Y = Y * Z |
36 |
144 |
12 |
12 |
Z = (X + Y) / 12 |
36 |
144 |
15 |
13 |
X = X / 5. |
7 |
144 |
15 |
14 |
WRITE (*, *) X, Y, Z |
7 |
144 |
15 |
15 |
STOP |
|
|
|
16 |
END
PROGRAM EXEMPLO |
|
|
|
Notamos aqui que o conteúdo de cada variável foi se modificando a medida que os comandos iam sendo executados, o que nos leva a deduzir que nem sempre o conteúdo inicial de uma variável é igual ao conteúdo final da mesma.
Nós não aprendemos a ler dados através do teclado na mesma ocasião em que aprendemos o comando de impressão porque, para a leitura era essencial que nós já tivéssemos em mente o conceito de variável, pois em Fortran nós lemos dados e os armazenamos em variáveis.
Formato:
READ (<unidade>, <formato>) <lista de variáveis>
READ (*, *) <lista de variáveis>
Se quisermos ler 3 valores numéricos deveremos ter um comando de leitura do tipo:
READ (*, *) X, Y, Z
Se os valores a serem informados para cada variável são respectivamente: -2, 5 e 3, deverá se digitada uma linha contendo os três valores numéricos separados por espaços em branco, tal como:
-2 5 30
Desta maneira, no comando READ, o primeiro número seria o conteúdo da variável X, segundo número seria o conteúdo da variável Y e, finalmente, o terceiro número seria o conteúdo da Z, ou seja:
X = -2
Y = 5
Z = 30
Exemplo: Calcular a média de um aluno em uma determinada disciplina, sabendo que ele realizou durante curso 3 provas.
PROGRAM
MEDIA3
REAL :: NOTA1, NOTA2, NOTA3, MEDIA
WRITE (*, *) "Este programa calcula a
média aritmética de &
&3 notas de um aluno"
WRITE (*, *) "Informe as 3 notas do
aluno, separadas &
&por brancos: "
READ (*, *) NOTA1,
NOTA2, NOTA3
MEDIA = (NOTA1 + NOTA2 + NOTA3) / 3.
WRITE (*, *) "NOTAS DO ALUNO NA
DISCIPLINA: ", NOTA1, ", ", &
& NOTA2, " e ", NOTA3
WRITE (*, *) "MÉDIA NA DISCIPLINA = ",
MEDIA
STOP
END PROGRAM MEDIA3
Se os valores informados para NOTA1, NOTA2 E NOTA3 forem respectivamente 8.0, 9.5 e 6.5, o programa acima produzirá a seguinte tela de saída:
Este
programa calcula a média aritmética de 3 notas de um aluno
Informe
as 3 notas do aluno, separadas por brancos:
8.0
9.5 6.5
NOTAS
DO ALUNO NA DISCIPLINA: 8.00000 ,
9.50000 e 6.50000
MEDIA
NA DISCILPINA = 8.00000
Um dos fatores mais importantes num programa é a clareza com a qual é escrito. A necessidade de clareza se evidencia quando outra pessoa, que não o programador, se dispõe a ler esse programa. Esta pessoa será capaz de compreendê-lo melhor se o programa utilizar identificadores de variáveis com nomes relacionados com as operações que estão sendo realizadas. Por exemplo:
AREA = PI * RAIO ** 2
Para aumentar a clareza na leitura, o programador deve utilizar, convenientemente, comentários para explicar os comandos escritos cuja funcionalidade não é evidente ou para explicar detalhes do algoritmo utilizado.
Um comentário pode vir em qualquer local do programa e tem a seguinte forma:
!<comentário>
O caractere “!” pode aparece em qualquer posição em uma linha de programa Fortran 90. Isto transforma qualquer seqüência de caractere que o siga, até o final desta linha, um comentário. Exemplo:
! Isto é um comentário
REAL :: X, Y, Z ! variáveis reais
AREA = PI * RAIO ** 2 ! cálculo da área do círculo
Podemos colocar tantos comentários quantos forem precisos. Não se deve comentar o obvio – comentários em excesso pode comprometer a clareza.
Exemplo: Calcular a área da base e o volume de uma caixa com as seguintes dimensões:
-
comprimento:
-
largura:
-
altura:
!
! ESTE PROGRAMA CALCULA A
ÁREA DA BASE E O VOLUME DE UMA CAIXA
! DE DIMENSÕES QUAISQUER
!
PROGRAM
CAIXA
IMPLICIT NONE
! DEFINIÇÃO DAS VARIÁVEIS
REAL :: LARGURA, COMPRIMENTO, ALTURA ,
AREA_BASE, VOLUME
! LEITURA DAS DIMENSÕES DA BASE DA CAIXA
WRITE (*, *) "INFORME AS DIMENSÕES DA
BASE DA CAIXA &
&(LARGURA E COMPRIMENTO): "
READ (*, *) LARGURA, COMPRIMENTO
! CÁLCULO DA ÁREA DA BASE
AREA_BASE = LARGURA * COMPRIMENTO
! LEITURA DA ALTURA DA CAIXA
WRITE (*, *) "INFORME A ALTURA DA
CAIXA: "
READ (*, *) ALTURA
! CÁLCULO DO VOLUME DA CAIXA
VOLUME = AREA_BASE * ALTURA
! IMPRESSÃO DOS RESULTADOS
WRITE (*, *) "DIMENSÕES DA CAIXA:
"
WRITE (*, *) " - LARGURA: ", LARGURA
WRITE (*, *) " - COMPRIMENTO: ", COMPRIMENTO
WRITE (*, *) " - ALTURA: ", ALTURA
WRITE (*, *) "AREA DA BASE DA CAIXA: ",
AREA_BASE
WRITE (*, *) "VOLUME DA CAIXA: ",
VOLUME
STOP
END PROGRAM CAIXA
É muito fácil cometer erros durante a programação. Por isso, quando estive elaborando um programa, devemos ter o cuidado de evitar tais erros, principalmente aqueles que aparecem com mais freqüência quando nós estamos iniciando a programa.
1) Ler o programa codificado com atenção e verificar se:
a) esqueceu a diretiva PROGRAM;
b) esqueceu a diretiva IMPLICIT NONE;
c) esqueceu de colocar vírgula após um PRINT *;
d) colocou vírgula após um REAL ou um INTEGER;
e) esqueceu de abrir ou fechar parênteses;
f) esqueceu o comando STOP;
g) esqueceu a especificação END PROGRAM seguida do nome do programa;
h) usou o mesmo identificador (nome) para o programa e outra entidade tal como uma variável;
i) esqueceu as aspas ou o apóstrofo, principalmente o último.
Exemplo:
WRITE (*, *) "VOLUME =, VOLUME ! errado
WRITE (*, *) "VOLUME = ", VOLUME ! correto
j) variável não foi inicializada - quando utilizamos uma variável que não recebeu um valor através do comando READ ou de um comando de atribuição;
k) variável não foi declarada - quando utilizamos o identificador de uma variável que não foi declarada no inicio do programa através de um REAL, INTEGER, LOGICAL, CHARACTER ou outro tipo válido do Fortran;
2) Ao digitar, verificar se:
a) os comentários iniciam com “!”;
b) se não confundiu:
i) a letra I com número l;
ii) a letra O com número 0;
iii) a letra l com número 1.
Refazer os programas da aula passada, com as seguintes modificações:
· Para todos números agora são genéricos, com variáveis declaradas e os valores são requisitados por uma instrução READ.
· Todos números que serão mostrados (por um WRITE ou PRINT) deverão ter seus formatos especificados.
1) Fazer um programa Fortran que leia a massa e a velocidade de uma partícula, calcule sua energia cinética e imprima o resultado.
2) Fazer um programa Fortran que leia os comprimentos dos catetos de um triângulo retângulo, calcule sua hipotenusa e imprima o resultado.
3) Fazer um programa que calcule e imprima os valores das funções abaixo, para um valor de x lido.
y = x2 – 5x + 6
z = 2x – 4
4) Fazer um programa que leia um determinado valor de ângulo (em graus), transforme-o em radianos e imprima estes dois valores.
5) Fazer um programa que receba um tempo decorrido em segundos e transforme-os em um tempo decorrido em horas minutos e segundos (HH:MM:SS).
6) Faça um programa Fortran que leia um valor inteiro de até cinco dígitos e o separe em seus dígitos componentes (dezena de milhar, unidade de milhar, centena, dezena e unidade).
7) Faça um programa Fortran que leia um valor inteiro de quatro dígitos, representando um número binário (composto de 0’s e 1’s) e mostre o valor decimal correspondente a esse binário.
8) Faça um programa Fortran que a partir da altura de uma pessoa, calcule o seu peso ideal, para os casos da pessoa ser homem ou mulher.
Peso ideal para homem = 72.7 x altura – 58
Peso ideal para mulher = 62.1 x altura – 44.7
9) Faça um programa Fortran que leia os coeficientes (a, b e c) de uma equação do segundo grau e calcule as suas raízes x1 e x2. Só serão digitados coeficientes que levem à raízes reais.
10) Faça um programa Fortran que leia a média dos mini-testes, a média das listas de exercícios, a média das provas e a nota da prova final de um aluno e calcule pelo nosso método de avaliação (ver na página WEB): quanto é a média parcial, quanto era a nota mínima para a final e quanto foi sua média final.