introducao_entrada_saida_dados.html 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <!--
  2. Introdução à entrada e saída de dados
  3. Prof. Leônidas de Oliveira Brandão
  4. Material didático para apoio aos cursos de Introdução à Programação
  5. Direitos reservados
  6. Pode ser usado mediante citação de autoria (Prof. Leônidas de Oliveira Brandão) e origem (https://www.ime.usp.br/~leo/mac2166/introducao/)
  7. -->
  8. <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
  9. <meta name='keywords' content='mac0122, material, professores, leonidas de oliveira brandao'>
  10. <link rel='stylesheet' type='text/css' href='css_img_js_conf/all.css'>
  11. <link rel='stylesheet' type='text/css' href='css_img_js_conf/line_introducao_programacao.css'>
  12. <script src="css_img_js_conf/defineLInE.js"></script> <!-- para referencias 'a documentos internos -->
  13. <div class="pagina">
  14. <p class="secao">Introdução à entrada e saída de dados</a>
  15. <!--
  16. importancia
  17. io_simples
  18. ex_io_simples
  19. io_composto
  20. -->
  21. <a name="algoritmo">
  22. <p class="secao">O que é um algoritmo?</p>
  23. </a>
  24. <p>
  25. Para entender o papel das <i>entradas</i> e <i>saídas</i> de dados é preciso estar claro quem atua sobre estes dados, quer dizer,
  26. como é feito o processamento desses dados.
  27. Quem faz isso é um <b style="color:#0000aa">algoritmo</b>, <i>uma sequência finita de passos, que ao ser aplicado sobre um conjunto
  28. de dados (as <b>entradas</b>), deve produzir sempre as mesmas <b>saídas</b></i>.
  29. Por exemplo, o algoritmo da divisão ao ser aplicado sobre valores fixados <i>a</i> e <i>b</i>, deve
  30. produzir sempre o mesmo valor <i>d</i> (de tal forma que <i>d * b = a</i>).
  31. </p>
  32. <p>
  33. Por outro lado, um <b style="color:#0000aa">programa</b>, nada mais é que a implementação de um <b>algoritmo</b> em uma linguagem específica
  34. (como as linguagens <i>C</i> ou <i>Python</i>).
  35. Desse modo, para este programa funcionar o <b style="color:#0000aa">usuário</b> (aquele que está executando) deve fornecer um
  36. conjunto de <b style="color:#00aa00">dados de entrada</b>, na ordem adequada (pois <i>a/b</i> geralmente não é o mesmo que <i>b/a</i>),
  37. para que o programa possa ser executado e produzir as <b style="color:#00aa00">saída</b> desejadas.
  38. </p>
  39. <p>
  40. Por exemplo, para que a implementação de um algoritmo para a divisão de dois números reais seja adequadamente executado,
  41. devem ser fornecidos os dois valores reais. Se o <i>usuário</i> digitar apenas um valor, o programa ficará parado até
  42. que ele digite o segundo valor.
  43. </p>
  44. <center><img src="img/img_computador_io.png" title="ilustracao processamento entradas x saidas"/>
  45. <br/><i>Fig. 1. Ilustração da existência de um algoritmo que aplicado sobre as entradas produz as respectivas saídas.</i>
  46. </center>
  47. <!--
  48. https://en.wikipedia.org/wiki/Integer_%28computer_science%29
  49. int = -32,768 to 32,767, from -(2^15) to 2^15-1
  50. https://en.wikipedia.org/wiki/Single-precision_floating-point_format
  51. float = 32 bits
  52. IEEE 754 single-precision binary floating-point format: binary32
  53. Sign bit: 1 bit ; Exponent width: 8 bits ; Significand precision: 24 bits (23 explicitly stored)
  54. float = 0/1 0.mantissa x 10^e
  55. 24 bits 8
  56. -->
  57. <a name="importancia">
  58. <p class="secao">Qual a importância da <i>entrada/leitura</i> e da <i>saída/impressão</i> de dados?</p>
  59. </a>
  60. <p>
  61. A grande importância de mecanismos para <i>entrar</i> dados (ou realizar a <i>leitura</i>), para que um programa computacional os
  62. processe, é possibilitar que determinado algoritmo implementado possa atuar sobre esses dados, produzindo resultados personalizados,
  63. no sentido de serem do interesse do usuário.
  64. Por exemplo, um usuário, que é professor, está interessado em saber quais as médias de cada um de seus alunos.
  65. Então o programa implementa um algoritmo que computa as médias dos <i>dados personalizados</i>, que são todas as notas de todos
  66. seus alunos. Esses são os <b style="color:#00aa00">dados de entrada</b>.
  67. </p>
  68. <p>
  69. Por outro lado, o professor precisa receber de alguma os dados que foram gerados, no exemplo, as médias de seus alunos.
  70. Então é preciso haver uma forma de apresentar os <b style="color:#00aa00">dados de saída</b>.
  71. </p>
  72. <p>
  73. Portanto, sem um mecanismo para <i>entradas</i> de dados, um algoritmo não pode ser usado (exceto se for um algoritmo que produz
  74. sempre a mesma coisa, como uma função constante).
  75. De forma análoga, sem um mecanismo <i>saída</i> dos dados de resposta, o algoritmo é inútil.
  76. </p>
  77. <a name="mecanismos">
  78. <p class="secao">Exemplo de mecanismos para "entradas de dados" e para "saídas de dados"</p>
  79. </a>
  80. <p>
  81. Existem vários mecanismos para <i>entrada</i> e para a <i>saída</i> de dados.
  82. Um dos primeiro exemplo de <i>dispositivo para entrada de dados</i> é o <i>teclado</i>, mas existem outros, como os <i>mouses</i>.
  83. Por exemplo, se o usuário der um "clique" duplo em um ícone associado a um arquivo de texto
  84. <img src="img/icn_editor_101.png" width="30" height="30" title="ícone de arquivo para editor de texto"/>, o sistema gráfico "sabe"
  85. que deve abrir o <i>programa editor de texto</i> e, dentro dele, abrir o referido texto.
  86. Mas se o "clique" for sobre o ícone de um arquivo associado à uma planilha eletrônica
  87. <img src="img/icn_planilha_101.png" width="30" height="30" title="ícone de arquivo para planilha"/>, o sistema gráfico "sabe" que
  88. deve abrir o <i>programa planilha eletrônica</i> e, dentro dele, abrir com os dados daquele aquivo (que, por simplicidade, nos
  89. referimos como uma "planilha").
  90. </p>
  91. <p>
  92. Quanto aos mecanismos para <i>saída</i> dos dados processados, o mais comum é a <i>tela</i> (<i>ecrã</i>).
  93. Um outro exemplo interessante de mecanismo de saída são os alto-falantes, eles podem receber dados, produzindo sons.
  94. Para um usuário que for cego, provavelmente este será o meio de saída mais usado.
  95. </p>
  96. <a name="exemplos">
  97. <p class="secao">Exemplos de códigos em <i>C</i> e em <i>Python</i> com entradas/saídas</p>
  98. </a>
  99. <!-- ./introducao/codigos/testes/intr_entrada_saida.* -->
  100. <p>
  101. A tabela abaixo apresenta código para computar a média aritmética de valores a serem digitados pelo usuário.
  102. </p>
  103. <p>
  104. <center><i>Tab. 1. Exemplo de códigos para entrada e saída de inteiros e "reais"</i><br/>
  105. <table class="tableCd">
  106. <tr>
  107. <td></td><td bgcolor="8aaada"><i>C</i>: média de valores</td>
  108. <td bgcolor="8aaada"><i>Python</i>: média de valores</td></tr>
  109. <tr><td><table class=""><tr class="trCd" valign="top"><td><pre> 1
  110. 2
  111. 3
  112. 4
  113. 5
  114. 6
  115. 7
  116. 8
  117. 9
  118. 10
  119. 11
  120. 12</pre></td></tr></table></td>
  121. <td><table class=""><tr class="trCd" valign="top"><td><pre style="font-size: 0.8em;">//C: computa media
  122. #include <stdio.h>
  123. void main (void) {
  124. int i, n; // declara variaveis
  125. float nota, soma = 0.0; // declara variavel para soma
  126. printf("Digite o numero de notas desse aluno: ");
  127. scanf("%d", &n); // comando para entrada via teclado
  128. for (i=0; i&lt;; i++) {
  129. printf("Digite valor %d: ", i); scanf("%f", &nota);
  130. soma = soma + nota; // acumule
  131. }
  132. printf("A media desse aluno e': %f\n", soma/n);
  133. }
  134. </pre></td></tr></table></td>
  135. <td><table class=""><tr class="trCd" valign="top"><td><pre style="font-size: 0.8em;"># Python: computa media
  136. def main () :
  137. soma = 0.0; # declara variavel para somar
  138. print("Digite o numero de notas desse aluno: ");
  139. n = int(input());
  140. for i in range(n) :
  141. print("Digite valor %d: " % i);
  142. soma = soma + float(input()); # acumule
  143. print("A media desse aluno e': %f" % (soma/n));
  144. main();
  145. </pre></td></tr></table></td></tr>
  146. </table></center>
  147. </p>
  148. <p>
  149. Neste exemplo existem dois tipos de <i>dados para entrada</i>, um primeiro inteiro (variável <i>n</i> que será usada para
  150. guardar o número de notas que cada "aluno" tem. Depois o <i>usuário</i> deve digitas nas <i>n</i> para o "aluno".
  151. Note que foi necessário usar uma variável para acumular cada nota digitada, a variável <i>soma</i>.
  152. Ao final, basta apresentar como <i>dado de saída</i> a média do referido "aluno".
  153. </p>
  154. <p>
  155. <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/>
  156. <a href="http://www.ime.usp.br/~leo" target="_blank" title="seguir para a página do LInE">http://line.ime.usp.br</a>
  157. </p>
  158. <p class="rodape">
  159. <b>Alterações</b>:<br/>
  160. 2020/08/19: pequenas correções<br/>
  161. 2020/08/07: primeira versão
  162. </p>
  163. </div>