Manual de Dicas - Maratona de Programação Prof. Julio Fernando Lieira Fatec Lins

Documentos relacionados
Introdução. O BOCA Online Contest Administrator é um sistema de correção online de códigos utilizado em competições de programação de computadores.

Processamento da Informação Exercícios de programação

IDES E PROGRAMAÇÃO. Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias

MiniMaratonas de Programação

Preparação do ambiente para desenvolvimento em Java

Disciplina de Lógica e Linguagem de Programação Desenvolvido pelo professor Danilo Giacobo Ferramenta Code::Blocks

Linguagem de Programação II Programação Orientada a Objetos. Ambientes de Programação

No Windows há basicamente dois tipos de programas de usuário:

Instalação JDK 10/03/2017

Manual Coleção Interativa Papel Professor Versão 2.5.3

Programação 2017/2018 2º Semestre

Instalação JDK. Joyce França. Professora de Ciência da Computação - IFNMG

Manual Gerenciador de Aprendizagem Papel Professor Versão 2.5.3

Manual de instalação do software CSIBackup Versão 1.0

POO Documentation. Release 1.0. Felipe Dau e Francisco Pereira Junior

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Primeira Aula Prática

Obs.: para realizar estas atividades tenha certeza de que já tenha instalado no sistema operacional o Java JDK e o NetBeans.

Sobre o envio de trabalhos para o Mooshak

Aula 3 Primeiros programas

BCC201 Introdução à Programação. Prof. Saul Delabrida 2013/2

Passo-a-passo para desenvolver um Programa usando a Linguagem Python

1 Como compilar seu código? 2 Comandos de terminal:

TOTVS Utilização dos Aplicativos. Arquitetura e Instalação

MC102: Primeira aula de laboratório

Ferramenta automática de correção de códigos em C Elgio Schlemer Setembro de 2017

Manual de Utilização

Procedimentos para Instalação do Sisloc (Estação de Trabalho) versão

27ª Jornada de Pediatria da Sociedade Regional de Pediatria Vale do Rio Grande SUBMISSÃO DE TRABALHOS. De 01/03 a 30/04/2018. srped.com.

Exercícios: Vetores e Matrizes

Fixo (41) Vivo (41) Tim (41) Claro (41) OI (41) Sistema Descomplicado CNPJ

Desenvolvimento de Aplicações Desktop

Manual Apollo 3 Camadas

Universidade Federal de Ouro Preto/MG

Prof. Marco Antonio M. Carvalho

Você pode conferir mais informações sobre essas e outras ferramentas em:

Sidicom S4. Tutorial Backup Automático + Backup na nuvem

PROGRAMA ESPECIAL DE FORMAÇÃO PEDAGÓGICA DE PROFESSORES PARA EDUCAÇÃO PROFISSIONAL MANUAL DO AMBIENTE VIRTUAL DE APRENDIZAGEM (AVA) TUTOR

Algoritmos e Estruturas de Dados I

Manual de Instalação do pacote SICWEB

Ferramenta 1 -NetBeans 8.0

Título: Como configurar o Agente de Backup em Nuvem?

INSTRUÇÃO DE TRABALHO

Produção de tutoriais. Suellem Oliveira

MANUAL. Certificado de Origem Digital PERFIL PRODUTOR. Versão

Manual Gerenciador de Aprendizagem Versão Pearson Sistemas do Brasil

Aula 4 Introdução ao C

Manual para atualização do portal do CNPq - versão 1.0 Programas

Figura 1: Operações para gerar um programa executável.

ProdCert Módulo Certificador. Manual de Instalação e configuração

Revisão C++ - Parte 1

Algoritmos e Programação

Bem-vindo ao Dropbox!

Ambiente de Programação, rastreamento e entrada de dados. MCG114 Programação de Computadores I. Interpretador de Comandos. Interpretador de Comandos

Tutorial de Utilização do Software- Mini CLP FIT

Trabalho de LP 15/07/2013. Prof. Flávio Miguel Varejão

INSTALAÇÃO DO CLIENTE LOTUS NOTES ROTEIRO DE INSTALAÇÃO E CONFIGURAÇÃO

Instalação Wiser Discovery Sistema Operacional Windows

MANUAL DO PARTICIPANTE. Inscrição e Submissão de Trabalhos

Sistema de Cancelamento de Protestos. Manual do Usuário

AJUDA DE NAVEGAÇÃO OFFICE2 CRM - CLIENTE

Como usar a plataforma Redação Nota 1000 GUIA PARA ALUNOS DE ESCOLAS PARCEIRAS

Manual de Compilação/Execução da Aplicação SmartHome

Manual de Instalação do Módulo de Segurança MMA SISGEN

Atualizações do sistema Adendo do usuário

Aula 01. Prof. Diemesleno Souza Carvalho /

Conteúdo Como gerar os arquivos pelo WinMFD da Bematech?... 3 Como saber a data do arquivo?... 9 Como copiar os arquivos gerados para o PENDRIVE:...

Programação 2010/2011 MEEC

Conheça a Sala Virtual de Negociação

Procedimentos para Atualização Sisloc

Manual de Uso Recuperação Fiscal

TSE TRIBUNAL SUPERIOR ELEITORAL

TUTORIAL COMO SUBMETER RESUMO PARA A 5ª SEMPESq

Aula 1 Apresentação do curso e Conceitos Fundamentais. Objetivo do curso

MANUAL DE INSTALAÇÃO DA WIZARD - VIMET

MANUAL DE RESTAURAÇÃO DE DADOS DO MOODLE ANTIGO PARA A NOVA VERSÃO.

MANUAL DE INSTALAÇÃO SISTEMA DE GERÊNCIA CONSCIUS

CCO 016 / COM 110 Fundamentos de Programação

Administração Central Departamento

Tutorial 1 Configuração Apache Tomcat no NetBeans 8.0 (passo a passo)

MSP430 Lab 02 Criar e Compilar um projeto

Laboratório Configuração do Backup e da Restauração de Dados no Windows 7 e no Vista

Introdução a Programação Web com PHP

REGULAMENTO TOPCOM 17

MANUAL DE UTILIZAÇÃO COLETOR OPTIMUS METROLOGIC SP5500

SW Ativação Linker SAT II

ÍNDICE SERVIÇOS DO WINDOWS MASTERSAF DFE

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Ambiente de desenvolvimento

Cadastro e Acesso ao Portal de Suporte da AX4B

Comunicador Interno (Mensagens Instantâneas)

TUTORIAL COMO SUBMETER ARTIGO DO CONENF

Processo MITAVVIC Manual MITAVVIC

UTILIZANDO O CODE BLOCKS

Criando atividade. Para criar uma Atividade, siga os passos a seguir.

TUTORIAL COMO SUBMETER ARTIGO DO CONGENTI

Transcrição:

Manual de Dicas - Maratona de Programação Prof. Julio Fernando Lieira Fatec Lins 1. Entendendo as Partes de um Problema Um problema é composto basicamente de 5 partes: identificação, uma historinha, Entrada, Saída e um exemplo. Considere o exemplo mostrado na Figura 1: Identificação Problema C Jumping Mario (Problema 11764 do UVa) Nome do arquivo fonte: mario.c, mario.java, mario.cpp, ou mario.pas h i s t o r i n h a E n t r a d a S a í d a E x e m p l o Mário está no final do castelo. Ele agora precisa saltar sobre alguns muros e então entrar na Câmara de Koopa, onde ele deve vencer o monstro e salvar a princesa. Para este problema, nós estamos apenas interessados na parte saltar sobre alguns muros. Você receberá as alturas de N muros que estão posicionados da esquerda para a direita. Mário está posicionado no primeiro muro. Ele precisa pular para os muros seguintes, um após o outro, até atingir o último. Isto é, ele fará um total de (N-1) saltos. Um salto alto é aquele em que Mário tem de saltar para um muro mais alto do que aquele em que está posicionado e, analogamente, um salto baixo é aquele onde Mário tem de saltar para um muro mais baixo do que aquele onde ele está. Você poderia determinar o número total de saltos altos e de saltos baixos que Mário precisa fazer? Entrada A primeira linha da entrada é um inteiro T (T < 30) que indica o número de casos de teste. Cada caso inicia com um inteiro N (0 < N < 50) que determina a quantidade de muros. A próxima linha dá a altura dos N muros, da esquerda para a direita. Cada altura é um inteiro positivo igual ou inferior a 10. Saída Para cada caso de teste, imprima o número do caso de teste seguido por 2 inteiros, o total de saltos altos e o total de saltos baixos respectivamente. Observe o exemplo para o formato exato da saída. Exemplo de Entrada 3 8 1 4 2 2 3 5 3 4 1 9 5 1 2 3 4 5 Saída para o exemplo de entrada Case 1: 4 2 Case 2: 0 0 Case 3: 4 0 Figura 1: Exemplo de problema de maratona de programação. 1.1. Identificação do Problema O problema é identificado por uma letra (Problema C), a qual será usada para submeter a solução ao sistema de correção automática. Também recebe um nome (Jumping Mario). Depois é indicado o nome do autor ou a fonte de onde foi retirado o problema (Problema 11764 do UVa). Por último é indicado qual o nome que deve ser dado ao arquivo do código fonte, 1

dependendo da linguagem de programação escolhida para a solução. Neste exemplo, as opções são: mario.c para solução em linguagem C; mario.java para solução em linguagem Java; mario.cpp para linguagem C++; mario.pas para linguagem Pascal. 1.2. Historinha Em geral o problema é descrito através de uma historinha. É importante ler atentamente para entender o problema. Neste exemplo, note que a historinha define os conceitos de Salto alto e Salto baixo, os quais são fundamentais para a implementação da solução do problema. 1.3. Entrada Descreve como deve ser a entrada dos dados, ou seja, o que seu programa receberá de entrada de dados. Aqui temos uma particularidade dos problemas de Maratona de Programação, onde os programas são corrigidos automaticamente por um sistema. Assim, na entrada de dados não temos interação com o usuário, ou seja, não devemos exibir mensagens do tipo Digite um valor: ou Entre com um Nome:. Mais adiante veremos como fazer isso. Para entender bem a entrada de dados, é preciso acompanhar a descrição das entradas seguindo o exemplo de entrada mostrado no final do enunciado do problema. Faça anotações no próprio exemplo (veja a Figura 2). 1.4. Saída Figura 2: Anotações sobre a entrada de dados do problema Jumping Mario. Descreve como deve ser a saída de dados do programa. Assim como na entrada, analise o que é descrito aqui observando o exemplo. É importante seguir rigorosamente as recomendações aqui descritas, até mesmo na quantidade de espaços entre os dados mostrados, pois o sistema de correção automática vai realizar uma bateria de testes e comparar a saída de seu programa com a saída correta. Mesmo pequenas diferenças no número de espaços podem invalidar a saída. 2

2. Implementando a Solução Após entender o problema, partimos para a estratégia de solução do problema. O algoritmo abaixo mostra uma possível solução. Leia a quantidade de casos de teste Para cada caso de teste, faça: Leia a quantidade de alturas Leia a primeira altura (onde Mario está inicialmente posicionado) Leia as próximas alturas e, Para cada altura lida, Compare com a altura anterior, se for maior, significa que Mario deve dar um Salto Alto, então incremente o contador de saltos altos; Se for menor, significa que Mario deve dar um Salto Baixo, então incremente o contador de saltos baixos; Após ler todas as alturas do caso de teste atual, imprima os contadores conforme descrito pelo enunciado do problema. 2.1. Codificando A Figura 3 mostra uma implementação da solução feita em Linguagem C. Digite-a em um editor de textos e salve com o nome mario.c, conforme foi indicado na parte de identificação do problema. #include<stdio.h> int main(){ int casostestet, //T<30 qtdemurosn, // 0 < N < 50 alturas, // 0 <= alturas <= 10 contsaltosaltos, contsaltosbaixos, //Contadores de saltos muroatual, proxmuro, i,j; scanf("%i\n",&casostestet); //Leitura da qtde de casos de teste for (i=1;i<=casostestet;i++) { contsaltosaltos=0; contsaltosbaixos=0; scanf("%i\n",&qtdemurosn); //Leitura qte de muros para este caso de teste //Leitura da altura do primeiro muro, onde Mario esta posicionado inicialmente scanf("%i ",&muroatual); for (j=1;j<qtdemurosn;j++) {//Leitura das demais alturas scanf("%i ",&proxmuro); if (proxmuro>muroatual) contsaltosaltos++; if (proxmuro<muroatual) contsaltosbaixos++; //Troca valores para a prox. leitura muroatual = proxmuro; } //Imprime a saida deste caso de teste printf("case %i: %i %i\n",i,contsaltosaltos,contsaltosbaixos); } return 0; //Finaliza dizendo que o programa executou sem erros }//Fim main() Figura 3 - Código em Linguagem C da solução do problema. 3

2.2. Compilando Caso esteja usando um ambiente de desenvolvimento integrado (IDE) como o Dev-C++ ou CodeBlocks, basta utilizar o compilador embutido no ambiente. Entretanto, é recomendado utilizar o mesmo compilador do sistema de correção BOCA, o qual executa na plataforma Linux. No Linux, o compilador mais usado é o GCC. Para a plataforma Windows existe uma versão do gcc que é instalada juntamente com o ambiente de desenvolvimento Dev-Cpp ou o CodeBlocks. Assim, mesmo estando na plataforma Windows é possível compilar o programa usando o gcc diretamente. Para isso, verifique na pasta onde foi instalado o Dev-Cpp a existência da parta bin e dentro dela a existência do programa gcc. Caso exista, verifique se o caminho para esta pasta está configurada na variável de ambiente PATH do sistema. Isso é feito acessando: Iniciar>Painel de Controle>Sistema>Configurações Avançadas do Sistema. Na janela que se abre, clique na aba Avançado e depois no botão Variáveis de Ambiente. No quadro Variáveis do Sistema procure pela variável PATH e edite-a. No final acrescente um ponto e vírgula e o caminho completo para a pasta bin do Dev-Cpp de seu sistema (Figura 4). Figura 4 - Configuração da Variável de sistema Path no Windows7. Para verificar se está funcionando, abra um prompt de comando DOS e digite gcc. A saída deverá ser como na Figura 5. Figura 5 - Testando a configuração do caminho do gcc no Windows7. Para compilar o programa mario.c com o gcc no Windows (vale também para o Linux), digite: gcc mario.c -o mario onde: gcc: é o nome do compilador; mario.c: é o nome do arquivo com o código fonte que será compilado; -o mario: indica o nome que será dado ao arquivo do código executável. 4

Se não houver erro de compilação, será gerado um arquivo chamado mario, o qual é o código executável. Nos ambientes Windows é comum acrescentar a extensão.exe aos arquivos executáveis, portanto, mesmo que não tenhamos colocado a extensão, o Windows vai acrescentar, veja na Figura 6. 2.3. Executando Figura 6 - Compilando o programa mario.c. Para executar o programa na linha de comando, é preciso criar um arquivo texto com as entradas, no formado definido pelo enunciado do problema. Para o exemplo do problema Jumping Mario, digite em um editor de textos (ou copie os dados de entrada do enunciado do problema) e salve com o nome mario.in na mesma pasta onde está o executável. Figura 7 - Arquivo de entrada de dados para teste do problema Jumping Mario. No prompt de comandos execute o programa da seguinte forma: mario < mario.in onde: mario: é o nome do executável do programa (não é necessário a extensão.exe); < : é o redirecionador de entrada; mario.in: é o nome do arquivo de entrada de dados. 5

O comando vai executar o programa e fazer toda a entrada de dados do arquivo mario.in. Veja a saída na Figura 8: Figura 8 - Executando o programa com redirecionamento da entrada. Note que aqui utilizamos exatamente os dados de entrada do enunciado do problema, e a saída corresponde à saída esperada do exemplo. Entretanto, é importante acrescentar mais testes, principalmente aqueles que testam os valores extremos do problema. 2.4. Verificando a Saída A saída do programa acima é pequena e fácil de verificar se está correta. Porém, em alguns casos a saída pode ser difícil de ser verificada a olho nu. Nestes casos, podemos utilizar uma ferramenta do sistema: o comando fc do Windows e o diff do Linux. Para tanto, primeiro é preciso criar um arquivo texto com a saída esperada para a execução do programa para os casos de testes. Assim, do mesmo modo como feito com o arquivo de entrada, digite no editor de texto a saída e grave na mesma pasta do executável do programa com o nome mario.out (Figura 9). Figura 9 - Arquivo de saída para os testes do problema Jumping Mario. Execute novamente o programa com o arquivo de entrada e gere um arquivo com a saída, digitando o seguinte comando: mario < entrada > saida 6

Note a presença do redirecionador de saída (>), o qual envia a saída da execução do programa para um arquivo chamado saida. Estando no ambiente Windows, execute o comando fc para fazer a comparação da saída da execução do programa (arquivo saida) com a saída esperada (arquivo mario.out). Como pode ser visto na Figura 10, o comando FC não encontrou diferença entre os arquivos comparados, o que mostra que a resposta gerada pela execução do programa é idêntica à resposta esperada para os testes executados. Figura 10 - Comparando a saída do programa com o arquivo de respostas com o comando FC. 3. Sistema de Correção Automática O sistema de correção automática utilizado para a maioria das competições de Maratona de Programação no Brasil é o BOCA (http://www.bombonera.org). Através dele podemos administrar toda a competição. Cada time recebe um usuário e senha para login no sistema, que permite submeter os programas para correção, além de ter acesso ao placar e a outras funcionalidades, conforme mostrado na Figura 11. Figura 11 - Interface principal do BOCA. 7

Na interface principal estão disponíveis as seguintes opções: Problems: mostra a descrição dos problemas e as cores dos balões (Figura 12); Figura 12 - Opção Problems. Runs: mostra todas as submissões feitas pelo time e os resultados (Figura 13); Figura 13 - Opção Runs. Score: mostra o placar da competição (Figura 14); Clarifications: interface para fazer perguntas aos juízes (Figura 15); Tasks: permite enviar um arquivo para ser impresso ou solicitar a presença de alguém do staff (Figura 16); Backups: permite fazer backup de seus programas no servidor (Figura 17); Options: aqui é possível trocar a senha de acesso ao sistema (Figura 18). 8

Figura 14 - Opção Score. Figura 15 - Opção Clarifications. Figura 16 - Opção Tasks. 9

Figura 17 - Opção Backups. 3.1. Submetendo a Solução Figura 18 - Opção Options. Após login no sistema, o time pode enviar uma solução para correção clicando na opção Runs. Na interface selecione a letra do problema, a linguagem de programação utilizada e escolha o arquivo fonte (neste exemplo, mario.c) e clique no botão Send (Figura 19). Após submeter a solução, a interface mostrará o status (Answer) como Not answered yet até que um juiz analise a correção e emita uma resposta (Figura 20). Na Figura 21 é mostrado o novo status após a correção. Neste caso a solução recebeu um YES, significando que a solução está correta e foi aceita (mais um balão para a equipe). 10

Figura 19 - Submetendo uma solução. Figura 20 - Status após submissão da solução. Figura 21 - Status após correção pelo juiz. 11

3.2. Entendendo o Score Além da classificação geral das equipes na competição, o Score também mostra detalhes do desempenho de cada equipe, e outras informações importantes. No canto superior direito é mostrado o tempo restante da competição em minutos (> 2713 minute(s) left). Nas colunas que mostram os problemas resolvidos por cada equipe, também podemos ver a quantidade de tentativas feitas e o tempo da tentativa cuja solução foi considerada correta. Por exemplo, na Figura 22 podemos ver que a equipe team2 obteve sucesso na solução do problema B na segunda tentativa feita após decorridos 75 minutos de competição (2/75). Lembrando que a cada submissão incorreta a equipe é punida com 20 minutos, o tempo total mostrado na última coluna é calculado somando-se o tempo de cada submissão mais 20 minutos por tentativa incorreta. Por exemplo, a equipe team2 resolveu 3 problemas num tempo total de 399 minutos (3 (399)). Neste caso, o cálculo do tempo (399 minutos) foi feito da seguinte forma: Problema A (2/47): 47 minutos + 20 minutos de punição por uma tentativa incorreta; Problema B (2/75): 75 minutos + 20 minutos de punição por uma tentativa incorreta; Problema C (1/237): 237 minutos; ------------------------------------------------------------------- TOTAL: 359 minutos + 40 minutos de punição = 399 minutos 3.3. Códigos de Erros Figura 22 - Entendendo as informações do Score. Os possíveis códigos de erro retornados após uma submissão são: Not answered yet: aguardando a análise do juiz; No - Compilation Error: o programa não compilou. Isso se deve muitas vezes ao fato de se utilizar bibliotecas não padrões da Linguagem. Por exemplo, o competidor cria e testa o programa no ambiente Windows usando o Dev-Cpp e faz uso da biblioteca conio.h, a qual não é padrão da Linguagem C e, como o sistema de correção automática executa em ambiente Unix, o programa não compila; 12

No - Runtime Error: o programa compilou, mas houve erro em tempo de execução. Embora o programa tenha executado corretamente para os casos de teste do exemplo, os juízes utilizam uma bateria de testes maior, com casos que exploram os limites extremos dos valores das variáveis. Erros típicos são: acesso a elementos inexistentes de um vetor (o vetor possui 1000 elementos e tentamos acessar o elemento 1001); erro de divisão por zero; estouro de memória, estouro de pilha do programa com chamadas recursivas excessivas, etc.; No - Time limit exceeded: quando o programa não é aceito por ultrapassar o limite de tempo estipulado para execução dos casos de teste. Isso acontece, por exemplo, quando algum caso de teste aplicado pelo sistema faz com que o programa entre em loop infinito; No - Incorrect output (ou Wrong Answer): o programa executou, mas a saída não está correta. Ou seja, para algum caso de teste na bateria de testes aplicada pelo juiz o programa está apresentando uma saída incorreta. Refaça os testes, utilizando casos de testes que explorem os valores extremos suportados pelas variáveis; No - Output format error (ou Presentation Error): o programa executou corretamente para a bateria de testes do juiz, porém a saída apresentada pelo programa difere do gabarito do juiz apenas no número de espaços em branco ou quebras de linhas; YES (ou ACCPTED): a solução foi aceita (subiu mais um balão para a equipe). 13