introducao_funcao_global.html 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <!--
  2. Introdução às funções, parâmetros e variáveis globais
  3. http://saw.atp.usp.br/mod/page/view.php?id=13302
  4. ---
  5. Trocar end. imagem para:
  6. <center><img alt="memoria e variaveis" src="http://saw.atp.usp.br/draftfile.php/31/user/draft/650565435/memoria1.jpg" title="ilustracao de 4 sequencias de 8 bits em memoria" height="71" width="342" /></center>
  7. <i></i>
  8. ---
  9. -->
  10. <!DOCTYPE html>
  11. <html itemscope itemtype="http://schema.org/QAPage">
  12. <head>
  13. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  14. <title>Introdução às funções, parâmetros e variáveis globais</title>
  15. </head>
  16. <body>
  17. <span style="color: #0055AA">Introdução às funções, parâmetros e variáveis globais</span>
  18. <p>
  19. Uma função em linguagens alto-nível com <i>C</i> e <i>Python</i> deve ser entendida como um
  20. bloco de comandos que podem ser invocados (chamados) em qualquer momento, resultando que o
  21. referido bloco será executado (ou interpretado) e após sua execução, o fluxo continua do
  22. ponto em que estava. Isso é esquematizado na figura abaixo.
  23. </p>
  24. <p>
  25. Em última análise, os dados presentes na memória do computador é uma sequência de <i>bits</i> e um <i>bit</i>
  26. corresponde a uma posição de memória que pode armazenar o valor 0 ou o valor 1. No início da computação moderna
  27. a menor quantidade de <i>bits</i> que podia acessar eram 8, que foi denominado por <i>byte</i>.
  28. </p>
  29. <center><img src="img/var_memoria1.jpg" title="ilustracao de 4 sequencias de 8 bits em memoria"/>
  30. </center>
  31. <p>
  32. Desse modo, toda informação armazenada no computador é uma sequência de <i>bytes</i> e tratamento de cada
  33. que se dá para cada sequência de <i>bytes</i> pode variar. Ou seja, de acordo com o <b>contexto</b> pode-se
  34. interpretar esta sequência como um número inteiro, como um valor real ou como um caractere.
  35. </p>
  36. <span style="color: #0055AA">Variáveis inteiras e reais</span>
  37. <p>
  38. E qual a relação disso com variável? Bem, por exemplo, é necessário contar e, para fazer usando o computador
  39. precisamos pegar uma sequência de <i>bytes</i> interpretá-lo como inteiro, somar 1 e registrar o valor
  40. alterado. Isso é feito utilizando a mesma posição de memória, que está assim <i>variando</i>, dai o nome
  41. <i>variável</i>.
  42. </p>
  43. <p>
  44. De um ponto de vista mais elevado (<i>alto-nivel</i>), utilizando uma linguagem de programação com <i>C</i> ou <i>Python</i>,
  45. uma variável é representada por um nome, sem caracteres especiais (exceto "barra baixa" '_' que é permitido)
  46. e que não seja o nome de um comando da linguaguem (denominado de modo geral por <i>palavra reservada</i>).
  47. </p>
  48. <p>
  49. Além disso uma variável deve ter um tipo associado, os tipos básicos que examinaremos nesta seção são o
  50. inteiro (<i>int</i>) e o flutuante (<i>float</i>), este último para representar os valores reais.
  51. A partir da explicação acima sobre interpretar os <i>bytes</i> como número ou caractere explica a necessidade
  52. de cada variável ter o seu tipo conhecido.
  53. </p>
  54. <p>
  55. Para explicar melhor a necessidade de tipos, suporemos que o computador considerado utilize para uma variável
  56. <i>int</i> e para uma do tipo <i>float</i>, respectivamente, 2 e 4 <i title="cada byte tem 8 bits">bytes</i>.
  57. </p>
  58. <p>
  59. Desse modo, quando o citado computador precisa devolver o valor armazenado em uma variável do tipo inteiro, ele
  60. acessará a posição de memória associada à variável, pegará a partir dessa posição os próximos 16 <i>bits</i> e
  61. o interpretará como um valor inteiro.
  62. </p>
  63. <p>
  64. Do ponto de vista prático, vejamos como se usa variáveis do tipo <i>int</i> e do tipo <i>float</i> nas linguagens
  65. <i>C</i> e <i>Python</i>.
  66. </p>
  67. <center><table>
  68. <tr><td></td><td bgcolor="8aaada"><i>C</i> <td bgcolor="8aaada"><i>Python</i></td></tr>
  69. <tr><td>1</td><td>int n1,n2; <td># desnecessário declarar em <i>Python</i></td></tr>
  70. <tr><td>2</td><td>n1 = 1; <td>n1 = 1</td></tr>
  71. <tr><td>3</td><td>scanf("%d", &n2); <td>n2 = int(input())</td></tr>
  72. <tr><td>4</td><td>printf("n1=%d e n2=%d\n", n1, n2); <td>print "n1=", n1, " e n2=", n2 # Python 2</td></tr>
  73. <tr><td>5</td><td> <td>print("n1=", n1, " e n2=", n2) # Python 3</td></tr>
  74. </table></center>
  75. <p>
  76. Note as diferenças entre <i>C</i> e <i>Python</i>. De modo geral, todo comando em <i>C</i> precisa de ';' como finalizador.
  77. Na linha 1 percebe-se que em <i>C</i> é obrigatório <b>declarar</b> as variáveis, enquanto que em <i>Python</i> não.
  78. <br/>
  79. Na linha 3 nota-se que <i>C</i> utiliza a função pré-definida de nome <i>scanf</i> para pegar valores digitados
  80. pelo usuário enquanto <i>Python</i> usa o <i>input</i>. O <i>scanf</i> usa o formatador especial '%d' para forçar
  81. o computador a interpretar os <i>bytes</i> como um inteiro, enquanto o <i>input</i> pega os <i>bytes</i>
  82. digitados e o submete à outra função pré-definida <i>Python</i>, o <i>int(...)</i>, que converte o valor para inteiro.
  83. <br/>
  84. Na linha 4 nota-se o mesmo tipo de diferença, <i>C</i> utiliza a função <i>printf</i> para imprimir também com
  85. o formatador para inteiro '%d', além de separar em 2 blocos, o primeiro para formatar a saída, que é cercado
  86. por aspas dupla e o segunda, uma lista de variáveis compatíveis com o formatador.
  87. Já em <i>Python</i>, usa-se os caracteres entre aspas e as variáveis misturados, separador por vírgula.
  88. <br/>
  89. Vale destacar que a linha 4 apresenta a sintaxe do <i>Python</i> antes da versão 3, enquanto que alinha 5 apresenta
  90. o mesmo resultado mas para o <i>Python</i> a partir da sua versão 3.
  91. </p>
  92. <span style="color: #0055AA">Expressões aritméticas</span>
  93. <p>
  94. Do mesmo modo que em matemática é essencial efetuamos operações aritméticas com valores numéricos,
  95. o mesmo ocorre com o computador, na verdade efetuar contas de modo rápido e sem erro foi a grande
  96. motivação para se construir os computadores.
  97. </p>
  98. <p>
  99. Neste, os agrupamentos de valores, variáveis e operadores aritméticos recebem o nome de <i>expressão aritmética</i>.
  100. Os operadores artiméticos, tanto em <i>C</i> quanto em <i>Python</i> são:
  101. </p>
  102. <center><table>
  103. <tr><td bgcolor="8aaada">Operação</td><td bgcolor="8aaada">Operador <td bgcolor="8aaada">Exemplo</td></tr>
  104. <tr><td>soma </td><td> + <td> 2 + 4 </td></tr>
  105. <tr><td>subtração </td><td> - <td> n1 + 1 </td></tr>
  106. <tr><td>multiplicação</td><td> * <td> 3 * n2 </td></tr>
  107. <tr><td>divisão </td><td> / <td> n1 / n2 </td></tr>
  108. </table></center>
  109. <p>
  110. Note que foi usado espaço em branco entre os operando e operadores, mas isso não é obrigatório.
  111. </p>
  112. <span style="color: #0055AA">O resultado de uma expressão aritmética depende do contexto</span>
  113. <p>
  114. É importante observar que dependendo do contexto o resultado de uma expressão é um ou outro, quer dizer,
  115. se os valores envolvidos forem todos eles inteiros, o resultado será inteiro, entretanto havendo um valor
  116. real, a resposta final será real.
  117. </p>
  118. <p>
  119. A importância disso fica clara ao examinar dois exemplos simples: <i>3 / 2 * 2</i> e <i>3.0 / 2 * 2</i>.
  120. A primeira expressão resulta o valor <i>2</i>, enquanto a segunda <i>3.0</i>. Isso mesmo.
  121. </p>
  122. <p>
  123. A razão é que no primeiro caso todos valores são inteiros, então o cômputo é realizado com aritmética de precisão inteira,
  124. ou seja, ao realizar o primeiro cômputo <i>3/2</i>, o resultado é <i>1</i> (e não <i>1.5</i> como no segundo caso), daí
  125. o segundo operador é feito com os valores <i>1 * 2</i> resultando o valor <i>2</i>.
  126. </p>
  127. Leônidas de Oliveira Brandão
  128. http://line.ime.usp.br
  129. </body>