Programao de Computadores Viviane Torres da Silva viviane

  • Slides: 25
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

Leitura e escrita de arquivos Ø Até agora vimos somente como ler dados do

Leitura e escrita de arquivos Ø Até agora vimos somente como ler dados do teclado (read *) e escrever dados na tela (print *). Ø Contudo, em algumas situações é desejado ler dados de arquivos e escrever dados em arquivos – Não é necessário digitar via teclado os dados a cada execução do programa – Os resultados do programa podem ser impressos ou enviados para outras pessoas com mais facilidade

Leitura de arquivo Ø Funciona com objetivo semelhante ao “read *”, mas faz a

Leitura de arquivo Ø Funciona com objetivo semelhante ao “read *”, mas faz a leitura de um arquivo específico. Ø O arquivo a ser lido tem que estar no mesmo diretório do arquivo Fortran. f

Leitura de arquivo Ø Comando: OPEN (<identificador>, FILE=‘<nome do arquivo>’, STATUS=’<status>’) READ (<identificador>, *)

Leitura de arquivo Ø Comando: OPEN (<identificador>, FILE=‘<nome do arquivo>’, STATUS=’<status>’) READ (<identificador>, *) <dados a serem lidos> CLOSE (<identificador>) Ø <identificador>: utilizado para identificar o arquivo no comando de leitura. Evita que se tenha que escrever o nome todo do arquivo. Ø FILE= é obrigatório. Ø <status>=NEW | OLD | SCRATCH | UNKNOWN (é opcional) – New significa que é necessário criar o arquivo, Old que o arquivo já existe (default), Scratch diz se o arquivo é temporário e Unknow que não se sabe Ø Close: não é necessário sempre fechar o arquivo, mas é um boa política para permitir que outros tenham acesso.

Exemplo program ex 1 implicit none integer num, pot open(1, file='entrada. txt') read(1, *)

Exemplo program ex 1 implicit none integer num, pot open(1, file='entrada. txt') read(1, *) num, pot print *, num, ' elevado a ', pot, end Ø Arquivo entrada. txt: – 4 3 Ø Saída do programa: – 4 elevado a 3 = 64 O arquivo de entrada. txt tem que estar no mesmo diretório que o arquivo ex 1. f ' = ', num ** pot

Exercício 1 Ø Suponha que o arquivo de entrada seja: 1 2 3 4

Exercício 1 Ø Suponha que o arquivo de entrada seja: 1 2 3 4 5 6 7 Ø Qual é o valor das variáveis nas leituras abaixo: 1. read (7, *) A, B, C A=1; B=2, C=3 2. read (7, *) A, B, C, I, J A=1; B=2; C=3; I=4; J=5 3. read (7, *) A read (7, *) B read (7, *) C, I A=1; B=4; C=5; I=6

program ex 1 implicit none integer A, B, C, I, J open(1, file='entrada. txt')

program ex 1 implicit none integer A, B, C, I, J open(1, file='entrada. txt') C caso 1 C read(1, *) A, B, C C print*, A, B, C C caso 2 C read(1, *) A, B, C, I, J C print*, A, B, C, I, J C caso 3 read(1, *) A read(1, *) B read(1, *) C, I print*, A, B, C, I close(1) end

Detalhes Ø O nome do arquivo pode ser uma variável: print *, 'entre o

Detalhes Ø O nome do arquivo pode ser uma variável: print *, 'entre o nome do arquivo: ‘ read *, NAME open(1, file=NAME) Ø A leitura (usual) é sequencial, então é necessário ler todas as posições anteriores a que você quer para poder chegar na posição desejada. read(1, *) (x(i), i=1, 10) OBS: Tem que saber a quantas informações estão presentes no arquivo para poder definir o tamanho do vetor.

Exemplo Ø Suponha que o arquivo de entrada seja: 1 2 3 4 5

Exemplo Ø Suponha que o arquivo de entrada seja: 1 2 3 4 5 6 7 Ø Qual é o valor das variáveis na leitura abaixo: – read (7, *) (x(i), i=1, 7) – x(1)=1; x(2)=2; x(3)=3; x(4)=4; x(5)=5; x(6)=6; x(7)=7;

Exercício 1 Ø Ler uma matriz 2 x 2 de um arquivo e escrever

Exercício 1 Ø Ler uma matriz 2 x 2 de um arquivo e escrever o seu determinante na tela Ø Arquivo matriz. txt: 1 2 3 4 Ø Saída do programa: Determinante: -2 det = mat(1, 1) * mat(2, 2) - mat(1, 2) * mat(2, 1)

Lembrete: Ø Lendo matriz 2 x 3: Ø Lendo primeiro todas as colunas de

Lembrete: Ø Lendo matriz 2 x 3: Ø Lendo primeiro todas as colunas de uma linha Ø Opção 1 do i=1, 2 do j=1, 3 read(1, *) (mat(i, j)) enddo Enddo Ø Opção 2 do i=1, 2 read(1, *) ((mat(i, j), j = 1, 3)) endo Ø Opção 3 read(1, *) ((mat(i, j), j = 1, 3), i=1, 2)

program ex 3 implicit none integer i, j, det, mat(2, 2) open(1, file='matriz. txt')

program ex 3 implicit none integer i, j, det, mat(2, 2) open(1, file='matriz. txt') C lê as colunas de uma linha primeiro e depois a próxima linha read(1, *) ((mat(i, j), j = 1, 2), i=1, 2) det = mat(1, 1) * mat(2, 2) - mat(1, 2) * mat(2, 1) print *, 'Determinante: ', det end

Exercício 2 Ø Suponha que um médico tem um arquivo onde armazena informações sobre

Exercício 2 Ø Suponha que um médico tem um arquivo onde armazena informações sobre seus 3 pacientes. Os dados armazenados no arquivo são: nome. Paciente, peso, nível. Colesterol, nível. Glicose. Escreva um programa que ajude o médico a fazer a seguinte consulta: 1. Nome dos pacientes com nível de colesterol acima de 120 2. Nome dos pacientes com nível de glicose acima de 100 3. Relatório sobre o paciente A Exemplo arquivo de pacientes: paciente. txt joao 70 100 120 maria 60 80 89 ana 120 200 250

Parte II

Parte II

Escrita simples de arquivo Ø Funciona com objetivo semelhante ao “print *”, mas faz

Escrita simples de arquivo Ø Funciona com objetivo semelhante ao “print *”, mas faz a escrita em um arquivo específico. Ø Comando: OPEN(<identificador>, FILE=‘<nome do arquivo>’) WRITE(<identificador>, *) <dados a serem escritos> CLOSE (<identificador>)

Exemplo program ex 2 implicit none integer num, pot open(1, file='entrada. txt') read(1, *)

Exemplo program ex 2 implicit none integer num, pot open(1, file='entrada. txt') read(1, *) num, pot open(2, file='saida. txt') write(2, *) num ** pot end Ø Arquivo entrada. txt: 4 3 Ø Arquivo saída. txt: 64

Exercício 1 Ø Suponha que um médico tem um arquivo onde armazena informações sobre

Exercício 1 Ø Suponha que um médico tem um arquivo onde armazena informações sobre seus 3 pacientes. Os dados armazenados no arquivo são: nome. Paciente, peso, nível. Colesterol, nível. Glicose. Escreva um programa que gere os relatórios abaixo em arquivos diferentes: 1. Nome dos pacientes com nível de glicose acima de 100 e com peso acima de 100 kg. Relatório contendo os nomes dos pacientes, os níveis de glicose de cada um e seus pesos. 2. Nome dos pacientes com nível de glicose (>100) ou colesterol alto (>120). Relatório com os nomes dos pacientes. 3. Relatório sobre o paciente A

Exercício 2 Ø Uma secretária possui duas listas cada uma com 3 nomes e

Exercício 2 Ø Uma secretária possui duas listas cada uma com 3 nomes e telefones de professores em dois arquivos de entrada (cada nome está associado a somente 1 telefone). Crie uma terceira lista de saída, guardando em um arquivo, que contenha a compilação das duas listas sem repetir os nomes. Caso um nome aparece em uma lista associada a um telefone e na outra associada a outro telefone, associe os dois telefones ao mesmo nome. Lista 1 Lista 2 Lista de saída Ana 1111 -1111 João 2222 -2222 Maria 3333 -3333 Valeria 4444 -4444 João 2222 -2222 Maria 5555 -5555 Ana 1111 -1111 João 2222 -2222 Maria 3333 -3333 5555 -5555 Valeria 4444 -4444

Exercício 3 Ø Faça um programa onde o usuário forneça o nome de um

Exercício 3 Ø Faça um programa onde o usuário forneça o nome de um arquivo que contém uma lista de 10 número e produza como saída em outro arquivo a lista ordenada. O nome do arquivo de saída também deve ser fornecido pelo usuário.

Parte III

Parte III

Modularização de programas Ø Até agora o programa e seus subprogramas ficavam em um

Modularização de programas Ø Até agora o programa e seus subprogramas ficavam em um único arquivo. Contudo, é possível organizar o programa de forma que subprogramas correlatos fiquem em arquivos separados. Ø O comando INCLUDE permite incluir o código dos arquivos de subprogramas no arquivo do programa principal.

Exemplo Arquivo ex 4. f program ex 4 implicit none real media, pot print

Exemplo Arquivo ex 4. f program ex 4 implicit none real media, pot print *, media(4, 5) print *, pot(4, 3) end include 'media. f‘ include 'pot. f' Arquivo media. f real function media(n 1, n 2) implicit none integer n 1, n 2 media = (n 1 + n 2) / 2. 0 end Arquivo pot. f real function pot(n 1, n 2) implicit none integer n 1, n 2 pot = n 1 ** n 2 end

Exercício 1 Ø Faça uma calculadora que forneça as opções abaixo para o usuário.

Exercício 1 Ø Faça uma calculadora que forneça as opções abaixo para o usuário. Cada operação deve ser implementada em um arquivo diferente. Opções: 1. Somar 2. Subtrair 3. Multiplicar 4. Dividir 0. Sair do programa Qual opção você deseja?

Exercício 2 Ø Uma locadora de veículos aluga automóveis para empresas. A locadora possui

Exercício 2 Ø Uma locadora de veículos aluga automóveis para empresas. A locadora possui dois arquivos de registros: um com o nome das empresas que são (ou foram) seus clientes e o CNPJ, e outro com o CNPJ da empresa, o tipo de veículo alugado e a placa do veículo. As duas listas possuem 10 elementos. Ø Faça um programa que gere como saída os relatórios abaixo. Cada gerador de relatórios deve ser implementado em um arquivo. f diferente 1. Nome das empresas que no momento não estão alugando nenhum veículo 2. Placa de todos os veículos alugados por uma determinada empresa cujo nome é fornecido pelo usuário

Exercício 3 Ø Faça um programa que leia um arquivo contendo uma lista de

Exercício 3 Ø Faça um programa que leia um arquivo contendo uma lista de 10 alunos e a disciplina na qual cada aluno está matriculado (caso um aluno esteja matriculado em mais de uma disciplina, o seu nome aparecerá mais de uma vez na lista). Em outro arquivo encontra-se a lista de 5 professores e a disciplina lecionada por cada professor (cada professor só oferece uma disciplina). – Faça uma subrotina que informe o número de alunos matriculados em uma dada disciplina. – Faça uma função que retorne o número de alunos de um dado professor – Faça uma subrotina que informe o nome dos alunos que não estão matriculados em na disciplina lecionado por um dado professor. – Todos os subprogramas devem ser armazenados em um arquivo diferente.