EA869 Algoritmos: estruturas de dados e linguagens de programação Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas.

Slides:



Advertisements
Apresentações semelhantes
Arquitetura e organização de computadores.
Advertisements

Especificação de Software
Linguagens de Programação
PROGRAMAÇÃO I UNIDADE 1.
My drivers Podemos definir um driver como uma ponte de comunicação entre determinado dispositivo e a central de processamento de um computador. Na prática,
CARTILHA DE APOIO COMPUTACIONAL AO CÁLCULO Área de Conhecimento: Ciências Exatas e da Terra Autor: Christian Wagner Programa: PUIP Curso: Engenharia Civil.
Introdução ao Java Prof. Gustavo Wagner (modificações) Slides originais: Prof. Tiago Massoni Java Básico FATEC-PB  Centro de Informática, UFPE.
José Antônio da cunha IFRN Administração de Banco de Dados.
Administração de Banco de Dados José Antônio da Cunha CEFET-RN.
Paradigmas de Programação. Paradigma de Programação Um paradigma de programação fornece e determina a visão que o programador possui sobre a estruturação.
Aula 01 Conhecendo o Computador Prof. Filipe Mutz.
SECRETARIA DE ESTADO DA EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DIRETORIA DE DESENVOLVIMENTO HUMANO GERÊNCIA DE TECNOLOGIA DE INFORMAÇÕES EDUCACIONAIS E ADMINISTRATIVAS.
1. 2 Programação Orientada a Objetos Prof. Maurício Rodrigues de Morais
Modelagem de Dados Aula 1.
1 Introdução aos Padrões de Projetos (na prática) Créditos: Lúbia Vinhas Hazel Carvalho Crato Adaptações: Prof. Nécio de Lima Veras.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
Cálculo Numérico Computacional Prof. Linder Cândido da Silva.
A importância das TIC Com a partilha de experiências surge, não só, um conhecimento mais optimizado das TIC, como também, uma relação interpessoal, mais.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais Prof.: Gustavo Wagner
EA869 Subrotinas Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1.
EA869 Modos de Endereçamento Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1.
Glossário Autor: Skyup Informática. Atividade - Glossário A atividade glossário permite que o administrador crie páginas de definições, um dicionário.
Curso: Técnico Integrado em Informática Disciplina : Fundamentos de Lógica e Algoritmo Revisão do Segundo Bimestre Profª. Katiuscia Lopes dos Santos.
Conhecendo o Tutorial support.ebsco.com. EBSCOhost é uma poderosa ferramenta de referência online que oferece uma variedade de bases de dados de texto.
Práticas Colaborativa de Programação Peterson Rodrigues Outubro de 2015.
Professor: Gerson Leiria Nunes.  Análise dos sistemas discretos  Sistemas recursivos.
Gêneros textuais – Gêneros do discurso Professor: Marcel Matias.
1 Unidade 1 - Minimização Computacional: Código BCD e Gray Disciplina: Circuitos Digitais Curso: Engenharia de Telecomunicações Aula 7 Lucas Santos Pereira.
IFRN Técnico em Informática para Internet Desenvolvimento de Algoritmos Prof. Gilbert Azevedo.
Informática Básica Karine Alessandra Córdova O navegador é o principal programa para acessar a Internet. Com ele, você pode visitar endereços na rede,
TRABALHO AVALIATIVO ALUNO: FRANCISCO HELIÉSUS DE MEDEIROS MATÉRIA: ORGANIZAÇÃO DE COMPUTADORES.
Campus Pau dos Ferros Disciplina de Algoritmos Prof. Demétrios Coutinho INFORMÁTICA BÁSICA Algoritmos de Ordenação.
Lógica de Programação Curso Técnico em Informática – Escola Olímpio Professor Marcelo Josué Telles
INE5408 Estruturas de Dados Introdução a Árvores - Conceitos - Árvores Binárias - Métodos e algoritmos de percurso - Métodos e algoritmos de balanceamento.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais FATEC-PB Professor: Gustavo Wagner
Programação para Internet Aula 06 Linguagem Java (Orientação a Objetos – Atributos e Métodos)
INSPEÇÃO EM SERVIÇO III Pan-American Conference for Nondestructive Testing 05 de junho de 2003.
3. SELEÇÃO DE PRESTADOR DE SERVIÇOS LOGÍSTICOS 3
SISTEMAS OPERACIONAIS MEMÓRIA VIRTUAL. INTRODUÇÃO Memória Virtual é um técnica sofisticada e poderosa de gerenciamento de memória, onde a MP e a MS são.
OPERAÇÕES COM NÚMEROS NATURAIS
Clique para editar o título Linguagem C Para programadores Python PMR
Estruturas Lineares de Dados Revisão Wolley W. Silva.
Jean Carlo Mendes
Laboratório de Computação Aula 05 – Array Prof. Fábio Dias
Disciplina: Análise e Projeto de Sistemas
1 ISO (ALGUNS ASPECTOS RELEVANTES) Prof. M.Sc Jefferson L. C. Salles.
CICLO BÁSICO GEOMETRIA OBJETIVOS Espera-se que o aluno:
Normalização (4FN) Na literatura aparecem outras formas normais, como a forma normal de Boyce/Codd, a 4FN e a 5FN. Destas a única que tem importância na.
ORGANIZAÇÃO DA INFORMAÇÃO: Metodologias de Resumos e Indexação
TIC 1. Informática  A palavra informática tem origem na junção das palavras informação e automática  Informática significa, portanto, tratamento da.
 Apenas uma parte relativamente pequena do espaço de endereçamento dos programas é acessada em um instante qualquer  Localidade Temporal  Um item referenciado.
A HISTÓRIA DOS COMPUTADORES DESDE O INÍCIO AOS DIAS DE HOJE…
INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Listas.
Lógica de programação Estruturas de seleção Estruturas de repetição Sub-Rotinas 1.
Revisão de Conceitos Thiago Medeiros Barros. Algoritmos Qualquer problema de computação pode ser resolvido executando uma série de ações em uma ordem.
Texto de: Nair Yumiko Kobashi. Um pouco de história dos processos de representação da informação: 2º Milênio A.C. -> tábuas de argila protegidas por uma.
Método para seu projeto Profa. Dra. Marina Moreira.
PERCEPÇÃO, ESTÉTICA E PLÁSTICA
Oficina de Informática
UNIVERSIDADE FEDERAL DE MINAS GERAIS Listas Lineares Cristiano Arbex Valle Vinicius Fernandes dos Santos
Arquitetura ARM Registradores e Endereçamento.
SOFTWARE Software Aplicativo – Executa Tarefas de Processamento de informações para usuários finais. Software de Sistemas – Gerencia e Apóia operações.
EA869 Montadores Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato.
Disciplina: Circuitos Digitais Curso: Engenharia de Telecomunicações
Calculo de Hoare Daniel Soares, Gabriel Alabarse Hernandez(150756) e Vanius Zapalowski(150843)
Aula 6 – Arrays.. Arrays Arrays em PHP são estruturas de dados mais sofisticadas e flexíveis do que em outras linguagens; Um array é uma seqüência ordenada.
INE5408 Estruturas de Dados Árvores Binárias de Busca - Características - Algoritmos - Inserção, deleção e pesquisa.
MUTAÇÃO DE INTERFACE (MI) JACKSON ANTONIO DO PRADO LIMA SILVIA REGINA VERGILIO.
Aula 5 - Métodos. Desenvolvimento de Programas A melhor forma de construir programas grandes é dividi-los em programas menores que executam tarefas específicas.
ORÇAMENTO BASE ZERO.
Transcrição da apresentação:

EA869 Algoritmos: estruturas de dados e linguagens de programação Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1

Introdução 2 Problema Computável Problema Computável COMPLEXIDADE Encontro solução em tempo factível? ORDEM DE COMPLEXIDADE DO ALGORITMO O melhor algoritmo é O(c n ) ou maior Problema Não-tratável O(c n ) ou maior, mas não se sabe se é a melhor solução Problema NP O(n c ) ou menorProblema P

Introdução As questões a respeito da computabilidade e da complexidade nos levam a refletir sobre a existência de um algoritmo para resolver um problema e sobre o custo computacional envolvido em sua execução. Tendo um mãos um algoritmo de interesse, o que é necessário fazer para que ele esteja pronto para ser executado em um computador?  É preciso descrever ou expressar todos os seus passos segundo uma linguagem.  Uma vez escrito nesta linguagem, o algoritmo precisa ser traduzido para um formato inteligível à máquina incumbida de sua execução. 3 Linguagens de programação Processo de execução de um programa

Linguagem de máquina Na linguagem de máquina, os comandos (ou instruções) e dados que devem ser manipulados são codificados em cadeias binárias. É a linguagem mais próxima ao hardware. A programação, portanto, depende de um pleno conhecimento de como cada comando é representado e interpretado no circuito digital Palavra de 16 bits Instrução É fácil e eficiente programar em linguagem de máquina?

Linguagem de máquina Vejamos um exemplo bastante simples: 5 cb – determina se o valor do registrador B é ou não complementado. sb – seleciona entre o valor referente ao registrador B ou o valor fixo 1. la – habilita o carregamento de um valor especificado na entrada paralela do registrador A.

Linguagem de máquina Exemplo: 6 Este humilde computador permite a realização de algumas operações: (1) A ← A + B (2) A ← A + 1 (3) A ← A – B Um “programa”, escrito em linguagem de máquina, que compute a subtração entre os valores em A e B, seria dado pela sequência de comandos binários: c b ← 1(complementa B) s b ← 0(seleciona o complemento de B) l a ← 1(armazena o resultado em A)

Linguagem simbólica Como poderíamos tornar o código mais compreensível ao programador? MOV R1, R2 MOV R1, #4 CMP R1, #4 BEQ FIM FIM: ADD R1, R1, 1 Linguagem simbólica (Assembly)  Substitui o código de máquina por símbolos mais próximos da linguagem humana.  Continua sendo muito próxima do hardware.  Trata-se de uma linguagem dependente da arquitetura do computador (hardware).  O código precisa ser interpretado, isto é, convertido ao formato binário para ser executado pelo computador. Quais as vantagens e desvantagens desta linguagem? Etapa de montagem – veremos no final do curso

Linguagem simbólica Breve história da linguagem Assembly 8 Década de 50 Programas eram escritos em linguagem de máquina Assembly surge para facilitar a programação Década de 70/80 Surgimento das linguagens de alto nível Assembly passou a ser pouco usada Década de 90 até hoje “Era dos microprocessadores” e sistemas embarcados Assembly “volta” na busca de desempenho e velocidade

Linguagem simbólica O uso de Assembly tem se tornado mais frequente. 9

Linguagem simbólica 10 Porque aprender a linguagem Assembly? Acesso direto e controle total do hardware Programas exigem menos memória e são menores Muitas aplicações industriais são feitas em Assembly Mais eficiente – não gera códigos supérfluos Possibilidade de desenvolver rotinas mais eficazes e incorporá-las a programas de alto nível Facilita a programação em alto nível

Linguagem simbólica O que é preciso saber para programar em Assembly?  Conhecer detalhes do hardware: organização da memória, registradores, periféricos, arquitetura etc.  Trabalhar fluentemente com representação binária:  Números negativos.  Condições de overflow.  Ponto flutuante.  Aprender o conjunto de instruções do processador. 11

Linguagens de alto nível E como poderíamos pensar em uma linguagem executável em qualquer máquina e mais próxima da linguagem humana? 12 MOV R1, R2 MOV R1, #4 CMP R1, #4 BEQ FIM FIM: ADD R1, R1, 1 public class ExemploDeFor { public static void main(String[] args) { for (int i = 0; i < 4; i++){ System.out.println("Indice " + i); } Linguagens de alto nível  Possuem uma semântica mais amigável ao usuário.  Distante do código de máquina e muito próximo da linguagem humana.  Exemplos: C, C++, C#, Java, Ruby, Python, Lisp, Prolog etc.  Podem ser do tipo procedimental (descreve passo a passo) ou declarativa (descreve fatos e regras e busca uma solução lógica).

Linguagens de alto nível Existem também linguagens especiais voltadas à aplicação e para outros propósitos. 13 Linguagens voltadas à aplicação Alguns exemplos: Aplicações matemáticas: Matlab Linguagens esotéricas: Voltadas a inteligência artificial: Prolog, Lisp HAI CAN HAS STDIO? VISIBLE "OLÁ MUNDO!" KTHXBYE LOLcode Piet [> > > >+++> > > > > >+++ -.>--.> ++++.>++.>---.>---.>.>.>+.>+++., Brainfuck

Processo de execução Uma vez escolhida uma linguagem de programação e escrito o código, como ele é executado? 14 Problema Algoritmo Programa de alto nível Programa em linguagem de máquina Execução resolução NÍVEL CONCEITUAL programação tradução compilador montador HIERARQUIA DE LINGUAGENS decodificação HARDWARE (circuitos e sinais físicos)

Linguagens de Programação Ponto importante: um algoritmo pode ser expresso em qualquer linguagem de programação. Em última análise, elas servem apenas como um mediador entre o programador e a máquina. As linguagens de baixo nível (máquina e simbólica) não oferecem muitos recursos para o programador. Porém, o controle sobre sinais e aspectos de hardware é bem mais efetivo. O que muda, portanto, de uma linguagem para outra é a dificuldade e a inteligibilidade do código escrito. 15

Estruturas de dados A preparação de um algoritmo também envolve a escolha de uma forma vantajosa de organizar os dados que serão acessados e processados. Dependendo da aplicação, pode haver um tipo de organização que capture ou expresse de maneira natural uma característica dos dados associados ao problema. Veremos quatro tipos básicos:  Vetor  Fila  Pilha  Árvore 16

Estruturas de dados Suponha que certo algoritmo precise acessar a nota de um aluno dado o seu RA. Como os dados devem ser organizados?  Solução: uma lista cujo índice seja o RA e o conteúdo as notas  Dessa forma, é possível acessar, incluir e modificar a nota de um aluno dado o seu RA de maneira direta. Vetor: sequência de tamanho fixo cujo acesso é realizado através do índice que identifica a posição do elemento a ser lido ou escrito.  Com isto, temos acesso aleatório (“direto”) e o tempo de acesso a qualquer elemento é idêntico. 17 Leitura – vetor(i) i é fornecido elemento ← vetor(i) Escrita – vetor(i) i é fornecido vetor(i) ← elemento

Estruturas de dados Considere um algoritmo que deve gerenciar o atendimento telefônico de um call center. Como os dados devem ser organizados? 18 c1 c2 c3 c4 c5 c0 REGISTRO DE DADOS c6

Estruturas de dados Fila: o acesso aos elementos da fila é realizado através das posições “entrada” e “saída” – as demais posições não são visíveis.  Estrutura do tipo FIFO (first in, first out).  Acesso: através de dois apontadores.  Manipulação: apenas a entrada e a saída são visíveis.  Fila cheia: índice de entrada i > índice máximo da fila.  Fila vazia: índice de entrada i = índice de saída j. 19 Leitura – posição “saída” elemento ← f(j) atualiza índice de saída j Escrita – posição “entrada” f(i) ← elemento atualiza índice de entrada i

Estruturas de dados Considere um algoritmo que armazena as páginas que você acessa na Internet de tal modo que seja possível retornar à primeira página acessada refazendo o mesmo caminho. Como os dados devem ser organizados? 20 (1) (2) Devo retornar à página mais recentemente visitada.

Estruturas de dados Pilha: o acesso aos elementos da pilha é realizado através da mesma posição (entrada = saída) – as demais posições não são visíveis.  Estrutura do tipo LIFO (last in, first out).  Acesso: através de um único apontador.  Pilha cheia: i > índice da última posição da pilha.  Pilha vazia: i = índice da primeira posição da pilha.  i sempre aponta para a próxima posição livre da pilha. 21 Leitura atualiza o índice i elemento ← p(i) Escrita p(i) ← elemento atualiza o índice i

Estruturas de dados Árvore:  Estrutura: cada célula contém um dado e apontador para a(s) próxima(s) célula(s). As células não precisam ser homogêneas.  Manipulação: flexível, com início pela raiz. 22 dados apontador célula:

Estruturas de dados Árvore:  O acesso aos elementos da árvore é realizado através de um percurso a partir de sua raiz, seguindo o(s) apontador(es) das células. Todas as posições da estrutura são acessíveis. 23 Leitura – célula j navegar na estrutura até célula j elemento ← dados da célula Escrita –célula j navegar na estrutura até célula j dados da célula ← elemento

Créditos 24  Este material está baseado nas notas de aula elaboradas pelo Prof. Léo Pini e pelo aluno de doutorado Tiago Novaes.