Tópicos Especiais em Programação

Documentos relacionados
BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Tóffolo 2011/1

Componentes da linguagem C++

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Algoritmos x Programação. Primeiros Passos na Linguagem C/C++ Como traduzir um algoritmo? Algoritmo original. Prof. Marcelo Cohen flash@inf

LINGUAGEM C UMA INTRODUÇÃO

Engenharia de Software

Conceitos básicos da linguagem C

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Programação científica C++

Computação L2. Arquivos. Observação: Material da Disciplina Computação Eletrônica CIN/UFPE.

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

MC-102 Aula 01. Instituto de Computação Unicamp

Algoritmos e Programação Estruturada

2 Um Primeiro Programa em C

3/19/2014. Compilador DEV C++ ENGENHARIAS LÓGICA DE PROGRAMAÇÃO Henry Lubanco/ Joelio Piraciaba

Aula 1 Tipo Abstrato de Dados

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM C/C++ Prof. Dr. Daniel Caetano

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

BCC202 - Estrutura de Dados I

CURSO DE PROGRAMAÇÃO EM JAVA

Prof. Esp. Adriano Carvalho

Algoritmos em Javascript

Curso de Programação Computadores

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

Tutorial de Matlab Francesco Franco

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Curso de Linguagem C

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Olimpíadas de Informática

1.2. Sistemas de Programação

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

INF 1005 Programação I

Todos os arquivos.c e.h criados (exigido código muito bem documentado!). O makefile.

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

O Processo de Programação

20 Caracteres - Tipo char

Introdução a Java. Hélder Nunes

Capítulo 2: Introdução à Linguagem C

Trabalho 3: Agenda de Tarefas

Exercícios de Fixação Pseudocódigo e Estruturas Básicas de Controle

Introdução aos Algoritmos e Estruturas de Dados 2011/2012

UFSM Introdução ao Dev-C++ Profa. Patrícia Pitthan. Introdução ao Dev-C++

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Cada cliente, necessariamente, sempre deve estar conectado a um Broker, e somente um;

Professor: Douglas Sousa Cursos de Computação

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

CURSO BÁSICO DE PROGRAMAÇÃO AULA 9. Introdução a linguagem C Estruturas de decisão

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Curso de C. Apresentação. Adriano Joaquim de Oliveira Cruz. Universidade Federal do Rio de Janeiro. 26 de outubro de 2015

1.1. Organização de um Sistema Computacional

TUTORIAL AMBIENTE WEB PORTUGOL

Introdução à Programação

5 Apresentando a linguagem C

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Introdução a Computação

Resolução de problemas e desenvolvimento de algoritmos

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

2. Representação Numérica

Algoritmos e Estruturas de Dados I 01/2013. Arquivos. Pedro O.S. Vaz de Melo

Lógica de Programação

JSP - ORIENTADO A OBJETOS

Pilhas. Profa Morganna Diniz

MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados

Estruturas (Registros)

Resumo da Matéria de Linguagem de Programação. Linguagem C

Algoritmo e Programação

Sistemas Operacionais e Introdução à Programação. Vetores e matrizes

Programação de Computadores Primeiros Passos Práticos em C++

Introdução ao Matlab. 1 Algumas regras e comandos do Matlab. 3 de março de Docente Responsável : Prof. Dr. Antônio C. Roque

PHP: Formulários e upload de múltiplos arquivos Por Alfred Reinold Baudisch 28 de fevereiro de 2006.

Algoritmos de Busca em Tabelas

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

OBS.: Usem as funções rand() e srand(). Qualquer duvida,

Introdução à Engenharia ENG1000

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

COMPILADORES E INTERPRETADORES

OBI2009 Caderno de Tarefas

A Linguagem Pascal e o Ambiente de Programação Dev-Pascal. Introdução à Ciência da Computação I

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA AMBIENTE DE PROGRAMAÇÃO. Prof. Dr. Daniel Caetano

Algoritmos e Estruturas de Dados II. Trabalho Prático 2

Manipulação de Arquivos

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Trabalho Prático 1 Revisão de Programação, Tipos Abstratos de Dados e Combinação de Alocação Estática e Dinâmica de Memória

SCC-210 Algoritmos Avançados

INF01056 Desafios de Programação

2ª Lista de Exercícios

Programação WEB I Estruturas de controle e repetição

NetBeans. Conhecendo um pouco da IDE

Problemas insolúveis. Um exemplo simples e concreto

Programação de Computadores I. Conhecendo a IDE Code::Blocks

Transcrição:

Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação Universidade Federal do Espírito Santo CCA UFES Tópicos Especiais em Programação

Sumário Metodologia; Distribuição das notas; Referências adotadas; Justificativa; Sistema de julgamento dos problemas; Linguagens de programação; Padrão de Entrada e Saída; Dicas; Tipos elementares de dados; Criação das Equipes. 2

Metodologia Em cada semana do semestre serão ministradas duas aulas, sendo: Uma aula teórica abordando a aplicação dos tópicos para a solução dos problemas computacionais referentes; Uma aula prática com aplicação dos tópicos abordados teoricamente. Nessa aula serão abordados: 2 problemas fáceis (F); 1 problema intermediário (I); 1 problema difícil (D). Linguagem adotada: C++ 3

Distribuição das Notas A nota será uma média ponderada dos problemas resolvidos: [ 14 2 (0,30 F +0,30 F +0,40 I +0,2 D) sendo: (14 2+1) F: problema fácil resolvido; I: problema intermediário resolvido; D: problema difícil resolvido; MIP: maratona interna de programação. ] 8+2 ( porcentagemde acertos ) na MIP 4

Referências Bibliográficas [1] HALIM, S.; HALIM, F. Competitive Programming: Increasing the Lower Bound of Programming Contests. Lulu, 2010. [2] SKIENA Steven S.; REVILLA Miguel A. Programming Challenges: The Programming Contest Training Manual. Springer: 2003. [3] MUSSER, David R.; DERGE, Gillmer J.; SAINI, Atul. C++ Programming with the Standard Template Library. Addison-Wesley: 2001. 5

Justificativa Os jogos, quebra-cabeças e desafios existentes nos problemas das competições de programação internacionais trazem formas de: Melhorar sua habilidades algorítmicas; Melhorar suas técnicas de programação; Ter prazer em: Entender técnicas já utilizadas em diversos programas existentes; Em obter o máximo de desempenho dos programas; Em obter o conhecimento necessário para descodificar segredos, penetrar sistemas... Afinal, a questão espiritual para a elegância pode transformar um hacker em um artista. 6

Sistema de julgamento dos problemas Universidade Federal do Espírito Santo CCA UFES Os problemas originam-se da Universidade de Valladolid (UVa). Há dois locais de julgamentos: <http://www.programming-challenges.com> <http://online-judge.uva.es> Os problemas serão utilizados para: Ilustrar conceitos importantes na programação; Entender de forma concreta os algoritmos e técnicas utilizadas; Aplicar os conceitos de matemática, geometria e computação em histórias divertidas de se programar. Os assuntos são importantes mesmo se você não quiser competir nas maratonas, pois tratá métodos úteis em qualquer contexto de programação. 7

Respostas dos julgamentos Accepted (AC): Programa correto e executa dentro dos limites de tempo e de memória. Presentation Error (PE): A saída do programa está correta, mas não está no formato correto. Você deve verificar espaços, formatação, etc. Accepted (PE): Programa correto, mas com uma apresentação contendo um erro mínimo, como um espaço em branco ou uma nova linha a mais. Wrong Answer (WA): O programa retornou uma resposta incorreta. Deve ser realizada uma correção do código para enviar novamente. Compile Error (CE): O código fonte não pode ser compilado. As mensagens de erro da compilação serão exibidas. 8

Respostas dos julgamentos Runtime Error (RE): O programa falhou durante a execução devido a uma falha de segmentação, ou exceção de ponto flutuante, ou algum problema similar. Deve-se verificar os limites dos vetores, seu acesso, se houve divisões por zero, etc. Time Limit Exceeded (TL): O programa ultrapassou o tempo limite. Memory Limit Exceeded (ML): O programa tentou utilizar mais memória do que podia. Output Limit Exceeded (OL): O programa tentou imprimir muito mais saídas do que era necessário. Geralmente acontece quando o programa entra em loop infinito. Restricted Function (RF): O programa tentou utilizar uma chamada de sistema ilegal, como fork() ou fopen(). Comporte-se!! Submission Error (SE): Um ou mais campos de submissão não foram corretamente informados. 9

Respostas dos julgamentos No enunciado do problema, Somente um exemplo será apresentado; Serão apresentados todos os limites possíveis; Será informado como deverá ser a entrada e como deverá ser escrita a saída. Porém, no julgamento serão realizados todos os testes, ou seja, utilizando todos os limites e possibilidades de erros. Atenção: Se o programa falhar para um único teste realizado no julgamento, esse erro específico não será informado para você. Somente será enviada uma mensagem falando que seu programa está errado. 10

Linguagens de Programação Universidade Federal do Espírito Santo CCA UFES Qual linguagem utilizar? R: a que você mais conhece e domina. Porém: 11

Padrão de Entrada e Saída Universidade Federal do Espírito Santo CCA UFES As maratonas de programação não aceitam a leitura ou escrita de arquivos. Então, deve-se ler e escrever da saída padrão. Exemplos: #include <stdio.h> int main() { long p,q,r; while ( scanf("%ld %ld",&p,&q)!= EOF) { if (q > p) r = q p; else r = p q; printf("%ld\n",r); } } #include <iostream> using namespace std; int main() { long p,q,r; while (cin >> p >> q) { if (q > p) r=q p; else r=p q; cout << r << endl; } } 12

Compilando e testando Crie um arquivo texto com as entradas. Ex.: entradas_prog1.txt Escreva e compile seu código-fonte: gcc prog1.c o prog1 ou g++ prog1.cpp o prog1 Teste-o com as entradas:./prog1 < entradas_prog1.txt 13

Dicas Escreva os comentários primeiro: Antes de escrever as sentenças que você supõe fazer, escreva primeiro seus comentários. Isso é importante, pois se você não conseguir escrever seu comentário de forma fácil, você provavelmente não entende corretamente o que seu programa/função fará/faz. Documente suas variáveis: Escreva um comentário de uma linha para cada variável. Se você não souber descrevê-la facilmente, você provavelmente não sabe porquê ela está ali. Utilize constantes com cuidado: Declare-as no topo do seu programa. Utilize macros: Ex.: #define PI 3.141592653589793 Utilize as flags de compilação para Warnings e não envie nenhum código com warnings, pois eles sempre podem ser evitados. 14

Dicas Utilize enum e novos tipos somente se necessário. Escreva funções para evitar redundâncias e erros de código. Faça a correção de erros mais fácil: Aprenda a utilizar o ambiente de debug do seu sistema. Imprima as variáveis com seu nome. Utilize "\n\n" no fim de printf's utilizados para debug, pois isso garante a impressão da linguagem. Também pode-se utilizar o fflush(stdout). Aprenda a utilizar o man do GNU/Linux. Sempre teste a leitura de suas variáveis para ver se estão sendo feitas corretamente. Teste se o tipo de dado escolhido consegue abrigar os valores máximos dos seus problemas. 15

Dicas Sempre escreva as entradas dos testes primeiro, ou seja, nunca perca tempo digitando as entradas em cada teste que realizar do programa. Escreva várias entradas utilizando sempre todos os limites possíveis, isso ajuda a encontrar erros. Sempre declare os vetores com uma posição a mais, isso pode evitar problemas na implementação. Leia todos os problemas antes de fazê-los. Classifique-os então quanto ao seus níveis de dificuldade. Após isso, deixe que uma pessoa da equipe se concentre em fazer os problemas mais simples. Messe momento, os outros dois podem fazer o algoritmo de um dos problemas mais difíceis. Procure identificar qual o melhor método que se encaixa na solução do problema. Após isso, copie seu código e adapte-o ao seu problema. 16

Tipos elementares de dados Tipos básicos de dados, como arrays, tem uma importante vantagem sobre estruturas mais sofisticadas como listas encadeadas: Simplesmente por serem mais simples; Erros de ponteiros não podem ocorrer com arrays estáticos. Mesmo que balanceamento de árvores binárias, manipulação de exceções, processamento paralelo e outros modelos de manipulação de dados sejam importantes, eles não são necessários para fazer um programa correto capaz de resolver um problema simples. 17

Criação das Equipes e mão na massa... 18