Professional Documents
Culture Documents
estruturas de dados
Entender os limites do computador
Estruturas de dados
Listas, filas, pilhas e rvores
Parte 2
Prova 2
Trabalho prtico 2
Mtodos de ordenao
Quicksort, heapsort, etc
Parte 1
Prova 1
Trabalho prtico 1
Mtodos de pesquisa
Hashing, rvores balanceadas
Parte 3
Prova 3
Trabalho prtico 3
Projeto de Algoritmos
Nvio Ziviani
Introduction to Algorithms
Cormen, Leiserson, Rivest, Stein
Algorithms
Robert Sedgewick e Kevin Wayne
Linguagem de programao: C
CodeBlocks
GCC
Eficincia
Construes similares a instrues de mquina
Vrias aplicaes
Incluso de cabealhos
Declaraes globais
Definies de funes
#include <stdio.h>
char *mensagem = hello, world!\n;
int main(void) {
puts(mensagem);
return 0;
}
data.h
struct date {
int day; int month;
int year;
#include data.h
}
data.c
Compilador
date.h
...
data.o
data.h
struct date {
int day; int month;
int year;
}#include data.h
principal.c
Compilador
struct
int main(int
date create(void);
argc, char **argv)
int
{ week_of_year(struct date d);
...
}
date.h
principal.o
data.o
Ligador
date.o
calendrio.exe
main.o
Palavras
reservadas
auto
double
int
struct
break
else
long
switch
case
enum
register
typedef
char
extern
return
union
const
float
short
unsigned
continue
for
signed
void
default
goto
sizeof
volatile
do
if
static
while
inline
restrict
Tipos inteiros
char, short, int, long, long long
void
Arranjos
Estruturas
Ponteiros
type_sizes
type_limits
float_precision
ascii_table
Aritmticos
x + y, x - y, x * y, x / y, x % y, -x
Incremento e decremento
x++, ++x, y--, --y
Comparao
x > y, x >= y, x < y, x <= y, x == y, x!= y
Lgicos
!x, x && y, x || y
Binrios
x & y, x | y, x ^ y, ~x, x << y, x >> y
Atribuio
x = y, x += y, x |= y, x <<= y, etc.
Endereamento de memria
&x, *x, x[y], x.campo, x->campo
Converso
(int)x, (double)x
Condicional
x ? y : z
sizeof
sizeof(x), sizeof(double)
Precedncia
1 << 2 * 3 % 4 ^ 5 6 && 7
primos
2
11 13 17
Alocao linear
Compilador converte indces para a posio do
elemento referenciado
identidade
1
10 11 12 13 14
d
\0
79
...
...
arranjos, no o contedo
array_boundaries1
array_boundaries2
string_cmp
string_gotchas
struct cliente {
char nome[48];
long long cpf;
long telefone;
struct endereco
residencial;
...
};
struct_static
Declaraes:
int i = 10;
int * ponteiro = &i;
int ** ppp = &ponteiro;
Varivel
Posio
Valor
0x80
10
ponteiro
0x84
0x80
ppp
0x88
0x84
Operadores & e *
Endereo de uma varivel um ponteiro para
aquela varivel
Acessar o valor da varivel apontada
int x = 10;
int y;
int * ponteiro = &x;
y = *ponteiro + 1; // y = x + 1 = 11
*ponteiro = 20; // x = 20
int * ponteiro;
/* ponteiro tem um valor
* aleatrio, no sabemos
* para onde ele aponta. */
ponteiro = NULL;
fatores(ponteiro);
int * fatores(int * p)
{
if(!p) { return NULL; }
// calcula fatores primos
...
}
int i;
int * int_ptr;
void * void_ptr;
double * double_ptr;
int_ptr = &i;
void_ptr = int_ptr; // OK
double_ptr = int_ptr; // !OK
double_ptr = void_ptr; // OK
/* Qual o problema com
* double_ptr? */
Varivel
Posio
Valor
0x80
10
int_ptr
0x84
0x80
void_ptr
0x88
0x80
double_ptr
0x8c
0x80
(*ptr).dia = 8;
(*ptr).mes = 3;
(*ptr).ano = 2012;
ptr->dia = 8;
ptr->mes = 3;
ptr->ano = 2012;
Varivel
Posio
Valor
d1.dia
0x80
d1.mes
0x84
d1.ano
0x88
2012
ptr
0x8c
0x80
0x90
Declarao
Tipo de retorno, nome, parmetros
double pow(double x, double y)
Definio
Em arquivos .c
Corpo da funo
double pow(double x, double y)
{
}
...
Variedade de utilidades
Declarao
int (*comparador)(void *e1, void *e2);
Inicializao
Nome da funo convertido em ponteiro
func_params
struct_func_params
test_write_to_str
Posio
Valor
parametro
0x7c
0x480
0x80
estatico[0]
0x84
...
...
estatico[79] 0xd3
dinamico
0x884
0xd4
Varivel
Posio Valor
dinamico[0]
0x884
dinamico[1]
0x885
...
...
dinamico[79] 0x8d3
dyn_alloc
pointer_arith
%[opes][largura mnima][.preciso][tamanho]converso
printf(valor do float
doublena
naposio
posio%p
%p==%f\n,
%lf\n,
%+06.2lf\n,
ptr,
ptr,
*ptr);
*ptr);
ptr, *ptr);
tamanho
tamanho
converso
zeros esquerda
hh
char
char
alternativa
short
int
alinhar esquerda
long
unsigned int
ll
long long
int, hexadecimal
long double
float
agrupar milhares
size_t
float, cientfico
digitos alternativos
ptrdiff_t
float, e ou f
intmax_t
ponteiro
string
sinal percentual
char buffer[80];
scanf(%79s, buffer);
FILE *saida;
...
fscanf(entrada, %79s, buffer);
char c = fgetc(entrada);
fputc(c, saida);
fprintf(saida, X = %d, x);
write_test_file
feof_scanf_test
cmdline_params (CodeBlocks)
crypto
static char * concat (char *s1, char *s2) { while (x == y) { something (); somethingelse (); } finalthing (); }
K&R
static char *
concat(char *s1, char *s2)
{
while(x == y)
{
something();
something_else();
}
final_thing();
}
Allman
static char *
concat(char *s1, char *s2)
{
while(x == y)
{
something();
something_else();
}
final_thing();
}
GNU
No incio de um mdulo
Descrever variveis globais ou importantes
Em funes para explicar os parmetros, o
tipo de retorno, e o que a funo faz
No explicar como a funo faz a tarefa, cdigo
DUH:
i += 1; // incrementa i.
OK:
i += 1; // compensar borda.
Underscore:
int num_clientes;
struct list *lista_alunos;
CamelCase:
int numClientes;
struct lista *listaAlunos;
Particionamento de um programa
Um mdulo geralmente um par de arquivos
modulo.c contm a implementao das funes
modulo.h contm a declarao das funes e