Algoritmos e Programação I
Ciência da Computação /Sistemas de Informação
Prof. José Carlos Toniazzo
PARE PENSE PERGUNTE
Algoritmos Seqüenciais
O que é um algoritmo?
Algoritmo Seqüencial A execução das tarefas é corretamente
cumprida, se executarmos todos os passos (instruções) na seqüência em que elas aparecem, da primeira até a última, sem omissões e sem repetições.
“Um conjunto finito de regras, bem definidas,Para a solução de um problema
em um tempo finito.”
Definições “Um conjunto finito de regras que provê uma seqüência de
operações para resolver um tipo de problema específico” [KNUTH]
“Seqüência ordenada, e não ambígua, de passos que levam à solução de um dado problema” [TREMBLAY]
“Processo de cálculo, ou de resolução de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restrições, as regras formais para a obtenção do resultado ou da solução do problema” [AURÉLIO]
A atenção desta disciplina estará voltada à automação de tarefas utilizando computadores.
Características Todo algoritmo deve apresentar algumas
características básicas: ter fim; não dar margem à dupla interpretação (não ambíguo); capacidade de receber dado(s) de entrada do mundo
exterior; poder gerar informações de saída para o mundo externo
ao do ambiente do algoritmo; ser efetivo (todas as etapas especificadas no algoritmo
devem ser alcançáveis em um tempo finito).
Nível de Detalhamento
Nível de Detalhamento
Exemplo #1 Dados três valores positivos, a, b e c,
determine a sua média aritmética
Quais as tarefas a serem executadas para a solução deste problema?
Entrada e Saída
Entrada
Saída
Conjunto de Regras
(processamento)
Obter os valores para a, b e c.
Calcular a média aritmética.
Comunicar os resultados.
Pensando no Problema Começamos com uma afirmação genérica da
solução do problema e prosseguimos até o algoritmo final, aumentando sistematicamente o nível de detalhamento.
Metodologia para odesenvolvimento de algoritmos Passo 1: ler cuidadosamente a especificação do
problema.
Passo 2: levantar e analisar todas as saídas exigidas na especificação do problema.
Passo 3: levantar e analisar todas as entradas citadas na especificação do problema.
Passo 4: Como, a partir das entradas, chegarei as saídas? (processamento)
Metodologia para odesenvolvimento de algoritmos Passo 5: verificar se é necessário gerar
valores internamente ao algoritmo e levantar as variáveis necessárias e os valores iniciais de cada uma (comentar)
Passo 6: levantar e analisar todas as operações e transformações necessárias para, dadas as entradas e valores gerados internamente, produzir as saídas especificadas (comentar)
Metodologia para odesenvolvimento de algoritmos Passo 7: testar cada passo do algoritmo,
verificando se as transformações intermediárias executadas estão conduzindo aos objetivos desejados. Utilizar, sempre que possível, valores de teste que permitam prever os resultados.
Passo 8: fazer uma reavaliação geral, elaborando o algoritmo através da integração das partes.
Exercícios Quais os passos/regras necessárias para
1. Trocar um pneu de carro?2. Fazer um bolo de chocolate?
Critérios para Avaliação do Algoritmo Pode existir mais de uma solução para o
mesmo problema
Exemplo Encontrar todos os números primos...
Critérios para um algoritmo Ter um número finito de passos Ter passo devem estar precisamente definido. Existir um conjunto de zero ou mais entradas, bem
definidas. Existir uma ou mais saídas. Ter um conjunto de passos que leve a execução de
uma tarefa útil. Ter uma condição de fim sempre atingida para
quaisquer entradas e num tempo finito.
Formas de Representação Existem diversas formas de representação de algoritmos, mas
não há um consenso com relação à melhor delas.
O critério usado para classificar hierarquicamente estas formas está diretamente ligado ao nível de detalhe ou, inversamente, ao grau de abstração oferecido.
Algumas formas de representação de algoritmos tratam os problemas apenas em nível lógico, abstraindo-se de detalhes de implementação muitas vezes relacionados com alguma linguagem de programação específica. Por outro lado, existem formas de representação de algoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por obscurecer a idéia principal, o algoritmo, dificultando seu entendimento.
Formas de Representação Dentre as formas de representação de
algoritmos mais conhecidas destacam-se:
Descrição Narrativa; Diagrama de Nassi-Shneiderman – Diagrama de
Chapin Fluxograma Convencional; Pseudocódigo, também conhecido como
Linguagem Estruturada ou Portugol.
Descrição Narrativa Faz-se uso do português para descrever algoritmos.
EXEMPLO: Receita de Bolo: Providencie manteiga, ovos, 2 Kg de massa, etc. Misture os ingredientes Despeje a mistura na fôrma de bolo Leve a fôrma ao forno Espere 20 minutos Retire a fôrma do forno Deixe esfriar Prove
VANTAGENS: • o português é bastante conhecido por nós;
DESVANTAGENS: imprecisão; pouca confiabilidade (a imprecisão acarreta a desconfiança); extensão (normalmente, escreve-se muito para dizer pouca coisa).
Diagrama de Chapin Também conhecido como diagrama Chapin, esta ferramenta de
representação oferece grande clareza para a representação de sequenciação, seleção e repetição num algoritmo, utilizando-se de uma simbologia própria. A idéia básica deste diagrama é representar as ações de um algoritmo dentro de um único retângulo, subdividido-o em retângulos menores, que representam os diferentes blocos de seqüência de ações do algoritmo. Seleção e repetição também são representadas de forma gráfica, dentro dos retângulos.
Seqüência Ação-1 Ação-2 Ação-n
Fluxograma Convencional É uma representação gráfica de algoritmos onde
formas geométricas diferentes implicam ações (instruções, comandos) distintos. Tal propriedade facilita o entendimento das idéias contidas nos algoritmos e justifica sua popularidade.
Esta forma é aproximadamente intermediária à descrição narrativa e ao pseudocódigo pois é menos imprecisa que a primeira e, no entanto, não se preocupa com detalhes de implementação do programa como o tipo das variáveis usadas.
Fluxograma Convencional
Fluxograma Convencional
Pseudo-Código (Portugol)
Poderemos construir um programa em uma linguagem estruturada com facilidade se tivermos um algoritmo em pseudo-código estruturado adequadamente
Os elementos do pseudo-código são os mesmos das linguagens estruturadas. Isto é, depois de desenvolver as idéias, a tradução para linguagem de programação é um processo simples e mecânico.
É isto que devemos fazer!!!!!
Pseudo-Código (Portugol) A forma geral da representação de um algoritmo na
forma de pseudocódigo é a seguinte:
Algoritmo <nome_do_algoritmo> <declaração_de_variáveis> <subalgoritmos> Início
<corpo_do_algoritmo> Fim.
Pseudo-Código (Portugol) Onde: Algoritmo é uma palavra que indica o início da definição de um
algoritmo em forma de pseudocódigo. <nome_do_algoritmo> é um nome simbólico dado ao algoritmo com a
finalidade de distinguí-lo dos demais. <declaração_de_variáveis> consiste em uma porção opcional onde
são declaradas as variáveis globais usadas no algoritmo principal e, eventualmente, nos subalgoritmos.
<subalgoritmos> consiste de uma porção opcional do pseudocódigo onde são definidos os subalgoritmos (funções e procedures)
Início e Fim são resprectivamente as palavras que delimitam o início e o término do conjunto de instruções do corpo do algoritmo.
Consiste na definição de uma pseudocódigo de programação, cujos comandos são em português, para representar algoritmos.
ESTRUTURAS CHAVES DA CONSTRUÇÃO DE ALGORITMOS SEQUENCIAÇÃO
Os comandos do algoritmo fazem parte de uma seqüência, onde é relevante a ordem na qual se encontram os mesmos, pois serão executados um de cada vez, estritamente, de acordo com essa ordem. De uma forma genérica, poderíamos expressar uma seqüência da seguinte maneira: Comando-1 Comando-2 Comando-n
Entrada e Saída Um algoritmo pode receber dados através de
dispositivos como teclado, mouse, discos e placas de rede, e pode enviar dados para o monitor de vídeo, discos e outros.
Este tipo de operações em que dados são recebidos por um algoritmo ou são enviados por um algoritmo para um dispositivo são chamados de operações de entrada e saída.
Resumindo
Expressões: Aritméticas eLógicas 3 + 7 * 2 – 15
Verdadeiro E Falso ou Verdadeiro 3 + 2 < 5
Pode-se armazenar o resultado em uma variável: imposto <- valor * 0,18
Exemplos
Operadores Relacionais
Exemplo: HipotenusaAlgoritmo lados_triângulo{Este algoritmo calcula o valor dos lados deum triângulo retângulo, dados um de seus ângulosmenores e a hipotenusa}variávellado_oposto, lado_adjacente: realhipotenusa, alfa: realleia(alfa)leia(hipotenusa)lado_oposto <- seno(alfa)*hipotenusalado_adjacente <- cosseno(alfa)*hipotenusaescreva(lado_oposto)escreva(lado_adjacente)fim
Exemplo: Hipotenusa - IdentadoAlgoritmo lados_triângulo
Início
{Este algoritmo calcula o valor dos lados deum triângulo retângulo, dados um de seus ângulosmenores e a hipotenusa}
variávellado_oposto, lado_adjacente: realhipotenusa, alfa: real
leia(alfa)leia(hipotenusa)
lado_oposto <- seno(alfa)*hipotenusalado_adjacente <- cosseno(alfa)*hipotenusa
escreva(lado_oposto)escreva(lado_adjacente)
fim
A Importância das Estruturas de Dados Algoritmos são responsáveis por definir o
comportamento de um programa. Ou seja, são responsáveis pela lógica de execução do software;
Estruturas de Dados são espaços onde os dados de Entrada, Processamento e Saída ficam armazenados em um computador;
São conceitos que se complementam. Um depende do outro para que sejam corretamente utilizados!
Tipos de Dados
Todo dado é de um certo tipo que define sua natureza (p. ex., um nome é diferente de um valor), identificando seu uso, e define as operações que podem ser realizadas com o dado
Por exemplo, podemos somar dois valores numéricos, mas não podemos somar um número e uma frase.
Tipos de Dados: Numérico
Inteiro: representa um número inteiro.
Por exemplo -1, 0, 1, e 26 são dados inteiros. Dados deste tipo podem ser usados para idade em anos, número de filhos etc.
Tipos de Dados: Numérico
No projeto de um algoritmo devemos utilizar o tipo numérico mais adequado, ou seja, não devemos usar um número real quando um número inteiro resolve o problema.
Cuidado! Dividir dois números inteiros pode resultar em um número real...
Tipos de Dados: Caractere
Valores alfanuméricos incluem letras, algarismos e símbolos. Por exemplo, '1‘ é um caracter se consideramos apenas o símbolo '1' e não o valor 1.
Letras do alfabeto, símbolos...
Pesquisar sobre: tabela ASCII
Tipos de Dados: Enumeração
Um dado que pode assumir um valor dentre os valores de um conjunto é uma enumeração ou tipo enumerado.
Por exemplo, um dado que pode assumir qualquer valor dentro do conjunto de frutas
banana, maça, pêra, uva, jaca
Tipos de Dados: Variáveis
A variável possui, além do nome, um tipo, responsável por definir como o dado vai ser armazenado e recuperado da memória.
Em pseudo-código as variáveis são declaradas na seção de declarações, antes da seção de comandos, na cláusula variável
variável salário: real
Tipos de Dados: Variáveis
Tipos de Dados: Constantes É possível dar nome às constantes utilizadas
nos algoritmos.
As constantes identificadas, assim como as constantes literais, podem ser atribuídas a variáveis. constante pi = 3,1415926 salário_mínimo = 420,00
Porque utilizar Algoritmos?
Hardware (Baixo Nível)01110111111
Software (Alto Nível)Main, if, else, for, int i, printf, etc...
COMPILAÇÃO“Traduzir” do Alto para Baixo Nível
ALGORITMO: Permite “traduzir” instruções entendidas por um Humano para uma máquina
Programa de Computador Para o Usuário UtilizarWord, Excel, Jogos, Sistemas Comerciais...
Programador, pessoa que abstrai o problema para resolvê-lo
Equivalência: Algoritmo X Programação ( Linguagem C )
Portugol Linguagem C
Início / Fim { / }
para/faça for
enquanto while
se/então/senão if/else
escreva printf() / puts()...
leia scanf() / gets()...
Exercícios Vamos praticar a construção de alguns algoritmos!
1 – Faça um algoritmo que, a partir da altura e do peso de uma pessoa mostre qual seu índice de IMC:
A) identifique entrada, processamento e saída; B) identifique as estruturas de dados necessárias para resolver o
problema; C) escreva o passo a passo do algoritmo utilizando nossa
linguagem natural; D) escreva o algoritmo utilizando Pseudo-Código; E) escreva o algoritmo utilizando Fluxograma; F) escreva suas conclusões a respeito da resolução do
problema