introducao_var.html 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. <!--
  2. Introdução à Programação - 2017 - Prof. Leoônidas de Oliveira Brandão
  3. Introdução às variáveis e expressões aritméticas
  4. LInE (Laboratory of Informatics in Education) - http://www.usp.br/line
  5. IME - USP
  6. Material didático
  7. Pode usar livrevemente este material para fins não comerciais, devendo sempre fazer referência à autoria.
  8. Sugestões/apontamento são bem vindos: leo@ime.usp.br (favor indicar no assunto "material de introducao 'a programacao")
  9. Prof. Leônidas de Oliveira Brandão
  10. http://www.ime.usp.br/~leo
  11. http://line.ime.usp.br
  12. http://www.matemtica.br
  13. -->
  14. <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
  15. <meta name='keywords' content='mac0122, material, professores, leonidas de oliveira brandao'>
  16. <link rel='stylesheet' type='text/css' href='css_img_js_conf/all.css'>
  17. <link rel='stylesheet' type='text/css' href='css_img_js_conf/line_introducao_programacao.css'>
  18. <div class="pagina">
  19. <center><p>[
  20. <a href="#paraque" title="seguir para para que serve variaveis">Utilidade</a> &nbsp; | &nbsp;
  21. <a href="#memoria" title="seguir para sobre memoria, bits e bytese">Memória</a> &nbsp; | &nbsp;
  22. <a href="#variaveis" title="seguir para variaveis inteiras e reais">Variáveis</a> &nbsp; | &nbsp;
  23. <a href="#expressoes" title="seguir para expressões aritméticas">Expressões</a> &nbsp; | &nbsp;
  24. <a href="#contexto" title="seguir para resultado de uma expressão depende do contexto">Contexto</a> &nbsp; &nbsp;
  25. ]</p>
  26. </center>
  27. <p class="secao">Introdução às variáveis e expressões aritméticas</p>
  28. <p>
  29. Nesta seção apresentarei o conceito de variáveis e de expressões aritméticas.
  30. Esses são conceitos essenciais para a construção de algoritmos, sem eles seria inviável produzir
  31. um <b style="color:#0000aa" title="Por exemplo, o oposto seria um algoritmo que sempre dividisse 10 por 3, portanto pouquísso útil!"
  32. >algoritmo flexível</b>, que pudesse ser aplicado sobre dados distintos
  33. (e.g., o algoritmo da soma é flexível no sentido de podermos somar diferentes valores, não apenas 2 valores fixados).
  34. </p>
  35. <a name="oque">
  36. <p class="secao">O que é uma variável?</p>
  37. </a>
  38. <p>
  39. Uma explicação simples, para não especialistas em programação, é que
  40. uma <b>variável</b> é um <i>nome</i> quer pode ser associado à diferentes valores.
  41. Esse nome usualmente começa
  42. com uma letra, sendo composto por letras e números.
  43. </p>
  44. <p>
  45. Usualmente, em qualquer linguagem de programação, sempre que usamos em um código uma variável, significa que deve-se pegar o valor armazenado nesta variável.
  46. Assim, um trecho com <tt>10*b</tt>, implica em pegar o valor corrente armazenado na variável <tt>b</tt> e
  47. multiplicá-lo por <tt>10</tt>.
  48. </p>
  49. <p>
  50. Mas como o nome sugere, deve ser possível <b>alterar o valor armazenado em uma variável</b>, isso é feito por uma instrução de <i>atribuição</i>.
  51. Pode-se <b style="color: #0000aa">atribuir</b> um valor à uma variável, como nos exemplos:
  52. <ul>
  53. <li><codigo1>i = 0</codigo1> &nbsp; significa que a variável de nome <i>i</i> (neste ponto do código) estará guardando o valor inteiro <i>0</i>;</li>
  54. <li><codigo1>fat = i*fat</codigo1> &nbsp; é exemplo mais "sofisticado", significa que a variável de nome <i>fat</i> deve receber o valor que
  55. anteriormente (à este comando) era guardado em <i>fat</i> multiplicado pelo valor guardado na variável <i>i</i>.
  56. </ul>
  57. <center>
  58. <img src="img/img_intr_var_1.png" title="Ilustração de atribuição às variáveis i e fat"/>
  59. <br/>
  60. <i>Fig. 1. Variáveis <i>i</i> e <i>fat</i> recebendo valores (constante e expressão).</i>
  61. <!-- i &#11013; 0 -->
  62. </center>
  63. Note que o símbolo "<i>=</i>" <b style="color: #aa0000">não</b> tem o sentido usual da Matemática, em boa parte das linguagens de programação
  64. "<tt>var = EXPRESSAO</tt>" significa que
  65. <i>deve-se computar o valor da expressão no <b style="color: #0000aa">lado direito da atribuição</b>
  66. e depois atribuir este valor à variável de nome <i>var</i></i>.
  67. Isso fica mais claro no segundo exemplo "<tt>fat = i*fat</tt>".
  68. <br/>
  69. Por isso diz-se que <b style="color: #0000aa">var recebe EXPRESSAO</b>.
  70. </p>
  71. <p>
  72. As linguagens que usam <i>=</i> como atribuição, usam <i>==</i> (dois símbolos de igualdade) para comparar valores.
  73. Um exceção é a linguagem
  74. <a href="https://en.wikipedia.org/wiki/Pascal_%28programming_language%29"
  75. title="ver na WikiPedia - a versão em Portuguès não está bo (em agosto de 2020">Pascal</a>
  76. que usa <i>:=</i> para atribuição e <i>=</i> para comparações.
  77. <!-- https://pt.wikipedia.org/wiki/Pascal_%28linguagem_de_programa%C3%A7%C3%A3o%29 -- texto está ruim... -->
  78. </p>
  79. <a name="maissobre">
  80. <p class="secao">Sabendo um pouco mais sobre o que é uma variável</p>
  81. </a>
  82. <p>
  83. Uma <b>variável</b> um conceito comum na Matemática e presente em todas as linguagens de programação, que de uma forma implementa o conceito.
  84. <b>Variável</b> é a associação de uma posição específica de <i>memória</i> do computador a um nome, que geralmente
  85. <b style="color:#a00;">não</b> pode ser um nome de comando da linguagem (<b>palavra reservada</b>).
  86. </p>
  87. <p>
  88. Existem vários <b>tipos de variáveis</b>, como variável <i>inteira</i> ou <i>flutuante</i>. O que as difere é o
  89. número de <i>bits</i> necessário para representar e como esses <i>bits</i> são interpretados.
  90. Por exemplo, se houver um tipo <i>natural</i> (ou <i>inteiro positivo</i>), que use 16 <i>bits</i>, poderia-se representar
  91. <i>2<sup>16</sup>=65526</i> naturais distintos, ou seja, desde <i>0</i> até <i>65525</i>. Se tentar representar o
  92. valor <i>65526</i> ocorreria um erro e algum número "estranho" apareceria na tela.
  93. </p>
  94. <center><img src="img/var_memoria1.jpg" title="Ilustracao de inteiro de 16 bits e do modelo float IEEE 754 com 32 bits em memoria"/>
  95. <br/>
  96. <i>Fig. 2. Representação da memória com agrupamentos em <i>bytes</i> (8 <i>bits</i>).</i>
  97. </center>
  98. <!--
  99. https://en.wikipedia.org/wiki/Integer_%28computer_science%29
  100. int = -32,768 to 32,767, from -(2^15) to 2^15-1
  101. https://en.wikipedia.org/wiki/Single-precision_floating-point_format
  102. float = 32 bits
  103. IEEE 754 single-precision binary floating-point format: binary32
  104. The IEEE 754 standard specifies a binary32 as having:
  105. Sign bit: 1 bit
  106. Exponent width: 8 bits
  107. Significand precision: 24 bits (23 explicitly stored)
  108. float = 0/1 0.mantissa x 10^e
  109. 24 bits 8
  110. -->
  111. <p>
  112. Na figura 2 está ilustrado a associação de 16 <i>bits</i> à uma variável inteira de nome <i>n</i>, seguido de 32 <i>bits</i>
  113. correspondentes à uma variável <i>float</i>, usando o padrão IEEE 754 (o primeiro <i>bit</i> é o sinal <i>s</i>; os 8 <i>bits</i>
  114. seguintes correspondente ao expoente <i>e</i> e os últimos 23 à mantissa <i>m</i> - valor de <i>x</i> é
  115. <i>s * m * 10<sup>e</sup></i>, sendo <i>m</i> entre 0 e 1).
  116. Por exemplo, se <i>x=-102.003</i>, então <i>s=-1</i>, <i>m=102003</i> e <i>e=-3</i>, pois <i>-102.003=-1 * 102003 * 10<sup>-3</sup></i>.
  117. </p>
  118. <a name="paraque">
  119. <p class="secao">Para que serve variáveis</p>
  120. </a>
  121. <p>
  122. Ilustraremos a ideia e necessidade de variáveis a partir de um exemplo simples: como realizar o
  123. cálculo de gastos usando uma calculadora muito elementar.
  124. </p>
  125. <p>
  126. <img src="img/img_calc.png"
  127. style="float: left; margin-right: 1%; margin-bottom: 0.5em;justify-content: center;" title="imagem calculadora"/>
  128. Imagine uma calculadora simples, como ilustrado ao lado, dispondo de apenas um mostrador e apenas 4 operações
  129. (somar, subtrair, multiplicar e dividir).
  130. Se desejamos computar o gasto mensal com a padaria, devemos digitar sequencialmente os valores gastos, um a um,
  131. seguido do operador de soma <tt>+</tt>, sendo que ao final teclamos <tt>=</tt>. <!-- e obtermos na tela o valor total gasto. -->
  132. Vamos supor que os valores dos gastos foram
  133. <tt>5</tt>, <tt>2</tt>, <tt>3</tt>, <tt>5</tt> e <tt>3</tt>.
  134. Mas como foi possível obter a soma de todos os valores? Isso só foi possível por existir um
  135. "acumulador" (<tt>AC</tt>) para armazenar o primeiro valor digitado e depois disso, esse mesmo
  136. "acumulador" teve um novo valor a ele adicionado (ou acumulado):
  137. <tt>AC := <b>5</b></tt>, depois
  138. <tt>AC := 5+<b>2</b> = 7</tt>. depois
  139. <tt>AC := 7+<b>3</b> = 10</tt>. depois
  140. <tt>AC := 10+<b>5</b> = 15</tt> e por último
  141. <tt>AC := 15+<b>3</b> = 18</tt>.
  142. </p>
  143. <p>
  144. <sabermais title="Para quem deseja saber um pouco mais 'como funciona'">
  145. Podemos pensar que calculadora está fazendo o papel da Unidade Lógico Aritmética (<i>Arithmetic logic unit (ALU)</i> em Inglês)
  146. de um computador.
  147. O recurso da calculadora que armazena os valores computados (que denotamos por <tt>AC</tt>) seria o equivalente a um <i>registrador</i>
  148. ou a uma posição de memória em um computador.
  149. Para se ter uma noção da diferença, deve-se notar que um computador moderno dispõe de vários registradores e o que tem sido denominado
  150. <i style="color:#0000aa" title="derivado do primeiro nome, em Inglês, RAM Random Access Memory">memória</i>,
  151. ordens de grandeza maiores que os registradores, hoje compra-se computadores com ao menos <i>2 Gb</i> de memória
  152. <i style="color:#0000aa" title="RAM Random Access Memory, Memória de Acesso aleatório - nome desinformativo, mas tornou-se esse">RAM</i>
  153. (<i>Gb</i> = <i>giga bytes</i> = 1 bilhão de <i>bytes</i>)
  154. </sabermais>
  155. </p>
  156. <p>
  157. Deve-se destacar que o valor armazenado em um registrador ou na memória pode ser alterado, podendo-se dizer
  158. que esses valores <i>variam</i>, vindo dai seu nome de <b style="color: #0000AA">variável</b>.
  159. Para <b>nomear</b> as variáveis, pode-se usar qualquer combinação de letras e números (iniciando por uma letra).
  160. Por exemplo, uma instrução alterando o valor da variável de nome <tt>discriminante</tt> em uma linguagem de programação
  161. qualquer:
  162. <center>
  163. <tt>discriminante = b*b - 4 * a * c</tt>
  164. </center>
  165. <br/>
  166. que significa que a variável de nome <tt>discriminante</tt> recebe o resultado da expressão "o quadrado do
  167. valor armazenado em <tt>b</tt> menos <tt>4</tt> vezes o conteúdo em <tt>a</tt> vezes o conteúdo em <tt>c</tt>".
  168. <!--
  169. No exemplo acima, a calculadora faz o papel de um <i>unidade central de processamento</i> (ou <i>CPU</i> no termo em Inglês)
  170. e o "acumulador" é um <i>registrador</i> que serve para armazenar valores.
  171. Em um computador digital, existe um número razoável de registradores e o restante das informações devem ser armazenadas
  172. na <i>memória</i> do computador, que não é tão rápido quanto um registrador, mas é muito mais barata.
  173. O registrador ou posições de memória podem ter seus valores trocados ao longo da execução do programa (código)
  174. e por isso cada uma dessas posições pode ser entendida como uma <b>variável</b>.
  175. -->
  176. </p>
  177. <p>
  178. Voltando aos <i>tipos de variáveis</i>, existe a necessidade de <b>declarar</b> qual é o tipo da variável,
  179. em uma <i>linguagem de programação</i> como <i>C</i> isso deve ser feito de modo explicito, por exemplo, podemos declarar
  180. e iniciar uma variável inteira e uma <i>flutuante</i> com o valor <i>5</i> da seguinte forma:<br/>
  181. &nbsp; &nbsp; &nbsp; <tt style="color: #0000AA"><verm>int</verm> AC = 5; <verm>float</verm> ac = 5; <cyan>// em C, "AC" NAO e' a mesma coisa que "ac"!</cyan></tt>.
  182. <br/>
  183. Por outro lado, a linguagem <i>Python</i> não dispõe de um mecanismo para indicar o tipo de variável explicitamente,
  184. a primeira atribuição usando um nome funciona como declaração: <br/>
  185. &nbsp; &nbsp; &nbsp; <tt style="color: #0000AA">AC = 5; ac = 5.0; <cyan>#</cyan> em Python, "AC" NAO e' a mesma coisa que "ac"!</tt>.
  186. </p>
  187. <p>
  188. Portanto, <b>variável</b> é essencial para que possamos fazer com que o programa receba algum dado de nosso interesse.
  189. Mesmo em um <i>editor de texto</i> isso ocorre, o texto que digitamos é armazenado (de alguma forma, em variáveis!).
  190. </p>
  191. <p>
  192. Se você estiver interessado em saber um pouco mais sobre o que é o <i>conceito de variável</i>, estude o
  193. restante desse texto.
  194. </p>
  195. <div class="sabermais2" title="Para quem deseja saber um pouco mais 'como funciona'">
  196. <a name="memoria">
  197. <p class="subsecao">Memória, <i>bits</i> e <i>bytes</i></p></a>
  198. <p>
  199. O conceito de variável foi introduzido com o surgimento as <i>linguagens de programação</i>, antes disso era necessário
  200. fazer um acesso direto às posições de memória.
  201. Portanto, variável está associada às linguagens de programação (em um <i>compilador</i>
  202. ou via um <i>interpretador</i>), tendo sido definido para facilitar o armazenamento e recuperação de valores em determinada
  203. posição de memória (para facilitar a <i>programação</i>).
  204. </p>
  205. <p>
  206. Em última análise, os dados presentes na memória do computador são uma sequência de <i>bits</i> e um <i>bit</i>
  207. corresponde a uma posição de memória que pode armazenar o valor <i>0</i> ou o valor <i>1</i>. No início da computação moderna
  208. a menor quantidade de <i>bits</i> que podia ser acessada eram 8 <i>bits</i>, que foi denominado por <i>byte</i>.
  209. </p>
  210. <center><img src="img/var_memoria2.jpg" title="ilustracao de 4 sequencias de 8 bits em memoria"/>
  211. <br/>
  212. <i>Fig. 3. Representação da memória com agrupamentos em <i>bytes</i> (8 <i>bits</i>).</i>
  213. </center>
  214. <p>
  215. Desse modo, toda informação armazenada no computador é uma sequência de <i>bytes</i> e o tratamento de cada
  216. que se dá para cada uma dessas sequências pode variar, por exmeplo, pode considerar a sequência <tt>0010</tt>
  217. com uma letra ou como um inteiro. Ou seja, de acordo com o <b>contexto</b>, se ela estiver associada a uma
  218. variável do tipo inteiro pode-se interpretar a sequência como um número inteiro, se for uma variável do
  219. tipo caractere, como um caractere.
  220. </p>
  221. </div>
  222. <br/>
  223. <div class="sabermais2" title="Para quem deseja saber um pouco mais 'como funciona'">
  224. <a name="variaveis">
  225. <p class="subsecao">Variáveis inteiras e reais</p></a>
  226. <p>
  227. Mas qual a relação entre <i>bytes</i> e variáveis?
  228. <br/>
  229. Primeiro, deve-se saber a priori quanto "espaço" cada tipo de variável ocupará na memória. Esse "tamanho" também determinará
  230. quanto valores distintos tal tipo de variável poderá armazenar.
  231. Por exemplo, suponha que determinado computador (muito, muito antigo) utilize apenas um <i>byte</i> para armazenar inteiros, como em
  232. um <i>byte</i> existem oito (8) <i>bits</i>, então nesse computador poderia existir <i>2<sup>8</sup></i> (ou seja, 256) inteiros
  233. distintos (mas como existem negativos e positivos um deles ficaria com <i>2<sup>7</sup>=128</i> valores e o outro com
  234. <i>2<sup>7</sup>-1=127</i>).
  235. <br/>
  236. Desse modo, nesse computador de inteiros com 8 <i>bits</i>, uma variável inteira na verdade guardaria o endereço inicial
  237. (a posição de seu primeiro <i>bit</i>) e onde tiver referencia a ela, o computador estaria programado para pegar os
  238. 8 <i>bits</i> a partir dessa posição e interpretá-lo como um valor inteiro.
  239. <br/>
  240. <b>Exemplos</b>: a sequência de <i>bits</i> <tt>00000101</tt> seria interpretado como <i>5</i> (pois <i>1*2<sup>2</sup>+1*2<sup>0</sup>=5</i>) e
  241. a sequência de <i>bits</i> <tt>00010101</tt> seria interpretado como <i>5</i> (pois <i>1*2<sup>4</sup>+1*2<sup>2</sup>+1*2<sup>0</sup>=21</i>).
  242. </p>
  243. <p>
  244. Existe uma <i>regra para sintática</i> para a construção de nomes de variáveis, por exemplo, em linguagens de programação como
  245. <i>C</i> ou <i>Python</i>, uma variável é uma sequência de letras, dígitos e do caractere "barra baixa" ('<tt>_</tt>'),
  246. devendo começar com letra, mas <b style="color:#aa0000">não</b> pode coincidir com nome de algum comando da linguaguem
  247. (que são denominados <b style="color:#0000aa">palavra reservada</b>).
  248. </p>
  249. <p>
  250. Existem outros <i>tipos de variáveis</i> como os valores "reais", que devido à técnica de implementação (vide figura 2)
  251. é denominado <i>flutuante</i> (<i>float</i>).
  252. </p>
  253. <p>
  254. 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
  255. <i>C</i> e <i>Python</i>.
  256. </p>
  257. <center><table>
  258. <tr><td></td><td bgcolor="8aaada"><i>C</i> <td bgcolor="8aaada"><i>Python</i></td></tr>
  259. <tr><td>1</td><td><verm>int</verm> n1,n2; <td><cyan># desnecessário declarar em <i>Python</i></cyan></td></tr>
  260. <tr><td>2</td><td>n1 = 1; <td>n1 = 1 <cyan># primeira atribuicao equivale `a declarar em <i>Python</i></cyan></td></tr>
  261. <tr><td>3</td><td><verd>scanf</verd>("%d", &n2); <td>n2 = int(<verd>input</verd>())</td></tr>
  262. <tr><td>4</td><td><verd>printf</verd>("n1=%d e n2=%d\n", n1, n2);&nbsp; <td><verd>print</verd> "n1=", n1, " e n2=", n2 <cyan>#</cyan> Python 2</td></tr>
  263. <tr><td>5</td><td> <td><verd>print</verd>("n1=", n1, " e n2=", n2) <cyan>#</cyan> Python 3</td></tr>
  264. </table></center>
  265. <p>
  266. Note as diferenças entre <i>C</i> e <i>Python</i>:
  267. <ul>
  268. <li> De modo geral, todo comando em <i>C</i> precisa de ';' como finalizador.
  269. </li>
  270. <li> 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.
  271. <li> Na linha 3 nota-se que <i>C</i> utiliza a função pré-definida de nome <i><verd>scanf</verd></i> para pegar valores digitados
  272. pelo usuário enquanto <i>Python</i> usa o <i>input</i>. O <i><verd>scanf</verd></i> usa o formatador especial '%d' para forçar
  273. o computador a interpretar os <i>bytes</i> como um inteiro, enquanto o <i>input</i> pega os <i>bytes</i>
  274. digitados e o submete à outra função pré-definida <i>Python</i>, o <i>int(...)</i>, que converte os <i>bytes</i> lidos para um inteiro.
  275. </li>
  276. <li> Na linha 4 nota-se o mesmo tipo de diferença, <i>C</i> utiliza a função <i><verd>printf</verd></i> para imprimir também com
  277. o formatador para inteiro '%d', além de separar em 2 blocos, o primeiro para formatar a saída, que é cercado
  278. por aspas dupla e o segunda, uma lista de variáveis compatíveis com o formatador.
  279. Já em <i>Python</i>, usa-se os caracteres entre aspas e as variáveis misturados, separador por vírgula.
  280. </li>
  281. <li> Vale destacar que a linha 4 apresenta a sintaxe do <i>Python</i> antes da versão 3, enquanto que a linha 5
  282. apresenta o mesmo resultado mas para o <i>Python</i> a partir da sua versão 3.
  283. </li>
  284. </ul>
  285. </p>
  286. </div>
  287. <br/>
  288. <div class="sabermais2" title="Para quem deseja saber um pouco mais 'como funciona'">
  289. <a name="expressoes">
  290. <p class="subsecao">Expressões aritméticas</p>
  291. </a>
  292. <p>
  293. Do mesmo modo que em matemática é essencial efetuarmos operações aritméticas com valores numéricos,
  294. o mesmo ocorre com o computador, na verdade efetuar contas de modo
  295. rápido e "sem erro" (na verdade existem erros numéricos, mas este é
  296. outro assunto) foi a grande motivação para se construir os computadores.
  297. </p>
  298. <p>
  299. Neste, os agrupamentos de valores, variáveis e operadores aritméticos recebem o nome de <i>expressão aritmética</i>.
  300. De modo geral, podemos conceituar uma <i>expressão aritmética</i> <b>EA</b> como:
  301. <ol>
  302. <li>EA := K: uma constante numérica é uma <i>expressão aritmética</i></li>
  303. <li>EA := EA + EA | EA - EA | EA * EA | EA / EA: uma <i>expressão aritmética</i> seguida de um <b>operador binário</b>
  304. (com 2 itens) e seguida por outra <i>expressão aritmética</i> é uma <i>expressão aritmética</i></li>
  305. </ol>
  306. Os <b>operadores artiméticos binários</b>, tanto em <i>C</i> quanto em <i>Python</i> são:
  307. </p>
  308. <center><table>
  309. <tr><td bgcolor="8aaada">Operação</td><td bgcolor="8aaada">Operador <td bgcolor="8aaada">Exemplo</td></tr>
  310. <tr><td>soma </td><td> + <td> 2 + 4 </td></tr>
  311. <tr><td>subtração </td><td> - <td> n1 + 1 </td></tr>
  312. <tr><td>multiplicação</td><td> * <td> 3 * n2 </td></tr>
  313. <tr><td>divisão </td><td> / <td> n1 / n2 </td></tr>
  314. </table></center>
  315. <p>
  316. Note que foi usado espaço em branco entre os operando e operadores, mas isso não é obrigatório.
  317. </p>
  318. </div>
  319. <br/>
  320. <div class="sabermais2" title="Para quem deseja saber um pouco mais 'como funciona'">
  321. <a name="contexto">
  322. <p class="subsecao">O resultado de uma expressão aritmética depende do contexto</p>
  323. </a>
  324. <p>
  325. É importante observar que dependendo do contexto o resultado de uma expressão é um ou outro, quer dizer,
  326. se os valores envolvidos forem todos eles inteiros, o resultado será inteiro, entretanto havendo um valor
  327. real, a resposta final será real.
  328. </p>
  329. <p>
  330. A importância disso fica clara ao examinar dois exemplos simples: <i>3 / 2 * 2</i> e <i>3.0 / 2 * 2</i>.
  331. Em várias linguagens de programação a primeira expressão resulta o valor <i>2</i>, enquanto a segunda <i>3.0</i>.
  332. 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,
  333. 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í
  334. o segundo operador é feito com os valores <i>1 * 2</i> resultando o valor <i>2</i>.
  335. </p>
  336. <p>
  337. Por exemplo, na linguagem <i>C</i>, a sintaxe e o resultado para as expressões acima está indicada no código
  338. abaixo:
  339. <pre><incl1>#include</incl1> &lt;stdio.h&gt;
  340. <verm>void</verm> main (<verm>void</verm>) {
  341. <cyan>// Resultados</cyan>
  342. <verd>printf</verd>("3 / 2 * 2 = %d\n", 3 / 2 * 2); <cyan>// 3 / 2 * 2 = 2</cyan>
  343. <verd>printf</verd>("3.0 / 2 * 2 = %f\n", 3.0 / 2 * 2); <cyan>// 3.0 / 2 * 2 = 3.000000</cyan>
  344. }</pre>
  345. </p>
  346. <p>
  347. Entretanto existe exceção, na versão 3 do <i>Python</i>, ao usar o operador de divisão <tt>/</tt>, ele
  348. automaticamente converte o resultado para número real.
  349. O bloco de comandos abaixo ilustra a diferença entre o <i>Python 2</i> e o <i>Python 3</i>:
  350. <pre><cyan># Resultados em : Python 2</cyan> | <cyan># Python 3/cyan>
  351. <verd>print</verd>("3 / 2 * 2=", 3 / 2 * 2); <cyan># ('3 / 2 * 2=', 2) | 3 / 2 * 2= 3.0/cyan>
  352. <verd>print</verd>("3.0 / 2 * 2=", 3.0 / 2 * 2); <cyan># ('3.0 / 2 * 2=', 3.0) | 3.0 / 2 * 2= 3.0/cyan>
  353. <verd>print</verd>("3 // 2 * 2=", 3 // 2 * 2); <cyan># ('3 // 2 * 2=', 2) | 3 // 2 * 2= 2/cyan>
  354. <verd>print</verd>("3.0 // 2 * 2=", 3.0 // 2 * 2); <cyan># ('3.0 // 2 * 2=', 2.0) | 3.0 // 2 * 2= 2.0/cyan></pre>
  355. </p>
  356. </div>
  357. <p class="autoria">
  358. <a href="https://www.ime.usp.br/~leo" target="_blank" title="seguir para a pagina do prof. Leônidas">Leônidas de Oliveira Brandão</a><br/>
  359. <a href="http://www.ime.usp.br/~leo" target="_blank" title="seguir para a página do LInE">http://line.ime.usp.br</a>
  360. </p>
  361. <p class="rodape">
  362. <b>Alterações</b>:<br/>
  363. 2020/10/23: acerto vírgulo faltante<br/>
  364. 2020/10/16: cor include<br/>
  365. 2020/08/15: novo formato, pequenas revisões<br/>
  366. 2020/07/06: nova seção inicial (" O que é uma variável?");<br/>
  367. 2019/06/05: as seções inicial ("Ideia de variável") e final ("O resultado de uma expressão aritmética depende do contexto") foram estendidas;<br/>
  368. 2019/06/04: adicionada nova seção (inicial) "Ideia de variável";<br/>
  369. 2017/04/14: adicionados novos itens (como explicação adicional sobre expressões aritméticas).
  370. </p>
  371. </div>