Programao de Computadores Viviane Torres da Silva viviane

  • Slides: 34
Download presentation
Programação de Computadores Viviane Torres da Silva viviane. silva@ic. uff. br http: //www. ic.

Programação de Computadores Viviane Torres da Silva viviane. silva@ic. uff. br http: //www. ic. uff. br/~viviane. silva/prog. III

Variáveis Compostas Ø Exemplo motivacional: Ler as notas de 3 alunos. Calcular a média

Variáveis Compostas Ø Exemplo motivacional: Ler as notas de 3 alunos. Calcular a média da turma. Informar quantos alunos tiveram nota acima da média.

program notas implicit none real nota 1, nota 2, nota 3, media integer maior

program notas implicit none real nota 1, nota 2, nota 3, media integer maior read *, nota 1, nota 2, nota 3 maior = 0 media = (nota 1 + nota 2 + nota 3)/3 if (nota 1. GT. media) then maior = maior + 1 end if (nota 2. GT. media) then maior = maior + 1 end if (nota 3. GT. media) then maior = maior + 1 end if print *, ‘Média: ’, media print *, ‘Maiores: ’, maior end E se fossem 40 alunos?

Variáveis Compostas Ø É possível definir variáveis que guardam mais de um valor de

Variáveis Compostas Ø É possível definir variáveis que guardam mais de um valor de um mesmo tipo. Essas variáveis são conhecidas como variáveis compostas, variáveis subscritas ou arranjos (array). Ø Existem dois tipos principais de variáveis compostas: – Vetores – Matrizes

Vetores Ø Um vetor é uma variável composta unidimensional. Ela contém espaço para armazenar

Vetores Ø Um vetor é uma variável composta unidimensional. Ela contém espaço para armazenar diversos valores, e é acessada via um índice. Ø A idéia de vetor é comum na matemática, com o nome de variável subscrita: x 1, x 2, . . . , xn Ø O que vimos até agora são variáveis com somente um valor: x = 7. No caso de vetores, uma mesma variável guarda ao mesmo tempo múltiplos valores: x 1 = 7, x 2 = 10, x 3= 5 X= 1 2 3 4 7 10 5 … 5 6 7 posição valor

Declaração de Vetor Ø Feita junto com as demais declarações de variáveis, no início

Declaração de Vetor Ø Feita junto com as demais declarações de variáveis, no início do programa. Ø Forma geral: <tipo> <nome>(< início>: <fim>) Ø Caso o início do vetor seja omitido, o Fortran assume início igual a 1. Ø Ex: Real x (5) – Vetor de 5 posições onde os valores são do tipo Real 1 X= 2 3 4 5

Ø Exemplos: Ø Integer a(10) 1 2 3 4 5 6 7 8 9

Ø Exemplos: Ø Integer a(10) 1 2 3 4 5 6 7 8 9 a= Ø Integer b(3: 8) 3 4 5 6 7 8 b= Ø Integer c 1 c= Ø Character*20 nome(-2: 2) – (em cada posição do vetor ficará um string de 20 caracteres) -2 nome = -1 0 1 2 10

Utilização Ø Uma posição do arranjo é acessada pelo seu índice, seja para atribuir

Utilização Ø Uma posição do arranjo é acessada pelo seu índice, seja para atribuir ou recuperar o valor. Ø Exemplo: Ø Ø Ø Integer nota(5) nota(1) = 1 nota(3) = 8 nota(2) = nota(1) + nota(3) print *, nota(2) nota = 1 2 3 1 ? 8 4 5

Utilização Ø Exemplo: Ø Ø Ø Character*3 texto(5) texto (1) = ‘abc’ texto (2)

Utilização Ø Exemplo: Ø Ø Ø Character*3 texto(5) texto (1) = ‘abc’ texto (2) = ‘def’ texto (3) = ‘ghi’ texto (4) = ‘jkl’ texto (5) = ‘mno’ texto = 1 2 3 4 5 abc def ghi jkl mno

Retornando ao exemplo dos 40 alunos… Ø Faça um programa que lê a nota

Retornando ao exemplo dos 40 alunos… Ø Faça um programa que lê a nota de 40 alunos, calcula a média e calcula quantas notas estão acima da média. No final o programa informa estes dois valores. program notas 2 implicit none real nota(40), soma, media integer maior, i soma = 0 do i = 1, 40 read *, nota(i) soma = soma + nota(i) end do. . 1 nota = 2 3 4 5 …. 37 38 39 40

Retornando ao exemplo dos 40 alunos… program notas 2 implicit none Ø Faça um

Retornando ao exemplo dos 40 alunos… program notas 2 implicit none Ø Faça um programa que lê a nota de 40 alunos, calcula a real nota(40), soma, media média e calcula quantas notas estão acima da média. integer maior, i soma = 0 No final o programa informa estes dois valores. do i = 1, 40 read *, nota(i) soma = soma + nota(i) end do 1 2 3 4 5 …. 37 nota = media = soma/40 maior = 0 do i = 1, 40 if (nota(i) > media) then maior = maior + 1 end if end do print *, ‘Média: ’, media print *, ‘Maiores: ’, maior end 38 39 40

Exercício 1 Ø Faça um programa em Fortran que lê dois vetores inteiros de

Exercício 1 Ø Faça um programa em Fortran que lê dois vetores inteiros de tamanho 3 e soma cada posição uma armazenando os resultados em outro vetor. program soma vetores implicit none integer vetor. A(3), vetor. B(3), i, vetor. C(3) do i=1, 3 print *, 'digite o vetor. A(', i, ') e o vetor. B(', i, ')' read *, vetor. A(i), vetor. B(i) vetor. C (i) = vetor. A (i) + vetor. B (i) print *, 'vetor. C(', i, '): ', vetor. C(i) end do end

Exercício 2 Ø Faça um programa em Fortran que lê dez números inteiros e

Exercício 2 Ø Faça um programa em Fortran que lê dez números inteiros e listar esses números em ordem crescente. program ordenacao implicit none integer numero(10), aux, i, j do i=1, 10 read *, numero(i) end do j=1, 10 do i=1, 10 if (numero(i). GT. numero (j)) then aux = numero (j) numero(j) = numero(i) numero(i) = aux end if end do do i=1, 10 print *, numero(i) end do end

Exercício 3 Ø Faça um programa em Fortran que lê=eia dois vetores inteiros v

Exercício 3 Ø Faça um programa em Fortran que lê=eia dois vetores inteiros v 1 e v 2 de 10 posições. Um terceiro vetor é calculado da seguinte maneira: Ø Para cada posição i de s, o usuário deve informar um valor n. Peque o valor M armazenado na posição v 2(n) e some as M primeiras posições de v 1 e armazene este valor em s(i).

Parte II

Parte II

Melhorando o programa Ø O Fortran fornece alguns comandos que podem ajudar na manipulação

Melhorando o programa Ø O Fortran fornece alguns comandos que podem ajudar na manipulação de variáveis compostas: – Parameter – DO implícito Ø Parameter permite criar constantes que podem ser utilizadas para definir o tamanho de variáveis compostas. Desta forma, a alteração do tamanho consiste em alterar em somente um Depois lugar. Antes real nota(40) do i = 1, 40 read *, nota(i) end do. . . integer tnota parameter (tnota=40) real nota(tnota) do i = 1, tnota read *, nota(i) end do. . .

DO implícito Ø Permite combinar de forma resumida o comando “do” com os comandos

DO implícito Ø Permite combinar de forma resumida o comando “do” com os comandos “print” ou “read”. Antes Depois integer tnota parameter (tnota=40) real *, nota(tnota) do i = 1, tnota read *, nota(i) end do. . . integer tnota parameter (tnota=40) real *, nota(tnota) read *, (nota(i), i = 1, tnota). . . do i = 1, tnota print *, nota(i) end do. . . print *, (nota(i), i = 1, tnota). . .

Exercício 1 Ø Faça um programa em Fortran usando “parameter” e “do implícito” que

Exercício 1 Ø Faça um programa em Fortran usando “parameter” e “do implícito” que lê o nome e a nota de dez alunos e informe: Ø Ø O nome do aluno que obteve menor nota e a sua nota O nome do aluno que obteve maior nota e a sua nota A média da turma Nome de alunos com nota acima de 9, 0

 program ordenacao idade implicit none integer n. Pessoas, j, i parameter (n. Pessoas=10)

program ordenacao idade implicit none integer n. Pessoas, j, i parameter (n. Pessoas=10) real nota(n. Pessoas), aux character*20 nome(n. Pessoas), aluno read *, (nome(i), i = 1, n. Pessoas) read *, (nota(i), i = 1, n. Pessoas) aux = 10 do j=1, n. Pessoas if (nota(j). LT. aux) then aux = nota(j) aluno = nome(j) end if end do print *, aluno, 'foi quem obteve a menor nota: ', aux = 0 do j=1, n. Pessoas if (nota(j). GT. aux) then aux = nota(j) aluno = nome(j) end if end do print *, aluno, 'foi quem obteve a maior nota: ', aux = 0 do j=1, n. Pessoas aux = aux + nota(j) end do aux = aux / n. Pessoas print *, 'a m‚dia ‚: ', aux . . . aux = 0 do j=1, n. Pessoas if (nota(j). GT. 9) then print *, nome(j) , 'obteve nota acima de 9. 0' end if end do end

Exercício 2 Ø Faça um programa em Fortran usando “parameter” e “do implícito” que

Exercício 2 Ø Faça um programa em Fortran usando “parameter” e “do implícito” que lê o nome e a idade de dez pessoas e lista as pessoas em ordem decrescente de idade.

 program ordenacao idade implicit none integer n. Pessoas, j, i, aux parameter (n.

program ordenacao idade implicit none integer n. Pessoas, j, i, aux parameter (n. Pessoas=10) integer idade(n. Pessoas) character*20 nome(n. Pessoas), aux 2 read *, (nome(i), i = 1, n. Pessoas) read *, (idade(i), i = 1, n. Pessoas) do j=1, n. Pessoas do i=1, n. Pessoas if (idade(i). GT. idade (j)) then aux = idade(j) idade(j) = idade(i) idade(i) = aux aux 2 = nome(j) nome(j) = nome(i) nome(i) = aux 2 end if end do print *, (nome(i), idade(i), '; ', i = 1, n. Pessoas) end

Exercício 3 Ø Faça um programa em Fortran usando “parameter” e “do implícito” que

Exercício 3 Ø Faça um programa em Fortran usando “parameter” e “do implícito” que lê duas listas de nomes de tamanho 10 e informe quais nomes ocorrem nas duas listas. Ø OBS. Não permita que o programa repita a mesma informação

 program ordenacao idade implicit none integer n. Pessoas, j, i, k, l, aux

program ordenacao idade implicit none integer n. Pessoas, j, i, k, l, aux parameter (n. Pessoas=3) character*20 lista 1(n. Pessoas), lista 2(n. Pessoas), lista 3(n. Pessoas) print*, 'entre com os nomes da lista 1' read *, (lista 1(i), i = 1, n. Pessoas) print*, 'entre com os nomes da lista 2' read *, (lista 2(i), i = 1, n. Pessoas) l=1 aux=0 do j=1, n. Pessoas do i=1, n. Pessoas if (lista 1(i). EQ. lista 2(j)) then do k=1, n. Pessoas if (lista 1(i). EQ. lista 3(k)) then aux=1 end if end do if (aux. EQ. 0) then lista 3(l) = lista 1(i) l=l+1 print*, 'este nome aparece nas duas listas: ', lista 1(i) end if aux=0 end if end do read* end

Parte III

Parte III

Matrizes Ø Uma matriz é uma variável composta multidimensional. Ø Ela é equivalente a

Matrizes Ø Uma matriz é uma variável composta multidimensional. Ø Ela é equivalente a um vetor, contudo permite a utilização de diversas dimensões acessadas via diferentes índices. Ø Em diversas situações matrizes são necessárias para correlacionar informações. Ø Matrizes podem ser vistas como tabelas Matriz 3 x 4

Exemplo Ø Assumindo que um aluno é avaliado com 3 notas, seria necessário um

Exemplo Ø Assumindo que um aluno é avaliado com 3 notas, seria necessário um vetor de três posições para guardar as notas de cada aluno. . . Nota 1 Nota 2 Nota 3 Ø Contudo, assumindo que uma turma tem 5 alunos, seria necessária uma matriz bidimensional para guardar as notas de todos os alunos de uma turma. . . – Nota(2, 3) = 7. 5 (terceira nota do segundo aluno foi 7, 5) Nota 1 Nota 2 Nota 3 Aluno 1 Aluno 2 Aluno 3 Aluno 4 Aluno 5 7, 5

Exemplo Ø Ainda, assumindo que um curso tem duas turmas, seria necessária uma matriz

Exemplo Ø Ainda, assumindo que um curso tem duas turmas, seria necessária uma matriz tridimensional para guardar as notas de todos os alunos de todas as turmas do curso. . . – Nota(2, 3, 1) (2 a linha, 3 a coluna, 1 a profundidade) – Nota do aluno 2 na prova 3 da turma A foi 7. 5 Turma B Turma A Aluno 1 7. 5 Aluno 2 Aluno 3 Aluno 4 Aluno 5 N 1 N 2 N 3

Declaração x y z Ø Real nota(5, 3, 2) x: linha, y: coluna e

Declaração x y z Ø Real nota(5, 3, 2) x: linha, y: coluna e z: profundidade – Matriz tridimensional Ø Integer matriz(10: 15, 1: 3) – Matriz bidimensional – posições de 10 a 15 , de 1 a 3 Ø Exemplo: Integer nota(2, 2) Nota(1, 1) = 5 Nota(2, 2) = 3 Nota(2, 1) = nota(1, 1) + nota(2, 2) Nota(1, 2) = nota(1, 1) * nota(2, 2) Print *, nota(1, 2) – nota(2, 1)

DO implícito para matrizes Ø Matriz A tem 2 linhas e três colunas e

DO implícito para matrizes Ø Matriz A tem 2 linhas e três colunas e serão lidos primeiro os elementos por colunas e depois por linhas, i. e. , A(1, 1); A(1, 2); A(1, 3); A(2, 1); A(2, 2); A(2, 3) read *, (( A(i, j), j=1, 3) , i=1, 2 )

Exercício 1 Ø Faça um programa em Fortran que lê uma matriz quadrada 3

Exercício 1 Ø Faça um programa em Fortran que lê uma matriz quadrada 3 x 3, calcule a sua transposta (at(i, j) = a(j, i)) e exiba para o usuário o resultado.

Exercício 2 Ø Faça um programa em Fortran que lê uma matriz de entrada(3,

Exercício 2 Ø Faça um programa em Fortran que lê uma matriz de entrada(3, 3) e calcule a matriz de saída(3, 3) da seguinte maneira: Ø se (i=j) então saída(i, j) = 0 Ø se (i<>j) então saída(i, j) = entrada (j, i)

Exercício 3 Ø Faça um programa em Fortran que lê o nome e as

Exercício 3 Ø Faça um programa em Fortran que lê o nome e as 3 notas para cada aluno de cada turma de um curso. Cada turma tem 2 alunos e o curso tem 2 turmas. Ao final, o programa deve permitir que o usuário informe: Ø A) o nome de um aluno e o programa liste a média desse aluno Ø B) o usuário informe uma média e o programa liste todos os alunos que têm médias acima desse valor. Ø nota (num. Aluno, num. Nota, num. Turma); Ø numero de alunos = 2, número de notas = 3 e número de turmas = 2

Exercício 4 Ø Faça um programa em Fortran que lê duas matrizes tamanho 2

Exercício 4 Ø Faça um programa em Fortran que lê duas matrizes tamanho 2 x 3 e 3 x 2 e multiplica essas matrizes Ø Dica: c(i, j) = somatório de a(i, k) * b(k, j) para todo k.

Exercício 5 Ø Faça um programa que receba o nome, a idade, a renda

Exercício 5 Ø Faça um programa que receba o nome, a idade, a renda salariam e a quantidade de anos de contribuição para a previdência dos 10 funcionários de uma empresa. O programa deve ser capaz de informar: a) o salário mais alto e o nome do empregado b) a média salarial e quantos empregados ganham acima da média c) quais são os empregados que estão prestes a se aposentar, i. e. , quais possuem mais 30 anos de contribuição d) Idade do empregado mais novo e do empregado mais velho que estão prestes a se aposentar