Prévia do material em texto
Algoritmo e Programação Objetivo Geral: Capacitar o aluno a visualizar soluções computacionais para problemas através da aplicação dos conceitos da lógica de programação e dotá-los da capacidade de construção de programas em linguagem de alto nível estruturada em (Linguagem C). Objetivos Objetivos Objetivos Específicos: Desenvolver o raciocínio lógico e abstrato do aluno; Familiarizar o aluno com o modelo seqüencial de computação; Apresentar técnicas e linguagens para representação e construção de algoritmos simples; Apresentar conceitos básicos de linguagens de programação; Capacitar o aluno no uso da linguagem C; Treinar o aluno no processo básico de desenvolvimento de software (concepção, edição, execução e teste de programas de computador). Metodologia Aulas expositivo - dialogadas. Fornecer os componentes teóricos e conceituais. Aulas práticas ministradas em laboratório. Experimentação e fixação dos conteúdos. Visualg e DevC++. Introdução Nosso objetivo Aprender conceitos básicos para desenvolver programas para computadores. Exemplos: sistemas bancários, sistemas de restaurantes, cálculos avançados entre outros. Roteiro para desenvolver programas: Problema Solução Algoritmo Programa Resultado Computador É uma máquina capaz de possibilitar variados tipos de tratamento automático de informações ou processamento de dados. O que deve ser feito para que um determinado tratamento automático de informações ocorra? Deve-se instruir o computador para que o mesmo utilizando-se de sua estrutura execute determinada tarefa. Como? Software (Programas). Software é desenvolvido para realizar um processamento de dados. Computador precisa compreender e executar o programa. Linguagem que o homem compreenda e que o computador compreenda Linguagem de Programação. + Hardware Software Computador Processamento de Dados + Informações Operações Sobre as Informações Resposta + Dispositivo de Entrada CPU Dispositivo de Saída Analogia • Análise – Nessa etapa estuda-se o enunciado do problema para definir os dados de Entrada, o Processamento e os dados de Saída. • Algoritmo – Onde ferramentas do tipo Descrição Narrativa, Fluxograma e o Pseudocódigo ou Portugol. Estruturado são utilizadas para descrever o problema com suas soluções. • Codificação – Onde o algoritmo é transformado em códigos da linguagem de programação escolhida para se trabalhar. As etapas para o desenvolvimento de um programa são: Análise 1- Estudar o enunciado do problema para definir os dados de Entrada. 2- Processamento. 3- Saída. 1º - Exemplo O sistema de notas do Unis trabalha com 3 etapas dividindo os 100 pontos. Este processo acontece durante um semestre inteiro e ao seu fim é obtido um resultado para cada aluno. Como ficaria este tipo de sistema pensando em suas entradas, saídas e processamento? Resolução do 1º Exemplo Entrada Processamento Saída Notas das avaliações, atividades, trabalhos. Frequência dos alunos e comportamento Realização das avaliações, entrega dos trabalhos, lançamento das faltas, apresentação dos trabalhos Notas por etapa, nota final e nota da prova fina, se necessário FEEDBACK – aluno aprovado ou reprovado A lógica de Programação Em que consiste? A lógica de programação consiste no uso correto das leis do pensamento, da "ordem da razão", de processos de raciocínio e de simbolização formal na programação de computadores. A lógica de programação é necessária para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a seqüência lógica para o desenvolvimento. A Lógica de Programação tem o objetivo de permitir a resolução de problemas específicos com soluções de boa qualidade. Então o que é lógica? Lógica de programação é a técnica de encadear pensamentos para atingir determinado objetivo. Sequência lógica Estes pensamentos podem ser descritos como uma seqüência de instruções, que devem ser seguidas para se cumprir uma determinada tarefa. Então a Sequência Lógica são passos executados até atingir um objetivo ou solução de um problema Análise: N1 + N2 Média Final = ---------------------- 2 2º - Exemplo Imagine o seguinte problema: Calcular a Média Final dos alunos. Pelas provas os alunos receberão 2 notas: N1, N2. Onde: Para montar o algoritmo proposto, faremos três perguntas: a) Quais são os dados de entrada? R: Os dados de entrada são N1, N2 b) Qual será o processamento a ser utilizado? R: O procedimento será somar todos os dados de entrada e dividi-los por 2 (dois) c) Quais serão os dados de saída? R: O dado de saída será a média final Instruções Na linguagem comum, entende-se por instruções “um conjunto de regras ou normas definidas para a realização ou emprego de algo”. Em informática, porém, instrução é a informação que indica a um computador uma ação elementar a executar. Convém ressaltar que uma ordem isolada não permite realizar o processo completo, para isso é necessário um conjunto de instruções colocadas em ordem seqüencial lógica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prática uma série de instruções: descascar as batatas, bater os ovos, fritar as batatas, etc... É evidente que essas instruções têm que ser executadas em uma ordem adequada – não se pode descascar as batatas depois de fritá-las. Dessa maneira, uma instrução tomada em separado não tem muito sentido; para obtermos o resultado, precisamos colocar em prática o conjunto de todas as instruções, na ordem correta. Então o que é instruções? São um conjunto de regras ou normas definidas para a realização ou emprego de algo. Em Informática, é o que indica a um computador uma ação elementar a executar. Método para a Construção de Algoritmo. Para a Construção de qualquer tipo de algoritmo, é necessário seguir estes passos: • Compreender completamente o problema a ser resolvido, destacando os pontos mais importantes e os objetivos que o compõem. • Definir os dados de entrada, ou seja, quais dados serão fornecidos e quais objetos fazem parte desse cenário problema. • Definir o processamento, ou seja, quais cálculos serão efetuados e quais as restrições para esse cálculos. O processamento é responsável pela transformação dos dados de entrada em dados de saída. Além disso, deve-se verificar quais objetos são responsáveis pelas atividades. • Definir os dados de saída, ou seja, quais dados serão gerados depois do processamento. • Construir o algoritmo utilizando um dos seus tipos. • Testar o algoritmo realizando simulações. Contexto Humano e Contexto Computacional O raciocínio lógico pode ser expresso através de várias linguagens: - no contexto humano - utiliza-se a palavra escrita/falada que, por sua vez, se baseia num determinado idioma, mas, independente do idioma, tem-se o mesmo raciocínio. - no contexto computacional - utilizam-se as linguagens de programação Vamos utilizar uma forma de representação mais genérica (livre de detalhes computacionais) e que traduza mais fielmente o raciocínio da lógica de programação: ALGORITMOS Então ... O objetivo da lógica de programação é a construção de algoritmos corretos e válidos. “Informalmente, um algoritmo é qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída. Portanto, um algoritmo é uma sequência de passos computacionais que transformam a entrada na saída.” (CORMEN, 2002) Atenção Algoritmonão é a solução de um problema, pois, se assim fosse, cada problema teria um único algoritmo. Algoritmo é um caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução são muitas. O aprendizado de algoritmos é como aprender a jogar futebol, não se consegue a não ser através de muitos exercícios. Algoritmos não se aprendem: - Copiando Algoritmos - Estudando Algoritmos Algoritmos só se aprendem: - Construindo Algoritmos - Testando Algoritmos “Uma estruturas de dados é um meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações.” (CORMEN, 2002) Programas Os programas de computadores nada mais são do que algoritmos escritos numa linguagem de computador (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que são interpretados e executados por uma máquina, no caso um computador. Notem que dada esta interpretação rigorosa, um programa é por natureza muito específico e rígido em relação aos algoritmos da vida real. Para que um computador possa desempenhar uma tarefa é necessário que esta seja detalhada passo a passo, numa forma compreensível pela máquina, utilizando aquilo que se chama de programa. Neste sentido, um programa de computador nada mais é que um algoritmo escrito numa forma compreensível pelo computador. C, Java, C++, Delphi, VB, ... Mundo Real Máquina Algoritmo É uma seqüência finita de ações que descrevem como um problema pode ser resolvido. Ferramentas são utilizadas para descrever o problema com suas soluções. Tipos de Algoritmos Os três tipos mais utilizados de algoritmos são: • Descrição Narrativa • Fluxograma • Pseudocódigo ou Portugol Algoritmo é uma sequência de passos que visa atingir um objetivo bem definido (FORBELLONE, 1999) Algoritmo é a descrição de uma sequência de passos que deve ser seguida para a realização de uma tarefa (ASCENSIO, 1999) Como Construir um algoritmo a) Análise Preliminar Entenda o problema, identifique os dados envolvidos e os resultados esperados. b) Solução Desenvolver algoritmo para resolver o problema c) Teste de qualidade (Teste de mesa) Ideal testar o algoritmo com o máximo de combinações possíveis d) Alteração Caso o resultado do algoritmo não seja satisfatório, altere-o e submeta a um novo teste. e) Produto Final Algoritmo concluído e testado. Decomposição (Top-Down) Dividir o problema em problemas menores. Exemplo: 1. Troque o pneu furado. 1. Pegue o material necessário (Inicio) 2. Troque o pneu furado (Meio) 3. Guarde o material (Fim) Abra o porta-malas Retire o macaco, o estepe e a chave em cruz e o sinalizador Coloque o sinalizador atrás do carro Afrouxe as porcas do pneu furado Coloque o macaco na posição correta Levante o carro Retire as porcas Retire o pneu Coloque o estepe Coloque as porcas Desça o carro Retire o macaco Aperte as porcas do pneu trocado Guarde o macaco, o pneu furado , o sinalizador e a chave em cruz. Feche o porta-malas Obs. Algumas instruções poderiam ser dividas mais uma vez. Desenvolvimento Estruturado São técnicas que permitem sistematizar e ajudar no desenvolvimento de algoritmos para a resolução de grandes e complexos problemas computacionais. Objetivos destas técnicas - Facilitar o desenvolvimento do algoritmo - Facilitar o seu entendimento pelos humanos - Antecipar a comprovação de sua correção - Facilitar a sua manutenção e modificação - Permitir que o seu desenvolvimento possa ser empreendido simultaneamente por uma equipe de pessoas Descrição Narrativa A descrição narrativa consiste em analisar o enunciado do problema e escrever, utilizando uma linguagem natural (por exemplo, a língua portuguesa), os passos a serem seguidos para sua resolução. Vantagem: não é necessário aprender nenhum conceito novo, pois uma língua natural, neste ponto, já é bem conhecida. Desvantagem: a língua natural abre espaço para várias interpretações, o que posteriormente dificultará a transcrição desse algoritmo. 1º Exemplo 1º Algoritmo: Somar Três Números. Passo 1 – Receber os Três Números. Passo 2 – Somar os Três Números. Passo 3 – Mostrar o Resultado Obtido. 2º Exemplo 2º Algoritmo: Fazer um Sanduíche. 3º Algoritmo: Trocar uma Lâmpada. Exemplo - Resolução 2º Algoritmo: Fazer um Sanduíche. Passo 1 – Pegar o Pão. Passo 2 – Cortar o Pão ao Meio. Passo 3 – Pegar a Maionese. Passo 4 – Passar a Maionese no Pão. Passo 5 – Pegar e Cortar Alface e Tomate. Passo 6 – Colocar Alface e Tomate no Pão. Passo 7 – Pegar o Hambúrguer. Passo 8 – Fritar o Hambúrguer. Passo 9 – Colocar o Hambúrguer no Pão. Exemplo - Resolução 3º Algoritmo: Trocar uma Lâmpada. Passo 1 – Pegar uma Lâmpada Nova. Passo 2 – Pegar uma Escada. Passo 3 – Posicionar a Escada Embaixo da Lâmpada Queimada. Passo 4 – Subir na Escada com a Lâmpada Nova na Mão. Passo 5 – Retirar a Lâmpada Queimada. Passo 6 – Colocar a Lâmpada Nova. Passo 7 – Descer da Escada. Passo 8 – Testar o Interruptor. Passo 9 – Guardar a escada. Passo 10 – Jogar a lâmpada velha no lixo. Fluxograma O fluxograma consiste em analisar o enunciado do problema e escrever, utilizando símbolos gráficos predefinidos, os passos a serem seguidos para sua resolução. Vantagem: o entendimento de elementos gráficos é mais simples que o entendimento de texto. Desvantagem: é necessário aprender a simbologia dos fluxogramas e, além disso, o algoritmo resultante não apresenta muitos detalhes, dificultando sua transcrição para um programa. Conjunto de Símbolos Símbolo utilizado para indicar o início e o fim do algoritmo. Símbolo que permite indicar o sentido do fluxo de dados. Serve exclusivamente para conectar os símbolos ou blocos existentes. Símbolo utilizado para indicar cálculos e atribuições de valores. Símbolo utilizado para representar a entrada de dados. Símbolo utilizado para representar a saída de dados. Símbolo utilizado para indicar que deve ser tomada uma decisão, apontando a possibilidade de desvios. INICÍO CÁLCULOS / ATRIBUIÇÕES DECISÃO SAÍDA DE DADOS ENTRADA DE DADOS CONECTAR TERMINADOR Fluxograma é uma representação gráfica por meio de símbolos geométricos, da solução algorítmica de um problema. Codificação Algoritmo é transformado em códigos da linguagem de programação escolhida para se trabalhar PROGRAMA É A CODIFICAÇÃO DE UM ALGORITMO EM UMA DETERMINADA LINGUAGEM DE PROGRAMAÇÃO Pseudocódigo ou Portugol O pseudocódigo ou portugol consiste em analisar o enunciado do problema e escrever, por meio de regras predefinidas, os passos a serem seguidos para sua resolução. Vantagem: a passagem do algoritmo para qualquer linguagem de programação é quase imediata, bastando conhecer as palavras reservadas da linguagem que será utilizada. Desvantagem: é necessário aprender as regras do pseudocódigo. Programas recebem dados que precisam ser armazenados no computador para serem utilizados no processamento. Para isso, utiliza estruturas de Memória. A representação de um algoritmo na forma de pseudocódigo é a seguinte: Algoritmo Nome_Do_Algoritmo Variáveis Declaração das variáveis Procedimentos Declaração dos procedimentos Funções Declaração das funções Início Corpo do Algoritmo Fim Algoritmo em Descrição Narrativa 1- Faça um algoritmo em Descrição Narrativa para mostrar o resultado da multiplicação de 2 números. Passo 1 – Receber dois Números que serão Multiplicados. Passo 2 – Multiplicar os Números. Passo 3 – Mostrar o Resultado Obtido na Multiplicação. Início N1, N2 M = N1 * N2M FIM Algoritmo em Fluxograma. Algoritmo em Pseudocódigo. ALGORITMO DECLARE N1, N2, M NUMÉRICO ESCREVA “Digite dois Números” LEIA N1, N2 M N1 * N2 ESCREVA “Multiplicação = ”, M FIM_ALGORITMO. Algoritmo em Descrição Narrativa 2- Faça um algoritmo em Descrição Narrativa e com Fluxograma para calcular a média aritmética entre duas notas de um aluno e mostrar sua situação (aprovado >=60) ou reprovado. Passo 1 – Receber as Duas Notas. Passo 2 – Calcular a Média Aritmética. Passo 3 – Mostrar a Média Aritmética. Passo 4 – Se a Média Aritmética for Maior ou Igual a 60, então a situação do aluno é Aprovado; caso contrário, a situação é Reprovado. Início N1, N2 M = (N1 + N2) / 2 M FIM Algoritmo em Fluxograma. M>=60 REPROVADO APROVADO SIM NÃO Algoritmo em Pseudocódigo. ALGORITMO DECLARE N1, N2, M NUMÉRICO ESCREVA “Digite duas Notas” LEIA N1, N2 M (N1 + N2) / 2 ESCREVA “Média = ”, M SE M >= 60 ENTÃO ESCREVA “Aprovado” SENÃO ESCREVA “Reprovado” FIM_ALGORITMO. 3- Faça um algoritmo em Descrição Narrativa, mais Fluxograma e com Pseudocódigo para mostrar o resultado da divisão de dois números verificando se é possível ou não dividir. 4- Faça um algoritmo para calcular o novo salário de um funcionário. Sabe-se que os funcionários que recebem atualmente salário de até R$ 500,00 terão aumento de 20%; os demais terão aumento de 10%. Monte um algoritmo em Descrição Narrativa, mais Fluxograma e com Pseudocódigo. Exercício Exercício 3 Descrição Narrativa. Passo 1 – Receber os dois números que serão divididos. Passo 2 – Se o segundo número for igual a zero, não poderá ser feita a divisão, pois não existe divisão por zero, caso contrário, dividir os números e mostrar o resultado da divisão. Pseudocódigo. ALGORITMO DECLARE N1, N2, D NUMÉRICO ESCREVA “Digite dois números” LEIA N1, N2 SE N2 = 0 ENTÃO ESCREVA “Impossível dividir” SENÃO INICIO D N1 / N2 ESCREVA “Divisão = “, D FIM FIM_ALGORITMO. Início N1, N2 D = N1 / N2 D FIM Algoritmo em Fluxograma. N2=0 IMPOSSÍVEL DIVIDIR SIM NÃO Exercício 4 Descrição Narrativa. Passo 1 – Receber o salário atual do funcionário. Passo 2 – Se o salário atual do funcionário for até R$ 500,00, calcule o novo salário com percentual de aumento de 20%; caso contrário, calcule o novo salário com percentual de aumento de 10%. Pseudocódigo. ALGORITMO DECLARE SAL_ATUAL, NOVO_SAL NUMÉRICO ESCREVA “Digite o salário atual do funcionário” LEIA SAL_ATUAL SE SAL_ATUAL <= 500 ENTÃO NOVO_SAL SAL_ATUAL * 1,20 SENÃO NOVO_SAL SAL_ATUAL * 1,10 ESCREVA “Novo Salário = “, NOVO_SAL FIM_ALGORITMO. Pseudocódigo – Outra Situação. ALGORITMO DECLARE SAL_ATUAL, NOVO_SAL NUMÉRICO ESCREVA “Digite o salário atual do funcionário” LEIA SAL_ATUAL SE SAL_ATUAL <= 500 ENTÃO NOVO_SAL (SAL_ATUAL * 20%) + SAL_ATUAL SENÃO NOVO_SAL (SAL_ATUAL * 10%) + SAL_ATUAL ESCREVA “Novo Salário = “, NOVO_SAL FIM_ALGORITMO. Início SAL_ATUAL NOVO_SAL = SAL_ATUAL * 1,20 NOVO_SAL FIM Algoritmo em Fluxograma. SAL_ ATUAL <=500 NOVO_SAL SIM NOVO_SAL = SAL_ATUAL * 1,10 NÃO Início SAL_ATUAL NOVO_SAL = (SAL_ATUAL * 20%) + SAL_ATUAL NOVO_SAL FIM Algoritmo em Fluxograma – Outra Situação. SAL_ ATUAL <=500 NOVO_SAL SIM NOVO_SAL = (SAL_ATUAL * 10%) + SAL_ATUAL NÃO