Preview only show first 10 pages with watermark. For full document please download

Programação Numérica Usando As Ferramentas Do Matlab

ferramentas computacionais

   EMBED

  • Rating

  • Date

    December 2018
  • Size

    1.2MB
  • Views

    4,418
  • Categories


Share

Transcript

Universidade Federal do Pará Departamento de Engenharia Mecânica APOSTILA MODULO 2: ALGORITMOS NUMÉRICOS PROFESSOR Dr. SAÏD MOUNSIF CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 1. INTRODUÇÃO A automatização de tarefas é um aspecto marcante da sociedade moderna. O aperfeiçoamento tecnológico alcançado, com respeito a isto, teve como elementos fundamentais a análise e a obtenção de descrições da execução de tarefas em termos de ações simples o suficiente, tal que pudessem ser automatizadas por uma máquina especialmente desenvolvida para este fim, O COMPUTADOR. Em ciência da computação houve um processo de desenvolvimento simultâneo e interativo de máquinas (hardware) e dos elementos que gerenciam a execução automática (software) de uma dada tarefa. E essa descrição da execução de uma tarefa, como considerada acima, é chamada algoritmo. O objetivo desse modulo é a Lógica de Programação dando uma base teórica e prática, suficientemente boa, para que, o aluno domine os algoritmos e esteja habilitado a aprender uma linguagem de programação. Será mostrado também um grupo de algoritmos clássicos para tarefas cotidianas, tais como: ordenação e pesquisa. 2. DEFINIÇÃO DE ALGORITMO "O conceito central da programação e da Ciência da Computação é o conceito de algoritmos, isto é, programar é basicamente construir algoritmo. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa. "O algoritmo pode ser usado como uma ferramenta genérica para representar a solução de tarefas independente do desejo de automatizálas, mas em geral está associado ao processamento eletrônico de dados, onde representa o rascunho para programas (Software). "Serve como modelo para programas, pois sua linguagem é intermediária à linguagem humana e às linguagens de programação, sendo então, uma boa ferramenta na validação da lógica de tarefas a serem automatizadas. "Um algoritmo é uma receita para um processo computacional e consiste de uma série de operações primitivas, interconectadas devidamente, sobre um conjunto de objetos. Os objetos manipulados por essas receitas são as variáveis. Como qualquer modelo, um algoritmo é uma abstração da realidade. A abstração é o processo de identificar as propriedades relevantes do fenômeno que esta sendo modelado. Usando o modelo abstrato, podemos nos centrar unicamente nas propriedades relevantes para nós, dependendo da finalidade da abstração, e ignorar as irrelevantes. Os algoritmos, apesar de servirem para representar a solução de qualquer problema, no caso do Processamento de Dados, eles devem seguir as regras básicas de programação para que sejam compatíveis com as linguagens de programação. 1 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Algoritmo nã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 não se consegue a não ser através de muitos exercícios. Algoritmos não se aprende: Copiando Algoritmos Estudando Algoritmos Algoritmos só se aprendem: Construindo Algoritmos Testando Algoritmos 3. FASES DE UM ALGORITMO Quando temos um problema e vamos utilizar um computador para resolvê-lo inevitavelmente temos que passar pelas seguintes etapas: a) Definir o problema. b) Realizar um estudo da situação atual e verificar quais a(s) forma(s) de resolver o problema. c) Terminada a fase de estudo, utilizar uma linguagem de programação para escrever o programa que deverá a princípio, resolver o problema. d) Analisar junto aos usuários se o problema foi resolvido. Se a solução não foi encontrada, deverá ser retornado para a fase de estudo para descobrir onde está a falha. 2 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 4. CONCEITOS Algoritmo É uma seqüência finita de ações que descrevem como um problema pode ser resolvido. Instrução São frases que indicam as ações a serem executadas. São compostas de um verbo no imperativo/infinitivo mais um complemento. Ex. Ligue os faróis ; Abra a porta Programa Ações de um algoritmo obedecendo à sintaxe de uma linguagem de programação 5. COMO CONSTRUIR UM ALGORITMO 1. Análise Preliminar Entenda o problema, identifique os dados e os resultados. 2. Solução Desenvolver algoritmo para resolver o problema 3. Teste de qualidade Ideal testar todas as combinações possíveis 3 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 4. Alteração Resultado do algoritmo não satisfatório, altere-o e submeta a um novo teste. 5. Produto Final Algoritmo concluído e testado 6. DECOMPOSIÇÃO (TOP-DOWN) Dividir o problema em problemas menores. Exemplo 1 1. Troque o pneu furado. Exemplo 2 1. Pegue o material necessário (Inicio) 2. Troque o pneu furado (Meio) 3. Guarde o material (Fim) Exemplo 3 1. Abra o porta-malas 2. Retire o macaco, o estepe e a chave em cruz e o sinalizador 3. Coloque o sinalizador atrás do carro 4. Afrouxe as porcas do pneu furado 5. Coloque o macaco na posição correta 4 6. Levante o carro PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 7. Retire as porcas 8. Retire o pneu 9. Coloque o estepe 10. Coloque as porcas 11. Desça o carro 12. Retire o macaco 13. Aperte as porcas do pneu trocado 14. Guarde o macaco, o pneu furado , o sinalizador e a chave em cruz. 15. Feche o porta-malas Algumas instruções poderiam ser dividas mais uma vez. 7. DESENVOLVIMENTO ESTRUTURADO São técnicas que permitem sistematizar e ajudar o desenvolvimento de algoritmos para a resolução de grandes e complexos problemas de computação. Os Objetivos destas técnicas são: Facilitar o desenvolvimento do algoritmos 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 5 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 8. FORMA DE REPRESENTAÇÃO DESCRIÇÃO NARRATIVA Ex. Cálculo da média de um aluno: – Obter as notas da primeira e da segunda prova – Calcular a média aritmética entre as duas – Se a média for maior ou igual a 7, o aluno foi aprovado, senão ele foi reprovado FLUXOGRAMA Representação gráfica de algoritmos, ou seja, das instruções e/ou módulos do processamento, conhecido também como diagrama de bloco, através de formas geométricas, facilitando a compreensão da lógica utilizada pelo profissional. Existem atualmente vários padrões para definir as formas geométricas a serem utilizadas para as diversas instruções (passos) a serem seguidos pelo sistema. veja alguns símbolos que são utilizados no fluxograma: 6 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Exemplo de Fluxograma Vamos a seguir, exibir um fluxograma que teria o objetivo de calcular o valor diário de um salário mínimo. Seguindo uma lógica simples, teríamos que dividir o valor do salário mínimo (que sabemos ser equivalente a R$ 240,00) e dividir este total por 30 (número de dias de um mês). 7 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Observe como ficaria este fluxograma: A principio marcamos o inicio do fluxograma; Em seguida, armazenamos em uma posição de memória (variável), o valor de 240,00. Esta posição de memória teve a denominação de “salariominimo”; Em seguida, armazenamos em uma posição de memória denominada “media” o valor da variável “salariominimo” dividido por 30; Em seguida, enviamos ao periférico de saída (impressora), o conteúdo da variável “media” equivalente à R$ 8,00. Em seguida, finalizamos o fluxo. Observe que da forma que o mesmo foi exposto, existe um procedimento lógico para o calculo proposto, bem como, poderemos repetir este procedimento por quantas vezes necessários, que o resultado sempre será correto e preciso. 8 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB PSEUDOCÓDIGO, TAMBÉM CONHECIDO COMO LINGUAGEM ESTRUTURADA 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 exemplo: Algoritmo Média Variáveis real N1, N2, Média Início Ler N1, N2 Média = (N1+N2)/2 Se Média >= 7 Então Escrever “Aprovado” Senão Escrever “Reprovado” Fim. 9. TIPOS DE PROCESSAMENTO PROCESSAMENTO SEQÜENCIAL As instruções do algoritmo são executadas uma após a outra, sem que haja desvio na seqüência das instruções, sendo cada instrução executada uma única vez. 9 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Ex. Obter a média aritmética das quatro notas 1. Inicio 2. Some as duas primeiras notas 3. Some a terceira nota com o resultado da instrução 2 4. Some a Quarta nota com o resultado da instrução 3 5. Divida resultado da instrução 4 por 4 6. Fim Se as quatro notas são 10,5,8,1 1. Inicio 2. 10+5 = 15 3. 15+8 =23 4. 23+1 =24 5. 24 / 4=6 6.Fim PROCESSAMENTO CONDICIONAL Um conjunto de instruções (pode ser apenas uma instrução) é executado ou não dependendo de uma condição. Se a condição que estiver sendo testada tiver resposta afirmativa, o conjunto de instruções é executado. Ex. Obter a média aritmética das quatro notas. Se a média for maior ou igual a sete, o aluno está aprovado, caso contrário, está reprovado. 1. Inicio 2. Some as duas primeiras notas 3. Some a terceira nota com o resultado da instrução 2 4. Some a Quarta nota com o resultado da instrução 3 5. Divida resultado da instrução 4 por 4 6. Se o resultado da instrução 5 for maior ou igual a 7 7. Aprove o aluno 8. Se o resultado da instrução 5 for menor que 7 9. Reprove o aluno 10. Fim 10 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Se as quatro notas são 10,5,8,1 1. Inicio 2. 10+5 = 15 3. 15+8 =23 4. 23+1 =24 5. 24 / 4=6 6. Resposta negativa 7. Resposta afirmativa ⇒ resultado < 7 então ⇒ aluno reprovado 6. Fim Note que a instrução 6 foi executada. Como a resposta foi negativa (a média foi inferior a sete), o aluno foi reprovado não sendo executada a instrução sete. PROCESSAMENTO COM REPETIÇÃO Conjunto de instruções (pode ser apenas uma) que é executado um determinado número de vezes. Sendo determinado uma condição de parada. Ex. Obter a média aritmética das quatro notas de todos os alunos da sala. 1. Inicio 2. Para cada aluno da sala 3. Some as duas primeiras notas 4. Some a terceira nota com o resultado da instrução 3 5. Some a Quarta nota com o resultado da instrução 4 6. Divida o resultado da instrução 5 por 4 7. Fim 11 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Se existem dois alunos na sala e suas notas são: 10, 5, 8, 1 e 4, 6, 7, 3 3. 10+5 = 15 4. 15+8 =23 5. 23+1 =24 6. 24/4 = 6 3. 4+6 = 10 4. 10+7=17 5. 17+3=20 6. 20/4 = 5 A identação (deslocamento para a direita) de uma instrução, significa que tais instruções estão subordinadas a instrução anterior. 10. TIPOS DE DADOS Os dados são representados pelas informações a serem processadas por um computador. Estas informações estão caracterizadas por quatro tipos de dados: inteiros, reais, caracteres e lógicos. TIPO INTEIRO Dados numéricos positivos ou negativos, excluindo-se qualquer número fracionário. Ex. 35, 0, -56 TIPO REAL Dados numéricos positivos, negativos e números fracionários. Ex. 1.2,-45.897 12 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB TIPO CARACTERE São tipos caracteres, as seqüências contendo letras, números e símbolos especiais. Uma seqüência de caracteres deve ser indicada entre aspas. Sendo também conhecido como: alfanumérico, string, literal ou cadeia. Ex. “PROGRAMAÇÃO”, “Rua Alfa, 52 apto 1”, “7”, “249-4455” TIPO LÓGICOS São tipos lógicos ou booleanos, os dados com valores verdadeiro e falso, sendo que este tipo poderá representar um dos dois valores. 11. VARIÁVEIS (IDENTIFICADORES) O nome de uma variável é utilizado para sua identificação e posterior uso dentro de um programa, sendo assim, é necessário estabelecer algumas regras de utilização das mesmas. O nome de uma variável pode conter um ou mais caracteres; O nome de uma variável não pode conter caracteres com acentos; O primeiro caractere do nome de uma variável deve ser sempre uma letra; Não pode possuir espaços em branco; Não pode ser uma palavra reservada a uma instrução de programa; Não poderão ser utilizados outros caracteres que não sejam letras e números. Os nomes escolhidos devem explicitar seu conteúdo. Ex. NOMEUSUARIO, FONE1, X, DELTA25, Z4,..ect. 13 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 12. CONSTANTES Tudo aquilo que é fixo ou estável Ex. o valor do π --> 3.14159 13. OPERAÇÕES BÁSICAS Expressões Na lógica de programação uma expressão tem o mesmo objetivo/conceito do termo expressão da matemática comum, ou seja, um conjunto de variáveis e constantes que se relacionam por meio de operadores aritméticos. Este conjunto de expressão e operadores aritméticos (soma por exemplo), formam uma fórmula que, após solucionada fornecem um resultado em específico. Observe o gráfico a seguir: Neste caso, a fórmula para se calcular a área de um retângulo é igual ao produto de sua altura por sua base, poderemos então montar a fórmula como se segue: AREA = altura * base Observe que no exemplo acima, utilizamos três variáveis: altura, base e AREA, sendo que o resultado final é armazenado na variável AREA, ou seja, local de memória onde será armazenado o resultado da avaliação da expressão e o operador é o sinal de ‘*’ que em linguagem de computador representa a multiplicação. 14 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Já que falamos em operadores, vamos ser um pouco mais claros neste tópico. Os operadores são elementos ativos que tem influência sobre os operandos e através de sua ação resultam um determinado valor. No exemplo acima, os operandos seriam as variáveis “altura” e “base” e o operador de multiplicação o “*”. Em lógica de programação, os operadores podem ser classificados em dois grupos: • Binários : quando trabalham sobre os operandos em uma expressão. Os mais conhecidos são os símbolos + - * /, que representam a soma, subtração, multiplicação e divisão respectivamente. • Unários : quando tem influência sobre um único operando, indicando por exemplo que este se trata de um número negativo e não vem acompanhado um um outro operando, exemplo: ao representar o número quatro negativo, podemos utilizar ( -4 ). Isso não quer dizer que queremos subtrair o quatro de um outro valor. Assim como classificamos os operadores, podemos também classificar as expressões quanto ao seu tipo, conforme mostra a lista a seguir: • Expressão aritmética - quando o resultado de sua avaliação for um número, podendo este ser positivo ou negativo assim como inteiro ou real; • Expressão lógica - quando o resultado de sua avaliação for um valor lógico, ou seja, verdadeiro (.T.) ou falso (.F.); • Expressão literal - quando o resultado de sua avaliação for um valor literal. Cada uma das expressões vistas acima, possuem seus operadores em específico. A seguir, vamos mostrar uma tabela contendo esses operadores: Na solução da grande maioria dos problemas é necessário que as variáveis tenham seus valores consultados ou alterados e, para isto, devemos definir um conjunto de OPERADORES, sendo eles: OPERADOR DE ATRIBUIÇÃO: NomeDaVariavel = Valor ou Expressão Atribuída. OPERADORES ARITMÉTICOS: + = Adição * = Multiplicação - = Subtração ou inversor do sinal. / = Divisão Quociente = Quociente da divisão de inteiros Resto (a,b) = Resto da divisão de inteiros EXP(a,b) = Exponenciação ab (^) 15 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB FUNÇÕES PRIMITIVAS: SEN(x); COS(x); TG(x); ABS(x); INT(x); Raiz(x); PI( ); OPERADORES RELACIONAIS: São utilizados para relacionar variáveis ou expressões, resultando num valor lógico (Verdadeiro ou Falso), sendo eles: = - igual < - menor ≤ - menor ou igual ≠ - diferente (<>) > - maior ≥ - maior ou igual OPERADORES LÓGICOS: São utilizados para avaliar expressões lógicas, sendo eles: .E. - e lógico ou conjunção. .Ou. - ou lógico ou disjunção. Não - negação. PRIORIDADE DE OPERADORES: Durante a execução de uma expressão que envolve vários operadores, é necessária a existência de prioridades, caso contrário poderemos obter valores que não representam o resultado esperado. A maioria das linguagens de programação utiliza as seguintes prioridades de operadores : 1º - Efetuar operações embutidas em parênteses "mais internos" 2º - Efetuar Funções 3º - Efetuar multiplicação e/ou divisão 4º - Efetuar adição e/ou subtração 5º - Operadores Relacionais 6º - Operadores Lógicos O programador tem plena liberdade para incluir novas variáveis, operadores ou funções para adaptar o algoritmo as suas necessidades, lembrando sempre, de que, estes devem ser compatíveis com a linguagem de programação a ser utilizada. 16 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Com base no que colocamos, fazemos as perguntas a seguir: Na expressão A*B-C, qual será a sequência de execução? Na expressão (A*B)-C, qual será a sequência de execução? Na expressão A*(B-C), qual será a sequência de execução? Na expressão ( A*(B-C*(D/E))), qual será a sequência de execução? A lógica para se montar uma expressão é ponto determinante na questão do resultado ser ou não verdadeiro, ou seja, de ser o resultado esperado. 14. PRIMEIRAS INSTRUÇÕES Após dominarmos os assuntos anteriormente tratados, passaremos a estudar as instruções primitivas, ou seja, comandos básicos que executam tarefas consideradas essenciais para a execução de qualquer programa de computador. Um exemplo deste tipo de instrução são aquelas responsáveis pela comunicação do operador com o computador por meio do teclado (entrada de dados) ou ainda a impressão de um relatório (saída de dados “sem contar com a parte estética do relatório, alinhamento de colunas, etc...). Toda linguagem de programação tem por obrigação possuir instruções primitivas, pois sem estas, não existiria comunicação com periféricos. Antes de mais nada, você saberia diferenciar periféricos de entrada e de saída de dados? A resposta é simples, periféricos de entrada são aqueles responsáveis pela passagem de dados do mundo externo para a memória do computador, como por exemplo o teclado, unidade de CD-ROM, etc... Já os periféricos de saída recebem os dados do computador para um outro equipamento externo, como por exemplo o monitor de vídeo, impressora, winchester, etc... Toda instrução, primitiva ou não possui uma sintaxe, ou seja, uma regra que deverá ser seguida para a construção de seu código, e caso esta não seja obedecida, o seu programa pode simplesmente não funcionar. Devemos saber também que o conjunto de ações que serão realizadas pelo computador após a execução de um determinado comando é conhecida como semântica. 17 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB COMANDOS DE ENTRADA E SAÍDA : No algoritmo é preciso representar a troca de informações que ocorrerá entre o mundo da máquina e o nosso mundo, para isso, devemos utilizar comandos de entrada e saída, sendo que, a nível de algoritmo esses comandos representam apenas a entrada e a saída da informação, independe do dispositivo utilizado (teclado, discos, impressora, monitor,...), mas, sabemos que nas linguagens de programação essa independência não existe, ou seja, nas linguagens de programação temos comandos específicos para cada tipo de unidade de Entrada/Saída. COMANDO DE ENTRADA DE DADOS Ler (variável_1, variável_2,...) COMANDO DE SAÍDA DE DADOS Escrever (expressão_1, expressão_2,...) COMANDO DE POSICIONAMENTO NA TELA Posicionar (expressão_1, expressão_2,...) Onde expressão_1 , determinará qual linha do vídeo e expressão_2 a coluna. Sendo de 1 até 24 para linha e de 1 até 80 para coluna. EXEMPLO: Algoritmo media VARIAVEIS REAL quilometragem,litros,media Inicio ESCREVER “Entre com a quilometragem inicial e a Quantidade de litros gastos” LER quilometragem LER litros Media = quilometragem/litros ESCREVER media Fim. Observe que no pseudocódigo, quando queremos enviar uma expressão como saída, a mesma é colocada dentro de aspas, porém quando queremos enviar o conteúdo de uma variável, esta deverá estar fora de aspas. 18 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB COMANDOS DE CONTROLE DE FLUXO: Para representar a solução de um problema devemos escrever o conjunto de passos a serem seguidos, sendo que, a maioria dos problemas exigem uma dinâmica na sua solução, impondo assim que os algoritmos executem conjunto de instruções de acordo com as possíveis situações encontradas no problema original. E de acordo com a Programação Estruturada os mecanismos utilizados para esse controle são: Sequência, Seleção e Repetição. SEQÜÊNCIA : usada para executar comandos passo a passo, sabendo que todos eles serão executados na ordem de escrita, sem nenhum desvio. Uma seqüência pode possuir um ou vários comandos, os quais devem ser delimitados pelos identificadores Início e Fim. Inicio Comando_1 ... Comando_n Fim SELEÇÃO: usada para tomar decisões, ou seja desviar a execução do algoritmo de acordo com uma condição, podendo ser simples ou composta. Simples Se (Expressão Lógica) Então Sequência_1 Fim_se Composta Se (Expressão Lógica) Então Sequência_1 Senão Sequência_2 Fim_se EXEMPLO: Imagine a seguinte situação : em uma empresa, será solicitado o salário de um determinado funcionário, para se calcular seu novo salário, sendo que, se este tiver um salário superior a R$ 300,00, o reajuste será de 5%, caso contrário o reajuste será de 8%. Observe que teremos que testar o valor do salário, para saber o índice a ser aplicado. Vamos criar então um pseudocódigo com este objetivo: 19 Algoritmo testa_salario Variaveis Real Salario Real Salario_final Inicio Ler salario PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Se salario <= 300 então Salario_final=(salario*1,08) senão Salario_final=(salario*1,05) Fim_se Escrever “Salario_final” Fim. Observe que, durante a execução do pseudocódigo, após obtermos, através de uma instrução de entrada de dados, o valor do salário do funcionário, efetuamos um teste “Se”, que possui duas condições, uma verdadeira e uma falsa. As instruções que serão executadas no caso de um teste verdadeiro, devem estar abaixo da cláusula “Então”, já as instruções que serão executadas no caso de um teste falso, devem estar abaixo da cláusula “senão”. A instrução “Fim_se”, termina o bloco de testes. Observe a sintaxe de uma estrutura de decisão a seguir: Se Então Senão Lista de comandos a serem executados caso teste=verdadeiro Lista de comandos a serem executados caso teste=falso. Fim_se Em fluxograma, uma estrutura de decisão é representada pelo símbolo: Os símbolos que estiverem na direção de “True” serão executados caso o teste seja verdadeiro. Já os símbolos que estiverem na direção de “false” serão executados caso o teste tenha um resultado falso. 20 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Observe o trecho do pseudocódigo acima, representado no fluxograma: Existem casos em que não basta ter apenas as “direções” verdadeiro e falso para tomar uma determinada decisão, e sim, uma série de testes sobre um mesmo bloco. Este tipo de estrutura é chamada de estrutura de decisão do tipo “ESCOLHA”. Observe a seguir a sintaxe da estrutura de decisão do tipo escolha em pseudocódigo: Faca Caso Caso Lista de instruções caso condição 1 = verdadeira Caso Lista de instruções caso condição 2 = verdadeira Caso Lista de instruções caso condição 3 = verdadeira Outro caso Lista de instruções caso todas condições = falsa Fim_Caso 21 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB No fluxograma, o símbolo que representa cada uma das condições acima, é o mesmo que o símbolo que representa a estrutura de decisão. Veja a sintaxe da estrutura de decisão de escolha no fluxograma: Vamos imaginar um exemplo parecido, de reajuste de salário, porém teremos as seguintes situações para reajuste: Salários inferiores a R$ 400,00 = reajuste de 9% Salários iguais a R$ 400,00 e inferiores a R$ 800,00 = reajuste de 7% Salários iguais a R$ 800,00 e inferiores a R$ 1000,00 = reajuste de 5% Fora das faixas supra citadas = reajuste de 3% Veja o pseudocódigo do exemplo citado: 22 Algoritmo testa_salario2 Variaveis Real Salário , Salario_final Inicio Ler salario Faca caso Caso salario < 400 Salario_final=(salario*1.09) Caso salario >= 400 .e. salario<800 Salario_final=(salario*1.07) Caso salario>=800 .e. salario<1000 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Salario_final=(salario*1.05) Outro caso Salario_final=(salario*1.03) Escrever Salario_final Fim. Observe que, temos aqui uma novidade, ou seja, em uma única condição, estamos na verdade realizando dois testes, isto porque usamos o operador lógico “AND” “.e.”, ou seja, se salário menor ou igual a 400 e salário menor que 800 faça isso... assim sucessivamente. Quando usamos o operador lógico “.e.”, os testes, neste caso dois, que formam o caso, devem ser verdadeiros. O outro operador lógico “.ou.”, retorna verdadeiro caso um dos testes que formam o conjunto satisfaça a uma determinada condição. EXERCÍCIO: crie o fluxograma do pseudocódigo visto acima. A seguir iremos estudar as estruturas de repetição e desenvolver mais exemplos sobre o que estudamos neste módulo. 15. ESTRUTURAS DE REPETIÇÃO Vamos falar um pouco sobre as estruturas de repetição, ou seja, uma parte do código que deverá ser executada x vezes. Em linguagem de programação, as estruturas de repetição são conhecidas como laços (loops). Trabalhamos basicamente com dois tipos de estruturas de repetição: Loops contados : -> quando se tem, de forma prévia, o número de vezes que uma determinada sequência de comandos será executada. 2. Loops condicionais : -> aqueles que não possuem um número pré-determinado de vezes que a estrutura de comandos será executada, porém este número estará vinculado a uma determinada condição. 1. Em pseudocódigo, utilizamos a seguinte sintaxe para loops contados: Para = até Passo Proximo Onde: A variável é aquela que irá receber a contagem. Os valores iniciais e finais representam onde começa e termina a contagem da repetição. O número de Passo (incremento) estipula a forma da contagem, como por exemplo, incrementos de 1 em 1, 2 em 2 .... e após , a sequência de comandos que será executada durante o loop. 23 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB No fluxograma, utilizamos a seguinte sintaxe para representar loops contados: A lógica de trabalho do laço contado é apresentada a seguir: 1. No inicio da leitura do código/fluxo, o valor inicial é atribuído à variável; 2. O valor da variável é comparado ao valor final; 3. Se o valor da variável for maior que o valor final, a sequência de comandos que faz parte do laço não é executado e o controle do processo passa para a próxima linha após o final do laço ( PROXIMO ) ou para o símbolo ao lado (no caso de fluxograma); 4. Se o valor da variável for menor ou igual ao do valor final, a sequência de comandos é executada e, ao final do último comando, o valor do incremento é adicionado a variável e retorna-se à comparação entre variável e valor_final, repetindo todo o processo anterior. Vale lembrar que o incremento não é de declaração obrigatória, e, caso não seja declarado, assume automaticamente o valor 1. Já os loops condicionais são aqueles cujo conjunto de comandos em seu interior é executado até que uma determinada condição seja satisfeita. O pseudocódigo mais comum utilizado neste sentido é o apresentado a seguir: Faça Enquanto Fim_enquanto A sintaxe de execução deste é: 1. No inicio da execução do enquanto, a condição é testada; 2. Se o resultado do teste for verdadeiro, a sequência de comandos é executada e ao término desta, retorna-se ao teste da condição; 3. Sendo a condição falsa, o controle da aplicação passa para a próxima linha após o Fim_enquanto. 24 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB No fluxograma, poderemos representar este tipo de operação da forma que segue: Em resumo, neste tipo de operação, a execução somente abandonará o laço quando a condição for falsa. Veja um exemplo a seguir, utilizando-se de pseudocódigo, onde iremos apresentar a soma de uma contagem de números de 1 à 5: Algoritmo soma Variaveis Real Soma // Acumulador Inteiro Contador // Contador Inicio Soma = 0 Escrever“A soma dos números de 1 à 10 é igual a” Para contador = 1 até 10 Soma = soma + contador Proximo Escrever soma Fim. No exercício acima, teremos como resultado a expressão : A soma dos números de 1 à 10 é igual a 55 Desenhe o fluxograma do pseudocódigo acima descrito. 25 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB ANINHAMENTOS Vamos falar sobre "aninhamentos", ou seja, ter um conjunto de comandos de uma outra construção dentro de um qualquer um dos tipos de construções apresentadas até este momento, para isso, teremos que ter a construção interna embutida dentro da construção externa. O conjunto de comandos é um conjunto de comandos simples, podem ser inclusive de instruções primitivas. Por exemplo, temos uma determinada situação: Vamos testar a região na qual um determinado cliente tem o seu domicílio e, dentro do estado na qual este cliente reside naquela região, teremos uma tarifa de postagem diferenciada. Na verdade, teremos testes dentro de testes e cada um com um determinado procedimento. EXERCÍCIOS PROPOSTOS • Exercício 001 : Escreva um pseudocódigo que irá receber a entrada de dois números e irá retornar como saída a entrada (número) de maior valor. • Exercício 002 : Escreva um pseudocódigo na qual o usuário irá ter a oportunidade de entrar com 5 números e o sistema irá gerar como resultado a soma dos 5 números entrados pelo usuário. • Exercício 003 : Uma empresa irá oferecer um reajuste salarial, cujo percentual será decidido através das seguintes situações: • • • • • • Funcionários do sexo masculino com tempo de casa superior ou igual a 10 anos terão direito a um reajuste de 5%; Funcionários do sexo masculino com tempo de casa inferior a 10 anos terão direito a um reajuste de 3%; Funcionários do sexo feminino com tempo de casa superior ou igual a 8 anos terão direito a um reajuste de 5%; Funcionários do sexo feminino com tempo de casa inferior a 8 anos terão direito a um reajuste de 3%; Funcionários em qualquer uma das situações acima, porém com mais de um dependente terá ainda um reajuste de 2% sobre o salário reajustado anteriormente. Exercício 004 : Escreva um fluxograma na qual o usuário dará a entrada de 10 números e ao final o sistema irá exibir o maior número entrado. 26 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 16. ESTRUTURA DE DADOS O tema deste módulo será o das variáveis indexadas. Com uso freqüente na programação convencional, variável indexada é um conjunto de variáveis do mesmo tipo, referenciadas pelo mesmo nome e que armazenam valores distintos. A sua distinção se dá pela divisão da variável, possuindo esta uma posição de armazenamento dentro de seu conjunto, e esta é realizada por meio de índices, daí o nome “indexada”. Existem dois tipos de variáveis indexadas: • Vetor : quando a variável indexada possui um único índice; • Matrix : quando a variável indexada O número de índices dentro de uma variável é denominado dimensão. Para se definir uma variável indexada, utilizamos a seguinte sintaxe: Variaveis Matriz Tipo Nome_variável [dimensão1,dimensão2...] ... ... Veja a seguir alguns exemplos de definição de variáveis indexadas: Matriz Caracter Nome [ 5 ] No exemplo acima, criamos na verdade cinco variáveis nomes, porém elas estão divididas da seguinte forma: Nome[1] , Nome[2], Nome[3], Nome[4], Nome[5] Sendo que cada uma das dimensões, poderá armazenar um valor diferenciado. Matriz Real Salario[5] A variável Salario é do tipo Real, e possui 5 dimensões, assim como a variável Nome. Os exemplos acima são do tipo Vetor, abaixo veremos uma variável indexada do tipo matriz: Matriz Inteiro CodigoProduto[3,10] 27 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB No exemplo anterior, teremos a variável CodigoProduto, dividida nas seguintes dimensões: CodigoProduto[1,1] CodigoProduto[1,2] CodigoProduto[1,3] CodigoProduto[1,4] CodigoProduto[1,5] CodigoProduto[1,6] CodigoProduto[1,7] CodigoProduto[1,8] CodigoProduto[1,9] CodigoProduto[1,10] CodigoProduto[2,1] CodigoProduto[2,2] CodigoProduto[2,3] CodigoProduto[2,4] CodigoProduto[2,5] CodigoProduto[2,6] CodigoProduto[2,7] CodigoProduto[2,8] CodigoProduto[2,9] CodigoProduto[2,10] CodigoProduto[3,1] CodigoProduto[3,2] CodigoProduto[3,3] CodigoProduto[3,4] CodigoProduto[3,5] CodigoProduto[3,6] CodigoProduto[3,7] CodigoProduto[3,8] CodigoProduto[3,9] CodigoProduto[3,10] Vamos comparar as variáveis indexadas a um Bloco de uma quadra residencial. O bloco é único, porém está dividido em diversos apartamentos ( dimensões ) e em cada apartamento reside um morador diferente ( valor armazenado ). Quando estamos trabalhando com variáveis indexadas, temos que obrigatoriamente especificar o indice da variável na qual queremos trabalhar. Nos exemplos acima, não poderíamos nos referir apenas a variável NOME, mas sim a NOME[x], onde o “x” seria uma dimensão válida, neste caso de 1 à 5. Vamos exibir um exemplo onde iremos preencher os valores para a variável nome em suas diversas dimensões e em seguida listar os mesmos: Algoritmo Nomes Variaveis Matriz Caracter Nome[5] Inteiro Conta , Lista Inicio Para conta = 1 até 5 Ler Nome[conta] Proximo Para lista = 1 até 5 Escrever nome[lista] Proximo Fim. Exercício 001 : Escreva um pseudocódigo que irá Ler e armazenar em variável indexada 10 números e após o final da leitura, irá exibir a soma dos 10 números armazenados nas dez dimensões da variável indexada. Exercício 002 : Escreva um pseudocódigo que irá ler e armazenar em variável indexada 50 números e após o final de leitura, irá apresentar o número da dimensão e o valor armazenado da dimensão de variável indexada que conterá o maior valor lido. 28 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB “BOLHA DE CLASSIFICAÇÃO” Quando trabalhamos com variáveis indexadas, poderemos entre outros criar “índices”, ou seja, ordenar os vetores para que eles sejam apresentados em uma determinada ordem. Este procedimento, também é conhecido, em sua forma mais simples como “Bolha de Classificação”. Sua lógica consiste na leitura de todos os elementos de um vetor, comparando-se os valores de seus elementos vizinhos, e neste momento é empregada a seguinte seqüência: 1. Serão realizadas uma varredura a menos do total de elementos do vetor; 2. Na primeira varredura, verificamos que o elemento do vetor já se encontra em seu devido lugar; 3. Na segunda varredura, o procedimento é análogo à primeira varredura e vai até o último elemento; 4. Ao final do procedimento, o vetor estará classificado segundo o critério escolhido. Vamos à prática, no exemplo a seguir, iremos realizar a leitura de 5 números e em seguida classifica-los em ordem crescente: Algoritmo classificação Variaveis Matriz Inteiro numero[50] Inteiro A,B Real Aux Inicio Para A = 1 até 50 Ler numero[A] Proximo B=50 Faça Enquanto B > 1 Para A = 1 até ( B-1 ) Se numero[A] > numero[A+1} Então Aux=numero[A] numero[A]=numero[A+1] numero[A+1]=Aux Fim_se Proximo B=B-1 Fim_enquanto Escrever “Abaixo, a listagem ordenada dos números entrados” Para A de 1 até 50 Escrever numero[A] Proximo Fim. 29 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB PESQUISA SEQÜENCIAL Um outro processo que poderá ser utilizado em programação, é a pesquisa seqüencial, ou seja, serão verificados todos os componentes de um vetor, para verificar se nestes estão armazenados um determinado valor. Exemplo: Iremos efetuar a leitura de 100 nomes, em seguida, será solicitado um nome qualquer e, iremos verificar se, dentre os 100 nomes entrados, existe o nome na qual foi solicitada a pesquisa. Veja este algoritmo a seguir: Algoritmo pesquisa Variaveis Matriz caracter nome[100] Caracter pesquisado Inteiro contador Lógico encontrado Inicio Para contador = 1 até 100 f Ler nome[contador] Proximo Ler pesquisado Escrever “Aguarde ... pesquisando no banco de dados” contador=1 encontrado=FALSO Faça Enquanto contador<101 .E. NÃO encontrado Se nome[contador]=pesquisado Então Encontrado=VERDADEIRO Senão Contador=contador+1 Fim_se Fim_enquanto Se encontrado Então Escreva “O valor está contido no banco de dados” Senão Escreva “O valor não existe no banco de dados” Fim_se Fim. 30 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 17. MODULARIZANDO ALGORITMOS Em determinadas situações, devido à complexidade de alguns algoritmos, é necessária a divisão do mesmo em diversas partes, para que assim, o sistema tenha uma operação precisa. Essa divisão de tarefas é denominada de “Subalgoritmos”. Os subalgoritmos nada mais são do que rotinas que possuem uma função especifica. A modularização consiste num método para facilitar a construção de grandes programas, através de sua divisão em pequenas etapas, que são : módulos, rotinas, sub-rotinas ou subprogramas. Permitindo o reaproveitamento de código, já que podemos utilizar um módulo quantas vezes for necessário, eliminando assim a necessidade de escrever o mesmo código em situações repetitivas. Vamos imaginar a seguinte situação: Em um sistema comercial, em várias etapas temos que verificar se o número do CPF do cliente foi digitado de forma correta. Imaginando que tal situação se repete por 38 vezes no sistema. Teríamos que escrever 38 vezes o mesmo trecho de código? Não, para isso teríamos uma rotina “subalgoritmo” que teria esta função. Este subalgoritmo teria um nome e, sempre que fosse necessária a verificação do CPF, bastaria invocar “chamar” este subalgoritmo. De um modo geral, os subalgoritmos são importantes devido aos seguintes aspectos: Estruturação de algoritmos, facilitando assim a detecção de erros. Imagine se a rotina de verificação do CPF do cliente tiver um erro lógico. Em uma primeira hipótese, teríamos que corrigir a mesma em 38 pontos diferentes do sistema, porém utilizando subalgoritmo, teríamos apenas que realizar uma correção em um ponto do sistemas; Modularização de sistemas, que justamente é utilizada para a reutilização de rotinas “subalgoritmos” em vários pontos do algoritmo principal; Subdivisão de algoritmos extensos, facilitando assim a sua compreensão. O esquema de um algoritmo e seus subalgoritmos pode ser observado a seguir: Algoritmo (nome do algoritmo) Variaveis Definição das variáveis globais Inicio Fim. 31 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Quando o sistema está executando o algoritmo principal e, é invocado algum subalgoritmo (através de um nome dado ao mesmo), a execução deste é interrompida e, o sistema passa a executar os comandos constantes do subalgoritmo. Ao final desta execução, o sistema retorna automaticamente para o algoritmo principal a partir do ponto onde foi realizada a chamada do subalgoritmo. Um subalgoritmo é composto por: Cabeçalho : onde é definido o nome do subalgoritmo e as variáveis que serão utilizadas pelo mesmo; Corpo : onde são especificadas as instruções do subalgoritmo. Os subalgoritmos podem ser de dois tipos: • • Funções; Procedimentos. O subalgoritmo tipo função é aquele na qual um valor é calculado com base em outros valores, normalmente passados pelo algoritmo principal. O subalgoritmo tipo procedimento é aquele que retorna zero ou mais valores ao algoritmo que o invocou, sendo que, ao contrário das funções, esses valores não são explícitos, ou seja, a chamada de procedimentos nunca é realizada ao meio de expressões é só é realizada em comandos isolados dentro do algoritmo, como instruções de entrada e saída de dados. Veja a seguir um algoritmo e seu subalgoritmo para se calcular a raiz quadrada de um determinado número: Algoritmo Raiz_quadrada Var num1, num2 : real Função Raiz(numero:real) : real Var calc : real Inicio Calc = SQR(numero) Retorne Calc Fim Inicio Escreva “Numero para Raiz Quadrada” Leia num1 Num2 = Raiz(num1) Escreva “Raiz quadrada é igual a:”, num2 Fim 32 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Com certeza, teria sido mais fácil executar o calculo de raiz quadrada diretamente no algoritmo principal, porém o fizemos assim para que você tenha uma idéia de como funciona um subalgoritmo, ou seja, a passagem de valores de uma rotina principal, para uma rotina secundária e o retorno do valor resultante deste processamento. No módulo passado nos referíamos aos subalgoritmos. Aqui vamos falar um pouco sobre variáveis globais e locais. VARIÁVEL GLOBAL Como o próprio nome diz, uma variável global pode ser utilizada em qualquer parte do algoritmo ou em seus subalgoritmos, ou seja, elas são visíveis em todo o procedimento que engloba o processamento. VARIÁVEL LOCAIS Ao contrário, as variáveis locais são definidas exclusivamente dentro de um subalgoritmo e sua vida se restringe ao uso dentro do próprio subalgoritmo onde foi declarada. Imagine a seguinte situação: - Um “avião” foi fabricado pela Embraer, porém este poderá voar em qualquer parte do mundo. Este avião poderia ser comparado a uma variável global. O “elevador” do edifício “ABC”, foi implantado naquele edifício e sua vida, ou seja, sua utilidade está apenas naquele edifício. Este elevador poderia ser comparado a uma variável local. Veja o algoritmo utilizado no módulo anterior: Algoritmo Raiz_quadrada Var num1, num2 : real Função Raiz(numero:real) : real Var calc : real Inicio Calc = SQR(numero) Retorne Calc Fim Inicio Escreva “Numero para Raiz Quadrada” Leia num1 Num2 = Raiz(num1) Escreva “Raiz quadrada é igual a:”, num2 Fim Observe que as variáveis NUM1 e NUM2 utilizadas no processo, foram declaradas no inicio do algoritmo principal, ou seja, estas são variáveis globais. Já a variável CALC, definida dentro da função RAIZ é uma variável local, ou seja, operável apenas dentro daquela função. 33 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Pelo que observamos até este ponto, um subalgoritmo é um nome dado a um determinado trecho do algoritmo principal, que, na maioria das vezes, é responsável pela execução de uma única tarefa dentro do contexto do sistema. Estudamos que existem dois tipos de subalgoritmos: 1. Funções : que retornam um único valor para o algoritmo que a invocou; 2. Procedimentos : que retornam mais de um valor ou nenhum valor ao algoritmo que o invocou. Nas funções e procedimentos, temos as variáveis globais, definidas no inicio de um algoritmo e que podem ser utilizadas por todos os subalgoritmos assim como pelo algoritmo principal e as variáveis locais, que são definidas dentro de um subalgoritmo e só podem ser utilizadas dentro deste. Para completar o nosso quebra-cebeças, temos também o que chamados de parâmetros, ou seja, as portas pelas quais se realiza a comunicação bidirecional entre o algoritmo principal e seus subalgoritmos e vice e versa. Possuímos dois tipos de parâmetros: Parâmetros formais : São aqueles que, de forma automática substituem parâmetros determinados por “nomes simbólicos” por valores passados durante a execução do processo. Veja o exemplo a seguir: Função Raiz(numero:real) : real Var calc : real Inicio Calc = SQR(numero) Retorne Calc Fim Na verdade, o parâmetro formal “número” será substituído por um parâmetro real, ou seja, um valor numérico para o calculo da raiz quadrada de um determinado número. Parâmetros reais : Quando não temos parâmetros formais e sim valores pré-estabelecidos que não serão alterados durante o processamento. Através desta lógica, devemos saber que, durante o processamento dos dados, quando são substituídos parâmetros formais por valores reais, os parâmetros reais são calculados e os parâmetros formais recebem uma cópia dos valores resultantes do processamento. Seguindo esta lógica, iremos entender que, os parâmetros formais não afetam os parâmetros reais. 34 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 18. ALGORITMOS DE PESQUISA A capacidade de armazenar informações foi um passo decisivo na evolução da ciência da computação e para o nível generalizado de utilização do computador. Com isso, a capacidade de recuperar informações, para posterior processamento, assume papel de suma importância na utilização cotidiana do computador, existindo para isto inúmeros exemplos, como: recuperação de dados de dados de transações bancárias de um cliente através de um número de conta, no cadastro de cliente/operações de um banco. Portanto, algoritmos de pesquisa devem ser projetados de forma a garantir a confiabilidade e eficiência exigidas pela importância das aplicações existentes. A pesquisa de dados pode ser efetuada tanto em unidades de memória secundárias (disco rígido, disquetes, fita), quanto na memória principal do computador. PESQUISA SEQÜENCIAL O método mais simples de determinar a presença, ou não, de um elemento numa seqüência, é percorrê-la a partir do seu início, efetuando comparações, até que o elemento seja encontrado ou o fim da seqüência seja alcançado. Este método é chamado de pesquisa seqüencial. Dados : vetor de n elementos (n conhecido) elemento a ser pesquisado no vetor Resultado: Se o elemento existe, mostra-se a sua posição ou o total de ocorrências deste no vetor. Se o elemento não existe, mostra-se uma mensagem de falhas. As considerações que podem ser feitas sobre os dados de entrada (vetor), são do tipo: o vetor esta ou não ordenado; o elemento ocorre uma única vez (pesquisa única) ou repetidas vezes no vetor (pesquisa única). Isso acarreta os seguintes tipos de pesquisa: a. Desordenada Única b. Desordenação Múltipla c. Ordenada Única d. Ordenada Múltipla PESQUISA BINÁRIA O método de pesquisa seqüencial é fácil de escrever e é razoavelmente eficientes para seqüências com poucos elementos. Entretanto, para seqüências de tamanho considerável, que ocorrem na maioria das aplicações existentes, a utilização do método torna-se inviável. Uma estratégia interessante e eficiente é utilizada no método de pesquisa binária. 35 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Descrição Geral do Método: • • • • • • Definir intervalo inicial (i, f) de busca Determinar a posição média do intervalo(m = (i+f) DIV 2) Comparar o elemento da posição média (v[m]) com o elemento E: Caso sejam iguais então terminou as pesquisa Caso contrário definir o novo intervalo de busca Aplicar sucessivamente o passo anterior até encontrar E ou não existir mais o intervalo de busca São aspectos fundamentais do método: • • • vetor de entrada tem que estar ordenado intervalo de busca inicial é (i,f) = (1,n) intervalo de busca, considerado a cada iteração, é definido do seguinte modo: (i,m-1), se (E < v[m]) (m+1,f), se (E > v[m]) tendo a metade do tamanho do intervalo original • O teste de repetição é (i <= f) e Não Achou Dados : vetor de n elementos (n conhecido) elemento a ser pesquisado no vetor Resultado Se o elemento existe, mostra-se a sua posição ou o total de ocorrências deste no vetor. Se o elemento não existe, mostra-se uma mensagem de falha 19. ALGORITMOS DE ORDENAÇÃO Os problemas de ordenação são comuns tanto em aplicações comerciais quanto científicas. Entretanto, raro são os problemas que se resumem à pura ordenação de seqüências de elementos. Normalmente, os problemas de ordenação são inseridos em problemas de pesquisa, intercalação e atualização. Isto torna ainda mais importante o projeto e a construção de algoritmos eficientes e confiáveis para tratar o problema. O nosso objetivo é analisar os seguintes tipos de ordenação : 36 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB SELECTION SORT Este método é um dos mais simples e intuitivos dentre os métodos existentes. Sua estratégia básica é selecionar o menor elemento da seqüência considerada e colocá-lo no início da seqüência. Assim, dada uma seqüência de tamanho n, várias iterações são efetuadas, sendo que a cada vez que esta estratégia é aplicada, uma nova seqüência é gerada pela eliminação do menor elemento da seqüência original. Procedure SelectionSort ( var vet : vetor; n : integer); {ordenado crescente} var i, j, pmin : integer; begin for i← 1 to (n-1) do begin pmin ← i; for j← (i+1) to n do if vet[j] < vet[pmin] then pmin ← j; trocar (vet[i], vet[pmin] ) ; end; end; BUBBLE SORT A estratégia utilizada pelo BubbleSort consiste de comparações e trocas entre elementos consecutivos da seqüência, a fim de "empurrar" o maior elemento para a última posição. Assim, várias iterações são efetuadas e, para cada seqüência considerada, a aplicação da estratégia gera uma nova seqüência pela eliminação do maior elemento da seqüência original. Além disto, uma variável de controle (lógica) é utilizada para registrar a ocorrência ou não de troca entre elementos da seqüência. Quando nenhuma troca é efetuada, tem-se que a seqüência considerada já estava ordenada. Esta particularidade determina, em alguns casos, um número menor de comparações que o método Selection Sort. Procedure BubbleSort ( var vet : vetor ; n integer) ; {ordem crescente} var i, limite : integer; trocou : boolean; begin limite ← n; repeat trocou ← false; for i← 1 to (limite - 1) do begin if vet[i] > vet [i+1] then begin trocar(vet[i], vet[i+1]); trocou ← true; end; end; limite ← limite - 1 until not trocou end; 37 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB Este método baseia-se no seguinte processo de inserção controlada: • • • Com o primeiro elemento da seqüência forma-se uma seqüência de tamanho 1, ordenada. Cada elemento restante da seqüência original é inserido na seqüência, de modo que esta permaneça ordenada. Isto é feito através de uma pesquisa na seqüência ordenada que determina a posição que o novo elemento deverá ser inserido. Quando um elemento é inserido a frente de outro, estes deverão ser deslocados de uma posição. 20. RECURSIVIDADE Recursão é um método geral para resolver problemas reduzindo-os a problemas mais simples do mesmo tipo. A estrutura geral de uma solução recursiva de um problema é assim : Resolva de forma recursiva um problema • Se o problema é trivial, faça o obvio (resolva-o) • Simplifique o problema • Resolva de forma recursiva (um problema mais simples) • Combine (na medida do possível) a solução do(os) problemas mais simples em uma solução do problema original Um subprograma recursivo chama a si próprio constantemente, cada vez em uma situação mais simples, até chegar ao caso trivial, quando pára. Devemos lembrar que recursividade deve ser utilizada na solução de problemas que tenham a natureza recursiva. Exemplos : Somatório de inteiros : Se n =1; Somatório = 1. Caso contrário Somatório = n + Somatório(n-1) Fatorial: Se n=0 ou n=1 ; Fatorial = 1. Caso contrário Fatorial = n*Fatorial(n-1) MDC: Se b divide a, então o MDC é b. Caso contrário, MDC(a,b) = MDC(b,a mod b) N-ésimo termo da série de Finonacci: 1° e 2° = 1 e n-ésimo = (n-1)+(n-2) 38 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 21. EXEMPLO DE ALGORITMOS um exemplo simples de algoritmo, este apenas lê um nome e deseja um bom dia para a um exemplo de utilização de comandos de entrada e saida um exemplo de utilização de Comandos da Álgebra Convencional 39 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB um exemplo de utilização de Comandos da Atribuição: um exemplo de utilização da estrutura SE 40 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB um exemplo de utilização da estrutura SE um exemplo de utilização da estrutura SE 41 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB um exemplo de utilização da estrutura SE um exemplo de utilização do bloco caso: 42 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB um exemplo da utilização da estrutura CASO: um exemplo da utilização do laço de repetição REPITA ... ATÉ QUE 43 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB um exemplo da utilização do laço de repetição REPITA ... ATÉ QUE um exemplo da utilização do laço de repetição Enquanto 44 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 45 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB um exemplo da utilização do laço Faça um exemplo da utilização de declaração de variáveis 46 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB um exemplo da utilização de estrutura homogênea composta de várias variáveis: Vetores Neste ultimo algoritmo começamos a perceber que quando é necessário armazenar mais de uma informação sobre uma determinada pessoa é necessário mais de um vetor para isto, ou seja se eu quiser guardar o Nome, o Telefone e a Data de Nascimento da pessoa eu iria precisar de três vetores, um para cada tipo de dado, esta necessidade de mais de um vetor está relacionado com o fato do vetor ser uma estrutura homogênea ou seja, só consegue armazenar um único tipo de dado. 47 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB ÍNDICE 1. INTRODUÇÃO 1 2. DEFINIÇÃO DE ALGORITMO 1 3. FASES DE UM ALGORITMO 2 4. CONCEITOS 3 5. COMO CONSTRUIR UM ALGORITMO 3 6. DECOMPOSIÇÃO (TOP-DOWN) 4 7. DESENVOLVIMENTO ESTRUTURADO 5 8. FORMA DE REPRESENTAÇÃO 6 9. TIPOS DE PROCESSAMENTO 9 10. TIPOS DE DADOS 12 11. VARIÁVEIS (IDENTIFICADORES) 13 12. CONSTANTES 14 13. OPERAÇÕES BÁSICAS 14 14. PRIMEIRAS INSTRUÇÕES 17 15. ESTRUTURAS DE REPETIÇÃO 23 16. ESTRUTURA DE DADOS 27 48 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB 17. MODULARIZANDO ALGORITMOS 31 18. ALGORITMOS DE PESQUISA 35 19. ALGORITMOS DE ORDENAÇÃO 36 20. RECURSIVIDADE 38 21. EXEMPLO DE ALGORITMOS 39 49 PROF. DR. SAÏD MOUNSIF UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA