Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle Andréa Iabrudi [email protected] 1 O valor de ex, onde x é um número real, pode ser calculado pela seguinte série de Taylor: e = 1+ x x 1! + x 2 2! + x 3 3! + =å ¥ i=0 x i i! Um valor aproximado para ex pode ser obtido se utilizarmos um número finito de termos no somatório acima. 2 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 Dados x e n, queremos é calcular e =å x n i=0 x i i! Como deve ser feito esse cálculo? Você usaria um for ou um while? 4 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 5 // 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/den num = num * x den = den * i end printf(”ex = %g”,soma) 6 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 n e0.5 sn – sn-1 2 3 4 1.5 1.625 1.64583 0.125 0.02083 7 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 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 9 // 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 * i end printf(”ex = %g”,soma) 10 Suponha que queremos escrever um programa para determinar quantas vezes um dado valor n ocorre em um vetor v. Considere os dois seguintes casos: Como você implementaria o programa em cada caso? ◦ 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] 11 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) if v(i)==n then count = count +1 end end printf("%g ocorre %g vezes",n,count) 12 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 while sv(i) > n i = i +1 end count = 0 while sv(i) == n count = count + 1 i = i+1 end printf("%g ocorre %g vezes",n,count) 13 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 // 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ção end // grava a tabela de notas em arquivo 15 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): “ 16 // le a tabela de notas de um arquivo // exibe menu de opções op = 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 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 por matr if (op == 'A' | op == 'a') then Procura na primeira linha // altera nota de aluno da matriz notas. matr = input("Matrícula: ") ll = linha em que matr ocorre, ou nota = input("Nota: ") ll = [], se matr ll = find(notas(:,1)==matr) não ocorre em notas if ll==[] then notas = [notas; [matr nota]] else Inclui novo notas(ll,2)= nota aluno/nota na matriz notas. end Modifica a nota printf("\n") do aluno 19 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 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 Abre o arquivo para leitura diretório DIR // le o arquivo de notas no DIR = "/Users/luciliacf/Desktop/" [fd,err1] = mopen(DIR + "notas", "r") err2 = meof(fd) Testa se o arquivo está vazio mclose(DIR+"notas") Fecha o arquivo if err1 <> 0 | err2 <> 0 then notas = [] Se ocorreu erro na leitura do arquivo, inicializa a matriz notas vazia else notas = fscanfMat(DIR+"notas") end Lê a matriz notas do arquivo “notas” 22 Somente grava o notasarquivo se a matriz de notas não for vazia // regrava arquivo de if notas <> [] then [x,k] = gsort(notas(:,1),'g','i') Ordena a matriz notas = notas(k,:) notas por matrícula fprintfMat(DIR + "notas",notas) end Grava a matriz notas do arquivo “notas” 23