Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ESTRUTURAS DE DADOS
Ementa
Introduo Linguagem C.
Recursividade.
Alocao dinmica de memria.
Conceito de tipos abstratos de dados.
Listas
Pilhas
Filas
rvores.
Implementao de tipos abstratos de dados.
CONCEITOS BSICOS
Estruturas de dados:
CONCEITOS BSICOS
CONCEITOS BSICOS
ESTRUTURAS DE DADOS
Linguagem C
C uma linguagem de programao compilada,
estruturada e de alto nvel.
A histria de C
A histria de C
Dados histricos:
1969 - Desenvolvimento do UNIX (num PDP 7 em
linguagem Assembly);
1969 - Desenvolvimento da linguagem BCPL, prxima do
Assembly;
1970 - Desenvolvimento da linguagem B, sucessora da
anterior (o B a 1 letra de BCPL);
1971 - Primeiro desenvolvimento da linguagem C,
sucessora da anterior (o C a 2 letra de BCPL);
1973 - O sistema operativo UNIX reescrito em
linguagem C;
1978 - Primeira edio do livro The C Programming
Language, Kernighan & Ritchie;
1983-1988 - Definio do ANSI C;
8
CONCEITOS BSICOS
A linguagem C:
Linguagem convencional
Variveis locais;
Variveis globais;
ESTRUTURAS DE DADOS
http://www.bloodshed.net/devcpp.html
CONCEITOS BSICOS
Pascal
Comentrios
{ comentario}
/* comentario */
Identificadores
No case sensitive
case sensitive
Definio de tipos
type
typedef
Declarao de inteiros
integer
int
char
Boolean
Boolean tratado
como true ou false
No h tratado como
0 ou 1
Real
real
Float ou double
Tipos enumerados
type a = (vermelho,
verde, azul)
enum a {vermelho,
verde, azul};
CONCEITOS BSICOS
Pascal
Vetores
Comea da posio 0 e
vai at n 1 (sendo n o
tamanho do vetor). Ex:
int a[10];
Strings
Tipo pr-definido
tratado internamente
como array.
O tipo string no
definido. Deve-se criar
um vetor de char.
Registros
record
struct
Atribuio
:=
CONCEITOS BSICOS
Pascal
Aritmticos
+, -, *, /, div, mod
+, -, *, /, %, ++, --
Relacionais
Lgicos
and , or
&& , ||
Atribuies especiais
No h
CONCEITOS BSICOS
CONCEITOS BSICOS
C
#include <stdio.h>
int main()
{
printf(Ol mundo!);
}
CONCEITOS BSICOS
Valores constantes:
int a, b;
float c;
c = 5.3;
int a = 10;
a = b + 13
a = b + 12.5;
a = b + 12.5f;
int a, b, c;
a = 2;
c = a + b;
CONCEITOS BSICOS
Operadores:
Aritmticos:
Atribuio:
Relacionais:
De incremento e decremento:
menor que (<), maior que(>), menor ou igual que (<=), maior
ou igual que (>=), igual (==), diferente (!=).
Lgicos:
CONCEITOS BSICOS
int a;
double b, c;
a = 3.5;
b = a / 2.0;
c = 1/3 + b;
Resposta: a = 3, b = 1.5, c = 1.5.
CONCEITOS BSICOS
x%2;
a = 5;
y = x = 5;
x *= y + 1;
x = n++; x = ++n;
int c = 23, d = c + 4;
a = (c < 20) || (d > c); // armazena o valor 1 em a
b = (c < 20) && (d > c);
// armazena o valor 0 em b
Operadores
Operadores Combinados
x = x op y; x op= y;
Expresso Normal
Expresso Simplificada
a = a + b;
a+=b;
a = a - b;
a-=b;
a = a * b;
a*=b;
a = a / b;
a/=b;
a = a % b;
a%=b;
CONCEITOS BSICOS
Operador
sizeof
int x = sizeof(int);
printf("Nmero de bytes ocupado pelo inteiro tipo inteiro : %i \n", x);
...
CONCEITOS BSICOS
Converso de tipos
int a;
a = (int) 3.5;
printf("a = %i", a);
Operador de Modelagem
Exemplo de operador de modelagem
/* Exemplo utilizando moldagem (cast) */
#include <stdio.h>
void main(void)
{
int dividendo=10, divisor=3;
float quociente=0.0;
quociente = (float)dividendo / divisor;
printf("%d/%d = %.2f\n", dividendo, divisor, quociente);
getchar();
}
CONCEITOS BSICOS
#include <stdio.h>
CONCEITOS BSICOS
Funo printf:
Funo scanf:
Funo
Operao
getchar ( )
getche(),getch()
gets ( )
puts ( )
27
scanf e printf
Tabela contendo cdigos de formatao para printf e
scanf:
Cdigo
printf
scanf
%d
imprime um inteiro
decimal
l um inteiro decimal
%f
%s
string de caracteres
%c
um nico caractere
l um nico caractere
%p
imprime um ponteiro
l um ponteiro
%%
imprime % na tela
28
CONCEITOS BSICOS
Linguagem C
Exemplo de programa que l e Mostra Idade
C
#include <sdtio.h>
#include <conio.h>
void main()
{
clrscr();
int idade;
char nome[30];
printf(Digite sua Idade: );
scanf(%d,&idade);
printf(Seu Nome: );
scanf(%s,nome); /* Strings no utilizar & na leitura */
printf(%s sua idade e %d anos. \n, nome, idade);
}
30
31
Por exemplo, o formato %10.2f, exibe o valor em pontoflutuante com duas casas decimais, dentro de um campo de
tamanho 10.
32
CONCEITOS BSICOS
Tomadas de deciso:
if(expr) {
if (expr){
OU
bloco de comandos 1
bloco de comandos 2
...
ou
}
...
}
else {
bloco de comandos 1
Operador condicional:
CONCEITOS BSICOS
Controle de fluxo:
while (expr)
{
bloco de comandos
}
for (expr_inicial; expr_booleana; expr_de_incremento)
ou
{
bloco de comandos
CONCEITOS BSICOS
Controle de fluxo:
do
{
bloco de comandos
} while (expr_booleana);
ou
CONCEITOS BSICOS
Controle de fluxo:
CONCEITOS BSICOS
Controle de fluxo:
Seleo:
switch(expr){
case op1:
break;
case op2:
break;
default:
break;
}
ou
Executado quando expr for diferente de todos
os casos enumerados.
CONCEITOS BSICOS
Exerccios:
CONCEITOS BSICOS
Exerccios:
CONCEITOS BSICOS
Exerccios:
4) Escreva um algoritmo em C que determine o
conceito da nota do estudante de acordo com
seu valor
CONCEITOS BSICOS
Funes
Tipo geral
tipo_retornado nome_da_funo (lista de parmetros...)
{
corpo da funo
}
CONCEITOS BSICOS
Funes
tipo_retornado nome_da_funo (lista de parmetros...)
{
}
corpo da funo
tipo_retornado = void
indica o no retorno de um valor
tipo_retornado = int, char, float,
retorna um valor do tipo
definido
tipo_retornado = int*, char*,
retorna um ponteiro para int, char,
OBS: Funes retornam um nico valor!
CONCEITOS BSICOS
Funes
tipo_retornado nome_da_funo (lista de parmetros...)
{
corpo da funo
}
nome_da_funo: identificador da funo no programa.
lista de parmetros: declaraes de variveis que sero usadas na
funo.
CONCEITOS BSICOS
Exemplos de funes
void imprimeMensagem() {
printf(Ola Mundo!);
}
float calculaMedia(float a, float b) {
float media = 0;
media = (a + b)/2;
return media;
}
CONCEITOS BSICOS
Funes
CONCEITOS BSICOS
identificador(listaDeArgumentos);
ATENO: tipo_retornado definido!
ESTRUTURAS DE DADOS
Chamada funo (exemplos)
imprimeMensagem();
float a = 10.5;
float b = 13.5;
float c;
c = calculaMedia(a,b);
ESTRUTURAS DE DADOS
Passagem
Exemplo:
int main(){
float a = 10.5;
float b = 3.5;
float m = calculaMedia(a,b);
...
}
10.5
E0
3.5
E4
7
Retorna mdia
calculada
c=a
d=b
10.5
E250
3.5
E254
mdia 7
ESTRUTURAS DE DADOS
int main(void) {
int n = 5;
int f = 1, i;
int r;
r = fat(n);
f*=n;
return f;
system("pause");
return 0;
}
No final da funo fat, o parmetro n tem valor igual a zero. No entanto, a sada
do programa ser: Fatorial de 5 = 120. O valor da varivel n no mudou no
programa principal porque o valor de n passado atribudo ao parmetro da funo
chamada.
ESTRUTURAS DE DADOS
ESTRUTURAS DE DADOS
Ponteiros
Ex:
int a;
int *p;
ESTRUTURAS DE DADOS
Ponteiros
ESTRUTURAS DE DADOS
Ponteiros
Exemplos
Pilha de execuo
108
104
ESTRUTURAS DE DADOS
Ponteiros
Exemplos
Pilha de execuo
104
6
-5
108
104
ESTRUTURAS DE DADOS
Ponteiros
Exemplos
Outra representao:
Podemos desenhar setas,
sinalizando que uma varivel
do tipo ponteiro aponta para
uma determinada rea de
memria, em vez de criar
valores fictcios para os
endereos de memria.
Pilha de execuo
p
a
ESTRUTURAS DE DADOS
Ponteiros
int main(){
int a, b, *p;
a = 2;
Erro: Varivel p no inicializada!
*p = 3;
b = a + (*p);
printf(%d, b);
return 0;
}
S podemos preencher o contedo de um ponteiro se ele tiver
sido devidamente inicializado (apontar para um espao de
memria para o qual j se prev o armazenamento de
valores do tipo em questo).
ESTRUTURAS DE DADOS
#include <stdio.h>
int main()
{
int a;
// a um inteiro
int *aPtr; // aPtr um apontador p/ um inteiro
a = 7;
aPtr = &a;
ESTRUTURAS DE DADOS
ESTRUTURAS DE DADOS
#include <stdio.h>
void bubbleSort( int *array, const int size );
void swap( int* element1Ptr, int* element2Ptr);
int main()
{
const int arraySize = 10;
int a[] = {2,6,4,8,10,12,89,68,45,37};
int i;
bubbleSort( a, arraySize );
return 0;
ESTRUTURAS DE DADOS
Variveis globais
ESTRUTURAS DE DADOS
Variveis estticas
As variveis estticas so armazenadas na rea
de memria esttica.
As variveis estticas continuam existindo
mesmo antes ou depois de a funo ser
executada. Porm, uma varivel esttica
declarada dentro de uma funo s visvel
dentro dessa funo.
ESTRUTURAS DE DADOS
Variveis estticas
n++;
ESTRUTURAS DE DADOS
Variveis estticas
Exercicios
Exercicios
3) Escreva uma funo potencia (base, expoente) que,
quando chamada, retorna base^expoente.
Por exemplo, potencia (3, 4) = 3 * 3 * 3 * 3.
Assuma que expoente um inteiro maior ou igual a 1.
4) Escreva um programa que l 10 notas digitadas pelo
usurio, armazena estas notas em um arranjo de
tamanho 10. Imprime a soma, e a mdia das notas, a
maior e a menor nota. Depois seu programa deve
exibir as notas dos alunos em ordem crescente.
Exercicios
4 Para cada um dos seguintes itens, escreva um
nico comando para executar a tarefa indicada.
Assuma que as variveis de ponto flutuante number1
e number2, foram declaradas e que number1 foi
inicializado com 7,3.
Declare a varivel fPtr como um ponteiro para um
objeto do tipo double.
Atribua o endereo da varivel number1 a varivel
ponteiro fPtr
Imprima o valor do objeto apontado por fPtr
Atribua o valor do objeto apontado por fPtr a varivel number2
Imprima o valor de number2
Imprima o endereo de number1
Imprima o endereo armazenado em fPtr.
O valor impresso o mesmo que o endereo de number1 (sim/no)
Exercicios
5 - Escreva um programa completo em C, que
declara um registro Aluno com os seguintes
dados (Matricula, Nome, Curso).
Implemente o construtor da classe para inicializar os
dados.
Implemente um mtodo (funo) para entrada
de dados e um mtodo para impresso de dados.
No programa principal declare um vetor para
armazenar 10 alunos, implemente um menu com as
seguintes opes:
1 Cadastrar Aluno
2 Imprimir listagem de todos os alunos
3 Sair