Guia do calouro para programação competitiva - Introdução a programação (básico do básico)

calouros 11 de Nov de 2020

Eae calouros.

Certa vez, o membro @igor, do BRUTE, fez um guia desse tipo para vocês, mas além de ser pouco utilizado, o que é uma pena pois é um bom guia, ele contém uma linguagem pouco amigável pois faz uso de alguns termos mais técnicos.
Eu até entendo que a maioria dos termos utilizados em programação competitiva e no ambiente da Ciência da Computação estão em inglês, mas para quem está iniciando não é tão necessário saber de cara o que os termos significam, pois todos estão aqui pra aprender (em teoria).

Obs: se você ainda não sabe inglês, tente aprender, não vou dar muita colher de chá além dessa postagem.

Pois bem, vamos começar já que eu só estou falando de coisas idiotas ali em cima tentando justificar o porque dessa postagem, parece até que estou escrevendo um artigo científico.

Nesse primeiro momento me dirijo às pessoas que não possuem conhecimento algum de programação. É, se você já sabe o que é uma variável e como usar as operações matemáticas, não tem porque continuar lendo, pode ir fazer qualquer outra coisa, tipo os seus trabalhos atrasados, estudar para aquela prova que vai acontecer amanhã, ou, se tiver bem desocupado, pode ir resolver alguns problemas no URI ou no codeforces (talvez até ler o CP3).

Ahh, talvez quem tenha permissão de criar posts aqui e esta aqui lendo isso, poderia dedicar algum tempo para criar mais postagens, estamos precisando de material no site.

Mas vamos lá, se você é do público-alvo dessa postagem, não precisa se preocupar caso não tenha entendido tudo que está escrito nesse último parágrafo. Você vai entender em algum momento, até mesmo a questão dos trabalhos atrasados.

A primeira coisa que temos que conversar, é sobre o que é um algoritmo. Brincadeira, isso vocês aprendem na matéria de algoritmo, pois infelizmente não tenho tempo para abordar isso aqui, senão seria impossível ler essa postagem sem uma boa dose de café (mas certamente eu gostaria de passar horas falando sobre o que é um algoritmo).

Vou abordar tudo da forma mais direta que conseguir, ou pelo menos tentar.

Começando (de verdade dessa vez), o que são variáveis? Você pode estar se perguntando agora, mas como o nome diz, variáveis são valores que variam, ou seja, variáveis são valores que o programa armazena na memória do computador e que serão utilizados para executar o conjunto de instruções. As variáveis podem armazenar diferentes tipos de valores, como números inteiros (1, 2, 3), números reais (1.1, 1.2, 1.3), caracteres ('a', 'b', 'c') e valores lógicos (Verdadeiro ou Falso). Nesse primeiro momento, vamos nos ater apenas aos números inteiros. Números reais, caracteres e valores lógicos vão ficar mais pra frente, se eu tiver vontade de escrever mais postagens e continuar esse guia.

Falando sobre código agora, vamos ver como podemos falar para o computador criar uma variável. Espera, eu falei qual linguagem íamos usar, como iríamos fazer? Ahh, acho que esqueci. Bom, durante esse guia irei explicar usando Python como linguagem, e como plataforma recomendo usar o Repl. Faça seu cadastro no site, e, se quiser, já crie um novo repl Python.

Assim que o novo repl for criado, você já pode começar a programar. Vamos começar criando algumas variáveis.

Mas antes de criar essas variáveis, vamos falar sobre o programa em Python. Ele contém as instruções linha a linha, sem a necessidade de usar ponto e vírgula como você verá na disciplina de algoritmo quando for escrever um programa em C. Nesse caso, o seu programa se parecerá com:

instrução 1
instrução 2
...
instrução n

Ah, outra coisa que preciso citar, é que não recomendo o uso de caracteres especiais, como (ç, ~, ´, `, ^). Evite usar esses caracteres se quiser evitar possíveis erros.

Certo, agora que sabemos como o nosso programa será estruturado, vamos declarar a primeira variável, $a$, e atribuir a ela o valor $5$. Em Python, basta escrevermos a = 5. Dessa forma, estamos informando ao programa que a variável $a$ receberá o valor $5$. Agora, crie você mesmo uma variável $b$ com valor $10$.

Em programação, podemos realizar as mesmas operações matemáticas que usamos normalmente: adição ($+$), subtração ($-$), multiplicação ($*$) e divisão ($/$). Sendo assim, vamos criar uma terceira variável, $c$, e inserir nela o valor de $a + b$. Para isso, da mesma forma que criamos as variáveis $a$ e $b$, precisamos fazer c = a+b. Podemos também usar essas operações com números diretamente, assim como podemos misturar números e variáveis numa mesma atribuição, podendo usar a mesma variável em que estamos atribuindo valores, bem como podemos atribuir um valor a uma variável várias vezes. Confuso? Bem, vou colocar aqui alguns exemplos para tentar explicar melhor, mostrando aproximadamente o que o computador está fazendo com as variáveis:

a = 5 (a = 5)
b = 10 (a = 5, b = 10)
c = a+b (a = 5, b = 10, c = 15)
a = 6+c+a (a = 26, b = 10, c = 15)

Perceba que eu só inseri o valor das variáveis a partir do momento em que eu disse ao programa que eu estava usando elas pela primeira vez. Fiz isso porque é justamente assim que o computador processa as variáveis. Pois bem, agora que já sabemos como usar variáveis, e como alterar o valor delas, além de sabermos usar as operações matemáticas básicas, vamos ver como podemos pedir para o computador nos informar qual valor está armazenado na variável. Para isso, precisamos pedir que o programa nos imprima uma saída. Para tal, precisamos utilizar o comando print, da seguinte forma: print(a). Assim sendo, o programa vai imprimir o resultado contido na variável $a$, que é igual a $26$. Também podemos pedir para que o programa imprima outras coisas, como palavras e números, bem como uma junção dessas coisas diferentes. Aí vão alguns exemplos:

print('Hello World')
print(10)
print(10.5)
print('O valor da varíavel a eh ' + str(a))

Perceba que para imprimir o valor da variável $a$ junto com a frase, eu precisei usar o comando str. Esse comando será explicado mais pra frente, quando (e se) eu falar sobre conversões de tipos. Por enquanto, se contente em usar str sempre que você for imprimir um conjunto de palavras junto com uma variável. Outra coisa, percebeu que as palavras estão entre aspas simples? Pois é, para imprimir palavras, é preciso indicar ao programa que estamos nos referindo a palavras, e não a variáveis. Por isso, sempre que quiser escrever qualquer coisa na tela, e isso não for uma variável, é preciso pôr entre aspas simples (ou duplas).

Bom, já temos variáveis, conseguimos atribuir valores a essas variáveis, conseguimos fazer operações matemáticas e conseguimos imprimir coisas na tela. Parece bom para você? Não está sentindo falta de nada? Pois bem, não concorda que é chato ter que ficar trocando os valores das variáveis no código sempre que quiser testar a equação com um valor diferente? Sim, isso é possível de ser contornado, pois podemos fazer o programa pedir a entrada de valores para a pessoa que está executando o código e, ainda por cima, podemos atribuir esses valores às variáveis. Para pegarmos a entrada, devemos utilizar o comando input. Assim como no comando print, usamos o comando str, aqui teremos que usar conversões também, mesmo sem saber direito o que elas fazem (ainda). Para nosso exemplo em que trabalhamos com números inteiros, vamos usar o comando int. Aqui vai o código de exemplo:

a = int(input())
b = int(input())
c = a+b
a = 6+c+a
print(a)

Certo, acredito que eu tenha conseguido passar o básico nesse guia. Espera, você ainda não viu nada funcionando, mil perdões, minha memória deve estar cheia, pois não estou conseguindo gravar tudo que preciso fazer. Então, para executar o código no Repl, basta apertar no botão Run, informar os valores, e esperar ele gerar o resultado após isso.

Agora, você já deve estar conseguindo fazer o básico do básico de programação. Mas isso tudo em apenas uma linguagem ainda. Com o passar do tempo, você deve adquirir conhecimento em outras linguagens e saber quando usar cada uma, mas no início será normal entrar em discussões sobre Java, C++ ou Python ser melhor com seus colegas de turma. Mas não pare por aqui não, programação competitiva é muito além disso que eu passei aqui. Na verdade, é preciso praticar (coisa que eu raramente faço), e nada melhor para praticar do que aprender como praticar. Se quiser ser introduzido à programação competitiva de fato, vou recomendar aquele artigo que eu falei no início dessa postagem.

Bom, se você tiver alguma dúvida após ler isso, pode entrar no nosso grupo do Telegram, e fazer sua pergunta lá. Caso você seja uma pessoa muito tímida para entrar em um grupo de várias pessoas e mandar sua dúvida, pode também mandar um email para bruteudesc@gmail.com, mas não deixe de entrar no grupo do Telegram.

João Vitor Fröhlich

Membro | Participou de uma Summer School | Buscando ser roxo no codeforces | Prefere fazer exames finais a trabalhos durante o semestre