Introdução à Programação em C++
Aula 1 - Introdução a C++

Lucas S. Vieira


Universidade Federal dos Vales do Jequitinhonha e Mucuri
Novembro de 2019

Usando a IDE Code::Blocks

Instalação

Linux

Debian:

sudo apt install build-essential codeblocks

Red Hat:

sudo dnf install gcc-c++ codeblocks

Arch:

sudo pacman -S gcc codeblocks

Windows

  1. Acessar https://codeblocks.org;
  2. Downloads > Download the binary release;
  3. Baixar codeblocks-17.12mingw-setup.exe.

Sobre compiladores

  • IDEs não são compiladores!
  • Você poderá usar outro editor de texto de sua preferência durante o curso.

Interface do Code::Blocks

Criando um projeto

  1. Menu File > Project;
  2. Selecionar Console application e clicar em Go;
  3. Next;
  4. Selecionar C++, clicar em Next;
  5. Colocar o nome do projeto em Project Title, escolher a pasta para o projeto, clicar em Next;
  6. Selecionar GNU GCC Compiler e clicar em Finish.

Usando o console do Linux

Navegação

  • pwd: Diretório atual
  • ls: Mostra arquivos de um diretório
  • cd: Vai para um diretório
  • touch: cria um arquivo vazio
  • rm: Remove um arquivo
  • rm -r: Remove uma pasta

Compilando pelo console

Criando arquivo de objeto

g++ -c main.cpp -o main.o
  • Por que criar um arquivo de objeto?

Criando o executável

g++ main.o -o meu_programa

Criando o executável diretamente

g++ main.cpp -o meu_programa

Flags

  • -o: Para informar o nome de saída do programa
  • -c: Para criar um arquivo de objeto
  • -g: Para gerar símbolos de debug
  • -Wall: Para mostrar todos os avisos na compilação

Executando o programa

./meu_programa

O programa 'Hello World'

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

Para os próximos exemplos, considere que o código será executado dentro da função principal.

Variáveis

Tipos primitivos

  • int: Números inteiros;
  • float: Números reais, precisão simples;
  • double: Números reais, precisão dupla;
  • char: Caracteres;
  • bool: Valores booleanos (true ou false).

Há especializações para tipos como int e char!

Declaração de variáveis

Declaração simples, atribuição posterior

int valor;
valor = -5;

Os nomes das variáveis têm regras!

Declaração com atribuição

int valor = -5;

Declaração múltipla

int valor1, valor2;

Declaração múltipla com atribuição

int valor1 = -5, valor2 = -6;

Se necessário, é possível quebrar linhas.

Operadores e aritmética

Comentários

// Este é um comentário de uma linha
int a = 5; // Comentário na frente do código

/*
  Comentário multilinha
*/

Atribuição

Utilizada de forma a modificar o valor de uma variável.

int   valor       = -5;
float outro_valor = 1.0f;
bool  foo         = true;

Aritmética básica

int a = 5, b = 5;
int soma, subt, div, mult, mod;

soma = a + b;
subt = a - b;
div  = b / 3;
mult = a * b;
mod  = a % 2;

Parênteses

Use para evitar ambiguidade.

int expressao_1 = 3 * 5 + 2;
int expressao_2 = 3 * (5 + 2);

Aritmética atributiva

Exemplo: somando duas unidades a um número inteiro:

int teste = 5;
teste = teste + 2;

Podemos simplificar o código anterior!

int teste = 5;
teste += 2;

Outros operadores similares:

  • -=
  • *=
  • /=
  • etc.

Incremento e decremento

Exemplo: Incrementando uma variável

int teste = 5;
teste += 1;

Podemos incrementar de outra forma…

int teste = 5;
teste++;

Decremento: duas formas equivalentes

teste -= 1;
teste--;

Diferenças no uso

int a = 5, b = 6;

int c = a++;
int d = ++b;

Comparação

int a = 5, b = 5;
bool resultado = (a == b);

Nota: Atribuição (=) não é igualdade (==)!!!

Outros operadores de comparação

resultado = (a != b); // Desigualdade
resultado = (a < b);  // Menor que
resultado = (a > b);  // Maior que
resultado = (a <= b); // Menor ou igual a
resultado = (a >= b); // Maior ou igual a

Estes operadores são diádicos!

Lógicos

Exemplo: Construindo a relação \(a \leq x \leq b\):

int a = 2, b = 5, x = 3;

bool resultado = (a <= x) && (x <= b);
  • &&: And lógico (ambos devem ser verdadeiros)
  • ||: Or lógico (pelo menos um deve ser verdadeiro)
  • !: Not lógico (nega o valor da operação que precete; monádico)
resultado = (a <= x) && (x <= b);
resultado = (a == x) || (b == x);
resultado = !resultado;

Ternário

Opera em três valores ao mesmo tempo.

condição ? consequente : alternativa;

se (a é maior que b) // condição
então...
    retorne a        // consequência
do contrário...
    return b         // alternativa

Exemplo

int a = 2;
int b = 3;

int resultado = (a > b) ? a : b;

Bitwise

Realizam manipulações diretamente nos bits das variáveis.

Não entraremos a fundo nestes operadores.

unsigned int mask_1 = 1;
unsigned int mask_2 = 2;

unsigned int result_1 = mask_1 & mask_2, // And bitwise
    result_2 = mask_1 | mask_2,          // Or bitwise
    result_3 = ~mask1,                   // Not bitwise
    result_4 = mask_1 ^ mask_2,          // Xor bitwise
    result_5 = mask_1 << 2,              // Left shift
    result_6 = mask_2 >> 1;              // Right shift

Precedência de operadores

  1. Incremento e decremento;
  2. Multiplicação, divisão, resto;
  3. Adição e subtração;
  4. Left e right shift;
  5. Comparação relacional (maior/menor, maior/menor ou igual);
  6. Comparação relacional (igualdade/desigualdade);
  7. Outros operadores bitwise;
  8. Ternário e aritmética atributiva.

I/O

Incrementando um número informado

#include <iostream>
using namespace std;

int main()
{
    int numero;

    cout << "Digite um numero inteiro:" << endl;
    cin >> numero;

    numero++;

    cout << "O sucessor do numero eh " << numero << endl;
    return 0;
}

Compilando o programa no Linux

Exercícios

Exercício 1

Crie um programa que lê um número inteiro digitado pelo usuário e imprime o resto de sua divisão por dois.

Exercício 2

Crie um programa que lê um número real digitado pelo usuário, simbolizando o raio de um certo círculo, e imprime a área do mesmo. A área de um círculo é representada pela fórmula

\begin{equation*} A_\text{círculo} = \pi{}r^{2} \end{equation*}

Controle de fluxo

if

int a = 4;
if(a % 2 == 0) {
    cout << "a eh par" << endl;
} else {
    cout << "a eh impar" << endl;
}

Múltiplas cláusulas

if(a < 0) {
    cout << "a eh negativo" << endl;
} else if(a == 0) {
    cout << "a eh igual a zero" << endl;
} else {
    cout << "a eh positivo" << endl;
}

Não é necessário declarar sempre o else

int a = 6;
cout << "a eh igual a " << a << endl;

if(a % 2 == 0) {
    cout << "a tambem eh par" << endl;
}

switch

#include <iostream>
using namespace std;

int
main()
{
    int a, b, opcao;
    
    cout << "Insira o numero a: ";
    cin >> a;

    cout << "Insira o numero b: ";
    cin >> b;

    cout << "Insira uma das seguintes opcoes:" << endl
         << "1. Somar os dois numeros"         << endl
         << "2. Multiplicar os dois numeros"   << endl
         << "3. Calcular a media dos numeros"  << endl
         << "0. Sair"                          << endl
         << "Sua opcao: ";

    cin >> opcao;

    if(opcao == 1) {
        cout << "A soma eh " << (a + b) << endl;
    } else if(opcao == 2) {
        cout << "A multiplicacao eh " << (a * b) << endl;
    } else if(opcao == 3) {
        cout << "A media eh " << (a + b) / 2.0f << endl;
    }

    return 0;
}
if(opcao == 1) {
    cout << "A soma eh " << (a + b) << endl;
} else if(opcao == 2) {
    cout << "A multiplicacao eh " << (a * b) << endl;
} else if(opcao == 3) {
    cout << "A media eh " << (a + b) / 2.0f << endl;
}
switch(opcao) {
case 1:
    cout << "A soma eh " << (a + b) << endl;
    break;
case 2:
    cout << "A multiplicacao eh " << (a * b) << endl;
    break;
case 3:
    cout << "A media eh " << (a + b) / 2.0f << endl;
    break;
default:
    break;
}

Exercícios

Exercício 3

Crie um programa que lê um número real representando a nota atual de um aluno em uma disciplina, variando de zero a cem. O programa deverá informar se o aluno foi aprovado ou reprovado. Caso a nota seja inválida, o programa deverá apresentar uma mensagem de erro.

Exercício 4

Leia quatro valores reais, correspondentes aos eixos \(x\) e \(y\) de dois pontos, respectivamente, e calcule a distância entre estes dois pontos. Lembre-se de que a fórmula para o a distância entre dois pontos \((x_{1}, y_{1})\) e \((x_{2}, y_{2})\) é:

\begin{equation*} \sqrt{\left(x_{2} - x_{1}\right)^{2} + \left(y_{2} - y_{1}\right)^{2}} \end{equation*}