230 likes | 336 Views
Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle. Aula 07 Comandos de Repetição while e for. Andréa Iabrudi andrea.iabrudi@iceb.ufop.br. e x – Série de Taylor.
E N D
Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle Aula 07Comandos de Repetiçãowhilee for Andréa Iabrudi andrea.iabrudi@iceb.ufop.br
ex – Série de Taylor • O valor de ex, onde x é um número real, podesercalculadopelaseguintesérie de Taylor: • Um valor aproximadoparaexpodeserobtido se utilizarmos um númerofinito de termos no somatórioacima.
ex – no. de termosfixo • Escreva um programaqueleia o um número real x e calcule um valor aproximadoparaex, com um número de termosn, tambémfornecidocomoentradapara o programa. • Como deveserfeitoessecálculo? • Vocêusaria um forou um while?
for versus while • Dados x e n, queremosécalcular • Como deveserfeitoessecálculo? • Vocêusaria um forou um while?
ex – no. de termosfixo • Exemplos de execução: Qual é o valor de x? .5 Qual o número de termos? 1 ex = 1. Qual é o valor de x? .5 Qual o número de termos? 2 ex = 1.5 Qual é o valor de x? .5 Qual o número de termos? 3 ex = 1.625
Cálculo de ex – no. fixo de termos // 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; fori=2:n soma = soma + num/den num = num * x den = den * i end printf(”ex = %g”,soma)
ex – no. de termosfixo • Note que a diferença entre osvalorescalculadosdimunui, àmedidaqueaumentamos o número de termos do sometório, e o valor calculadoaproxima-se do valor de ex
for versus while • Escreva um programaqueleia o um número real x e calcule um valor paraex, com erro de aproximação inferior a um valor dado comoentrada. • Como deveserfeitoessecálculo? • Vocêusaria um forou um while?
ex – aproximaçãodesejada Exemplo de execução: Qual é o valor de x? .5 Qual erro de aproximação? 0.01 ex = 1.64844 no. de termos = 5 Qual é o valor de x? .5 Qual erro de aproximação? .00000001 ex = 1.64872 no. de termos = 10
Cálculo de ex – errodesejado // 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; whilesAnt – sn >= err soma = soma + num/den i = i+1 num = num * x den = den * i end printf(”ex = %g”,soma)
Frequênciaem um vetor • Suponhaquequeremosescrever um programaparadeterminarquantasvezes um dado valor nocorreem um vetorv. • Considereosdoisseguintescasos: • O vetorvnãoestá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 vetorvestáordenado (emordemdescendente) 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 programaemcadacaso?
Frequênciaemvetornãoordenado 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= 0 for i = 1:length(v) ifv(i)==nthen count = count +1 end end printf("%g ocorre %g vezes",n,count)
Frequênciaemvetorordenado 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 = 1 whilesv(i) > n i = i +1 end count = 0 whilesv(i) == n count= count + 1 i = i+1 end printf("%g ocorre %g vezes",n,count)
Sistema de Notas de Alunos • Faça um programaqueapresenteaousuário um menu com as seguintesopções: • inclui/altera nota de aluno • listanotas de todososalunos • termina o programa • Conforme a opçãoselecionada, o programadeveexecutar a açãocorrespondente e voltar a apresentar o menu de opções
Estrutura do programa // lêa tabela de notas de um arquivo // exibemenu de opções // op = le opção whileop <> fimdo ifop == inclui/alterathen // inclui/altera nota de aluno elseifop == listathen // exibenotas de todososalunos else // opçãoinválida end // op = le opção end // gravaa tabela de notasemarquivo
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 – listatodas as notas\n”) printf(“ F – termina o programa\n”) msg = “Digite a opçãodesejada (A,C,L,P,F): “
Refinando o programa // le a tabela de notas de um arquivo // exibe menu de opções op = input(msg,’s’); whileop <> ‘F’ | op <> ‘f’ do ifop == ‘A’ | op == ‘a’then // inclui/altera nota de aluno elseifop == ‘L’ | op == ‘L’then // exibenotas de todososalunos else // opçãoinválida end op = input(msg,’s') end // gravaa tabela de notasemarquivo
Inclui/altera nota de aluno • le a matrícula e a nota do aluno; • se a matrículajáocorrernatabela, a nota éalterada • se a matrículanãoocorrrenatabela, a matrícula e a nota sãoincluídas
Inclui/altera nota de aluno Procura por matr na primeira linha da matriz notas. ll = linha em que matr ocorre, ou ll = [], se matr não ocorre em notas 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") Inclui novo aluno/nota na matriz notas. Modifica a nota do aluno
Modificando o programa • Na aula práticavocêvaiincluirnovasopções no sistema de controle de notas: • consulta nota de um aluno • Lêmatrícula e informa a nota do aluno • exibemensagem, caso o alunonãoestejacadastrado • listaalunosaprovados • slecionaosalunos com nota >= 6.0 • exibelista de matrícula/nota dessesalunos
Lendo e gravandoemarquivo • Vamosusarcomandosbastante simples paraler e gravar as notasem um arquivo. • Se vocêquiser saber maissobre E/S emarquivos, consultelivros e manuais de Scilab. • Vamossuporque o arquivonotasserá lido e gravadoemem um diretóriocujo “path” estáarmazenadonavariável DIR.
Lendo o arquivonotas Abre o arquivo para leitura // le o arquivo de notas no diretório DIR DIR = "/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 Testa se o arquivo está vazio Fecha o arquivo Se ocorreu erro na leitura do arquivo, inicializa a matriz notas vazia Lê a matriz notas do arquivo “notas”
Gravando o arquivonotas Somente grava o arquivo se a matriz de notas não for vazia // regravaarquivo de notas if notas <> [] then [x,k] = gsort(notas(:,1),'g','i') notas = notas(k,:) fprintfMat(DIR + "notas",notas) end Ordena a matriz notas por matrícula Grava a matriz notas do arquivo “notas”