Unidade Curricular: PI e PCI Ficha-Resumo – 002.01.Algoritmia ALGORITMO - Um algoritmo representa uma sequência finita e não ambígua de instruções elementares bem definidas, cuja execução levará à solução de um determinado problema. Cada uma destas instruções pode ser executada mecanicamente numa quantidade finita de tempo. “Dividir para Conquistar” – Abordagem que transforma um problema complexo num conjunto de subproblemas mais simples para resolver. A Aproximação Descendente (Top-Down) – Permite estruturar o problema e organizá-lo na forma de conjunto problema/subproblemas de forma a conduzir à solução. Exemplo: Fritar Um Ovo Abordagem Inicial: 1. Escolher um Ovo 2. Fritar o Ovo 3. Servir o Ovo Frito 4. Comer Abordagem Detalhada: Escolher um Ovo Abrir o Frigorifico Procurar os Ovos Transportar ovo para o fogão Fritar o Ovo Pegar na Frigideira e Colocar no Fogão Pegar no óleo e espalhar na Frigideira – até ser suficiente Ligar o fogão Partir o Ovo e coloca-lo na Frigideira Enquanto Não Estiver Frito Deixar Fritar Desligar o Fogão Retirar o Ovo da Frigideira Servir o Ovo Frito Colocar o Ovo num Prato Colocar o Prato na Mesa Pegar numa Faca e num Garfo Comer 1 | PI / PCI - © 2 0 1 2 / 2 0 1 3 - J o ã o R e b e l o Unidade Curricular: PI e PCI Ficha-Resumo – 002.01.Algoritmia Características de um Algoritmo: À semelhança de uma fábrica que produz um determinado bem a partir de um conjunto de operações aplicadas às matérias-primas, um algoritmo produz informação aplicando um conjunto de operações a dados de entradas (factos isolados que podem nem estar relacionados). Um ALGORITMO deve sempre considerar: Uma ou Mais Entradas de Dados – As matérias-primas Quantidades inicialmente especificadas (por exemplo, através de instruções de leitura). Uma ou Mais Saídas – O produto final Uma ou mais saídas (habitualmente por instruções de escrita em qualquer suporte, papel, monitor, ficheiro, etc.) Número Finito de Passos A execução deve terminar sempre num número finito de passos. Não é concebível obter um produto final a partir de um processo que não termina Precisão Todos os passos do algoritmo devem ter um significado preciso, sem ambiguidades, indicando exatamente o que deve ser feito. Eficácia O processo de um algoritmo, deve conduzir à resolução do problema proposto Eficiência Se um algoritmo A para resolver um problema X proposto, demorar menos tempo a executar ou consumir menos recursos que outro algoritmo B, então o algoritmo A é considerado mais eficiente que o B embora sejam ambos eficazes (ou seja, ambos resolvem o problema). 2 | PI / PCI - © 2 0 1 2 / 2 0 1 3 - J o ã o R e b e l o Unidade Curricular: PI e PCI Ficha-Resumo – 002.01.Algoritmia Tipos de Dados Utilizados em Algoritmos: Qualquer linguagem de programação implementa os tipos de dados básicos que são utilizados no contexto de qualquer algoritmo. Estes consideram a existência de dois tipos fundamentais de dados: Primitivos: Tipos dados que são diretamente interpretados e manipulados pelo compilador ou interpretador. Ex: A Idade do Xico valor inteiro de 0 a 150 (o xico tem sorte) Complexos ou não-primitivos: Tipos de dados que são criados pelo programador e que são constituídos por dois ou mais tipos de dados primitivos. Ex: para guardar uma ficha de aluno do Xico, preciso aglomerar (juntar) numa mesma estrutura, o Nome (cadeia de caracteres), a Idade (inteiro), o número de aluno (inteiro) e a média de curso (valor em virgula flutuante). Tipos de Dados Primitivos mais comuns: Booleanos (lógicos) Numéricos Inteiros Reais (virgula flutuante) Caracteres alfanuméricos (1 Caracter ou String Múltiplos Caracteres) Ponteiros Tipos de Estruturas de Dados Não-Primitivos mais comuns: Comprimento Fixo Vetor Unidimensional (Array) Vetor Multidimensional Matriz Agregados Estruturas Comprimento Variável Listas (Lineares e não-Lineares) Ficheiros Sequenciais, Sequenciais Indexados Diretos 3 | PI / PCI - © 2 0 1 2 / 2 0 1 3 - J o ã o R e b e l o Unidade Curricular: PI e PCI Ficha-Resumo – 002.01.Algoritmia Notação Algorítmica: Um algoritmo deve ter sempre um nome, uma pequena descrição inicial e comentários sempre que necessário. Exemplo do algoritmo DIVISÃO de Dois Números Algoritmo DIVISAO: Este algoritmo calcula a divisão de dois números 1.[Inicialização das Variáveis] vDividendo 0 vDivisor 0 vResultado 0 2.[Leitura dos Valores] Ler (vDividendo) Ler (vDivisor) 3.[Verificar Condição de Divisor diferente de 0] SE (vDivisor diferente de 0) ENTÃO 4.[Efetuar o Processamento] vResultado vDividento / vDivisor 5.[Mostrar o Resultado] SE (vDivisor diferente de 0) ENTÃO Escrever (vResultado) SENÃO Escrever (Divisão por Zero é Impossível) A reter do exemplo anterior: A Instrução de Atribuição: coloca sempre no membro da esquerda o valor da expressão à direita. Exemplo: X 487 Significa, colocar na variável X o valor 487 A Leitura de Dados: coloca sempre na variável entre os parêntesis o valor lido (seja qual for a origem, teclado, etc.). Exemplo: Ler (V) Significa, colocar na variável V o valor lido da origem A Saída de Informação: Escreve no suporte considerado (consola, papel, etc.) o valor colocado entre os parêntesis. Exemplo: Escrever (“Olá”) ou Escrever (V) 4 | PI / PCI - © 2 0 1 2 / 2 0 1 3 - J o ã o R e b e l o Unidade Curricular: PI e PCI Ficha-Resumo – 002.01.Algoritmia Diagrama de Fluxo – o Fluxograma Representa graficamente o fluxo de execução de um algoritmo. É um auxiliar utilizado em algoritmia, o qual utilizando um dicionário de símbolos gráficos, permite facilitar a compreensão de determinado algoritmo. Dicionário gráfico dos Fluxogramas: conjunto de símbolos e respetivo significado Símbolo Significado / Utilização Representa sempre o ponto único de entrada e ponto único de saída de um algoritmo Representa a Leitura de Dados ou Escrita de Informação Representa uma atribuição ou processamento Representa uma estrutura de decisão ou condicional Alternativa para escrita de informação Exemplo de um teste condicional: SE C Verdadeiro Então Executar A Senão Executar B 5 | PI / PCI - © 2 0 1 2 / 2 0 1 3 - J o ã o R e b e l o