<!-- Introducao 'a Programacao - desde 2017 - Prof. Leo^nidas de Oliveira Branda~o Sobre a estrutura basica de um programa em C ou em Python LInE (Laboratory of Informatics in Education) - http://www.usp.br/line IME - USP Material didatico Pode usar livrevemente este material para fins nao comerciais, devendo sempre fazer referencia `a autoria. Sugestões/apontamento são bem vindos: leo@ime.usp.br (favor indicar no assunto "material de introducao 'a programacao") Autor: Prof. Leo^nidas de Oliveira Branda~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"> <!-- <center><p>[ <a href="#" title=""></a> | <a href="#memoria" title=""></a> ]</p> </center> --> <p class="secao">Sobre a estrutura básica de um programa em <i>C</i> ou em <i>Python</i> </p> <p> Antes de apresentar a estrutura dos programas, segue a primeira dica para um "bom código": utilizar "indentação" e comentários adequados. </p> <p class="secao">1. Comentários em meio ao código e o uso adequado de "indentação".</p> <p> Toda linguagem de programação apresenta o conceito de <b style="color:#0000aa">comentário</b>, que serve para indicar ao compilador (<i>C</i>) ou ao interpretador (<i>Python</i>) que o texto em <i>comentário</i> <b style="color:#aa0000">não</b> deve ser <i>compilado</i> ou <i>interpretado</i>, respectivamente. </p> <p> Geralmente a linguagem oferece dois modos para comentários, um para <i>comentar apenas o trecho final de uma linha</i> e outro para <i>comentar várias linhas</i>. Os comentário do primeiro tipo em <i>C</i> e em <i>Python</i> usem os símbolos <tt><cyan>// ignore o restante desta linha</cyan></tt> e <tt><cyan># ignore o restante desta linha</cyan></tt>, respectivamente. <br/> Já os comentários maiores, que sugiro usar <b>apenas</b> nas primeiras linhas de seu código (assim, se houve necessidade de comentar um bloco código poderá fazê-lo, pois <b style="color:#aa0000">não</b> funcionar comentário dentro de comentário), em em <i>C</i> e em <i>Python</i> são respectivamente: <br/> <tt><cyan>/* Ignore todas as linhas entre estas marcas ... */</cyan></tt> <br/> <tt><cyan>""" Ignore todas as linhas entre estas marcas ... """</cyan></tt> </p> <p> Vale a pena ressaltar a impossibilidade "comentários dentro de comentário" comparando com o princípio matemática das chaves e parênteses. Quer dizer, uma expressão matemática permite "parênteses dentro de parênteses", como em "<tt>(2 * (3+4))</tt>", mas nem <i>C</i> e nem <i>Python</i> permite que se use comentário dentro de comentário. Exemplifico o erro que resultaria. </p> <p class="subsecao">1.1 Comentários dentro de comentário <b style="color:#aa0000">não</b> é possível em <i>Python</i>.</p> <p> Em <i>Python</i> o "comentários em várias linhas" é iniciado com e fechado com a sequência de 3 aspas dupla '<tt>"""</tt>'. Assim, se o programador colocar em seu código <i>Python</i> as próximas 4 linhas: </p> <!-- " --> <p><center><!-- codigos/introducao_estrutura_bas.py --> <pre style="text-align:left" title="Ilustração de um terminal com as saídas para o código 1"> <pre><cyan>""" Esta e' uma tentativa de colocar comentario dentro de comentario, mas NAO funciona! """ Ao encontrar o proximo fecha, ele correspondera' ao primeiro abre, """</cyan> logo esta linha NAO mais sera' comentario resultando erro de compilacao! Assim, comentarios encaixados NAO sao permitidos! """</pre><i>Cód. 1. Código ilustrando o erro ao supor que existe comentários aninhados em <i>Python</i>.</i> </center></p> <p> Ao tentar fazer o computador interpretar o código acima, o interpretador indicará o erro, como indicado na figura 1. Experimente em seu interpretador. </p> <p><center> <div class="imgTermTopo"> <pre style="text-align:left" title="Ilustração de um terminal com as saídas para o código 1"> $ python py_teste_comentario.py File "py_teste_comentario.py", line 4 """ Ao encontrar o proximo fecha, ele correspondera' ao primeiro abre, """ ^</pre> </div> <i>Fig. 1. Ilustração do erro ao supor que existe comentários aninhados em <i>Python</i>.</i> </center></p> <p> A razão é que o <b style="color:#0000aa">aninhamento</b> de comentários <b style="color:#aa0000">não</b> existe na configuração padrão <i>Python</i>, assim as 3 aspas da linha 2 fecha o comentário aberto na linha 1, ou seja, <b style="color:#0000aa">não</b> abre um novo bloco de comentários. </p> <p> Por esta razão recomendo que em seus programas utilize comentários em várias linhas apenas no início do programa (para por exemplo, identificar-se e explicá-lo). Deste modo, fica fácil isolar um bloco grande de seu código (como comentário), o que é útil para encontrar erros de sintaxe (mais simples) ou de semântica. </p> <p class="subsecao">1.2 Comentários dentro de comentário <b style="color:#aa0000">não</b> é possível em <i>C</i>.</p> <p> Em <i>C</i> o "comentários em várias linhas" é iniciado com a dupla de caracteres '<tt>/*</tt>' e fechado com a dupla '<tt>*/</tt>'. Assim, se o programador colocar em seu código <i>C</i> as próximas 4 linhas </p> <!-- --> <p><center><!-- codigos/introducao_estrutura_bas.c --> <pre style="text-align:left" title="Ilustração de um terminal com as saídas para o código 1"> <pre><cyan>/* Esta e' uma tentativa de colocar comentario dentro de comentario, mas NAO funciona! /* Ao encontrar o proximo fecha, ele correspondera' ao primeiro abre, */</cyan> logo esta linha NAO mais sera' comentario resultando erro de compilacao! Assim, comentarios encaixados NAO sao permitidos! */</pre><i>Cód. 2. Código ilustrando o erro ao supor que existe comentários aninhados em <i>C</i>.</i> </center></p> <p> Ao tentar fazer o computador interpretar o código acima, o interpretador indicará o erro, como indicado na figura 2. Experimente em seu compilador. </p> <p><center> <div class="imgTermTopo"> <pre style="text-align:left" title="Ilustração de um terminal com as saídas para o código 2"> $ gcc -o introducao_estrutura_bas.o introducao_estrutura_bas.c introducao_estrutura_bas.c:7:2: error: unknown type name ‘logo’ logo esta linha NAO mais sera' comentario resultando erro de compilacao! ^</pre> </div> <i>Fig. 2. Ilustração do erro ao supor que existe comentários aninhados em <i>Python</i>.</i> </center></p> <p> A razão é que o <b style="color:#0000aa">aninhamento</b> de comentários <b style="color:#aa0000">não</b> existe na configuração padrão <i>Python</i>, assim as 3 aspas da linha 2 fecha o comentário aberto na linha 1, ou seja, <b style="color:#0000aa">não</b> abre um novo bloco de comentários. </p> <p> Por esta razão recomendo que em seus programas utilize comentários em várias linhas apenas no início do programa (para por exemplo, identificar-se e explicá-lo). Deste modo, fica fácil isolar um bloco grande de seu código (como comentário), o que é útil para encontrar erros de sintaxe (mais simples) ou de semântica. </p> <p class="secao">2. Uso adequado de "indentação".</p> <p> Entenda-se por <b style="color:#0000aa">"indentação"</b> o deslocamento horizontal de trechos de código, o que é usado para indicar claramente uma subordinação de comandos (ou <b style="color:#0000aa">aninhamento</b>). Por exemplo, se um comando de seleção "<tt>se</tt>" tiver dois comandos subordinados à ele, pode-se usar 2 espaços em branco a mais nesses comandos subordinados. Veja este exemplo uma linguagem semelhante ao Português: <pre> se (x>0)<br/> S = S+1;<br/> imprima(S);</pre> Para evitar que meus códigos fiquem muito "longos" (não cabendo uma linha inteira na tela), eu utilizo apenas 2 espaços para indicar subordinação (como no extrato de código acima). </p> <p> Assim, se determinado comando começa na coluna <i>X</i> ("indentação" de <i>X</i> espaços), então todos os comandos subordinados a ele terão deslocamento de ao menos <i>X+2</i> espaços em branco. Digo "ao menos", pois dentre estes comandos pode existir outras subordinações. Isso é ilustrado no exemplo abaixo, no qual os comandos das linhas 2 até 5 estão subordinados ao "<tt>repita enquanto</tt>", tendo portanto deslocamento <i>X+2</i> ou mais espaços, mas o comando "<tt>imprima</tt>" da linha 4 tem deslocamento <i>X+4</i>, pois ele está subordinado ao "<tt>se</tt>" que já tinha deslocamento <i>X+2</i>. </p> <p> A seguir um exemplo com mais linhas e mais subordinações. Nele será usado uma linguagem parecida com o Português, que por isso pode ser denominada <b style="color:#0000aa">Portugol</b>: </p> <pre>Linha Código 1 repita enquanto (cont < N) 2 imprima(cont) 3 se ("cont for par") <cyan>// precisa implementar esta condicao, como "cont % 2 == 0"</cyan> 4 imprima(cont) 5 incremente(cont)</pre> <p> Note que no código acima, os comandos "<tt>imprima(cont)</tt>" e "<tt>incremente(cont)</tt>" estão deslocados 2 espaços à direita para indicar que ambos estão sobordinados ao comando de repetição "<tt>repita enquanto (cont < N)</tt>" (repetição será explicado em outra aula). Já o comando da linha 4 está subordinado ao comando da linha 3 ("<tt>se</tt>"), por isso o uso do deslocamento adicional de dois espaços em branco. </p> <p class="secao">3. Estrutura básica de um programa em <i>C</i>.</p> <p> Abaixo ilustro a estrutura básica de um programa em <i>C</i>, utilizando indentação para deixar o código mais claro, o que é importante para você detectar problemas em seu código e essencial para receber uma boa nota por parte do monitor que analisará seu programa. </p> <pre style="font-size:0.8em;"><cyan>/* O programa abaixo serve apenas para ilustrar a estrutura basica de um programa em <i>C</i>. Neste primeiro exemplo existe: - Carrega o cabecalho para os comandos (ou funcoes) para entrada e saida de dados: biblioteca "stdio.h" - Definicao do codigo principal (por onde devera ser iniciada a execucao de seu codigo): funcao "main" - Comandos para leitura e para saida de dados: respectivamente, "scanf" e "printf" * Para declarar 2 variaveis que armazenarao valores inteiros, utilizar o "int" como abaixo * Para ler valores (usuario digita) e armazenar na variavel usando a funcao predefinida "scanf" * O "scanf" deve sempre 2 grupos, o primeiro entre aspas e o segundo uma lista de variaveis precedias do '&' dentro das aspas, '%d' indica que o valor lido sera' tratado como inteiro na lista de variaveis, o uso de '&' e' obrigatorio para conseguir guardar o valor lido corretamente na variavel (experimente eliminar um dos '&' no programa abaixo e veja o que ocorre) * O "printf" adota a mesma estrutura do "scanf" com os 2 blocos, mas nele NAO usar o '&' antes da variavel, senao sera' impresso o endereco de memoria da variavel, nao o valor que ela guarda) O '\n' e' serve para que, apos imprimir "n1+n2", "pular" de linha (ou seja, proxima impressao inicia-se na seguinte) * Os formatadores (como '%d') serao explicados noutra aula, eles podem ser usados para imprimir tabelas */</cyan> <incl1>#include</incl1> <stdio.h> <cyan>// coloque esta linha em TODOS seus programas <i>C</i> (a mesno que ele NAO tenha nem entrada, nem saidas!)</cyan> <verm>int</verm> main (<verm>void</verm>) { <cyan>// obrigatorio em todo programa <i>C</i> (noutra aula explicamos por que usar "void" aqui)</cyan> <verm>int</verm> n1, n2; <cyan>// declarando o uso de 2 variaves para armazenar apenas valores inteiros</cyan> <verd>scanf</verd>("%d %d", &n1, &n2); <cyan>// leia 2 valores inteiros, guarde o primeiro em n1 e o outro em n2 (depois veremos '%d' e o '&')</cyan> <verd>printf</verd>("%d\n", n1+n2); <cyan>// imprima um unico valor (soma dos valores guardados em n1 e em n2)</cyan> }</stdio.h></pre> <p class="secao">4. Estrutura básica de um programa em <i>Python</i>.</p> <p> Abaixo ilustro a estrutura básica de um programa em <i>Python</i>, utilizando indentação que deixa o código mais claro e é <b style="color:#00aa00">obrigatório</b> em <i>Python</i>. <br/> Para tentar, desde cedo, indicar aos aprendizes de programação em <i>Python</i> que procurem organizar seus código, sugerimos usar sempre uma função principal, que nominaremos como <tt style="color:#00aa00">main</tt>. Sugerimos que sempre que implementar uma função, faça isso no início de seu código, deixando qualquer declaração de função antes (acima) do trecho que a invoque. </p> <pre style="font-size:0.8em;"><cyan>"""<!-- " --> O programa abaixo serve apenas para ilustrar a estrutura basica de um programa em Python. Neste primeiro exemplo existe: - Definicao de uma funcao de nome "main": nao e' obrigatorio em Python, mas usaremos desta forma - Comandos para leitura e para saida de dados: respectivamente, "input" e "print" * Para declarar 2 variaveis que armazenarao valores inteiros, utilizar o "int" como abaixo * Para ler valores (usuario digita) e armazenar na variavel usando a funcao predefinida "input" * O "input" pode ter um argumento que e' uma mensagem (como 'input("Digite: ")'), mas nao usaremos devido ao avaliador automatico (voce nao vera as mensagens e elas poderiam provocar erro na avaliacao) * A funcao "int(...)" deve ter como parametro uma expressao numerica, devolvendo a parte inteira dela por exemplo, 'int(3.5+2)' devolvera' o valor inteiro 5 * O "print" serve para imprimir respostas e pode ter como parametros um sequencia de "frase" e expressoes, por exemplo, supondo que as variaveis num1 e num2 guardem 2 e 3, o comando print(num1,"+", num2, "=", num1+num2); No Python 3 resultaria na seguinte impressao na tela 2 + 3 = 5 Mas no Python 2, resultaria em uma impressao "menos" elegante (2, '+', 3, '=', 5) * Existe um modo de impressao mais poderoso, que funciona da mesma forma tanto no Python 2 quanto no 3,: print("%d + %d = %d" % (num1,num2,(num1+num2))); que sempre resulta na primeira forma acima: 2 + 3 = 5 Em outra aula sera' explicado o uso de formatadores (como o '%d') para construcao de tabelas. """</cyan><!-- " --> <verm>def</verm> main () : <cyan># Pode usar outro nome que nao "main", mas convencionaremos "main"</cyan> num1 = int(<verd>input</verd>()) num2 = int(<verd>input</verd>()) <verd>print</verd>(num1+num2) <cyan># note a indentacao dessa linha => NAO pertence ao bloco de comandos da funcao "main"</cyan> main()</pre> <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/19: várias pequenas correções, nova seção 1.2 para <i>C</i> (existia uma correspondente apenas para <i>Python</i>)<br/> 2020/08/14: novo formato, pequenas revisões<br/> 2020/03/31: detalhes<br/> 2017/08/08: pesquenos acertos<br/> 2017/03/20: segunda, 20 Mar 2017, 17:02<br/> </p> </div>