Programação -- Dicas e Outras...

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

Transcript of Programação -- Dicas e Outras...

Page 1: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Programação – Dicas e Outras Coisas

Tiago da Conceição MotaVinícius Fernandes dos Santos

Tópicos Especiais em Programação

2008-1

Page 2: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

Page 3: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesNomes 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.

Page 4: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesNomes 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.

Page 5: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesNomes 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.

Page 6: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesNomes 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.

Page 7: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesNomes 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.

Page 8: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

for ( rad iusOfTheCi rc le = 0 ;rad iusOfTheCi rc le < maxRadiusOfTheCircle ;rad iusOfTheCi rc le ++)

{/∗ . . . ∗ /

}

Page 9: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesComentá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.

Page 10: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesComentá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.

Page 11: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesComentá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.

Page 12: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesEstá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.

Page 13: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesEstá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.

Page 14: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesEstá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.

Page 15: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesEstá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.

Page 16: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

#define MAXN 105

/∗ . . . ∗ /

i n t v [MAXN] ;i n t m[MAXN] [MAXN] ;i n t n ;

Page 17: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesDepuração

• Durante a competição não há tempo de executar oprograma passo a passo.

• Inserir printf’s de depuração em pontos estratégicos docódigo.

• Utilizar o depurador apenas para encontrar a linha e oestado do programa num erro em tempo de execução.

Page 18: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesDepuração

• Durante a competição não há tempo de executar oprograma passo a passo.

• Inserir printf’s de depuração em pontos estratégicos docódigo.

• Utilizar o depurador apenas para encontrar a linha e oestado do programa num erro em tempo de execução.

Page 19: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesDepuração

• Durante a competição não há tempo de executar oprograma passo a passo.

• Inserir printf’s de depuração em pontos estratégicos docódigo.

• Utilizar o depurador apenas para encontrar a linha e oestado do programa num erro em tempo de execução.

Page 20: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesDepuração

• Durante a competição não há tempo de executar oprograma passo a passo.

• Inserir printf’s de depuração em pontos estratégicos docódigo.

• Utilizar o depurador apenas para encontrar a linha e oestado do programa num erro em tempo de execução.

Page 21: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesDepuraçã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 ) ;

}}

Page 22: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesLegibilidade

• 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.

Page 23: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesLegibilidade

• 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.

Page 24: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesLegibilidade

• 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 comdeterminado objetivo e para organizar o código.

• Utilize estruturas e tipos definidos para organizar osdados.

Page 25: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesLegibilidade

• 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 osdados.

Page 26: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesLegibilidade

• 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.

Page 27: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesLegibilidade

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;

}

Page 28: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesLegibilidade

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 ) ) ) ) ;

}

Page 29: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesLegibilidade

i n t main ( void ){

i n t n ;Ponto p1 , p2 ;

while ( 1 ){

scanf ( "%d " , &n ) ;i f ( n == 0){

break ;}

Page 30: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Dicas para CompetiçõesLegibilidade

lePonto (&p1 ) ;lePonto (&p2 ) ;

p r i n t f ( " %.3 f \ n " , d i s t ( p1 , p2 ) ) ;}

return 0;}

Page 31: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

Page 32: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

• printf("[Formato(s)]", ...);

• Formato:% [Flags] [[Tamanho] . [Precisão]] [Modificador] Conversor

Page 33: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

• printf("[Formato(s)]", ...);

• Formato:% [Flags] [[Tamanho] . [Precisão]] [Modificador] Conversor

Page 34: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

• printf("[Formato(s)]", ...);

• Formato:% [Flags] [[Tamanho] . [Precisão]] [Modificador] Conversor

Page 35: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

Conversor Descriçãod int (decimal)o int (octal)x int (hexadecimal – abcdef)X int (hexadecimal – ABCDEF)u unsignedf doublec chars String (vetor de char)

Page 36: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

Modificador Descriçãoh shortl longll long long

Page 37: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

• Tamanho do campo: mínimo de caracteres a seremescritos.

• Precisão: caracteres a serem escritos depois do . (ponto).

Page 38: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

Flag Descrição0 Preenche com zeros à esquerda- Justifica à esquerda (ignora flag 0)

Deixa espaço em branco para sinal positivo+ Força o aparecimento do sinal

Page 39: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

Seqüência Descrição%% %\" "\\ \\n Nova linha\t Tabulação horizontal

Page 40: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

• 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, ...);

Page 41: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

• 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, ...);

Page 42: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

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);

Page 43: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

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);

Page 44: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

• 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 ] ) ;}

Page 45: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasprintf

• 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 ] ) ;}

Page 46: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

Conversor Descriçãod int (decimal)o int (octal)x int (hexadecimal – abcdef)X int (hexadecimal – ABCDEF)u unsignedf floatc chars String (ignora espaços brancos e lê

até espaço branco)[ Lê apenas um determinado conjunto

de caracteres

Page 47: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

Conversor Descriçãod int (decimal)o int (octal)x int (hexadecimal – abcdef)X int (hexadecimal – ABCDEF)u unsignedf floatc chars String (ignora espaços brancos e lê

até espaço branco)[ Lê apenas um determinado conjunto

de caracteres

Page 48: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

Modificador Descriçãoh shortl longll long long

Page 49: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

• Espaço instrui a ler todos os caracteres brancos até umnã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.

Page 50: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

• Espaço instrui a ler todos os caracteres brancos até umnã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.

Page 51: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

• Espaço instrui a ler todos os caracteres brancos até umnã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.

Page 52: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

• 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.

Page 53: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

• 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, ...);

Page 54: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

• 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, ...);

Page 55: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

• Lendo valores para n da entrada até que esta termine:

while ( scanf ( "%d " , &n ) == 1){

/∗ . . . ∗ /}

Page 56: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Entrada e Saída Avançadasscanf

• Lendo lista de números, separados por vírgula, até o finalda linha:

do{

scanf ( "%d%c " , &a , &c ) ;/∗ . . . ∗ /

} while ( c != ’ \ n ’ ) ;

• Lendo todos os caracteres até o final da linha:

scanf ( " %[^\n]%∗c " , s ) ;

Page 57: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

Page 58: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Funções ÚteisFunçõ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 0x33333333memset ( v , INFINITO , sizeof ( v ) ) ;

Page 59: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Funções ÚteisFunçõ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 0x33333333memset ( v , INFINITO , sizeof ( v ) ) ;

Page 60: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Funções ÚteisFunçõ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 0x33333333memset ( v , INFINITO , sizeof ( v ) ) ;

Page 61: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

• qsort(v, n, sizeof(v[0]), fnccmp);

• Ordena o vetor v, de n elementos, utilizando a função decomparação fnccmp.

Page 62: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

• qsort(v, n, sizeof(v[0]), fnccmp);

• Ordena o vetor v, de n elementos, utilizando a função decomparação fnccmp.

Page 63: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Funções ÚteisFunçõ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;}

Page 64: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Funções ÚteisFunçõ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 NULLcaso o conteúdo de key não seja encontrado em v.

Page 65: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Funções ÚteisFunçõ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 ] ) ) ;}

qso r t ( v , n , sizeof ( v [ 0 ] ) , intcmp ) ;

Page 66: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Funções ÚteisFunçõ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 ) ;}

}

Page 67: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

• tam = strlen(s);

• Retorna o tamanho da string s.

• cmp = strcmp(s1, s2);

• Compara as strings s1 e s2.

Page 68: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

• tam = strlen(s);

• Retorna o tamanho da string s.

• cmp = strcmp(s1, s2);

• Compara as strings s1 e s2.

Page 69: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

• tam = strlen(s);

• Retorna o tamanho da string s.

• cmp = strcmp(s1, s2);

• Compara as strings s1 e s2.

Page 70: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Funções ÚteisFunçõ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.

Page 71: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Funções ÚteisFunçõ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.

Page 72: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

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

• r = strtok(s1, s2);

• Separa a string em s1 em tokens, delimitados peloscaracteres em s2.

• Chamadas subseqüentes de strtok são feitas com s1tendo valor NULL.

• Retorna um ponteiro para o próximo token, ou NULL casonão haja mais tokens.

• s2 pode ser diferente a cada chamada.• Cuidado! strtok altera a string s1.

Page 73: Programação -- Dicas e Outras Coisasusuarios.upf.br/~mcpinto/analise/dicas_programacao_maratona.pdf · Programação – Dicas e Outras Coisas Tiago da Conceição Mota Vinícius

Algumas Funções ÚteisFunçõ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 ) ;

}