Pretende-se que os alunos, em grupos de dois, implementem um jogo para testar o seu conhecimento de bases numéricas. O jogo deve começar por pedir ao utilizador o número de questões a que deseja responder. Cada questão consiste em perguntar ao utilizador para converter um número numa base numérica noutra base numérica. Após cada resposta, o jogo deve indicar se o utilizador respondeu ou não corretamente à questão. No final, o jogo deve indicar quantas respostas corretas foram dadas.
O jogo tem os seguintes requisitos:
- Os valores a converter devem ser aleatórios, positivos e limitados a 8 bits (
unsigned char
). - As bases aceites para conversão devem ser octal, decimal e hexadecimal, ou seja, as questões podem solicitar aleatoriamente as seguintes conversões:
- Octal => Decimal
- Octal => Hexadecimal
- Decimal => Octal
- Decimal => Hexadecimal
- Hexadecimal => Octal
- Hexadecimal => Decimal
Numero de perguntas: 3
Converte 0115 em base 16: 4d
Certo!
Converte 28 em base 16: c1
Errado!
Converte 0x9b em base 8: 233
Certo!
Acertaste 2 vez(es)!
- Ficheiro
.c
com código devidamente comentado e indentado: - Ficheiro
fluxograma.svg
contendo o fluxograma do projeto em formato SVG. - Ficheiro
README.md
em formato Markdown, contendo as seguintes secções:- Título
- Nomes dos autores (primeiro e último) e respectivos números de aluno
- Descrição da solução
- Deve mostrar o fluxograma
- Conclusões e matéria aprendida
- Referências
- Incluindo trocas de ideias com colegas, código aberto reutilizado e bibliotecas utilizadas
A forma de obter, editar e submeter o trabalho será através do Moodle e do GitHub. Os três ficheiros devem ser entregues no Moodle até às 23h de 12 de novembro de 2017, e depois desta data os ficheiros devem ser carregados (pushed) no GitHub e deve ser solicitada uma integração dos mesmos (pull request) no repositório principal do projeto até às 23h de 13 de novembro de 2017. Os ficheiros submetidos no Moodle devem ser exactamente os mesmos cuja integração será posteriormente solicitada no GitHub.
O procedimento simplificado para este trabalho é o seguinte:
- Criar uma conta no GitHub, caso ainda não tenhas uma.
- Ir até ao repositório principal do projeto (tipicamente denominado upstream) e criar uma cópia (fork) do mesmo na tua conta (botão Fork no canto superior direito). A tua cópia no GitHub é chamada origin.
- Obter uma cópia local (no teu PC) da tua cópia do projeto com o comando
git clone https://github.com/OTeuUserName/ic2017p1.git
(substituirOTeuUserName
pelo teu nome de utilizador no GitHub). - Já dentro da pasta do projeto, chamada ic2017p1, criar um ramo (branch) para desenvolvimento do trabalho com os seguintes comandos:
$ git branch meu_ramo
$ git checkout meu_ramo
- O nome
meu_ramo
pode ser substituído por qualquer outro nome. - O primeiro comando cria o ramo, o segundo comando muda o git para esse ramo. Os dois comandos podem ser compactados num só:
$ git checkout -b meu_ramo
.
- Uma vez no novo ramo, criar uma sub-pasta com os números de aluno que constituem o grupo, por exemplo a21700000_a21700001.
- Será dentro desta sub-pasta que deverão ser colocados os três ficheiros pedidos (código C, fluxograma em formato SVG e relatório em formato Markdown). Para cada ficheiro colocado dentro desta pasta, e/ou para para alteração efetuada num dos ficheiros, executar os seguintes comandos:
$ git add nome_do_ficheiro
$ git commit -m "Descrição das alterações efetuadas"
- O primeiro comando assume que estamos dentro da sub-pasta criada, por exemplo a21700000_a21700001.
- Uma vez que são pedidos três ficheiros, deverão existir no mínimo três commits, ou seja, os comandos anteriores devem ser executados pelo menos três vezes.
- Após e só após a data limite de submissão no Moodle (23h de 12 de novembro de 2017), o projeto deve ser carregado (pushed) na tua conta GitHub (origin) com o seguinte comando:
$ git push -u origin meu_ramo
- A opção
-u
é necessária pois nesta fase o teu repositório no GitHub (origin) ainda não conhece o ramo chamadomeu_ramo
.
- Uma vez confirmado que o push foi realizado com sucesso (a sub-pasta e os ficheiros devem aparecer na origin, branch
meu_ramo
), deve ser solicitado um pull request (pedido de integração) na árvore original do projeto (upstream). Para o efeito basta clicar no botão New pull request e solicitar a seguinte integração:- Base fork VideojogosLusofona/ic2017p1, base master (local onde queres integrar as tuas alterações).
- Head fork OTeuUserName/ic2017p1, compare meu_ramo (as tuas alterações que queres ver integradas).
- Clica no botão verde Create pull request, e deixa uma pequena descrição da razão do pedido de integração, clicando depois novamente em Create pull request.
- A integração pode ser solicitada até às 23h de 13 de novembro de 2017.
- (Opcional/Avançado) Após todos os pull requests serem aceites, os alunos podem atualizar o ramo master do seu fork no GitHub (origin) de acordo com todas as alterações feitas ao repositório principal do projeto (upstream):
- Os seguintes comandos assumem que estamos na pasta ic2017p1 no PC do aluno.
- Adicionar o repositório upstream como repositório remoto na cópia local no PC do aluno:
$ git remote add upstream https://github.com/VideojogosLusofona/ic2017p1.git
- Buscar (fetch) os ramos e respetivos commits presentes no repositório upstream:
$ git fetch upstream
- Mudar para o ramo
master
local: $ git checkout master
- Juntar (merge) as alterações do ramo
master
do repositório upstream no ramo master local: $ git merge upstream/master
- Empurrar (push) o ramo
master
local para o teu fork no GitHub (origin): $ git push origin master
- Nesta fase podes também eliminar o
meu_ramo
, uma vez que os commits presentes no mesmo já estão integrados no ramomaster
: $ git branch -d meu_ramo
O Git é um sistema de gestão de código fonte, essencial para desenvolver qualquer tipo de projetos. O GitHub, e plataformas semelhantes tais como o GitLab, BitBucket e NotABug, oferecem repositórios Git remotos e vários serviços associados (tracking de bugs, wikis, visualização de código, integração de ramos e por ai fora). Alguns tutoriais úteis e interessantes:
- Compilador C99:
- Editor de C e Markdown:
- Gedit
- Geany
- Code::Blocks
- Atom (suporta pré-visualização de Markdown)
- XCode (só macOS)
- Notepad++ (só Windows)
- Remarkable (só Markdown, com pré-visualização)
- StackEdit (editor online, só Markdown, com pré-visualização)
- (GitHub-Flavored) Markdown Editor (editor online, só Markdown, com pré-visualização)
- ...
- Git
- Linux: instalar a partir do package manager/centro de software
- Ubuntu/Debian/Mint: instalar com comando
sudo apt install git
- Ubuntu/Debian/Mint: instalar com comando
- macOS: incluido no XCode
- Windows: download
- Linux: instalar a partir do package manager/centro de software
- Desenho de fluxogramas:
- Dia
- Ubuntu/Debian/Mint: instalar com comando
sudo apt install dia
- Ubuntu/Debian/Mint: instalar com comando
- LibreOffice Draw
- Ubuntu/Debian/Mint: instalar com comando
sudo apt install libreoffice-draw
- Ubuntu/Debian/Mint: instalar com comando
- Microsoft Visio (software pago, apenas Windows)
- draw.io
- Lucid Chart
- Dia
O projeto vale 10% da nota final (2 valores) e a avaliação do mesmo será feita da seguinte forma:
- 1,1 valores - Código (funcionalidade, indentação, comentários e compilação sem erros/warnings).
- 0,5 valores - Relatório em formato Markdown, incluíndo fluxograma.
- 0,4 valores - Correcta utilização do Git e GitHub, incluindo haver commits de ambos os alunos do grupo.
Nesta disciplina, espera-se que cada aluno siga os mais altos padrões de honestidade académica. Isto significa que cada ideia que não seja do aluno deve ser claramente indicada, com devida referência ao respectivo autor. O não cumprimento desta regra constitui plágio.
O plágio inclui a utilização de ideias, código ou conjuntos de soluções de outros alunos ou indivíduos, ou quaisquer outras fontes para além dos textos de apoio à disciplina, sem dar o respectivo crédito a essas fontes. Os alunos são encorajados a discutir os problemas com outros alunos e devem mencionar essa discussão quando submetem os projetos. Essa menção não influenciará a nota. Os alunos não deverão, no entanto, copiar códigos, documentação e relatórios de outros alunos, ou dar os seus próprios códigos, documentação e relatórios a outros em qualquer circunstância. De facto, não devem sequer deixar códigos, documentação e relatórios em computadores de uso partilhado.
Nesta disciplina, a desonestidade académica é considerada fraude, com todas as consequências legais que daí advêm. Qualquer fraude terá como consequência imediata a anulação dos projetos de todos os alunos envolvidos (incluindo os que possibilitaram a ocorrência). Qualquer suspeita de desonestidade académica será relatada aos órgãos superiores da escola para possível instauração de um processo disciplinar. Este poderá resultar em reprovação à disciplina, reprovação de ano ou mesmo suspensão temporária ou definitiva da ULHT (2).
- (1) Pereira, A. (2017). C e Algoritmos, 2ª edição. Sílabo.
- (2) Texto adaptado da disciplina de Algoritmos e Estruturas de Dados do Instituto Superior Técnico.
Todo o código neste repositório é disponibilizado através da licença GPLv3. O enunciado e restante documentação são disponibilizados através da licença CC BY-NC-SA 4.0.
- Autor: Nuno Fachada
- Curso: Licenciatura em Aplicações Multimédia e Videojogos
- Instituição: Universidade Lusófona de Humanidades e Tecnologias