<!-- Introdução à Programação - 2017 - Prof. Leoônidas de Oliveira Brandão Introdução à impressão de inteiros em mesma linha LInE (Laboratory of Informatics in Education) - http://www.usp.br/line IME - USP Material didático Pode usar livrevemente este material para fins não comerciais, devendo sempre fazer referência à autoria. Sugestões/apontamento são bem vindos: leo@ime.usp.br (favor indicar no assunto "material de introducao 'a programacao") Prof. Leônidas de Oliveira Brandão http://www.ime.usp.br/~leo http://line.ime.usp.br http://www.matemtica.br --> <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'> <div class="pagina"> <span style="color: #0055AA"><b>Introdução à impressão de inteiros em mesma linha</b></span> <!-- p> <b>Alterações</b>: - . </p --> <p> Nesta seção apresentaremos algumas dicas sobre como imprimir em mesma linha usando diferentes comandos de impressão. Também mostraremos como ajustar impressóes de inteiros "automaticamente" à direita (útil para imprimir tabelas). Faremos isso separando mas duas seções seguintes, um para <a href="#c" title="ir direto para codigos em C"><i>C</i></a> e outra para <a href="#python" title="ir direto para codigos em Python"><i>Python</i></a>. </p> <a name="c"> <hr/> <span style="color: #0055AA">Impressão de frases e inteiros em <i>C</i></span> </a> <p> O comando para impressão em <i>C</i> é o <tt>printf</tt> e para ele funcionar você precisa carregar uma biblioteca de <i>cabeçalhos</i>, isso deve ser feitos nas primeiras linhas de seu código com a seguinte linha: <pre><tt class="cmd">#include</tt> <tt class="head"><stdlib.h></tt> </pre> Deve-se obrigatoriamente digitar como acima, o <tt>#include</tt> é uma diretiva para incluir as definições que são encontradas no arquivo de nome <tt>stdlib.h</tt> (ele encontra-se na diretório de seu compilador <i>C</i>). </p> <p> A função pré-definida da linguagem <i>C</i> para <b>impressões</b> (saída de dados) é o <tt class="cmd">printf</tt>. O que se deseja imprimir deve estar entre aspas e eventuais variáveis devem estar após esse primeiro <b>parâmetro</b>, após uma vírgula, daí pode vir uma lista de variáveis, cada uma deverá ter um <b>formatador</b> correspondente no primeiro parâmetro. No exemplo abaixo, existe um código <i>C</i> completo para ilustrar a sintaxe. </p> <p> <b>Exemplo 1 [<i>C</i>]</b>: ler 1 valor inteiro e imprimir esse valor. <pre><tt class="cmd">#include</tt> <tt class="head"><stdlib.h></tt> <tt class="">int main (void) {</tt> <tt class="com">// declaracao da funcao principal - comeca a rodar aqui!</tt> <tt class="tipo">int</tt> <tt class="var">n</tt>; <tt class="cmd">printf("Digite um valor inteiro: ");</tt> <tt class="com">// imprime mensagem (e NAO muda de linha)</tt> <tt class="cmd">scanf("%d", &n);</tt> <tt class="com">// 'scanf' e' funcao para entrada de dados, cuja definicao tambem esta no 'stdio.h'</tt> <tt class="cmd">printf("Atencao!\nValor digitado = %d\n", n);</tt> <tt class="com">// imprime "Atencao", quebra a linha, depois o valor digitado e "quebre" a linha</tt> }</pre> </p> <p> No exemplo acima deve-se notar que o formatador <tt class="tipo">%d</tt> serve para indicar ao compilador <i>C</i> que deve produzir instruções para pegar o valor a ser digitado como um inteiro. Esse código executável fica incumbido de agrupar os <i>bytes</i> digitados para formar o inteiro correspondente. Geralmente se o usuário usar um espaço em branco, esse delimitará o final do inteiro, por exemplo, se ele digitar <tt class="tipo">1032 320</tt> (seguido de <tt class="var">ENTER</tt>) então a variável <tt class="var">n</tt> receberá o valor <tt class="var">1032</tt>, sendo o <tt class="var">320</tt> ignorado (ou usado como entrada de um <tt class="cmd">scanf</tt> seguinte, se existisse no código). </p> <p> No exemplo abaixo ilustramos como imprimir uma tabela com o valor digitado e o seu quadrado. Note o uso de um inteiro entre o símbolo <tt class="cmd">%</tt> e a letra <tt class="cmd">d</tt>, ele é usado para indicar quantas colunas devem seu usadas para o inteiro, no exemplo usamos <tt class="cmd">%5d</tt> e <tt class="cmd">%6d</tt>, logo o primeiro manda ajudar cinco (5) casas à direita e segundo seis casas. Atenção: se o inteiro tiver mais dígitos que o valor (5 ou 6), o ajuste à direita será <b>sem efeito</b>. </p> <p> <b>Exemplo 2 [<i>C</i>]</b>: ler valores inteiros (não nulos) e imprimir esse valor e o seu quadrado. <pre><tt class="cmd">#include</tt> <tt class="head"><stdlib.h></tt> <tt class="">int main (void) {</tt> <tt class="tipo">int</tt> <tt class="var">n</tt> = 1; <tt class="cmd">while</tt> (n!=0) { <tt class="com">// enquanto nao digitar 0, continue...</tt> <tt class="cmd">scanf("%d", &n);</tt> <tt class="cmd">printf("%5d :: %6d\n", n, n*n);</tt> <tt class="com">// imprime primiro valor ajustado `a direita 5 casas, o segundo 6 casas</tt> } }</pre> </p> <p> Em resumo, na linguagem <i>C</i> é muito simples fazer ou não quebras de linhas em comandos consecutivos: para quebrar uma linha deve usar o caractere especial <b><tt class="com">\n</tt></b>. Ou seja, se usar o comando <tt class="cmd">printf</tt> sem qualquer <tt class="com">\n</tt>, não haverá "quebra" de linha, todas impressões seguirão em uma mesma linha. </p> <br/> <a name="python"> <hr/> <span style="color: #0055AA">Impressão de frases e inteiros em <i>Python</i></span> </a> <p> Na linguagem <i>Python</i> a cada impressão deve existir uma "quebra" de linha, exceto se o programador usar um parâmetro adicional <tt class="com">end=""</tt> dentro do comando de impressão. Entretanto, se o seu interpretador <i>Python</i> for da versão <b>2</b>, para esse parâmetro funcionar, será necessário uma linha inicial em seu código: <tt class="cmd">from __future__ import print_function</tt>. Essa linha permite a carga de uma biblioteca especial para impressão. Se estiver usando o <i>Python</i> for da versão <b>3</b> isso não é necessário, mas o interpretador não reclamará do uso da diretiva de inclusão, coloque sempre essa linha e não receberá advertência de erros! </p> <p> O exemplo abaixo apresentamos um código que solicita que o usuário digite um valor, a ser interpretado como inteiro e imprime uma mensagem em duas linhas, na primeira um <tt class="var">Atencao!</tt>, "quebra" a linha (ou seja, pula para uma próxima linha) e na seguinte imprime o valor digitado (com uma mensagem auxiliar). </p> <p> <b>Exemplo 1 [<i>Python</i>]</b>: ler 1 valor inteiro e imprimir esse valor. <pre><tt class="cmd">from __future__ import print_function</tt> <tt class="com"># Obrigatorio para Python 2 para 'print' sem pular linha</tt> <tt class="cmd">def</tt> main () :</tt> <tt class="com"># define uma funcao de nome "main"</tt> <tt class="cmd">print("Digite um valor inteiro: ", end="");</tt> <tt class="com"># imprime mensagem (e NAO muda de linha)</tt> <tt class="var">n</tt> = <tt class="cmd">int(input());</tt> <tt class="com"># 'input' permite pegar o que foi digitado e a funcao 'int' interpreta os bytes para inteiro</tt> <tt class="cmd">print("Atencao!\nValor digitado = %d\n" % n);</tt> <tt class="com"># imprime "Atencao", quebra a linha e depois o valor digitado</tt> <tt class="com"># As linhas abaixo fazem a mesma coisa usando outra sintaxe, mas atencao pode imprimir com apostrofes! ('Atencao!')</tt> <tt class="cmd">print("Atencao!");</tt> <tt class="cmd">print("Valor digitado = ", n);</tt> <tt class="com"># note que por nao usarmos o formatador %d NAO precisou do '%', mas de um separador ','!!!</tt> main(); <tt class="com"># comeca aqui (chama a funcao de nome 'main')</tt></pre> </p> <p> No exemplo abaixo ilustramos como imprimir uma tabela com o valor digitado e o seu quadrado. Note o uso de um inteiro entre o símbolo <tt class="cmd">%</tt> e a letra <tt class="cmd">d</tt>, ele é usado para indicar quantas colunas devem seu usadas para o inteiro, no exemplo usamos <tt class="cmd">%5d</tt> e <tt class="cmd">%6d</tt>, logo o primeiro manda ajudar cinco (5) casas à direita e segundo seis casas. Atenção: se o inteiro tiver mais dígitos que o valor (5 ou 6), o ajuste à direita será <b>sem efeito</b>. </p> <p> <b>Exemplo 2 [<i>Python</i>]</b>: ler valores inteiros (não nulos) e imprimir esse valor e o seu quadrado. <pre><tt class="cmd">from __future__ import print_function</tt> <tt class="com"># Obrigatorio para Python 2 para 'print' sem pular linha</tt> <tt class="">def main () :</tt> <tt class="var">n</tt> = 1; <tt class="cmd">while</tt> (n!=0) : <tt class="com"># enquanto nao digitar 0, continue...</tt> <tt class="var">n</tt> = <tt class="cmd">int(input());</tt> <tt class="cmd">print("%5d :: %6d\n" % (n, n*n));</tt> <tt class="com">// imprime primiro valor ajustado `a direita 5 casas, o segundo 6 casas</tt> main();</pre> </p> <p> Atenção a um "detalhe" do comando de impressão no <i>Python</i>, para usar a impressão de vários valores (sem o "risco" de aparecer apóstrofes) deve-se usar os formatadores (<tt class="cmd">%d</tt> para inteiros), como como temos mais que um, é necessário o separador <tt class="var">%</tt> e usar os valores como uma lista (<tt class="cmd">(n, n*n))</tt>. Sem isso, imprimiria "estranho" (experimente usar a forma <tt class="cmd">print("%5d :: %6d\n", n, n*n);</tt>). </p> <p> Em resumo, na linguagem <i>Python</i> sempre que usar o comando <tt class="com">print</tt> sem o parâmetro <tt class="com">, end=""</tt>, a próxima impressão sairá na linha seguinte (com "quebra"). </p> <p class="autoria"> <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/21: novo formato<br/> 2019/03/25: versão inicial </p> </div>