UEM/CTC Departamento de Informática Curso: Ciência da Computação Professor: Flávio Rogério Uber Fundamentos de Algoritmos (5175/31) Material Original: Prof. Yandre Maldonado e Gomes da Costa (UEM/DIN)
A disciplina Professor: Flávio Rogério Uber Email: flavio.uber@gmail.com Bloco C56 Sala 204 Bibliografia: Nicolas Wirth. Algoritmos e Estruturas de Dados. Editora Prentice-Hall, 1989. Guimarães & Lages. Algoritmos e Estruturas de Dados. Editora LTC. 2001. Nivio Ziviani. Projetos de Algoritmos com Implementações dem Java e C++. Editora Thomson. 2007.
A Disciplina Programa 1. Definiçoes 2. Modelagem Algorítmica de Problemas Reais Tipos de dados básicos Tipos de dados estruturados Abstração em nível de comando Seleção Repetição entrada/saída Abstração em nível de módulo Funções e Procedimentos Execução de Processos Escopo Alocação de variáveis Passagem de Parâmetro 3. Técnicas de Construção de Algoritmos
Critério de Avaliação 2 Avaliações: 1a Avaliação(Peso 2) 75% Prova / 25% Trabalho 2a Avaliação(Peso 3) 75% Prova / 25% Trabalho
Definições: Redação que descreve de forma lógica e sem ambigüidades, uma seqüência de passos (ações) para se resolver um problema que tenha um comportamento padrão. Franco e Polidório Uma seqüência de passos que visam atingir um objetivo bem definido. Forbellone e Eberspächer
É a descrição de um padrão de comportamento, expressado em termos de um repertório bem definido e finito de ações primitivas, das quais damos por certo que elas podem ser executadas. Guimarães e Lages Descrição de um conjunto de comandos que, obedecidos, resultam numa sucessão finita de ações. Farrer e outros
O algoritmo deve ensinar a resolver o problema, e não trazer a solução. Exemplo: receita de bolo; Ação é um acontecimento que, a partir de um estado inicial, após um período de tempo finito, produz um resultado final previsível e bem definido. Objetivo: solução do problema.
Aspecto lógico: ordenar o pensamento. Organização seqüencial das ações pertinentes à solução de um problema; Exemplo: o bolo só pode ser levado ao forno depois que a massa estiver pronta. Lógica no dia-a-dia: Todo mamífero é animal. Todo cavalo é mamífero. Portanto, todo cavalo é animal.
Padrão de comportamento: uma seqüência de ações para resolver um problema. Exemplos: Trocar uma lâmpada (problema cotidiano): pegue uma escada; posicione-a sob a lâmpada; busque uma lâmpada nova; suba na escada; retire a lâmpada velha; coloque a lâmpada nova. Calcular a área de um retângulo (problema matemático): obtenha a medida da base do retângulo; obtenha a medida da altura do retângulo; multiplique a medida da base pela medida da altura.
Aspecto estático e aspecto dinâmico: Estático: não depende do tempo, mas do espaço físico onde o algoritmo está sendo escrito; Dinâmico: como se comporta a execução de cada ação do algoritmo com o passar do tempo. Todo algoritmo deve produzir resultados corretos, e ser finito tanto estática quanto dinamicamente.
Ambigüidade: relacionada à sintaxe e semântica de linguagens naturais. O artista produz formas perfeitas. Linguagens naturais são muito extensas, possuindo ambigüidade; Linguagem Natural X Linguagem Computacional
Linguagem Algorítmica Linguagem Computacional Nos algoritmos, devemos utilizar construções que executarão uma ação específica bem definida; Uma linguagem algorítmica deve ter sintaxe rígida e semântica bem definida; Toda linguagem possui sintaxe e semântica.
Sintaxe: dita as regras de como as sentenças e cada um de seus elementos devem ser construídos corretamente; Semântica: se preocupa com o significa de uma sentença construída.
A sintaxe por si só não define completamente uma linguagem. Exemplo: Descoloridas idéias verdes sonham furiosamente (Chomsky) Por outro lado: Nóis foi, mais já vortemo
Algoritmos geralmente descrevem algum processamento de dados: Dados de Entrada Processamento (Computador) Dados de Saída Estes dados precisam ser representados (descritos) nos algoritmos;
Um algoritmo para fins computacionais é a descrição de ações que manipulam objetos em função do tempo. Objetos descrevem o estado computacional; Objetos têm função específica; Ações são direcionadas aos objetos; Objetos são definidos como parte do programa; Estados diferentes requerem objetos diferentes. * Objetos frequentemente serão chamados de variáveis. * Exemplo do Retângulo
Argumentos de Entrada e Saída Entrada: objetos cujos valores são conhecidos em tempo de execução; permitem um comportamento mais genérico dentro do caráter específico do comportamento padrão; Saída: objetos que armazenam a solução objetivo de um problema;
Exercícios Dada uma equação do 2o. Grau na forma ax 2 +bx + cc = 0 responda: a) Quais os argumentos de entrada para se calcular as raízes dessa equação? b) Quais os argumentos de saída, sabendo que o objetivo é calcular as raízes reais da equação? c) Faça um algoritmo para calcular as raízes da equação. d) Execute o algoritmo que você fez para resolver a equação: 2x 2 +2x-2=0
Exercício b h Considerando a figura mostrada acima (um retângulo), faça um algoritmo que calcule a área da mesma. Neste problema existem três valores (estados) a serem representados: Altura do retângulo (h); Largura (ou base) do retângulo (b); Área do retângulo. Dados de Entrada Dados de Saída
A cada objeto é associado um nome que identifica este objeto ao longo da programação. Este nome é chamado identificador. De forma geral, podemos dizer que um identificador está associado à uma célula de memória. O termo variável é freqüentemente utilizado como sinônimo de identificador.
Em geral, as linguagens de programação exigem nomes de identificadores com as seguintes característica: Use somente letras e números; O primeiro caracter do nome deve ser uma letra; Não é permitido o uso de caracteres especiais. Exemplos válidos: ImpostoDeRenda, F1, soma, produto, desconto, SalarioHora. Exemplos inválidos: 1f, Imposto-renda, salario hora.
Atributos (características) de um objeto: Nome; Célula de memória; Valor associado; Tipo: define a categoria dos dados que podem ser armazenados no objeto. Nome identificador do objeto conteúdo (valor armazenado na célula de memória) célula de memória
O tipo: especifica uma classe de valores que podem ser armazenados na célula de memória associada ao identificador; define as operações válidas sobre o identificador;
Tipo de Dado Um identificador armazena um único dado num instante, mas este dado não pode ser qualquer um; Os objetos serão classificados segundo um tipo; Os dados podem ter estruturas físicas diferentes; As células de memória do computador precisam ser compatíveis com o tipo de dado que vão armazenar;
Devemos informar ao computador qual o tipo de dado que vamos armazenar; Esta informação determina quantas células de memória serão necessárias para armazenar o dado; Esta informação define quais serão as operações possíveis de se aplicar sobre os dados; Exemplo: em um dado numérico pode-se aplicar uma operação aritmética.
Os tipos de dados podem variar de uma linguagem para outra. No entanto, existem dois tipos básicos: Tipos simples; Tipos estruturados (estudados mais adiante); Inteiro Numérico Real Tipos de Dados Simples Caracter Lógico
Os Tipos de Dados Numéricos são divididos basicamente em dois grandes conjuntos: Inteiros; Reais; Os inteiros podem ser positivos, negativos ou nulos, mas não possuem um componente decimal;
Os inteiros são compatíveis com os reais, mas os reais não são compatíveis com os inteiros; Assim, um objeto real pode receber um valor inteiro, mas um objeto inteiro não pode receber um valor real; Declaração: LPE Pascal C inteiro integer int
Os reais podem ser positivos, negativos ou nulos, e possuem sempre um componente decimal; Exemplos: 2,34; 0,0; -214,123; Computacionalmente, existem muitas diferenças entre o armazenamento de números inteiros e números reais;
Os números inteiros consomem menos espaço de armazenamento em memória; Declaração: LPE Pascal C real real float
Os tipos de dados não numéricos: Caracter: formado pelas letras (de A a Z, e de a a z), dígitos (de 0 a 9) e caracteres especiais (~,.,?, >, <,...); A diferença entre caracteres e dados numéricos estão na forma de armazenamento, e nas operações legais permitidas sobre os mesmos; Exemplo: operações aritméticas sobre os dados numéricos.
Para diferenciar um caracter de um identificador ou de um dado numérico, utilizaremos apóstrofes. Assim: 8 é um dado numérico; 8 é um caracter; A é um identificador; A é um caracter
Objetos declarados como do tipo caracter poderão armazenar um único caracter; Para armazenar uma seqüência de caracteres será utilizada a estrutura cadeia de caracteres, que consiste num tipo de dado estruturado; Exemplo: Z é um caracter; ANA é uma cadeia de caracteres;
Declaração: LPE Pascal C texto char char
Tipo Lógico: os valores lógicos podem assumir uma entre duas possibilidades (verdadeiro ou falso); Só poderá armazenar um destes dois valores; Muito utilizados em controle do fluxo lógico do algoritmo; LPE Pascal C logico boolean não existe