You are on page 1of 22

Contedo Introduo Explorar as primitivas bsicas Primitivas a usar: Desenhar um polgono regular O quadrado O tri ngulo equiltero O hexgono

hexgono Desenhar um polgono regular qualquer !egistrar um procedimento "tividade ### $so de coordenadas "presentao "tividade: "s variveis O papel das variveis Exemplos prticos Desenhar um ret ngulo de altura e largura determinadas Desenhar uma %orma com di%erentes dimens&es "tividade " recursividade 'om a rea de desenho# Primeiro exemplo: (r)s novas primitivas: *egundo exemplo: 'om a rea de texto $m primeiro exemplo: !eali+ar um teste de sada

"lgumas t,cnicas de preenchimento Primeira abordagem *egunda abordagem (erceira abordagem 'aracteres de calculadora O programa 'riao de uma pequena animao Explorar listas e variveis# Interagir com o usurio Programar um pequeno -ogo# $ma animao: o boneco que cresce "tividade com n.meros primos entre si# /oo de 0D' 1mximo divisor comum2 "lgoritmo de Euclides 'alcular 0D' em 3ogo

'alcular uma aproximao de 'omplicando um pouco mais:

que gera ##### 'orreo das atividades 'aptulo 4 'aptulo 5 'aptulo 6 O rob7 " r 'aptulo 8

Introduo /esse manual9 voc) encontrar um certo n.mero de ingredientes a %im de dominar a linguagem 3ogo# 'ada captulo tenta abordar uma noo espec%ica da linguagem e prop&e atividades a serem reali+adas quer : maneira de descoberta quer para auto;avaliao 1sim9 h erros cometidos propositalmente neste manual ; veri%ique as corre&es disponveis no seu %inal2# 'om este manual no se pretende o%erecer o tutorial ideal para apreender o 3O<O# *atis%a+;nos propor diversas pistas9 di%erentes abordagens sobre certos aspectos da programao em 3O<O# "s atividades so de qualquer nvel e9 na opinio do autor original9 representa um bom painel do que , capa+ de se reali+ar com a linguagem 3O<O# Espero que as explica&es tra+idas se-am as mais claras possveis= /o hesitem em %a+er;nos chegar seus comentrios e suas crticas em relao a este tutorial# E agora comecem a iniciar;se nas alegrias da pequena tartaruga=

Explorar as primitivas bsicas Para mover a tartaruga 1>tat>2 pela tela9 usamos ?primitivas@ 1que so comandos pr,;de%inidos2# /este primeiro captulo9 exploraremos as primitivas bsicas que permitem controlar a >tat># Subseces Primitivas a usar: Desenhar um polgono regular O quadrado O tri ngulo equiltero O hexgono Desenhar um polgono regular qualquer !egistrar um procedimento "tividade ###

Primitivas a usar:

A# B 4# B 5# B 6# B E# B F# B G# B 8# B H# B

C pf nmero 1pf 502 Da+ a tat avanar o n.mero de passos de tartaruga indicados por um n.mero# C pt nmero 1pt 1002 Da+ a tat recuar o n.mero de passos de tartaruga indicados por um n.mero# C pd nmero 1pd 902 " tat gira para a direita tantos graus quanto indicados# C pe nmero 1pe 452 " tat gira para a esquerda tantos graus quanto indicados# C ld 3impa os desenhos na tela 1ld ou limpadesenho2 e reiniciali+a a tat ao centro da tela 1sua >origem>2# C at " tat %ica visvel na tela# C dt Esconde a tat 1ela >desaparece>2# Interessante recurso quando se dese-a que um programa se-a mais rpido# C un 3evanta o lpis# " tat no deixa mais trao ao deslocar;se## C ul $se lpis 1equivale a >baixecaneta> em outros programas 3ogo2# " tat desenha ou escreve por onde passa# C repita nmero (lista repita 5[pf 50 pd 45]) !epete as instru&es contidas na lista tantas ve+es quanto indicadas pelo n.mero#

AI#B

Desenhar um polgono regular "qui9 vamos aprender a desenhar um quadrado9 um tri ngulo equiltero9 um pentgono regular etc#

Subseces

O quadrado O tri ngulo equiltero O hexgono Desenhar um polgono regular qualquer

!uadrado 1'ada quadrcula na %igura ao lado representa 6I passos de tartaruga#2 Para desenhar o quadrado proposto9 deve;se escrever: pf 200 pd 90 pf 200 pd 90 pf 200 pd 90 pf 200 pd 90 $ma %orma mais elegante e rpida seria escrever essa mesma instruo da seguinte %orma: repita 4[pf 200 pd 90]

tri"ngulo e!uiltero 1"qui9 cada quadrcula representa 5I passos de tartaruga2# Je-amos como desenhar um tri ngulo equiltero de AEI passos de tartaruga de lado# O comando dever ser algo no estilo: repita 3[pf 150 pd ....] !esta determinar o ngulo adequado# /um tri ngulo equiltero9 os ngulos valem todos FIK# 'omo a tat deve girar %ora do tri ngulo# O ngulo valer A8I;FILA4IK# Ento o comando dever ser: repita 3[pf 150 pd 120]

hexgono Dessa ve+9 cada quadrcula vale 4I passos de tartaruga# repita 6[pf 80 pd ....] /ota;se que9 ao deslocar;se9 a tat d uma volta completa sobre ela mesma# Esta rotao de 5FIK , %eita em F etapas# Por conseguinte9 cada ve+9 gira O comando dever ser: repita 6[pf 80 pd 60] #

Desenhar um polgono regular !ual!uer 0ais uma ve+9 seguindo o pequeno raciocnio anterior9 deve;se notar que para desenhar um polgono de

lados9 o ngulo ser obtido dividindo 5FI por

# Por exemplo:

Para desenhar um pentgono regular de lado AII: repita 5[pf 100 pd 72] (360 5!72) Para desenhar um engono regular 1H lados2 de lado 4I: repita 9[pf 20 pd 40] (360 9!40) Para desenhar um###9 digamos9 5FI;gono regular de lado 4: 1este aqui , bem parecido com um crculo9 noM2 repita 360[pf 2 pd 1] Para desenhar um heptgono de lado A4I: repita 7[pf 120 pd 360"7]

#egistrar um procedimento Para evitar digitar repetidas instru&es toda ve+ que quiser desenhar um quadrado9 um tri ngulo9 etc# pode;se de%inir instru&es pessoais chamadas procedimentos # $m procedimento comea pela palavra aprenda e termina com a palavra fim# "o abrir o editor9 digitaramos9 por exemplo aprenda #uadrado repita 4[pf 100 pd 90] fim Em seguida9 clica;se na %igura da tartaruga para %echar o editor de modo a registrar 1>gravar>2 as modi%ica&es# "gora9 cada ve+ que digitar #uadrado9 um quadrado ser desenhado na tela= $tividade %%% $m pequeno quadrado com AI passos de tartaruga# *ua tare%a ser %a+er o desenho abaixo# Para isso9 deve;se de%inir oito procedimentos:

$m procedimento #uadrado que desenhe o quadrado da base da casa# $m procedimento tri que desenhe um tri ngulo equiltero 1o teto da casa2# $m procedimento porta que desenhe um ret ngulo que represente a porta# $m procedimento $%amine que desenhe uma chamin, $m procedimento dep1 que permita a tat ir da posio " at, a posio N# $m procedimento dep2 que %aa a tat ir da posio N at, a posio '# $m procedimento dep3 que %aa a tat ir da posio ' at, a posio D# 1"teno9 talve+ se-a necessrio levantar o lpis da tat###2 $m procedimento $asa que %aa desenhar a casa >chamando> os procedimentos anteriores#

&so de coordenadas

Subseces

"presentao "tividade:

$presentao /esse captulo9 exploraremos a primitiva mudepos# " rea de desenho possui um marcador cu-a origem est situada no centro da tela# Pode;se assim atingir cada um dos pontos da rea de desenho atrav,s das suas coordenadas# mudepos lista mudepos [100 &250] Deslocar a tat at, o ponto cu-as coordenadas so de%inidas na lista# $m pequeno exemplo de uso: ld mudepos [200 100] mudepos [50 &150] mudepos [&100 &150]

$tividade: /esta atividade dever ser desenhada a %igura a seguir# *er permitido usar apenas as primitivas: mudepos9 ld9 un9 ul#

$s variveis

Subseces

O papel das variveis Exemplos prticos Desenhar um ret ngulo de altura e largura determinadas Desenhar uma %orma com di%erentes dimens&es "tividade

papel das variveis Por ve+es9 dese-a;se desenhar uma mesma %orma mas com dimens&es di%erentes# Por exemplo9 se dese-ssemos desenhar um quadrado de lado AII9 um quadrado de lado 4II e um quadrado de lado EIO de%iniramos tr)s procedimentos di%erentes que correspondessem a cada um destes quadrados# 0as no seria mais simples de%inir sP um procedimento ao qual passaria;se em par metro o comprimento do lado dese-adoM Por exemplo9 #uadrado 200 para desenhar o quadrado de lado 4II9 #uadrado 100 para desenhar o quadrado de lado AII9 etc# Q -ustamente nesses casos que %a+emos uso de variveis#

Exemplos prticos Para desenhar um quadrado de lado AII9 usamos: aprenda #uadrado repita 4[pf 100 pd 90] fim Jamos alterar este procedimento para que receba um par metro 1ele diga igualmente argumento 2 indicando a medida do lado do quadrado a ser desenhado# $ma varivel ser precedida do smbolo >:> 1dois pontos2# *e quisermos indicar ao procedimento #uadrado que ele depender da varivel $9 acrescentaremos $ ao %im da linha de de%inio# Desse modo9 a tat avanar $ passos de tartaruga em ve+ dos AII passos de%inidos no procedimentos acima# O procedimento %icar assim: aprenda #uadrado $ repita 4 [pf $ pd 90] fim "ssim9 escrevendo: #uadrado 100 #uadrado 50 #uadrado 30 #uadrado 20 #uadrado 10 Obteremos a %igura ao lado#

Desenhar um ret"ngulo de altura e largura determinadas Jamos aqui de%inir um procedimento de nome retan'ulo que depender de duas variveis# Por exemplo9 re$ 200 100 desenhar um ret ngulo de altura 4II e largura AII# Obteremos: aprenda retan'ulo alt lar repita 2 [pf alt pd 90 pf lar pd 90] fim Experimentemos ento: retan'ulo 200 100 retan'ulo 100 300 retan'ulo 50 150 retan'ulo 1 20 retan'ulo 100 2 'ertamente9 se %ornecermos apenas um argumento ao procedimento retan'ulo9 o interpretador devolver uma mensagem de erro in%ormando que o procedimento precisa de mais um argumento# Desenhar uma 'orma com di'erentes dimens(es !etomando o exemplo da casa no 'aptulo A9 ve-amos como alterar o cPdigo de modo que aprenda a desenh;la em ordem com quaisquer dimens&es# O ob-etivo , colocar um argumento no procedimento $asa para que de acordo com o parmetro9 a casa ou se-a maior ou se-a menor# Dese-amos que $asa 10 desenhe a casa do 'aptulo A# $asa 5 desenhar uma casa na escala I9E# $asa 20 desenhar uma casa com dimens&es duas ve+es maior9 etc# " noo de proporcionalidade , certamente sub-acente# *obre o desenho9 do captulo A9 um quadrado representa AI# O procedimento #uadrado era assim: aprenda #uadrado repita 4[pf 150 pd 90] fim "gora dever %icar assim: aprenda #uadrado $ repita 4[pf 15( $ pd 90] fim
G

"ssim9 ao escrever #uadrado 109 o quadrado ter lado AE x AI LAEI# "s propor&es sero bem respeitadas= 'om e%eito9 apercebe;se;se que vai exatamente ser necessrio retomar todos os procedimentos e alterar os comprimentos de deslocamento como segue# 70 tornar;se; 7( $ pf 45 tornar;se; pf 4.5( $ etc De modo mais simples9 bastar contar o n.mero de quadrculas para cada comprimento= "ssim9 teremos: aprenda #uadrado $ repita 4 [pf 15( $ pd 90] fim aprenda tri $ repita 3 [pf 15( $ pd 120] fim aprenda porta $ repita 2 [pf 7( $ pd 90 pf 5( $ pd 90] fim aprenda $%amine $ pf 5.5( $ pd 90 pf 2( $ pd 90 pf 2( $ fim aprenda dep1 $ pd 90 pf 5( $ pe 90 fim aprenda dep2 $ pe 90 pf 5( $ pd 90 pf 15( $ pd 30 fim aprenda dep3 $ l$ pd 60 pf 2( $ pe 90 pf 3.5( $ )$ fim aprenda $asa $ #uadrado $ dep1 $ porta $ dep2 $ tri fim

$ dep3

$ $%amine

$tividade !eali+ar os desenhos abaixo com variveis de modo que se possa obt);los com diversas dimens&es#

$ recursividade Di+;se que um procedimento , recursivo se chamar ele mesmo# Je-amos alguns exemplos que utili+am esta propriedade#

Subseces

'om a rea de desenho# Primeiro exemplo: (r)s novas primitivas: *egundo exemplo: 'om a rea de texto $m primeiro exemplo: !eali+ar um teste de sada

Com a rea de desenho%

Subseces

Primeiro exemplo: (r)s novas primitivas: *egundo exemplo:

Primeiro exemplo: Digite o seguinte procedimento no editor: aprenda e*1 pd 1 e*1 fim

Este procedimento , recursivo dado que o comando e*1 , executado na .ltima linha# "o execut;lo9 constata;se que a tartaruga no cessa de girar sobre si# Para interromper o programa9 somos obrigados a usar o boto P"!E#

)r*s novas primitivas: espere nmero 1espere 602 Nloqueia o programa durante FI avos do n.mero indicado# Por exemplo9 espere 120 interromper o procedimento durante dois segundos# use)orra$%a+ u) 1use)orra$%a2 " tartaruga desloca;se apagando tudo por onde passa# l,pispinta+lp 1l,pispinta2 Passa ao modo padro: a tartaruga deixa um trao ao deslocar;se#

+egundo exemplo: aprenda e*2 pf 200 use)orra$%a espere 60 pt 200 l,pispinta pd 6 e*2 fim (ente adivinhar o que %ar este programa# Executar o comando ld e*2 $m bonito ponteiro dos segundos=

Com a rea de texto

Subseces

$m primeiro exemplo: !eali+ar um teste de sada

&m primeiro exemplo: Digite sucessivamente mostre -)em&.indo9 mo -)em&.indo9 mo [/s$re.o o #ue #uiser] Imagino que voc) - domine a primitiva mostre ou mo# /o esquecer o > quando se quer escrever uma palavra# 0elhor ainda escrever entre colchetes 1B C 2 pois eles aceitaro vrias palavras de uma sP ve+# aprenda e*3 mostre n e*3 n01 fim n Executar o comando e*3 0 1Interrompa com o boto P"!E2 Deitas as mudanas necessrias neste programa para que os n.meros apaream de dois em dois# Dese-amos apresentar todos os n.meros superiores a AII que se-am m.ltiplos de cinco# Rue %a+er no programaM Rue escrever para rod;loM

#eali,ar um teste de sada Digite os seguintes comandos: se 201!3 [mostre [isto 1 .erdadeiro]] se 201!4 [mostre [isto 1 .erdadeiro]][mostre [o $,l$ulo 1 falso]] se 205!7 [mo -.erd][mo -falso] *e estiver em d.vida quanto : sintaxe da primitiva se9 consulte o manual de re%er)ncia do x3ogo# aprenda e*3 n se n!100 [pare] mostre n e*3 n01 fim Executar o comando e*3 0 Daa as mudanas necessrias neste programa para indicar os n.meros compreendidos entre EE e 5EI que se-am m.ltiplos de AA#

AI

$lgumas t-cnicas de preenchimento /esta lio9 veremos como proceder para preencher um ret ngulo de comprimento e altura determinadas# Escolheremos nos exemplos seguintes um ret ngulo de AII por 4II# Subseces

Primeira abordagem *egunda abordagem (erceira abordagem

Primeira abordagem

*e dese-armos9 por exemplo9 desenhar um ret ngulo preenchido de AII por 4II9 uma primeira id,ia pode ser desenhar o ret ngulo de AII por 4II9 depois desenhar um ret ngulo de HH por AHH9 depois um ret ngulo de H8 por AH8### at, o ret ngulo ser preenchido inteiramente# 'omecemos por de%inir um ret ngulo de comprimento e altura que dependa de duas variveis#

aprenda re$ repita 2[pf fim

alt lar alt pd 90 pf

lar pd 90]

Para preencher o nosso grande ret ngulo9 vai;se por conseguinte executar: re$ 100 200 re$ 99 199 re$ 98 198 ..... re$ 1 101 De%inindo ento um procedimento ret ngulo dedicado a desenhar este ret ngulo preenchido# aprenda retan'ulo alt lar re$ alt lar retan'ulo alt&1 lar&1 fim "o testarmos ret2n'ulo 100 200 percebe;se que h um problema: o procedimento no se para quando o ret ngulo , preenchido9 ela continua a desenhar ret ngulos= Jai;se por conseguinte acrescentar um teste que permite detectar se o comprimento ou a amplitude , igual a I# Para isso9 pede;se ao programa que se interrompa com a primitiva pare# aprenda retan'ulo alt lar se ou alt!0 lar!0 [pare] re$ alt lar retan'ulo alt&1 lar&1 fim /ota: em ve+ de utili+ar a primitiva ou9 podemos usar o smbolo S # "ssim: se alt!0 3 lar!0 [pare] +egunda abordagem " id,ia aqui , comear por avanar AII passos e recuar esses mesmos AII passos para depois avanar um passo apara a direita# Esse movimento ser repetido tantas ve+es at, se obter um ret ngulo totalmente preenchido# *e altura do ret ngulo %or dada pela varivel alt9 a tat ter que %a+er o seguinte movimento bsico: pf alt pt alt pd 90 pf 1 pe 90

AA

Este movimento dever se repetir lar ve+es# O procedimento %inal %ica assim: aprenda retan'ulo alt lar pf alt pt alt repita lar&1 [ pd 90 pf 1 pe 90 pf fim

alt pt

alt]

/ota: (emos no exemplo que a tat desenha um trao vertical e em seguida %ar um pequeno trao 1de um passo2 para o lado toda ve+ que chega na base do ret ngulo# $ma outra %orma seria utili+ar recurso com um teste para interromp);la# aprenda retan'ulo alt lar se lar!0 [pare] pf alt pt alt se n4o lar!1 [pd 90 pf 1 pe 90] retan'ulo alt lar&1 fim /ota: " cada trao vertical desenhado9 a varivel lar , descontada em um unidade# "ssim9 ao atingir o valor I9 o ret ngulo estar completo#

)erceira abordagem E%etua;se o mesmo movimento de anteriormente mas desenhando sucessivamente os traos hori+ontais# aprenda retan'ulo alt lar pd 90 pf lar pt lar repita alt&1 [ pe 90 pf 1 pd 90 pf fim

lar pt

lar]

Caracteres de calculadora

Esta atividade , baseada no %ato de que todos os n.meros de calculadora podem ser obtidos atrav,s da combinao de ret ngulos: Por exemplo9 para desenhar um 69 acender os ret ngulos 5969E9G# Para desenhar um 89 acender os ret ngulos A9495969E9F9G# Para desenhar um 59 acender os ret ngulos 495969E9F#

1na %igura ao lado9 cada quadrcula corresponde a 4I passos de tartaruga2

Subseces O programa 'riao de uma pequena animao

A4

programa (eremos necessidade do ret ngulo preenchido como vimos: aprenda re$ alt lar se alt!0 3 lar!0[pare] repita 2[pf alt pd 90 pf re$ alt&1 lar&1 fim

lar pd 90]

'onsideraremos aqui que a tat parte do canto in%erior esquerdo# Jamos de%inir um procedimento chamado numero admitindo G argumentos a9 )9 $9 d9 e9 f9 '# Ruando a valer A9 desenhar o ret ngulo A# *e a valer I9 ele nada desenhar# Eis a o princpio# Escrevemos assim o procedimento: aprenda numero a ) 5 6esen%a o ret2n'ulo se a!1 [re$ 160 40] 5 6esen%a o ret2n'ulo se )!1 [re$ 40 160] un pd 90 pf 120 pe 90 5 6esen%a o ret2n'ulo se $!1 [re$ 160 40] un pf 120 ul 5 6esen%a o ret2n'ulo se e!1 [re$ 160 40] 5 6esen%a o ret2n'ulo pe 90 un pt 40 ul se d!1 [re$ 160 40] 5 6esen%a o ret2n'ulo pd 90 un pf 120 pe 90 se f!1 [re$ 160 40] 5 6esen%a o ret2n'ulo un pf 120 pe 90 pt 40 se '!1 [re$ 160 40] fim $ 1 2 ul 3 5 4 6 ul 7 ul d e f '

Criao de uma pe!uena animao Jamos aqui simular uma contagem regressiva indicando sucessivamente os n.meros de H at, I# aprenda re'ressi.a ld dt numero 0 1 1 ld dt numero 1 1 1 ld dt numero 0 0 1 ld dt numero 1 1 1 ld dt numero 0 1 1 ld dt numero 0 0 1 ld dt numero 0 1 1 ld dt numero 1 1 0 ld dt numero 0 0 1 ld dt numero 1 1 1 fim 1 1 0 1 1 1 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 1 0 0 0 1 espere espere espere espere espere espere espere espere espere espere 60 60 60 60 60 60 60 60 60 60

Pequeno problema: esse procedimento tem um e%eito um tanto desagradvel durante a criao de cada n.mero# Para harmoni+;lo utili+aremos as primitivas animado+ pareanimado e .eranimado# animado exigia os argumentos .erd ou falso em .ers7es anteriores 8 0.9.90# " partir da verso I#H#HI9 no lugar de animado verd usamos apenas animado# /o lugar de animado %also9 usamos pareanimado#

*e %or igual a falso9 estaria no modo padro de exibio# *e %or igual a .erd9 passaria ao modo animado# " tartaruga desenhar escondida9 ou se-a9 usar a memPria# " imagem sP ser apresentada na tela quando pedirmos a-uda da primitiva .eranimado#

Para isso9 modi%icamos o procedimento acima %icando assim:


A5

aprenda re'ressi.a 5 passar ao modo animado animado ld dt numero 0 1 1 1 1 1 ld dt numero 1 1 1 1 1 1 ld dt numero 0 0 1 0 1 1 ld dt numero 1 1 1 1 0 1 ld dt numero 0 1 1 1 0 1 ld dt numero 0 0 1 1 1 0 ld dt numero 0 1 1 1 1 1 ld dt numero 1 1 0 1 1 1 ld dt numero 0 0 1 0 1 0 ld dt numero 1 1 1 0 1 1 5 .oltar ao modo padr4o pareanimado fim Explorar listas e variveis% Subseces

1 1 0 1 1 1 0 0 0 1

.eranimado .eranimado .eranimado .eranimado .eranimado .eranimado .eranimado .eranimado .eranimado .eranimado

espere espere espere espere espere espere espere espere espere espere

60 60 60 60 60 60 60 60 60 60

Interagir com o usurio Programar um pequeno -ogo#

Interagir com o usurio Jamos reali+ar um pequeno procedimento que pede ao utili+ador o seu sobrenome9 o seu nome e a sua idade# "o %im do questionrio9 o procedimento recapitular as respostas: 9eu nome 1 ........ 9eu so)renome 1 ....... 9ua idade 1 ....... 9e .o$: 1 demenor ou de maior Para isso9 usaremos as seuintes priomitivas:

leia: leia [;ual 1 a sua idade< ] -a 'arta+ uma caixa de dilogo que tem por ttulo o texto contido na lista 1aqui9 Rual , a sua idadeM2# " resposta dada pelo utili+ador , memori+ada sob a %orma de uma lista na varivel a# Por exemplo9 se escrevermos 4I9 a varivel a conter [20] atr: atr -a 30 "tribui o valor 5I : varivel a senten=a+ sn: senten=a [30 >] -a "crescenta um valor numa lista# *e este valor %or uma lista9 -untar as duas listas em uma# senten=a [30 >] -a &&&? [30 > a] senten=a [1 2 3] 4 &&&? [1 2 3 4] senten=a [1 2 3] [4 5 6] &&&? [1 2 3 4 5 6] pri: Devolve o primeiro elemento contido numa lista: mostre pri [4 5 6] &&&? 4 mostre pri [$oment,rio a#ui .ai 8] &&&&? $oment,rio

Obtemos o seguinte cPdigo: aprenda #uestao leia [;ual 1 a sua idade<] -anos 5 anos $ont1m ent4o uma lista um elemento+ 5 podemos usar esse elemento arma@enado em anos atr -anos pri anos leia [;ual 1 o seu so)renome<] -so)renome leia [;ual 1 o seu nome<] -nome mostre senten=a [9eu so)renome 1 ] so)renome mostre senten=a [9eu nome 1 ] nome mostre senten=a [9ua idade 1 ] anos se ou anos?18 anos!18 [mostre [Ao$: 1 de maior]] [mostre [Ao$: 1 de menor]] fim

A6

Programar um pe!ueno .ogo% /osso ob-etivo a seguir , criar o seguinte -ogo: O programa escolhe um n.mero entre I e 54 e memori+a;o# $ma caixa de dilogo abre;se e pede ao usurio que retorne um n.mero# *e o n.mero proposto %or igual ao n.mero memori+ado9 escrever acertou na +ona de texto# 'aso contrrio9 o programa indicar que o n.mero memori+ado , menor ou maor que o n.mero proposto pelo usurio e reabrir nova caixa de dilogo# O programa termina;se quando o usurio encontrar o n.mero memori+ado# (eremos necessidade de usar as seguintes primitivas: sorteie: sorteie 8 sorteia um n.mero entre I e 8 apenas# sorteie 20 escolhe 1sorteia2 um n.mero entre I e AH# 'oloque estas regras a serem cumpridas pelo -ogo:

O n.mero memori+ado pelo computador ser guardado na varivel de nome nmero# " caixa de dilogo dever apresentar a mensagem: Escreva um n.mero: # O n.mero proposto pelo usrio ser guardado na varivel de nome palpite# O procedimento que permite iniciar o -ogo ser chamado Bo'o#

"lguns a-ustes possveis: !egistrar o n.mero de tentativas# O n.mero dever ser entre I e 4III# Jeri%icar se o n.mero digitado pelo usurio , um n.mero# Para tal9 utili+a;se a primitiva 1nmero<# Exemplos: nmero< 8 , verd# nmero< [5 6 7] , %also# 1BE F GC , uma lista e no um n.mero2 nmero< -a)$de , %also# 1>abcde , uma palavra e no um n.mero2

&ma animao: o boneco !ue cresce Em primeiro lugar9 vamos de%inir um procedimento )one$o que desenhe o homen+inho com um tamanho %ornecido por nPs# aprenda )one$o $ pe 154 pf 2.2( $ pt $(2.2 pe 52 pf 2.2( $ pt $(2.2 pe 154 pf $(2 pe 154 pf 2.2( $ pt $(2.2 pe 52 pf 2.2( $ pt $(2.2 pe 154 pf $"2 pe 90 repita 180[pf $"40 pd 2] pd 90 fim Jamos agora criar uma animao que d a iluso de que o homen+inho cresce pouco a pouco# Para isso9 vamos desenhar )one$o 1 depois )one$o 2 )one$o 3 ### at, )one$o 75# Entre cada desenho9 a tela ser limpa# Precisamos dos dois procedimentos seguintes: aprenda )one$o $ se $!75[pare] pe 154 pf 2.2( $ pt $(2.2 pe 52 pf 2.2( $ pt $(2.2 pe 154 pf $(2 pe 154 pf 2.2( $ pt $(2.2 pe 52 pf 2.2( $ pt $(2.2 pe 154 pf $"2 pe 90 repita 180[pf $"40 pd 2] pd 90 ld dt )one$o $01 fim

aprenda ini$iar ld dt )one$o 0 fim

AE

En%im9 para harmoni+ar o con-unto9 nos serviremos do modo animado e da primitiva .eranimado# /m .ers7es anteriores ao *Co'o 0.9.90 aprenda )one$o $ aprenda ini$iar se $!75[pare] dt animado .erd ld dt pe 154 pf 2.2( $ pt $(2.2 )one$o 0 pe 52 pf 2.2( $ pt $(2.2 animado falso pe 154 pf $(2 fim pe 154 pf 2.2( $ pt $(2.2 pe 52 pf 2.2( $ pt $(2.2 Dara #uem usa o *Co'o 0.9.90 ou posterior pe 154 pf $"2 pe 90 repita 180[pf $"40 pd 2] pd 90 aprenda ini$iar dt animado .eranimado )one$o 0 )one$o $01 pareanimado fim fim

$tividade com nmeros primos entre si% "3E!(": *o necessrias algumas no&es de matemtica para compreender esse captulo# Subseces

/oo de 0D' 1mximo divisor comum2 "lgoritmo de Euclides 'alcular 0D' em 3ogo 'alcular uma aproximao de 'omplicando um pouco mais: que gera #####

/oo de 0DC 1mximo divisor comum2 Dado dois n.meros inteiros9 chamamos 0D' o mximo divisor comum de ambos#

Por exemplo9 64 e 48 t)m A6 como 0D' 1A6 , o maior n.mero que divide 48 e 642 4E e EE t)m E como 0D'# 64 e 45 t)m A como 0D'#

Ruando dois n.meros t)m A como 0D'9 di+;se que so primos entre si# "ssim sobre o exemplo precedente9 64 e 45 so primos entre si# Isso signi%ica que no h nenhum divisor comum exceto A 1que9 certamente9 divide qualquer um=2# $lgoritmo de Euclides Para determinar o 0D' de dois n.meros9 usaremos um m,todo chamado algoritmo de Euclides: 1/o vamos demonstrar a validade desse algortimo9 apenas admitiremos que ele %unciona2 Eis o princpio: Dadas dois inteiros positivos 0'D , igual : # *e no %or9 calcula;se e 9 comea;se por testar por , nulo# *e %or9 ento o # *ubstitui;se por 9e

9 o resto da diviso de

por 9 e recomea;se o m,todo# 'alcular9 por exemplo9 o 0D' de 4AFI e 888 por este algoritmo se dar nas seguintes etapas: a b r

4AFI 888 586 A4I 46

888 586 A4I 46 I

586 A4I 46 I

O 0D' de 4AFI e 888 , 46# Ele , o maior n.mero inteiro que divide aqueles dois outros# 1De %ato 4AFI L 46 x HI e 888 L 46 x 5G2 O 0D' , com e%eito o .ltimo resto no nulo#
AF

Calcular 0DC em 3ogo $m pequeno algoritmo recursivo permite calcular o 0D' de dois n.meros a e ) aprenda E6F a ) se (resto a ))!0 [saGda )][saGda E6F fim mostre E6F 2160 888 &&&? 24

) resto

)]

/ota: Q importante colocar resto a ) entre par)nteses9 seno o x3ogo se con%undiria e tentaria avaliar ) ! 0# Para evitar esse problema de usar ou no par)nteses9 poderamos ter escrito: se 0!resto a )

Calcular uma aproximao de 'om e%eito9 um resultado conhecido de teoria dos n.meros mostra que a probabilidade de dois n.meros tomados ao acaso se-am primos entre si , de FT4 I9FIGH# Para testar a veradicidade desse resultado %aremos:

(omar dois n.meros ao acaso entre I e A#III#III# 'alcular seu 0D' *e o 0D' %or A9 acrescentar >A> a varivel $ontar# !epetir o processo AIII ve+es " %requ)ncia dos pares de n.meros primos entre si obter;se; dividindo a varivel $ontar por AIII 1o n.mero de tentativas2#

aprenda testar 5 Hni$iar a .ari,.el -$ontar- $om .alor 0 atr -$ontar 0 repita 1000 [ se (E6F sorteie 1000000 sorteie 1000000)!1 [atr -$ontar ] mostre [fre#u:n$ia ] mostre $ontar"1000 fim

$ontar01]

/ota: De novo9 devemos colocar E6F sorteie 1000000 sorteie 1000000 entre par)nteses para que o x3ogo no se con%un%a tentando interpretar como 1 000 000 ! 1# Para evitar esse problema9 escreva: se 1!E6F sorteie 1000000 sorteie 1000000 'oloque a rodar o procedimento testar# testar 0.609 testar 0.626 testar 0.597 Obt)m;se valores prPximos do valor tePrico de I9FIHG# Q notvel que esta %requ)ncia , um valor aproximado de FT4 *e-a a %requ)ncia encontrada9 ento:

Ento

e ento

"presso;me a acrescentar esta aproximao no meu procedimento9 trans%ormo;a no procedimento testar:


AG

aprenda testar 5 Hni$iar a .ari,.el -$ontar- $om .alor 0 atr -$ontar 0 repita 1000 [ se 1!E6F sorteie 1000000 sorteie 1000000 [atr -$ontar ] 5 Fal$ular a fre#u:n$ia atr -f $ontar"1000 5 /n$ontrar o .alor apro*imado de pi mostre senten=a [apro*ima=4o de pi ] rai@# (6" f) fim testar apro*ima=4o de pi 3.164916190172819 testar apro*ima=4o de pi 3.1675613357997525 testar apro*ima=4o de pi 3.1008683647302115

$ontar01]

Nom9 altero o meu programa de tal %orma que quando rod;lo9 in%ormo o n.mero de tentativas dese-ados# (enho a id,ia de testar com AIIII tentativas# Eis que obtenho nas minhas tr)s primeiras tentativas: aprenda testar tentati.as 5 Dara ini$iar a .ari,.el $ontar $om .alor 0 atr -$ontar 0 repita tentati.as [ se 1!E6F sorteie 1000000 sorteie 1000000 [atr -$ontar ] 5 Dara $al$ular a fre#u:n$ia atr -f $ontar" tentati.as 5 /n$ontrar o .alor apro*imado de pi mostre senten=a [apro*ima=4o de pi ] rai@# (6" f) fim testar 10000 apro*ima=4o de pi 3.1300987144363774 testar 10000 apro*ima=4o de pi 3.1517891481565017 testar 10000 apro*ima=4o de pi 3.1416626832299914 /ada mal9 noM Complicando um pouco mais: !ue gera %%%%%

$ontar01]

'omo obter um n.mero aleatPrioM $m n.mero tomado ao sorteie entre A e A II IIII , realmente um n.mero aleatPrioM "percebe;se muito rapidamente que nossos es%oros so apenas uma aproximao do modelo ideal# Nem9 , precisamente sobre a maneira de gerar o n.mero aleatPrio que vamos e%etuar algumas mudanas### /o vamos mais utili+ar a primitiva sorteie mas usar a sequ)ncia de decimais de # Deixe;me explicar: as decimaies de sempre intrigou os matemticos pela sua %alta de irregularidade9 os n.meros de I para H parecem aparecer em quantidade mais ou menos iguais e de maneira aleatPria# /o se pode predi+er as prPximas casas decimais atrav,s das precedentes# Jamos ver a seguir como gerar um n.mero aleatPrio atrav,s das casas decimais de # Em primeiro lugar9 deveremos encontrar as primeiras casas decimais de pi 1por exemplo9 um milho2#

Existem pequenos programas que o %a+em muito bem# Eu aconselho PiDast para UindoVs e *cnhellPi para 3inux# Joc) tamb,m pode visitar este endereo e e%etuar um >copiar W colar> num arquivo texto: http:TT5#A6AEH4FE5E8HGH54586F4F655854GHEI4886AHGAFH5HH5GEAIE84IHG6H66EH4#comT 'opiar esse arquivo no stio do x3ogo: http:TTxlogo#tux%amilX#orgTcommonTmillionpi#txt

A8

Para criar os n.meros aleatPrios9 pegaremos pacotes de 8 algarismos em sequ)ncia de Explicao: o arquivo comea assim: etc

!etiro o ponto decimal 1# 2 do 5#A6 ###9 que corre o risco de irritar;nos ao extrair as casas decimais# Nem9 estando tudo em seu lugar9 criamos um novo procedimento chamado sorteiepi e modi%icamos de leve o procedimento testar aprenda E6F a ) se (resto a ))!0 [saGda )][saGda E6F ) resto a )] fim aprenda testar tentati.as 5 Io a)rir um flu*o indi$ado pelo nmero 1 para o ar#ui.o millionpi.t*t 5 ($onsidere a#ui estarmos usando o diretJrio $orrente 5 sen4o de.e&se usar uma lista e um $amin%o a)soluto) a)raflu*o 1 -millionpi.t*t 5 Kuardar na .ari,.el -lin%a- a primeira lin%a do ar#ui.o millionpi.t*t atr -lin%a pri leialin%a 1 5 Ln initialise la .ari,.el $ontar 8 0 atr -$ontar 0 repita tentati.as [ se 1!E6F sorteiepi 8 sorteiepi 8 [atr -$ontar $ontar01] ] 5 Fal$ula a fre#u:n$ia atr -f $ontar" tentati.as 5 /n$ontrar o .alor apro*imado de pi mostre senten=a [apro*ima=4o de pi ] rai@# (6" f) fe$%eflu*o 1 fim aprenda sorteiepi n atrlo$al -nmero repita n [ 5 9e l: plus $ara$teres so)re a lin%a se 0!$onte lin%a [atr -lin%a pri leialin%a 1] 5 Itri)ui 8 .ari,.el -$ara$tere- o .alor do primeiro $ara$tere da lin%a atr -$ara$tere pri lin%a 5 Metira este primeiro $ara$tere da lin%a. atr -lin%a semprimeiro lin%a atr -nmero pal nmero $ara$tere ] saGda nmero fim testar 10 apro*ima=4o de pi 2.7386127875258306 testar 100 apro*ima=4o de pi 2.9704426289300225 testar 1000 apro*ima=4o de pi 3.0959109381151797 testar 10000 apro*ima=4o de pi 3.139081837741219 !eencontra;se por conseguinte uma aproximao do n.mero com a-uda de suas prPprias casas decimais== Q ainda possvel melhorar este procedimento indicando por exemplo o tempo gasto para o clculo# "crescenta;se ento na primeira linha do procedimento testar: atr -ini$io tempode$ "crescenta;se bem na %rente de fe$%eflu*o 1: mostre senten=a [Nempo 'asto ] tempode$ & ini$io

AH

Correo das atividades

Subsees

'aptulo 4 'aptulo 5 'aptulo 6 O rob7 " r 'aptulo 8:

Captulo 4 aprenda #uadrado repita 4[pf 150 pd 90] fim aprenda tri repita 3[pf 150 pd 120] fim aprenda porta repita 2[pf 70 pd 90 pf 50 pd 90] fim aprenda $%amine pf 55 pd 90 pf 20 pd 90 pf 20 fim aprenda dep1 pd 90 pf 50 pe 90 fim aprenda dep2 pe 90 pf 50 pd 90 pf 150 pd 30 fim aprenda dep3 un pd 60 pf 20 pe 90 pf 35 ul fim aprenda $asa #uadrado dep1 porta dep2 tri dep3 $%amine fim

Captulo 5 aprenda super$u)o ld un mudepos[ &30 150] ul mudepos[&150 150] mudepos[&90 210] mudepos[30 210] mudepos[&30 150] mudepos[&30 &210] mudepos[30 &150] mudepos[30 &90] mudepos[&30 &90] mudepos[90 &90] mudepos[90 30] mudepos[&270 30] mudepos[&270 &90] mudepos[&210 &90] mudepos[&210 &30] mudepos[&90 &30] mudepos[&90 &150] mudepos[&210 &150] mudepos[&210 &30] mudepos[&150 30] mudepos[&30 30] mudepos[&90 &30] mudepos[90 150] mudepos[30 150] mudepos[30 210] mudepos[30 90] mudepos[90 90] mudepos[90 150] mudepos[90 90] mudepos[150 90] mudepos[150 &30] mudepos[90 &90] mudepos[90 30] mudepos[150 90] un mudepos[&150 30] ul mudepos[&150 150] mudepos[&150 90] mudepos[&210 90] mudepos[&270 30] un mudepos[&90 &150] ul mudepos[& 30 &90] un mudepos[&150 &150] ul mudepos[&150 &210] mudepos[&30 &210] fim

4I

Captulo 6

Subsees O rob7 " r

rob7 O primeiro desenho , composto exclusivemente de um motivo elementar : base de ret ngulo9 quadrado e tri ngulo# Eis o cPdigo associado a este desenho: aprenda ret alt lar 5 desen%a um ret2n'ulo de altura alt e lar'ura lar repita 2[pf alt pd 90 pf lar pd 90] fim aprenda #uadrado $ 5 desen%a um #uadrado de lado $ repita 4[pf $ pd 90] fim aprenda tri $ 5 desen%a um tri2n'ulo e#uil,tero de lado $ repita 3[pf $ pd 120] fim aprenda pata $ ret 2( $ 3( $ #uadrado 2( $ fim aprenda antena $ pf 3( $ pe 90 pf $ pd 90 #uadrado 2( $ un pt 3 ( $ pd 90 pf $ pe 90 ul fim aprenda ro)o $ ld dt 5 L $orpo ret 4( $ 28( $ 5 Is patas pd 90 pf 2( $ pata $ pf 4( $ pata $ pf 14( $ pata $ pf 4( $ pata $ 5L ra)o un pe 90 pf 4( $ ul pd 45 pf 11( $ pt 11 ( $ pe 135 5 L pes$o=o e a $a)e=a pf 18 ( $ #uadrado $ pf 3( $ #uadrado $ pd 90 pf $ pe 90 pf 2( $ pd 90 #uadrado 8( $ 5 Lrel%as pf 4( $ pe 60 tri 3( $ un pd 150 pf 8 ( $ pe 90 ul tri 3( $ 5 Is antenas pf 4 ( $ pe 90 pf 2( $ pd 90 antena $ pe 90 pf 4( $ pd 90 antena $ 5 Ls ol%os un pt 3 ( $ ul #uadrado $ pd 90 un pf 3( $ ul pe 90 #uadrado $ 5 I )o$a un pt 3( $ pe 90 pf 3( $ pd 90 ul ret $ 4( $ fim

$ r aprenda r4 $ ld dt pf 2 ( $ pd 90 pf 5( $ pe 90 pf 4( $ pe 90 pf 7 ( pf 21 ( $ pd 90 pf 2( $ pe 90 pf 2( $ pd 90 pf 9( pf 2( $ pd 90 pf 9( $ pd 90 pf 2( $ pd 90 pf 7( $ pd 90 pf 4( $ pt 4( $ pe 90 pt 2( $ pe 90 pf 5( $ pd 90 un pf 9( $ ul repita 4[pf 2( $ pd 90] fim

$ pd 90 pf 7( $ pd 90 pf 2( pt 5( $ pe 90 pe 90 pf 4( $

$ pd 90 $ pe 90 pf 4( $ pd 90 pf 7( $

4A

Captulo 8: aprenda Bo'o 5 Hni$iali@a o nmero pro$urado e o nmero de lan$es atr -nmero sorteie 32 atr -$ontar 0 insistir fim aprenda insistir leia [/s$re.a um nmero] -palpite atr -palpite pri palpite se 1nmero< palpite[ 5 Nesta o nmero dado $omo palpite se nmero! palpite[mo sn sn [Ao$: a$ertou em ] $ontar01 [tentati.a(s)]][ se palpite? nmero [mo [O menor]][mo [O maior]] atr -$ontar $ontar01 insistir ] ] [mostre [Dor fa.or+ .o$: de.e es$re.er um nmeroP] insistir] fim

+obre esse documento %%% Descubra a linguagem LOGO em 9 lies (his document Vas generated using the LaTeX4QNEC translator Jersion 4II4;4;A 1A#GA2 'opXright Y AHH59 AHH69 AHHE9 AHHF9 /iZos DraZos9 'omputer Nased 3earning $nit9 $niversitX o% 3eeds# 'opXright Y AHHG9 AHH89 AHHH9 !oss 0oore9 0athematics Department9 0acquarie $niversitX9 *XdneX# (he command line arguments Vere: latex2html &lo$alRi$ons tutoriel.te* (he translation Vas initiated bX "lexandre !# *oares on 4IIF;IF;A8

alex 4IIG;nov;IA

44

You might also like