Estrutura de Dados e Algoritmos ( )

Documentos relacionados
ESTRUTURA DE DADOS (TCC ) Cristina Boeres

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi

Algoritmos e Programação

Programação I A Linguagem C. Prof. Carlos Alberto

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Estrutura de Dados Conceitos Iniciais

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Algoritmos: Conceitos Fundamentais. Slides de autoria de Rosely Sanches e Simone Senger de Souza

Algoritmos: Conceitos Fundamentais. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

Estruturas de Repetição

Instruções, dados e expressões

Introdução a Linguagem C. Prof. Me. Hélio Esperidião

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA

Conceitos básicos de programação

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Introdução à Ciência da Computação

TÉCNICO DE INFORMÁTICA - SISTEMAS

Linguagem C Princípios Básicos (parte 1)

Programação Estruturada Aula VisualG

Conceitos Básicos de Programação

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Programação Estruturada

Introdução a programação Visão geral

Linguagem de Programação I. Aula 06 Linguagem C: Tipos de Dados

Linguagem C: Introdução

Estrutura do programa

Linguagens de Programação

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Introdução à Programação Estruturada Parte 3. Material da Prof. Ana Eliza

Ambiente de desenvolvimento

Programação Introdução

Noções de algoritmos - Aula 1

Programação Estruturada Aula - Tipos, Constantes, Variáveis e Identificadores

CONCEITOS DE ALGORITMOS

Algoritmos e Estruturas de Dados I (DCC/003) Introdução à Programação de Computadores. Aula - Tópico 1

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

Introdução a Programação. Curso: Sistemas de Informação Programação I José R. Merlin

ALGORITMOS 3ª Aula. 3. Introdução Tipos de dados, variáveis e operadores Tipos de dados

Web site. Profa. Patrícia Dockhorn Costa.

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

Algoritmos e Programação

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Conceitos Básicos Linguagem C

Laboratório de Programação II

Programação Básica. Estrutura de um algoritmo

Aula 3: Algoritmos: Formalização e Construção

Working 03 : Conceitos Básicos I

3. Linguagem de Programação C

Aula 03: Introdução a C

3. Linguagem de Programação C

Oficina de Python Prof. Me. José Carlos Perini

A Linguagem C. A forma de um programa em C

Unidade 5: Introdução à Programação com C/C++ Prof. Daniel Caetano

Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011

1 TECNOLOGIA ELEMENTAR CAPÍTULO 3 E-books PCNA. Vol. 1 TECNOLOGIA ELEMENTAR CAPÍTULO 3 APRESENTANDO A LINGUAGEM C. Página 1

Algoritmos e Programação

Métodos Computacionais

Puca Huachi Vaz Penna

Slide 01 16/03/2017. Estruturas de Dados. Prof. Cleziel Franzoni da /Cleziel.

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

FACULDADE BATISTA MINEIRA - CST Banco de Dados Estruturas de Dados - Variáveis

Lição 4 Fundamentos da programação

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Programação científica C++

CIT Aula 02 Variáveis e Estruturas de desvio condicional. Autor: Max Rodrigues Marques Carga Horária: 2 h 22/07/15 1

Disciplina: Introdução a Programação. IPRJ/UERJ Professora: Sílvia Mara da Costa Campos Victer. Índice: Aula1 - Introdução Programa Algoritmo

Programação: Vetores

Introdução à Linguagem C Variáveis e Expressões

Conhecendo a Linguagem de Programação C

SEBENTA INTRODUÇÃO Á ALGORITMIA

Fundamentos de Algoritmos (5175/31)

SSC304 Introdução à Programação Para Engenharias. Introdução a Linguagem C. GE4 Bio

4.1- Aritméticos + soma - subtração * multiplicação / divisão % módulo (resto da divisão de inteiros ).

Revisão. Profa Marina Gomes

Unidade 5: Introdução à Programação com C/C++

Introdução à Programação

TECNOLOGIA EM REDES DE COMPUTADORES. computadores. Aula 4

INF1005: Programação I. Capítulo 2. Ivan Mathias Filho Algoritmo

I - CONCEITOS INICIAIS

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Técnicas de Programação

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA. DIM0320 Algoritmos e Programação de Computadores

Programação Procedimental

Introdução a Programação de Jogos

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES

Introdução à Linguagem C++

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35

Oficina de Python Prof. Me. José Carlos Perini

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Questão 1 Analise o trecho do código abaixo, escrito na linguagem C#:

Algoritmos II prof. Daniel Oliveira

4. Estruturas Fundamentais de Programação em C

Programação de Computadores IV

Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas

Transcrição:

Estrutura de Dados e Algoritmos ( www.ic.uff.br/~boeres/ed.html ) Tópicos! Introdução/Revisão! Algoritmos, Noções de Complexidade! Listas, Pilhas e Filas! Tabelas Hash ( etc! Árvores (binárias, AVL, B,! Heap: lista de prioridades 1

Estrutura de Dados e Algoritmos ( www.ic.uff.br/~boeres/ed.html ) Bibliografia:! J. Szwarcfiter e L. Markeson, Estrutura de Dados e Algoritmos, Editora LTC.! Cormen, Leiserson and Rivest, Introduction to Algorithms, MIT Press. 2

Introdução! Implementação de uma Aplicação! representa uma abstração da realidade! consiste de um conjunto selecionado de dados relacionados com o problema a ser resolvido! deste conjunto, é possível a obtenção dos resultados esperados 3

Introdução! Cadastro de Pessoal de uma Empresa! Modelo Abstrato - simplificação! Empregado - conjunto de dados! os que são relevantes para o empregador e para os procedimentos contábeis da empresa! identificação, salário, dependentes,...! Abstraem-se dados irrelevantes:! cor do cabelo, estatura, peso 4

Introdução! Resolução de um problema! escolher uma abstração da realidade! o que é relevante para o problema! informação: um conjunto de dados! comportamento: um conjunto de operações a forma como se representa informação e suas operações estão intimamente ligadas 5

Introdução! Dados Relevantes em um Problema! escolher um conjunto de dados: uma representação possível da situação real! orientada às características do problema! os dados precisam ser representados! a etapa seguinte é a escolha de uma forma de representação 6

Introdução! Como representar dados?! depende da ferramenta usada na solução! não é uma tarefa muito trivial! não existe uma única solução! não existe receita! a solução de um problema no computador é um modelo! a construção do modelo transcende diversos níveis de detalhe 7

Introdução! A decisão é influenciada pelo problema! As outras são dependentes da ferramenta tecnologia que se emprega! Programador: focaliza o problema! decisões de nível mais baixo - projetistas do equipamento computacional! ferramentas que permitam ao programador se concentrar nas características do problema 8

Algoritmo! Um processo sistemático para a resolução de problemas! dois aspectos básicos no estudo de algoritmos correção e análise! correção: exatidão do método empregado! análise: obtenção de parâmetros que permitam verificar a eficiência do algoritmo ( ocupada (execução e memória 9

Algoritmo! Computa uma saída (o resultado do problema) a partir de uma entrada! durante o processo, manipula dados gerados a partir de sua entrada! dados dispostos e manipulados de forma homogênea Tipo Abstrato de dados! um conjunto de dados + operações que podem ser executadas sobre esses dados 10

Algoritmo! Tipo Abstrato de dados: exemplo! estrutura do tipo aluno struct aluno{ int matricula; int nome; char outras_info[1024]; }! operação: procura_aluno_matricula ( aluno.matricula ) 11

Algoritmo! Um algoritmo é projetado em termos de Tipos Abstratos de Dados! Para implementá-lo em uma Linguagem de programação:! como representá-lo nesta linguagem?! tipos e Operações suportadas pelo computador.! na sua representação emprega-se Estruturas de Dados 12

Algoritmos e Estruturas de Dados! Resolução de um Problema! Algoritmo! representação do comportamento! Estrutura de Dados! representação da informação 13

Algoritmos e Estruturas de Dados! No processo de construção de programas: formulação do algoritmo definição de estruturas de dados estão intimamente ligadas 14

Algoritmos e Estruturas de Dados! Decisões sobre estruturas de dados não podem ser tomadas sem conhecimento dos algoritmos aplicados e vice-versa! Num algoritmo vamos distinguir dois aspectos complementares:! estático e dinâmico 15

Estrutura de Dados! Como a informação é organizada, como será manipulada e como será utilizada! estudo envolve dois objetivos complementares:! Identificar e desenvolver entidades matemáticas e operações! Determinar que classes de problemas podem ser resolvidas usando essas entidades e operações 16

Algoritmo! Um texto contendo comandos (instruções)! devem ser executados na ordem especificada! corresponde a representação concreta e tem caráter estático! esse texto nos interessa pelos efeitos que causa decorrentes de sua execução dado um conjunto de valores iniciais! execução: evento dinâmico " evolui no tempo 17

Algoritmo! Uma dificuldade na concepção e no entendimento de algoritmos é o relacionamento dos aspectos estático e dinâmico! como entender as estruturas dinâmicas das possíveis execuções do algoritmo a partir da estrutura estática 18

Algoritmo! Deve utilizar Estruturas Básicas de controle! formas naturais de pensar e adequadas à construção de algoritmos inteligíveis! SE... ENTÃO...SENÃO... 19

Algoritmo! Estado de um dado sistema é o conjunto de propriedades desse sistema que são relevantes na situação considerada! conjunto de valores de variáveis de um programa! Ação - evento que ocorre num período de tempo finito estabelecendo um efeito desejado e bem definido! ação: o interesse é decorrente do efeito produzido 20

Algoritmo! Em todo evento pode-se reconhecer um padrão de comportamento, fazendo-se abstração de diferentes estados iniciais e efeitos! cada vez que o padrão de comportamento é seguido, o evento ocorre! seu efeito é totalmente determinado pelo padrão de comportamento e pelo estado inicial 21

Algoritmo! É a descrição de um padrão de comportamento, em termos de um repertório bem definido e finito de ações primitivas, que podem ser executadas! possui um caráter imperativo! uma ação no algoritmo: um comando! é uma norma executável para estabelecer um certo efeito desejado 22

Apresentação dos Algoritmos! formato livre com comandos das linguagens estruturadas! estrutura de blocos! identação! funções! Linguagem C 23

Processamento de um Programa ( a>b ) If { ( maior printf ( A é } else { ( maior printf ( B é } Tradutor: Compilador + Linkeditor A é maior 24

Processamento de Linguagens! Linguagens de Programação: são projetadas em função da facilidade na construção e confiabilidade dos programas! Como executar em arquiteturas diferentes?! Duas alternativas:! Interpretação! Tradução 25

Interpretação 1. Obter o próximo comando do programa 2. Determinar que ações devem ser executadas 3. Executar essas ações! Esta seqüência é bastante semelhante àquela executada por computadores tradicionais: 1. Obter a próxima instrução (PC) 2. Incrementar o PC 3. Decodificar a instrução 4. Executar a instrução 26

Tradução! Programas escritos em LP de alto nível são traduzidos para versões equivalentes em linguagem de máquina antes de serem executados! Essa tradução é feita em vários passos! Compilador! Linkeditor! Loader 27

Compilação! Logicamente, a tradução pode ser dividida em 2 grandes partes:! análise do programa fonte (dados de ( entrada! síntese do programa objeto executável 28

Síntese do programa objeto! A saída da fase anterior consiste basicamente de ( o.*)! programas quase executáveis! podem fazer referências a dados externos ou outros programas! Linkedição: une diversos *.o em um programa executável pronto para rodar 29

Programa pgm1.c ( a>b ) If { ( maior printf ( A é } else { ( maior printf ( B é } compilação pgm1.o pgm2.c ( a>b ) If { ( maior printf ( A é } else { ( maior printf ( B é } pgm3.c compilação ( a>b ) If { ( maior printf ( A é } else { ( maior printf ( B é } compilação pgm2.0 pgm3.0 linkedição programa.exe 30

Síntese do programa objeto! Linkedição! um procedimento para finalizar a resolução de referências! programas podem ser traduzidos separadamente! ou utiliza-se uma biblioteca 31

Visão Geral de um Programa! O Problema Imprimir uma mensagem mostrando o que está sendo somado Calcular a soma de três números Imprimir o resultado 32

Visão Geral de um Programa! Este programa não faz muita coisa! Como seleciona os números a somar?! Não imprime nenhuma mensagem explicativa?! Que tipos de números soma? 33

Visão Geral de um Programa Definindo melhor o problema Exibir para o usuário o que faz o programa Exibir o que espera como entrada Pedir os três valores (A, B,C) e armazenar Somar A + B + C e guardar em SOMA Exibir o valor SOMA ao usuário 34

Modelo de um Programa Entrada Processa a Entrada Saída! Este é um modelo seguido pelos programas! Um programa tem que ser capaz de armazenar sua entrada em algum lugar 35

Modelo de um Programa! Entradas são armazenadas para serem processadas e gerar uma saída útil e desejada! Dados são armazenados em variáveis! posições de memória com um nome que podem conter dados! as variáveis podem conter tipos diferentes de dados 36

Variáveis e Tipos de Dados! Variáveis podem conter valores diferentes durante a execução do programa! os valores são consistentes com o tipo da variável! Alguns valores não devem ser alterados durante a execução! Constantes 37

Variáveis e Tipos de Dados! Dados - em variáveis ou constantes -podem ser de diferentes tipos ( longos! inteiros ( curtos /! reais - ponto flutuante! precisão simples ou dupla! caracteres isolados! string de caracteres 38

Variáveis! Variável é algo que se altera! Dados armazenados em uma variável podem se modificar! Em um programa! definir uma variável significa reservar uma memória para armazenar seus valores 39

Variáveis! Deve-se atribuir às variáveis nomes que o ajudem a lembrar a finalidade de cada uma delas! Nomes mais longos tornam seu programa mais claro! outros podem ter que revisar seu código! pode ser necessário revisar o programa daqui a 6 meses 40

Identificadores! Elemento básico da Linguagem! Identificadores dão nomes a:! Variáveis! Trechos de Programa 41

Identificadores! C- Padrão ANSI: nomes de variáveis, funções, rótulos == identificadores! Tamanho: 1 a diversos caracteres: pelo menos os 61ºs são válidos! 1o. caracter - letra ou sublinhado! letras maiúsculas e minúsculas são tratadas diferentemente 42

Blocos! um conjunto de comandos com uma função bem definida! serve para definir os limites onde as variáveis declaradas em seu interior são conhecidas! Variáveis locais a blocos e globais a blocos! Blocos podem possuir um nome: subprogramas (funções no C) ou não! são delimitados por { } 43

Tipo de Dados! Na matemática, variáveis são classificadas de acordo com algumas características importantes! Existe distinção clara entre! variáveis reais, complexas e lógicas! valores individuais e conjunto de valores! funções 44

Tipo de Dados! Esta noção de classificação é muito importante! Cada constante, variável, expressão ou função é de um certo tipo! refere-se ao conjunto de valores que pode assumir 45

Tipo de Dados! Em programas (em geral), não é possível deduzir o tipo da variável a partir do seu contexto! é necessário explicitar o tipo de cada variável! a cada tipo de dados está associada uma representação na computador! é necessário conhecer o tipo de dados para saber qual a sua representação 46

Tipo de Dados! A um tipo de dados está associado:! uma representação! o tamanho de células de memória para armazenar esta representação! a área de memória onde ficará o valor da variável tem que ter dimensões compatíveis com a sua representação! conjunto de valores que variáveis de um dado tipo podem assumir 47

Tipo de Dados! As operações exigem argumentos de um dado tipo e produzem resultados do mesmo tipo! É importante para o compilador saber o tipo de cada variável antes de empregá-la em uma operação 48

Definição de Variáveis! int X1! float A, B;! char Nome; 49

Definição de Variáveis! A semântica da declaração de uma variável corresponde a! criação de locais na memória rotulados com o nome da variável (identificador)! marcada com o tipo de valores que ela pode conter (equivale a um tamanho e forma de ( representação! X1: é o nome do local de memória que só pode conter variáveis do tipo inteiro! A e B só podem conter variáveis do tipo real 50

Compatibilidade de Tipos! É importante observar que:! o resultado da expressão do lado direito de um comando de atribuição deve ser coerente com o tipo declarado para a variável do lado esquerdo! a = b+c; b e c float então a deve ser float 51

Expressões! forma linearizada usada na matemática! Operadores Aritméticos! +, -, *, / ( inteiros (divisão de 1 = 3/2!! Precedência: da matemática! uso de parênteses! a = b+c * (x*y-5);! a = a+2;! mod : resto da divisão inteira 52

Expressões! Operadores Lógicos! dentro das relações lógicas, usaremos conectivos lógicos usuais (&&)! E ( )! OU (!)! NEGAÇÃO! Conectivos relacionais! >, <, >=, <=, ==,!= 53

Expressões! Prioridades para operações mistas! 1o. : parênteses e funções! 2o. : expressões aritméticas *, / ( binários ) -, +! 3o. : comparações >, >=, <, <=, ==,!=! 4o. :!! 5o. : &&! 6o. : 54

Comentários! Uma anotacão! Servem para ajudar a explicar a codificação! Seu programa deve ser compreendido por qualquer outro programador! /* COMENTÁRIO..*/! // comentário até o fim da linha 55

Comentários! Devem ser utilizados com liberalidade em todo o programa! Devem explicar seu algoritmo! Estão relacionados com a solução do problema! Não devem ser óbvios 56

Atribuição! Atribuição! designam valores a uma variável! A = B; /* Faz A = B */! /* Este é um comentário óbvio - desnecessário */! os valores atribuídos a uma variável devem ser compatíveis com seu tipo! Sintáxe: identificador = valor ; 57

Operações Especiais do C! Incrementando 1:! i++;! ++i;! Decrementando 1:! i--;! --i; 58

Fluxo de Controle! o que deve ser executado: processo dinâmico! determina em cada passo da execução, qual o próximo comando a ser executado! a ordem de execução das ações é a chave para entender o funcionamento do algoritmo! depende dos dados de entrada 59

Estruturas Básicas de Controle! Um algoritmo deve ser determinístico:! dada as mesmas condições iniciais deve produzir a final da execução os mesmos resultados! só estamos interessados em algoritmos que terminam em um tempo finito! Programas:! uma certa espécie de algoritmos 60

Estruturas Básicas de Controle! Seqüenciamento:! Separa um comando do outro e determina a execução em seqüência dos comandos! estrutura de controle mais simples: seqüência simples traz a cesta com batatas; traz a panela do armário; coloca o avental; descasca batatas; devolve a cesta; 61

Estruturas Básicas de Controle! condicional: se... então traz a cesta com batatas; traz a panela do armário; se roupa é clara então coloca avental; descasca batatas; devolve a cesta; if ( condição) {...} else {...} 62

Instruções Condicionais ( NaoAguentaCalor )! if { } ( JanelaNaoAbre ) if { } FiqueForaDaCozinha; else { LavePratos;} 63

Comandos Básicos do C! <condição> é qualquer expressão cujo resultado é um valor booleano! onde está relacionado um bloco de comandos (limitados por { / }) pode ser usado um único comando! bloco: como um novo comando / extensão da linguagem 64

Comandos Básicos do C! Repetição! quando um conjunto de ações é executado repetidamente enquanto uma determinada condição permanece válida! condição é uma expressão cujo resultado é um valor lógico 65

Comandos Básicos do C! Repetição enquanto <condição> faça C1; C2; C3; C4; fim enquanto; 66

Comandos Básicos do C! Repetição - C while ( <condição> ) { } C1; C2; C3; C4; 67

Comandos Básicos do C! Repetição faça C1; C2; C3; C4; enquanto <condição>; 68

Comandos Básicos do C! Repetição C do { C1; C2; C3; C4; } while (<condição>); 69

Comandos Básicos do C! Repetição { (++ i for (i=0; i<n; }; C1; C2; C3; C4; 70

Comandos Básicos do C! Repetição! while<condição>...! se já da primeira vez a condição for falsa, os comandos não são executados nenhuma vez! do { } while, condição>! se da primeira vez a condição for falsa, os comandos são executados uma vez! Enquanto a condição for verdadeira os comandos são executados, quando for falsa, o comando é abandonado 71

Tipos de Dados Simples Inteiros! Qualquer valor do conjunto dos números inteiros! inteiros curtos - int - 4 bytes! inteiros longos - long - 8 bytes! operações! = ( inteiros /(divisão de *, -, +,!! mod 72

Reais! Também chamados de ponto flutuante! Qualquer valor do conjunto dos números reais! estão limitados no número de dígitos decimais - float ou double! sua representação: mantissa e expoente! operações :=, +, -, *, / 73

Usando Tipos! Se tenho que definir uma variável para conter idades, que tipo usar?! inteiros, e curtos são suficientes! É função do:! conjunto de valores que a variável pode assumir! da precisão que se deseja no resultado de operações 74

Caracteres! É qualquer caracter isolado representado no computador! letras e números são caracteres! caracteres especiais - &, %! caracteres especiais e não visíveis - ESC, CR, LF,! ocupam 1 byte - ASCII! char a = A ; 75

Strings de Caracteres! Um número arbitrário de ocorrências de caracteres! deixa em aberto o número de ocorrências! não possui uma representação direta no C! char a[50]! #define nome Maria 76