Estrutura, Pesquisa e
Ordenação de Dados
Prof. Frederico Brito Fernandes
[email protected]
CONTEÚDO
(1) Apresentação da disciplina
(2) Compilador DevC++
(3) ANSI C: visão geral
(1) Apresentação da Disciplina
Informações Gerais
• Horário:
– Terça e quinta às 20:30
• Objetivos:
– Introduzir o conceito de tipo de dados (TAD), evidenciando aspectos de
implementação, aplicações e complexidade
– Apresentar estruturas de dados básicas (listas lineares, pilhas, filas,
árvores)
– Apresentar métodos de busca e classificação de dados em memória
principal utilizando estruturas de dados básicas
• Bibliografia:
– TENENBAUM, A.; Langsam, Y.; Augenstein, M.: Estruturas de dados
usando C. São Paulo: Bookman. (LIVRO TEXTO)
– VILLAS, Marcos Vianna et AL. Estrutura de dados: conceitos e técnicas
de implementação. Rio de Janeiro: Campus. (LIVRO TEXTO)
– DROZDEK, Adam. Estruturas de Dados e Algoritmos em C++.São
Paulo: Pioneira Thomson Learning (LEITURA COMPLEMENTAR)
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
2
(1) Apresentação da Disciplina
Cronograma
SEMANA
UNID I
Estruturas de
dados
básicas
(listas
encadeadas,
filas e pilhas)
UNID II
Métodos de
busca e
classificação
de dados
UNID III
Árvores e
Grafos
DESCRIÇÃO
REF
Nivelamento em ANSI C
 Duas semanas iniciais de conceitos básicos (apresentação do compilador,
estruturas de controle, estruturas, vetores, strings e ponteiros)
 Essencial a resolução das listas de exercícios em casa
(1) UFMG
(2) UFPB
3ª sem/AGO
Listas encadeadas
 Essencial a presença na aula de exercícios em laboratórios dia 21/8
(1) VILLAS
(2) TENENBAUM
4ª sem/AGO
1ª sem/SET
Recursividade, pilhas e filas
 PROVA 1 (unidade I): 09/09
(1) VILLAS
(2) TENENBAUM
2ª sem/SET
3ª sem/SET
4ª sem/SET
1ª sem/OUT
Busca linear e binária
Bubble sort, selection sort, quick sort, insertion sort, merge sort
(1) TENENBAUM
(2) DROZDEK
2ª sem/OUT
3ª sem/OUT
Tabela Hash
− PROVA 2 (unidade II): 21/10
(1) VILLAS
(2) DROZDEK
4ª sem/OUT
1ª sem/NOV
2ª sem/NOV
3ª sem/NOV
Árvores
(1) VILLAS
(2) DROZDEK
4ª sem/NOV
1ª sem/DEZ
Grafos
− PROVA 3 (unidade III): 09/12
(1) TENENBAUM
(2) DROZDEK
1ª sem/AGO
2ª sem/AGO
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
OBS: PDFs disponíveis
no site do professor
3
(1) Apresentação da Disciplina
Motivação inicial...
• Troque as posições
dos sapos (os machos
para a direita e as
fêmas para a
esquerda)
http://www.fredbf.com/disciplinas/christus/ed/SAPO.xls
• Depois de resolvido o problema, represente sua solução no papel
– Estamos interessados no passo a passo para achar a solução
– Forma livre de representação: português, desenho, algoritmo, etc
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
4
(2) DevC++
Compiladores de C
• C é uma linguagem compilada
Windows
UNIX
Linux
Código-Fonte
Compilar
.C
Código-Objeto
Processo de
Geração de Código
.OBJ
Executável
10010
OPÇÕES:
Turbo C++
DevC++ (Free)
Borland C++
C++Builder
Notepad
Estrutura, Pesquisa e Ordenação de Dados
Linkar
Bibliotecas
.EXE
.OBJ
Frederico Brito Fernandes
5
(3) ANSI C
Histórico
• Criada na Bell Labs
– divisão da AT&T, famosa companhia americana de telecomunicações
• Idealizada e implementada por Dennis Ritchie
– Quando? 1970
• Objetivo:
– gerar uma linguagem de “alto nível”, em oposição à linguagem
Assembly
– desenvolver uma linguagem capaz de executar em qualquer plataforma
• Uso geral:
– Unix, Clipper, Lotus 1 2 3, Excel, DBase III e IV, Oracle
• Principais características:
– Modularidade e Portabilidade
• Padrão ANSI C
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
6
(3) ANSI C
Primeiro programa...
• C é CASE SENSITIVE
– Soma, SOMA, SoMa ou sOmA.
– Comandos em letras minúsculas
• if e for, por exemplo
• If ou For são interpretados como variáveis
• Primeiro Programa:
#include <stdio.h>
/* Um Primeiro Programa */
int main () {
CONSIDERAÇÕES
printf ("Ola! Eu estou vivo!\n");
getchar();
return(0);
}
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
1.
2.
3.
4.
5.
6.
7.
Biblioteca de E/S: stdio.h
Comentário: /* aqui */
Função: main() retorna inteiro
Delimitador de bloco {bloco}
Função de E/S: printf()
Constante de nova linha: \n
Retorno de função: return()
7
(3) ANSI C
Tipos
• C possui os seguintes tipos
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
8
(3) ANSI C
Segundo programa...
• Segundo Programa:
#include <stdio.h>
int main ()
{
int dias; /* Declaracao de Variaveis */
float Anos;
printf ("Entre com o número de dias: "); /* Entrada de Dados*/
scanf ("%d",&Dias);
Anos=Dias/365.25; /* Conversao Dias->Anos */
printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos);
getchar();
}
1.
2.
3.
4.
Estrutura, Pesquisa e Ordenação de Dados
CONSIDERAÇÕES
Declaração de Variável: tipo <id>
Ex: float Anos; /* variável de ponto flutuate, ie, real de Pascal */
Função de E/S: scanf()
“%d” – leia um inteiro
&Dias – armazene nesse endereço
Conversão de tipo: float <- int
Função printf() com vários argumentos
Frederico Brito Fernandes
9
(3) ANSI C
Operadores aritméticos e de atribuição
– Aritméticos e de Atribuição
• Binários: +, -, *, /, %
• Unários: +, -, ++, --
Ex: int a = 17, b = 3;
int x, y, w;
float z = 17, z1, z2, z3;
Estrutura, Pesquisa e Ordenação de Dados
a)
b)
c)
d)
e)
Frederico Brito Fernandes
x = a / b;
y = a % b;
z1 = z / b;
z2 = a/b;
z3 = w/b;
10
(3) ANSI C
Comandos de Controle de Fluxo
• if: desvio condicional
– Sintaxe:
• If (condição) instrução;
– Ex1:
CONSIDERAÇÕES
1.
2.
O comando “if” exige o uso de parênteses
O que está de errado no teste?
if(num=10) ... // isto estah errado
Operadores de comparação: >, <, >=, >=, == e !=
Operador de atribuição: =
#include <stdio.h>
int main ()
{
3.
int num;
4.
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num>10) printf ("\n\nO numero eh maior que 10");
if (num==10)
{
printf ("\n\nVoce acertou!\n");
printf ("O numero e igual a 10.");
}
if (num<10) printf ("\n\nO numero eh menor que 10");
getchar();
}
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
11
(3) ANSI C
Comandos de Controle de Fluxo
• for: laço de repetição
• while: laço de repetição
– Sintaxe:
– Sintaxe:
• for(inicialização;condição;incremento){
instrução;
}
• while(condição){
instrução;
}
– Ex2:
– Ex3:
#include <stdio.h>
int main ()
{
int i;
for (i=0;i<10;i++) {
#include <stdio.h>
int main ()
{
int i;
i=0; // inicialização
while (i<10) { //condição
printf ("\n Executou %d vez(es)“,i);
printf ("\n Executou %d vez“,i);
i++; //incremento
}
}
}
}
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
12
(3) ANSI C
Comandos de Controle de Fluxo
• Ex: Este programa imprime o alfabeto (letras maiúsculas)
#include <stdio.h>
int main()
{
char letra;
for(letra = 'A' ; letra <= 'Z' ; letra =letra+1)
printf("%c ", letra);
}
CONSIDERAÇÕES
1.
2.
Estrutura, Pesquisa e Ordenação de Dados
O valor inicial de “letra” é 65 ou ‘A’
Portanto, letra pode ser incrementado
Frederico Brito Fernandes
13
(3) ANSI C
Comandos de Controle de Fluxo
• Auto-avaliação
– Explique porque está errado fazer a instrução abaixo. O que irá acontecer?
• if (num=10) ...
– Escreva um programa que coloque os números de 1 a 100 na tela na ordem
inversa (começando em 100 e terminando em 1)
– Escreva um programa que coloque os números ímpares de 1 a 100 na tela. O
operador MOD de pascal é o % em C, ex: 10 % 2 resulta em 0.
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
14
(3) ANSI C
Função
• Sintaxe de uma função em C:
Se for “void” não retorna nada
Se estiver vazio, não possui argumentos
tipo_de_retorno nome_da_função (lista_de_argumentos)
{
código_da_função
Ex1: uma função que imprime uma string
}
#include <stdio.h>
int mensagem () /* Funcao simples: so
imprime Ola! */
{
printf ("Ola! ");
return(0);
}
int main ()
{
CONSIDERAÇÕES
mensagem();
printf ("Eu estou
vivo!\n");
1. Saída
igual ao “Primeiro Programa”
return(0);
2. Diferença entre main() e o resto
}
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
15
(3) ANSI C
Função
• Auto-avaliação
– Escreva uma função que recebe dois inteiros e retorna a soma entre eles
– Escreva uma função que receba dois floats e retorne o menor entre eles
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
16
(3) ANSI C
Tabela de Precedência
• Expressão
Tabela de Precedência
• Ex:
int i=1,a=4,b=2,c=1,d=8,e=4;
i = i+3; //resulta em 4
c= a*b + d/e;
c= a*(b+d)/e;
c>2?1:0
MAIOR
precedência
– Combinação de variáveis, constantes
e operadores
– Em C, toda expressão resulta em um valor
– As sub-expressões são avaliadas de
acordo com a Tabela de Precedência
• Ex:
c= a*b + d/e; // é o mesmo que
// c = (a*b) + (d/e);
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
menor
() [] ->
! ~ ++ -- . -(unário)
(cast) *(unário)
&(unário) sizeof
* / %
+<< >>
<<= >>=
== !=
&
^
|
&&
||
?
= += -= *= /=
17
(3) ANSI C
Palavras reservadas
• Toda linguagem de programação possui palavras usadas
para fins diversos:
– Controle de repetição, desvio condicional e incondicional,
tipos e seus modificadores, etc.
– Ao longo do curso, veremos como funcionam...
• Palavras Reservadas do ANSI C:
– auto, break, case, char, const, continue, default, do, double,
else, enum, extern, float, for, goto, if, int, long, register, return,
short, signed, sizeof, static, struct, switch, typedef, union,
unsigned, void, volatile, while
Estrutura, Pesquisa e Ordenação de Dados
Frederico Brito Fernandes
18
Download

Aula 1