andréa iabrudi [email protected] 1 universidade federal de ouro preto - ufop departamento...
TRANSCRIPT
Aula 07
Comandos de Repetiçãowhile e for
Andréa [email protected]
1
Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM
Programação de Computadores I – BCC701www.decom.ufop.br/moodle
O valor de ex, onde x é um número real, pode ser calculado pela seguinte série de Taylor:
Um valor aproximado para ex pode ser obtido se utilizarmos um número finito de termos no somatório acima.
2
ex – Série de Taylor
Escreva um programa que leia o um número real x e calcule um valor aproximado para ex, com um número de termos n, também fornecido como entrada para o programa.
Como deve ser feito esse cálculo? Você usaria um for ou um while?
3
ex – no. de termos fixo
Dados x e n, queremos é calcular
Como deve ser feito esse cálculo? Você usaria um for ou um while?
4
for versus while
Exemplos de execução:Qual é o valor de x? .5Qual o número de termos? 1ex = 1.
Qual é o valor de x? .5Qual o número de termos? 2ex = 1.5
Qual é o valor de x? .5Qual o número de termos? 3ex = 1.625
5
ex – no. de termos fixo
// Cálculo de ex
x = input(”Qual é o valor de x? ")n = input(”Qual o número de termos? ")soma = 1;num = x; den = 1;for i=2:n
soma = soma + num/dennum = num * x
den = den * iendprintf(”ex = %g”,soma) 6
Cálculo de ex – no. fixo de termos
Note que a diferença entre os valores calculados dimunui, à medida que aumentamos o número de termos do sometório, e o valor calculado aproxima-se do valor de ex
7
ex – no. de termos fixo
n e0.5 sn – sn-1
2 1.53 1.625 0.1254 1.64583 0.02083
Escreva um programa que leia o um número real x e calcule um valor para ex, com erro de aproximação inferior a um valor dado como entrada.
Como deve ser feito esse cálculo? Você usaria um for ou um while?
8
for versus while
Exemplo de execução:
Qual é o valor de x? .5Qual erro de aproximação? 0.01ex = 1.64844no. de termos = 5
Qual é o valor de x? .5Qual erro de aproximação? .00000001ex = 1.64872no. de termos = 10
9
ex – aproximação desejada
// Cálculo de ex
x = input(”Qual é o valor de x? ")err = input(”Qual erro de aproximação? ")sn = 1; snAnt = %inf;i = 1; num = x; den = 1;while sAnt – sn >= err
soma = soma + num/den i = i+1
num = num * x den = den * iendprintf(”ex = %g”,soma) 10
Cálculo de ex – erro desejado
Suponha que queremos escrever um programa para determinar quantas vezes um dado valor n ocorre em um vetor v.
Considere os dois seguintes casos:◦ O vetor v não está ordenado
v = [2 8 4 3 2 3 3 8 3 5 1 4 5 9 2 7 2 3 5 1 8 1 9]◦ O vetor v está ordenado (em ordem descendente)
v = [9 9 8 8 8 7 5 5 5 4 4 3 3 3 3 3 2 2 2 2 1 1 1]
Como você implementaria o programa em cada caso?
11
Frequência em um vetor
v = [2 8 4 3 2 3 3 8 3 5 1 4 5 9 2 7 2 3 5 1 8 1 9]
n = input("Digite o número procurado: ")
count = 0for i = 1:length(v) if v(i)==n then count = count +1 endend
printf("%g ocorre %g vezes",n,count)12
Frequência em vetor não ordenado
v = [9 9 8 8 8 7 5 5 5 4 4 3 3 3 3 3 2 2 2 2 1 1 1]n = input("Digite o número procurado: ")
i = 1while sv(i) > n i = i +1end
count = 0while sv(i) == n count = count + 1 i = i+1end
printf("%g ocorre %g vezes",n,count)13
Frequência em vetor ordenado
Faça um programa que apresente ao usuário um menu com as seguintes opções:
◦ inclui/altera nota de aluno◦ lista notas de todos os alunos◦ termina o programa
Conforme a opção selecionada, o programa deve executar a ação correspondente e voltar a apresentar o menu de opções
14
Sistema de Notas de Alunos
// lê a tabela de notas de um arquivo// exibe menu de opções// op = le opção while op <> fim do if op == inclui/altera then // inclui/altera nota de aluno elseif op == lista then // exibe notas de todos os alunos else // opção inválida end // op = le opçãoend// grava a tabela de notas em arquivo 15
Estrutura do programa
16
Exibindo o menu de opções
printf(“Sistema de Controle de Notas\n”)printf(“-----------------------------\n”)printf(“Opções: A – altera nota de aluno\n”)printf(“ L – lista todas as notas\n”)printf(“ F – termina o programa\n”)
msg = “Digite a opção desejada (A,C,L,P,F): “
// le a tabela de notas de um arquivo// exibe menu de opçõesop = input(msg,’s’);
while op <> ‘F’ | op <> ‘f’ do if op == ‘A’ | op == ‘a’ then // inclui/altera nota de aluno elseif op == ‘L’ | op == ‘L’ then // exibe notas de todos os alunos else // opção inválida end op = input(msg,’s')end// grava a tabela de notas em arquivo
17
Refinando o programa
le a matrícula e a nota do aluno; se a matrícula já ocorrer na tabela, a nota é alterada
se a matrícula não ocorrre na tabela, a matrícula e a nota são incluídas
18
Inclui/altera nota de aluno
if (op == 'A' | op == 'a') then // altera nota de aluno matr = input("Matrícula: ") nota = input("Nota: ") ll = find(notas(:,1)==matr) if ll==[] then notas = [notas; [matr nota]] else notas(ll,2)= nota end printf("\n") 19
Inclui/altera nota de alunoProcura por matr na primeira linha da matriz notas. ll = linha em que matr ocorre, ou ll = [], se matr não ocorre em notas
Inclui novo aluno/nota na matriz notas.
Modifica a nota do aluno
Na aula prática você vai incluir novas opções no sistema de controle de notas:
◦ consulta nota de um aluno Lê matrícula e informa a nota do aluno exibe mensagem, caso o aluno não esteja cadastrado
◦ lista alunos aprovados sleciona os alunos com nota >= 6.0 exibe lista de matrícula/nota desses alunos
20
Modificando o programa
Vamos usar comandos bastante simples para ler e gravar as notas em um arquivo.
Se você quiser saber mais sobre E/S em arquivos, consulte livros e manuais de Scilab.
Vamos supor que o arquivo notas será lido e gravado em em um diretório cujo “path” está armazenado na variável DIR.
21
Lendo e gravando em arquivo
// le o arquivo de notas no diretório DIRDIR = "/Users/luciliacf/Desktop/"[fd,err1] = mopen(DIR + "notas", "r")err2 = meof(fd)mclose(DIR+"notas")if err1 <> 0 | err2 <> 0 then notas = []else notas = fscanfMat(DIR+"notas")end
22
Lendo o arquivo notasAbre o arquivo para leitura
Testa se o arquivo está vazio
Fecha o arquivo
Lê a matriz notas do arquivo “notas”
Se ocorreu erro na leitura do arquivo, inicializa a matriz notas vazia
// regrava arquivo de notasif notas <> [] then [x,k] = gsort(notas(:,1),'g','i') notas = notas(k,:) fprintfMat(DIR + "notas",notas)end
23
Gravando o arquivo notasSomente grava o arquivo se a matriz de notas não for vazia
Ordena a matriz notas por matrícula
Grava a matriz notas do arquivo “notas”