123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- <!--
- 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>
|