Apresentação

Visão Geral do Curso, Introdução C++ e Logística

Pessoal

Quem sou eu?

  1. Meu nome: Flavio Figueiredo
  2. Prédio do DCC (Anexado ao ICEX) sala 4030

Dúvidas?

  1. Moodle/Sala de Aula

Introdução ao Curso

Sobre PDS2

  1. PDS2 é um curso voltado ao entendimento de como modelar um software
  2. Isto complementa o ponto de vista de PDS2
    • Comandos básicos para desenvolver programas
    • Noções de algoritmos

Nossos Objetivos

  1. Entender o problema
  2. Modelar os dados
  3. Codificar a solução

Ementa

  1. Programação estruturada e linguagem de programação modular.
  2. Metodologias de desenvolvimento de software.
  3. Compreensão, corretude e depuração de programas.
  4. Resolução de problemas de forma modular e eficiente.

Avaliação

  • Provas Teóricas (2 x 25 pts): 50 pontos.
  • Atividades práticas (approx 20 VPLs de 1 pto): 20 pontos.
  • Projeto: 30 pontos.

Projeto

  1. Tema da sua escolha
  2. Temos uma lista de possíveis
  3. Grupos de 3/4 alunos
    1. Código no github
  4. Repositório privado

Tarefas de hoje

  1. Criar conta no Github
  2. Instalar e configurar o WSL
    • Falo mais em breve.
  3. Instalar e configurar o

Desenvolvimento de Software

Lacuna de PDS1

  1. Saber programar é apenas o passo inicial
  2. Em pouco tempo conseguimos fazer uso de:
    • if, while, else, for, funções
  3. Como modelar um programa?
  4. Como representar um conceito?

Desenvolvimento de Software

Exemplo do mundo real

  1. Como desenvolver um sistema de banco?
    • Clientes
    • Transações
    • Contas
    • . . .

Programação Orientada a Objetos

  1. Uma das formas de modelar o mundo
  2. Cada entidade do mundo real pode virar um struct. Será que deve?
  3. Atributos
    • saldo
    • nome
    • conta

Uso e Aplicação de Estruturas de Dados

  1. A forma que você representa os dados guia seu programa. Quando é o melhor momento de usar um mapa/dicionário? Uma lista?
  2. Biblioteca STL de C++

Boas práticas

  1. Programação é uma atividade social (acreditem ou não)
  2. PDS2 é o passo 0 para desenvolver software

C++ Através de Exemplos

  1. Compilando
  2. Olá Mundo
  3. String
  4. Vector
  5. namespace std

Compilando

  1. Sempre faremos uso de g++
g++ -std=c++20 codigo.cpp -o main
  1. Vamos por partes:
    • g++ é o nome do compilador
    • -std=c++20 é apenas para garantir que estamos na versão mais nova
    • codigo.cpp é seu código
    • -o main indica o programa de saída

Executando

./main

Olá Mundo!

#include <iostream>

int main() {
  std::cout << "Hello World!" << std::endl;
  return 0;
}

Strings

  1. Finalmente! Vamos esquecer o '\0' por um tempo
  2. C++ tem suporte nativo para strings
#include <iostream>
#include <string>

int main() {
  std::string hello("Olá mundo!\n");
  std::string pds2("Vamos iniciar PDS2\n");
  std::cout << hello;
  std::cout << std::endl;
  std::cout << pds2;

  std::string maisuma = "Mais uma!";
  std::cout << maisuma.size();
  std::cout << std::endl;
  return 0;
}

Strings

Diferentes formas de declarar

#include <iostream>
#include <string>

int main() {
  std::string hello1("Olá mundo!\n");

  std::string hello2 = "Olá mundo!\n";
}
#include <iostream>
#include <string>

using namespace std;

int main() {
  string hello1("Olá mundo!\n");
  string hello2 = "Olá mundo!\n";
}

Strings

Suporte nativo ajuda bastante

  1. Chamadas como: .size
    • Tamanho da string
    • Observe que a chamada é na string
    • Estilo um campo de um struct
  2. Note a diferença: str.size() vs strlen(str)
#include <iostream>
#include <string>

int main() {
  std::string hello("Olá mundo!\n");
  std::string hello2("Olá mundo!\n");
  if (hello == hello2) {
    std::cout << "c++ faz overload do == para strings!!!!.\n";
  }
  if (hello.compare(hello2) == 0) {
    std::cout << "Strings iguais.\n";
  }
  return 0;
}

Vectors

#include <iostream>
#include <vector>

int main()  {
  std::vector<int> dados = {};
  int v = 0;
  int i = 0;
  while (v >= 0) {
    std::cout << "Digite o " << i+1 << "-ésimo número (-1 para terminar): ";
    std::cin >> v;
    if (v < 0) break;
    dados.push_back(v);
  }

  for (int x : dados)
    std::cout << x << std::endl;
}
  1. Nova forma de iterar
  2. Vetor redimensionável, uma lista com array por baixo.