andréa iabrudi [email protected] 1 universidade federal de ouro preto - ufop departamento...

23
Aula 07 Comandos de Repetição while e for Andréa Iabrudi [email protected] 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle

Upload: internet

Post on 17-Apr-2015

103 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 2: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 3: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 4: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

Dados x e n, queremos é calcular

Como deve ser feito esse cálculo? Você usaria um for ou um while?

4

for versus while

Page 5: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 6: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

// 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

Page 7: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 8: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 9: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 10: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

// 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

Page 11: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 12: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 13: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 14: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 15: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

// 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

Page 16: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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): “

Page 17: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

// 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

Page 18: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 19: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 20: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 21: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

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

Page 22: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

// 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

Page 23: Andréa Iabrudi andrea.iabrudi@iceb.ufop.br 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I

// 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”