·
Engenharia Elétrica ·
Linguagens de Programação
· 2022/2
Send your question to AI and receive an answer instantly
Recommended for you
5
Trabalho - Truco Mineiro C 2022-2
Linguagens de Programação
UFMG
2
Exercício 8 - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
3
Trabalho - Implementação de Tads 2022-1
Linguagens de Programação
UFMG
3
Trabalho Prático 3 - Menságens Assíncronas
Linguagens de Programação
UFMG
3
Trabalho Prático 2 - Menságens Assíncronas
Linguagens de Programação
UFMG
18
Exercício 1 - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
4
Trabalho - Truco Mineiro C 2022 2
Linguagens de Programação
UFMG
15
5 Vpl s - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
5
Trabalho - Truco Mineiro C 2022 2
Linguagens de Programação
UFMG
2
Metodos Numericos Computacionais - Programas para Engenharia IME
Linguagens de Programação
UFMG
Preview text
VPL Xadrez U Arquivos requeridos: program/main.cpp, program/tester.cpp, third_party/doctest.h, Makefile, src/rainha.cpp, tests/test_rainha.cpp, include/peao.h, include/rainha.h, include/bispo.h, include/cavalo.h, include/torre.h, include/rei.h, src/rei.cpp, src/bispo.cpp, src/cavalo.cpp, src/torre.cpp, src/peao.cpp, include/peao.cpp, src/peca.cpp, src/excecoes.cpp, include/excecoes.h, include/posicao.h, tests/test_peca.cpp, tests/test_cavalo.cpp, tests/test_rei.cpp, tests/test_torre.cpp, tests/test_bispo.cpp (↓ Baixar) Número máximo de arquivos: 100 Tipo de trabalho: Trabalho individual Introdução ANTES DE TUDO, DA FORMA QUE FOI CONFIGURADO O VPL AINDA NÃO CONTA OS CASOS DE TESTES DE VOCÊS. A NOTA QUE SERÁ INDICADA NÃO É A FINAL! Nesta prova vamos praticar os conceitos de TDD. Para tal, o ambiente moodle foi adaptado de forma que seja possível executar diversos comandos make. Clique no ícone de "Executar", um foguete. Após clicar em tal ícone, deve aparecer na tela um console (terminal). Neste é possível rodar os seguintes comandos: make -- compila o código make tests -- roda os testes de unidade make clean -- limpa tudo make run -- roda o main Ciclo TDD Lembre que o ciclo TDD consiste de: (1) Escrever teste (2) Ver o teste falhar (3) Fazer o teste passar (4) O código tem odores (code smells)? Se sim, passe para o passo (5). Se não, break. (5) Refatorar (6) Volte para o passo (1) Portanto, tente seguir o ciclo acima. Neste trabalho, consigo ver uns três momentos refatoração. Um deve consistir da extração de métodos comuns entre as peças para uma super-classe ou uma classe de validação que será usada por todas as peças. Um segundo momento de refatoramento será quando você considerar que o Peao tem um movimento especial na primeira jogada. Para evitar código duplicado, use o método protegido na super-classe. Por exemplo, a super classe pode definir métodos que verificam jogadas em cada um dos quatro eixos (↑ ↓ ↖️ ↘️), enquanto as sub-classes fazem uso de tais jogadas. Problema Considere um jogo de xadrez composto das seguintes peças: • 1 ♔ Rei • 1 ♕ Rainha • 2 ♗ Bispos • 2 ♘ Cavalos • 2 ♖ Torres • 8 ♙ Peões Para cada tipo de peça acima, crie uma classe para a peça. Tal classe, deve conter métodos que permitem: • Pegar a posição da peça no eixo x (entre [0, 7]) • Pegar a posição da peça no eixo y (entre [0, 7]) • Retornar o nome da peça ou ícone se possível (string) - (♚, ♛, ♝, ♞, ♜, ♟, ♔, ♕, ♗, ♘, ♖, ♙) • Um método pode_mover(int x, int y) que indica se um movimento do local atual para x, y é válido. • Um método mover(int x, int y) que realiza o movimento. O mesmo deve invocar pode_mover e lançar uma exceção quando o movimento for inválido. Use a metodologia TDD para criar 6 arquivos testes de unidade. Cada arquivo deve cobrir uma das peças do jogo. Portanto, oito classes devem ser criadas também (uma para cada peça). Organize o código nas pastas que indicamos. NÃO PRECISA IMPLEMENTAR A LÓGICA DE MATAR/COMER OUTRA PEÇA. * Pelo menos 6 classes (6 peças + algumas exceções) * Pelo menos 6 testes de unidade (um por peça) * Pelo menos 4 casos de teste por classe (exemplo: construtor + getters, pode_mover, posição atual e nome) VPL 14- Template method Este exercício possui dois objetivos: 1. Familiarizar o estudante com o padrão de projetos "template method" 2. Treinar o estudante em técnicas para manipular strings. A fim de alcançar tais objetivos, o aluno deverá implementar diferentes classes concretas para o algoritmo abaixo: class LineProcessor { private: std::istream &_in; unsigned _numLinhasValidas; public: LineProcessor(): _in(std::cin), _numLinhasValidas(0) {} virtual ~LineProcessor() {} unsigned numeroDeLinhasValidas() const; unsigned numeroDeLinhasLidas() const; virtual bool linhaValida(const std::string &str) const = 0; virtual void processaLinha(const std::string &str) = 0; void processaEntrada() { std::string linha; while (std::getline(_in, linha)) { if (linhaValida(linha)) { _numLinhasValidas++; processaLinha(linha); } } } }; Este algoritmo lê a entrada padrão, uma linha de cada vez, e processa as linhas consideradas válidas. Porém, tanto a definição de linha válida e a definição do processamento são deixadas em aberto. Note que os métodos linhaValida e processaLinha são abstratos. Diferentes classes podem implementar esses métodos. Para cada implementação podemos ter comportamentos muito diferentes. Por exemplo, abaixo vê-se uma classe que considera qualquer linha válida, e simplesmente imprime as linhas lidas na saída padrão: class LinePrinter: public LineProcessor { public: bool linhaValida(const std::string &str) const override { return true; } void processaLinha(const std::string &str) override { std::cout << str << std::endl; } }; Para resolver esse exercício, você deverá realizar as seguintes ações: 1. Modifique a classe LineProcessor, implementando o método numeroDeLinhasLidas. Essa modificação vai permitir que objetos desse tipo possam contar o número de linhas lidas. Note que a classe já conta o número de linhas válidas. Essa extensão será bem similar. Você deverá adicionar mais um atributo à classe, e incrementá-lo sempre que uma nova linha for vista (seja ela válida ou não). Lembre-se de inicializar este novo atributo no construtor da classe. 2. Implemente a classe ContadorNumNaturais, que imprime a soma dos números naturais encontrados em linhas que contém somente números. 3. Implemente a classe LeitorDeFutebol, que imprime o resultado de jogos cujo placar aparece em linhas válidas. 4. Implemente a classe ContadorDePalavras, que conta a quantidade de palavras em cada linha. Note que uma palavra é um "token", isto é, uma string que não possui espaços brancos. 5. Implemente a classe InversorDeFrases, que inverte a ordem em que palavras aparecem nas linhas válidas. Linhas válidas contém somente tokens com letras (e possivelmente espaços em branco). Tokens que contém qualquer tipo de caractere especial (incluindo números) invalidam a linha. Quando a linha for impressa, os tokens devem ser separados por espaços simples. 6. Implemente a classe EscritorDeDatas, que substitui números que denotam meses pelas três iniciais daquele mês. Linhas válidas contém datas, no formato dia/mês/ano, sendo dia e mês inteiros com um ou dois dígitos, e ano um inteiro com quatro dígitos. A saída deve ser somente as iniciais do mês, e.x.: "Jan", "Fev", etc. O arquivo LineProcessor.hpp contém vários comentários mostrando exemplos de padrões válidos e inválidos, e o que deve ser impresso. Adicionalmente, este arquivo contém exemplos de entradas válidas e inválidas e exemplos de saídas esperadas para diferentes testes. Além disso, duas classes já estão implementadas como exemplos, a saber, ContadorPopRural e LinePrinter. Note que a classe ContadorPopRural usa expressões regulares para determinar as linhas válidas. Você não precisa usar expressões regulares neste exercício. Porém, há duas vantagens em usá-las: 1. Elas tornam algumas questões deste exercício bem mais fáceis de serem resolvidas. 2. Expressões regulares são muito úteis em geral, para vários tipos de processamento de texto. Vale a pena aprender! Alguns recursos para aprender expressões regulares seguem abaixo: Site da Microsoft sobre o assunto. Tutorial do imaster. Caso você queira testar seu VPL localmente, você pode baixar o arquivo main.cpp, e usá-lo com diferentes arquivos de texto, assim: g++ *.cpp -o main.exe ./main.exe < t2.txt Seguem, abaixo, alguns exemplos de teste. Uma versão mais detalhada dessas entradas está disponível para consulta. Note que o primeiro número em cada teste serve para o programa de testes saber qual função executar. Aquele número não é parte da entrada que deve ser processada:
Send your question to AI and receive an answer instantly
Recommended for you
5
Trabalho - Truco Mineiro C 2022-2
Linguagens de Programação
UFMG
2
Exercício 8 - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
3
Trabalho - Implementação de Tads 2022-1
Linguagens de Programação
UFMG
3
Trabalho Prático 3 - Menságens Assíncronas
Linguagens de Programação
UFMG
3
Trabalho Prático 2 - Menságens Assíncronas
Linguagens de Programação
UFMG
18
Exercício 1 - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
4
Trabalho - Truco Mineiro C 2022 2
Linguagens de Programação
UFMG
15
5 Vpl s - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
5
Trabalho - Truco Mineiro C 2022 2
Linguagens de Programação
UFMG
2
Metodos Numericos Computacionais - Programas para Engenharia IME
Linguagens de Programação
UFMG
Preview text
VPL Xadrez U Arquivos requeridos: program/main.cpp, program/tester.cpp, third_party/doctest.h, Makefile, src/rainha.cpp, tests/test_rainha.cpp, include/peao.h, include/rainha.h, include/bispo.h, include/cavalo.h, include/torre.h, include/rei.h, src/rei.cpp, src/bispo.cpp, src/cavalo.cpp, src/torre.cpp, src/peao.cpp, include/peao.cpp, src/peca.cpp, src/excecoes.cpp, include/excecoes.h, include/posicao.h, tests/test_peca.cpp, tests/test_cavalo.cpp, tests/test_rei.cpp, tests/test_torre.cpp, tests/test_bispo.cpp (↓ Baixar) Número máximo de arquivos: 100 Tipo de trabalho: Trabalho individual Introdução ANTES DE TUDO, DA FORMA QUE FOI CONFIGURADO O VPL AINDA NÃO CONTA OS CASOS DE TESTES DE VOCÊS. A NOTA QUE SERÁ INDICADA NÃO É A FINAL! Nesta prova vamos praticar os conceitos de TDD. Para tal, o ambiente moodle foi adaptado de forma que seja possível executar diversos comandos make. Clique no ícone de "Executar", um foguete. Após clicar em tal ícone, deve aparecer na tela um console (terminal). Neste é possível rodar os seguintes comandos: make -- compila o código make tests -- roda os testes de unidade make clean -- limpa tudo make run -- roda o main Ciclo TDD Lembre que o ciclo TDD consiste de: (1) Escrever teste (2) Ver o teste falhar (3) Fazer o teste passar (4) O código tem odores (code smells)? Se sim, passe para o passo (5). Se não, break. (5) Refatorar (6) Volte para o passo (1) Portanto, tente seguir o ciclo acima. Neste trabalho, consigo ver uns três momentos refatoração. Um deve consistir da extração de métodos comuns entre as peças para uma super-classe ou uma classe de validação que será usada por todas as peças. Um segundo momento de refatoramento será quando você considerar que o Peao tem um movimento especial na primeira jogada. Para evitar código duplicado, use o método protegido na super-classe. Por exemplo, a super classe pode definir métodos que verificam jogadas em cada um dos quatro eixos (↑ ↓ ↖️ ↘️), enquanto as sub-classes fazem uso de tais jogadas. Problema Considere um jogo de xadrez composto das seguintes peças: • 1 ♔ Rei • 1 ♕ Rainha • 2 ♗ Bispos • 2 ♘ Cavalos • 2 ♖ Torres • 8 ♙ Peões Para cada tipo de peça acima, crie uma classe para a peça. Tal classe, deve conter métodos que permitem: • Pegar a posição da peça no eixo x (entre [0, 7]) • Pegar a posição da peça no eixo y (entre [0, 7]) • Retornar o nome da peça ou ícone se possível (string) - (♚, ♛, ♝, ♞, ♜, ♟, ♔, ♕, ♗, ♘, ♖, ♙) • Um método pode_mover(int x, int y) que indica se um movimento do local atual para x, y é válido. • Um método mover(int x, int y) que realiza o movimento. O mesmo deve invocar pode_mover e lançar uma exceção quando o movimento for inválido. Use a metodologia TDD para criar 6 arquivos testes de unidade. Cada arquivo deve cobrir uma das peças do jogo. Portanto, oito classes devem ser criadas também (uma para cada peça). Organize o código nas pastas que indicamos. NÃO PRECISA IMPLEMENTAR A LÓGICA DE MATAR/COMER OUTRA PEÇA. * Pelo menos 6 classes (6 peças + algumas exceções) * Pelo menos 6 testes de unidade (um por peça) * Pelo menos 4 casos de teste por classe (exemplo: construtor + getters, pode_mover, posição atual e nome) VPL 14- Template method Este exercício possui dois objetivos: 1. Familiarizar o estudante com o padrão de projetos "template method" 2. Treinar o estudante em técnicas para manipular strings. A fim de alcançar tais objetivos, o aluno deverá implementar diferentes classes concretas para o algoritmo abaixo: class LineProcessor { private: std::istream &_in; unsigned _numLinhasValidas; public: LineProcessor(): _in(std::cin), _numLinhasValidas(0) {} virtual ~LineProcessor() {} unsigned numeroDeLinhasValidas() const; unsigned numeroDeLinhasLidas() const; virtual bool linhaValida(const std::string &str) const = 0; virtual void processaLinha(const std::string &str) = 0; void processaEntrada() { std::string linha; while (std::getline(_in, linha)) { if (linhaValida(linha)) { _numLinhasValidas++; processaLinha(linha); } } } }; Este algoritmo lê a entrada padrão, uma linha de cada vez, e processa as linhas consideradas válidas. Porém, tanto a definição de linha válida e a definição do processamento são deixadas em aberto. Note que os métodos linhaValida e processaLinha são abstratos. Diferentes classes podem implementar esses métodos. Para cada implementação podemos ter comportamentos muito diferentes. Por exemplo, abaixo vê-se uma classe que considera qualquer linha válida, e simplesmente imprime as linhas lidas na saída padrão: class LinePrinter: public LineProcessor { public: bool linhaValida(const std::string &str) const override { return true; } void processaLinha(const std::string &str) override { std::cout << str << std::endl; } }; Para resolver esse exercício, você deverá realizar as seguintes ações: 1. Modifique a classe LineProcessor, implementando o método numeroDeLinhasLidas. Essa modificação vai permitir que objetos desse tipo possam contar o número de linhas lidas. Note que a classe já conta o número de linhas válidas. Essa extensão será bem similar. Você deverá adicionar mais um atributo à classe, e incrementá-lo sempre que uma nova linha for vista (seja ela válida ou não). Lembre-se de inicializar este novo atributo no construtor da classe. 2. Implemente a classe ContadorNumNaturais, que imprime a soma dos números naturais encontrados em linhas que contém somente números. 3. Implemente a classe LeitorDeFutebol, que imprime o resultado de jogos cujo placar aparece em linhas válidas. 4. Implemente a classe ContadorDePalavras, que conta a quantidade de palavras em cada linha. Note que uma palavra é um "token", isto é, uma string que não possui espaços brancos. 5. Implemente a classe InversorDeFrases, que inverte a ordem em que palavras aparecem nas linhas válidas. Linhas válidas contém somente tokens com letras (e possivelmente espaços em branco). Tokens que contém qualquer tipo de caractere especial (incluindo números) invalidam a linha. Quando a linha for impressa, os tokens devem ser separados por espaços simples. 6. Implemente a classe EscritorDeDatas, que substitui números que denotam meses pelas três iniciais daquele mês. Linhas válidas contém datas, no formato dia/mês/ano, sendo dia e mês inteiros com um ou dois dígitos, e ano um inteiro com quatro dígitos. A saída deve ser somente as iniciais do mês, e.x.: "Jan", "Fev", etc. O arquivo LineProcessor.hpp contém vários comentários mostrando exemplos de padrões válidos e inválidos, e o que deve ser impresso. Adicionalmente, este arquivo contém exemplos de entradas válidas e inválidas e exemplos de saídas esperadas para diferentes testes. Além disso, duas classes já estão implementadas como exemplos, a saber, ContadorPopRural e LinePrinter. Note que a classe ContadorPopRural usa expressões regulares para determinar as linhas válidas. Você não precisa usar expressões regulares neste exercício. Porém, há duas vantagens em usá-las: 1. Elas tornam algumas questões deste exercício bem mais fáceis de serem resolvidas. 2. Expressões regulares são muito úteis em geral, para vários tipos de processamento de texto. Vale a pena aprender! Alguns recursos para aprender expressões regulares seguem abaixo: Site da Microsoft sobre o assunto. Tutorial do imaster. Caso você queira testar seu VPL localmente, você pode baixar o arquivo main.cpp, e usá-lo com diferentes arquivos de texto, assim: g++ *.cpp -o main.exe ./main.exe < t2.txt Seguem, abaixo, alguns exemplos de teste. Uma versão mais detalhada dessas entradas está disponível para consulta. Note que o primeiro número em cada teste serve para o programa de testes saber qual função executar. Aquele número não é parte da entrada que deve ser processada: