perguntas_Basicas.html 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8"/>
  5. <link href="css/style.css" rel="stylesheet">
  6. <title>Exemplos</title>
  7. </head>
  8. <body>
  9. <h1>3 - Perguntas básicas para implementar um algoritmo</h1>
  10. <p>
  11. No restante desta apostila procuraremos mostrar como desenvolver programas utilizando as linguagens C e Python. Os problemas que abordaremos são, em sua
  12. maioria, bastante simples, no sentido de ser possível resolvê-los manualmente (sem o auxílio de programas de computador). A dificuldade consiste em obter
  13. soluções computacinais para tais problemas, ou seja, em escrever um processo que resolva tais problemas servindo-se de uma linguagem extremamente rígida e
  14. um pouco limitada.<br />
  15. Um <b>programa</b> pode ser entendido como uma sequência finita de comandos que manipulam um numero limitado de variaveis e que deve devolver
  16. algum conjunto-resposta. Em geral, os problemas que admitem solucoes via computador apresentam caracterısticas de repeticao, isto ́e, permitem que
  17. uma mesma sequência de passos seja repetida (um numero finito de vezes) ate que se obtenha o resultado desejado.<br />
  18. Sugerimos ao leitor, principalmente aos iniciantes em programação, que se concentre em quatro questões chaves à resolução de problemas via algoritmos,
  19. independentemente da linguagem a ser utilizada, seja ela qual for.<br />
  20. <ul>
  21. <li><b>1ª Pergunta:</b> Quais variáveis são necessárias?</li>
  22. <li><b>2ª Pergunta:</b> Quais comandos devem apareceer dentro de um bloco de repetição?</li>
  23. <li><b>3ª Pergunta:</b> Qual a condição para que continue a repetição?</li>
  24. <li><b>4ª Pergunta:</b> Quais os comandos necessários antes e depois do bloco de repetição?</li>
  25. </ul>
  26. <br />
  27. Nem sempre é possível responder completamente estas perguntas nesta sequência. Muitas vezes, ao longo da descrição do programa surge a necessidades de novas
  28. variáveis, que devem ser acrescentadas à lista inicialmente pensada como resposta à 1ª pergunta. Por outro lado, com o passar do tempo (e aquisiçao de
  29. experiência na programação), será natural que ao tentar responder a 2ª pergunta ja se note a necessidade de alguns comandos que devem aparecer antes do
  30. bloco de repetição (4ª pergunta). Alem disto, somente “problemas pequenos” possuem um ́unico bloco de repetição, sendo que as perguntas 2 a 4 devem ser
  31. levadas em conta para cada novo bloco de repetição. No entanto, a experiência tem-nos mostrado que, pelo menos enquanto se esta comecando a aprender a
  32. descrever processos em liguagens estruturadas, estas perguntas servem como um bom roteiro ao programador iniciante.<br />
  33. Veremos, a seguir, o desenvolvimento de programas para alguns problemas.<br />
  34. Obs: Nos códigos em C só serão mostradas as partes centrais do código, para ter um código funcional você deverá importar as respectivas bibliotecas e adicionar o código
  35. dentro da função main
  36. </p>
  37. <h2>3.1 - Como somar um número arbitrário de valores</h2>
  38. <p>
  39. <b>Problema: </b> Faça um programa que leia uma sequência de números inteiros, diferentes de zero, e calcule a sua soma.<br />
  40. Se a sequência de entrada tivesse um tamanho fixo conhecido, digamos 4, a descrição do processo não seria complicada, bastando escrever:
  41. <center>
  42. <table>
  43. <tr>
  44. <th> C </th>
  45. <th>Python</th></tr>
  46. <tr>
  47. <td>
  48. <pre>
  49. int n1, n2, n3, n4, soma; //cria as 5 variáveis que serão utilizadas
  50. scanf("%d %d %d %d", &n1, &n2, &n3, &n4); //lê 4 inteiros
  51. soma = n1+n2+n3+n4; //soma os 4 inteiros lidos
  52. printf("%d", soma); //imprime o resultado da soma
  53. </pre>
  54. </td>
  55. <td>
  56. <pre>
  57. n1 = input() //lê o primeiro inteiro
  58. n2 = input() //lê o segundo inteiro
  59. n3 = input() //lê o terceiro inteiro
  60. n4 = input() //lê o quarto inteiro
  61. soma = n1+n2+n3+n4 //soma os 4 inteiros
  62. print(soma) //imprime o resultado da soma
  63. </pre>
  64. </td>
  65. </tr>
  66. </table>
  67. <div>
  68. <img src="./imgs/soma_4_numeros.png" /><br />
  69. <span>Código no iVProg</span>
  70. </div>
  71. </center>
  72. <br />
  73. No entanto a solução muda radicalmente se desejamos escrever um algoritmo que funcione para um número arbitrário de valores de entrada (este número é
  74. definido pelo usuário durante a execução do algoritmo). Neste caso, a dificuldade reside no fato de o programa ser capaz de somar uma sequência de qualquer
  75. tamanho.<br />
  76. Antes de continuar, reflita um pouco sobre esta questão e tente escrever um código que permita a soma de uma sequência de qualquer tamanho.<br />
  77. Duas possíveis soluções são:
  78. <ul>
  79. <li>Ao início da execução do algoritmo o usuário digitar qual o tamanho da sequência</li>
  80. <li>Utilizarmos um caracter de escape que indicará o final da sequência</li>
  81. </ul>
  82. <br />
  83. Abaixo iremos apresentar a segunda solução, utilizar um caracter de escape.<br />
  84. Uma boa técnica para iniciar o processo de rogramação é admitir algumas sequências de dados de entrada e pensar a partir destes dados. Então examinaremos,
  85. por exemplo, a soma da seguinte sequência de entrada: 8 11 3 -7 2 ... 0
  86. <ol>
  87. <li>Leia o primeiro número 8;</li>
  88. <li>Como o número lido !=(diferente) 0, leia o próximo número 3, guardando a soma destes dois 19+3 = 22;</li>
  89. <li>Como o último número lido != 0, leia o próximo número 3, guardando com a soma anterior 19+3=22;</li>
  90. <li>Como o último número lido != 0, leia o próximo número -7, guardando com a soma anterior 22+(-7)=15;</li>
  91. <center>
  92. <pre>
  93. .
  94. .
  95. .
  96. </pre>
  97. </center>
  98. <li>Lê o 0, e como o número lido foi 0 imprime a soma final</li>
  99. </ol>
  100. <h3>Quais variáveis são necessárias?</h3>
  101. Vemos a necessidades de 2 variáveis: uma para guardar o último número lido e outra para guardar a soma dos número já lidos. Então teremos:
  102. <center>
  103. <table>
  104. <tr>
  105. <th> C </th>
  106. <th>Python</th></tr>
  107. <tr>
  108. <td>
  109. <pre>int num, soma;</pre>
  110. </td>
  111. <td>
  112. <pre>
  113. num = 0
  114. soma = 0</pre>
  115. </td>
  116. </tr>
  117. </table>
  118. </center>
  119. <h3>Quais os comandos necessários antes e depois do bloco de repetição?</h3>
  120. <p>
  121. Inicialmente, no código em C o valor das variáveis(quaisquer) está indefinido, já no código em Python está definido em 0 e portanto devemos cuidar das
  122. "inicializações" antes do primeiro teste <b>while (num !=0)</b>. Quanto deve valer a variável num neste momento inicial?<br />
  123. Uma solução possível é o tratamento do primeiro número da sequência como caso à parte, antes de entrarmos no comando de repetição. Deste modo, devemos ler
  124. o primeiro número fora da repetição e já contabilizar na soma.
  125. <br />
  126. <b>Exercício 1:</b> <i>Tente elaborar outra solução, que não faça uma primeira leitura de num dentro do laço</i>
  127. <br />
  128. Após a repetição devemos imprimir o conteúdo da variável <b>soma</b>, que deverá conter a soma dos elementos da sequência de entrada.<br />
  129. Escrevendo o código temos:<br />
  130. <center>
  131. <table>
  132. <tr>
  133. <th> C </th>
  134. <th>Python</th></tr>
  135. <tr>
  136. <td>
  137. <pre>
  138. 1 int num, soma;
  139. 2 scanf("%d", &num);
  140. 3 soma = num;
  141. 4 while (num != 0){
  142. 5 scanf(%d, &num);
  143. 6 soma = soma + num;
  144. 7 }
  145. 8 printf("%d",soma);
  146. </pre>
  147. </td>
  148. <td>
  149. <pre>
  150. 1 num = input();
  151. 2 soma = num;
  152. 3 while num != 0
  153. 4 num = input()
  154. 5 soma = soma + num
  155. 6 print(soma)
  156. </pre>
  157. </td>
  158. </tr>
  159. </table>
  160. <div>
  161. <img src="./imgs/soma_n_numeros.png" /><br />
  162. <span>Código no iVProg</span>
  163. </div>
  164. </center>
  165. <h3>Conceito de simulação de um Algoritmo</h3>
  166. Um conceito muito importante à programação é o processo de <b>simulação</b> de um algoritmo. Útil na verificação da corretude do mesmo e também para entender
  167. o seu funcionamento. Na simulação de um algoritmo/programa devemos anotar todas as alterações, de todas suas variáveis, ao longo de seu fluxo de execução para algum
  168. conjunto de entrada<br />
  169. Melhor que muitas explicações complicadas é um bom exemplo. Vejamos a simulação do programa acima para o conjunto de entradas 10 3 4 0 no algoritmo em C:
  170. <center>
  171. <table>
  172. <tr>
  173. <th>num</th>
  174. <th>soma</th>
  175. <th>comando em execução</th>
  176. <th>observações</th>
  177. </tr>
  178. <tr>
  179. <td>?</td>
  180. <td>?</td>
  181. <td> </td>
  182. <td>no início do programa valores das variáveis são desconhecidos, elas apenas foram declaradas</td>
  183. </tr>
  184. <tr>
  185. <td>10</td>
  186. <td>?</td>
  187. <td>scanf("%d", &num)</td>
  188. <td>pega o 1º número de entrada e guarda em num</td>
  189. </tr>
  190. <tr>
  191. <td>10</td>
  192. <td>10</td>
  193. <td>soma = num</td>
  194. <td>Atribui o valor de num a soma</td>
  195. </tr>
  196. <tr>
  197. <td>10</td>
  198. <td>10</td>
  199. <td> while (num != 0) </td>
  200. <td>Como num é diferente de 0, executa os comandos dentro do bloco de repetição (linhas 5 e 6)</td>
  201. </tr>
  202. <tr>
  203. <td>3</td>
  204. <td>10</td>
  205. <td> scanf("%d", num) </td>
  206. <td>Recebe o 2º número de entrada e guarda em num</td>
  207. </tr>
  208. <tr>
  209. <td>3</td>
  210. <td>13</td>
  211. <td> soma = soma + num </td>
  212. <td>atribui a soma o valor da expressão soma + num</td>
  213. </tr>
  214. <tr>
  215. <td>3</td>
  216. <td>13</td>
  217. <td> while(num!=0) </td>
  218. <td>Como num é diferente de 0, o programa continuará a repetição</td>
  219. </tr>
  220. <tr>
  221. <td>4</td>
  222. <td>13</td>
  223. <td> scanf("%d", num) </td>
  224. <td></td>
  225. </tr>
  226. <tr>
  227. <td>4</td>
  228. <td>17</td>
  229. <td>soma = soma+ num</td>
  230. <td></td>
  231. </tr>
  232. <tr>
  233. <td>4</td>
  234. <td>17</td>
  235. <td>while(num!=0)</td>
  236. <td></td>
  237. </tr>
  238. <tr>
  239. <td>0</td>
  240. <td>17</td>
  241. <td> soma = soma + num </td>
  242. <td></td>
  243. </tr>
  244. <tr>
  245. <td>0</td>
  246. <td>17</td>
  247. <td> while(num!=0) </td>
  248. <td>Como soma é igual a 0, o programa pula para a linha 8</td>
  249. </tr>
  250. <tr>
  251. <td>0</td>
  252. <td>17</td>
  253. <td>printf("%d", soma)</td>
  254. <td>Imprime o valor de soma: 17</td>
  255. </tr>
  256. </table>
  257. </center>
  258. <b>Saída do programa: 17</b>
  259. <br />
  260. Deve-se notar que após o programa "ler" o número 0(C: linha 5; Python: linha 4), ainda é executado o comando soma = soma + num antes do fluxo de execução
  261. voltar ao inicio do comando <b>while</b>. Mas isto não provoca qualquer erro, uma vez que o valor "lido"(0) não altera o valor da soma. No entanto, o que
  262. fazer se o programa consistisse em somar uma sequência de inteiros não negativos (positivos ou nulos), finalizada por um número negativo?<br />
  263. Antes de seguir com a leitura pense na questão<br />
  264. Uma primeira tentativa em responder à questão anterior é tentar aproveitar a versão anterior, trocando apenas a condição de parada do while de num != 0
  265. para num >= 0.<br />
  266. Porém isto não funcionaria, pois ao digitar um finalizador (número negativo), este será adicionado ao conteúdo de soma(C: linha 6; Python: linha 5), "estragando"
  267. o resultado final.<br />
  268. Se a solução do novo problema não pode ser tão semelhante à versão anterior, também não será radicalmente diferente. Basta efetuarmos uma mera inversão entre as
  269. linhas dentro do comando while(C: 5 com 6; Python: linha 4 com 5), além da troca da condição de parada acima citada.<br />
  270. <center>
  271. <table>
  272. <tr>
  273. <th> C </th>
  274. <th>Python</th></tr>
  275. <tr>
  276. <td>
  277. <pre>
  278. 1 int num, soma;
  279. 2 scanf("%d", &num);
  280. 3 soma = 0;
  281. 4 while (num >= 0){
  282. 5 soma = soma + num;
  283. 6 scanf(%d, &num);
  284. 7 }
  285. 8 printf("%d",soma);
  286. </pre>
  287. </td>
  288. <td>
  289. <pre>
  290. 1 num = input();
  291. 2 soma = 0;
  292. 3 while num >= 0:
  293. 4 soma = soma + num
  294. 5 num = input()
  295. 6 print(soma)
  296. </pre>
  297. </td>
  298. </tr>
  299. </table>
  300. <div>
  301. <img src="./imgs/soma_n_positivos.png" /><br />
  302. <span>Código no iVProg</span>
  303. </div>
  304. </center>
  305. Note também a diferença da inicialização da variável <b>soma</b>. Começando com zero ela ficará com o valor desejado após a primeira execução do comando <i>soma = soma + num</i>,
  306. ou seja, ela assumirá o valor do primeiro elemento da sequência (se este não for negativo). Note também que para uma sequência vazia, ou seja, para a entrada que já começa com um
  307. número negativo, o resultado escrito na saida será 0, que é o desejado.<br />
  308. <b>Exercício 2:</b><i>Fala a simulação deste programa para as entradas 10 3 4 -5 e veja as diferenças em relação à versão anterior do código, prestando atenção às linhas
  309. 5 e 6 no C, 4 e 5 no Python. Note que após a leitura do número -5, não é executado o comando <b>soma = soma + num</b>, pois o teste do <b>while</b> fica falso e o programa para
  310. o comando de escrita (printf no C; print no Python) </i><br /><br />
  311. <b>Exercício 3: </b><i>Ainda considerando o enunciado do problema 2, verifique o que há de errado com o programa a seguir:</i><br />
  312. <center>
  313. <table>
  314. <tr>
  315. <th> C </th>
  316. <th>Python</th></tr>
  317. <tr>
  318. <td>
  319. <pre>
  320. 1 int num, soma;
  321. 2 scanf("%d", &num);
  322. 3 soma = 0;
  323. 4 while(num!=0){
  324. 5 scanf("%d", num);
  325. 6 soma = soma + num;
  326. 7 }
  327. 8 printf("%d", soma);
  328. </pre>
  329. </td>
  330. <td>
  331. <pre>
  332. 1 num = input();
  333. 2 soma = 0
  334. 3 while num != 0:
  335. 4 num = input()
  336. 5 soma = soma+num
  337. 6 print(soma)
  338. </pre>
  339. </td>
  340. </tr>
  341. </table>
  342. </center>
  343. </p>
  344. <h2>3.2 - Como computar uma potência de inteiros usando laço de repetição</h2>
  345. <p>
  346. <b>Problema 3:</b><i>Dado X real e N natural, faça um programa que calcule X<sup>N</sup></i><br />
  347. Novamente, se N fosse fixo, por exemplo n=3, bastaria fazer<br />
  348. <center>
  349. <table>
  350. <tr>
  351. <th> C </th>
  352. <th>Python</th></tr>
  353. <tr>
  354. <td>
  355. <pre>
  356. 1 int x;
  357. 2 scanf("%d", &x);
  358. 3 printf("%d", x*x*x);
  359. </pre>
  360. </td>
  361. <td>
  362. <pre>
  363. 1 x = input()
  364. 2 print(x*x*x)
  365. </pre>
  366. </td>
  367. </tr>
  368. </table>
  369. <div>
  370. <img src="./imgs/potencia_x_3.png" /><br />
  371. <span>Código no iVProg</span>
  372. </div>
  373. </center>
  374. Portanto a dificuldade deste problema se encontra na repetição arbitrária: repetir a operação de multiplicação um número variável de vezes, dependente da vontade do usuário.<br />
  375. Novamente, vamos iniciar o processo de resolução examinando um exemplo, x=2 e n=7.<br />
  376. 1. Multiplique X por X, guardando o resultado desta conta(4); <br />
  377. 2. Multiplique por x o resultado guardado, guardando o novo resultado (8);<br />
  378. 3. Repita o passo(2) outras 4 vezes (pois n=7 e x já entrou 3 vezes como fator de multiplicação) obtendo o resultado final, 128.<br />
  379. <h3>Quais são as variáveis necessárias?</h3>
  380. Claramente precisamos de variáveis para armazenar X e N. Além destas, será necessária outra variável (<b>result</b>) para armazenar o resultado das operações de potenciação de X,
  381. sem a qual não será possível guardar o resultado das multiplações executadas(reflita sobre isto!).<br />
  382. Neste problema, notamos uma novidade em relação ao anterior, precisamos contar quantas vezes já usamos o fator X (original). assim, vamos denotar esta variável pelo sugestivo nome de
  383. <b>cont</b>: a cada multiplicação somaremos 1 nessa variável. Assim, deveremos declarar as seguintes variáveis:<br />
  384. <center>
  385. int x, n, result, cont;
  386. </center>
  387. <h3>Quais os comandos devem aparecer dentor do bloco de repetição?</h3>
  388. Podemos observar no esquema inicial, elaborado acima, que o passo (2) é a parte repetitiva do processo: multiplicar o resultado atual de <b>result</b> por X, guardando este produto
  389. novamente em <b>result</b>. Feito isto, devemos então somar 1 ao contador <b>cont</b>, para indicar que mais uma multiplicação foi efetuada.
  390. <center>
  391. <table>
  392. <tr>
  393. <th> C </th>
  394. <th>Python</th></tr>
  395. <tr>
  396. <td>
  397. <pre>
  398. while (condição){
  399. result = result*x;
  400. cont = cont+1;
  401. }
  402. </pre>
  403. </td>
  404. <td>
  405. <pre>
  406. while condição:
  407. result = result*x
  408. cont = cont+1
  409. </pre>
  410. </td>
  411. </tr>
  412. </table>
  413. </center>
  414. <h3>Qual a condição para que continue a repetição?</h3>
  415. Já foi observado que a variável <b>cont</b> serve para contar quantas vezes o fator X já entrou no produto, assim devemos interromper o laço quando <b>cont==n</b>, ou de outro modo,
  416. devemos continuar enquanto <b>cont< n</b>.
  417. <center>
  418. <table>
  419. <tr>
  420. <th> C </th>
  421. <th>Python</th></tr>
  422. <tr>
  423. <td>
  424. <pre>
  425. while (<b>cont < n</b>){
  426. result = result*x;
  427. cont = cont+1;
  428. }
  429. </pre>
  430. </td>
  431. <td>
  432. <pre>
  433. while <b>cont < n</b>:
  434. result = result*x
  435. cont = cont+1
  436. </pre>
  437. </td>
  438. </tr>
  439. </table>
  440. </center>
  441. <h3>O que deve vir antes da repetição?</h3>
  442. Em primeiro lugar, devemos ler os valores <b>x</b> e <b>n</b>. Precisamos também atribuir valores iniciais adequados às variáveis <B>cont</B> e <b>result</b>. Como <b>cont</b> totaliza
  443. quantos fatores <b>x</b> já entraram no produto, o valor inicial de <b>cont</b> é zero. Assim, após a primeira execução do comando <b>result = result*x</b>, gostariamos de obter o valor
  444. de <b>x</b> em <b>result</b> e por isto devemos impor que <b>result</b> comece com o valor 1.<br />
  445. Interrompido o laço, a resposta estará armazenada em <b>result</b>:
  446. <center>
  447. <table>
  448. <tr>
  449. <th> C </th>
  450. <th>Python</th></tr>
  451. <tr>
  452. <td>
  453. <pre>
  454. 1 int x, n, result, cont;
  455. 2 scanf("%d %d", &x, &n);
  456. 3 cont = 0;
  457. 4 result = 1;
  458. 5 while (<b>cont < n</b>){
  459. 6 result = result*x;
  460. 7 cont = cont+1;
  461. 8 }
  462. 9 printf("%d", result);
  463. </pre>
  464. </td>
  465. <td>
  466. <pre>
  467. 1 x = input()
  468. 2 n = input()
  469. 3 cont = 0
  470. 4 result = 1
  471. 5 while <b>cont < n</b>:
  472. 6 result = result*x
  473. 7 cont = cont+1
  474. 8 print(result)
  475. </pre>
  476. </td>
  477. </tr>
  478. </table>
  479. <div>
  480. <img src="./imgs/potencia_x_n.png" /><br />
  481. <span>Código no iVProg</span>
  482. </div>
  483. </center>
  484. <b>Exercício 4</b> <i>Repare que o programa dá a resposta correta quando n==0, porém quando x==0 e n==0 teriamos um resultado, mesmo que na matemática 0<sup>0</sup>
  485. é indeterminado.</i><br />
  486. <b>Exercício 5</b> <i>Sugerimos como exercício a simulação deste programa, para alguns dados de entrada à escolha do leitor.</i><br />
  487. <b>Exercicio 6</b> <i>O programa abaixo foi proposto para calcular x<sup>n</sup>. Analise o algoritmo, ele está correto? Se não estiver o que há de errado?</i>
  488. <center>
  489. <table>
  490. <tr>
  491. <th> C </th>
  492. <th>Python</th></tr>
  493. <tr>
  494. <td>
  495. <pre>
  496. 1 int x, n, cont;
  497. 2 scanf("%d %d", &x, &n);
  498. 3 cont = 0;
  499. 4 while (cont < n){
  500. 5 x = x*x;
  501. 6 cont = cont+1;
  502. 7 }
  503. 8 printf("%d", x);
  504. </pre>
  505. </td>
  506. <td>
  507. <pre>
  508. 1 x = input()
  509. 2 n = input()
  510. 3 cont = 0
  511. 4 while cont < n:
  512. 5 x = x*x
  513. 6 cont = cont+1
  514. 7 print(x)
  515. </pre>
  516. </td>
  517. </tr>
  518. </table>
  519. <div>
  520. <img src="./imgs/potencia_x_n_errada.png" /><br />
  521. <span>Código no iVProg</span>
  522. </div>
  523. </center>
  524. <b>Exercício 7</b> <i>É possível alterar o programa-solução do problema 3, dispensando a variável contadora <b>cont</b>? Isto é, tente deduzir uma outra versão para o
  525. referido problema, utilizando apenas três variáveis <b>x</b>, <b>n</b> e <b>result</b></i>.
  526. </p>
  527. </body>
  528. </html>