aed1-02-introducao

47
Algoritmos e Algoritmos e Estruturas de Dados I Estruturas de Dados I Prof. Dr. Raimundo BARRETO

Upload: xbarretox

Post on 16-Jan-2016

216 views

Category:

Documents


0 download

DESCRIPTION

Introdução às estruturas de dados e algoritmos

TRANSCRIPT

Page 1: AED1-02-introducao

Algoritmos e Algoritmos e Estruturas de Dados IEstruturas de Dados I

Prof. Dr. Raimundo BARRETO

Page 2: AED1-02-introducao

IntroduçãoIntrodução

Alguns slides foram tirados do material do prof. Leandro Galvão (IComp/UFAM)

Page 3: AED1-02-introducao

Lógica

Do grego logiké, que significa “arte de raciocinar”.

A lógica trata da correção do pensamento.Poderíamos dizer também que a lógica é

a arte de pensar corretamente.A lógica ensina a colocar Ordem no

Pensamento

Page 4: AED1-02-introducao

Quais as ações que você faz ao acordar antes de sair para

o trabalho/escola?

Page 5: AED1-02-introducao

Uma possível solução...

1º Passo: Levanta da cama2º Passo: Vai ao banheiro3º Passo: Veste a roupa4º Passo: Toma o café da manhã5º Passo: Sai de casa

Está suficientemente detalhado?

Senão, refaça a solução...

Page 6: AED1-02-introducao

Seqüência Lógica

Sequência Lógica é um conjunto de instruções executadas (sequencialmente) até atingir um objetivo ou solução de um problema.

Instruções?

Page 7: AED1-02-introducao

Instruções

Na linguagem comum, entende-se por instruções “um conjunto de regras ou normas definidas para a realização de algo”.

Em informática, porém, instrução indica a um computador uma ação elementar a ser executada.

Page 8: AED1-02-introducao

Programação

O que seria “lógico” se quisermos ter bons resultados em uma prova escolar?

O que seria “ilógico”?

O que seria “lógico” fazer para ter sucesso numa modalidade esportiva? O que seria “ilógico”?

O que seria “lógico” fazer para desenvolver bons programas de computador?

O que seria “ilógico”?

Temos que usar a lógica...

Page 9: AED1-02-introducao

Programação

Definição de ProgramaçãoRaciocínio lógico

empregado no desenvolvimento de programas de computador,

fazendo uso ordenado dos elementos básicos

de um dado estilo de programação.

Definição de ProgramaçãoRaciocínio lógico

empregado no desenvolvimento de programas de computador,

fazendo uso ordenado dos elementos básicos

de um dado estilo de programação.

Page 10: AED1-02-introducao

Estilo de Programação

Convenções de nomes

Indentações e Layouts

Declarações e Tipos

O que é estilo de programação?

Comentários

Expressões e instruções

Definição de Funções

Page 11: AED1-02-introducao

Estilo de Programação

Exemplo 1

Não dependa da declaração implícita do int.Por exemplo, não escreva:

extern foo;Mas sim:

extern int foo;

Page 12: AED1-02-introducao

Estilo de Programação

Exemplo 2

Operador condicional longo deve ser separado em diversas linhas. Ao invés de:if (foo­>next == NULL && totalcount < needed && needed <= MAX_ALLOT && server_active (current_input)) { ...É melhor escrever:if (foo­>next == NULL    && totalcount < needed && needed <= MAX_ALLOT    && server_active(current_input)){...

Page 13: AED1-02-introducao

Programação

Uma boa programação é desenvolvida a partir de um conjunto de elementos, entre eles: Organização Criatividade Perseverança Padronização Otimização

Page 14: AED1-02-introducao

Algoritimizando a Lógica

Construir algoritmos é o objetivo fundamental de toda a programação,

mas afinal o que é algoritmo?

Page 15: AED1-02-introducao

Algoritimizando a Lógica

Algoritmo é uma sequência de passos que visam atingir um objetivo bem definido.

Algoritmo é uma sequência de passos que visam atingir um objetivo bem definido.

Algoritmo é a descrição de um conjunto de ações que obedecidas, resultam numa sucessão finita

de passos, atingindo o objetivo.

Algoritmo é a descrição de um conjunto de ações que obedecidas, resultam numa sucessão finita

de passos, atingindo o objetivo.

Descrição de um conjunto finito de comandos para a solução de um problema em um tempo

finito.

Descrição de um conjunto finito de comandos para a solução de um problema em um tempo

finito.

Definição de Algoritmo

Page 16: AED1-02-introducao

Algoritimizando a Lógica

Mas tem um detalhe...As pessoas tem inteligência e habilidade

racional, ou seja, fazem perguntas para se esclarecer.

Computador não tem senso próprio, ou seja, deve receber instruções explícitas (algoritmos), e somente em uma linguagem específica.

Page 17: AED1-02-introducao

Homem e Suas 3 Cargas

Um homem precisa atravessar um rio com um barco que possui capacidade de transportar apenas ele e mais uma de suas três cargas, que são: um cachorro, uma galinha e um saco de milho. O que o homem deve fazer para conseguir atravessar o rio sem perder as suas cargas?

Page 18: AED1-02-introducao

Homem e Suas 3 Cargas

Para entender o problema, algumas perguntas devem ser feitas:

– Quais as restrições desse problema?– Há limite na quantidade de viagens?– ...

Page 19: AED1-02-introducao

Inicial: H – C – G - M

C – M H – G

H - C – M G

M H – C – G

H - G – M C

G H – C – M

C

C – MH – G

Final: H – C – G – M

Homem e Suas 3 Cargas

Page 20: AED1-02-introducao

Torre de Hanói

A Torre de Hanói é um "quebra-cabeça" que contém uma base com três pinos, em um dos quais são dispostos alguns discos uns sobre os outros, em ordem crescente de diâmetro, de cima para baixo. O problema consiste em passar todos os discos de um pino para outro qualquer, usando um dos pinos como auxiliar,

de maneira que um disco maior nunca fique em cima de outro menor em nenhuma

situação. O número de discos pode variar.

Page 21: AED1-02-introducao

Torre de Hanói

Page 22: AED1-02-introducao

Torre de Hanói

Quais as restrições?Qual a seqüência lógica para resolver

este problema?

Page 23: AED1-02-introducao

Torre de Hanói

Page 24: AED1-02-introducao

Torre de Hanói

Resolva o problema da Torre de Hanói para 4 discos.

Page 25: AED1-02-introducao

Torre de Hanói

Page 26: AED1-02-introducao

Torre de Hanói

Tem uma solução algorítmica Tem uma solução algorítmica geral para qualquer geral para qualquer

quantidade de discos?quantidade de discos?

Page 27: AED1-02-introducao

Torre de Hanói

Page 28: AED1-02-introducao

Programas

Os programas de computadores nada mais são do que algoritmos escritos numa linguagem de programação (Pascal, C, Cobol, Fortran, Visual Basic, dentre outras) e que são interpretados e executados por um computador.

Page 29: AED1-02-introducao

Linguagem Estruturada

É uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: Sequência Decisão (ou Seleção) Repetição (ou Interação)

Page 30: AED1-02-introducao

Linguagem Estruturada

Características: Sua principal característica é a utilização de

blocos para solução de um problema. Permite a utilização combinada de sub-rotinas

compiladas separadamente, sem que pertençam ao mesmo programa propriamente dito.

Page 31: AED1-02-introducao

Passos para elaboração de um programa

1. Compreender o problema.

2. Esboçar um procedimento para resolver o problema.

3. Formular o algoritmo.

4. Traduzir o algoritmo para uma linguagem de programação (Codificação).

Page 32: AED1-02-introducao

ax 2+bx+c

Passos para elaboração de um programa:: Exemplo

Calcular as raízes reais de:

Page 33: AED1-02-introducao

1. Compreender o problema

Exemplo: Equação de 2o. grauPossibilidades de raízes:

02 raízes complexas; 02 raízes reais idênticas; 02 raízes reais distintas;

Condição para haver raízes reais: Δ ≥ 0

Page 34: AED1-02-introducao

2. Esboçar um procedimento para resolver o problemaCalcular Δ.Se Δ ≥ 0, calcular raízes reais.Caso contrário, informar que não há

raízes reais.

Page 35: AED1-02-introducao

3. Formular o algoritmo

inicio obter(a,b,c) delta = b^2 – 4*a*c se (delta ≥ 0) então r1 = (– b – (delta)^(–1/2))/(2*a) r2 = (– b + (delta)^(–1/2))/(2*a)

mostrar(r1,r2 senão mostrar(“Não há raiz real”) fim do sefim do algoritmo

Page 36: AED1-02-introducao

4. Codificar

#include <stdio.h>#include <stdlib.h>#include <math.h>int main(void){

float a, b, c, delta, r1, r2;scanf("%f %f %f", &a, &b, &c);delta = b*b – 4*a*c;if (delta >= 0){

r1 = (– b – sqrt(delta))/(2*a);r2 = (– b + sqrt(delta))/(2*a);printf("r1 = %f \n r2 = %f", r1, r2);

}else

printf("Nao ha raiz real\n");}

Page 37: AED1-02-introducao

Gerando um programa executável

Passos necessários para gerar um programa executável:A. Codificação

B. Geração de Código Objeto

C. Linkagem

D. Depuração (debug)

Page 38: AED1-02-introducao

Códigofonte

Códigoobjeto

Bibliotecas Programa Executável

Geração de código objeto

Linkagem

Codificação

Gerando um programa executável

Depuração

Page 39: AED1-02-introducao

Gerando um programa executável A. CodificaçãoÉ a escrita de um programa de acordo

com uma linguagem de programação.Utiliza Editores de Texto.Resultado: código-fonte.

Page 40: AED1-02-introducao

Gerando um programa executável B. Geração de código-objetoTradução do código-fonte para o código

de máquina do processador.Realizado pelos Compiladores.Resultado: código-objeto.

Page 41: AED1-02-introducao

Gerando um programa executável C. LinkagemRearranja o código do programaIncorpora as partes referenciadas no

código original (obtidas de uma biblioteca).

Realizada pelos Ligadores.Resultado: código executável pelo

processador.

Page 42: AED1-02-introducao

Gerando um programa executável D. Depuração (debug)

Auxilia o programador a eliminar erros dos programas (“bugs”).

Permite: execução passo-a-passo. visualização do estado do programa através

das variáveis.

Page 43: AED1-02-introducao

Estrutura de Dados

Dados: fatos em sua forma primária que representam coisas do mundo real.

Ex: número de horas trabalhadas, número peças em estoque , pedidos de venda

Informação: conjunto de fatos organizados de tal forma que adquirem valor adicional além do valor do fato em si.

Ex: total de vendas mensais, lista de clientes ordenada por..., média de alunos p/turma, turmas com menos 10 alunos

Page 44: AED1-02-introducao

Estruturas de Dados

Antes de ser possível escrever os algoritmos, temos que analisar a

informação envolvida no problema em questão e desenvolver Estruturas

de Dados que nos permitam armazenar os dados para gerar e

tratar a informação.

Antes de ser possível escrever os algoritmos, temos que analisar a

informação envolvida no problema em questão e desenvolver Estruturas

de Dados que nos permitam armazenar os dados para gerar e

tratar a informação.

Page 45: AED1-02-introducao

Estrutura de Dados

Estruturas de Dados

é a disciplina que estuda as técnicas computacionais para a organização e manipulação eficiente de quaisquer

quantidades de dados.

Page 46: AED1-02-introducao

Estrutura de Dados

Em um projeto de software, dois aspectos devem ser considerados para sua implementação:

Um conjunto estruturado de dados Um conjunto definido de operações

sobre estes dados

Page 47: AED1-02-introducao

Estrutura de Dados

Vamos trabalhar com dois tipos de dados primitivos (inteiros, reais, caracteres, etc) e estruturados (registros e tabelas). Os registros permitem agregar valores de tipos diversos (por exemplo, ficha de aluno). As tabelas permitem agregar vários valores do mesmo tipo (por exemplos, as várias fichas dos alunos de uma turma).