programação de computadores
DESCRIPTION
Programação de Computadores. Viviane Torres da Silva [email protected] http://www.ic.uff.br/~viviane.silva/progIII. 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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/1.jpg)
Programação de Computadores
Viviane Torres da [email protected]
http://www.ic.uff.br/~viviane.silva/progIII
![Page 2: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/2.jpg)
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.
![Page 3: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/3.jpg)
program notas implicit none
real nota1, nota2, nota3, media
integer maior
read *, nota1, nota2, nota3
maior = 0
media = (nota1 + nota2 + nota3)/3
if (nota1 .GT. media) then
maior = maior + 1
end if
if (nota2 .GT. media) then
maior = maior + 1
end if
if (nota3 .GT. media) then
maior = maior + 1
end if
print *, ‘Média: ’, media
print *, ‘Maiores: ’, maior
end
E se fossem 40 alunos?
![Page 4: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/4.jpg)
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
![Page 5: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/5.jpg)
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: x1, x2, ..., 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: x1 = 7, x2 = 10, x3= 5
7 10 5 …
1 2 3 4 5 6 7
posição
valorX =
![Page 6: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/6.jpg)
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
X =
1 2 3 4 5
![Page 7: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/7.jpg)
Exemplos: Integer a(10)
Integer b(3:8)
Integer c
Character*20 nome(-2:2)– (em cada posição do vetor ficará um string de 20 caracteres)
a =
1 2 3 4 5 6 7 8 9 10
b =
3 4 5 6 7 8
c =
1
nome = -2 -1 0 1 2
![Page 8: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/8.jpg)
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)
1 ? 8nota =
1 2 3 4 5
![Page 9: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/9.jpg)
Utilização
Exemplo:
Character*3 texto(5) texto (1) = ‘abc’ texto (2) = ‘def’ texto (3) = ‘ghi’ texto (4) = ‘jkl’ texto (5) = ‘mno’
abc def ghi jkl mnotexto =
1 2 3 4 5
![Page 10: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/10.jpg)
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.
Retornando ao exemplo dos 40 alunos…
nota =
1 2 3 4 5 …. 37 38 39 40
program notas2 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....
![Page 11: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/11.jpg)
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.
Retornando ao exemplo dos 40 alunos… program notas2
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
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
nota =
1 2 3 4 5 …. 37 38 39 40
![Page 12: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/12.jpg)
Exercício 1
Faça um programa em Fortran que lê dois vetores inteiros de tamanho 3 e soma cada posição uma a uma armazenando os resultados em outro vetor .
program soma vetores implicit none integer vetorA(3), vetorB(3), i, vetorC(3) do i=1, 3 print *, 'digite o vetorA(', i, ') e o vetorB(', i, ')' read *, vetorA(i), vetorB(i) vetorC (i) = vetorA (i) + vetorB (i) print *, 'vetorC(', i, '): ', vetorC(i) end do end
![Page 13: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/13.jpg)
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 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 end do do i=1, 10 print *, numero(i) end do end
![Page 14: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/14.jpg)
Exercício 3 Faça um programa em Fortran que lê=eia dois vetores inteiros
v1 e v2 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 v2(n) e some as M primeiras posições de v1 e armazene este valor em s(i).
![Page 15: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/15.jpg)
Parte II
![Page 16: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/16.jpg)
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 lugar.
Antes
real nota(40) do i = 1, 40 read *, nota(i)end do...
Depois
integer tnotaparameter (tnota=40)real nota(tnota) do i = 1, tnota read *, nota(i)end do...
![Page 17: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/17.jpg)
DO implícito
Permite combinar de forma resumida o comando “do” com os comandos “print” ou “read”.
Antes
integer tnotaparameter (tnota=40)real *,nota(tnota) do i = 1, tnota read *, nota(i)end do...
do i = 1, tnota print *, nota(i)end do...
Depois
integer tnotaparameter (tnota=40)real *,nota(tnota) read *, (nota(i), i = 1, tnota)...
print *, (nota(i), i = 1, tnota)...
![Page 18: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/18.jpg)
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
![Page 19: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/19.jpg)
program ordenacao idade implicit none integer nPessoas, j, i parameter (nPessoas=10) real nota(nPessoas), aux character*20 nome(nPessoas), aluno read *, (nome(i), i = 1, nPessoas) read *, (nota(i), i = 1, nPessoas)
aux = 10 do j=1, nPessoas 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
aux = 0 do j=1, nPessoas 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
aux = 0 do j=1, nPessoas aux = aux + nota(j) end do aux = aux / nPessoas print *, 'a m‚dia ‚: ', aux ...
... aux = 0 do j=1, nPessoas if (nota(j) .GT. 9) then print *, nome(j) ,'obteve nota acima de 9.0' end if end do end
![Page 20: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/20.jpg)
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.
![Page 21: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/21.jpg)
program ordenacao idade implicit none integer nPessoas, j, i, aux parameter (nPessoas=10) integer idade(nPessoas) character*20 nome(nPessoas), aux2 read *, (nome(i), i = 1, nPessoas) read *, (idade(i), i = 1, nPessoas) do j=1, nPessoas do i=1, nPessoas if (idade(i) .GT. idade (j)) then aux = idade(j) idade(j) = idade(i) idade(i) = aux aux2 = nome(j) nome(j) = nome(i) nome(i) = aux2 end if end do end do print *, (nome(i), idade(i), '; ', i = 1, nPessoas) end
![Page 22: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/22.jpg)
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
![Page 23: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/23.jpg)
program ordenacao idade
implicit none
integer nPessoas, j, i, k, l, aux
parameter (nPessoas=3)
character*20 lista1(nPessoas), lista2(nPessoas), lista3(nPessoas)
print*, 'entre com os nomes da lista 1'
read *, (lista1(i), i = 1, nPessoas)
print*, 'entre com os nomes da lista 2'
read *, (lista2(i), i = 1, nPessoas)
l=1
aux=0
do j=1, nPessoas
do i=1, nPessoas
if (lista1(i) .EQ. lista2(j)) then
do k=1, nPessoas
if (lista1(i) .EQ. lista3(k)) then
aux=1
end if
end do
if (aux .EQ. 0) then
lista3(l) = lista1(i)
l=l+1
print*, 'este nome aparece nas duas listas:', lista1(i)
end if
aux=0
end if
end do
end do
read*
end
![Page 24: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/24.jpg)
Parte III
![Page 25: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/25.jpg)
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 3x4
![Page 26: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/26.jpg)
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...
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)
7,5
Nota 1 Nota 2 Nota 3
Nota 1 Nota 2 Nota 3
Aluno1
Aluno2
Aluno3
Aluno4
Aluno5
![Page 27: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/27.jpg)
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) (2a linha, 3a coluna, 1a profundidade)– Nota do aluno 2 na prova 3 da turma A foi 7.5
7.5
Turma A
Turma B
N1 N2 N3
Aluno1
Aluno2
Aluno3
Aluno4
Aluno5
![Page 28: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/28.jpg)
Declaração
x y z x: linha, y: coluna e z: profundidade Real nota(5, 3, 2)
– 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)
![Page 29: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/29.jpg)
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 )
![Page 30: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/30.jpg)
Exercício 1
Faça um programa em Fortran que lê uma matriz quadrada 3x3, calcule a sua transposta (at(i, j) = a(j, i)) e exiba para o usuário o resultado.
![Page 31: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/31.jpg)
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)
![Page 32: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/32.jpg)
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 (numAluno, numNota, numTurma); numero de alunos = 2, número de notas = 3 e número de
turmas = 2
![Page 33: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/33.jpg)
Exercício 4
Faça um programa em Fortran que lê duas matrizes tamanho 2x3 e 3x2 e multiplica essas matrizes
Dica: c(i, j) = somatório de a(i,k) * b(k,j) para todo k.
![Page 34: Programação de Computadores](https://reader035.vdocuments.pub/reader035/viewer/2022062721/56813625550346895d9d9bd8/html5/thumbnails/34.jpg)
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 empregadob) a média salarial e quantos empregados ganham acima da
médiac) quais são os empregados que estão prestes a se aposentar,
i.e., quais possuem mais 30 anos de contribuiçãod) Idade do empregado mais novo e do empregado mais velho
que estão prestes a se aposentar