nivelamento - 2015 - programação (1).pdf
TRANSCRIPT
-
Carlos A. R. Carvalho Junior ([email protected])
Nivelamento 2015 - Algoritmos/Programao
Universidade Federal do Paran
Setor de Cincia e Tecnologia
Programa de Ps-Graduao em Mtodos Numricos em Engenharia
(ltima atualizao: 07/02/2015)
CURITIBA2015
-
Sumrio
1 CRONOGRAMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.1 EMENTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2 AULA 1 (20/01/2015) . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.3 AULA 2 (22/01/2015) . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.4 AULA 3 (27/01/2015) . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.5 AULA 4 (29/01/2015) . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.6 AULA 5 (03/02/2015) . . . . . . . . . . . . . . . . . . . . . . . . . . 61.7 AULA 6 (05/02/2015) . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 LISTA DE EXERCCIOS . . . . . . . . . . . . . . . . . . . . . . . . 72.1 LISTA 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.1.1 Exerccio 1 (Resolvido) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.1.2 Exerccio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.1.3 Exerccio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.1.4 Exerccio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.1.5 Exerccio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2 LISTA 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.1 Exerccio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.2 Exerccio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.3 Exerccio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.4 Exerccio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.5 Exerccio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.6 Exerccio 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.7 Exerccio 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3 LISTA 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3.1 Exerccio 1 (Resolvido) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3.2 Exerccio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.3.3 Exerccio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.3.4 Exerccio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3.5 Exerccio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.4 LISTA 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.4.1 Exerccio 1 (Resolvido - Redao "melhorada") . . . . . . . . . . . . . . . 122.4.2 Exerccio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.4.3 Exerccio 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.4.4 Exerccio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
-
2.4.5 Exerccio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.4.6 Exerccio 6 - (Alterado) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.4.7 Exerccio 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.5 LISTA 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.5.1 Exerccio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.5.2 Exerccio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.5.3 Exerccio 3 (Resolvido - Redao "melhorada") . . . . . . . . . . . . . . . 192.5.4 Exerccio 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.6 LISTA 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.6.1 Exerccio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.6.2 Exerccio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.6.3 Exerccio 3 - Resolvido . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
PROVA SIMULADA . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
ANEXOS 36
ANEXO A MATERIAL DISCIPLINA PROG-I(PUC RIO) . . . . . 37
ANEXO B LISTA DE EXERCCIOS 2014 . . . . . . . . . . . . . 60B.1 LISTA 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60B.2 LISTA 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61B.3 LISTA 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
ANEXO C APOSTILA DE FORTRAN . . . . . . . . . . . . . . . 64C.1 CAP.1 - INTRODUO . . . . . . . . . . . . . . . . . . . . . . . . . . 65C.2 CAP.2 - VARIVEIS DO TIPO INTEIRO . . . . . . . . . . . . . . . . 83C.3 CAP.3 - VARIVEIS DO TIPO REAL . . . . . . . . . . . . . . . . . . 97C.4 CAP.4 - VARIVEIS DO TIPO CARACTER . . . . . . . . . . . . . . 111C.5 CAP.5 - ARQUIVOS E FUNES MATEMTICAS INTRNSECAS 123C.6 CAP.6 - FORMATO E EDIO . . . . . . . . . . . . . . . . . . . . . 137C.7 CAP.7 - DECISES E OPES . . . . . . . . . . . . . . . . . . . . . 152C.8 CAP.8 - CICLOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164C.9 CAP.9 - CONJUNTOS . . . . . . . . . . . . . . . . . . . . . . . . . . 175C.10 CAP.10 - MATRIZES . . . . . . . . . . . . . . . . . . . . . . . . . . . 189C.11 CAP.12 - SUB ROTINAS . . . . . . . . . . . . . . . . . . . . . . . . . 203C.12 CAP.16 - MEMRIA E SUB-ROTINAS . . . . . . . . . . . . . . . . 217C.13 CAP.17 - MDULOS . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
ANEXO D APOSTILA DE ANLISE NUMRICA . . . . . . . . 241
-
D.1 SOLUO DE SISTEMAS TRIANGULARES . . . . . . . . . . . . . 242D.2 MTODO DE ELIMINAO DE GAUSS . . . . . . . . . . . . . . . 245
-
5
1 CRONOGRAMA
1.1 EMENTANoes de lgica em programao. Dados, expresses e algoritmos (pseudo-linguagem,
fluxograma), teste de mesa.
1. Noes de lgica de programao: Dados e instrues, Mtodos para represen-tao de algoritmos (pseudo-linguagem, fluxograma), Teste de mesa.
2. Dados, expresses e algoritmos sequenciais: Variveis e constantes, Operadoresrelacionais e lgicos, Expresses aritmticas e lgicas, precedncia de operadores,comando de atribuio.
3. Estruturas de controle: Execuo condicional (if, else, switch), Estruturas derepetio (for, while, do while).
4. Estruturas complexas: Vetores, Matrizes, Strings
5. Modularizao: Funes (Chamada e retorno), Passagem de parmetros (valor)
1.2 AULA 1 (20/01/2015)
Noes bsicas de programao: O que um algoritmo, tipos de linguagensexistentes e sua utilidade no estudo cientfico.
Linguagem de programao: Pseudo-linguagem, fluxograma, linguagem natural.
Linguagem base: Fortran
Material utilizado: Prog3.pdf (disponvel no anexo A)
1.3 AULA 2 (22/01/2015)
Tipos de variveis: Inteira(Integer), real e caracteres (character)
Condicionais: se (IF), caso (case)
Repeties: para (Do), enquanto (While)
Material utilizado: Prog3.pdf (disponvel no anexo A) e Apostila de fortran Cap1,2,3,4,5,7 e 8(disponvel no anexo C)
-
Captulo 1. CRONOGRAMA 6
1.4 AULA 3 (27/01/2015)
Conjuntos: Tipos de conjuntos e operaes elementares.
Funes e Sub Programas (Sub-rotinas): Comparao das duas estruturas esuas utilidades na programao
Exerccios: Aplicaes
Material utilizado: Apostila de fortran Cap 9 e 12 (disponvel no anexo C)
1.5 AULA 4 (29/01/2015)
Matrizes
Operaes com matrizes
Exerccios
Material utilizado: Apostila de fortran Cap 5,6,10,16 e 17 (disponvel no anexo C)
1.6 AULA 5 (03/02/2015)
Aplicaes
Exerccios
Material utilizado: Apostila de anlise numrica (disponvel no anexo D)
1.7 AULA 6 (05/02/2015)
Prova simulada (com consulta aos colegas e professor)
Material utilizado: Apostila de anlise numrica (disponvel no anexo D)
-
7
2 LISTA DE EXERCCIOS
Os exerccios propostos nesta seo, em sua grande maioria, foram adaptados dadisciplina de programao computadores.
Site da disciplina: http://www.inf.ufpr.br/ci208/
2.1 LISTA 1
2.1.1 Exerccio 1 (Resolvido)
Escreva o pseudocdigo, para ler, a partir do teclado, o ano de nascimento de umapessoa. Com esse dado, o programa deve fazer o seguinte: (a) calcular e imprimir suaidade, considerando que estamos no ano de 2015; (b) verificar e imprimir se a pessoa jtem idade para votar (16 anos ou mais); (c) verificar e imprimir se a pessoa j tem idadepara conseguir a carteira de habilitao (18 ou mais). Veja alguns exemplos de entrada esada de dados a partir da execuo do programa:
Exemplo 1:
1998 (Leitura)Idade de 17 anosTem idade para votarNo pode ter carteira de habilitao.
Exemplo 2:
2000 (Leitura)Idade de 15 anosNo tem idade para votarNo pode ter carteira de habilitao.
Exemplo 3:
1990 (Leitura)Idade de 25 anosTem idade para votarPode ter carteira de habilitao.
Resoluo:
http://www.inf.ufpr.br/ci208/
-
Captulo 2. LISTA DE EXERCCIOS 8
INICIO
Varivel inteiras: x, A, B, C
(Passo 1) Leia x
(Passo 2)
A=2015-x
B=16
C=18
(Passo 3) Escreva "Idade e de",A
(Passo 4) Se AB, escreva "Tem idade para votar"
(Passo 5) Se A
-
Captulo 2. LISTA DE EXERCCIOS 9
termos. As frmulas que definem os termos e soma de uma progresso aritmtica (PA) so:
an = a1 + (n 1) r
S = a1 + an2 n
2.1.4 Exerccio 4
Resolver lista 1 - 2014 de Fortran (Anexo B ) em pseudocdigo.
2.1.5 Exerccio 5
Resolver exerccios 2,3,4 e 5 da Lista 2 - Programao I (Anexo A )
2.2 LISTA 2
2.2.1 Exerccio 1
Escreva o pseudocdigo de um programa que l o nmero de alunos de uma turmae, para cada aluno, l as suas trs notas, escreve sua mdia aritmtica e, no final, escrevea mdia da turma.
2.2.2 Exerccio 2
Escreva o pseudocdigo, que mostre as mdias aritmticas dos valores positivos enegativos fornecidos via teclado. O final da entrada de valores indicado com o valor 0(zero) que no deve ser considerado no clculo das mdias.
Exemplo de execuo:
1.5 ; 2.0 ; -3.0 ; 1.0 ; -2.5; -5.0; 2.5 ; 0
Mdia dos positivos: 1.75
Mdia dos negativos: -3.5
2.2.3 Exerccio 3
Afrnio tem um peso de 80 kg e est engordando uma mdia de 2 kg por ano.Enquanto isto, Ermengarda, sua amada esposa, tem 45 kg e est engordando uma mdiade 3 kg por ano. Faa um programa em pseudocdigo que calcule e imprima quantos anossero necessrios para que Ermengarda ultrapasse o peso de Afrnio. O programa devetambm imprimir qual ser o peso de cada membro do casal ternura neste momento.
-
Captulo 2. LISTA DE EXERCCIOS 10
Observe que a evoluo do peso de cada um dos pombinhos uma PA. Tomando-sen, como o nmero de anos que demora para os pesos serem iguais, use uma dasfrmulas do exerccio 2.1.3, para calcular n.
2.2.4 Exerccio 4
Escreva o pseudocdigo de um programa que leia um conjunto de valores inteirospositivos e imprime na tela quantos nmeros pares e quantos nmeros mpares foramdigitados pelo usurio. O final do conjunto de valores indicado quando o usurio digitaro valor 0 (zero), que no deve ser considerado na contagem de valores pares ou impares.
Exemplo de execuo:
1 ; 4 ; 35 ; 89 ; 67 ; 54 ;0
2 pares e 4 impares
2.2.5 Exerccio 5
Resolver lista 2 - 2014 de Fortran (Anexo B ) em pseudocdigo.
2.2.6 Exerccio 6
Resolver exerccios 6,7,8 da Lista 2 - Programao I (Anexo A )
2.2.7 Exerccio 7
Escreva o pseudocdigo de um programa que calcule as somatrias:
(a) ni=0(x 1)xi(b) ni=0 xii!(c) ni=1 1i
O valor de n e x, deve ser informado, verifique em algum software, que realize estetipo de operao, se sua soluo esta coerente (exemplo: Excel, Maple e Matlab).
2.3 LISTA 3
2.3.1 Exerccio 1 (Resolvido)
Dados dois vetores X e Y de n posies cada, determinar o produto escalar entreos dois vetores. O produto escalar entre dois vetores dado por:
-
Captulo 2. LISTA DE EXERCCIOS 11
< x, y >=n
i=1xiyi x, y Rn
Resoluo:
Entrada: produto, nvetores: x,y
1 Leia os vetores e suas dimenses n;
2 produto = x(1)*y(1)
3 Para i = 2, ..., nproduto = produto + x(i)*y(i)
2.3.2 Exerccio 2
Escreva o pseudocdigo de um programa que leia do teclado um valor max inteiroe mostre o primeiro nmero inteiro cujo fatorial seja maior que o valor max informado.Por exemplo, se for fornecido o valor 1000 para max, o programa deve informar na tela ovalor 7, pois 7! = 5040, e 6! = 720.
2.3.3 Exerccio 3
Considere a funo f(x) = x3 + x 1, definida no intervalo [0, 1].
(a) Escreve o pseudocdigo da iterao abaixo
x(k+1) = x(k) f(x(k))
f (x(k)) (2.1)
para k = 1,..., n passos, ou se
|x(k+1) x(k)| < 102 (2.2)
Utilize x(0) = 0, imprima o valor final de x(k+1), quando a condio 2.1 ou 2.2, for satisfeita.
-
Captulo 2. LISTA DE EXERCCIOS 12
Exemplo de funcionamento do algoritmo (para k = 2) :
k = 1
x(1) = x(0) f(x(0))
f (x(0))
x(1) = 0 (0)3 + (0) 13(0)2 + 1 = 1
|x(1) x(0)| = 1 > 102
k = 2
x(2) = x(1) f(x(1))
f (x(1)) =34
FIM
(b) Repita o algoritmo com
f(x) = x3 + x a x [0, 1]
em que a deve ser fornecido pelo usurio, com a restrio
0 < a < 2.
2.3.4 Exerccio 4
Resolver os exerccios 9.5 e 9.6 da apostila de fortran (disponvel no anexo C)
2.3.5 Exerccio 5
Resolver a lista 3 de 2014 (disponvel no anexo B)
2.4 LISTA 4
2.4.1 Exerccio 1 (Resolvido - Redao "melhorada")
Dada uma matriz A(n,m) e uma matriz B(n1,m1), calcule o produto das matrizes,se possvel. Atribua o resultado da operao (quando possvel), para uma matriz C.
Sugesto:
ci,j =n1
k=1ai,k bk,j
Onde ai,j,bi,j e ci,j, so elementos das matrizes A,B e C, respectivamente, nasposies i e j.
Resoluo:
Primeiramente, vamos definir as variveis que utilizaremos no programa:
-
Captulo 2. LISTA DE EXERCCIOS 13
INICIO
Variveis inteiras: n,m, n1,m1
linhaC, colunaC, k
Variveis reais: somatria
Matrizes: A, B e C
As variveis inteiras linhaC, colunaC,k e a varivel real somatria, serviro pararealizar operaes durante o algoritmo. Por outro lado, as variveis inteiras n,m, n1 e m1serviro para definir as dimenso (linha e coluna) das matrizes A e B e consequentementea matriz C, resultante do produto das matrizes A e B, isto :
A Rnxm ; B Rn1xm1 ; C Rnxm1
Porm, todavia, sabemos da lgebra linear, para existncia da matriz C, devemoster obrigatoriamente a igualdade entre m (nmero de colunas da matriz A) e n1 (nmero delinhas da matriz B). Portanto, necessitaremos impor a condio "n1==m", para podermoscalcular a matriz C, em nosso algoritmo, caso contrrio esta operao no ser possvel derealizar. Prosseguindo com o algoritmo:
(Passo 1) Leia as matrizes A(n,m) e B(n1,m1) com suas respectivas dimenses.
(Passo 2) Se n1==m, faa
Aloque a matriz C(n,m1), se necessrio, em seguida:
(ciclo 1) Para linhaC = 1,2,3,..., n
(ciclo 2) Para colunaC = 1,2,3,..,m1
somatria = 0
(ciclo 3) Para k = 1,2,..., n1
somatria = somatria + matrizA(linhaC,k)*matrizB(k,colunaC)
FIM (ciclo 3)
matrizC(linhaC,colunaC) = somatria
FIM (ciclo 2)
FIM (ciclo 1)
(Passo 3) Se n1 6= m: A operao no pode ser realizada
FIM
-
Captulo 2. LISTA DE EXERCCIOS 14
Se "n1==m", entramos no passo 2, caso contrrio (Passo 3), a operao no fazsentido. Os ciclos 1 e 2, servem para fixar os coeficientes ci,j , j o ciclo 3, calcula a somatria
n1k=1
ai,k bk,j,
com o auxlio da varivel somatria, que conveniente declarada igual a zero, dentro dociclo 2. Por fim ao final do ciclo 2, tambm declarado de forma conveniente o resultado dasomatria ao coeficiente da matriz C, isto matrizC(linhaC,colunaC) = ci,j, neste caso.Ao final do ciclo 1, o produto das matrizes A e B finalmente atribudo a matriz C, comogostaramos, logo abaixo, temos o algoritmo em sua forma completa:
INICIO
Variveis inteiras: n,m, n1,m1
linhaC, colunaC, k
Variveis reais: somatria
Matrizes: A, B e C
(Passo 1) Leia as matrizes A(n,m) e B(n1,m1) com suas respectivas dimenses.
(Passo 2) Se n1==m, faa
Aloque a matriz C(n,m1), se necessrio, em seguida:
(ciclo 1) Para linhaC = 1,2,3,..., n
(ciclo 2) Para colunaC = 1,2,3,..,m1
somatria = 0
(ciclo 3) Para k = 1,2,..., n1
somatria = somatria + matrizA(linhaC,k)*matrizB(k,colunaC)
FIM (ciclo 3)
matrizC(linhaC,colunaC) = somatria
FIM (ciclo 2)
FIM (ciclo 1)
(Passo 3) Se n1 6= m: A operao no pode ser realizada
FIM
-
Captulo 2. LISTA DE EXERCCIOS 15
2.4.2 Exerccio 2
Fazer um programa que leia duas sequncia de inteiros, no necessariamentecontendo a mesma quantidade de nmeros, ordene-os, e em seguida imprima todos osnmeros ordenados em ordem crescente.
Exemplo de execuo:
Sequncia 1: 7 3 2 6 (Entrada)
Sequncia 2: 5 1 8 4 9 (Entrada)
Sada: 1 2 3 4 5 6 7 8 9
2.4.3 Exerccio 3
Fazer um programa que leia duas sequncias de inteiros, no necessariamentecontendo a mesma quantidade de nmeros, e diga se a segunda sequncia est contida naprimeira (quando possvel). Esta verificao deve ser feita por uma funo, denominadapor "verifica", cuja sada deve retornar 1 se a segunda sequncia estiver contida e 2, casocontrrio.
2.4.4 Exerccio 4
Um coeficiente binomial, C(n,k), representa o nmero de possveis combinaes de Nelementos tomados K a K. Um Tringulo de Pascal, uma homenagem ao grande matemticoBlaise Pascal, uma tabela de valores de coeficientes combinatoriais para pequenos valoresde N e K. Os nmeros que no so mostrados na tabela tm valor zero. Este tringulo podeser construdo automaticamente usando-se uma propriedade conhecida dos coeficientesbinomiais, denominada frmula da adio: C(r, k) = C(r 1, k) + C(r 1, k 1). Ou seja,cada elemento do tringulo a soma de dois elementos da linha anterior, um da mesmacoluna e um da coluna anterior. Veja um exemplo de um tringulo de Pascal com 7 linhas,com uma indicao de como obter os elementos:
11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1
-
Captulo 2. LISTA DE EXERCCIOS 16
2.4.5 Exerccio 5
Considere o vetor h, com n posies:
h = (h1, h2, ...., hn)T (2.3)
Atravs dele, determinamos os n + 1 pontos ou ns, contidos em um intervalo [0, L],conforme mostra a ilustrao abaixo:
As entradas deste vetor, possuem a propriedade:n
i=1hi = L hi R+ i = 1, ..., n (2.4)
Escreva o pseudocdigo de uma sub rotina que determine o vetor x, contendo osn + 1 pontos, do intervalo [0, L], para os casos:
(a) Entradas do vetor h, no uniformes.
(b) Entradas do vetor h, uniformes.
Para o caso (a), as entradas do vetor h, devem ser informadas e caso no respeitema propriedade da equao (2.4), escreva uma mensagem de erro, em seguida, encerre oprograma.
A sub rotina, deve ter como parmetro de entrada: n e L, retornando o vetor x,para o caso uniforme. Para o caso no uniforme os parmetros de entrada so: n, L eo vetor h, retornando tambm o vetor x.
Para evitar erros de arredondamento, a primeira e ltima entrada do vetor x, devemser definidos:
Para primeira entrada do vetor, defina:
x0 = 0
Para ltima entrada do vetor, defina:
xn = L
-
Captulo 2. LISTA DE EXERCCIOS 17
Exemplo de execuo da sub rotina:
Caso no uniforme:
Para n = 3, L = 1 e h = (0, 35; 0, 15; 0, 50)T , obtemos o intervalo [0, 1], conformeilustrao abaixo:
Sada da sub rotina:x = (0; 0, 35; 0, 5; 1)T
Caso uniforme:
Para n = 3, L = 1, obtemos o intervalo [0, 1], conforme ilustrao abaixo:
Sada da sub rotina:x = (0; 0, 33; 0, 66; 1)T
Sugestes:
Sugesto1: Para efeitos de programao na linguagem em Fortran, caso deseje, paraalocar e ler um vetor com n + 1 pontos, contendo o ponto x0, podemos utilizar a sintaxe:
Primeiro declare o vetor no formato desejado, conforme visto no captulo noveda apostila de Fortran (anexo C, seo C.9 ), em seguida:
READ(*,*) N !Leia N
ALLOCATE ( x(0:N) ) !Aloque o vetor
DO i = 0, N
READ(*,*) x(i) !Leitura do vetor
END DO
Sugesto2: Para declarar vetores j alocados, dentro de uma estrutura de sub rotina oufuno, podemos utilizar a sintaxe:
-
Captulo 2. LISTA DE EXERCCIOS 18
INTEGER:: N !dimenso do vetor
REAL, DIMENSION(N):: x !ou DIMENSION(0:N), se for considerado a sugesto1,
!no lugar de REAL, pode ser usado INTEGER, CHARACTER... tambm! Paravetores bidimensionais,tridimensionais.... a estrutura similar
Sugesto3: As vezes conveniente encerrar o programa antes do previsto, devido a algumproblema em algum clculo, por exemplo. No Fortran o comando que realiza esta operao o STOP.
Sugesto4: O valor de h, para o caso uniforme dado pela relao:
L
N
2.4.6 Exerccio 6 - (Alterado)
Calcule as somatrias dadas,utilizando o vetor x e h, do exerccio anterior, para oscasos:
(a) Uniforme:h
2
Ni=1
(f(xi1) + f(xi))
(b) No uniforme:N
i=1
hi2 (f(xi1) + f(xi))
Use: f = x2 e f = x3. Compare os resultados obtidos com as integrais L0
x2dx e L
0x3dx
Para ambos os casos.
2.4.7 Exerccio 7
Considere dois vetores de x e y, com n posies, reescreva o vetores com os resultadostrocados isto :
x = y; y = x
Exemplo:x = (0, 2, 3)T ; y = (1, 0, 1)T
Aplicando o algoritmo, temos:
x = (1, 0, 1)T ; y = (0, 2, 3)T
-
Captulo 2. LISTA DE EXERCCIOS 19
2.5 LISTA 5
2.5.1 Exerccio 1
Transforme o algoritmo do Exerccio 1 da lista 3 (Seo 2.3.1) em uma funo esub rotina, cujo parmetro de sada em ambos deve ser o resultado do produto entre osvetores.
2.5.2 Exerccio 2
Transforme o algoritmo do Exerccio 1 da lista 4 (Seo 2.4.1) em uma funo esub rotina, cujo parmetro de sada em ambos, deve ser a matriz C. Caso a operao noseja possvel de realizar, encerre o programa.
2.5.3 Exerccio 3 (Resolvido - Redao "melhorada")
Escreva um programa que leia uma matriz A, quadrada, em seguida transformeesta matriz em uma matriz triangular superior, atravs do processo de escalonamento.
Sugesto1:
Veja o anexo D.
Sugesto2: Esta uma forma de pivotear, quando usada de maneira adequada:
A(i,i) 6= 0
A(i+1,j) = A(i+1,j) - (A(i+1,j)/A(i,i))*A(i,j)
Resoluo:
Primeiramente, vamos definir as variveis que utilizaremos no programa:
INICIO
Variveis do tipo inteiro: i,j,k,b,c, linha, coluna
Variveis reais: auxiliar
Matriz: A
As variveis inteiras i,j,k,b,c e a varivel real auxiliar, serviro para realizar opera-es durante o algoritmo. Por outro lado, as variveis inteiras linha e coluna, serviro paradefinir as dimenso da matriz A.
-
Captulo 2. LISTA DE EXERCCIOS 20
Para escalonar uma matriz, precisamos todavia de um piv, que fica contido nadiagonal da matriz, mas se ele igual a zero, no possvel sua utilizao (evidentemente).Porm, existe a possibilidade de permutar as linhas em busca de um piv diferente de zero,no entanto, quando no encontramos este piv, significa que a coluna da matriz onde estao piv nula, e simplesmente partimos para o prximo piv, na coluna vizinha. O segundopasso que descreveremos agora, realiza o processo de permutar o piv, quando possvel:
Passo 1: Leia a matriz A(linha,coluna), com suas respectivas dimenses
Passo 2: (Ciclo 1) Para i = 1,2,..,linha-1
(Condicional 1) Se A(i,i)==0 , faa
(Ciclo 2) Para b = (i+1), (i+2),...,linha
(Condicional 2) Se A(b,i)6= 0, faa
(Ciclo 3) Para c = i,i+1,...,coluna
auxiliar = A(i,c)
A(i,c) = A(b,c)
A(b,c) = auxiliar
FIM (Ciclo 3)
Saia do Ciclo 2
FIM (Condicional 2)
FIM (Ciclo 2)
FIM (Condicional 1)
Perceba que ainda no encerramos o Ciclo 1, ele serve para ler as linhas da matrizA, terminando em linha-1, pois simplesmente, no h necessidade de mexer na ltimalinha da matriz A.
Este segundo passo muito importante, atravs dele conseguimos verificar se o pivna linha i nulo, podendo troc-lo, quando possvel. A condicional 1, verifica se o piv nulo, caso contrrio podemos seguir com o Passo 3, que descreveremos em breve. Porm,todavia, ao entrarmos na condicional 1, o ciclo 2, tem a funo de ler as linhas abaixo dalinha i, dentro deste ciclo, temos a condicional 2, servindo para verificar se existe um pivno nulo, nas linhas abaixo de i, caso encontre, ele permuta as linhas, atravs do ciclo 3,com o auxilio da varivel auxiliar, note que o ciclo 3 esta contido na condicional 2.
A linha do algoritmo "Saia do Ciclo 2", dentro da condicional 2, serve para encerrar averificao imposta pelo ciclo 2 dos pivs no nulos, sem ele, atravs do ciclo 2 e condicional
-
Captulo 2. LISTA DE EXERCCIOS 21
2, possvel que seja realizada outra permutao de linhas, pois pode existir mais de umpiv no nulo, abaixo do piv, localizado na linha i. Embora no estaria errado, mas parafins de verificao do algoritmo, por exemplo dificultaria a correo e tambm pensandono custo computacional, visto que uma conta desnecessria.
Note que, no ciclo 3, comeamos em i, pois nas prximas diagonais esperado queseus vizinhos a sua esquerda, sejam nulos, devido ao processo de pivoteamento. Por exemplo,para i = 2, para entrar na condicional devemos ter "A(2,2)==0", onde A(2,1)=0. Assimeconomizamos tempo computacional. Perceba que caso no seja possvel a permutaodo piv, pela inexistncia de um piv no nulo, nas linhas abaixo, significa que a colunaem questo nula. Isto pode acarretar problemas futuros, caso utilizemos a matriz emquesto, para alguma aplicao. Porm, em nosso algoritmo, simplesmente passamos parao prximo piv, localizado na coluna a direita da coluna nula, repetindo o processo deverificao.
Prosseguindo com o algoritmo, temos finalmente o passo 3, que realiza o pivotea-mento da matriz:
Passo 3: (Condicional 3) Se A(i,i) 6= 0, faa
(Ciclo 4) Para j=i+1,i+2,...,linha
(Ciclo 5) Para k = coluna,coluna-1, coluna-2,...,i
A(j,k) = A(j,k) - (A(i,k)/A(i,i))*A(j,i)
FIM (Ciclo 5)
FIM (Ciclo 4)
FIM (Condicional 3)
FIM (Ciclo 1)
FIM
A condicional 3, vem logo em seguida da condicional 1. Tendo o piv no nulo,o ciclo 4 le as linhas abaixo da linha i, onde esta o piv, em seguida dentro deste ciclo,temos o ciclo 5, que realiza o processo de pivoteamento das linhas em questo, percebaque comea em coluna e termina em i, ou seja tem passo -1, o fato de terminar em i, comoj comentando anteriormente os vizinhos a esquerda da posio i, so nulos. Terminando acondicional 3, temos as linhas abaixo da posio i pivoteadas.
Em seguida o processo repetido desde o inicio pelo Ciclo 1, agora para o prximopiv da linha i +1, at linha-1. E no final do ciclo 1, obtemos a matriz A em sua formatriangular superior, perceba que podemos aproveitar este algoritmo para matrizes no
-
Captulo 2. LISTA DE EXERCCIOS 22
quadradas, pois temos como parmetros para matriz A, as variveis inteiras "linha"e"coluna", para o caso da matriz quadrada, basta apenas fazer "linha == coluna", em nossoalgoritmo. Abaixo temos ele em sua forma completa:
INICIO
Variveis do tipo inteiro: i,j,k,b,c, linha, coluna
Variveis reais: auxiliar
Matriz: A
Passo 1: Leia a matriz A(linha,coluna), com suas respectivas dimenses
Passo 2: (Ciclo 1) Para i = 1,2,..,linha-1
(Condicional 1) Se A(i,i)==0 , faa
(Ciclo 2) Para b = (i+1), (i+2),...,linha
(Condicional 2) Se A(b,i)6= 0, faa
(Ciclo 3) Para c = i,i+1,...,coluna
auxiliar = A(i,c)
A(i,c) = A(b,c)
A(b,c) = auxiliar
FIM (Ciclo 3)
Saia do Ciclo 2
FIM (Condicional 2)
FIM (Ciclo 2)
FIM (Condicional 1)
Passo 3: (Condicional 3) Se A(i,i) 6= 0, faa
(Ciclo 4) Para j=i+1,i+2,...,linha
(Ciclo 5) Para k = coluna,coluna-1, coluna-2,...,i
A(j,k) = A(j,k) - (A(i,k)/A(i,i))*A(j,i)
FIM (Ciclo 5)
FIM (Ciclo 4)
FIM (Condicional 3)
FIM (Ciclo 1)
-
Captulo 2. LISTA DE EXERCCIOS 23
FIM
2.5.4 Exerccio 4
Transformar o exerccio 3, desta lista, em uma funo e sub rotina.
2.6 LISTA 6
2.6.1 Exerccio 1
Dado uma matriz A de ordem n, ela pode ser decomposta da seguinte forma:
A = L + D + R
onde L uma matriz triangular inferior formada pela parte inferior da matriz A, D adiagonal de A e R uma matriz triangular superior formada pela parte superior da matrizA, isto :
lij =
aij, i > j0, i j ; dij = aij, i = j0, i 6= j ; rij =
aij, i < j0, i jObtenha L, R e D a partir de uma matriz A lida.
2.6.2 Exerccio 2
Dados n vetores, x1, x2,...,xn, com n posies, obtenha uma matriz A de ordem n,que contenha nas suas n colunas estes n vetores, isto :
A = [x1, x2, , xn]
2.6.3 Exerccio 3 - Resolvido
Escreva um programa que leia uma matriz A quadrada, em seguida transformeesta matriz em uma matriz triangular inferior, atravs do processo de escalonamento.
Sugesto1:
Veja o anexo D.
Sugesto2 :
Adapte o exerccio 3, da lista 5 (Seo 2.5.3).
Resoluo:
Adaptado o exerccio 3, da lista 5 (Seo 2.5.3), lembre que para cumprir o objetivoproposto, temos "linha==coluna". Os comentrios sobre as adaptaes, foram feitas emaula.
-
Captulo 2. LISTA DE EXERCCIOS 24
INICIO
Variveis do tipo inteiro: i,j,k,b,c, linha, coluna
Variveis reais: auxiliar
Matriz: A
Passo 1: Leia a matriz A(linha,coluna), com suas respectivas dimenses
Passo 2: (Ciclo 1) Para i = linha,linha-1,...,2
(Condicional 1) Se A(i,i)==0 , faa
(Ciclo 2) Para b = i-1, i-2,...,1
(Condicional 2) Se A(b,i)6= 0, faa
(Ciclo 3) Para c = 1,2,...,coluna
auxiliar = A(i,c)
A(i,c) = A(b,c)
A(b,c) = auxiliar
FIM (Ciclo 3)
Saia do Ciclo 2
FIM (Condicional 2)
FIM (Ciclo 2)
FIM (Condicional 1)
Passo 3: (Condicional 3) Se A(i,i) 6= 0, faa
(Ciclo 4) Para j= i-1,i-2,...,1
(Ciclo 5) Para k = 1,2,...,coluna
A(j,k) = A(j,k) - (A(i,k)/A(i,i))*A(j,i)
FIM (Ciclo 5)
FIM (Ciclo 4)
FIM (Condicional 3)
FIM (Ciclo 1)
FIM
-
25
PROVA SIMULADA
Ponderaes:
NO PERMITIDO a utilizao de funes, sub rotinas ou qualquer programapronto, contido na biblioteca de qualquer linguagem.
A interpretao da prova, faz parte da avaliao.
A prova deve ser feita em Pseudocdigo.
OBRIGATRIO explicar o que cada ciclo, condicional e variveis, utilizadasno algoritmo fazem. Os comentrios podem ser feitos "mais"a direita do programaou antes ou depois de ser feito determinada operao.
Exemplo de exerccio com resoluo comentada:
Questo: Leia dois valores inteiros a e b, em seguida, escreva se a sua soma umnmero primo.
INICIO
Variveis inteiras: a1, a2, a3, a4, i Comentrios:
varivel a1 o inteiro "a" lido.
varivel a2 o inteiro "b" lido.
varivel a3 o resultado da soma dos
inteiros "a"e "b".
varivel a4 verifica se a3 primo.
varivel i serve para realizar o ciclo 1.
Passo 1:
Leia a1 e a2
Passo 2:
a3 = a1 + a2
Passo 3:
Comentrios: Este passo verifica atravs da varivel a4 com auxlio do ciclo 1 econdicional 1, se a3 primo, atravs da propriedade de diviso inteiro por outrointeiro, aplicado na condicional 1.
-
Captulo 2. LISTA DE EXERCCIOS 26
a4 = 0
(Ciclo 1) Para i = 1, 2, .., a3
(Condicional l) Se i (a3i
) == a3, faa
a4 = a4 + 1
FIM Condicional l
FIM Ciclo 1
Passo 4:
(Condicional 2) Se a4 == 2, escreva
"A soma dos inteiros um nmero primo"
Se no, escreva
"A soma dos inteiros no primo"
FIM Condicional 2
Comentrios: Este passo conclui o problema, na condicional "a4==2", significaque os nicos divisores de a3 so 1 e ele mesmo, ou seja a3 primo, caso contrrioa3 no primo.
FIM
As questes so independentes.
Pode usar sub rotinas ou funes, propostas em outras questes, mesmo se a questono for feita.
-
Captulo 2. LISTA DE EXERCCIOS 27
Equivalncias em Pseudocdigo
Condicionais:
Sintaxe em Fortran Pseudo-linguagem
IF(condio) THEN Se condio, faainstruo1.. instruo1..instruo2.. instruo2..
... ...instruon.. instruon..
ELSE IF (condio) THEN (opcional) Se no, condioinstruo1.. instruo1..instruo2.. instruo2..
... ...instruon.. Equivalente instruon..
ELSE (opcional) (Exemplo) Se noinstruo1.. instruo1..instruo2.. instruo2..
... ...instruon.. instruon..
END IF fim Se
-
Captulo 2. LISTA DE EXERCCIOS 28
Ciclos:
Sintaxe em Fortran Pseudo-linguagem
DO i= inicio,fim,passo Para i=1,2,3,...,ninstruo1... Equivalente instruo1...instruo2.. (Exemplo) instruo2..instruo3.. passo = 1 instruo3..
... fim = n ...instruon... incio = 1 instruon...
END DO fim para
DO WHILE (condio) Enquanto (condio), faainstruo1... instruo1instruo2.. Equivalente intruo2instruo3.. (Exemplo) instruo3
... ...instruon... instruon
END DO fim enquanto
-
Captulo 2. LISTA DE EXERCCIOS 29
Funes e Sub rotinas:
-
Captulo 2. LISTA DE EXERCCIOS 30
Questo 1
Considere o sistema linear:
a11x1 + a12x2 + a13x3 + a1nxn = b1a21x1 + a22x2 + a23x3 + a2nxn = b2a31x1 + a32x2 + a33x3 + a3nxn = b3... ... ... . . . = ...
an1x1 + an2x2 + an3x3 + annxn = bn
Faa uma funo que transforme o sistema acima, para um equivalente, em suaforma triangular superior. A funo deve ler uma matriz A, equivalente ao sistema ampliadoacima, com seu nmero de linhas e colunas, retornando outra matriz, no formato de umsistema triangular superior ampliado, escalonada a partir da matriz A. A funo deve serdenotada por superior.
Resoluo: Adaptao do exerccio 3, lista 5 (Seo 2.5.3)
INICIO
Funo Superior (B,linha,coluna)
Parmetros de entrada (Leitura):
Variveis inteiras: linha, coluna
Matriz: B(linha,coluna)
Parmetro de sada (Resultado):
Matriz: A(linha,coluna)
Variveis locais da funo:
Variveis inteiras: i,j,k, b, c
Variveis reais: auxiliar
Inicio do algoritmo da funo
Passo 1: Faa A = B
Passo 2: (Ciclo 1) Para i = 1,2,..,linha-1
(Condicional 1) Se A(i,i)==0 , faa
(Ciclo 2) Para b = (i+1), (i+2),...,linha
(Condicional 2) Se A(b,i)6= 0, faa
(Ciclo 3) Para c = i,i+1,...,coluna
auxiliar = A(i,c)
-
Captulo 2. LISTA DE EXERCCIOS 31
A(i,c) = A(b,c)
A(b,c) = auxiliar
FIM (Ciclo 3)
Saia do Ciclo 2
FIM (Condicional 2)
FIM (Ciclo 2)
FIM (Condicional 1)
Passo 3: (Condicional 3) Se A(i,i) 6= 0, faa
(Ciclo 4) Para j=i+1,i+2,...,linha
(Ciclo 5) Para k = coluna,coluna-1, coluna-2,...,i
A(j,k) = A(j,k) - (A(i,k)/A(i,i))*A(j,i)
FIM (Ciclo 5)
FIM (Ciclo 4)
FIM (Condicional 3)
FIM (Ciclo 1)
Fim do algoritmo da funo
FIM
Questo 2
Escreva um programa em seu pseudocdigo, que leia uma matriz A de ordem n e ovetor b de ordem m, do sistema linear:
Ax = b.
O resultado do programa deve ser o vetor x (quando possvel), que satisfaa aequao acima de forma nica, isto , caso exista outro vetor x, que satisfaa o sistema,ou no possua soluo, o programa deve no lugar escrever uma mensagem de erro, dizendo"O Sistema inconsistente ou tem solues mltiplas".
Sugesto:
Um sistema linear de ordem n triangular superior, se tiver a forma:
-
Captulo 2. LISTA DE EXERCCIOS 32
a11x1 + a12x2 + a13x3 + a1nxn = b1a22x2 + a23x3 + a2nxn = b2
a33x3 + a3nxn = b3. . . = ...
annxn = bn
Se aii 6= 0, para i = 1, 2, .., n. Podemos resolver este sistema linear algebricamente,pelas frmulas:
xn =bnann
,
xi =bi
nj=i+1 aijxj
aii, i = n 1, .., 1
Utilize a funo desenvolvida na Questo 1 "superior", lembrando de sua sintaxede utilizao:
superior(A, linha, coluna)
Resoluo parcial:
Observao: Lembre da justificativa terica deste algoritmo, os comentrios doque cada passo, ciclos e condicionais fazem, foram feitos na aula, note que o vetor b1, comalguns ajustes desnecessrio no programa, a ideia dele, era mostrar de forma "gritante"autilizao da somatria proposta na sugesto, para obteno do vetor x. Note tambm,para resoluo do problema, temos "linha==coluna".
Este programa encontra o x nico, quando possvel e caso contrrio emite amensagem de erro, conforme era proposto no enunciado.
INICIO
Variveis inteiras: linha, coluna, i, j, k1
Variveis reais: soma
Matrizes: A e C
Vetores: b, b1 e x
(Passo 1)
Leia a matriz A(linha,coluna), com suas dimenses.
(Passo 2)
Guarde o vetor b(linha), b1(linha), x(linha) e C(linha,coluna+1)
se necessrio, em seguida leia o vetor b.
-
Captulo 2. LISTA DE EXERCCIOS 33
(Passo 3)
(Ciclo 1) Para i = 1,2,.., linha
C(i,coluna+1) = b(i)
(Ciclo 2) Para j = 1,2,...,coluna
C(i,j) = A(i,j)
FIM (Ciclo 2)
FIM (Ciclo 1)
(Passo 4)
C = SUPERIOR(C,linha,coluna+1)
(Passo 5)
k1 = 0
(Ciclo 3) Para i=1,2,..,linha
(Condicional 1) Se C(i,i)==0, faa
k1 = k1+1
FIM Condicional 1
FIM Ciclo 3
(Passo 6)
(Condicional 2) Se k1 == 0, faa
(Ciclo 4) Para i = 1,2,..,linha
b1(i) = C(i,coluna+1)
FIM Ciclo 4
x(linha) = b1(linha) / C(linha,linha)
(Ciclo 5) Para i = linha-1, linha-2,..,1
soma = 0
(Ciclo 6) Para j = i+1,i+2,...,linha
soma = soma + C(i,j)*x(j)
FIM Ciclo 6
x(i) = ( b1(i) - soma ) / ( C(i,i) )
FIM Ciclo 5
-
Captulo 2. LISTA DE EXERCCIOS 34
Se no, escreva
"O sistema inconsistente ou tem solues mltiplas"
FIM Condicional 2
FIM
Questo 3
Adapte o exerccio 1, da lista 4 (Seo 2.4.1), para uma funo onde lida umamatriz A e B, com suas ordens n, retornando outra matriz, resultante do produto entreelas. A funo deve ser denotada por produto.
Questo 4
Escreva um programa em seu pseudocdigo, para ler do teclado um conjunto denmeros inteiros positivos. Para cada nmero lido, calcular o seu sucessor par, imprimindo-os dois a dois.
Observao: o zero no deve ser considerado para o clculo do sucessor par.
Exemplo:
Conjunto lido: {1, 2, 3, 8, 2, 0}
Exemplo de sada do programa:
1Sucessor: 2
2Sucessor: 4
3Sucessor: 4
8Sucessor: 10
2Sucessor: 4
-
Captulo 2. LISTA DE EXERCCIOS 35
Questo 5
Escreva um programa em seu pseudocdigo, que realize a sequncia de operaes:
A1 = A, q1 = tr(A1), B1 = A1 q1I;
A2 = AB1, q2 =tr(A2)
2 , B2 = A2 q2I;
A3 = AB2, q3 =tr(A3)
3 , B3 = A3 q3I;... ... ...
An = ABn1, qn =tr(An)
n, Bn = An qnI;
em que A, Ai e Bi, so matrizes de ordem n, para i = 1, .., n. A anotao "tr(A)",corresponde ao valor do trao da matriz A, isto :
tr(A) =n
i=1aii
O programa deve ler a matriz A e escrever como resultados: a constante qn e a matriz Bn.
Sugesto: Utilize a funo "produto", desenvolvida na questo 3, lembrando de sua sintaxede utilizao:
produto(A, B, n)
Questo 6
Escreva um programa em seu pseudocdigo, para calcular a soma dos nmerospares e mpares, contidos no intervalo de [0, N ].
Observao: No considere o zero na contagem.
Exemplo:N = 2soma dos pares = 2soma dos mpares = 1
N = 3soma dos pares = 2soma dos mpares = 4
Questo 7
Resolva o exerccio 5, da lista 4 (Seo 2.4.5 )
-
Anexos
-
37
ANEXO A Material disciplinaPROG-I(PUC RIO)
Disciplina: Programao I (Prog I)
Site da disciplina: http://www.inf.puc-rio.br/ inf1005/index.lp
Conforme utilize algum material, deste site, irei anexando.
Observao: Esta disciplina voltada para linguagem em C++
Arquivos utilizados:
Prog3.pdf
ProgILista2.pdf
www.inf.puc-rio.br/~inf1005/index.lp
-
1
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
Algoritmos e Pseudocdigo
1
INF1005 Programao I
Prof. Hlio Lopes
sala 408 RDC
algoritmos e pseudocdigo
tpicos algoritmo definies
representao e resoluo de problemas
representao de programa
pseudocdigo
fluxograma
construes
entrada e sada
condicionais
repeties
2
-
2
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
algoritmos
3
algoritmo - definies
especificao precisa (no ambgua) de um comportamento que visa resolver um problema bem
definido
sequncia finita de instrues precisas que podem ser executadas mecanicamente num perodo de tempo
finito e com uma quantidade de esforo finito
programa de computador algoritmo codificado em uma linguagem de programao
4
-
3
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
algoritmo - definies
especificao precisa (no ambgua) de um comportamento que visa resolver um problema bem
definido
Uma receita culinria um algoritmo? "sal a gosto" vs. "1/4 colher (ch) de sal"
"bata bem" vs. "bata at a massa ficar homognea"
"forno mdio" vs. "forno a 220C"
5
algoritmo definies
especificao precisa (no ambgua) de um comportamento que visa resolver um problema bem
definido
condies iniciais (estado de problema) como as coisas so
objetivos (estado desejado) como as coisas deveriam ser
recursos meios ou mtodos para transformar um estado de problema
desde as condies iniciais at os objetivos
ex: movimentos possveis em um jogo 6
-
4
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
exemplo
Escreva um algoritmo com objetivo de matar a fome na rua
1. ______________________________________________
2. ______________________________________________
3. ______________________________________________
4. ______________________________________________
5. ______________________________________________
6. ______________________________________________
EX. 01
algoritmo pessoa com fome pessoa sem fome
7
exemplo isto um algoritmo?
objetivo: matar a fome na rua
1. decidir onde comer, conforme tempo e dinheiro disponvel
2. ir at o local escolhido
3. decidir o que comer, conforme cardpio, tempo e dinheiro disponvel
4. fazer o pedido
5. pagar
6. aguardar o pedido
7. comer
8
-
5
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
resolver o problema antes de programar Qual a situao inicial? J temos todos os dados de entrada?
Esses dados so especficos a uma nica situao ou podemos generalizar?
Existe alguma notao para representar de forma sucinta os dados e os estados intermedirios?
Qual o objetivo? / Quais so os objetivos? H um nico objetivo, ou so vrios?
Cada objetivo pode ser dividido em sub-objetivos, ou no?
Os (sub-)objetivos so independentes, ou no?
H obstculos a serem vencidos? Como podem ser vencidos?
H restries na elaborao da soluo? (tempo, espao em memria, custo)
Quais so os recursos (movimentos, operaes, procedimentos, regras, transformaes)?
Para cada recurso, h restries ou pr-condies para sua aplicao?
H outros recursos mais simples que satisfaam essas pr-condies?
Quando voc aplica um recurso, o que muda? (variantes)
Quando voc aplica um recurso, o que permanece igual? (invariantes)
H outros recursos mais poderosos para resolver esse problema?
adaptado de Blank & Barnes (1998) The Universal Machine. 9
exemplo Como chegar ao destino?
Av.2 Av.3 Av.4
Rua 7
Rua 6
Rua 5
Rua 4
Av.1
10
-
6
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
problemas e solues
um problema pode ter vrias solues
algumas solues so melhores do que outras
um problema pode ter solues parciais
restries no espao de problema podem ajudar na
busca por uma soluo
11
representao do espao de problema
descrio do mundo: ruas: [4,7]
avenidas: [1,4]
convenes de representao: posio: (r,a)
obstculo: (r1,a1,r2,a2)
condies iniciais: posio: (7,1)
obstculos: { (6,2,7,2), (4,2,5,2), (5,3,6,3), (6,4,7,4) }
objetivo: posio: (4,3)
Av.2 Av.3 Av.4
Rua 7
Rua 6
Rua 5
Rua 4
Av.1
Quais as consequncias dessa representao?
12
-
7
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
algoritmo - exemplo
objetivo: verificar se um aluno est aprovado (mdia das 3 notas >= 5.0) ou reprovado (caso
contrrio)
13
como representar um algoritmo
1. Obter as trs notas das provas do aluno
2. Calcular a mdia aritmtica das trs notas
3. Se a mdia for maior ou igual a 5, escrever aprovado
4. Caso contrrio, escrever reprovado
linguagem natural
variveis media, nota1, nota2, nota3 incio leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) ento
escreva aluno aprovado seno
escreva aluno reprovado fim-se fim
pseudocdigo
fluxograma
incio
leia (nota1, nota2, nota3);
media (nota1+nota2+nota3)/3;
media >= 5.0?
escreva (aprovado);
fim
escreva (reprovado);
sim
no
14
-
8
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
algoritmo em pseudocdigo
variveis media, nota1, nota2, nota3
incio
leia nota1, nota2, nota3
media = (nota1+nota2+nota3)/3
se (media >= 5) ento
escreva aluno aprovado
seno
escreva aluno reprovado
fim-se
fim
15
algoritmo em pseudocdigo
variveis media, nota1, nota2, nota3
incio
leia nota1, nota2, nota3
media = (nota1+nota2+nota3)/3
se (media >= 5) ento
escreva aluno aprovado
seno
escreva aluno reprovado
fim-se
fim
variveis armazenam valores (dados, informaes) necessrios soluo do problema:
dados de entrada: nota1, nota2, nota3
dados utilizados no processamento: mdia
dados de sada
16
-
9
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
algoritmo exemplo
objetivo: a partir de trs notas de um aluno, verificar se ele est:
aprovado (mdia >= 5.0)
em prova final (mdia < 5.0 e mdia >= 3.0) ou
reprovado (mdia < 3)
17
sim
fluxograma (com defeito)
incio
leia (nota1, nota2, nota3);
media (nota1+nota2+nota3)/3;
media >= 5.0?
escreva (aprovado);
fim
escreva (reprovado);
sim
no
escreva (em prova final);
media > 3.0?
no
objetivo: a partir de trs notas de um aluno, verificar se ele est:
aprovado (mdia >= 5.0)
em prova final (mdia < 5.0 e mdia >= 3.0) ou
reprovado (mdia < 3)
18
-
10
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
sim
fluxograma (com defeito)
incio
leia (nota1, nota2, nota3);
media (nota1+nota2+nota3)/3;
media >= 5.0?
escreva (aprovado);
fim
escreva (reprovado);
sim
no
escreva (em prova final);
media > 3.0?
no
objetivo: a partir de trs notas de um aluno, verificar se ele est:
aprovado (mdia >= 5.0)
em prova final (mdia < 5.0 e mdia >= 3.0) ou
reprovado (mdia < 3)
19
sim
fluxograma (corrigido)
incio
leia (nota1, nota2, nota3);
media (nota1+nota2+nota3)/3;
media >= 5.0?
escreva (aprovado);
fim
escreva (reprovado);
sim
no
escreva (em prova final);
media >= 3.0?
no
objetivo: a partir de trs notas de um aluno, verificar se ele est:
aprovado (mdia >= 5.0)
em prova final (mdia < 5.0 e mdia >= 3.0) ou
reprovado (mdia < 3)
20
-
11
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
algoritmo em pseudocdigo
variveis media, nota1, nota2, nota3
incio
leia nota1, nota2, nota3
media = (nota1+nota2+nota3)/3
se (media >= 5) ento
escreva aluno aprovado
seno
se (media >= 3) ento
escreva aluno em prova final
seno
escreva aluno reprovado fim-se
fim-se
fim
variveis media, nota1, nota2, nota3
incio
leia nota1, nota2, nota3
media = (nota1+nota2+nota3)/3
se (media >= 5) ento
escreva aluno aprovado
seno se (media >= 3) ento
escreva aluno em prova final
seno
escreva aluno reprovado
fim-se fim
21
entrada e sada
22
-
12
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
entrada e sada
23
variveis media, nota1, nota2, nota3 incio leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) ento
escreva aluno aprovado seno
escreva aluno reprovado fim-se fim
pseudocdigo
exerccio
Escreva o pseudocdigo ou desenhe o fluxograma de um programa que leia do teclado uma temperatura em Fahrenheit e
escreva na tela a temperatura equivalente em Celsius (tempC =
(tempF-32)/1.8).
EX. 02
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
24
-
13
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
condicionais
25
controle de execuo: condicionais
variveis media, nota1, nota2, nota3 incio leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) ento
escreva aluno aprovado seno
escreva aluno reprovado fim-se fim
pseudocdigo fluxograma
incio
leia (nota1, nota2, nota3);
media (nota1+nota2+nota3)/3;
media >= 5.0?
escreva (aprovado);
fim
escreva (reprovado);
sim
no se (condio) ento
instruo V1 instruo V2 instruo Vn
seno instruo F1 instruo F2 instruo Fn
fim-se
instrues executadas se a condio for verdadeira
instrues executadas se a condio for falsa
26
-
14
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
dvidas?
27
exerccio
Escreva o pseudocdigo ou desenhe o fluxograma de um programa que leia do teclado a probabilidade de chuva e escreva
na tela sol, caso a probabilidade seja menor que 60%; e chuva,
caso contrrio.
EX. 03
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
28
-
15
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
condicionais expresses booleanas
uma condio representada por uma expresso booleana, que resulta em um valor verdadeiro ou falso
exemplos:
media > 5 maior que
media >= 5 maior ou igual a
media < 5 menor que
media = 3) escreva (em prova final)
fim
se (nota1 == 10 ou nota2 == 10) escreva (excelente!)
fim
A B A e B
V V V
V F F
F V F
F F F
A B A ou B
V V V
V F V
F V V
F F F
conjuno (E) resultado s verdadeiro se
ambos os valores forem verdadeiros
disjuno (OU) resultado s falso se ambos
os valores forem falsos
30
-
16
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
exerccio
Escreva o pseudocdigo ou desenhe o fluxograma de um programa que obtm as 3 notas de um aluno, calcula sua mdia e,
caso o aluno tenha sido aprovado, escreva na tela aprovado. O
aluno aprovado se ele teve mdia maior ou igual a 5 e nenhuma
nota menor que 3.
EX. 04
31
________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________
repeties
32
-
17
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
controle de execuo: repeties variveis
num, media, nota1, nota2, nota3 incio leia num enquanto (num > 0) faa
leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 se (media >= 5) ento escreva aluno aprovado seno escreva aluno reprovado fim-se num= num 1
fim-enquanto fim
pseudocdigo fluxograma incio
leia (nota1, nota2, nota3);
media (nota1+nota2+nota3)/3;
media >= 5.0?
escreva (aprovado);
fim
escreva (reprovado);
sim
no enquanto (condio) faa
instruo V1 instruo Vn
fim-enquanto
instrues executadas enquanto a condio for verdadeira
instrues executadas quando a condio ou se torna falsa
num = num - 1
num > 0?
leia num
sim
no
33
exerccio
Qual a sada dos seguintes programas?
EX. 05
_______________________________ _______________________________ _______________________________ _______________________________
variveis num
incio num = 0 enquanto (num < 3) faa escreva num num= num + 1 fim-enquanto
fim
variveis num
incio num = 0 enquanto (num < 3) faa escreva num num= num - 1 fim-enquanto
fim
_______________________________ _______________________________ _______________________________ _______________________________
valor de num a cada iterao
I0 I1 I2 I3 I4 I5 I6 I7 I8
num
sada sada
valor de num a cada iterao
I0 I1 I2 I3 I4 I5 I6 I7 I8
num 34
-
18
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
exerccio EX. 06
Escreva o pseudocdigo de um programa que l o nmero de alunos de uma turma e, para cada aluno, l as suas trs notas,
escreve sua mdia e, no final, escreve a mdia da turma.
35
________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________
exerccio EX. 06
Escreva o pseudocdigo de um programa que l o nmero de alunos de uma turma e, para cada aluno, l as suas trs notas,
escreve sua mdia e, no final, escreve a mdia da turma.
variveis num_alunos, i media, media_turma, nota1, nota2, nota3
incio leia num_alunos i = 0 media_turma = 0 enquanto (i < num_alunos) faa leia nota1, nota2, nota3 media = (nota1+nota2+nota3)/3 media_turma = media_turma + media i = i + 1 fim-enquanto media_turma = media_turma / num_alunos escreva media_turma
fim
Em que situaes este programa falha?
36
-
19
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
exerccio EX. 07
Escreva o pseudocdigo ou desenhe o fluxograma de um programa que l um nmero no negativo e escreve na tela o seu
fatorial. Lembrando: n! = n x (n-1) x ... x 1
37
________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________
exerccio EX. 07
Escreva o pseudocdigo de um programa que l um nmero no negativo e escreve na tela o seu fatorial.
Lembrando: n! = n x (n-1) x ... x 1
variveis f, n
incio
leia n
f = 1
enquanto (n > 1) faa
f = f * n
n = n - 1
fim-enquanto
escreva f
fim
Em que situao esse programa falha?
38
-
20
INF 1005 Programao I - Prof. Hlio Lopes 8/7/12
dvidas? Prof. Hlio Lopes [email protected] sala 408 RDC
39
-
Hlio Lopes
[email protected] Departamento de Informtica Rua Marqus de So Vicente, 225 Gvea 22451-900 Rio de Janeiro RJ Tel. (21) 3527-1500 r.4350 Fax (21) 3527-1530
INF 1005 Programao I lista 02 Algoritmos e Pseudocdigo
1. Escreva um algoritmo com o objetivo de matar a fome na rua:
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
2. Dado o objetivo do programa representado abaixo, verifique qual o erro:
3. Escreva o pseudocdigo ou desenhe o fluxograma de um programa que leia do teclado uma temperatura em Fahrenheit e escreva na tela a temperatura equivalente em Celsius (tempC = (tempF-32)/1.8).
4. Escreva o pseudocdigo ou desenhe o fluxograma de um programa que leia do teclado a probabilidade de chuva e escreva na tela sol, caso a probabilidade seja menor que 60%; e chuva, caso contrrio.
sim
incio
leia (nota1, nota2, nota3);
media (nota1+nota2+nota3)/3;
media >= 5.0?
escreva(aprovado);
fim
escreva(reprovado);
sim
no
escreva(em prova final);
media > 3.0?
no
objetivo: a partir de trs notas de um aluno,
verificar se ele est:
aprovado (mdia > = 5.0)
em prova final (mdia < 5.0 e mdia > = 3.0) ou
reprovado (mdia < 3)
-
INF 1005 Programao I lista 02 Algoritmos e Pseudocdigo
Pgina 2 de 2
5. Escreva o pseudocdigo ou desenhe o fluxograma de um programa que obtm as 3 notas de um aluno, calcula sua mdia e, caso o aluno tenha sido aprovado, escreva na tela aprovado. O aluno aprovado se ele teve mdia maior ou igual a 5 e nenhuma nota menor que 3.
6. Qual a sada dos seguintes programas?
7. Escreva o pseudocdigo de um programa que l o nmero de alunos de uma turma e, para cada aluno, l as suas trs notas, escreve sua mdia e, no final, escreve a mdia da turma.
8. Escreva o pseudocdigo ou desenhe o fluxograma de um programa que l um nmero no negativo e escreve na tela o seu fatorial. Lembrando: n! = n x (n-1) x ... x 1
____________________________________________________________________________________________________________________________
variveisnum
incionum = 0enquanto (num < 3) faa
escreva numnum= num + 1
fim- enquantofim
variveisnum
incionum = 0enquanto (num < 3) faa
escreva numnum= num - 1
fim- enquantofim
____________________________________________________________________________________________________________________________
valor de num a cada iterao
I0 I1 I2 I3 I4 I5 I6 I7 I8
num
sada sada
valor de num a cada iterao
I0 I1 I2 I3 I4 I5 I6 I7 I8
num
-
60
ANEXO B LISTA DE EXERCCIOS 2014
B.1 LISTA 11) Faa um programa que mostre um carter qualquer digitado pelo usurio. (Depoisaltere o cdigo para mostrar um dia da semana qualquer digitado pelo usurio)
2) Escreva um programa que leia 5 nmeros e imprima a soma dos nmeros lidos.
3) Faa um programa que leia a data de nascimento e o ano atual e mostre:
a) a idade da pessoa em anos
b) a idade da pessoa em meses
c) a idade da pessoa em dias
4) Fazer um programa que l um conjunto de 6 valores, um de cada vez, e imprima o valorlido, seu quadrado, seu cubo e sua raiz quadrada.
5) Tendo como dado de entrada a altura de uma pessoa, faa um programa que calcule emostre seu peso ideal, utilizando a seguinte frmula: peso ideal = (72.7*h) 58
6) Faa um programa que receba como entrada uma determinada temperatura em grausCelsius e mostre a temperatura em fahrenheit. Fahrenheit = (9/5)*(Celsius) + 32
7) Faa programa que l dois pontos e calcula a distncia entre esses pontos.
8) Faa um programa que leia dois valores inteiros e um valor real calcule e mostre:
a) a soma dos dois nmeros inteiros.
b) a soma dos trs nmeros.
c) o resto da diviso do primeiro nmero inteiro pelo segundo nmero inteiro.
d) o quociente da diviso do primeiro nmero inteiro pelo segundo nmero inteiro.
e) o produto dos trs nmeros.
f) a diviso do terceiro nmero pelo segundo nmero inteiro.
9) Dados os comprimentos dos catetos de um tringulo retngulo, preparar um programapara determinar e imprimir o comprimento da hipotenusa.
10) Faa um programa em Fortran para construir a tabela de multiplicao de nmeros de1 a 10 (ex.: 1 x 1 = 1, 1 x 2 = 2, etc.). Onde o valor a ser multiplicado ser dado.
11) Faa um programa FORTRAN que receba, para um aluno, trs notas de provas equatro de trabalhos, calcule a mdia parcial (ponderada) sabendo que o peso das medias
-
ANEXO B. LISTA DE EXERCCIOS 2014 61
das provas representa 70% e a mdia dos trabalhos 30%. O programa calcular tambma nota mnima para que o aluno passe na prova final, utilizando a frmula apresentadaabaixo. Todos os dados devem ser mostrados.
B.2 LISTA 21) Elabore um programa para testar se uma senha digitada igual a senha. Se a senhaestiver correta escreva Acesso permitido, do contrario emita a mensagem Voc no temacesso ao sistema.
2) Faa um programa que leia 3 nmero inteiro os imprima em ordem crescente
3) Faa um programa que leia os lados de um tringulo retngulo e exiba sua hipotenusa.Se a hipotenusa for maior que 100 escreva, hipotenusa muito grande, caso contrrio exibahipotenusa pequena.
4) Faa um programa que l o nome de um produto, o preo e a quantidade comprada.Escreva o nome do produto comprado e o valor total a ser pago, considerando que sooferecidos descontos pelo nmero de unidades compradas, segundo a tabela abaixo:
a) At 10 unidades: valor total
b) De 11 a 20 unidades: 10% de desconto
c) De 21 a 50 unidades: 20% de desconto
d)Acima de 50 unidades: 25% de desconto
5) Faa um programa que leia um nmero inteiro e positivo e mostre uma mensageminformando se esse nmero par ou impar.
6) Faa um programa que leia o sexo da pessoa (M para masculino e F para feminino),o peso e a altura e mostre uma mensagem notificando se a pessoa esta acima do peso,abaixo do peso ou em seu peso ideal utilizando as respectivas frmulas.
peso_ideal_masculino = (72.7h) 58
peso_ideal_feminino = (62.1h) 44.7
7) Um aluno realizou 3 provas de uma disciplina. Considerando o critrio abaixo, faa umprograma que mostre se ele ficou para exame, se foi aprovado ou se foi reprovado. Se forpara exame, mostrar a nota final e dizer se foi aprovado ou reprovado.
Mdia >=7 - Aprovado
Mdia >= 3 E Media < 7 - Exame
Mdia < 3 - Reprovado
Se for para exame, a nova mdia deve ser:
-
ANEXO B. LISTA DE EXERCCIOS 2014 62
Final = (media + exame) / 2
Final >= 5 Aprovado
Final < 5 Reprovado
8) Faa uma calculadora que efetue as 4 operaes bsicas. Dever conter um menu ondeliste: 1-Adio 2- Subtrao 3-Diviso 4-Multiplicao
Uma varivel que receba o Cdigo da operao a ser feita
Duas variveis que recebam os valores que devero ser calculados.
Default: Voc escolheu uma operao invlida
9)Leia 5 valores e informe quantos destes so negativos.
10) Leia dois valores inteiros e positivos e verifique se so mltiplos entre si.
11) Crie um programa que receba o valor de x, e calcule e imprima o valor da funo f ,definida para os casos:
(a) f(x) =
1, x 12, 1 < x 2x2, 2 < x 3x3, x > 3
; (b) f(x) = 5x+3x216
B.3 LISTA 31) Faa um programa com uma sub-rotina e funo que calcule X elevado Y. Leia 2valores de X e Y e exiba o resultado da chamada da sub-rotina na tela. Exemplo: 2 elevado 3 igual 2*2*2 = 8.
2) Crie uma sub-rotina que receba como parmetro uma matriz A(n,n) e retorne o menorelemento de sua diagonal secundria.
3) Crie uma sub-rotina que calcule o fatorial de um numero inserido pelo usurio.
4) Faa um programa para receber um nmero inteiro do usurio. Em seguida verifique seele :
- par
- divisvel por trs
- divisvel por cinco.
- primo
- perfeito ( aquele cuja soma de seus divisores (excluindo ele prprio) igual a ele mesmo,por exemplo, o nmero 6 tem como divisores 1,2 e 3, cuja soma 6.
-
ANEXO B. LISTA DE EXERCCIOS 2014 63
Crie uma subrotina para cada item acima. Cada funo deve receber o nmero aser verificado, como argumento, e devolver 1 para verdadeiro e 0 para falso.
5) Leia uma matriz de dimenso n e crie uma sub rotina que verifique se a matriz simtrica.
6) Desenvolva um programa para calcular o valor de funes trigonomtricas. Oferea parao usurio um menu com as opes:
Escolha a funo trigonomtrica:
1 seno
2 cosseno
3 tangente
Use as Sries de Taylor para realizar os clculos do seno e cosseno.
cos(x) =
n=0
(1)n(2n)! x
2n x (B.1)
sen(x) =
n=0
(1)n(2n + 1)!x
2n+1 x (B.2)
-
64
ANEXO C APOSTILA DE FORTRAN
Apostila da disciplina de Fortran do departamento de engenharia mecnica daUFPR, ministradas pelos professores Carlos Henrique Marchi e professor Luciano Araki.
-
ANEXO C. APOSTILA DE FORTRAN 65
C.1 CAP.1 - INTRODUO
-
Captulo 1. INTRODUO
OBJETIVOS DO CAPTULO
Conceitos de: linguagem de programao, FORTRAN, projeto, programa-fonte, programa-objeto,
programa-executvel, compilao, comando
Procedimentos bsicos para programar em linguagem FORTRAN
Comandos do FORTRAN: WRITE e END
1.1 USO DESTE TEXTO EM DISCIPLINAS
O objetivo deste texto ensinar a implementar programas com a linguagem FORTRAN 95 e,
implicitamente, a desenvolver algoritmos para resolver problemas bsicos de matemtica e fsica. Os
captulos 1 a 13 deste texto so recomendados para disciplinas introdutrias de programao em cursos de
engenharia. J os captulos 14 a 20 podem ser usados em cursos avanados de programao em nvel de
graduao.
Cada captulo foi estruturado para ser lecionado em aulas com durao de duas horas. Uma
disciplina de 30 horas vem sendo ministrada no primeiro perodo semestral do curso de graduao em
engenharia mecnica da Universidade Federal do Paran. Esta disciplina envolve os captulos 1 a 13 mais
duas provas. Outra disciplina, envolvendo os captulos 1 a 20, com 45 horas, est prevista para ser
lecionada em nvel de ps-graduao.
1.2 BIBLIOGRAFIA
No objetivo deste texto entrar em detalhes sobre hardware e software de computadores. Aos
interessados nestes aspectos recomenda-se o livro de Ramalho (2000), que adotado neste texto como
referncia para termos tcnicos de informtica em portugus. Dois textos recomendados sobre algoritmos
so o livro de Forbellone e Eberspacher (2000) e a apostila de Moraes (2000). O material apresentado
aqui baseado no livro de Adams et al. (1997), que se constitui num manual completo sobre a linguagem
FORTRAN 95, padronizada pelas organizaes ISO (International Standadrs Organization) e ANSI
(American National Standards Institute).
Captulo 1. Introduo 1
-
1.3 FORTRAN
Existe uma infinidade de linguagens de programao, por exemplo, Assembly, Cobol, Visual
Basic, Pascal, Java, C++ etc (Ramalho, 2000, p. 114 e 124-30). Elas so usadas para criar os programas,
tambm denominados de softwares ou aplicativos, que so empregados nos computadores. A utilidade
das linguagens de programao pode ser percebida ao se lembrar para que so usados, por exemplo: os
sistemas operacionais Windows, Unix e Linux; os aplicativos Word, Excel, PowerPoint, FrontPage,
CorelDraw, Origin e Acrobat; os navegadores da internet Netscape e Explorer; e os programas dos caixas
automticos dos bancos.
A linguagem FORTRAN, contrao de FORmula TRANslation (Traduo de Frmulas), ainda a
principal linguagem de programao usada em engenharia e aplicaes cientficas (Adams, 2000, p. 1).
Foi criada em 1954. Sua primeira verso comercial surgiu em 1957. As verses do FORTRAN
padronizadas pela ANSI e ISO so:
1) Ano 1966 = FORTRAN 66
2) Ano 1978 = FORTRAN 77
3) Ano 1992 = FORTRAN 90
4) Ano 1997 = FORTRAN 95
1.4 CONVENES
Para melhor entendimento deste texto, as seguintes convenes so adotadas:
1) So mostrados na cor azul links para endereos de sites da internet ou para arquivos que definem
termos e procedimentos importantes para este texto.
2) Comandos de programas ou aplicativos que devem ser executados ao longo do texto so
mostrados em negrito. A vrgula usada para separar uma seqncia de comandos. 3) So apresentados na cor vermelha: os programas, seus dados (entradas) e seus
resultados (sadas).
4) Qualquer referncia ao sistema operacional Windows NT 4.0 abreviado para Windows.
5) Qualquer referncia ao aplicativo Fortran PowerStation 4.0, da Microsoft, abreviado para Fortran.
6) Qualquer referncia linguagem FORTRAN abreviado para FORTRAN, tudo em maisculo para
distinguir do aplicativo Fortran PowerStation 4.0.
7) Devido grande quantidade de termos em ingls, no feito qualquer distino para palavras em
portugus.
8) Comandos, isto , palavras-chave da linguagem FORTRAN so apresentados em letras maisculas.
Captulo 1. Introduo 2
-
1.5 INICIALIZAO DO APLICATIVO FORTRAN POWERSTATION 4.0
Para seguir este texto, no necessrio nenhum conhecimento anterior sobre linguagem de
programao. necessrio apenas ter conhecimentos bsicos sobre o sistema operacional Windows NT
4.0 ou verses mais recentes. Todos os programas em FORTRAN apresentados neste texto foram
editados e compilados com o aplicativo Fortran PowerStation 4.0, da Microsoft. Alm de seus manuais,
este aplicativo contm o livro de Hahn (1994) sobre FORTRAN 90 e o item Reference onde so descritos
todos os comandos do FORTRAN, incluindo exemplos.
Conforme mostrado na Figura 1.1, para iniciar o uso deste aplicativo, deve-se executar no
Windows: Start, Programs, Fortran PowerStation 4.0, Microsoft Developer Studio. Para facilitar a
edio dos programas, recomenda-se maximizar a janela principal do Fortran, clicando sobre o cone
central que fica no canto superior direito. Fazendo isso, o aspecto do Fortran dever ser semelhante
quele mostrado na Figura 1.2.
Figura 1.1 Inicializao do aplicativo Fortran PowerStation 4.0.
Na janela principal do Fortran, mostrada na Figura 1.2, pode-se perceber:
Captulo 1. Introduo 3
-
Figura 1.2 Janela principal do aplicativo Fortran PowerStation 4.0.
1) Na barra em azul, o cone do Fortran e o ttulo da janela principal: Microsoft Developer Studio.
2) Abaixo da barra em azul, o menu do Fortran, ou seja, as opes existentes para usar este aplicativo,
que so: File, Edit, View, Insert, Build, Tools, Window e Help.
3) A janela principal do Fortran dividida em trs partes ou subjanelas. Se no estiver aparecendo a
subjanela inferior, mostrada na Figura 1.2, deve-se executar: View, Output.
4) Na subjanela do lado esquerdo, tem-se o diretrio principal dos manuais do Fortran, destacando-se:
Reference, que uma lista de comandos do FORTRAN 90, incluindo explicaes e exemplos de uso;
e Fortran 90 for Scientists and Engineers, que um livro sobre a linguagem FORTRAN 90. Esta
subjanela tambm usada para mostrar os nomes dos programas editados na linguagem FORTRAN.
Quando um programa estiver sendo editado, para acessar os manuais, deve-se clicar sobre a opo ?
InfoView, mostrada na Figura 1.2, que fica na parte inferior da subjanela do lado esquerdo. E para
voltar ao programa que est sendo editado, basta clicar sobre a opo FileView.
5) Na subjanela inferior so apresentadas informaes sobre erros de programao e compilao.
Detalhes sero vistos no captulo 2.
6) A subjanela do lado direito, a maior das trs, usada para: apresentar o contedo dos manuais e para a
edio de programas em FORTRAN.
Captulo 1. Introduo 4
-
1.6 CRIAO DE UM PROJETO DO TIPO CONSOLE APPLICATION
O Fortran organiza todos os arquivos de um programa numa entidade chamada projeto. Em termos
prticos, a criao de um projeto resulta na criao de uma pasta ou diretrio dentro do Windows.
Existem diversos tipos de projetos que podem ser criados com o Fortran. A escolha do tipo depende da
finalidade do programa e dos recursos do Windows que se deseja empregar. No caso deste texto, em sua
parte bsica, que compreende os captulos 1 a 13, so empregados apenas projetos do tipo Console
Application. E na parte avanada, que corresponde aos captulos 14 a 20, so usados projetos do tipo
QuickWin Application, que permite utilizar diversos recursos do Windows.
Para criar um projeto do tipo Console Application, devem ser executados os seguintes passos:
1) No menu do Fortran, conforme mostrado na Figura 1.3: File, New.
Figura 1.3 Incio da criao de um projeto no Fortran.
2) Na janela New, mostrada na Figura 1.4, clicar sobre a opo Project Workspace. Depois, clicar
sobre o boto OK.
3) Na janela New Project Workspace, mostrada na Figura 1.5, necessrio executar o que segue:
Captulo 1. Introduo 5
-
Figura 1.4 Segundo passo na criao de um projeto no Fortran.
Figura 1.5 Janela para definio do tipo, diretrio e nome do projeto.
a) Entre os seis tipos de projetos apresentados na opo Type, clicar sobre Console Application no
caso deste tipo de projeto no estar selecionado (realado em azul).
b) Na opo Location estar indicado um diretrio (pasta) default, ou seja, um diretrio escolhido
pelo prprio Fortran em funo de sua configurao atual. possvel que no seja o diretrio
desejado. Neste caso, deve-se clicar sobre o boto Browse para indicar o diretrio onde se quer
criar o projeto. Ao se fazer isso, surgir a janela Choose Directory mostrada na Figura 1.6, na qual
deve-se executar:
Na opo Drives, clicando sobre o tringulo invertido, escolher C:
Na opo Directory name, digitar C:\MSDEV\Projects, conforme mostrado na Figura 1.7.
Clicar sobre o boto OK.
c) Estar de volta a janela New Project Workspace, mostrada na Figura 1.5. Clicar dentro do espao
de edio da opo Name. Escrever o nome do projeto, por exemplo, programa01. Depois disso,
a janela New Project Workspace dever ficar conforme a Figura 1.8. Deve-se perceber que o
nome do projeto, digitado na opo Name, aparece automaticamente na opo Location. Em
Captulo 1. Introduo 6
-
seguida, deve-se clicar sobre o boto Create. Aps isso, o Fortran criar um diretrio com o nome
do projeto indicado, dentro do diretrio j selecionado, conforme mostrado na Figura 1.9.
Figura 1.6 Definio do drive do projeto.
Figura 1.7 Definio do diretrio para criao do projeto.
Figura 1.8 Tipo, nome e diretrio do projeto j definidos.
Captulo 1. Introduo 7
-
Figura 1.9 Fortran com o nome do diretrio criado para o projeto especificado.
1.7 CRIAO E INSERO DO PROGRAMA-FONTE DENTRO DO PROJETO
O processo de edio ou criao de um programa semelhante redao de uma carta com o
aplicativo Word, que um editor de textos. So necessrios dois componentes: um editor de textos para
escrever o programa computacional e um arquivo para guardar o texto no hard disk (HD) do computador.
No caso dos programas computacionais, a carta chamada de programa-fonte e pode ser aberta, editada
ou redigida dentro do Fortran ou em qualquer outro editor de textos. Ao longo deste texto, as palavras
edio, digitao e implementao sero usadas como sinnimos. Para iniciar a edio ou escrita de um
programa-fonte em linguagem FORTRAN necessrio criar e inserir um arquivo dentro do projeto. Isso
feito atravs dos seguintes passos:
1) No menu do Fortran, conforme mostrado na Figura 1.10, executar: Insert, Files into Project
2) Na janela Insert Files into Project, mostrada na Figura 1.11, executar o seguinte:
a) Na opo File Name, digitar o nome do programa-fonte a ser criado; por exemplo, como mostrado
na Figura 1.12, programa01.f90
Sempre deve-se usar f90 como extenso dos nomes dos arquivos do tipo programa-fonte. Ele
indica que o programa est ou ser escrito na linguagem FORTRAN 90 ou 95.
b) Clicar sobre o boto OK
Captulo 1. Introduo 8
-
Figura 1.10 Incio da criao do programa-fonte.
Figura 1.11 Janela para definio do nome do programa-fonte a inserir no projeto.
3) Na janela Microsoft Developer Studio, mostrada na Figura 1.13, clicar sobre o boto Yes
4) Na subjanela do lado esquerdo do Fortran, clicar sobre o sinal + ao lado do nome do projeto; dever
aparecer o nome do programa-fonte que foi inserido no projeto; no caso, programa01.f90
Captulo 1. Introduo 9
-
5) Clicar rapidamente duas vezes sobre o nome do programa-fonte que foi inserido
6) Na janela Microsoft Developer Studio, mostrada na Figura 1.14, clicar sobre o boto Yes
7) O programa-fonte inserido no projeto j est pronto para ser editado na subjanela do lado direito do
Fortran, conforme mostrado na Figura 1.15.
Figura 1.12 Nome do programa-fonte j definido.
Figura 1.13.
Figura 1.14.
Captulo 1. Introduo 10
-
Figura 1.15 Fortran pronto para edio do programa-fonte.
1.8 EDIO DO PROGRAMA-FONTE
Aps a criao e insero do programa-fonte dentro do projeto, o Fortran est pronto para ser
usado na edio do programa-fonte, conforme mostrado na Figura 1.15. Um exemplo de edio de
programa-fonte apresentado a seguir.
1) Dentro do espao de edio do Fortran, na subjanela maior, copiar exatamente o texto mostrado
abaixo em vermelho (para aparecerem as aspas, deve-se clicar sobre a tecla delas e, em seguida, clicar
sobre a tecla de espao em branco).
WRITE(*,*) "Meu primeiro programa em FORTRAN"
WRITE(*,*) "Ano 2004"
END
2) Para gravar ou salvar este texto, no menu do Fortran, executar: File, Save. Em seguida, na
extremidade inferior da janela principal do Fortran, surgir uma mensagem informando o diretrio e o
nome do programa-fonte que foi gravado ou salvo, como mostrado na Figura 1.16.
3) Comentrios sobre este programa:
Captulo 1. Introduo 11
-
a) Dentro do editor de textos do Fortran, os comandos da linguagem FORTRAN so mostrados na
cor azul, conforme pode ser visto na Figura 1.16. E o que criado ou definido pelo programador
mostrado na cor preta. Comandos so palavras-chave que tm uma funo especfica e devem ser
usados exatamente de acordo com suas normas.
b) Existem dezenas de comandos na linguagem FORTRAN. No caso do primeiro programa-fonte,
mostrado na Figura 1.16, so usados apenas dois comandos: WRITE e END.
c) Como ser visto aps a execuo deste programa, ele simplesmente ir mostrar numa janela duas
linhas de texto: na primeira, Meu primeiro programa em Fortran; e, na segunda, Ano 2004. Isso
conseguido com o comando WRITE. Qualquer texto colocado entre aspas aps o comando
WRITE(*,*) escrito numa janela.
d) O comando END necessrio para indicar o fim do programa.
Figura 1.16 Programa-fonte escrito na linguagem FORTRAN.
1.9 COMPILAO E GERAO DO PROGRAMA-OBJETO
Aps concluir a edio de um programa-fonte, ele deve ser compilado. O processo de compilao
traduz o programa-fonte (que um arquivo do tipo texto, isto , que as pessoas conseguem ler
naturalmente, como o programa01.f90) no chamado programa-objeto, que um arquivo do tipo binrio
Captulo 1. Introduo 12
-
(escrito na linguagem dos computadores, usando apenas os algarismos zero-0 e um-1). Uma linguagem de
programao de alto nvel (Ramalho, 2000) como o FORTRAN se constitui numa forma amigvel ou
relativamente fcil de se escrever programas. O aplicativo Fortran PowerStation 4.0, alm do editor de
programas, tambm tem junto um compilador de programas. Para compilar um programa-fonte que est
aberto no editor de textos do Fortran, deve-se executar o seguinte no menu do Fortran: Build, Compile
Aps a compilao, conforme mostrado na Figura 1.17, aparecero trs linhas com mensagens
na subjanela da parte inferior do Fortran:
1) A primeira informa que o Fortran est compilando (Compiling) o programa-fonte.
2) A segunda informa o nome e o diretrio do programa-fonte que est sendo compilado.
3) Finalmente, a terceira informa o nome do programa-objeto (no caso, programa01.obj) que foi gerado
e o nmero de erros (errors) e de avisos (warnings) relativos ao programa-fonte compilado. Se houver
algum erro, o programa-objeto no gerado. Avisos no impedem a gerao do programa-objeto. O
nome do programa-objeto igual ao nome do programa-fonte mas com extenso obj
Figura 1.17 Compilao do programa-fonte.
A compilao cria automaticamente um subdiretrio chamado Debug dentro do diretrio do
projeto. Dentro deste subdiretrio que se encontra o programa-objeto bem como outros arquivos
auxiliares. Pode-se ver isso com o aplicativo Windows NT Explorer, que acessado executando o
Captulo 1. Introduo 13
-
seguinte no Windows: Start, Programs, Windows NT Explorer. Depois, deve-se acessar o diretrio do
projeto, que deve estar dentro do diretrio C:\Msdev\Projects
1.10 GERAO DO PROGRAMA-EXECUTVEL
Aps o processo de compilao, necessrio gerar o programa-executvel, que um arquivo
possvel de ser executado ou rodado pelo computador, como qualquer outro programa ou aplicativo;
por exemplo, os aplicativos Word, Excel, PowerPoint, FrontPage, CorelDraw, Acrobat, e o navegador
Internet Explorer. O programa-executvel resulta da unio do programa-objeto, que foi gerado na
compilao do programa-fonte, com outros programas-objeto da prpria linguagem FORTRAN, que
contm a traduo dos comandos do FORTRAN, como o WRITE e END usados no primeiro programa-
fonte (Figura 1.17).
Para gerar o programa-executvel, deve-se fazer o seguinte no menu do Fortran: Build, Build. Em
seguida, conforme mostrado na Figura 1.18, aparecero duas linhas com mensagens na subjanela da
parte inferior do Fortran:
Figura 1.18 Gerao do programa-executvel.
Captulo 1. Introduo 14
-
1) A primeira informa que o Fortran est gerando o programa-executvel, processo chamado de
lincagem (linking).
2) A segunda informa o nome do programa-executvel (no caso, programa01.exe) que foi gerado e o
nmero de erros (errors) e de avisos (warnings) relacionados a ele. O nome do programa-executvel
igual ao nome do projeto mas com extenso exe
O programa-executvel gravado automaticamente dentro do subdiretrio Debug, que fica dentro
do diretrio do projeto, alm de outros arquivos auxiliares. Isso pode ser visto com o aplicativo Windows
NT Explorer, como mostrado na Figura 1.19. Note nesta figura que no Windows NT Explorer a extenso
ou Type do programa-executvel aparece como Application.
Figura 1.19 Diretrio do projeto programa01 e seu subdiretrio Debug.
1.11 EXECUO DO PROGRAMA
Aps gerar o programa-executvel, para execut-lo ou rod-lo, isto , para coloc-lo em
funcionamento, basta fazer o seguinte no menu do Fortran: Build, Execute. Como resultado deste
comando, deve ocorrer o seguinte:
1) Aparecer uma janela do tipo DOS, conforme a Figura 1.20. Isso ocorre porque na seo 1.6 foi criado
um projeto do tipo Console Application.
Captulo 1. Introduo 15
-
2) No ttulo desta janela, com fundo em azul, aparece o nome do programa que est sendo executado e o
diretrio no qual ele se encontra, no caso C:\MSDEV\Projects\programa01\Debug\programa01.exe
3) Dentro desta janela, com fundo em preto, aparece o resultado da execuo do programa. No caso, as
frases Meu primeiro programa em Fortran e Ano 2004. A ordem das duas frases a mesma em que
elas foram colocadas no programa-fonte. Isso ocorre, porque o programa executado do topo para
baixo, linha por linha do programa-fonte.
4) Alm disso, tambm aparece a frase Press any key to continue. Como diz este aviso, basta clicar em
qualquer tecla para continuar. Ao f