aed1-02-introducao
DESCRIPTION
Introdução às estruturas de dados e algoritmosTRANSCRIPT
Algoritmos e Algoritmos e Estruturas de Dados IEstruturas de Dados I
Prof. Dr. Raimundo BARRETO
IntroduçãoIntrodução
Alguns slides foram tirados do material do prof. Leandro Galvão (IComp/UFAM)
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
Quais as ações que você faz ao acordar antes de sair para
o trabalho/escola?
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...
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?
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.
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...
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.
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
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;
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)){...
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
Algoritimizando a Lógica
Construir algoritmos é o objetivo fundamental de toda a programação,
mas afinal o que é algoritmo?
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
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.
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?
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?– ...
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
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.
Torre de Hanói
Torre de Hanói
Quais as restrições?Qual a seqüência lógica para resolver
este problema?
Torre de Hanói
Torre de Hanói
Resolva o problema da Torre de Hanói para 4 discos.
Torre de Hanói
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?
Torre de Hanói
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.
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)
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.
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).
ax 2+bx+c
Passos para elaboração de um programa:: Exemplo
Calcular as raízes reais de:
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
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.
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
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");}
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)
Códigofonte
Códigoobjeto
Bibliotecas Programa Executável
Geração de código objeto
Linkagem
Codificação
Gerando um programa executável
Depuração
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.
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.
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.
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.
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
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.
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.
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
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).