apostila fortran
TRANSCRIPT
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
CONTEDO
PARTE I: Construo de Algoritmos Estruturados
1) Conceito de Algoritmos
2) Pseudo-Linguagem
2.1. Declarao de variveis Tipos bsicos
2.2. Comandos Bsicos
2.2.1. Entrada/Sada de Dados
2.2.2. Comando de Atribuio
2.2.3. Operadores Aritmticos, Lgicos e Relacionais
2.3. Estruturas Bsicas de Controle
2.3.1. Seqncia
2.3.2. Seleo
2.3.3. Repetio
2.4. Estruturas de Dados
2.4.1. Vetores
2.4.2. Matrizes
2.5. Subprogramao
2.5.1. Blocos
2.5.2. Escopo das variveis
2.5.3. Procedimentos
2.5.4. Funes
PARTE II: Programao Fortran Estruturada
1. Apresentao da Linguagem Fortran 2. Mapeamento de Algoritmos para
Fortran 3. Programao de Aplicaes
-
METODOLOGIA
Os tpicos abordados sero estudados atravs da realizao de exerccios. Nas aulas sero apresentados os tpicos, com exemplos, e a seguir os alunos realizaro exerccios, corrigidos durante a aula.
Ser praticado, com freqncia, o trabalho em dupla para a construo de algoritmos ou
programas. Um dos alunos ficar responsvel por criar o algoritmo ou programa solicitado e o outro dever realizar revises e testes.
Ao fim da aula sero apresentados alguns exerccios que devem ser resolvidos pelos alunos antes da aula seguinte.
MONITORIA
A sala de monitoria, localizada no terceiro andar do Bloco E, tem a relao de horrios disponveis para atendimento.
FORTRAN
GNU Fortran Compiler (GFortran) Software Livre (http://gcc.gnu.org/fortran/)
IDE (Integrated Development Environment ) - Force 3.0 Fortran ( http://force.lepsch.com/) - Software livre para FORTRAN 77/90
BIBLIOGRAFIA
Guimares e Lages, Algoritmos e Estruturas de Dados, Ed. LTC Harry Farrer e outros, Fortran Estruturado, Ed. Koogan Michael Metcalf, John K. Reid, Fortran 90/95, Oxford University Press.
AVALIAO
Aprovado: Presena (>=75%) e ( Prova 1 + Prova 2) /2 > = 6.0
Em VS: Presena (>=75%) e (P1 + P2) /2 > = 4.0
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO DA 1 AULA
INTRODUO
I. Algoritmo e programa
II. Programao estruturada
III. Fortran e o Force
IV. Passos para a elaborao de um programa
V. Comentrios, nome do programa, stop, end e print.
VI. Exerccios
-
I. ALGORITMO E PROGRAMA
Um programa-exemplo em Fortran
Objetivo: Escrever uma tabela de multiplicao de 6, de 6 x 1 a 6 x 30.
Programa em Fortran:
C Escreve uma tabela de multiplicao por 6, de 6 x 1 a 6 x 30.
program tabelaDeMultiplicacaoPor6
integer multiplicando, resultado
C Gerar o primeiro multiplicando
multiplicando = 1 C Gerar a tabela
print *, 'Tabela de Multiplicao por 6 - de 6x1 a 6x30'
do while (multiplicando .le. 30) C Calcular e imprimir
resultado = 6 * multiplicando
print *, '6 x ', multiplicando, ' = ', resultado C Gerar o prximo multiplicando
multiplicando = multiplicando + 1
end do
print *, 'Tecle ENTER para sair... ' read *
stop end
-
Um programa deve ser executado pelo computador.
Resultado obtido quando o programa executado pelo computador:
-
O algoritmo
Para que o programa-exemplo fosse elaborado houve a necessidade de se
refletir sobre o problema a ser resolvido. Neste caso algum desejava que
fosse elaborado um programa para imprimir na tela uma tabela de
multiplicao de 6, de 6 x 1 a 6 x 30.
Depois foi necessrio que algum pensasse numa sequncia de operaes
que, ao ser executada, produzisse o resultado desejado. Esta sequncia de
operaes o algoritmo.
Algoritmos podem ser escritos numa linguagem mais simples do que a
linguagem de programao. Estas linguagens costumam ser chamadas de
pseudo-linguagens.
O programa-exemplo poderia ser escrito da seguinte forma numa
pseudolinguagem:
Gerar o primeiro multiplicando (o nmero 1) Enquanto o multiplicando corrente for menor ou igual a 30 repetir
Calcular o resultado da multiplicao de 6 pelo multiplicando corrente Escrever o resultado calculado Gerar o prximo multiplicando. Fim do enquanto
H outras pseudolinguagens. Veremos nas prximas aulas...
-
Algoritmo e Programa
Algoritmos representados em pseudolinguagens no podem ser executados
por computadores. Devem ser representados em linguagens de programao.
Um algoritmo representado em linguagem de programao denominado
PROGRAMA.
comum que os algoritmos sejam elaborados destas duas maneiras: atravs
de pseudolinguagem e atravs de uma linguagem entendida pelos
computadores.
- A pseudolinguagem uma linguagem prxima da linguagem natural utilizada
pela pessoa responsvel pelo desenvolvimento do algoritmo. No nosso caso a
linguagem natural o portugus. A pseudolinguagem um subconjunto da
linguagem natural. mais fcil elaborar e verificar algoritmos escritos em
pseudolinguagem.
- Os computadores s so capazes de executar sequncias de operaes
com muitos detalhes. Estes detalhes podem atrapalhar o processo de
elaborao e verificao realizado pelas pessoas envolvidas com o
desenvolvimento do algoritmo.
Algoritmos escritos numa linguagem de programao so executados pelo
computador. Se o algoritmo estiver errado no far o que desejado.
Assim, muito importante que o algoritmo seja elaborado com ateno.
-
Ento, de acordo com o que foi estudado at agora:
Para elaborar um programa podemos seguir os seguintes passos:
1. A definio com clareza do problema
2. A elaborao de um algoritmo descrito em uma
pseudolinguagem, que apresente uma soluo para o
problema.
3. A elaborao de um programa que corresponda a esta
soluo
-
II. PROGRAMAO ESTRUTURADA
Sequncia, seleo e repetio
Dijkstra e outros propuseram, em fins dos anos 60, que programas
utilizassem trs estruturas bsicas: sequncia, seleo e repetio. Cada uma delas tem uma estrutura lgica previsvel : a entrada pelo topo e
a sada pela parte inferior, permitindo ao leitor seguir o fluxo com
facilidade. Esta proposta teve como objetivo reduzir a complexidade do
programa, facilitar a leitura, e a realizao de testes e manuteno.
Esta idia surgiu em um momento em que era muito comum o uso em
programas do comando GO TO, que tem como objetivo desviar o controle
para um outro comando. O uso de GO TO dificulta muito o entendimento do
programa, a realizao de testes e a futura manuteno.
Modularizao
Um programa em Fortran pode ser composto por uma sequncia de unidades.
A primeira dessas unidades a que considerada principal e as demais
unidades so sub-rotinas ou funes.
No curso, vamos comear elaborando programas que tenham s o programa
principal, como o programa-exemplo que foi apresentado. Depois
passaremos a trabalhar com as demais unidades.
A qualidade de um programa tambm depende de como estas unidades so
projetadas. importante que seja realizada uma boa decomposio do
problema em mdulos. Veremos mais adiante este assunto com detalhes.
Esta apenas uma introduo: a Programao Estruturada ser estudada e
aplicada ao longo de todo o curso.
-
III. FORTRAN e o Force
Fortran:
- Foi a primeira linguagem considerada de alto nvel.
- Criada por J. Backus em 1954.
- Origem do nome: FORmula TRANslation System.
- At hoje indicada para aplicaes de processamento
numrico.
- Desde sua criao a linguagem FORTRAN vem sendo
aperfeioada.
IDE (Integrated Development Environment ) utilizado no
Curso:
-
Voltando ao programa-exemplo.
Como este programa poder realizar o que desejado?
necessrio:
1) Editar e Salvar o Programa escrito em Fortran
2) Compilar
3) Executar
Vamos ver na prtica ....
-
IV . PASSOS PARA O DESENVOLVIMENTO DE UM
PROGRAMA
Passos para a construo de um programa:
1. Definir com clareza o problema
2. Elaborar um algoritmo descrito em uma pseudolinguagem,
que apresente uma soluo para o problema.
3. Elaborar um programa que corresponda ao algoritmo
4. Digitar, compilar e executar
5. Realizar testes
E em todos estes passos devem ser realizadas revises antes
de se passar ao prximo passo.
Mais adiante veremos com mais detalhes como cada um desses
passos realizado.
-
V. COMENTRIOS, NOME DO PROGRAMA, STOP, END e
PRINT
Voltando ao programa- exemplo: Objetivo - Escrever uma tabela de multiplicao de 6, de 6 x 1 a 6 x 30. C Escreve uma tabela de multiplicao por 6, de 6 x 1 a 6 x 30. program tabelaDeMultiplicacaoPor6 integer multiplicando, resultado C Gerar o primeiro multiplicando multiplicando = 1 C Gerar a tabela print *, 'Tabela de Multiplicao por 6 - de 6x1 a 6x30' do while (multiplicando .le. 30) C Calcular e imprimir o valor da tabela resultado = 6 * multiplicando print *, '6 x ', multiplicando, ' = ', resultado C Gerar o prximo multiplicando multiplicando = multiplicando + 1 end do print *, 'Tecle ENTER para sair... ' read * stop end
Colunas 7 a 72 comandos ou comentrios
Nome do programa Os programas podem ter, no incio, o seu nome. O nome vir logo aps a palavra program
print *,lista_de_parmetros Print -Sempre inicia uma nova linha ao imprimir. Print * - utilizada a sada padro: a tela. parmetros - separados por vrgulas. Neste caso h um s parmetro, que uma sequncia de caracteres. As sequncias de caracteres devem estar entre apstrofos. (mais adiante veremos outros detalhes sobre impresso...)
stop Indica o fim da execuo do programa. Poderia estar em outro lugar, mas seguindo os princpios da programao estruturada, construiremos programas nos quais o stop ser sempre o ltimo comando. end Indica o fim do programa
Comentrios - No so interpretados pelo compilador - A letra c na primeira coluna indica que o que est escrito na linha um comentrio
-
VI. EXERCCIOS
Exerccio 1: Elabore um programa que escreva: Este o meu primeiro programa. Exerccio 2: Elabore um programa que desenhe a seguinte figura: ***************** * * * * *****************
Bibliografia:
- Guimares e Lages, Algoritmos e Estruturas de Dados, Ed. LTC
- Harry Farrer e outros, Fortran Estruturado (Fortran 77), Ed. Koogan
- Michael Metcalf, John K. Reid, Fortran 90/95, Oxford University
Press.
- Sergio de Carvalho, Introduo Cincia da Computao, Ed.Campus
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO DA 2 AULA
INTRODUO - CONTINUAO
I. Variveis
II. Expresses aritmticas e lgicas
III. Estrutura de repetio - do while
IV. Simulando a execuo de um programa
V. Exerccios
-
I. VARIVEIS
Uma varivel corresponde a uma posio de memria, cujo
contedo pode variar durante a execuo do programa.
Apesar de uma varivel poder assumir diferentes valores, ela s
pode armazenar um valor a cada momento.
Toda varivel identificada por um nome e deve ser indicado o
contedo a ser armazenado na varivel. Veja um trecho do
programa exemplo. As variveis multiplicando e resultado foram
declaradas como integer.
C Escreve uma tabela de multiplicao por 6, de 6 x 1 a 6 x 30.
program tabelaDeMultiplicacaoPor6 integer multiplicando, resultado
C Gerar o primeiro multiplicando
multiplicando = 1 ....
-
A atribuio de valor a uma varivel:
No programa exemplo podemos observar as seguintes
atribuies de valores s variveis multiplicando e resultado:
C Escreve uma tabela de multiplicao por 6, de 6 x 1 a 6 x 30.
program tabelaDeMultiplicacaoPor6 integer multiplicando, resultado
C Gerar o primeiro multiplicando
multiplicando = 1
C Gerar a tabela print *, 'Tabela de Multiplicao por 6 - de 6x1 a 6x30'
do while (multiplicando .le. 30)
C Calcular e imprimir
resultado = 6 * multiplicando print *, '6 x ', multiplicando, ' = ', resultado
C Gerar o prximo multiplicando multiplicando = multiplicando + 1
end do
Em Fortran comandos de atribuio tm a forma:
varivel = expresso
Na execuo avaliada em primeiro lugar a expresso direita
do sinal = e em seguida o valor da expresso atribudo
varivel.
Ao elaborar os algoritmos em pseudo-linguagem vamos passar a
usar a seguinte notao quando houver uma atribuio.
Nome da Varivel expresso
-
II. EXPRESSES ARITMTICAS E LGICAS
Expresses aritmticas
Expresso aritmtica aquela cujos operadores so aritmticos
e os operandos so constantes e/ou variveis numricas.
Exemplo:
6 * multiplicando
(O operador * corresponde operao de multiplicao.
6 uma constante numrica e multiplicando uma varivel do
tipo inteiro)
Expresses lgicas
No programa exemplo podemos observar a seguinte expresso
lgica multiplicando .le. 30
...
do while (multiplicando .le. 30)
...
uma comparao entre dois valores de mesmo tipo.
O operador .le. significa menor ou igual a. um operador
relacional que indica a comparao a ser realizada.
O resultado sempre verdadeiro ou falso.
Obs: Leia, no livro texto, detalhes sobre as expresses aritmticas e lgicas
-
III. ESTRUTURA DE REPETIO - DO WHILE
A estrutura de repetio permite que uma sequncia de
comandos seja executada repetidamente at que determinada
condio de interrupo seja satisfeita.
A repetio pode ser realizada atravs da operao do while.
do while(expresso lgica)
seqncia de passos
end do
A expresso lgica testada.
Se for verdadeira, a sequncia de comandos executada.
Aps, a expresso testada novamente.
A repetio continua enquanto a expresso for verdadeira.
Quando for falsa, a repetio termina.
No programa exemplo:
C Gerar a tabela
print *, 'Tabela de Multiplicao por 6 - de 6x1 a 6x30'
do while (multiplicando .le. 30)
C Calcular e imprimir
resultado = 6 * multiplicando print *, '6 x ', multiplicando, ' = ', resultado
C Gerar o prximo multiplicando multiplicando = multiplicando + 1
end do
-
IV. SIMULANDO A EXECUO DE UM PROGRAMA
Para entender como o programa executado, importante que
seja explicado o funcionamento do computador. Ser utilizado,
para facilitar o entendimento, um modelo simplificado de
computador.
O computador tem trs partes principais: a unidade de
processamento central, a memria e os dispositivos de entrada e
de sada de dados.
Dispositivos de entrada e sada de dados - Os dados so
obtidos de dispositivos de entrada, como o teclado, por exemplo,
ou calculados em operaes do programa. Os dados gerados
atravs da execuo do programas podem ser disponibilizados em
dispositivos de sada, como a tela.
Memria - responsvel pelo armazenamento de dados, os
valores.
Unidade de processamento central responsvel por
executar, em ordem, as operaes especificadas no programa.
A ordem imposta pelas seguintes estruturas de controle:
sequncia de passos, repetio de passos e seleo entre passos.
Na aula passada, algoritmo foi descrito como uma sequncia de
operaes que, ao ser executada, produz o resultado desejado.
Uma definio mais detalhada seria a seguinte:
-
Um algoritmo uma sequncia de passos, onde cada passo de
uma das seguintes trs naturezas:
- Uma operao elementar
- Uma operao de controle especificando a repetio de uma
sequncia de passos
- Uma operao de controle especificando uma seleo entre
sequncia de passos.
Uma operao elementar qualquer uma que no seja de
controle especificando repetio ou seleo. Ex: clculos onde
gerado um resultado, impresso de dados.
No algoritmo apresentado na aula passada podemos observar
operaes elementares e uma operao de controle especificando
a repetio de uma sequncia de passos. Identifique-as,
observando o algoritmo escrito numa pseudo-linguagem.
Gerar o primeiro multiplicando (o nmero 1) Enquanto o multiplicando corrente for menor ou igual a 30 repetir
Calcular o resultado da multiplicao de 6 pelo multiplicando corrente Escrever o resultado calculado Gerar o prximo multiplicando. Fim do enquanto
-
Antes que o programa seja executado, ele :
- lido de um dispositivo de entrada e traduzido para uma
linguagem interna. O programa nesta linguagem interna
colocado na memria.
- alocada na memria uma rea reservada aos nomes usados no
programa. Cada nome associado a determinados atributos
(quando foi criado, por exemplo) e ao seu valor corrente.
O processador central, em uma fase de preparao, acessa a
primeira instruo do programa, o primeiro dado de entrada e a
primeira linha do relatrio de sada.
Uma vez determinada a primeira operao do programa a ser
executada, ocorre o seguinte passo:
Enquanto existirem operaes a serem executadas, repetir:
Executar a operao selecionada
Selecionar a prxima operao
-
Exerccio Simular a execuo do programa-exemplo
C Escreve uma tabela de multiplicao por 6, de 6 x 1 a 6 x 30.
program tabelaDeMultiplicacaoPor6
integer multiplicando, resultado C Gerar o primeiro multiplicando
multiplicando = 1
C Gerar a tabela print *, 'Tabela de Multiplicao por 6 - de 6x1 a 6x30'
do while (multiplicando .le. 30)
C Calcular e imprimir
resultado = 6 * multiplicando print *, '6 x ', multiplicando, ' = ', resultado
C Gerar o prximo multiplicando
multiplicando = multiplicando + 1 end do
print *, 'Tecle ENTER para sair... '
read * stop
end
-
V. EXERCCIOS
1) Elabore um programa que escreva uma tabela de multiplicao de 6 pelos nmeros pares, de 2 a 20.
2) Elabore um programa que escreva a tabela de multiplicao de 6,
imprimindo o resultado de 6 x1 a 6xn. O valor de n dever ser solicitado ao usurio.
Bibliografia:
- Harry Farrer e outros, Fortran Estruturado (Fortran 77), Ed. Koogan
- Michael Metcalf, John K. Reid, Fortran 90/95, Oxford University
Press.
- Sergio de Carvalho, Introduo Cincia da Computao, Ed.Campus
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO DA 3 AULA
I. Entrada e sada de dados
II. Exerccios
-
I. ENTRADA E SADA DE DADOS
Entrada de dados:
read *, lista_de_identificadores
lista_de_identificadores so os nomes das variveis, separadas por vrgulas, nas
quais so armazenados os valores provenientes da entrada.
* indica que ser utilizado o teclado como meio de entrada de dados .
Exemplos
read *, n
read *, m, n
Quando vrios valores devem ser lidos: Os dados devem ser separados por espaos
ou devem estar em linhas separadas.
Sada de dados:
print *, lista_de_identificadores
lista_de_identificadores - so nomes das variveis (nas quais esto armazenados
os valores) ou sequncias de caracteres (constantes literais), separadas por
vrgulas. As sequncias de caracteres devem estar entre apstrofos.
Print - Sempre inicia uma nova linha ao imprimir.
* indica que ser utilizada a sada padro: a tela.
Outras informaes sobre entrada e sada de dados sero apresentadas mais
adiante, em outras aulas.
Exerccio:
Diga como ficar a impresso, considerando que o valor de multiplicando 2 e de
resultado 12:
print *, 'Tabela de Multiplicao por 6 - de 6x1 a 6x30'
print *, '6 x ', multiplicando, ' = ', resultado
-
II. EXERCCIOS
a) Faa um programa que calcule e escreva a soma dos nmeros inteiros de 1 a
100.
b) Faa um programa que calcule e escreva a soma dos nmeros inteiros de 1 a
n. O valor de n dever ser solicitado ao usurio.
c) Faa um programa que calcule e escreva a soma dos nmeros inteiros de m
a n. Os valores de m e n devero ser solicitados ao usurio.
A elaborao dos programas deve seguir o processo apresentado a seguir:
Passos para a construo de um programa:
1. Definir com clareza o problema
2. Elaborar um algoritmo descrito em uma pseudo-linguagem, que
apresente uma soluo para o problema.
3. Fazer um programa que corresponda soluo elaborada no passo 2.
4. Digitar, compilar e executar
5. Realizar testes
Em todos estes passos devem ser realizadas revises antes de se passar ao
prximo passo. Simule a execuo antes de passar ao passo 3.
Para resolver em casa:
a) Faa um programa que escreva os mltiplos de n, de n a m.
b) Faa um programa que calcule e escreva a soma dos mltiplos de n, de n a m.
c) Faa um programa que calcule e escreva o fatorial de n.
N! = 1 x 2 x 3 x ... x (N 1) x N
0! = 1
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO DA 4 AULA
I. Exerccios
II. Estrutura de repetio - do
-
I. EXERCCIOS
1. Faa um programa que calcule N ! (fatorial de N)
N ! = 1 x 2 x 3 x ... x (N 1) x N
0 ! = 1
A elaborao do programa deve seguir o processo apresentado a seguir:
Passos para a construo de um programa:
1. Definir com clareza o problema
2. Elaborar um algoritmo descrito em uma pseudo-linguagem, que
apresente uma soluo para o problema.
3. Fazer um programa que corresponda soluo elaborada no passo 2.
4. Digitar, compilar e executar
5. Realizar testes
Em todos estes passos devem ser realizadas revises antes de se passar ao
prximo passo. Simule a execuo antes de passar ao passo 3.
Algoritmo na pseudo-linguagem:
leia n
fat 1
num 2
enquanto (num
-
Programa em Fortran:
program fatorial
integer fat, n, num
print *, 'Escreva o nmero n para o c lculo de n!'
read *, n
fat = 1
num = 2
do while (num .le. n)
fat = fat * num
num = num + 1
end do
print *, 'Fatorial de ', n, '= ', fat
print *, 'Tecle ENTER para sair'
read *
stop
end
2. Faa um programa que leia vrios nmeros inteiros, calcule e escreva a soma
desses nmeros. Dever ser informada a quantidade de nmeros a serem
lidos.
-
program somaDeNInteiros
integer quantNum, cont, soma, num
print *, 'Diga a quantidade de nmeros'
read *, quantNum
soma = 0
cont = 1
do while (cont .le. quantNum)
print *, ' Escreva o numero'
read *, num
soma = soma + num
cont = cont + 1
end do
print *, ' Soma = ', soma
print *, 'Tecle ENTER para sair'
read *
stop
end
II. ESTRUTURA DE REPETIO DO
A estrutura de repetio permite que uma sequncia de comandos seja executada
repetidamente at que determinada condio de interrupo seja satisfeita.
A repetio pode ser realizada atravs das estruturas
do while e do
Do while j foi estudado. Lembrando:
do while(expresso lgica)
seqncia de passos
end do
-
Como funciona:
- A expresso lgica testada.
- Se for verdadeira, a sequncia de passos executada.
- Aps, a expresso testada novamente.
- A repetio continua enquanto a expresso for verdadeira. Quando for
falsa, a repetio termina e o prximo passo a ser executado o que vem
aps o end do.
Repetio com DO
do var = n1,n2,n3
seqncia de passos
end do
var - uma varivel inteira ou real
n1 uma constante ou varivel inteira ou real. Representa o valor inicial atribudo a
var.
n2 - uma constante ou varivel inteira ou real. Representa o limite de valores que
var pode assumir.
n3 uma constante ou varivel inteira ou real. Representa o incremento que var
ter aps cada execuo dos passos. Se n3 for igual a 1, pode ser omitido.
Como funciona:
- var recebe inicialmente o valor n1,
- a seqncia de passos executada,
- e o valor de var aumenta de n3 a cada vez que o comando volta para a linha
inicial do do.
- A repetio s para quando o valor de var ultrapassa n2.
Caso o programa exija uma contagem regressiva o valor de n3 deve ser negativo e
n1maior que n2.
n1, n2 e n3 podem ser constantes ou variveis inteiras ou reais, positivas ou
negativas.
-
Recomendao:
Sempre que o nmero de iteraes conhecido antes do incio da execuo da
repetio, deve ser utilizado o do e no o do while.
Utilizando o do, o programador no necessita controlar o nmero de iteraes
dentro do corpo da repetio.
Representao na pseudo-linguagem:
para var de n1 a n2, passo n3 faa
sequncia de passos
fim para
Exerccio:
Escreva o programa do exerccio anterior, apresentado a seguir, substituindo o
do while pelo do
program somaDeNInteiros
integer quantNum, cont, soma, num
print *, 'Diga a quantidade de nmeros'
read *, quantNum
soma = 0
cont = 1
do while (cont .le. quantNum)
print *, ' Escreva o numero'
read *, num
soma = soma + num
cont = cont + 1
end do
print *, ' Soma = ', soma
print *, 'Tecle ENTER para sair'
read *
stop
end
-
program somaDeNInteiros
integer quantNum, cont, soma, num
print *, 'Diga a quantidade de nmeros'
read *, quantNum
soma = 0
do cont = 1, quantNum
print *, ' Escreva o numero'
read *, num
soma = soma + num
end do
print *, ' Soma = ', soma
print *, 'Tecle ENTER para sair'
read *
stop
end
Para a prxima aula:
Estudar as expresses aritmticas.
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO DA 5 AULA
I. Tipo Real e Expresses Aritmticas
II. Exerccios
-
I. TIPO REAL e EXPRESSES ARITMTICAS
Pginas 1 at 7- Harry Farrer e outros, Fortran Estruturado.
II. EXERCCIOS
1) Faa um programa que leia vrias notas de um aluno, calcule e escreva a
mdia. Dever ser informada a quantidade de notas a serem lidas.
2) Faa um programa que calcule e escreva o valor de S
S= 1
1 +
3
2 +
5
3 +
7
4 + +
99
50
3) Faa um programa que calcule e escreva a seguinte soma:
2
50 +
22
49 +
23
48 + +
250
1
Para a prxima aula:
1) Faa um programa que determine e escreva o n-esimo termo da srie de
Fibonacci
Srie de Fibonacci - 0 1 1 2 3 5 ....
2) Faa um programa que calcule e escreva a soma dos n primeiros termos
da srie
100
0! +
99
1!+
98
2 !+
97
3!+
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO DA 6 AULA
I. Funes
II. Exerccios
-
I. FUNES
At o momento utilizamos nas expresses aritmticas as operaes bsicas
(adio, subtrao, multiplicao, diviso e potenciao).
Podem ser usadas tambm nas expresses aritmticas, funes comuns na
Matemtica que so disponibilizadas pelo compilador Fortran.
Consulte o livro para conhecer estas funes.
Nos exerccios a seguir utilizaremos a funo MOD
MOD (x, y) - resto da diviso de x por y
x e y so parmetros do tipo inteiro e o resultado inteiro.
Exemplo:
...
integer resto, num1, num2
num1 = 10
num2 = 3
resto = MOD (num1, num2)
...
O valor da varivel resto ao final da execuo da sequncia de comandos 1.
II. EXERCCIOS
1) Faa um programa que leia vrios pares de nmeros e escreva o resto da
diviso do primeiro pelo segundo. O programa dever perguntar ao usurio
o nmero de pares a serem lidos.
2) Faa um programa que calcule e escreva o MDC (mximo divisor comum) de dois nmeros inteiros. Utilize o algoritmo de Euclides.
O MDC de dois nmeros inteiros o maior nmero inteiro que divide ambos sem deixar resto.
3) Faa um programa que calcule e escreva o MDC de vrios pares de
nmeros. O programa dever perguntar ao usurio o nmero de pares a
serem lidos.
-
Lembrando:
A elaborao dos programas deve seguir o processo apresentado a seguir:
Passos para a construo de um programa:
1. Definir com clareza o problema
2. Elaborar um algoritmo descrito em uma pseudolinguagem, que apresente
uma soluo para o problema.
3. Fazer um programa que corresponda soluo elaborada no passo 2.
4. Digitar, compilar e executar
5. Realizar testes
Em todos estes passos devem ser realizadas revises antes de se passar ao
prximo passo. Simule a execuo antes de passar ao passo 3.
EXERCCIOS A SEREM RESOLVIDOS AT A PRXIMA AULA
1) Diga se as constantes numricas abaixo so constantes inteiras vlidas:
23
+ 8
-9
-9.
8.900.888
2) Diga se as constantes numricas abaixo so constantes reais vlidas:
0.234
.5
-6.
-4.E-8
9.56E9
14,8
9
3) Explique o motivo dos seguintes identificadores de variveis no serem
vlidos:
5b
S:9
4) Represente as seguintes expresses matemticas em Fortran
-
a) +
1 +
b) 2 4
5) Diga o resultado das seguintes divises e explique o motivo dos resultados
serem diferentes:
a) 12/5
b) 12./5
c) 12./5.
6) Considerando que a varivel s do tipo real e as variveis num e den
so do tipo inteiro, diga qual o valor que s ter aps a execuo da seguinte
sequncia de comandos:
s = 8
num = 12
den = 5
s = s + num / den
7) Qual o motivo da recomendao de se evitar a utilizao de expresses
aritmticas mistas?
8) O que uma expresso lgica ?
9) Diga a quantidade de repeties que so especificadas pelas seguintes
linhas de comando:
a) do i = 1, 5
b) do cont = 1, 16, 2
c) do ind = 15, 3, -5
d) do a = 0.0, 1.2, 0.1
10) Faa um programa que escreva as tabelas de multiplicao de 2 a 9 pelos
multiplicandos de 1 a 20.
11) Faa um programa que escreva todos os termos da srie de Fibonacci, at o
n-esimo. O programa dever solicitar o valor de n.
Srie de Fibonacci - 0 1 1 2 3 5 ....
12) Faa um programa que calcule e escreva o MDC de vrios pares de nmeros.
O programa dever perguntar ao usurio, antes de solicitar os pares, se ele
deseja continuar.
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO DA 7 AULA
I. Esclarecimento de dvidas de exerccios anteriores
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO DA 8 AULA
- Expresses lgicas
- Estrutura Condicional
- Exerccios
I. EXPRESSES LGICAS
1. Variveis e constantes lgicas so expresses lgicas
- Constante lgica um valor lgico que s pode ser verdadeiro ou falso. S h duas
constantes deste tipo, representadas pelas palavras true e false, precedidas e seguidas
por um ponto: .TRUE. e .FALSE.
- As variveis lgicas so declaradas como LOGICAL
Ex: LOGICAL existe
2. Expresses relacionais so expresses lgicas
Expresses relacionais so comparaes que quando avaliadas, produzem o resultado
.TRUE. ou .FALSE.
Uma expresso relacional uma comparao realizada entre dois valores de mesmo tipo
bsico.
Os operadores relacionais indicam a operao a ser realizada entre os termos da relao:
Operador Relacional
.GT. >
.GE.
.LT. <
.LE.
.EQ. =
.NE.
-
Exemplo de expresso relacional: num .GT. 8
(num uma varivel do tipo integer)
3. Sendo A e B expresses lgicas, ento
A .AND. B
A .OR. B
.NOT. A
tambm so expresses lgicas.
AND, OR e NOT so operadores lgicos.
A .AND. B O resultado verdadeiro se A for verdadeiro e B tambm for verdadeiro.
Nos demais casos o resultado falso.
A .OR. B O resultado falso se A for falso e B tambm for falso. Nos demais casos o
resultado verdadeiro.
.NOT. A Se A verdadeiro o resultado falso. E se B for falso o resultado
verdadeiro.
II. ESTRUTURA CONDICIONAL
utilizada para criar sequncias alternativas de aes.
II.1) Estrutura condicional simples
If ( expresso lgica ) then Sequncia de comandos End if
A expresso lgica avaliada produzindo o resultado verdadeiro ou falso. Se for
verdadeiro, a sequncia de comandos executada e logo aps executado o
comando que segue o end if. Se o resultado for falso, o comando que segue o
end if executado.
-
II.2) Estrutura condicional composta
If ( expresso lgica ) then Sequncia de comandos Else
Sequncia de comandos End if
A expresso lgica avaliada produzindo o resultado verdadeiro ou falso. Se for
verdadeiro, a primeira sequncia de comandos executada e logo aps executado
o comando que segue o end if. Se o resultado da expresso lgica for falso, a
sequncia de comandos aps o else executada e logo aps executado o comando
que segue o end if.
III. EXERCCIOS
1) Faa um programa que realize o que pedido a seguir:
- Leia 6 notas de um aluno
- Calcule a mdia e verifique se o aluno foi aprovado (mdia maior ou igual a 6), se
est em VS (mdia maior ou igual a 4 e menor que 6) ou ento se foi reprovado
(mdia menor que 4)
- Escreva a mdia do aluno e a sua situao
2) Faa um programa que leia 3 valores inteiros diferentes, determine e imprima o
menor deles.
3) Altere o programa apresentado na aula anterior, que calculava a mdia de um aluno
em uma disciplina a partir de vrias notas, que eram lidas at ser encontrado o
valor -1. Inclua o comando de seleo para tratar a situao em que no h dados (o
primeiro valor lido -1).
4) Faa outra verso do programa 1. Agora a quantidade de notas no conhecida e o
programa dever perguntar ao usurio, antes de solicitar cada nota, se deseja
informar uma nova nota.
5) Faa um programa que verifique se um nmero perfeito.
Um nmero perfeito aquele cuja soma de todos os seus divisores, excluindo ele
mesmo, igual ao prprio nmero.
Exemplo: 6 e 28 so perfeitos
6 = 1+ 2 + 3
28 = 1 + 2 + 4 + 7 + 14
6) Faa um programa que decomponha um nmero em seus fatores primos e indique
para cada fator primo, o nmero de ocorrncias.
-
Ex: 150
150 ! 2
75 ! 3
25 ! 5
5 ! 5
1 !
Resposta :
2 ocorre 1 vez
3 ocorre 1 vez
5 ocorre 2 vezes
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO DA 9 AULA
1) Dvidas dos exerccios anteriores
2) Recomendao: Utilizar sempre nos programas o comando implicit none. Quando este comando usado em um programa, o compilador acusa erro caso uma varivel citada no programa no tenha sido declarada explicitamente. Lembre que em Fortran o primeiro caracter do identificador de uma varivel define implicitamente o tipo dessa varivel, de acordo com a seguinte conveno:
- Os identificadores de variveis iniciados pelas letras I, J, K, L, M e N representam variveis inteiras
- Os identificadores de variveis iniciados por quaquer outra letra diferente destas mencionadas acima representam variveis reais. aconselhvel, no entanto, que as variveis sejam sempre declaradas explicitamente, indicando-se o nome do tipo e a lista de identificadores. Exemplo: integer cont real media
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO - 10 e 11 AULAS Laboratrio e Sala de Aula - Dvidas de Exerccios anteriores e novos exerccios
EXERCCIOS
1) Faa um programa que leia um nmero inteiro de 4 algarismos e verifique se ele tem
a mesma caracterstica do nmero 3025:
30 + 25 = 55
552 = 3025
2) Faa uma nova verso do programa anterior de modo que ele verifique quais os
nmeros de 4 algarismos que tm a mesma caracterstica do nmero 3025:
30 + 25 = 55
552 = 3025
3) Faa um programa que realize o que pedido a seguir:
- Leia 3 valores inteiros e maiores que zero.
- Verifique se estes valores podem ser os lados de um tringulo
- Caso possam formar um tringulo:
Verifique se os trs valores formam um tringulo equiltero (3 lados iguais),
issceles (2 lados iguais) ou escaleno (3 lados diferentes).
Escreva o tipo de tringulo.
4) Altere o programa anterior possibilitando a consulta at que o usurio diga que no
deseja mais continuar.
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
RESUMO - 12 AULA - CONSTANTES E VARIVEIS LITERAIS - EXERCCIOS
CONSTANTES E VARIVEIS LITERAIS
CONSTANTE LITERAL Uma constante literal qualquer sequncia de caracteres (letras, dgitos ou smbolos especiais). A sequncia de caracteres deve estar entre apstrofos. Uma sequncia de caracteres tambm chamada de string. Exemplos de sequncias de caracteres: amarelo 16/10/2010 VARIVEL LITERAL As variveis literais podem armazenar uma sequncia com um nmero varivel de caracteres. Declarao:
character v1 *c1, v2 *c2, .... , vn *cn
character - a palavra-chave vi - uma varivel ci - o nmero mximo de caracteres que poder ser armazenado na varivel vi
-
Exemplo: character nome Outra forma de declarar:
character *c v1,..., vn
Neste caso as variveis declaradas possuem o mesmo tamanho c. Exemplo: character *15 cor, nome
EXERCCIO
Considere que para se determinar o nmero de lmpadas necessrias para cada
cmodo de uma residncia, existem normas que do o mnimo de potncia de
iluminao exigida por metro quadrado, conforme a utilizao do cmodo.
Suponha que utilizada a seguinte tabela e que s so utilizadas no projeto da
residncia lmpadas de 60W.
Utilizao Classe Potncia/m2
Quarto 1 15
Sala de TV 1 15
Salas 2 18
Cozinha 2 18
Varanda 2 18
Escritrio 3 20
Banheiro 3 20
Faa um programa que:
a) Leia um nmero indeterminado de linhas contendo cada uma:
- o nome do cmodo
- a classe de iluminao deste cmodo
- as duas dimenses do cmodo
-
b) Calcule e escreva
b1) Para cada cmodo
- o nome
- a rea
- a potncia de iluminao
- o nmero de lmpadas necessrias
b2) Para toda a residncia
- o total de lmpadas
- o total de potncia
Obs:
1) Se o nmero calculado de lmpadas for fracionrio, considerar o menor inteiro que
contenha esse nmero. Ex: 8,3 9; 8,7 9
2) A ltima linha, que no entrar nos clculos, conter no lugar do cmodo a palavra
vazio e os demais valores sero 0.
- Adaptado de exerccio do livro Harry Farrer, Fortan Estruturado
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
Resumo 2 Parte/1 Aulas de Variveis Compostas Homogneas Unidimensionais
VARIVEIS COMPOSTAS HOMOGNEAS UNIDIMENSIONAIS
At o momento estudamos as variveis simples com seus tipos bsicos (real, inteiro, lgico e literal). No entanto, h situaes nas quais importante criar uma nica varivel, que tenha tantos componentes quantos so os valores a serem processados. Essas variveis existem em linguagens para facilitar a representao e o acesso a valores relacionados entre si. Comearemos a estudar as variveis compostas, que tambm so chamadas de agregados, arranjos, vetores e matrizes. Variveis compostas homogneas:
- so identificadas por um nico nome, individualizadas por ndices e o seu contedo de um nico tipo.
- Podem ter uma ou mais dimenses. Dentre as variveis compostas homogneas, veremos inicialmente aquelas que tm uma s dimenso, ou unidimensionais. Estas variveis so tambm chamadas de vetores. Exemplo: Suponha que as 10 respostas de um aluno a um exerccio de mltipla escolha estejam na varivel denominada resposta: resposta
a a c b d a e c c d
1 2 3 4 5 6 7 8 9 10 a) Para referenciar um elemento desta varivel necessrio colocar o nome
da varivel, seguida de um ndice, entre parnteses. Por exemplo, para referenciar o segundo elemento, deve ser escrito:
resposta (2)
-
O contedo de resposta (2) a
a a c b d a e c c d
1 2 3 4 5 6 7 8 9 10 2 o ndice, uma constante inteira.
b) Para tornar mais flexvel a utilizao de variveis compostas so utilizadas
variveis inteiras e expresses aritmticas como ndices. resposta (i) i substitudo por seu contedo. c) Leitura e escrita Exemplo: - Leitura das 10 respostas de um aluno para a varivel composta resposta: do i = 1, 10 read *, resposta (i) end do ou: read *, (resposta (i), i = 1, 10) - Escrita do i = 1, 10 print *, resposta (i) end do ou: print *, (resposta (i), i = 1, 10) d) Declarao
nome-do-tipo ident1 (Li1:Ls1), ident2 (Li2:Ls2), .... , identn (Lin:Lsn)
nome-do-tipo - uma palavra chave (integer, real, logical, etc) que define o tipo do contedo a ser armazenado pela varivel. ident1, ident2,..., identn - lista de nomes escolhidos para as variveis.
-
Li1, Li2, .... , Lin limites inferiores dos intervalos de variao dos ndices. Quando for omitida esta especificao o limite inferior assume o valor 1. Os limites inferiores podem ser valores inteiros negativos, nulos ou positivos. Ls1, Ls2, .... , Lsn - limites superiores dos intervalos de variao dos ndices. Os limites superiores podem ser valores inteiros negativos, nulos ou positivos. O limite superior deve sempre ser maior ou igual ao limite inferior. Exemplos: character resposta (10) real quantidade (20) character nome (20) *30
EXERCCIOS
1. Elabore um programa em Fortran que leia os preos de um produto em diferentes lojas,
calcule o preo mdio, verifique e escreva em quantas lojas o preo foi maior que a mdia. O
nmero de lojas informado pelo usurio.
2. Elabore um programa em Fortran que faa a correo de uma prova de mltipla escolha
realizada por alunos de uma turma. O programa dever atender aos seguintes requisitos:
- solicitar ao usurio o nmero de questes da prova
- solicitar ao usurio o gabarito. As respostas podem ser a, b, c, d e e.
- solicitar ao usurio a matrcula e as respostas de cada aluno.
- determinar o nmero de questes corretas de cada aluno e escrever este valor, juntamente
com a matrcula do aluno.
A matrcula tem 6 caracteres e o fim dos dados de alunos indicado pela palavra fim.
3. Elabore um programa em Fortran que determine e escreva a interseo de duas sequncias
de inteiros. O programa dever atender aos seguintes requisitos:
- solicitar ao usurio a quantidade de elementos de cada uma das sequncias.
- solicitar ao usurio os valores que pertencem a cada sequncia.
- determinar e escrever os elementos que esto presentes simultaneamente nas duas
sequncias.
Obs: As sequncias no esto ordenadas e em cada uma delas no h elementos repetidos.
4. Elabore um programa em Fortran que determine e escreva a unio de duas sequncias de
inteiros. O programa dever atender aos seguintes requisitos:
- solicitar ao usurio a quantidade de elementos de cada uma das sequncias.
- solicitar ao usurio os valores que pertencem a cada sequncia.
- determinar e escrever todos os elementos presentes nas duas sequncias.
Obs: As sequncias no esto ordenadas e em cada uma delas no h elementos repetidos.
5. Elabore um programa em Fortran que leia uma sequncia de valores inteiros para um vetor,
ordene este vetor e escreva-o ordenado.
Bibliografia: - Harry Farrer e outros, Fortran Estruturado, Ed. Koogan
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
Resumo 2 Parte/2 Aulas de Subrotinas
SUBROTINAS
A partir de agora vamos elaborar programas compostos por mdulos. Cada programa ser constitudo de um mdulo que o principal, alm de outros denominados subprogramas. O programa principal corresponde verso inicial do algoritmo. Os passos que necessitarem de refinamentos so representados no programa principal por chamadas de subprogramas. A execuo comea pelo programa principal. Quando, atravs de um comando especial, um subprograma chamado, ativada a regio de comunicao entre os mdulos envolvidos: o que chama e o que chamado. Depois da execuo do mdulo chamado, continua a execuo do mdulo que chamou, no comando que segue o comando de chamada. Cada mdulo possui definies de variveis e comandos prprios. E so estabelecidas regies de comunicao entre os mdulos. Em Fortran h dois tipos de subprogramas que podem ser utilizados: subrotinas e funes. Vamos comear estudando as subrotinas.
Declarao de uma subrotina:
subroutine nome-da-subrotina (lista-de-parmetros) declarao de parmetros declarao de variveis locais comandos end
subroutine uma palavra chave nome-da-subrotina um identificador, com as mesmas restries do nome de uma varivel. lista-de-parmetros so parmetros formais que sero substitudos pelos parmetros atuais (argumentos) quando a subrotina for chamada. Podem ser nomes de variveis simples ou compostas e nomes de outros subprogramas. declarao de parmetros - a declarao de parmetros formais. declarao de variveis locais a declarao de variveis utilizadas apenas nesta subrotina.
-
comandos so quaisquer comandos Fortran. Return um comando que indica o final lgico da subrotina e retorna o controle para o programa ou subprograma que a chamou. end uma palavra chave
Chamada de uma subrotina:
call nome-da-subrotina (lista-de-parmetros)
call uma palavra chave lista de parmetros parmetros atuais, ou argumentos, que substituiro os parmetros formais durante a execuo da subrotina. Devem corresponder em nmero, ordem, tipo e dimenso aos parmetros formais da declarao da subrotina.
Vantagens da elaborao de subprogramas:
1. Facilidade de entendimento - Um programa pode ser muito longo e programas longos so difceis de serem compreendidos
2. Economia de cdigo O subprograma pode ser desenvolvido uma vez e utilizado, atravs de chamadas, de vrios pontos do programa.
3. Codificao, compilao e teste em separado Vrias pessoas poderiam desenvolver os subprogramas necessrios separadamente.
4. Facilidade de manuteno A modularizao facilita a identificao dos trechos que devem sofrer alterao durante a manuteno.
EXERCCIOS
1) Elabore o subrotina Ordena (A,N). O vetor A contm N elementos inteiros sem repetio e dever ser ordenado em ordem crescente. Elabore um programa que leia at 25 inteiros para um vetor, realize a ordenao dos elementos do vetor em ordem crescente atravs de uma chamada subrotina Ordena e escreva os elementos ordenados.
-
program OrdenacaoInteiros implicit none integer seq (25), quant, i print *, 'Diga a quantidade de nmeros - mximo = 25' read *, quant print *, 'Escreva os nmeros' read *, (seq (i), i = 1, quant) call ordena (seq, quant) print *, 'Sequncia ordenada' print *, (seq (i), i = 1, quant) print *, 'Tecle enter para sair' read * stop end c ---------------------------------------------------------- subroutine ordena (a, n) implicit none integer n, a (n) integer i, j, aux do i = 2, n do j = n, i, -1 if ( a (j-1) .GT. a (j) ) then aux = a (j-1) a (j-1) = a (j) a (j) = aux end if end do end do return end c -----------------------------------------------------------
2) Elabore uma nova verso do programa que determina e escreve a interseo de duas sequncias de inteiros. Crie a subrotina Intersecao.
3) Faa uma subrotina que transforme segundos em horas, minutos e segundos.
4) Faa uma subrotina que obtenha as razes de uma equao de segundo grau.
Bibliografia:
- Harry Farrer e outros, Fortran Estruturado, Ed. Koogan - Sergio de Carvalho, Introduo Cincia da Computao, Ed.Campus
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
Resumo 2 Parte/3 Aulas de variveis compostas homogneas multidimensionais
VARIVEIS COMPOSTAS HOMOGNEAS MULTIDIMENSIONAIS
Dentre as variveis compostas homogneas, estudamos inicialmente aquelas que tm uma s dimenso, ou unidimensionais. Em muitos casos uma s dimenso no suficiente para representar uma estrutura de dados. Agora vamos estudar as variveis compostas homogneas multidimensionais.
Exemplo: Suponha que foi elaborada a seguinte tabela contendo as quantidades de veculos que vinham de 4 origens e se dirigiam a 4 destinos.
Origem-Destino Destino 1 Destino 2 Destino 3 Destino 4
Origem 1 67 29 44 19
Origem 2 34 66 88 35
Origem 3 19 32 28 16
Origem 4 55 77 43 18
Tabelas de duas dimenses costumam ser chamadas de matrizes. Em Fortran esta tabela pode ser armazenada em uma varivel composta homognea de duas dimenses. Daremos a esta varivel o nome trafego
a) Para referenciar um elemento desta varivel necessrio colocar o nome
da varivel, seguida de dois ndices, entre parnteses. Por exemplo, para referenciar a origem 2, destino 1
trafego (2,1)
-
1 2 3 4
1 67 29 44 19
2 34 66 88 35
3 19 32 28 16
4 55 77 43 18
O contedo de trafego (2,1 ) 34
2 e 1 so os ndices, constantes inteira.
Nas variveis de duas dimenses a regra utilizada que o primeiro ndice indica a linha, e o segundo, a coluna.
b) Para tornar mais flexvel a utilizao de variveis compostas so utilizadas
variveis inteiras e expresses aritmticas como ndices. Exemplo: do origem = 1, 4 do destino = 1, 4 trafego (origem, destino) = 0 end do end do c) Leitura e escrita - Exemplo de leitura do i = 1, 5 do j = 1, 5 read *, a (i, j) end do end do - Exemplo de escrita do origem = 1, 4 print *, 'Origem - ', origem print *, 'Destino ' , 'Total de veculos' do destino = 1, 4 print *, ' ', destino, ' ', trafego (origem, destino) end do end do d) Declarao
nome-do-tipo ident1 (LI11:LS11, LI12:LS12, ... ), ident2 (LI21:LS21, LI22:LS22, ...), .... , identn (LIn1:LSn1, LIn2:LSn2, ...)
-
nome-do-tipo - uma palavra chave (integer, real, logical, etc) que define o tipo do contedo a ser armazenado pela varivel. ident1, ident2,..., identn - lista de nomes escolhidos para as variveis. LIj1, LIj2, .... , LIjn limites inferiores dos ndices de cada dimenso. Quando for omitida esta especificao o limite inferior assume o valor 1. Os limites inferiores podem ser valores inteiros negativos, nulos ou positivos. LSj1, LSj2, .... , LSjn - limites superiores dos ndices de cada dimenso. Os limites superiores podem ser valores inteiros negativos, nulos ou positivos. O limite superior deve sempre ser maior ou igual ao limite inferior. Exemplo: integer trafego (4,4)
EXERCCIOS
1) Considere que foi realizada uma pesquisa sobre o trfego em uma regio visando a realizao de melhorias. Cada motorista teve que responder de onde vinha e para onde estava indo.
Cada resposta composta pelos seguintes dados: origem e destino em cdigo (1 a 4). A ltima resposta, que indica o fim dos dados 0 para a origem e 0 para o destino. Elabore um programa em Fortran que leia estas respostas e calcule o total de veculos
de cada origem-destino, utilizando uma varivel composta de duas dimenses. Dever ser impresso o total de veculos de acordo com o seguinte formato:
Origem 1 Destino Total de Veculos
1 67 2 29 3 44 4 19
Origem 2
Destino Total de Veculos 1 34 2 66 3 88 4 35
Origem 3
Destino Total de Veculos 1 19 2 32 3 28 4 16
Origem 4
Destino Total de Veculos 1 55 2 77 3 43 4 18
-
2) Faa uma nova verso do programa do exerccio anterior. Agora cada resposta composta pelos seguintes dados: origem e destino (1 a 4) alm do tipo de veculo (1 a 3). A ltima resposta, que indica o fim dos dados 0 para a origem, 0 para o destino e 0 para o veculo. Dever ser impresso um relatrio com as quantidades de veculos, de acordo com o seguinte formato:
Veculo 1
Origem 1 Destino Total de Veculos
1 12 2 34 3 45 4 16
Origem 2
Destino Total de Veculos 1 16 2 38 3 145 4 116
Origem 3
Destino Total de Veculos 1 116 2 138 3 15 4 11
Origem 4
Destino Total de Veculos 1 6 2 8 3 45 4 6
Veculo 2
....
...
3) Faa um programa que leia os dados de um tabela com 5 linhas e 5 colunas, multiplique os elementos da diagonal principal por uma constante k, tambm lida, e escreva a tabela resultante. 4) Elabore um programa que leia os dados de uma tabela de quatro linhas e quatro colunas, calcule e escreva a soma de cada linha e a soma de todos os elementos. 5) Faa um programa que gere e escreva o Tringulo de Pascal com n linhas. O nmero de linhas dever ser informado pelo usurio. 6) Elabore uma subrotina que troque duas linhas de uma tabela.
Bibliografia: - Harry Farrer e outros, Fortran Estruturado, Ed. Koogan
-
PROGRAMAO DE COMPUTADORES 2/2010
INSTITUTO DE COMPUTAO - UFF
Profa Teresa Cristina de Aguiar
Resumo 2
Parte/4 Aulas de Funes
Em Fortran h dois tipos de subprogramas que podem ser utilizados: subrotinas e funes. J estudamos as subrotinas e a partir de agora vamos iniciar o estudo das funes. A linguagem Fortran oferece uma biblioteca de funes predefinidas. J utilizamos no curso algumas delas, como sqrt e mod. O programador pode tambm criar funes adicionais, como veremos a seguir. Uma caracterstica das funes, que as diferenciam das subrotinas, que elas retornam sempre um nico valor.
FUNES
Declarao de uma funo:
tipo function nome-da-funo (lista-de-parmetros) declarao de parmetros declarao de variveis locais comandos end
tipo pode ser integer, real, logical, complex, double precision ou character. function uma palavra chave nome-da-funo um identificador, com as mesmas restries do nome de uma varivel. lista-de-parmetros so parmetros formais que sero substitudos pelos parmetros atuais (argumentos) quando a funo for chamada. Podem ser nomes de variveis simples ou compostas e nomes de outros subprogramas. declarao de parmetros - a declarao de parmetros formais. declarao de variveis locais a declarao de variveis utilizadas apenas nesta funo. end uma palavra chave comandos:
So quaisquer comandos Fortran. Return um comando que indica o final lgico da funo e retorna o controle
para o mdulo que a chamou. A funo retornar o valor atribudo ao nome-da-funo
Exemplo:
-
integer function fatorial (n) implicit none integer n integer num fatorial = 1 do num = 2, n fatorial = fatorial * num end do return end
Ativao de uma funo: Para ativar uma funo deve ser colocada a seguinte chamada em uma expresso:
nome-da-funo (lista-de-parmetros)
lista de parmetros parmetros atuais, ou argumentos, que substituiro os parmetros formais durante a execuo da funo. Devem corresponder em nmero, ordem, tipo e dimenso aos parmetros formais da declarao da funo.
O tipo da funo deve ser declarado no mdulo que ativar a funo, como se fosse uma varivel comum. program calculoFatorial implicit none integer n, fatorial print *, 'Escreva o valor de n para o clculo de n!' print *, 'n >= 0' read *, n print *, 'Fatorial de ', n, ' = ', fatorial (n) print *, 'Tecle ENTER para sair' read * stop end
-
c ------------------------------------------------------------ integer function fatorial (n) implicit none integer n integer num fatorial = 1 do num = 2, n fatorial = fatorial * num end do return end c ------------------------------------------------------------
EXERCCIOS
1. Escreva uma funo que calcule o valor de e:
e = 1 + 1
1! +
1
2! +
1
3! + ...
O nmero de termos da srie dever ser fornecido funo como parmetro.
Utilize a funo fatorial (n)
2. Escreva a funo logical function existe (seq, n, num) que verifica a existncia
de um nmero num em uma sequncia seq (sem repeties) que tem n valores. Seq
uma varivel composta unidimensional (vetor).
3. Escreva um programa que leia um conjunto com 20 nmeros inteiros (sem
repeties), seguido de outro conjunto de 10 nmeros inteiros (sem repeties), e
determine e escreva quais destes 10 nmeros so iguais a um dos 20 primeiros.
Utilize a funo existe.
4. Escreva a funo mdc (a, b), que retorna o mximo divisor comum entre dois nmeros inteiros a e b.
5. Escreva um programa que leia dois valores e escreva o mdc, utilizando a funo
mdc(a,b)
6. Faa uma funo que transforme horas, minutos e segundos em segundos.
Bibliografia: - Harry Farrer e outros, Fortran Estruturado, Ed. Koogan