Sobre a estrutura básica de um programa em C ou em Python

Antes de apresentar a estrutura dos programas, segue a primeira dica para um "bom código": utilizar "indentação" e comentários adequados.

1. Comentários em meio ao código e o uso adequado de "indentação".

Um comentário em meio ao código significa que é um trecho de texto que será ignorado pelo compilador (ou interpretador), ou seja, ele não tentará "traduzir" estre trecho do código para a linguagem interna da máquina.

Cada linguagem apresenta uma marca especifica para indicar comentários, geralmente oferecendo duas opçòes ao programador, comentário do tipo "ignore o restante desta linha" e comentários de "ignore todas as linhas entre estas marcas".

Geralmente as marcas para o primeiro tipo é composta por um único caractere ou por 2. Em C utiliza-se 2 carecteres '//' e em Python '#'.

Já as marcas para "comentários em várias linhas" usam o princípio matemática das chaves e parênteses, entretanto NÃO admitem encadeamento de vários! Quer dizer, uma expressão matemática como "(2 * (3+4))" é perfeitamente válida, mas nem C e nem Python permite que se use comentário dentro de comentário. Exemplifico o erro que resultaria.

Em C o "comentários em várias linhas" é iniciado com a dupla de caracteres '/*' e fechado com a dupla '*/'. Já em Pythom abre-se e fecha-se comentário com uma sequência de 3 aspas dupla '"""'. Assim, se o programador colocar em seu código Python as próximas 4 linhas

""" Teste comentarios em varias linhas 
 """ mas note que isso NAO funciona, ou seja, comentarios encaixados NAO sao permitidos!
 """
"""

Ao tentar fazer o computador interpretar seu código, receberá a seguinte mensagem de erro:

  $ python py_teste_comentario.py
    File "py_teste_comentario.py", line 4
      mas note que isso NAO funciona, ou seja, comentarios encaixados NAO sao permitidos!
      ^

A razão é que NÃO funciona o aninhamento de comentários, assim as 3 aspas da linha 2 fecha o comentário aberto na linha 1 e não abre um novo bloco de comentários.

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.

2. Uso adequado de "indentação".

Entenda-se por "indentaçào" o deslocamento horizontal de trechos de código para indicar claramente subordinação de comandos (ou aninhamento). Assim pode-se definir um padrão de deslocamento para cada aninhamento. Em geral eu utilizo 2 para que eu consiga ler mais instruções em uma mesma linha (imagine em como ficaria em seu editor um código usando 20 brancos como unidade de "indentação", a cada novo aninhamento 20 espaços...).

Por exemplo, se um comando implica na execução de 3 outros, então em uma linha colocamos o primeiro comando com seu deslocamento adequado (digamos de X colunas) e assim colocaremos seus 3 comandos subordinados, serão colocados em linhas subsequentes com X+2 brancos de deslocamento No exemplo abaixo, o comando "repita" da linha 1 tem 3 comandos subordinados, pois o comando "se" é composto das linhas 3 e 4 (mas ele poderia ter mais comandos subordinados e ainda assim, poderíamos pensar que todas suas linhas compõem um único comando).

Vejamos um exemplo com 5 linhas e 5 comandos, com algumas sobordinações, mas usaremos uma pseudo-linguagem (um "Portugol"):

Linha  Código
1      repita enquanto (cont < N)
2         imprima(cont)
3         se ("cont for par") // precisa implementar esta condicao, como "cont % 2 == 0"
4           imprima(cont)
5         incremente(cont)

Note que no código acima, os comandos "imprima(cont)" e "incremente(cont)" estão deslocados 2 espaços à direita para indicar que ambos estão sobordinados ao comando de repetição "repita enquanto (cont < N)" (repetição será explicado em outra aula). Já o comando da linha 4 está subordinado ao comando da linha 3 ("se"), por isso o uso do deslocamento adicional de 2 brancos.

3. Estrutura básica de um programa em C.

Abaixo ilustro a estrutura básica de um programa em C, 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.

/*
 O programa abaixo serve apenas para ilustrar a estrutura basica de um programa em C.
 Neste primeiro exemplo existe:
 - carga do 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)
*/

#include  // coloque esta linha em TODOS seus programas C (a mesno que ele NAO tenha nem entrada, nem saidas!)
int main (void) {  // obrigatorio em todo programa C (noutra aulas explicamos por que usar "void" aqui)
  int n1, n2;               // declarando o uso de 2 variaves para armazenar apenas valores inteiros
  scanf("%d %d", &n1, &n2); // leia 2 valores inteiros, guarde o primeiro em n1 e o outro em n2 (depois veremos '%d' e o '&')
  printf("%d\n", n1+n2);    // imprima um unico valor (soma dos valores guardados em n1 e em n2)
  }

4. Estrutura básica de um programa em Python.

Abaixo ilustro a estrutura básica de um programa em Python, utilizando indentação que deixa o código mais claro e é obrigatorio em Python. Convencionaremos desde o primeiro código em Python, agrupar os comandos sob uma função que logo após sua declaração será invocada.

"""
 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
     resultaria na seguinte impressao na tela
         2 + 3 = 5
     automaticamente, a proxima impressao sera' iniciada na linha seguinte (deferente do 'printf' do C).
"""
def main(): # Pode usar outro nome que nao "main", mas convencionaremos "main"
  num1 = int(input())
  num2 = int(input())
  print(num1+num2)
# note que nesta linha suprimi a indentacao => final da funcao "main"
main()