Baixe o app para aproveitar ainda mais
Prévia do material em texto
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 – BCC701 www.decom.ufop.br/moodle } Execução do comando while: 1. primeiro, a condição é avaliada 2. se a condição for verdadeira, então o bloco de comandos dentro do while é executado, e volta-se ao passo 1. 3. se a condição for falsa, o comando while termina, e a execução prossegue a partir do comando imediatamente subsequente ao comando while. while <condição> <bloco while> end 2 3 for i = <incio>:<incr>:<fim> <bloco for> end O comando for é executado do seguinte modo: 1. o valor de <início> é atribuído à variável i 2. testa-se se i <= <fim> 3. se for, o <bloco for> é executado, a variável i é incrementada de <incr> e volta-se ao passo 2 4. se não for, o comando for termina } O processo de decaimento de um material radioativo é regido pela seguinte equação M(t) = M0 e-λt onde M(t) = quantidade do material no tempo t M0 = quantidade inicial do material, em t=0 λ = constante de decaimento radioativo 4 3 Faça um programa que imprima a tabela e o gráfico do decaimento radioativo do polonio210, em intervalos de 10 dias } Exercício 1: Ao longo de 300 dias } Exercício 2: até que a massa da amostra seja 1/2 da massa original Considere M0 = 1kg (em t=0) λ = 1/200 dias-1 5 6 Decaimento Polonio 210 ------------------------------- Tempo (d) Massa (kg) 0 1.0000 10 1.0000 20 0.9512 … 130 0.5488 140 0.5220 150 0.4966 … 200 0.3867 4 // impressão cabeçalho da tabela // título e rótulos do gráfico k = 1/200; M = 1; for t=0:10:200 printf("%5.0f %5.4f\n",t,M) plot(t,M,"+") M = %e^(-k*t) end 7 8 Decaimento Polonio 210 ------------------------------- Tempo (d) Massa (kg) 0 1.0000 10 1.0000 20 0.9512 30 0.9048 … 120 0.5769 130 0.5488 140 0.5220 5 // impressão cabeçalho da tabela // título e rótulos do gráfico k = 1/200; M = 1; t=0 while M > 0.5 printf("%5.0f %5.4f\n",t,M) plot(t,M,"+") M = %e^(-k*t); t = t+10 end 9 for i = 1:3 for j = 1:2 printf("i=%g, j=%g\n",i,j) end end 10 O que é impresso pelo programa abaixo? i=1, j=1 i=1, j=2 i=2, j=1 i=2, j=2 i=3, j=1 i=3, j=2 6 } Obter a tabuada de multiplicação: 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 // tabela de multiplicação for linha = 1:9 for coluna = 1:9 printf("%g",linha*coluna); end end Corpo do loop externo: imprime uma linha Corpo do loop interno: imprime uma coluna de uma linha 7 } Ao executar este programa verificamos entretanto que sua saída está ininteligível: 12345678924681012141618369121518212... } Esquecemos de: ◦ Mudar de linha, com o \n, e ◦ Dentro de cada linha, imprimir cada valor com um número fixo de colunas // Tabuada de multiplicação for linha = 1:9 for coluna = 1:9 printf("%3g",linha*coluna); end printf("\n"); end Fora do loop interno! 8 } Escreva um programa que leia um vetor e imprima os seguintes dados: ◦ a média dos valores do vetor ◦ os valores menores que a média ◦ os valores maiores ou iguais à média 15 Maiores= e menores que média ---------------------------- Digite um vetor de números: [2,5,8,1,12,30] Média = 9.66667 Maiores ou iguais à média: 12. 30. Menores que a média: 2. 5. 8. 1. 16 9 17 v = input(“Digite um vetor: “) n = length(v) soma = 0 for i=1:v soma = soma + v(i) end média = soma / n 18 v = input(“Digite um vetor: “) // cálculo da média . . . maiores = [] menores = [] for i=1:v if v(i) >= media then maiores = [maiores v(i)] else menores = [menores v(i)] end end 10 19 v = input(“Digite um vetor: “) // cálculo da média media = mean(v) maiores = v(v >= media) menores = v(v < media) } Problema: Dado um número inteiro positivo n, imprimir a sequência de todos os números primos menores ou iguais a n. } Subproblema: Dado um número inteiro positivo k, determinar se k é primo. 20 11 } Definição: Um número k é primo se os únicos divisores de k são 1 e k. } Uma solução mais geral para o problema, baseia-se em determinar todos os divisores de k, diferentes de 1 e k, armazenando esses valores em um vetor divisores. } Então, testar se o número é primo seria equivalente a testar divisores == [] 21 22 // determina a lista de divisores de k // diferentes de 1 e k divisores = [] for i=2:int(k/2) if modulo(k,i)==0 then divisores = [divisores i] end end 12 23 // determina a lista de divisores de k // diferentes de 1 e k . . . if divisores == [] then // é primo else // não é primo end 24 n = input(“Digite inteiro positivo: ”) primos = [] for k = 2:n divisores = [] for i=2:int(k/2) if modulo(k,i)==0 then divisores = [divisores i] end end if divisores == [] then primos = [primos k] // k é primo end end disp(primos) 13 25 n = input(“Digite inteiro positivo: ”) primos = [] for k = 2:n if eprimo(k) then primos = [primos k] // k é primo end end disp(primos) 26 } A última solução é bem mais simples, né? } No próximo módulo, você verá como podemos definir novas funções em Scilab. } O uso de funções em programas torna o código mais simples, claro, modular e reusável.
Compartilhar