Programação Dicas e Outras Coisas

Documentos relacionados
Caracteres e Cadeias de Caracteres

INF 1620 P2-14/10/05 Questão 1 Nome:

Módulo 7 Cadeias de Caracteres

Algoritmos e Programação

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Programação de Computadores II. Cap. 7 Cadeias de Caracteres

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Computação 2. Aula 3. Diego Addan Vetores de caracteres (strings)

Linguagens de Programação I

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

A Linguagem C. A forma de um programa em C

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

INF 1620 P3-25/11/05 Questão 1 Nome:

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha

INF 1620 P4-01/07/08 Questão 1 Nome:

Métodos Computacionais em Física

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

INF 1620 P2-01/11/03 Questão 1 Nome:

3. Linguagem de Programação C

CURSO BÁSICO DE PROGRAMAÇÃO AULA 15. Revisão Vetores e Matrizes Trabalho

INF 1620 P2-17/05/08 Questão 1 Nome:

Caracteres. Caracteres são representados através de códigos numéricos. Tabela de códigos: Define correspondência entre caracteres e códigos numéricos

Cadeias de Caracteres (Strings)

ECT1203 Linguagem de Programação

INF 1620 P4 30/06/07 Questão 1 Nome:

modificador h instrui a função printf( ) a exibir um short int. Portanto, %hu indica que o dado é do tipo short unsigned int.

INF 1620 P4-27/06/02 Questão 1 Nome:

Universidade Federal do Espírito Santo. Programação I Tipos de Dados Básicos - C Professora: Norminda Luiza

A linguagem C (visão histórica)

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de Caracteres

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Linguagem C. André Tavares da Silva.

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Char e Strings de Caracteres

INF 1620 P3-27/11/04 Questão 1 Nome:

Tratamento de Caracteres

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

ponteiros INF Programação I Prof. Roberto Azevedo

Programação científica C++

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Char e Strings de Caracteres

Métodos Computacionais. Strings (Vetor de Caracteres)

Linguagens de Programação

INF 1620 P4 11/12/06 Questão 1 Nome:

Aula 9 Oficina de Programação Strings. Profa. Elaine Faria UFU

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo

Disciplina de Algoritmos e Programação

Linguagem C: Introdução

Programação de Computadores II. Cap. 7 Cadeias de Caracteres 1/2

Algoritmos e Lógica de Programação 80 horas // 4 h/semana. Para começar... Strings. Para começar... Strings. Exemplo...

INF 1620 P3-21/06/08 Questão 1 Nome:

cadeia de caracteres (string) INF Programação I Prof. Roberto Azevedo

Linguagem C Princípios Básicos (parte 1)

Programação Estruturada

Introdução à Linguagem C

RESUMO DE CONCEITOS BÁSICOS DE C

Linguagem de Programação C

P2 Programação II Departamento de Informática/PUC-Rio

4. Estruturas Fundamentais de Programação em C

Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES. Linguagem C. Linguagem C Estrutura Básica. Constante (literais) Linguagem C Primeiro Programa

INF 1620 P3-06/12/03 Questão 1 Nome:

Entender o problema Encontrar um algoritmo para resolvê-lo. Implementar o algoritmo numa linguagem de programação

C++ - Matrizes. Observ.: C++ não avisa quando o limite de uma matriz foi excedido. Providenciar a verificação é responsabilidade do programador.

Introdução à Programação em C Input / Output

Departamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I. Aula 13 Arquivos

Introdução a Programação. Strings (Vetor de Caracteres)

INF 1620 P1-16/09/06 Questão 1 Nome:

Introdução à Programação. Strings

SCC-211 Lab. Algoritmos Avançados

Introdução à Linguagem de Programação C: Variáveis, Constantes, Expressões, Atribuição, Tipos de dados, Entrada e Saída de Dados

INF 1007 Programação II

Programação de Computadores II. Cap. 16 Ordenação

CURSO BÁSICO DE PROGRAMAÇÃO AULA 11. Revisão Aula Anterior Vetores Cadeia de Caracteres

INF 1620 P2-23/10/04 Questão 1 Nome:

Apêndice B. Cadeias de Caracteres (Strings)

Módulo 16 - Ordenação

INF 1620 P3-29/06/04 Questão 1 Nome:

INF 1005 Programação I

DAS5102 Fundamentos da Estrutura da Informação

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

Arquivos em C. Material da Prof. Ana Eliza

Vetores e Strings. 4. Funções Básicas para manipulação de Strings. A função gets() lê uma string do teclado. Sua forma geral é:

Algoritmos Avançados

USP - ICMC - SSC SSC o. Semestre Disciplina de Introdução à Computação para Engenharia Ambiental

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010

3. Linguagem de Programação C

Variáveis e Comandos de Atribuição

Introdução a C. Para saber quais os procedimento ou funções que existem em cada biblioteca, acesse

Mestrado em Engenharia Física Tecnológica

Introdução à Programação Aula 10. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Curso Básico de Programação Aula 11. Revisão Aula Anterior Laços de Repetição While; Do-While; For.

TÉCNICAS DE PROGRAMAÇÃO

Linguagem C: Tipos básicos de dados escalares e cadeia de caracteres. Prof. Leonardo Barreto Campos 1

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

Linguagem C: Variáveis e Operadores. Prof. Leonardo Barreto Campos 1

INF 1620 P4-13/12/01 Questão 1 Nome:

Conceitos Básicos de C

Transcrição:

Programação Dicas e Outras Coisas Tiago da Conceição Mota Vinícius Fernandes dos Santos Tópicos Especiais em Programação 2008-1

Algumas Dicas para Competições Entrada e Saída Avançadas Algumas Funções Úteis

Algumas Dicas para Competições Nomes de Variáveis e Funções

Mais curtos possíveis... Algumas Dicas para Competições Nomes de Variáveis e Funções

Algumas Dicas para Competições Nomes de Variáveis e Funções Mais curtos possíveis...... mas que ainda expressem seu significado.

Algumas Dicas para Competições Nomes de Variáveis e Funções Mais curtos possíveis...... mas que ainda expressem seu significado. Variáveis mais usadas: apenas 1 letra. Demais variáveis: 2 ou 3 caracteres.

Algumas Dicas para Competições Nomes de Variáveis e Funções Mais curtos possíveis...... mas que ainda expressem seu significado. Variáveis mais usadas: apenas 1 letra. Demais variáveis: 2 ou 3 caracteres. Funções: em torno de 5 caracteres.

Algumas Dicas para Competições Nomes de Variáveis e Funções for ( radiusofthecircle = 0; radiusofthecircle < maxradiusofthecircle ; radiusofthecircle ++) { /... / }

Algumas Dicas para Competições Comentários

Algumas Dicas para Competições Comentários Não coloque comentários em seus programas.

Algumas Dicas para Competições Comentários Não coloque comentários em seus programas. Algumas exceções: Trecho de código de objetivo não tão claro. Significado das dimensões de uma matriz. Apenas uma linha de comentário é suficiente.

Algumas Dicas para Competições Estático vs. Dinâmico

Algumas Dicas para Competições Estático vs. Dinâmico Praticamente todos os problemas deixam claro os limites.

Algumas Dicas para Competições Estático vs. Dinâmico Praticamente todos os problemas deixam claro os limites. Use alocação estática sempre que puder.

Algumas Dicas para Competições Estático vs. Dinâmico Praticamente todos os problemas deixam claro os limites. Use alocação estática sempre que puder. Mais chances de erros com alocação dinâmica, principalmente manipulando ponteiros.

Algumas Dicas para Competições Estático vs. Dinâmico # define MAXN 105 /... / i n t v [MAXN] ; i n t m[maxn] [MAXN] ; i n t n ;

Algumas Dicas para Competições Depuração

Algumas Dicas para Competições Depuração Durante a competição não há tempo de executar o programa passo a passo.

Algumas Dicas para Competições Depuração Durante a competição não há tempo de executar o programa passo a passo. Inserir printf s de depuração em pontos estratégicos do código.

Algumas Dicas para Competições Depuração Durante a competição não há tempo de executar o programa passo a passo. Inserir printf s de depuração em pontos estratégicos do código. Utilizar o depurador apenas para encontrar a linha e o estado do programa num erro em tempo de execução.

Algumas Dicas para Competições Depuração for ( i = 0; i < n ; i ++) { for ( j = ( i + 1 ) ; j < n ; j ++) { p r i n t f ( " [%d,%d ] ", i, j ) ; p r i n t f ( "%d \ n ", i j ) ; } }

Algumas Dicas para Competições Legibilidade

Algumas Dicas para Competições Legibilidade Não economize espaços e parênteses em expressões.

Algumas Dicas para Competições Legibilidade Não economize espaços e parênteses em expressões. Não utilize construções obscuras.

Algumas Dicas para Competições Legibilidade Não economize espaços e parênteses em expressões. Não utilize construções obscuras. Utilize funções para substituir trechos de código com determinado objetivo e para organizar o código.

Algumas Dicas para Competições Legibilidade Não economize espaços e parênteses em expressões. Não utilize construções obscuras. Utilize funções para substituir trechos de código com determinado objetivo e para organizar o código. Utilize estruturas e tipos definidos para organizar os dados.

Algumas Dicas para Competições Legibilidade i n t main ( void ) { i n t n ; double x1, x2, y1, y2 ; while ( 1 ) { scanf ( "%d ",&n ) ; i f (! n ) break ; scanf ( "%l f%l f ",&x1,& y1 ) ; scanf ( "%l f%l f ",&x2,& y2 ) ; p r i n t f ( " %.3 f \ n ", s q r t ( ( x1 x2 ) ( x1 x2 ) + ( y1 y2 ) ( y1 y2 ) ) ) ; } return 0; }

Algumas Dicas para Competições Legibilidade typedef struct _Ponto { double x, y ; } Ponto ; void leponto ( Ponto p ) { scanf ( "%l f%l f ", &(p >x ), &(p >y ) ) ; } double d i s t ( Ponto p1, Ponto p2 ) { return ( s q r t ( ( ( p1. x p2. x ) ( p1. x p2. x ) ) + ( ( p1. y p2. y ) ( p1. y p2. y ) ) ) ) ; }

Algumas Dicas para Competições Legibilidade i n t main ( void ) { i n t n ; Ponto p1, p2 ; while ( 1 ) { scanf ( "%d ", &n ) ; i f ( n == 0) { break ; }

Algumas Dicas para Competições Legibilidade leponto (&p1 ) ; leponto (&p2 ) ; } p r i n t f ( " %.3 f \ n ", d i s t ( p1, p2 ) ) ; } return 0;

Algumas Dicas para Competições Entrada e Saída Avançadas Algumas Funções Úteis

Entrada e Saída Avançadas printf

printf("[formato(s)]",...); Entrada e Saída Avançadas printf

Entrada e Saída Avançadas printf printf("[formato(s)]",...); Formato: % [Flags] [[Tamanho]. [Precisão]] [Modificador] Conversor

Entrada e Saída Avançadas printf Conversor d o x X u f c s Descrição int (decimal) int (octal) int (hexadecimal abcdef) int (hexadecimal ABCDEF) unsigned double char String (vetor de char)

Entrada e Saída Avançadas printf Modificador Descrição h short l long ll long long

Entrada e Saída Avançadas printf Tamanho do campo: mínimo de caracteres a serem escritos. Precisão: caracteres a serem escritos depois do. (ponto).

Entrada e Saída Avançadas printf Flag Descrição 0 Preenche com zeros à esquerda - Justifica à esquerda (ignora flag 0) Deixa espaço em branco para sinal positivo + Força o aparecimento do sinal

Entrada e Saída Avançadas printf Seqüência Descrição %% % \" " \\ \ \n Nova linha \t Tabulação horizontal

Entrada e Saída Avançadas printf Retorna o número de caracteres escritos. Valor de retorno pode ser útil para o sprintf.

Entrada e Saída Avançadas printf Retorna o número de caracteres escritos. Valor de retorno pode ser útil para o sprintf. Versão para escrita em strings: sprintf(s, fmt,...);

p r i n t f ( "%d %d \ n ", 123, 456); p r i n t f ( "%5d %5d \ n ", 123, 456); p r i n t f ( "%05d %05d \ n ", 123, 456); p r i n t f ( "% 5d % 5d \ n ", 123, 456); p r i n t f ( "%0 5d %0 5d \ n ", 123, 456); p r i n t f ( "% 5d % 5d \ n ", 123, 456); p r i n t f ( "%0+5d %0+5d \ n ", 123, 456); p r i n t f ( "% +5d % +5d \ n ", 123, 456); Entrada e Saída Avançadas printf

p r i n t f ( "%f \ n ", 1234.5678); p r i n t f ( " %.3 f \ n ", 1234.5678); p r i n t f ( " %8.2 f \ n ", 1234.5678); p r i n t f ( " %08.2 f \ n ", 1234.5678); p r i n t f ( "% 8.2 f \ n ", 1234.5678); Entrada e Saída Avançadas printf

Entrada e Saída Avançadas printf Escrevendo uma lista de inteiros, separados por espaço, na string s:

Entrada e Saída Avançadas printf Escrevendo uma lista de inteiros, separados por espaço, na string s: esc = s p r i n t f ( s, "%d ", v [ 0 ] ) ; for ( i = 1; i < n ; i ++) { esc += s p r i n t f ( s + esc, " %d ", v [ i ] ) ; }

Entrada e Saída Avançadas scanf

Entrada e Saída Avançadas scanf Conversor d o x X u f c s Descrição int (decimal) int (octal) int (hexadecimal abcdef) int (hexadecimal ABCDEF) unsigned float char String (ignora espaços brancos e lê até espaço branco) [ Lê apenas um determinado conjunto de caracteres

Entrada e Saída Avançadas scanf Modificador Descrição h short l long ll long long

Entrada e Saída Avançadas scanf Espaço instrui a ler todos os caracteres brancos até um não-branco. Demais caracteres instruem a ler o próximo caracter.

Entrada e Saída Avançadas scanf Espaço instrui a ler todos os caracteres brancos até um não-branco. Demais caracteres instruem a ler o próximo caracter. Tamanho do campo: máximo de caracteres a serem lidos.

Entrada e Saída Avançadas scanf Espaço instrui a ler todos os caracteres brancos até um não-branco. Demais caracteres instruem a ler o próximo caracter. Tamanho do campo: máximo de caracteres a serem lidos. Flag *: lê o elemento mas não o armazena.

Entrada e Saída Avançadas scanf Conversor [: Seqüência de caracteres terminada por ] corresponde ao conjunto a ser lido. Para incluir o ], coloque-o antes de todos os outros caracteres (e encerre com outro ]). Caracter ˆ no início da seqüência indica que o conjunto não contém os caracteres especificados. Utilize - para intervalos de caracteres.

Entrada e Saída Avançadas scanf Retorna o número de elementos lidos. Não conta os marcados com a flag *. Retorna EOF em caso de término de entrada.

Entrada e Saída Avançadas scanf Retorna o número de elementos lidos. Não conta os marcados com a flag *. Retorna EOF em caso de término de entrada. Versão para leitura a partir de strings: sscanf(s, fmt,...);

Entrada e Saída Avançadas scanf Lendo valores para n da entrada até que esta termine: while ( scanf ( "%d ", &n ) == 1) { /... / }

Entrada e Saída Avançadas scanf Lendo lista de números, separados por vírgula, até o final da linha: do { scanf ( "%d%c ", &a, &c ) ; /... / } while ( c!= \ n ) ; Lendo todos os caracteres até o final da linha: scanf ( " %[^\n]% c ", s ) ;

Algumas Dicas para Competições Entrada e Saída Avançadas Algumas Funções Úteis

Algumas Funções Úteis Funções Genéricas

Algumas Funções Úteis Funções Genéricas memset(v, b, sizeof(v)); Preenche com o byte b todo o vetor v.

Algumas Funções Úteis Funções Genéricas memset(v, b, sizeof(v)); Preenche com o byte b todo o vetor v. Exemplos: memset ( v, 0, sizeof ( v ) ) ; memset ( v, 0xFF, sizeof ( v ) ) ; msmset ( v, 1, sizeof ( v ) ) ; # define INFINITO 0x33333333 memset ( v, INFINITO, sizeof ( v ) ) ;

Algumas Funções Úteis Funções de Ordenação e Busca

Algumas Funções Úteis Funções de Ordenação e Busca qsort(v, n, sizeof(v[0]), fnccmp); Ordena o vetor v, de n elementos, utilizando a função de comparação fnccmp.

Algumas Funções Úteis Funções de Ordenação e Busca i n t intcmp ( const void e1, const void e2 ) { i n t a1, a2 ; a1 = ( i n t ) e1 ; a2 = ( i n t ) e2 ; } i f ( a1 < a2 ) return 1; i f ( a1 > a2 ) return 1; return 0;

Algumas Funções Úteis Funções de Ordenação e Busca elem = bsearch(key, v, n, sizeof(v[0]), fnccmp); Procura pela chave key no vetor v de n elementos, utilizando a função de comparação fnccmp. Retorna um ponteiro para o elemento achado, ou NULL caso o conteúdo de key não seja encontrado em v.

Algumas Funções Úteis Funções de Ordenação e Busca i n t v [MAXN] ; i n t n ; i n t key, elem ; scanf ( "%d ", &n ) ; for ( i = 0; i < n ; i ++) { scanf ( "%d ", &(v [ i ] ) ) ; } q s o r t ( v, n, sizeof ( v [ 0 ] ), intcmp ) ;

Algumas Funções Úteis Funções de Ordenação e Busca while ( scanf ( "%d ", &key ) == 1) { elem = bsearch (&key, v, n, sizeof ( v [ 0 ] ), intcmp ) ; i f ( elem == NULL) { p r i n t f ( "%d nao encontrado. \ n ", key ) ; } else { p r i n t f ( "%d encontrado. \ n ", key ) ; } }

Algumas Funções Úteis Funções para Tratamento de String

Algumas Funções Úteis Funções para Tratamento de String tam = strlen(s); Retorna o tamanho da string s.

Algumas Funções Úteis Funções para Tratamento de String tam = strlen(s); Retorna o tamanho da string s. cmp = strcmp(s1, s2); Compara as strings s1 e s2.

Algumas Funções Úteis Funções para Tratamento de String strcpy(s1, s2); Copia a string em s2 para s1.

Algumas Funções Úteis Funções para Tratamento de String strcpy(s1, s2); Copia a string em s2 para s1. strcat(s1, s2); Concatena a string em s2 ao final string s1.

Algumas Funções Úteis Funções para Tratamento de String r = strtok(s1, s2); Separa a string em s1 em tokens, delimitados pelos caracteres em s2. Chamadas subseqüentes de strtok são feitas com s1 tendo valor NULL. Retorna um ponteiro para o próximo token, ou NULL caso não haja mais tokens. s2 pode ser diferente a cada chamada. Cuidado! strtok altera a string s1.

Algumas Funções Úteis Funções para Tratamento de String char s1 [MAXS], s2 [MAXS], r ; scanf ( "%s%s ", s1, s2 ) ; for ( r = s t r t o k ( s1, s2 ) ; r!= NULL ; r = s t r t o k (NULL, s2 ) ) { p r i n t f ( "%s \ n ", r ) ; }