<!-- Introdução à entrada e saída de dados Prof. Leônidas de Oliveira Brandão Material didático para apoio aos cursos de Introdução à Programação Direitos reservados 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/) --> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'> <meta name='keywords' content='mac0122, material, professores, leonidas de oliveira brandao'> <link rel='stylesheet' type='text/css' href='css_img_js_conf/all.css'> <link rel='stylesheet' type='text/css' href='css_img_js_conf/line_introducao_programacao.css'> <script src="css_img_js_conf/defineLInE.js"></script> <!-- para referencias 'a documentos internos --> <div class="pagina"> <p class="secao">Introdução à entrada e saída de dados</a> <!-- importancia io_simples ex_io_simples io_composto --> <a name="algoritmo"> <p class="secao">O que é um algoritmo?</p> </a> <p> 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, como é feito o processamento desses dados. Quem faz isso é um <b style="color:#0000aa">algoritmo</b>, <i>uma sequência finita de passos, que ao ser aplicado sobre um conjunto de dados (as <b>entradas</b>), deve produzir sempre as mesmas <b>saídas</b></i>. Por exemplo, o algoritmo da divisão ao ser aplicado sobre valores fixados <i>a</i> e <i>b</i>, deve produzir sempre o mesmo valor <i>d</i> (de tal forma que <i>d * b = a</i>). </p> <p> 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 (como as linguagens <i>C</i> ou <i>Python</i>). Desse modo, para este programa funcionar o <b style="color:#0000aa">usuário</b> (aquele que está executando) deve fornecer um 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>), para que o programa possa ser executado e produzir as <b style="color:#00aa00">saída</b> desejadas. </p> <p> Por exemplo, para que a implementação de um algoritmo para a divisão de dois números reais seja adequadamente executado, devem ser fornecidos os dois valores reais. Se o <i>usuário</i> digitar apenas um valor, o programa ficará parado até que ele digite o segundo valor. </p> <center><img src="img/img_computador_io.png" title="ilustracao processamento entradas x saidas"/> <br/><i>Fig. 1. Ilustração da existência de um algoritmo que aplicado sobre as entradas produz as respectivas saídas.</i> </center> <!-- https://en.wikipedia.org/wiki/Integer_%28computer_science%29 int = -32,768 to 32,767, from -(2^15) to 2^15-1 https://en.wikipedia.org/wiki/Single-precision_floating-point_format float = 32 bits IEEE 754 single-precision binary floating-point format: binary32 Sign bit: 1 bit ; Exponent width: 8 bits ; Significand precision: 24 bits (23 explicitly stored) float = 0/1 0.mantissa x 10^e 24 bits 8 --> <a name="importancia"> <p class="secao">Qual a importância da <i>entrada/leitura</i> e da <i>saída/impressão</i> de dados?</p> </a> <p> A grande importância de mecanismos para <i>entrar</i> dados (ou realizar a <i>leitura</i>), para que um programa computacional os processe, é possibilitar que determinado algoritmo implementado possa atuar sobre esses dados, produzindo resultados personalizados, no sentido de serem do interesse do usuário. Por exemplo, um usuário, que é professor, está interessado em saber quais as médias de cada um de seus alunos. 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 seus alunos. Esses são os <b style="color:#00aa00">dados de entrada</b>. </p> <p> Por outro lado, o professor precisa receber de alguma os dados que foram gerados, no exemplo, as médias de seus alunos. Então é preciso haver uma forma de apresentar os <b style="color:#00aa00">dados de saída</b>. </p> <p> Portanto, sem um mecanismo para <i>entradas</i> de dados, um algoritmo não pode ser usado (exceto se for um algoritmo que produz sempre a mesma coisa, como uma função constante). De forma análoga, sem um mecanismo <i>saída</i> dos dados de resposta, o algoritmo é inútil. </p> <a name="mecanismos"> <p class="secao">Exemplo de mecanismos para "entradas de dados" e para "saídas de dados"</p> </a> <p> Existem vários mecanismos para <i>entrada</i> e para a <i>saída</i> de dados. Um dos primeiro exemplo de <i>dispositivo para entrada de dados</i> é o <i>teclado</i>, mas existem outros, como os <i>mouses</i>. Por exemplo, se o usuário der um "clique" duplo em um ícone associado a um arquivo de texto <img src="img/icn_editor_101.png" width="30" height="30" title="ícone de arquivo para editor de texto"/>, o sistema gráfico "sabe" que deve abrir o <i>programa editor de texto</i> e, dentro dele, abrir o referido texto. Mas se o "clique" for sobre o ícone de um arquivo associado à uma planilha eletrônica <img src="img/icn_planilha_101.png" width="30" height="30" title="ícone de arquivo para planilha"/>, o sistema gráfico "sabe" que deve abrir o <i>programa planilha eletrônica</i> e, dentro dele, abrir com os dados daquele aquivo (que, por simplicidade, nos referimos como uma "planilha"). </p> <p> Quanto aos mecanismos para <i>saída</i> dos dados processados, o mais comum é a <i>tela</i> (<i>ecrã</i>). Um outro exemplo interessante de mecanismo de saída são os alto-falantes, eles podem receber dados, produzindo sons. Para um usuário que for cego, provavelmente este será o meio de saída mais usado. </p> <a name="exemplos"> <p class="secao">Exemplos de códigos em <i>C</i> e em <i>Python</i> com entradas/saídas</p> </a> <!-- ./introducao/codigos/testes/intr_entrada_saida.* --> <p> A tabela abaixo apresenta código para computar a média aritmética de valores a serem digitados pelo usuário. </p> <p> <center><i>Tab. 1. Exemplo de códigos para entrada e saída de inteiros e "reais"</i><br/> <table class="tableCd"> <tr> <td></td><td bgcolor="8aaada"><i>C</i>: média de valores</td> <td bgcolor="8aaada"><i>Python</i>: média de valores</td></tr> <tr><td><table class=""><tr class="trCd" valign="top"><td><pre> 1 2 3 4 5 6 7 8 9 10 11 12</pre></td></tr></table></td> <td><table class=""><tr class="trCd" valign="top"><td><pre style="font-size: 0.8em;">//C: computa media #include <stdio.h> void main (void) { int i, n; // declara variaveis float nota, soma = 0.0; // declara variavel para soma printf("Digite o numero de notas desse aluno: "); scanf("%d", &n); // comando para entrada via teclado for (i=0; i<; i++) { printf("Digite valor %d: ", i); scanf("%f", ¬a); soma = soma + nota; // acumule } printf("A media desse aluno e': %f\n", soma/n); } </pre></td></tr></table></td> <td><table class=""><tr class="trCd" valign="top"><td><pre style="font-size: 0.8em;"># Python: computa media def main () : soma = 0.0; # declara variavel para somar print("Digite o numero de notas desse aluno: "); n = int(input()); for i in range(n) : print("Digite valor %d: " % i); soma = soma + float(input()); # acumule print("A media desse aluno e': %f" % (soma/n)); main(); </pre></td></tr></table></td></tr> </table></center> </p> <p> Neste exemplo existem dois tipos de <i>dados para entrada</i>, um primeiro inteiro (variável <i>n</i> que será usada para 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". Note que foi necessário usar uma variável para acumular cada nota digitada, a variável <i>soma</i>. Ao final, basta apresentar como <i>dado de saída</i> a média do referido "aluno". </p> <p> <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/> <a href="http://www.ime.usp.br/~leo" target="_blank" title="seguir para a página do LInE">http://line.ime.usp.br</a> </p> <p class="rodape"> <b>Alterações</b>:<br/> 2020/08/19: pequenas correções<br/> 2020/08/07: primeira versão </p> </div>