290 likes | 414 Views
Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I – BCC701 www.decom.ufop.br/moodle. Aula 06 Comandos de Repetição for. Andréa Iabrudi andrea.iabrudi@iceb.ufop.br. O Comando while. while < condição > < bloco while> end.
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 06Comandos de Repetiçãofor Andréa Iabrudi andrea.iabrudi@iceb.ufop.br
O Comando while • while <condição> • <bloco while> • end • Execução do comando while: • primeiro, a condiçãoéavaliada • se a condição for verdadeira, então o bloco de comandosdentro do while éexecutado, e volta-se aopasso 1. • se a condição for falsa, o comando while termina, e a execuçãoprossegue a partir do comandoimediatamentesubsequenteaocomando while.
Fatorial • Faça um programaqueleia um valor inteironãonegativon e imprima o fatorial de n.
Fatorial - usandowhile n = input(“n = “) k = 1; fat = 1; whilek <= n fat = fat * k; k = k + 1; end O número de iteraçõeséconhecido a priori = n Emcadapasso do loop, multiplicamosfatpork e incrementamosk
Comandofor • Quando o número de iterações de um loop éconhecido a priori, podemosusaruma forma mais simples de comando de repetição: • for i = <incio>:<incr>:<fim> • <bloco for> • end iévariável de controle do for
Comandofor for i = <incio>:<incr>:<fim> <bloco for> end • O comando for éexecutado do seguintemodo: • o valor de <início>éatribuídoàvariáveli • testa-se se i <= <fim> • se for, o <bloco for> éexecutado, a variáveliéincrementada de <incr> e volta-se aopasso 2 • se não for, o comando for termina
Fatorial – usandofor • n = input(“n = “) fat = 1; for k = 1:n fat = fat * k; end n = input(“n = “) k = 1; fat = 1; whilek <= n fat = fat * k; k = k + 1; end compare as duasformas
Exercício 1 • Qualseriamosvaloresimpressospelosseguintestrechos de programas? for i= 3:3:10 printf(“%g\n”,i) end for i= 7:-2:1 printf(“%g\n”,i) end for i= 10:5 printf(“%g\n”,i) end for i= 7:-2:8 printf(“%g\n”,i) end
Número de iterações do for for i = <incio>:<incr>:<fim> <bloco for> end • Qualé o número de iterações do comando? int((fim – inicio)/incr) + 1)
Exercício2 • Escreva um programaqueleia um vetor e imprima a soma e o produto de todososelementosdessevetor. • O cálculo da soma e do produto dos elementos do vetordeveserfeitousando-se o comandofor
Exercício2 – solução • v= input(“VETOR: “) soma = 0;produto = 1; for k = 1:length(v) soma = soma+v(k); produto = produto * v(k) end printf(“soma = %g\n”,soma) • printf(“produto = %g\n”,produto)
Soma e produtodos elementos de umamatriz • SabemosqueScilabprovêfunçõesparacomputar a soma e o produto de vetoresoumatrizes. • Agora vocêsabecomoessasfunçõespodemserimplementadas, usando-se um comandofor • EmScilab, essasfunçõessãoimplementadasemparalelo, o queresultaemcódigomaiseficiente do que a implementaçãousando o for
Exercício3 • Escreva um trecho de programaparacalcular o elementomáximo de um vetorv e a posiçãoemqueesseelementoocorre no vetor, usando o comandofor
Exercício3 – solução maximo = -%inf; pos = 0; for k = 1:length(v) ifv(k) > maximothen maximo = v(k); pos = k end end
Máximo e mínimo de umamatriz • SabemosqueScilabprovêfunçõesparacomputar o máximo e o mínimo de umamatriz. • EmScilab, essasfunçõessãoimplementadasemparalelo, o queresultaemcódigomaiseficiente do que a implementaçãousando o for
Comandosforaninhados for i = 1:3 for j = 1:2 printf("i=%g, j=%g\n",i,j) end end O queéimpressopeloprogramaabaixo? i=1, j=1 i=1, j=2 i=2, j=1 i=2, j=2 i=3, j=1 i=3, j=2
Tabuada de Multiplicação • 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– foraninhados Corpo do loop externo: imprimeumalinha Corpo do loop interno: imprimeumacoluna de umalinha
Tabela de Multiplicação • 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
Tabela de Multiplicação Fora do loop interno!
Tabela de Senos • Produzirumatabelacomoesta, com xvariando de 0 a 2π, com intervalos de 0.2 UFMG DCC001 2013-1
Tabela de Senos1ª tentativa UFMG DCC001 2013-1
Tabela de Senos2ª Tentativa UFMG DCC001 2013-1
Tabela de Senos2ª Tentativa UFMG DCC001 2013-1
Tabela de Senos UFMG DCC001 2013-1
Controlando colunas e decimais com o formato %f printf("\n%3.1f %7.4f",x, sin(x)) 3 colunas, 1 casa decimal 7 colunas, 4 casas decimais UFMG DCC001 2013-1
Tabela de senosSoluçãousandovetores // Tabela da função Seno // Impressão do cabeçalho printf("\nx seno(x)") // Impressão das linhas da tabela xs= 0:0.2:2*%pi sinxs = sin(xs) printf("\n%3.1f %7.4f",[xs’sinxs’])
Números de Fibonacci • A sequência de números de Fibonacci1é: 0 1 1 2 3 5 8 13 21 34 55 … • Essasequência tem inúmerasaplicaçõesemmatemática e computação e ocorre com frequênciaemfenômenos da natureza. • Para saber mais, veja http://en.wikipedia.org/wiki/Fibonacci_number
Sequência de Fibonacci Ladrilhamento de Fibonacci: quadradoscujosladossãonúmeros de Fibonacci. Aproximaçãopara a espiraláurea, criadadesenhando arcos circularesconectando cantos opostos de quadrados do labrilhamento de Fibonacci 1,1,2,3,5,8,13,21,34. Espiraláureaéumaespirallogaritmicacujofator de crescimentoé a razãoáurea. A razãoáureaé a raiz da equação x2 = x + 1