Nivelamento - 2015 - Programação (1).pdf

download Nivelamento - 2015 - Programação (1).pdf

of 251

Transcript of Nivelamento - 2015 - Programação (1).pdf

  • 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

    [email protected]

    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