·

Engenharia Química ·

Linguagens de Programação

Send your question to AI and receive an answer instantly

Ask Question

Recommended for you

Preview text

Marcos Marcelino Mazzucco 2020 Última revisão 01092020 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB ALGORITMOS TÉCNICAS DE PROGRAMAÇÃO GNU OCTAVE E MATLAB VISÃO GERAL TIPOS DE DADOS OPERADORES ESTRUTURAS CONDICIONAIS ESTRUTURAS DE REPETIÇÃO ESTRUTURAS DE DADOS HOMOGÊNEAS ESTRUTURAS DE DADOS HETEROGÊNEAS MODULARIZAÇÃO APLICAÇÕES ATIVIDADES INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Marcos Marcelino Mazzucco 2 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Este material foi desenvolvido para acompanhar a disciplina Programação para Engenharia ministrada pelo professor Marcos Marcelino Mazzucco O uso comercial deste material incorre em violação dos direitos autorais estando sujeito às penalidades previstas na legislação em vigência Acompanha este material os software livres GNU Octave e mEd disponíveis em httpwwwoctaveorg e httppaginasunisulbreqmprofmarcos Marcos Marcelino Mazzucco INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB ÍNDICE 1 INTRODUÇÃO6 2 PRIMEIRAS PRÁTICAS COM O GNU OCTAVE7 21 HISTÓRICO8 22 INSTALANDO O SOFTWARE NECESSÁRIO8 221 PARTE 1 O DOWNLOAD9 222 PARTE 2 A INSTALAÇÃO9 223 MED MFILE EDITOR9 23 GNU OCTAVE E MATLAB LINHA DE COMANDO10 3 REPRESENTAÇÃO DO PENSAMENTO EM ALGORITMOS14 4 ALGORITMOS PARA PROGRAMAÇÃO EM COMPUTADOR17 41 CONHECER O COMPUTADOR18 42 ALGORITMO PARA PROGRAMAÇÃO19 5 ESTRUTURAS PARA FLEXIBILIZAÇÃO DO PENSAMENTO EM ALGORITMOS21 6 ALGORITMO PARA PROGRAMAÇÃO EM COMPUTADOR27 61 ENTRADA E SAÍDA DE DADOS28 62 TIPOS BÁSICOS DE DADOS28 63 OPERADORES MATEMÁTICOS33 64 DESVIO CONDICIONAL33 641 DESVIO CONDICIONAL SIMPLES33 642 DESVIO CONDICIONAL COMPOSTO34 643 ANINHAMENTO DE ESTRUTURAS CONDICIONAIS35 65 OPERADORES LÓGICOS E RELACIONAIS35 66 ESTRUTURAS DE REPETIÇÃO37 7 PROGRAMANDO COM ESTRUTURAS DE TOMADA DE DECISÃO E REPETIÇÃO41 71 PROGRAMANDO COM MATLABOCTAVE42 72 ENTRADA E SAÍDA DE DADOS43 73 TIPOS BÁSICOS DE DADOS45 731 DADOS TIPO DOUBLE REAL47 732 DADOS TIPO STRING TEXTO48 733 CONSTANTES49 74 OPERADORES MATEMÁTICOS49 75 DESVIO CONDICIONAL50 751 DESVIO CONDICIONAL SIMPLES50 752 DESVIO CONDICIONAL COMPOSTO51 753 ANINHAMENTO DE ESTRUTURAS CONDICIONAIS51 76 OPERADORES LÓGICOS E RELACIONAIS52 77 ESTRUTURAS DE REPETIÇÃO54 78 ESTRUTURA DE SELEÇÃO SWITCH55 8 REPRESENTAÇÃO GRÁFICA DE UM ALGORITMO57 EXEMPLO FLUXOGRAMA PARA SOMA DE NÚMEROS58 EXEMPLO FLUXOGRAMA PARA EQUAÇÃO DO SEGUNDO GRAU59 EXEMPLO FLUXOGRAMA CONTAGEM PEÇAS60 81 FLUXOGRAMA COM ELEMENTOS DE COMPUTADORES62 9 REFINAMENTOS SUCESSIVOS70 10 EXERCÍCIOS DE ALGORITMOS72 EXERCÍCIO ALGORITMO CONTAGEM DE PEÇAS73 EXERCÍCIO ALGORITMO EQUAÇÃO SEGUNDO GRAU II73 Marcos Marcelino Mazzucco 3 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB EXERCÍCIOS ALGORITMO E FLUXOGRAMA CLASSIFICAÇÃO73 EXERCÍCIOS ALGORITMO E FLUXOGRAMA PRODUTÓRIO73 11 ALGORITMOS E ESTRUTURAS DE DADOS HOMOGÊNEAS74 12 MANIPULAÇÃO DE DADOS EM ESTRUTURAS HOMOGÊNEAS75 1211 EXEMPLO MATRIZES E VETORES76 13 PROGRAMAÇÃO COM ESTRUTURAS DE DADOS HOMOGÊNEAS80 MANIPULAÇÃO DE DADOS EM ESTRUTURAS HOMOGÊNEAS81 VETORES E MATRIZES DE CARACTERES TEXTO83 14 ALGORITMOS E ESTRUTURAS DE DADOS HETEROGÊNEAS86 MANIPULAÇÃO DE DADOS EM ESTRUTURAS HETEROGÊNEAS88 15 PROGRAMAÇÃO COM ESTRUTURAS DE DADOS HETEROGÊNEAS91 16 MODULARIZAÇÃO DE ALGORITMOS93 MECANISMOS DE PASSAGEM DE PARÂMETROS102 EXERCÍCIO FLUXOGRAMAS E ALGORITMOS106 EXERCÍCIO TEMPERATURA106 EXERCÍCIO BUSCA106 EXERCÍCIO DISTÂNCIA106 17 SUBROTINAS COM GNU OCTAVE E MATALAB107 171 NOMES DE ARQUIVOS E SUBROTINAS111 18 APLICAÇÕES112 181 FATORIAL113 182 ESTATÍSTICA113 183 INTEGRAL115 19 APLICAÇÕES ESPECÍFICAS OCTAVEMATLAB121 191 MATRIZES122 192 POLINÔMIOS123 1921 RAÍZES124 1922 MULTIPLICAÇÃO124 1923 DIVISÃO124 1924 ADIÇÃO124 1925 DERIVAÇÃO124 1926 INTEGRAÇÃO125 1927 APROXIMAÇÃO POLINOMIAL125 1928 EXPANSÃO EM FRAÇÕES PARCIAIS125 193 RAÍZES DE EQUAÇÕES NÃO LINEARES125 194 EQUAÇÃO DIFERENCIAL ORDINÁRIA126 195 INTEGRAÇÃO DE EQUAÇÕES A UMA VARIÁVEL128 196 GRÁFICOS129 197 MANIPULAÇÃO DE DADOS EM ARQUIVOS134 198 ATIVIDADES PROPOSTAS PARA PROGRAMAR135 20 ATIVIDADES PARA APROFUNDAR OS CONCEITOS136 201 REGRESSÃO LINEAR137 202 EQUAÇÃO DIFERENCIAL138 203 EQUAÇÃO DIFERENCIAL 2139 21 BIBLIOGRAFIAS141 22 APÊNDICE 1 SOLUÇÕES DAS ATIVIDADES PROPOSTAS142 Marcos Marcelino Mazzucco 4 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 221 FATORIAL142 222 ESTATÍSTICA142 223 INTEGRAL144 23 APÊNDICE 2 UNIDADE DATATYPES146 24 APÊNDICE 3 UNIDADE OCTAVEPASCAL148 Marcos Marcelino Mazzucco 5 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 1 INTRODUÇÃO A solução de um problema envolve o domínio de ciências diversas Um problema de engenharia envolve conhecimentos matemáticos físicos químicos e fenomenológicos A solução de qualquer problema começa pela compreensão dos processos e fenômenos envolvidos Compreender é tornar compreensível e expandir as informações na direção das soluções Algoritmos são apenas as direções das soluções não constituindo a solução de um problema porém indicando a trajetória com o grau de refinamento possível para que uma solução viável seja obtida Assim sendo é crucial que se invista uma boa parcela do tempo da solução de qualquer problema na coleta de informações e compreensão do problema reduzindo desta forma o tempo gasto na correção ou reinício do problema O algoritmo para a solução de um problema em computador é diferente daquele para a solução mental Os passos que são óbvios para o raciocínio humano não os são para os computadores Para tanto é necessária a definição das instruções que podem ser utilizadas para que um conjunto coeso e restrito de informações seja viabilizado e compreendido pelo computador Para atender a este requisito serão definidas estruturas em língua portuguesa que possam ser traduzidas para linguagens formais de programação fixando atenção para o GNU Octave e Matlab Para permitir uma evolução gradual do raciocínio é possível definir protótipos os quais após refinamento conduzem a uma solução viável para um problema Várias etapas de refinamento podem se suceder de forma a atingir a solução Este material é constituído por conteúdos fundamentais Algoritmos para solução de problemas Algoritmos para programação em computador Programação com GNU OctaveMatlab os quais estabelecem de forma gradativa como transpor um raciocínio de maneira que uma solução computacional seja obtida Os capítulos adicionais atentam para problemas resolvidos e atividades os quais além de complementar este material reforçam a ideia de que apenas a prática extensiva pode tornar mais simples a programação de computadores Marcos Marcelino Mazzucco 6 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 2 PRIMEIRAS PRÁTICAS COM O GNU OCTAVE Marcos Marcelino Mazzucco 7 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 21 HISTÓRICO Matlab surgiu na década de 70 nas universidades do Novo México e Stanford USA a partir de um pacote de subrotinas escritas em FORTRAN para a solução de problemas matriciais MatLab Matrix Laboratory O objetivo era que os alunos destas universidades pudessem resolver problemas matriciais diversos sem efetuar programação para tal tarefa A ideia inicial foi estendida para vários conceitos e aplicações matemáticas e o então Laboratório de Matrizes tornouse o Laboratório de Matemática Atualmente o Matlab apresenta soluções para praticamente qualquer problema matemático Enriquecido com as chamadas Tool Boxes caixas de ferramentas especializadas na solução de problemas específicos o Matlab tornase uma ferramenta importantíssima para ciências em geral Dispondo de subrotinas para solução de equações algébricas diferencias e integrais fornece o apoio adequado para o ensino de engenharia Desenvolvendo um software para uso no curso de pósgraduação e para acompanhar um livro de projetos reatores químicos dois professores nas Universidades do Texas e WisconsinMadison USA observaram que com poucas alterações o software poderia ser compatibilizado com a linguagem de Matlab Surgiu assim GNU Octave A highlevel interactive language for numerical computations o qual está disponibilizado livremente Atualmente Octave wwwoctaveorg está disponível sob licença GPL General Public License enquanto os direitos autorais de Matlab estão sob domínio da MathWorks Inc wwwmathworkscom Matlab está disponível em versões para MS Windows enquanto GNU Octave está disponível também para Unix e linux inclusive para o sistema Android 22 INSTALANDO O SOFTWARE NECESSÁRIO Antes de trabalhar com os software indicados nesta disciplina crie um diretório pasta chamado temp em seu computador CTemp Faça isto caso o diretório ainda não exista O conteúdo deste diretório poderá ser apagado após as instalações indicadas Para as instalações siga a ordem a seguir Marcos Marcelino Mazzucco 8 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 221 PARTE 1 O DOWNLOAD Faça o download do arquivo que contém o GNU Octave a partir da página do Curso de Engenharia Química httppaginasunisulbreqm na seção disciplinas item Professores endereços eletrônicos ou diretamente em httppaginasunisulbreqmprofmarcos seção software Faça também o download do editor de arquivos MEd no mesmo local 222 PARTE 2 A INSTALAÇÃO Execute primeiro o instalador do GNU Octave Ao ser solicitado o local da instalação altere o caminho indicado para COctave Depois instale o editor MEd no mesmo local COctave Esta ordem deve ser respeitada pois alguns arquivos do GNU Octave são alterados na instalação do editor MEd 223 MED MFILE EDITOR Para facilitar a edição de código Octave o prof Marcos Marcelino Mazzucco desenvolveu um editor de código com reconhecimento de sintaxe O editor reconhece as palavras reservadas da linguagem Reconhece comentários demarcados por e Apesar de GNU Octave suportar a delimitação de texto nas formas de aspas duplas e simples apenas uma forma é suportada em cada sessão do software preferivelmente aspas duplas Possui funcionalidades como modelos de códigos interage com Octave e gnuplot facilita acesso aos arquivos de ajuda etc A imagem a seguir apresenta o editor mEd na versão 343 Marcos Marcelino Mazzucco 9 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 23 GNU OCTAVE E MATLAB LINHA DE COMANDO Tanto Matlab como Octave são linguagens interpretadas de propósito científico devidamente dotadas de estruturas condicionais de repetição de tipos de dados próprios para as aplicações a que se propõem adicionados de abundantes instruções para manipulação matemática São interpretadores de linha prompt de comando com a possibilidade de executar instruções em lote grupos de instruções scripts programas A imagem que segue apresenta GNU Octave resolvendo a equação diretamente na linha de comando Marcos Marcelino Mazzucco 10 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Os símbolos operam multiplicação divisão soma subtração e potenciação A atribuição de valor ocorre através do símbolo e a precedência das operações ocorre pelo símbolos O armazenamento de valores acontece em variáveis cujos nomes devem começar com letras ou e podem conter números A figura a seguir apresenta Octave executando um programa wpolyfitdemom que acompanha o software Observe a saída gerada na forma de gráficos gnuplot graph Marcos Marcelino Mazzucco 11 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB As teclas de navegação para cima e para baixo podem ser utilizadas para executar instruções já aplicadas desde que tanto Matlab como Octave memorizam as últimas ações realizadas Os comandos dir diretório cd avanço na árvore de diretórios e cd retrocesso na árvore de diretórios fornecem acesso rápido à estrutura de arquivos de suas pastas Para executar um programa com a extensão m em um diretório basta posicionarse neste e acionar na linha de comando o nome deste Para verificar qual o diretório corrente pode ser utilizado o comando pwd Após executar um programa é possível verificar o conteúdo das variáveis digitandose o nome destas sem pontoevírgula As variáveis permanecem ativas até que sejam usadas as instruções clear nome da variável ou clear para eliminar todas as variáveis O comando whos ou who lista as variáveis alocadas e tipos Marcos Marcelino Mazzucco 12 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Marcos Marcelino Mazzucco 13 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 3 REPRESENTAÇÃO DO PENSAMENTO EM ALGORITMOS Marcos Marcelino Mazzucco 14 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Para iniciar nosso estudo sobre a solução de problemas científicos em computador é necessário estabelecer um novo modo de raciocinar Este modo deve ser baseado em etapas lógicas e devidamente encadeadas de forma a conduzir a uma solução viável ou seja na forma de algoritmos Nesta fase inicial apenas formalizaremos uma forma de pensar sem qualquer vínculo a máquinas programáveis Assim sendo definiremos os protótipos das soluções Os protótipos indicam de forma superficial porém clara o que deve ser feito para que um objetivo seja atingido De uma forma geral a solução de problemas segue as seguintes etapas Estudo do contexto do problema Compreensão Análise Simplificação Resumo do problema normalmente na forma de diagrama Objetivos Formulação científica do problema Equações Dados Regras fenomenológicas heurísticassenso comum Relações e relacionamentos Condições Solução Aplicação dos postulados formulados Análise dos resultados Significados dos resultados Violação de limites faixa de validade Resultados inesperados Resultados errôneos Conclusões Verificação dos objetivos Resumo dos resultados Frequentemente as etapas listadas devem ser sucessivamente repetidas para que uma solução seja obtida Observe que para um indivíduo que acompanha a solução de um problema forma passiva algumas etapas não são observadas É interessante pensar que em todos os Marcos Marcelino Mazzucco 15 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB problemas assumimos as formas ativas resolver e passiva aceitar a solução Considere por exemplo a determinação forma ativa do comprimento da hipotenusa de um triângulo Usamos o teorema de Pitágoras sem questionar a origem deste apenas aceitando a equação como verdadeira forma passiva Para o registro das etapas do desenvolvimento da solução de um problema apenas algumas partes são visíveis desde que não é prático representar todo o conhecimento universal que está envolvido Temos então a seguinte representação Estrutura algoritmo objetivo do algoritmo início registro entrada de informações formulação solução apresentação dos resultados saída fim Nota neste estudo os símbolos delimitadores e serão utilizados para representar de forma concisa e clara atos e ações que devem efetuados Marcos Marcelino Mazzucco 16 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 4 ALGORITMOS PARA PROGRAMAÇÃO EM COMPUTADOR Marcos Marcelino Mazzucco 17 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 41 CONHECER O COMPUTADOR Para definir tarefas para uma máquina é necessário conhecer as possibilidades e os limites desta Quando os primeiros computadores digitais programáveis foram projetados eram necessários conhecimentos de operações com números binários microeletrônica complexas cadeias lógicas etc para implementar programas para tarefas simples Assim a programação destes equipamentos estava restrita a um pequeno grupo de profissionais na sua maioria com formação em eletrônica A evolução da capacidade computacional permitiu que a forma de programação ou seja a maneira como os componentes internos de um computador são instruídos a realizar alguma tarefa evoluísse deixando de lado para a maioria dos programadores as instruções em microescala Desta forma é possível solicitar o armazenamento de um dado na memória de um computador sem o conhecimento de como uma memória funciona qual região da memória está disponível e por onde a informação deve trafegar para chegar até esta Porém a programação de qualquer máquina é limitada se não conhecermos suas possibilidades Para a estruturação de algoritmos para computadores não são necessários conhecimentos sofisticados da arquitetura de um computador mas é necessário que se conheça ao menos as formas como é possível interagir com a máquina Um computador dispõe de mecanismos de entrada e saída de dados armazenamento e processamento destes A entrada de dados ocorre através de aparatos como teclado mouse scanner joystick etc Para a saída de dados dispõese de monitor de vídeo impressora dispositivos de rede etc O armazenamento de dados pode ser efetuado através da memória volátil ou RAM Random Access Memory memória ROM Read Only Memory disco rígido HD Hard Disk pen drive etc O processamento dos dados é realizado na unidade central de processamento CPU Central Processing Unit ou mais popularmente processador Quando da escrita de um algoritmo são utilizados mecanismos de entrada e saída de dados e de armazenamento memória genéricos O processamento CPU será representado pelo encadeamento rigoroso de estruturas a serem definidas Marcos Marcelino Mazzucco 18 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 42 ALGORITMO PARA PROGRAMAÇÃO Definiremos a estrutura de um algoritmo para programação em computador após o refinamento com a disponibilidade de Estruturas de entrada e saída de dados para inserir e extrair informações Armazenamento de dados e tipos para manter e manipular informações Estruturas de processamento para dar fluxo à lógica Palavras reservadas palavras com uso restrito para estabelecer uma sintaxe compreensível e compartilhável Para padronizar e facilitar a compreensão da nomenclatura que será utilizada definiremos As palavras reservadas serão escritas em negrito preferencialmente ou sublinhadas quando da impossibilidade do uso do negrito A sintaxe das estruturas fará uso do delimitador que será substituído pela instrução ou conjunto de instruções a ser executada Serão adicionados 3 espaços alinhados à esquerda após o início e antes do fim de estruturas de teste condicional repetição e entre as partes de início e fim Somente os comentários delimitados por poderão conter caracteres acentuados as demais palavras não serão acentuadas Nas etapas iniciais de abordagem dos problemas protótipos poderão ser utilizados caracteres acentuados Para a estruturação de algoritmos não é necessária nenhuma linguagem de programação formal e nem ao menos computadores Usaremos uma linguagem de programação fictícia em língua portuguesa que corresponde ao que é conhecido como algoritmo em português estruturado Como os computadores reconhecem de forma nativa o ponto como separador decimal este também será utilizado aqui A linguagem de programação que mais se assemelha a escrita de algoritmos estruturados em inglês estruturado é a PASCAL Algumas representações utilizadas aqui estão baseadas nesta linguagem adaptada para língua portuguesa A sintaxe para a escrita de um algoritmo conterá o nome deste um breve comentário inciado com cerquilha que descreva seu objetivo as declarações necessárias e os pontos de início e finalização conforme o modelo abaixo e apresentado anteriormente Marcos Marcelino Mazzucco 19 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura algoritmo Nome do algoritmo comentário início instruções fim Os pontos de início e finalização do algoritmo devem ser marcados pelas instruções início e fim Nesta etapa algoritmos para programação em computador direcionaremos a escrita de algoritmos para programação que é diferente dos algoritmos genéricos para solução de problemas Para diferenciar estes níveis utilizaremos a palavra programa em vez de algoritmo tendo em mente que são partes de uma mesma solução Quando aqui estiver referido programa será entendido que o algoritmo para programação em computador está sendo pretendido Estrutura programa Nome do programa comentário início instruções fim Os delimitadores já utilizados anteriormente na etapa de programação devem ser substituídos pelas instruções que serão apresentadas e que efetivamente viabilizarão o proposto em um computador digital Marcos Marcelino Mazzucco 20 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 5 ESTRUTURAS PARA FLEXIBILIZAÇÃO DO PENSAMENTO EM ALGORITMOS Marcos Marcelino Mazzucco 21 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Considere a situação de determinar a área de um triângulo retângulo a partir de duas medidas dos comprimentos dos catetos ou da hipotenusa e um dos catetos e determinar a medida restante Após o cálculo arredondar todos os dados e resultados para uma casa decimal Podemos organizar as ideias para satisfazer esta necessidade na seguinte forma algoritmo calcular área e uma medida desconhecida início Registrar os comprimentos de duas medidas entre três CO CA H Determinar o comprimento da terceira medida pelo teorema de Pitágoras início se não é conhecida a hipotenusa calcular HCO 2CA 212 senão se não é conhecido o Cateto Oposto calcular CO H2CA 212 senão calcular CA H2CO 212 fim se fim Arredondar H CO CA para uma casa decimal Calcular a área pela equação A COCA2 Arredondar A para uma casa decimal Apresentar área calculada e medida restante com as unidades correspondentes fim Exemplo Para cumprir os objetivos cálculo da área e medida desconhecida a partir dos dois dados é necessário decidir qual forma da equação de Pitágoras deve ser utilizada A tomada de decisão está representada pelas sentenças se senão se e senão Adicionamos a sentença fim se para separar com facilidade diferentes tomadas de decisão ou outras operações em um algoritmo Estrutura se primeira condição então fazer primeiro conjunto de ações ou atos senão se segunda condição então fazer segundo conjunto de ações ou atos senão se terceira condição então fazer terceiro conjunto de ações ou atos senão fazer conjunto final de ações ou atos fim se Nota O número de sentenças senão se é variado porém apenas uma sentença senão que representa uma condição terminal se nenhuma das outras for aplicável Marcos Marcelino Mazzucco 22 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB pode ser utilizada As palavras então e fazer são opcionais pois apenas reforçam a ideia de tomada de decisão e resultado As palavras algoritmo início fim se senão se senão e fim se são estruturais para a formalização do raciocínio que se pretende resumir na forma de um algoritmo e são chamadas palavras reservadas Outras palavas reservadas serão adicionadas a este grupo Numa nova situação consideremos que são conhecidos os comprimentos dos catetos de três triângulos retângulos triângulo 1 triângulo 2 e triângulo 3 e se deseja determinar as áreas destes registrando guardando os valores calculados e apresentando os valores arredondados em duas casas decimais algoritmo calcular as áreas de três triângulos início Registrar os comprimentos dos catetos do triângulo 1 como CO e CA Calcular a área pela equação A COCA2 Arredondar A para uma casa decimal Apresentar a área calculada com a unidade correspondente Registrar os comprimentos dos catetos do triângulo 2 como CO e CA Calcular a área pela equação A COCA2 Arredondar A para uma casa decimal Apresentar a área calculada com a unidade correspondente Registrar os comprimentos dos catetos do triângulo 3 como CO e CA Calcular a área pela equação A COCA2 Arredondar A para uma casa decimal Apresentar a área calculada com a unidade correspondente fim Exemplo Observe que à medida que o número de triângulos se torna maior tornase inviável representar o procedimento apresentado na forma do algoritmo usado Porém nosso raciocínio pode ser expresso de forma mais compacta como Marcos Marcelino Mazzucco 23 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB algoritmo calcular as áreas de três triângulos início para os triângulos 1 2 e 3 fazer Registrar os comprimentos dos catetos triângulos como CO e CA Calcular a área pela equação A COCA2 Arredondar A para uma casa decimal Apresentar a área calculada com a unidade correspondente fim para fim Exemplo Neste exemplo foi utilizada uma representação simbólica de repetição As sentenças para e fim para representam a repetição sobre elementos enumerados ou se seja um conjunto finito de elementos dispostos de forma ordenada Podemos expressar a repetição também esperando que alguma condição seja atingida final para indicar o término das repetições as sentenças repetir ou fazer e até que representam este caso Ou ainda esperando que alguma condição se mantenha inicial e portanto a insatisfação deste requisito encerre o ciclo de repetição as sentenças enquanto ou fim enquanto representam este caso Estas três estruturas representam as estruturas de repetição que também utilizaremos em nossos raciocínios Estrutura para elementos enumerados fazer Conjunto de ações ou atos fim para repetir Conjunto de ações ou atos até que condição de encerramento fazer Conjunto de ações ou atos até que condição de encerramento enquanto condição de continuidade fazer Conjunto de ações ou atos fim enquanto Para a solução de problemas em máquinas programáveis estas estruturas são essenciais porém alguns acréscimos são necessários pois uma máquina não pode desdobrar uma ação ou consequência sem uma preparação prévia Porém nosso objetivo até aqui é preparar a forma de raciocínio para representar a solução de um problema ou seja o algoritmo Marcos Marcelino Mazzucco 24 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Vamos reforçar a técnica com mais exemplos Exemplo Soma de Números Escrever um algoritmo para calcular e apresentar a soma de um conjunto qualquer de números algoritmo soma de números início Solicitar a quantidade de números a somar e armazenar em N A soma será acumulada em S que inicialmente será zero para N números requeridos fazer Solicitar um número e armazenar em Z Somar o número recebido com S e acumular o novo valor em S S SZ fim para Apresentar a soma calculada guardada em S fim Exemplo Uma boa maneira de verificar se o algoritmo está correto é executar o teste de mesa Este teste consiste em numerar as linhas do algoritmo estipular valores de entrada para os quais a saída é conhecida e executar os passos descritos no algoritmo Para este exemplo temos 1 algoritmo soma de números 2 início 3 Solicitar a quantidade de números a somar e armazenar em N 4 A soma será acumulada em S que inicialmente será zero 5 para N elementos números fazer 6 Solicitar um número e armazenar em Z 7 Somar o número recebido com S e acumular o novo valor em S S SZ 8 fim para 9 Apresentar a soma calculada guardada em S 10 fim Exemplo Supondo 4 números 15 25 35 45 Sequência de execução e valores 1 2 3N4 4S0 5elemento 1 de 4 6Z15 7S01515 8 5elemento 2 de 4 6Z25 7S152540 8 5elemento 3 de 4 6Z35 7S403575 8 5elemento 4 de 4 6Z45 7S754512 8 5elemento 5 de 4 fim ciclo 9 10 Exemplo Equação do Segundo Grau Escrever um algoritmo para determinar as raízes de uma equação do segundo grau a partir dos coeficientes que forem fornecidos Dever ser indicado o número de raízes reais existentes e a existência de raízes complexas Marcos Marcelino Mazzucco 25 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 1 algoritmo equação segundo grau 2 início 3 Solicitar os coeficientes da equação ax2bxc e armazenar em a b e c 4 Calcular deltab24ac 5 se delta é negativo então 6 Apresentar a frase Para este caso somente existem raízes complexas 7 senão se delta é positivo então 8 Calcular x1bb24ac122a 9 Calcular x2bb24ac122a 10 Apresentar a frase Existem duas raízes e os valores de x1 e x2 11 senão 12 Calcular x1b2a 13 Apresentar a frase Somente existe uma raiz e o valor de x1 14 fim se 15 fim Exemplo O teste de mesa para a 2 b3 c1 fica 1 2 3a 2 b1 c0 4delta1 5 7 8x13324211222 05 9x23 324211222 1 10 1415 Nota Observe que na estrutura de tomada de decisão quando uma condição é verificada como verdadeira as demais condições não são testadas e o teste se encerra fim se Marcos Marcelino Mazzucco 26 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 6 ALGORITMO PARA PROGRAMAÇÃO EM COMPUTADOR Marcos Marcelino Mazzucco 27 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 61 ENTRADA E SAÍDA DE DADOS A solução da maioria dos problemas em computador requer que uma ou mais intervenções ocorram para que sejam fornecidas informações para o início ou continuidade da solução Da mesma forma é essencial que sejam visualizados os resultados A sintaxe para entrada de dados em nossa notação será Estrutura nome da variável que armazenará o dadoler nome da variável que armazenará o dadoentrar ler nome da variável que armazenará o dado Obsneste material a forma nome da variável que armazenará o dadoler será preferida A sintaxe para saída de dados será Estrutura escrever informação escrever informação NL escrever dado 1 dado 2 dado 3 dado n escrever dado 1 dado 2 dado 3 dado n NL Nota a instrução para saída de dados pode ser utilizada para várias informações escritas em uma mesma linha A instrução NL corresponde a indicação de que a próxima instrução escrita será em uma Nova Linha Caso contrário todos os dados serão escritos na mesma linha até o final desta 62 TIPOS BÁSICOS DE DADOS Os tipos são as formas de manusear e armazenar as informações mais simples a partir das quais podem ser obtidas outras formas São elas Numérica Números Inteiros Números reais ponto flutuante Literal Caracteres ou Cadeia de Caracteres texto Lógico verdadeiro ou falso Marcos Marcelino Mazzucco 28 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB O tipo de dado inteiro é caracterizado por números inteiros positivos ou negativos As linguagens de programação implementam este tipo de dado conforme especificação de um comitê internacional de normas porém a maioria delas oferece variantes do tipo inteiro para funções específicas O tipo de dado real é representado por quaisquer números positivos ou negativos Um número inteiro tipificado como real é representado em forma decimal 1 10 Este tipo de dados também é chamado de ponto flutuante desde que todos os números possuem uma parte decimal 120 Um número real pode ser convertido em um número inteiro através das operações de arredondamento e truncamento O truncamento consiste na eliminação da parte decimal de um número Definiremos as operações arredondarnúmero e truncarnúmero para esta conversão O tipo de dado texto é representado por cadeias caracteres como letras números símbolos etc Os valores deste tipo são apresentados sempre entre aspas Tipos caracteres são também chamados de string ou cadeia O tipo de dado lógico é aquele que representa dados que versam sobre a veracidade ou falsidade das informações São também conhecidos como tipos booleanos Existem linguagens de programação de computadores que exigem a especificação declaração dos tipos de variáveis a serem utilizadas enquanto outras realizam a tipificação dinamicamente atribuindolhes o tipo mais adequado Aqui será caracterizada a declaração formal das variáveis sendo que esta sempre será efetuada no início de cada algoritmo entre o nome do algoritmo e ponto de início do próprio A seção de declaração de variáveis será precedida da palavra variáveis que não poderá ser utilizada para outra finalidade sendo que o símbolo representará o operador de atribuição de tipo enquanto o símbolo representará o operador de atribuição de valor Para a declaração de uma variável será necessário atribuir um nome a esta O nome de uma variável sempre deverá ser iniciado por um caractere literal A Z a z ou poderá conter números 0 9 e e não poderá conter acentuação espaços em branco ponto vírgula parênteses colchetes chaves etc Algumas linguagens de programação fazem distinção para o nome de variáveis entre letras maiúsculas e Marcos Marcelino Mazzucco 29 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB minúsculas são ditas sensíveis ao caso em nossa notação não será feita esta distinção porém adotaremos preferencialmente a escrita em letras minúsculas A sintaxe para a declaração de variáveis obedece ao seguinte formato Estrutura especificação declaração dos tipos das variáveis variáveis variável tipo variável 1 variável 2 tipo A sintaxe para a atribuição de um valor a uma variável obedece ao seguinte formato Estrutura atribuição de valor a uma variável variável valor Nota o símbolo será utilizado para atribuição de valor e o de igual será utilizado para comparar valores Nos exemplos a seguir estão ilustradas as estruturas de entrada e saída de dados e os tipos numérico e texto programa realparainteiro converter um número real para inteiro variáveis I1 I2inteiro Rreal início escrever Informe um número do tipo real Rler I1arredondarR I2truncarR escrever O valor de R arredondado é I1 NL escrever O valor de R truncado é I2 NL fim Exemplo programa saudacao variáveis x real y inteiro z real nome texto aberto lógico a1 inteiro seunome seunome texto início seunomeler escrever Olá seunome NL Bom dia fim Exemplo Marcos Marcelino Mazzucco 30 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB programa algumasvariaveis variáveis x z real y inteiro nome texto aberto lógico A1 inteiro seunome seunome texto início x25 y111 z1110 nomeMarcos abertoverdadeiro A10 seunomeMarina seunomeIsabela zy fim Exemplo As variáveis também podem receber os resultados de operações entre tipos desde que estas possuam o mesmo tipo daquelas Assim uma variável do tipo inteiro não pode receber os valores 10 e 1 desde que estes valores são dos tipos real e texto respectivamente Uma variável do tipo real pode receber um valor do tipo inteiro pois estes tipos são compatíveis contudo o valor recebido deixará de ser representado com um número inteiro Por exemplo o número 1 inteiro quando atribuído a uma variável do tipo real será representado como 1000 o número de casas decimais é definido como a precisão numérica da representação Algumas vezes são manipuladas informações que não são variáveis mas sim constantes e portanto não devem ser modificadas no programa A declaração de constantes é semelhante à das variáveis porém sem a necessidade de definir um tipo desde que o valor será atribuído apenas uma vez e portanto pode ser identificado com segurança A seção de declaração de constantes posicionada entre o nome do programa e ponto de início do próprio será precedida da palavra constantes que não poderá ser utilizada para outra finalidade sendo que o símbolo representará o operador de atribuição de valor a uma constante e somente poderá ser utilizado uma vez na declaração A sintaxe para a declaração de constantes é Marcos Marcelino Mazzucco 31 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura constantes nome da constante valor Nota nem todas as linguagens de programação utilizam o conceito de constantes programa algumasconstantes variáveis x real u texto constantes PI31416 R0082 dois2 diasnoano365 euMarcos Aa doismaior3falso agoraverdadeiro início xdoisR ueu fim Exemplo No exemplo anterior PI e R são constantes com o tipo real dois e diasnoano são do tipo inteiro eu e A são do tipo texto e doismaior3 e agora são do tipo lógico As regras para a definição de nomes para constantes é a mesma adotada para as variáveis O algoritmo com o uso de constantes instrui o programador sobre a intenção do algoritmo conforme o exemplo a seguir programa calcularN variáveis pressao volume T Nreal constantes R0082 atmLKmol início escrever Informar a pressão atm pressaoler escrever Informar o volume L volume ler escrever Informar a temperatura C T ler NpressaovolumeTR escrever O número de mols do gás é N NL fim Exemplo Marcos Marcelino Mazzucco 32 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 63 OPERADORES MATEMÁTICOS As operações matemáticas envolvem sempre variáveis de tipos numéricos real e inteiro Na programação de computadores mantémse a ordem matemática para as operações porém sendo permito o uso apenas de parênteses para definir a precedência em operações complexas Os seguintes operadores matemáticos serão definidos nesta abordagem Operador Significado Adição Subtração Multiplicação Divisão Potenciação programa resolveequacao Resolver a equação y4x332x22x1 variáveis yreal xreal início escrever indicar o valor de x xler y4x3322x15x22x1216 escrever A solução da equação é y y NL fim Exemplo Nota A equação y4x3322x15x22x1216 também pode ser escrita como y4x3322x15x22x1216 pois a operação de potenciação possui prioridade sobre a multiplicação assim 4x3é o mesmo que 4x3 Porém no caso da operação x12 se forem removidos os parênteses a operação realizada será x12 pois a potenciação precede a divisão 64 DESVIO CONDICIONAL Conforme já vimos é a estrutura que permite a tomada de decisões a partir da avaliação de condições premissas Os desvios condicionais podem ser classificados em simples e compostos 641 DESVIO CONDICIONAL SIMPLES Acontece quando a avaliação da condição direciona apenas a uma decisão Conjunto de Instruções Marcos Marcelino Mazzucco 33 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura se condição 1 então Conjunto de Instruções 1 fim se se condição 1 Conjunto de Instruções 1 fim se Nota daremos preferência à forma sem a palavra então 642 DESVIO CONDICIONAL COMPOSTO Acontece quando a avaliação da condição direciona mais de uma decisão ao menos duas Estrutura se condição 1 então Conjunto de Instruções 1 senão Conjunto de Instruções 2 fim se se condição 1 Conjunto de Instruções 1 senão Conjunto de Instruções 2 fim se Nota daremos preferência à forma sem a palavra então O desvio condicional composto também pode ser escrito com múltiplas verificações lógicas Estrutura se condição 1 então Conjunto de Instruções 1 senão se condição 2 então Conjunto de Instruções 2 senão se condição 3 então Conjunto de Instruções 3 senão Conjunto de Instruções final fim se se condição 1 Conjunto de Instruções 1 senão se condição 2 Conjunto de Instruções 2 senão se condição 3 Conjunto de Instruções 3 senão Conjunto de Instruções final fim se Marcos Marcelino Mazzucco 34 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 643 ANINHAMENTO DE ESTRUTURAS CONDICIONAIS Os desvios condicionais podem ser encadeados ou aninhados para formar estruturas de tomadas de decisões mais complexas por exemplo se condição 1 então se condição 2 então Conjunto de Instruções 1 senão Conjunto de Instruções 2 fim se senão Conjunto de Instruções 3 fim se Exemplo 65 OPERADORES LÓGICOS E RELACIONAIS Os desvios condicionais estão sujeitos a verificações através dos operadores relacionais e podem estar sujeitos a múltiplas condições conectadas pelos operadores lógicos Operadores relacionais Igual a Diferente de Maior que Menor que Maior ou Igual a Menor ou igual a Operadores lógicos e E conjunção ou Ou disjunção não Negação Condição 1 Temperatura25 C Condição 2 Pressao1 Pressão em atm Condição 3 Volume224 L Condição 4 Forca1 Força em N Condição 5 CorPreto Exemplo O operador lógico e é utilizado quando se deseja que a conclusão seja obtida apenas se as todas as proposições apresentadas premissas sejam verdadeiras Marcos Marcelino Mazzucco 35 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura se condição 1 e condição 2 e e condição n então Conjunto de Instruções 1 senão Conjunto de Instruções 2 fim se se condição 1 e condição 2 e e condição n Conjunto de Instruções 1 senão Conjunto de Instruções 2 fim se Nota daremos preferência à forma sem a palavra então se Temperatura25 e Pressao1 escrever Condição ambiente NL senão se Temperatura0 e Pressao1 escrever CNTP NL senão escrever Condição desconhecida NL fim se fim se Exemplo Tabela verdade para o operador lógico e Condição 1 Condição 2 Resultado falsa falsa Falso verdadeira falsa Falso falsa verdadeira Falso verdadeira verdadeira Verdadeiro O operador lógico ou é utilizado quando se deseja que a conclusão seja obtida se alguma das proposições apresentadas premissas seja verdadeira Estrutura se condição 1 ou condição 2 ou ou condição n então Conjunto de Instruções 1 senão Conjunto de Instruções 2 fim se Tabela verdade para o operador lógico ou Condição 1 Condição 2 Resultado falsa falsa Falso verdadeira falsa Verdadeiro falsa verdadeira Verdadeiro verdadeira verdadeira Verdadeiro Marcos Marcelino Mazzucco 36 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB se Temperatura25 ou Temperatura0 se Pressao1 escrever Condição ambiente ou CNTP NL senão escrever Condição desconhecida NL fim se fim se Exemplo O operador lógico não é utilizado quando se deseja verificar se uma condição não é verdadeira Estrutura se não condição 1 Conjunto de Instruções 1 senão Conjunto de Instruções 2 fim se Observe que não condição 1 é igual a falso se condição 1 é verdadeira e por outro lado é igual a verdadeiro se condição 1 for falsa se não Pressao1 escrever Condição desconhecida NL fim se Exemplo Tabela verdade para o operador lógico não Condição Resultado falsa verdadeiro verdadeira falso O operador de negação não quando combinado com o operador de comparação de igualdade também é usado como operador de comparação por diferença já identificado como Para isto basta usar não por exemplo se Pressao não1 escrever A pressão é diferente de 1 NL fim se Exemplo 66 ESTRUTURAS DE REPETIÇÃO Marcos Marcelino Mazzucco 37 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estruturas que permitem que um certo conjunto de instruções seja executado sucessivas vezes ciclos sem a necessidade de repetir a escrita das instruções Também conhecidos como Laços de repetição São possíveis três estruturas de repetição Com teste lógico de continuidade no início da estrutura Com teste lógico de continuidade no final da estrutura Com teste lógico de continuidade por contagem de ciclo Uma estrutura de repetição cujo teste de continuidade do ciclo de repetição é efetuado no início da estrutura possui a seguinte sintaxe Estrutura enquanto condição fazer Conjunto de Instruções fim enquanto enquanto condição Conjunto de Instruções fim enquanto Nota A forma sem a palavra fazer será preferida neste material Uma estrutura de repetição cujo teste de continuidade do ciclo de repetição é efetuado no final da desta possui a seguinte sintaxe Estrutura repetir Conjunto de Instruções até que condição fazer Conjunto de Instruções até que condição Na estrutura enquantofim enquanto se a condição de continuidade não é satisfeita no início desta nenhuma instrução contida na estrutura será executada Na estrutura repitaaté que se a condição de continuidade não é satisfeita no início desta o conjunto de instruções contidas na estrutura será executada uma vez desde que o teste é realizado no final da estrutura Uma estrutura de repetição cujo teste de continuidade do ciclo de repetição é realizado por contadores de ciclo possui a seguinte sintaxe Marcos Marcelino Mazzucco 38 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura para variável de contagem de valor inicial até valor final fazer Conjunto de Instruções fim para para contador de valor inicial até valor final passo valor do passo fazer Conjunto de Instruções fim para para contador de valor inicial até valor final Conjunto de Instruções fim para para contador valor inicial valor final Conjunto de Instruções fim para para contador valor inicial valor do passo valor final Conjunto de Instruções fim para Nota Quando for omitido o valor do incremento passo estará implícito o valor 1 Os valores inicial final e do passo tem por objetivo selecionar os elementos no intervalo requerido A variável de contagem ou contador deve ser representada por um número inteiro apesar de algumas linguagens de programação suportarem valores fracionários A forma sem a palavra fazer será preferida neste material As estruturas de repetição podem ser encadeadas de diversas formas de acordo com a necessidade As duas primeiras estruturas permitem construções mais flexíveis enquanto a última é indicada quando o número de ciclos desejado é conhecido sendo que o contador é representado por um número inteiro É possível encerrar um ciclo de repetição antes que a condição de encerramento seja atingida A palavra QUEBRACICLO representará a finalização forçada de um ciclo e será válida em qualquer estrutura de repetição Observe o fluxograma a seguir comparandoo com o penúltimo Neste caso quando uma certa condição de quebra for atingida o ciclo será encerrado forçadamente Nas três sequências a seguir um ciclo infinito é utilizado para estabelecer ciclos de repetição com teste de continuidade no início da estrutura no fim da estrutura e com contagem de ciclo Marcos Marcelino Mazzucco 39 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura enquanto 11 fazer se Condição então Teste de quebra antes das instruções QUEBRACICLO fim se Conjunto de Instruções fim enquanto Estrutura enquanto 11 fazer Conjunto de Instruções se Condição então Teste de quebra depois das instruções QUEBRACICLO fim se fim enquanto Estrutura Contadorvalor inicial Limitevalor final enquanto 11 fazer Conjunto de Instruções se ContadorLimite então Teste de quebra por contagem QUEBRACICLO senão ContadorContador1 fim se fim enquanto Veja o exemplo a seguir para uma aplicação dos conceitos estabelecidos até este ponto programa fatorial variáveis Ninteiro iinteiro Rreal início estacertofalso fazer escreverCalcular o fatorial do Número Rler se não R truncarR escreverEste número não é inteiro NL senão se R0 escreverO número deve ser positivo NL senão NtruncarR estacertoverdadeiro fim se até que estacertoverdadeiro f1 para i de N até 1 passo 1 ffi fim para fim Exemplo Marcos Marcelino Mazzucco 40 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 7 PROGRAMANDO COM ESTRUTURAS DE TOMADA DE DECISÃO E REPETIÇÃO Marcos Marcelino Mazzucco 41 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 71 PROGRAMANDO COM MATLABOCTAVE Inicialmente definiremos a sintaxe para escrita de programas em Octave com base nas estruturas essenciais de um algoritmo Estruturas de entrada e saída de dados Formas de armazenamento de dados tipos Estruturas de processamento Um programa codificado em Octave ou Matlab é representado por um programa principal e blocos de inclusão automática funções O programa principal é o responsável por iniciar a execução do programa e por finalizálo mesmo que de forma oculta Os blocos de inclusão existem para facilitar a legibilidade e fornecer modularização A sintaxe para a escrita de um programa conterá um comentário precedido pelos símbolos ou indicador do objetivo do programa A tipificação das variáveis é dinâmica ou seja não são necessárias declarações de tipos de dados Sugerese que sejam incluídos as marcas de início e fim para fins de organização do programa Estrutura objetivo do programa clear subrotinas necessárias e variáveis globais inicio instruções fim O Editor mEd inicia um novo arquivo com a seguinte estrutura estrutura didática com vistas a organizar a codificação Estrutura program 16032020quartafeira1907 Autor Objetivo clear Variáveis var global Programa principal begin end As instruções program begin end são adicionadas para estabelecer um nível mínimo de organização e não são palavas reservadas do Octave Entre as instruções program e begin ou unit e begin devem ser escritas as variáveis Marcos Marcelino Mazzucco 42 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB globais e as subrotinas que serão utilizadas Entre as instruções begin e end deve ser escrito o corpo principal instruções do programa A instrução clear somente deve ser utilizada no início no programa principal program Após cada instrução o interpretador exibe o resultado da operação exceto se a instrução for encerrada com um ponto e vírgula Para aplicar uma instrução mais longa que a linha de comando pode ser utilizado o símbolo reticências e continuada a instrução na linha seguinte Para escrever várias instruções em uma mesma linha podem ser utilizados os caracteres de terminação e A vírgula ao final de uma linha instrui o interpretador a exibir o resultado da operação e possibilita que uma nova instrução seja acrescida na mesma linha de edição Com Matlab não é possível escrever as subrotinas no mesmo corpo arquivo do programa principal Isto deve ser realizado em um arquivo separado sendo que cada arquivo deve conter uma única subrotina apenas as instruções que fazem parte do conteúdo da subrotina são aceitas em Matlab 72 ENTRADA E SAÍDA DE DADOS Tanto Matlab como Octave fornecem suporte aos dispositivos de entradasaída típicos e ainda arquivos de dados porém o acesso a vários dispositivos pode ser adicionado através de bibliotecas definidas em outras linguagens A sintaxe para entrada de dados a partir do teclado é Estrutura variável input questão variável input variável input questãos Nota o parâmetro s indica que o valor deve ser atribuído sem ser interpretado como um texto por exemplo caso contrário MatlabOctave tentará resolver o que for entrado É possível gerar um menu numerado resultado N da opção de opções através da instrução menu Estrutura variável menu títuloopção 1opção 2opção n Marcos Marcelino Mazzucco 43 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB A sintaxe para saída de dados será Estrutura disp dado 1 puts dado 1 printffrase com formatação dado1 dado 2dado n A instrução disp sempre gera uma nova linha ao ser executada A instrução de Octave puts não gera uma nova linha ao ser executada Em muitos casos é requerido que várias informações sejam escritas em uma mesma linha após várias intervenções no dispositivo de saída Isto é possível através da instrução printf A instrução printf pode manter a posição de escrita na linha corrente ou não de acordo com a formatação da saída Uma saudação printfOlá printf mundo Cclock diaC3 mesC2 ano C1 printfHoje é o dia d de d de d Tenha um bom dia diamesano Exemplo Nota d indica a posição onde os parâmetros dia mes ano devem ser inseridos A função clock retorna um vetor com dataaaaa dd mm e hora hh mm ss completas O Programa anterior pode ser escrito utilizando estrutura didática Uma saudação program saudacao clear begin printfOlá printf mundo Cclock diaC3 mesC2 ano C1 printfHoje é o dia d de d de d Tenha um bom dia diamesano end Exemplo O indicadores de formatação são d notação decimal s string o notação octal Marcos Marcelino Mazzucco 44 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB i notação decimal inteira u notação decimal inteira positiva x notação hexadecimal f número real e número real com notação exponencial g f ou e de acordo com a conveniência símbolo avançar linha Continuar a escrita na linha seguinte A função sprintf possui a mesma sintaxe de printf gerando um texto com a formatação requerida porém sem apresentálo no dispositivo de saída 73 TIPOS BÁSICOS DE DADOS Octave implementa dois tipos de dados essenciais para problemas matemáticos Tipo Significado Faixa Dígitos significativos complex Números imaginários 5 x 10324 17 x 10308 16 scalar números reais 5 x 10324 17 x 10308 16 Obs Octave implementa os tipos de dado escalar e escalar complexo para representações numéricas incluindo entre estes números inteiros e fracionários Os tipos literal e lógico disponíveis são Tipo Significado Faixa String caracteres 0 caracteres Boolean lógico true verdadeiro ou false falso Octave é uma linguagem dinamicamente tipificada A identificação do tipo de variável ocorre através do valor atribuído a esta portanto é imprescindível inicializála O operador de atribuição de valor é representado pelo símbolo É conveniente lembrar que o nome de uma variável sempre deverá ser iniciado por um caractere literal ou nunca um número e poderá conter caracteres como letras A Z a z números 0 9 e o caractere e não poderá conter espaços em branco ponto vírgula parênteses colchetes chaves acentuação etc Nota São distintas para o nome de variáveis letras maiúsculas e minúsculas sendo que no máximo 30 19 para Matlab caracteres podem ser utilizados Os nomes de variáveis e quaisquer identificadores devem ser diferentes do nome do arquivo que os contém exceto para arquivos de função Marcos Marcelino Mazzucco 45 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB A sintaxe para a atribuição de um valor a uma variável obedece ao seguinte formato Estrutura variável valor Ex Especificação de variáveisAtribuição de valores x10 y24i nomeMarina Nome Isabela simtrue naofalse Exemplo Nota variáveis do tipo string texto possuem o valor representado entre aspas simples ou duplas O separador decimal que deve ser utilizado é o ponto Em Matlab o tipo string deve estar delimitado apenas por aspas simples As variáveis também podem receber os resultados de operações entre tipos diferentes aparentemente incompatíveis tais como números e textos desde que sejam compatíveis caso contrário Matlab ou Octave tentará adequar o tipo de dado a situação Portanto é requerido um cuidado especial para que um resultado indesejado não seja obtido O ambiente de trabalho do editor mEd fornece várias funcionalidades como complementação de códigoCtrlJ representação gráfica dos programas trechos de programas e comandos nas abas no topo da janela de edição Estas funcionalidades se mostram muito úteis durante o desenvolvimento de programas Uma funcionalidade muito útil para a documentação de código está no menu editar onde é possível copiar o texto formatado ou seja copiar para a área de transferência o texto na forma em que é exibido no editor Na edição merecem destaque a indentação de código em bloco selecione o texto e use a tecla TAB e para remover a indentação use CtrlShiftU e o comentário de texto em bloco selecione o texto e use CtrlShiftC ou CtrlShiftD ou o menu do botão direito do mouse no editor Usaremos neste material para organização uma seção de definição de tipos onde primeiro qualificaremos os tipos e depois acontecerá a tipificação como no exemplo a seguir Marcos Marcelino Mazzucco 46 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB program algumasvariaveis clear all uses STRING ARRAY REAL00 BOOLEANfalse INTEGERuint320 var x zREAL y A1INTEGER nomeSTRING seunomeseunomeSTRING abertoBOOLEAN begin x y z nome aberto A1 seunome seunome exibir conteúdo das variáveis x25 y111 z1110 nomeMarcos abertotrue A10 seunomeMarina seunomeIsabela zy x y z nome aberto A1 seunome seunome exibir conteúdo das variáveis end Exemplo A figura a seguir apresentam GNU Octave o programa anterior 731 DADOS TIPO DOUBLE REAL As funções roundvalor e fixvalor realizam o arredondamento e o truncamento respectivamente de um número Marcos Marcelino Mazzucco 47 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB A saída de dados numéricos pode ser formatada através da instrução format com os parâmetros long long e short short e etc por ex format long Para converter dados do tipo real para o tipo texto podese utilizar a instrução num2strvalor e para dados tipo texto em real está disponível a instrução str2numvalor 732 DADOS TIPO STRING TEXTO Como em OctaveMatlab uma cadeia de caracteres string é representada como um vetor de caracteres situações diferentes de outras linguagens de programação podem ocorrer As comparações entre cadeias de texto são realizadas elemento a elemento Por exemplo a instrução marMaR resulta em ans 0 1 0 pois mM 0 aa 1 e rR 0 A função all resulta em 1 verdadeiro se todos os elementos de um vetor forem iguais a 1 Desta forma se escrevermos allmarMaR o resultado será zero e allmarmar resultará em 1 Este tipo de comparação somente pode ser efetuado sobre cadeias de caracteres de mesmo comprimento caso contrário um erro será gerado Para comparar o conteúdo completo de duas cadeias de caracteres quaisquer a função strcmpstr1str2 pode ser utilizada A figura a seguir mostra a aplicação da operação de igualdade com GNU Octave para as situações descritas Marcos Marcelino Mazzucco 48 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Para determinar quantos elementos possui uma cadeia de caracteres podese utilizar a instrução lengthtexto Por exemplo lengthmar resulta em 3 Para identificar se um caractere corresponde a um número está disponível a instrução isdigittexto Por exemplo isdigitA resulta em falso 0 e isdigit2 resulta em verdadeiro 1 e isdigit2mar3 resulta em 1 0 0 0 1 Para identificar se um caractere corresponde a uma letra está disponível a instrução islettertexto ou isalphatexto Por exemplo isletterA resulta em verdadeiro 1 e isletter2 resulta em falso 0 e isletter2mar3 resulta em 0 1 1 1 0 0 Letras maiúsculas podem ser identificadas através da instrução isuppertexto A instrução islowertexto identifica letras minúsculas A subrotina isstrvariável identifica uma string Para remover os espaços em branco no início de uma cadeia de caracteres pode se utilizar a instrução deblanktexto Por exemplo deblank abc resulta em abc Para converter dados tipo real em texto e viceversa estão disponíveis as instruções num2strvalor e str2numvalor Para converter um texto em comandos do Octave pode ser utilizada a instrução evaltexto Por exemplo evalx1 logx resulta em zero pois log10 Para remover os espaços em branco de um texto use a strreptexto 733 CONSTANTES Matlab e Octave não oferecem suporte para o uso de constantes Porém predefinem algumas variáveis pi e eps i j realmax realmin ans inf NaN que devem ser tratadas como constantes e portanto devem ter seu uso restrito 74 OPERADORES MATEMÁTICOS Marcos Marcelino Mazzucco 49 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB As operações matemáticas envolvem variáveis de tipos numéricos que sejam reais inteiros ou complexos É possível aplicar operações matemáticas a textos porém estes serão convertidos em valores numéricos ASCII Os seguintes operadores matemáticos são predefinidos Operador Significado Adição de escalares Subtração de escalares Multiplicação de escalares Divisão de escalares Potenciação de escalares Potenciação de matrizes Potenciação de matrizestermo a termo Multiplicação de matrizes Multiplicação de matrizes termo a termo Divisão de matrizes Divisão de matrizes termo a termo Divisão de matrizes a esquerda Transposta de uma matriz Transposta não conjugada de uma matriz No exemplo que segue é demostrada a precedência dos operadores matemáticos program operadores Resolver a equação y4x3322x15x22x1216 clear uses REAL00 var x yREAL begin clc xinputindicar o valor de x y4x3322x15x22x1216 printfA solução da equação é yf y end Exemplo 75 DESVIO CONDICIONAL Em Matlab as estruturas de tomadas de decisões simples e compostas estão implementadas de forma que toda estrutura é iniciada com a palavra if e encerrada com a palavra end Em Octave o encerramento pode ser realizado também por endif 751 DESVIO CONDICIONAL SIMPLES As seguintes sintaxes são válidas Marcos Marcelino Mazzucco 50 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura if condição 1 Conjunto de Instruções 1 end if condição 1 Conjunto de Instruções 1 endif Nota a segunda forma não pode ser utilizada com Matlab 752 DESVIO CONDICIONAL COMPOSTO O desvio condicional composto acontece quando a avaliação da condição direciona para mais de uma decisão ao menos duas Estrutura if condição 1 Conjunto de Instruções 1 elseif condição 2 Conjunto de Instruções 2 else Conjunto de Instruções 3 end if condição 1 Conjunto de Instruções 1 elseif condição 2 Conjunto de Instruções 2 else Conjunto de Instruções 3 endif Nota a segunda forma não pode ser utilizada com Matlab O uso do caractere de terminação de linha só ocorre no encerramento da estrutura condicional Nesta estrutura if elseif else end e endif são palavras reservadas 753 ANINHAMENTO DE ESTRUTURAS CONDICIONAIS Os desvios condicionais podem ser encadeados ou aninhados para formar estruturas de tomadas de decisões mais complexas Estrutura if condição 1 if condição 2 Conjunto de Instruções 1 else Conjunto de Instruções 2 endif else Conjunto de Instruções 3 endif Marcos Marcelino Mazzucco 51 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 76 OPERADORES LÓGICOS E RELACIONAIS Os operadores relacionais implementados em Matlab e GNU Octave correspondem aos utilizados nos algoritmos porém o operador de comparação de igualdade passa a ser a dupla igualdade A comparação por desigualdade pode ser realizada pelo operador desde que a exclamação significa negação Operadores relacionais Igual a Diferente de Maior que Menor que Maior ou Igual a Menor ou igual a Os operadores lógicos são implementados na forma dos símbolos e Operadores lógicos E conjunção OU disjunção NÃO negação Ex condições ou proposições lógicas Condição 1 Temperatura25 C Condição 2 Pressao1 atm Condição 3 Volume224 L Condição 4 Forca1 N Condição 5 CorPreto Exemplo O operador lógico é utilizado quando se deseja que a conclusão seja executada apenas se todas as proposições apresentadas premissas forem verdadeiras Estrutura if condição 1 condição 2 condição n Conjunto de Instruções 1 else Conjunto de Instruções 2 endif Marcos Marcelino Mazzucco 52 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Temperatura0C Pressao1atm if Temperatura25 Pressao1 dispCondição ambiente else if Temperatura0 Pressao1 dispCNTP else dispCondição desconhecida endif endif Exemplo O operador lógico é utilizado quando se deseja que a conclusão seja executada se alguma das proposições apresentadas premissas for verdadeira Estrutura if condição 1 I condição 2 II II condição n Conjunto de Instruções 1 else Conjunto de Instruções 2 endif Temperatura25 Pressao1 if Temperatura25 temperatura0 if Pressao1 dispCondição ambiente ou CNTP else dispCondição desconhecida endif endif Exemplo O operador lógico é utilizado quando se deseja verificar se uma condição não é verdadeira Estrutura if condição 1 Conjunto de Instruções 1 else Conjunto de Instruções 2 endif Pressao2 if Pressao1 dispA pressão não é 1 endif Exemplo Nota observe que condição 1 é igual a false se condição 1 é true e é igual a true se condição 1 é false Marcos Marcelino Mazzucco 53 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 77 ESTRUTURAS DE REPETIÇÃO Matlab implementa as estruturas de repetição com teste lógico de continuidade no início da estrutura e com contadores de ciclo Octave implementa também uma estrutura de repetição com teste lógico de continuidade no final da estrutura Uma estrutura de repetição cujo teste de continuidade do ciclo de repetição é efetuado no início da estrutura possui a seguinte sintaxe Estrutura while condição 1 Conjunto de Instruções end while condição 1 Conjunto de Instruções endwhile Uma estrutura de repetição cujo teste de continuidade do ciclo de repetição é realizado por contadores de ciclo possui a seguinte sintaxe Estrutura for contador valor inicial passo valor final Conjunto de Instruções end for contador valor inicial valor final Conjunto de Instruções end for contador valor inicial passo valor final Conjunto de Instruções endfor Nota Matlab define incrementos inteiros positivos ou negativos em estruturas de repetição com contadores de ciclo É interessante utilizar as instruções de encerramento de estruturas personalizadas endfor endwhile por questões de legibilidade não disponível em Matlab A estrutura de repetição com teste lógico de continuidade no fim da estrutura implementada em Octave possui a seguinte sintaxe Estrutura do instruções until condição Marcos Marcelino Mazzucco 54 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB A instrução break força o encerramento das estruturas de repetição enquanto a instrução continue força o avanço para o próximo ciclo Estas instruções são válidas apara qualquer uma das formas das estruturas de repetição Nestas estruturas for endfor do until while endwhile return continue e break são palavras reservadas 78 ESTRUTURA DE SELEÇÃO SWITCH GNU Octave introduz a estrutura de seleção de forma semelhante às linguagens de programação de propósito geral A sintaxe da estrutura é a seguinte Estrutura switch expressão case rótulo Conjunto de Instruções case rótulo Conjunto de Instruções otherwise Conjunto de Instruções endswitch Nesta estrutura switch case otherwise e endswitch são palavras reservadas No exemplo a seguir uma calculadora simples é implementada com a instrução switch O mesmo resultado pode ser obtido com desvio condicional composto Marcos Marcelino Mazzucco 55 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB program calculadora clear begin clc k 0 while k5 clc dispCALCULADORA DE DOIS NÚMEROS k menuSelecione uma operação matemática Soma Subt Multip Div FIM printf switch k case 1 sda soma case 2 sda subtração case 3 sdo produto case 4 sda divisão case 5 clc break endswitch clc dispCALCULADORA DE DOIS NÚMEROS printf printfCálculo s de dois números s if k5 n1inputPrimeiro número n2inputSegundo número endif printf switch k case 1 rn1n2 case 2 rn1n2 case 3 rn1n2 case 4 rn1n2 endswitch printfO cálculo s g e g é gsn1n2r input endwhile end Exemplo Marcos Marcelino Mazzucco 56 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 8 REPRESENTAÇÃO GRÁFICA DE UM ALGORITMO Marcos Marcelino Mazzucco 57 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB A visualização gráfica de um algoritmo pode auxiliar muito a compreensão do fluxo das informações e cálculos Além disso os fluxogramas são excelentes ferramentas para documentação de algoritmos A representação gráfica de algoritmos pode ser realizada na forma de fluxogramas com base na seguinte simbologia Símbolo Descrição Terminal Símbolo utilizado para representar o início ou fim de um algoritmo contendo as palavras início e fim Processo Símbolo utilizado para indicar processamentos cálculos atribuição de valor operações matemáticas ou lógicas etc Entrada e Saída de Dados Símbolo utilizado para representar entrada dados recebidos ou saída dados apresentados de dados de maneira genérica Devese informar se é realizada entrada ou saída de dados Decisão Símbolo utilizado para representar tomadas de decisão possibilitando desvios no fluxo do algoritmo Conector Símbolo utilizado para unir ou particionar um diagrama Quando um diagrama é particionado é necessário indicar com uma letra ou número no interior do conector o particionamento Conector de Página Símbolo utilizado para especificar a conexão entre páginas continuação em um fluxograma Fluxo de Dados Símbolo utilizado para representar o fluxo de dados em um fluxograma EXEMPLO FLUXOGRAMA PARA SOMA DE NÚMEROS Fazer o fluxograma para o algoritmo mostrado no exemplo soma de números Marcos Marcelino Mazzucco 58 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB soma de números início Saída apresentar a frase Quantidade de números a somar Entradaarmazenar o valor recebido N último elemento já foi somado Saída Qual o número a somar Entrada Z SSZ Sim Não fim S0 Saída A soma dos N números é S Neste fluxograma foram utilizados quatro elementos da simbologia de fluxogramas Merece especial destaque o símbolo de decisão que foi utilizado para estabelecer um ciclo observe as setas destacadas representando as sentenças parafim para Desta forma o ciclo somente será encerrado após o último elemento ser apresentado Observe também que as frases foram representadas entre aspas Qual o número a somar por exemplo EXEMPLO FLUXOGRAMA PARA EQUAÇÃO DO SEGUNDO GRAU Fazer o fluxograma para o algoritmo mostrado no exemplo equação do segundo grau Marcos Marcelino Mazzucco 59 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB equação segundo grau início Saída apresentar a frase Coeficientes da equação ax2bxc0 Saída Coeficiente a Entrada a Saída Coeficiente b Entrada b Saída Coeficiente c Entrada c delta é negativo Sim Não fim deltab24ac Saída Para este caso somente existem raízes complexas delta é positivo x1bb24ac122a x2bb24ac122a Saída Existem duas raízes reais x1 x2 x1b2a Saída Somente existe uma raiz x1 Sim Não Neste fluxograma os mesmos quatro elementos do fluxograma anterior foram utilizados O símbolo de decisão foi utilizado para estabelecer uma sequência de tomada de decisão sesenão sesenãofim se Observe que se delta não é positivo e nem negativo somente pode ser zero e portanto o vértice inferior Não do segundo elemento de decisão representa o que aqui é denominado condição terminal final EXEMPLO FLUXOGRAMA CONTAGEM PEÇAS Um depósito possui um estoque de parafusos porcas e arruelas e outras peças misturados Para cada parafuso são necessárias duas arruelas e uma porca Fazer um Marcos Marcelino Mazzucco 60 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB fluxograma para contar cada item indicar quantos conjuntos 1 porca 1 parafuso 2 arruelas existem e o total de peças contagem de peças início fim Saída O número de parafusos é Par O número de porcas é Por O número de arruelas é Arr existem peças no estoque Pegar uma peça A peça é um parafuso Par0 Por0 Arr0 Outros0 ParPar1 A peça é uma porca PorPor1 A peça é uma arruela ArrArr1 OutrosOutros1 Sim Não Sim Não Sim Não Sim Não Saída O número total de peças é Total Total ParPorArrOutros Saída O número de conjuntos parafuso porca 2 arruelas é M Determinar o menor valor mínimo entre Par Por e Arr2 e armazenar a resposta em M Truncar eliminar as casas decimais de M e armazenar a resposta novamente em M Observe neste exemplo que o primeiro elemento de decisão estabelece a condição de terminação de um ciclo de repetição enquanto existirem peças o ciclo se mantém Quando as peças se esgotarem encerrase o ciclo Está configurado um ciclo de Marcos Marcelino Mazzucco 61 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB repetição na forma enquantofim enquanto Os quatro demais elementos de decisão configuram uma estrutura sesenão sesenão sesenãofim se As variáveis Par Por Arr e Outros são incrementadas em um após cada peça ser identificada Isto caracteriza um acumulador pois o último valor da variável é o número total de elementos 81 FLUXOGRAMA COM ELEMENTOS DE COMPUTADORES Na elaboração de fluxogramas para programação alguns símbolos especiais podem ser utilizados para facilitar a compreensão e explicitar os propósitos Aos símbolos já apresentados para a representação gráfica de algoritmos acrescentamse os seguintes Símbolo Descrição Saída de Dados em Vídeo Símbolo utilizado para especificar como dispositivo de saída de dados o vídeo Entrada de Dados por Teclado Símbolo utilizado para especificar como dispositivo de entrada de dados o teclado Preparação Símbolo utilizado indicar uma instrução ou conjunto de instruções que modificarão a execução do fluxograma Aqui será utilizado para indicar as variáveis globais e estruturas de repetição com contagem de ciclo O fluxograma a seguir representa o algoritmo número mols apresentado anteriormente usando os símbolos de entrada de dados por teclado e saída de dados em vídeo Marcos Marcelino Mazzucco 62 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB início mm N mmm fim Massa Molecular m Massa da espécie Calcular número de mols de uma espécie N A notação de entrada de dados para elaboração de fluxogramas é variável A notação de saída de dados para elaboração de fluxogramas é informações As notações de atribuição de valor para elaboração de fluxogramas são Marcos Marcelino Mazzucco 63 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB variável valor variável 1 valor 1 variável 2 valor 2 variável n valor n A notação do desvio condicional para elaboração de fluxogramas é condição F V Conjunto de instruções executadas caso condição seja falsa Conjunto de instruções executadas caso condição seja verdadeira A notação do desvio condicional com múltiplas verificações para elaboração de fluxogramas é Marcos Marcelino Mazzucco 64 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB condição 1 F V Conjunto de instruções executadas caso condição 1 seja verdadeira condição 2 F V Conjunto de instruções executadas caso condição 2 seja verdadeira condição 3 F V Conjunto de instruções executadas caso condição 3 seja verdadeira Conjunto de instruções executadas caso condição 1 condição 2 e condição 3 sejam falsas O fluxograma para o aninhamento de estruturas condicionais é condição 1 F V Conjunto de instruções executadas caso condição 1 seja falsa condição 2 F V Conjunto de instruções executadas caso condição 2 seja falsa Conjunto de instruções executadas caso condição 2 seja verdadeira Marcos Marcelino Mazzucco 65 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB A notação de ciclo de repetição com teste de continuidade no início para elaboração de fluxogramas é condição V F Conjunto de instruções executadas enquanto condição seja verdadeira A notação de estrutura de repetição com teste de continuidade no final do ciclo para elaboração de fluxogramas é condição V F Conjunto de instruções executadas até que condição seja verdadeira A notação de ciclo de repetição com contagem de ciclo para elaboração de fluxogramas pode ser efetuada de três formas Marcos Marcelino Mazzucco 66 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB variávellimite Conjunto de instruções executadas até que condição variávellimite seja verdadeira variável valor inicial passo valor limite valor final variável variávelpasso V F variávellimite Conjunto de instruções executadas até que condição variávellimite seja verdadeira variável valor inicial limite valor final variável variável1 V F Conjunto de instruções executadas até que variávelvalor final variável de valor inicial até valor final passo valor Marcos Marcelino Mazzucco 67 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Na última representação o símbolo de preparação foi utilizado para indicar o teste de continuidade do ciclo e a incrementação do contador de ciclo Uma representação de ciclo de repetição com contagem de ciclo e finalização usando quebra de ciclo pode ser vista a seguir variávellimite Conjunto de instruções executadas até que condição variávellimite seja verdadeira variável valor inicial limite valor final variável variável1 V F condição de quebra F V QUEBRACICLO A instrução de finalização forçada de um ciclo permite construções interessantes como ciclos infinitos No fluxograma a seguir a condição de encerramento é 11 Como esta condição nunca é falsa o ciclo somente será encerrado quando uma dada condição interna do ciclo for atingida Condição esta cuja parte consequente é a instrução QUEBRACICLO Marcos Marcelino Mazzucco 68 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 11 V F Conjunto de instruções executadas enquanto 11 condição V F QUEBRACICLO Marcos Marcelino Mazzucco 69 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 9 REFINAMENTOS SUCESSIVOS Marcos Marcelino Mazzucco 70 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB É relevante observar que as etapas definidas em um algoritmo podem por si só representar um conjunto de etapas e portanto requererem um refinamento maior para que sejam claramente definidas eou realizadas Considere o exemplo a seguir algoritmo número de mols protótipo de algoritmo para calcular o número de mols de um composto químico início Calcular a Massa Molecular do composto identificado Armazenar a Massa Molecular do Composto químico em mm Solicitar a Massa da espécie química e armazenar em m Calcular o número de mols Nmmm Apresentar o número de mols fim Exemplo A etapa Calcular a Massa Molecular do composto identificado requer etapas adicionais em sua realização como segue refinamento Calcular a Massa Molecular do composto identificado refinamento para cálculo da Massa Molecular de um composto químico início Identificar o Composto químico fórmula Identificar as Massas Moleculares dos átomos do composto identificado Calcular a Massa Molecular fim Exemplo Os refinamentos sucessivos correspondem a etapas naturais da solução de problemas e posteriormente serão utilizados para transportar as ideias expressas nos algoritmos para a programação em computadores Marcos Marcelino Mazzucco 71 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 10 EXERCÍCIOS DE ALGORITMOS Marcos Marcelino Mazzucco 72 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Esta seção sugere alguns exercícios para treinar o contexto apresentado Ciente de que a única forma de fixar estes conceitos é pela vivência e prática deste tipo de abordagem o leitor deve se sentir encorajado a procurar mais exercícios nas bibliografias apresentadas e na Internet EXERCÍCIO ALGORITMO CONTAGEM DE PEÇAS Escreva o algoritmo para o fluxograma contagem de peças apresentado anteriormente EXERCÍCIO ALGORITMO EQUAÇÃO SEGUNDO GRAU II No algoritmo equação segundo grau não foi considerada a situação onde o termo 4ac é zero que resulta em uma única raiz x1x2 Refaça o algoritmo e o fluxograma para considerar este caso EXERCÍCIOS ALGORITMO E FLUXOGRAMA CLASSIFICAÇÃO Uma caixa contém elementos de três formas cubos esferas e cilindros nas cores vermelho azul e preto Escreva um algoritmo e faça um fluxograma para contar o número total de elementos contar o número de cilindros esferas e cubos de cada cor e o número total de elementos de cada uma das formas todas as cores EXERCÍCIOS ALGORITMO E FLUXOGRAMA PRODUTÓRIO Anteriormente foram apresentados o algoritmo e o fluxograma para a determinação da soma somatório de um conjunto qualquer de números Baseado nisto escreva o algoritmo para determinar o produto produtório de um conjunto qualquer de números Marcos Marcelino Mazzucco 73 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 11 ALGORITMOS E ESTRUTURAS DE DADOS HOMOGÊNEAS Marcos Marcelino Mazzucco 74 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estruturas de dados homogêneas ou variáveis compostas homogêneas são formas de agrupamentos de variáveis de mesmo tipo em uma única variável através de indexação São estruturas semelhantes às matrizes definidas em matemática porém podendo agrupar quaisquer tipos de dados São classificadas em unidimensionais e multidimensionais Para aproveitar a familiaridade com as estruturas matemáticas serão adotados os nomes Vetor de Dados para representar as estruturas de dados homogêneas unidimensionais e Matriz de Dados para representar as estruturas de dados homogêneas multidimensionais onde os dados podem assumir quaisquer formatos além do numérico Inicialmente devese estabelecer que um Vetor de Dados é por si próprio uma variável que representa uma coleção de dados A sintaxe para a declaração de variáveis com esta estrutura ocorre da mesma forma definida para os tipos básicos ou seja a palavra reservada variáveis precede a tipificação obedecendo ao seguinte formato Estrutura variáveis vetor de dados variável matriznúmero de elementos de tipo de dado matriz de dados variável matriznúmero de linhas número de colunas de tipo de dado várias declarações na mesma linha variável 1 variável n matrizlinhas colunas de tipo de dado variáveis numerodediasnosmeses matriz12 de inteiro nomedosmeses matriz12 de texto diadasemanaparatrabalho matriz7 de lógico dezcoordenadasxy matriz10 2 de inteiro a b matriz2 3 de real Exemplo 12 MANIPULAÇÃO DE DADOS EM ESTRUTURAS HOMOGÊNEAS As atribuições de valores ou operações com dados de estruturas homogêneas deve ser realizada sobre cada elemento destas através de um índice individual Algumas linguagens de programação permitem que sejam definidos os índices que indexam os elementos de uma matriz de dados outras indexam os dados a partir de 0 zero ou 1 Aqui será utilizada a indexação a partir de 1 um ou seja para um vetor com 5 elementos o primeiro elemento será indexado como 1 e o último como 5 Marcos Marcelino Mazzucco 75 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB A sintaxe para atribuição de valores a vetores e matrizes de dados obedece ao seguinte formato Estrutura nome do vetoríndicevalor nome da matrizíndice da linha índice da colunavalor 1211 EXEMPLO MATRIZES E VETORES Escrever um algoritmo para armazenar em matrizes os valores das relações trigonométricas seno e cosseno para os ângulos de 90 180 e 270 e os números inteiros de 55 a 59 Os seguintes dados devem ser armazenados 90 180 270 Seno 1 0 1 1 Cosseno 0 1 0 2 1 2 3 Valores 1 55 2 56 3 57 4 58 5 59 programa matrizesdedados armazenar os valores do seno e coseno para os ângulos de 90 180 e 270 e números inteiros de 5559 variáveis relacoestrigonometricasmatriz2 3 de real numerosinteiros5559matriz5 de inteiro início relacoestrigonometricas1 1 1 seno90 relacoestrigonometricas1 2 0 seno180 relacoestrigonometricas1 3 1 seno270 relacoestrigonometricas2 1 0 cosseno90 relacoestrigonométricas2 2 1 cosseno180 relacoestrigonométricas2 3 0 cosseno270 numerosinteiros5559155 numerosinteiros5559256 numerosinteiros5559357 numerosinteiros5559458 numerosinteiros5559559 fim Exemplo O uso de matrizes de dados nas estruturas de entrada e saída de dados segue a seguinte notação Marcos Marcelino Mazzucco 76 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura lernome do vetoríndice do elemento lernome da matrizíndice da linha índice da coluna nome do vetoríndice do elemento ler nome da matrizíndice da linha índice da coluna ler escrevernome do vetoríndice do elemento escrevernome da matrizíndice da linha índice da coluna As formas nome do vetoríndice do elemento ler e nome da matrizíndice da linha índice da coluna ler serão preferidas neste material Para atribuir valores a todos os elementos de um vetor de dados podem ser utilizadas as estruturas de repetição O uso da estrutura parafazer é o mais adequado porém quaisquer estruturas de repetição podem ser utilizadas Estrutura atribuir valores a um vetor de dados através da estrutura parafazer para indexador do elemento de 1 até valor final passo 1 fazer vetor de dados indexador do elementovalor fim para atribuir valores a um vetor de dados através da estrutura repetiraté que indexador do elemento1 repetir vetor de dados indexador do elementovalor indexador do elemento indexador do elemento1 até que indexador do elemento número de elementos atribuir valores a um vetor de dados através da estrutura enquantofim enquanto índice do elemento1 enquanto indexador do elemento número de elementos vetor de dados indexador do elementovalor indexador do elementoíndice do elemento1 fim enquanto Marcos Marcelino Mazzucco 77 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura atribuir valores a um vetor de dados a partir do dispositivo de entrada para indexador do elemento de 1 até valor final passo 1 fazer vetor de dados indexador do elementoler fim para para indexador do elemento de 1 até valor final fazer vetor de dados indexador do elementoler fim para Estrutura apresentar os valores de um vetor de dados no dispositivo saída um abaixo do outro para indexador do elemento de 1 até valor final passo 1 fazer escrevervetor de dados indexador do elemento NL fim para apresentar os valores de um vetor de dados um ao lado do outro separados por espaços para indexador do elemento de 1 até valor final passo 1 fazer escrevervetor de dados indexador do elemento fim para escreverNL Para atribuir valores a uma matriz de dados devem ser utilizadas estruturas de repetição aninhadas encadeadas Estrutura atribuir valores a uma matriz de dados através da estrutura parafazer para linha de 1 até número de linhas passo 1 fazer para coluna de 1 até número de colunas passo 1 fazer matriz de dadoslinha colunavalor fim para fim para Procedimentos semelhantes podem ser adotados para utilizar os dispositivos de entrada e saída de dados para atribuir e exibir dados em estruturas homogêneas No exemplo que segue é requerido apresentar os dados armazenados anteriormente na matriz relacoestrigonometricas utilizando uma das estruturas de repetição apresentas bem como formatar a saída com os títulos das linhas e colunas algoritmo escreverdados Apresentar os dados armazenados anteriormente na matriz relaçõestrigonométricas início Armazenar os valores das reações trigonométricas Apresentar os dados usando a estrutura parafazer fim Exemplo Marcos Marcelino Mazzucco 78 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB programa escreverdados Refinamento variáveis linhainteiro colunainteiro relacoesmatriz2 de texto relacoestrigonometricasmatriz2 3 de real início relacoestrigonometricas1 1 1 seno90 relacoestrigonometricas 1 2 0 seno180 relacoestrigonometricas 1 3 1 seno270 relacoestrigonometricas 2 1 0 coseno90 relacoestrigonometricas 2 2 1 coseno180 relacoestrigonometricas 2 3 0 coseno270 relacoes 1 sen relacoes 2 cos exibir os dados através da estrutura parafazer escrever 90 180 270 NL para linha de 1 até 2 fazer escrever relacoes linha para coluna de 1 até 3 fazer escrever relacoestrigonometricaslinha coluna fim para escrever NL fim para fim Exemplo Notaa instrução escreverNL objetiva criar uma nova linha no dispositivo de saída ou seja forçar o deslocamento da posição de escrita para a linha seguinte A apresentação desde algoritmo no dispositivo de saída será 90180270 sen 1 0 1 cos 0 1 0 Marcos Marcelino Mazzucco 79 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 13 PROGRAMAÇÃO COM ESTRUTURAS DE DADOS HOMOGÊNEAS Marcos Marcelino Mazzucco 80 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Variáveis compostas homogêneas são estruturas semelhantes às matrizes definidas em matemática Matlab é uma linguagem especializada e otimizada para manipulação de matrizes portanto a formulação de problemas em forma matricial deve sempre ser preferida em relação à qualquer outra Matlab define o construtor de variáveis homogêneas para criar estruturas uni ou multidimensionais Inicialmente devese estabelecer que tais estruturas se constituem em variáveis que representam uma coleção de dados do mesmo tipo Quando a intenção for a declaração de variáveis homogêneas usaremos a notação variável ARRAY A sintaxe para a declaração de variáveis com esta estrutura ocorre da mesa forma definida para os tipos básicos ou seja atribuindo um valor inicial obedecendo ao seguintes formatos Estrutura uses ARRAY var variável ARRAY begin end Estrutura variável Vetores de dados numerodediasnosmeses zeros112 nomedosmesesblanks12 diasdasemanaparatrabalho matriz vazia boolena Criar uma matriz multidimensional para armazenar as relações trigonométricas seno coseno e tangente para os ângulos de 30 45 60 e 90 relacoestrigonometricaszeros34 Exemplo A linguagem Matlab indexa os elementos de uma matriz de dados a partir de 1 MANIPULAÇÃO DE DADOS EM ESTRUTURAS HOMOGÊNEAS As atribuições de valores ou operações com dados de estruturas homogêneas deve ser realizada sobre cada elemento destas através de um índice individual A Marcos Marcelino Mazzucco 81 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB sintaxe para atribuição de valores a vetores e matrizes de dados obedece ao seguinte formato Estrutura nome do vetoríndicevalor nome do vetoríndice 1índice 2valor nome do vetoríndice 1índice 2 índice 3índice 4valor nome da matrizíndice 1 índice 2 índice nvalor nome da matrizíndice 1 valortodos os elementos da linha índice 1 nome da matriz valortodos os elementos recebem valor nome da matrizvalor 1valor 2matriz com valores de valor 1 até valor 2 incrementados em 1 nome da matrizzeroslinhas colunasmatriz preenchida com zero nome da matrizoneslinhas colunasmatriz preenchida com número um nome da matrizeyevalormatriz identidade quadrada nome da matrizeyelinhas colunasmatriz identidade nome da matrizrandlinhas colunasmatriz de valores aleatórios nome do vetorlinspacevalor inicial valor final n elementosvetor linha contendo n elementos valores igualmente espaçados entre valor inicial e valor final armazenar os valores do seno e coseno para os ângulos de 90 180 e 270 e números inteiros de 5559 relacoestrigonometricaszeros23 cria uma matriz 2x3 preenchida com 0 numerosinteiros5559zeros15 cria uma matriz 1x5 preenchida com 0 relacoestrigonometricas111 seno90 relacoestrigonometricas120 seno180 relacoestrigonometricas131 seno270 relacoestrigonometricas210 cosseno90 relacoestrigonometricas221 cosseno180 relacoestrigonometricas230 cosseno270 numerosinteiros5559155 numerosinteiros5559256 numerosinteiros5559357 numerosinteiros5559458 numerosinteiros5559559 Exemplo Para atribuir valores a todos os elementos de um vetor de dados podem ser utilizadas as estruturas de repetição O uso da estrutura for é o mais adequado porém quaisquer estruturas de repetição podem ser utilizadas O operador efetua operações sobre intervalos por exemplo A1105 atribui o valor 5 para os elementos de 1 à 10 do vetor A Estrutura atribuir valores a um vetor de dados através da estrutura for for índice do elemento índice inicial índice final vetor de dadosíndice do elementovalor endfor Marcos Marcelino Mazzucco 82 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Para atribuir valores a uma matriz de dados de duas dimensões devem ser utilizadas estruturas de repetição aninhadas encadeadas Estrutura for linha índice inicial da linha índice final da linha for colunaíndice inicial da coluna índice final da coluna matriz de dadoslinhacolunavalor endfor endfor Procedimentos semelhantes podem ser adotados para utilizar os dispositivos de entrada e saída de dados para atribuir e exibir dados em estruturas homogêneas Matlab Octave implementam uma série de funcionalidades para manipulação de matrizes Toda álgebra matricial está implementada o que lhes conferem grande poder de solução VETORES E MATRIZES DE CARACTERES TEXTO Dados do tipo stringtexto por si constituem um vetor linha de caracteres com tantos elementos quantos forem os caracteres armazenados É possível gerar vetores coluna de valores literais para armazenamento de texto porém é necessário referenciar a linha e as colunas bem como respeitar a limitação de que todas as linhas devem conter o mesmo número de caracteres Em vetores coluna de texto todas as linhas que não possuem o mesmo número de caracteres são preenchidas com espaços em branco de forma que todas as linhas possuam o mesmo número de caracteres Por definição stringfillchar para eliminar visualmente este efeito no GNU Octave utilize a variável de ambiente stringfillchar fazendo stringfillchar Observe que quando s é um vetor coluna as palavras permanecem separadas constituindo cada uma um elemento do vetor enquanto quando s é um vetor linha as palavras são unidas e cada letra passa a ser um elemento do vetor A sintaxe para armazenamento de dados em vetores na forma literal string é Estrutura nome do vetorstr 1 str 2 str 3 str n A sintaxe para recuperar dados de um vetor na forma literal é Marcos Marcelino Mazzucco 83 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura str1nome do vetoríndice da linha Nota observe o operador utilizado para coletar todos os caracteres colunas da linha indicada A sintaxe para recuperar uma letra de um dado em um vetor na forma literal é Estrutura letrastr1nome do vetor índice da linha índice da letra stringfillchar Conteúdo de s sO mar é o espelho do céu s Conteúdo de s formatado stringfillchar Novo conteúdo de s sO mar é o espelho do céu s Novo conteúdo de s formatado sO mar é o espelho do céu Conteúdo de s na forma de um vetor linha s Exemplo As funções lowertexto e uppertexto convertem vetores e matrizes de texto para letras maiúsculas e minúsculas respectivamente contudo estas funções não estão preparadas para o conjunto de caracteres latino cedilha acentos etc Com GNU octave é possível estruturar texto na forma de uma lista cell array conforme o seguinte exemplo sO mar é o espelho do céu s s1 derefs1 derefs2 derefs3 strcmpderefs5 espelho Exemplo Marcos Marcelino Mazzucco 84 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB A função derefnome da lista índice do elemento recupera o valor contido na lista a partir do índice requerido Marcos Marcelino Mazzucco 85 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 14 ALGORITMOS E ESTRUTURAS DE DADOS HETEROGÊNEAS Marcos Marcelino Mazzucco 86 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estruturas de dados heterogêneas são formas de agrupamentos de variáveis de diversos tipos em uma única variável São estruturas que permitem que os atributos de uma certa informação sejam reunidos em uma única estrutura permitindo um raciocínio mais simples e efetivo As estruturas de dados heterogêneas são também conhecidas como registros de dados ou variáveis compostas heterogêneas A sintaxe para a declaração de um registro será Estrutura nome variávelregistro atributo 1 tipo 1 atributo 2 tipo 2 atributo n tipo n fim registro Criar uma estrutura heterogênea para identificar uma bomba elétrica variáveis bombaregistro tensaointeiro pressaoreal potenciareal correntealternadalógico unidadepressaotexto unidadepotenciatexto fim registro Exemplo No exemplo anterior foram utilizados cinco atributos campos para caracterizar uma bomba elétrica porém alguns destes atributos estão intimamente relacionados e poderiam representar uma informação de forma mais coesa através também de um registro de dados Isto seria possível criando por exemplo um registro de dados que contivesse o valor da pressão e a unidade desta Criar outra estrutura heterogênea para identificar uma bomba elétrica variáveis bombaregistro tensaointeiro pressaoregistro valorreal unidadetexto fim registro potenciaregistro valorreal unidadetexto fim registro correntealternadalógico fimregistro Exemplo Marcos Marcelino Mazzucco 87 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estruturas de dados heterogêneas podem conter como atributos estruturas homogêneas bem como podem estar contidas nestas O uso extensivo de variáveis heterogêneas contribui para a organização e clareza de um programa MANIPULAÇÃO DE DADOS EM ESTRUTURAS HETEROGÊNEAS As atribuições de valores ou operações com dados de estruturas heterogêneas deve ser realizada sobre cada atributo destas através de um operador de referência Algumas linguagens de programação não implementam estruturas de dados heterogêneas Porém historicamente observase que a maioria das linguagens acrescentou estas estruturas à sua sintaxe pela versatilidade oferecida por estas A sintaxe para atribuição de valores a registros de dados obedece ao seguinte formato Estrutura variávelatributo valor A leitura e escrita de dados dopara registros também é realizada através do operador de referência observe o exemplo que segue algoritmo cadastrabombas Cadastrar 5 bombas a partir de entradas do usuário exibindo o código do produto para cada um início para 5 bombas fazer Solicitar as informações de Tensão Valor da Potência Unidade da Potência e Tipo de Corrente armazenandoas em uma variável heterogênea Codificar as informações acumulando as em um vetor com dados do tipo inteiro Apresentar o código fim para fim Exemplo Marcos Marcelino Mazzucco 88 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB programa cadastrabombas Refinamento variáveis iinteiro jinteiro opcaotexto bombasmatriz5 de registro tensaointeiro potenciaregistro valorreal unidadetexto fim registro correntealternadalógico codigomatriz4 de inteiro códigos para tensão potênciavalor potênciaunidade correntealternada fim registro constantes identificadores dos valores de tensão 110V1 220V2 24V3 identificadores dos valores de potência 025HP1 025HP 050HP2 050HP 50W4 50W identificadores das unidades de potência HP1 W2 identificadores para verdadeiro e falso F0 V1 início para i de 1 até 5 fazer escrever Cadastrando bomba i NL Coletar as informações escrever Informar tensão V bombasitensao ler escrever Informar unidade da potência bombasipotenciaunidade ler escrever Informar potência bombasipotenciaunidade bombasipotenciavalor ler repetir escrever A bomba opera com corrente alternada SN opcao ler até que opcaoS ou opcaoN se opcaoS então bombasicorrentealternadaverdadeiro senão bombasicorrentealternadafalso fim se Codificar as informações Continua Exemplo Marcos Marcelino Mazzucco 89 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Continuação Codificar as informações se bombasitensao220 então bombasicodigo1220V senão se bombasitensao110 então bombasicodigo1110V senão se bombasitensao24 então bombasicodigo124V senão bombasicodigo10 desconhecido fim se se bombasipotenciavalor025 e bombasipotenciaunidadeHP então bombasicodigo2025HP bombasicodigo3HP senão se bombasipotenciavalor05 e bombasipotenciaunidadeHP então bombasicodigo2050HP bombasicodigo3HP senão se bombasipotenciavalor50 e bombasipotenciaunidadeW então bombasicodigo250W bombasicodigo3W senão bombasicodigo20 desconhecido bombasicodigo30 desconhecido fim se se bombasicorrentealternadaverdadeiro então bombasicodigo4V senão bombasicodigo4F fim se Apresentar o código escrever O código da bomba cadastrada é para j de 1 até 3 fazer escrever bombasicodigoj fim para escrever bombasicodigo4 NL escrever NL fim para fim Exemplo A apresentação desde algoritmo no dispositivo de saída com entradas fornecidas pelo usuário será Cadastrando bomba 1 Informar tensão V 220 Informar unidade da potência HP Informar potência HP 025 A bomba opera com corrente alternada SN S O código da bomba cadastrada é 2111 Cadastrando bomba 2 Informar tensão V Marcos Marcelino Mazzucco 90 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 15 PROGRAMAÇÃO COM ESTRUTURAS DE DADOS HETEROGÊNEAS Marcos Marcelino Mazzucco 91 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB As estruturas de dados heterogêneas são também conhecidas como registros de dados ou variáveis compostas heterogêneas e são pouco utilizadas em matemática numérica mas são muito úteis em matemática simbólica A sintaxe para a declaração desta estrutura em GNU Octave é Estrutura variávelatributo 1tipo 1 variávelatributo 2tipo 2 variávelatributo ntipo n As atribuições de valores ou operações com dados de estruturas heterogêneas deve ser realizada sobre cada atributo destas através de um operador de referência bombatensao0 bombapressao00 bombapotencia00 bombacorrentealternadafalse bombaunidadepressao bombaunidadepotencia Exemplo No exemplo anterior foram utilizados cinco atributos campos para caracterizar uma bomba elétrica porém alguns destes atributos estão intimamente relacionados e poderiam representar uma informação de forma mais coesa através de também um registro de dados Isto seria possível criando por exemplo um registro de dados que contivesse o valor da tensão e a unidade desta bombatensao0 bombapressaovalor00 bombapressaounidade bombapotenciavalor00 bombapotenciaunidade bombacorrentealternadafalse Exemplo Uma matriz pode agrupar uma variável heterogênea ampliando a capacidade de representar algoritmos complexos Marcos Marcelino Mazzucco 92 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 16 MODULARIZAÇÃO DE ALGORITMOS Marcos Marcelino Mazzucco 93 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Dependendo da complexidade de um problema o algoritmo para sua solução pode ser melhor desenvolvido com a divisão em partes menores subrotinas e portanto mais simples A garantia de que as partes de um algoritmo realizam corretamente as tarefas a que se destinam e de que estejam corretamente encadeadas garante a solução do problema Cada parte de um algoritmo constitui um novo algoritmo podendo portanto estar sujeita a divisões em algoritmos menores obtendose o refinamento e a especificidade necessários O refinamento em subrotinas sugere que a funcionalidade de cada parte está perfeitamente delineada A manipulação de um algoritmo por outro ocorre através do nome destes O refinamento sucessivo auxilia o desenvolvimento de problemas complexos Considere um caso onde um programa possa ser dividido em subprogramas cada um desempenhando uma tarefa definida de forma clara e objetiva Por exemplo um algoritmo deve estabelecer um caminho para que seja escolhida entre as equações yx2 e y2x aquela que deve ser utilizada em um caso específico O algoritmo protótipo a seguir indica um caminho algoritmo calculay resolver as equações 1 yx2 2 y2x início Listar opções de equações Identificar a equação a ser resolvida Resolver a equação selecionada Apresentar o resultado fim Exemplo Se cada uma das etapas listadas puder ser codificada como um subprograma o programa final seria tão claro quanto o algoritmo e sua compreensão seria facilitada programa calculay resolver as equações 1 yx2 2 y2x início listaropcoes identificarequacao resolverequacao apresentarresultado fim Exemplo Este tipo de abordagem não é totalmente viável pois quando o algoritmo na versão de protótipo foi definido não foram consideradas as implicações das etapas Quando as etapas são muitos simples não é conveniente considerálas como subprogramas pois isto pode se tornar trabalhoso demais Veja o refinamento final deste exemplo a seguir Marcos Marcelino Mazzucco 94 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB programa calculay Refinamento em módulos variáveis x real y real opcao inteiro constantes equacao11 y x2 equacao22 y 2x subprogramas subrotina listaropcoes escolher entre as equações yx2 y2x início escrever Selecione a equação desejada números NL escrever equacao1 NL escrever equacao2 NL fim sub subrotina identificarequacao início opcao ler fim sub subrotina resolverequacao resolver uma das equações global x início escrever indicar o valor de x x ler se opcao1 então yx2 senão y2x fim se fim sub subrotina apresentarresultado início escrever O resultado da equação opcao é y NL fim sub início listaropcoes identificarequacao resolverequacao apresentarresultado fim Exemplo Observe que utilizamos uma nomenclatura semelhante à do programa principal apenas substituindo a palavra programa por subrotina As seções como declaração de variáveis e constantes também podem estar contidas em subrotinas Marcos Marcelino Mazzucco 95 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura subrotina nome da subrotina início instruções fim sub O uso de subrotinas estabelece uma hierarquia onde existe o programa principal e os auxiliares As variáveis declaradas no programa principal podem estar acessíveis a todos os algoritmos enquanto as definidas nos auxiliares são restritas a estes O grau de visibilidade de uma variável é denominado escopo e é classificado como global ou local Assim as variáveis contidas nas subrotinas são denominadas variáveis locais e são particulares deste existindo apenas durante a execução da subrotina Desta forma uma das vantagens práticas do uso de subrotinas é que a unidade de processamento somente precisará se preocupar com as variáveis locais durante o uso destas Antes e após a manipulação da subrotina as variáveis locais permanecem indeterminadas É comum que seja necessária a transferência de informações entre algoritmos sem o uso de variáveis globais devendo ser estabelecido um mecanismo de troca de dados O trânsito de dados em subrotinas é denominado passagem de parâmetros os quais são constituídos por variáveis ou valores enviados para uma subrotina Esta passagem deve ser efetuada após o nome da subrotina e entre parênteses As sub rotinas serão indicadas conforme as seguintes sintaxes Estrutura subrotina nome da subrotinalista de parâmetros com tipos variáveis lista de variáveis início instruções fim sub subrotina variáveis de retorno com tiponome subrotina parâmetros com tipos variáveis lista de variáveis início instruções fim sub Existem duas formas de subrotinas os procedimentos e as funções Um procedimento executa uma tarefa permitindo ou não o trânsito de dados enquanto uma função estende esta funcionalidade retornando algum valor no próprio nome da sub rotina Marcos Marcelino Mazzucco 96 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura procedimento nome do procedimentolista de parâmetros com tipos variáveis lista de variáveis início instruções fim procedimento função variável de retorno com tiponome da função parâmetros com tipos variáveis lista de variáveis início instruções fim função Nota A lista de parâmetros com tipos pode seguir os formatos listaparâmetro 1tipo 1 parâmetro 2tipo 2 listaparâmetro 1parâmetro 2tipo 1parâmetro 3parâmetro 4tipo 2 A notação de subrotinas para elaboração de fluxogramas é nome da subrotinaparâmetros instruções requeridas RETORNAR parâmetros de retorno No uso chamada de um procedimentofunção apenas vírgulas são utilizadas Nas declarações a vírgula ou pontoevírgula podem ser usados para separar tipos diferentes em procedimentofunção Entre tipos iguais pode ser utilizada vírgula ex função tstlógicotestea b lógico c d e inteiro Como em muitos casos é prático e necessário a definição de subrotinas em unidades separadas do programa principal adotaremos o uso da instrução usar para direcionar a escrita das subrotinas para uma nova área Tratase de um recurso facilitador da estruturação do programa e a esta instrução chamaremos de compartilhamento A sintaxe para o uso desta instrução em um algoritmo será Marcos Marcelino Mazzucco 97 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estrutura algoritmo nome do algoritmo variáveis lista de variáveis constantes lista de constantes usar nome da unidade início conjunto de instruções fim unidade nome da unidade conjunto de instruções fim unidade O programa calculay pode então ser rescrito na forma a seguir utilizando o conceito de compartilhamento Observe que as subrotinas identificarequacao resolverequacao e apresentarresultado são dependentes das variáveis x y e opcao declaradas no programa principal Estas variáveis possuem escopo global e sem elas as subrotinas não podem cumprir sua tarefa ser executadas Este inconveniente pode ser resolvido utilizando os mecanismos de passagem de parâmetros Estes mecanismos permitem a construção de subrotinas independentes de qualquer programa principal e que portanto podem ser reutilizadas em situações diversas De fato a facilidade de programação que se obtém atualmente é fruto de bibliotecas de subrotinas muito bem desenvolvidas presentes nas linguagens de programação existentes Como não é interessante reunir subrotinas para todas as aplicações em todas as linguagens de programação de computadores existem linguagens de programação de propósito específico Aqui o interesse está direcionado a computação científica mais especificamente para solução de problemas de matemática aplicada a engenharia Marcos Marcelino Mazzucco 98 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB programa calculay Refinamento em módulos variáveis x real y real opcao inteiro constantes equacao11 y x2 equacao22 y 2x usar programasauxiliares início listaropcoes identificarequacao resolverequacao apresentarresultado fim unidade programasauxiliares subrotina listaropcoes escolher entre as equações yx2 y2x início escrever Selecione a equação desejada números NL escrever equacao1 NL escrever equacao2 NL fim sub subrotina identificarequacao início opcao ler fim sub subrotina resolverequacao resolver uma das equações início escrever indicar o valor de x xler se opcao1 então yx2 senão y2x fim se fim sub subrotina apresentarresultado início escrever O resultado da equação opcao é y NL fim sub fim unidade programasauxiliares Exemplo Nota O nome de uma unidade deve ser único no programa e seguir as mesmas regras para definição de nomes de variáveis Vamos praticar estes conceitos com um exemplo mais completo Usar funções e procedimentos para montar uma tabela de dados linear para no máximo 10 valores de x a serem fornecidos com a devida apresentação destes ao final dos cálculos Criar ao Marcos Marcelino Mazzucco 99 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB menos uma função com nome f e três procedimentos com os nomes dadosentrada calcular e exibirtabela algoritmo tabeladadoslinear Resolver a equação yfx com fxaxb início Obter os dados de x armazenandoos em uma matriz Identificar solicitar os coeficientes da equação da reta Calcular os valores de fx para os dados armazenados armazenadoos em uma matriz Apresentar os resultados fim Exemplo programa tabeladadoslinear Refinamento usar bloco1 variáveis coeficientelinearreal coeficienteangularreal xreal númeropontosinteiro pontosmatriz10 2 de real constantes titulo Montar uma tabela linear usar bloco2 bloco3 início escrevertitulo dadosentrada coeficientes calcular exibirtabela fim Exemplo Nota Observe que a instrução usar foi utilizada duas vezes antes e após a declaração de variáveis Isto significa que as variáveis declaradas não são visíveis escopo na subrotina f pois ela está contida no bloco1 que está sendo compartilhado antes da seção das variáveis Marcos Marcelino Mazzucco 100 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB unidade bloco1 função rreal fa b xreal início raxb fim função fim unidadebloco1 unidade bloco2 procedimento dadosentrada variáveis contadorinteiro início escrever Número de pontos max10 numeropontos ler para contador de 1 até numeropontos fazer escrever Informe o ponto N contador xler pontoscontador1x fimpara fim procedimento dadosentrada procedimento calcular variáveis contadorinteiro yreal início para contador de 1 até numeropontos fazer yfcoeficienteangular coeficientelinear pontoscontador 1 pontoscontador 2y fim para fim procedimento calcula procedimento exibirtabela variáveis contadorinteiro início escrever x y NL para contador de 1 até numeropontos fazer escrever pontoscontador 1 pontoscontador 2 NL fim para fim procedimento exibirtabela fim unidadebloco2 unidade bloco3 procedimento coeficientes início escrever Coeficiente angular coeficienteangularler escrever Coeficiente linear coeficientelinear ler escrever fx coeficienteangular x coeficientelinear NL fim procedimento fim unidadebloco3 Exemplo Aqui será utilizada a palavra subrotina para designar tanto procedimentos como funções visto que esta diferenciação é apenas conceitual Marcos Marcelino Mazzucco 101 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB MECANISMOS DE PASSAGEM DE PARÂMETROS Sem o uso de subrotinas a criação de programas tornase pobre e onerosa pois muitas tarefas resultam em repetição consumindo um tempo precioso Subrotinas permitem que a representação da solução de um problema possa ser estendida para problemas similares com uma grande economia de tempo e esforço além do compartilhamento de recursos entre programadores Resumidamente a reutilização de algoritmos é essencial dos pontos de vista profissional e intelectual Para garantir um aproveitamento efetivo de algoritmos é importante que estes sejam escritos de forma genérica e independente aproveitando ao máximo o recurso de passagem de parâmetros Para tanto este recurso deve incluir a possibilidade tanto do envio quanto do recebimento de informações As subrotinas do tipo função incluem este tipo de funcionalidade Para estender esta funcionalidade será incorporada na passagem de parâmetros o fluxo bidirecional de informações através do símbolo A sintaxe para definição de um procedimento com passagem bidirecional de parâmetros é Estrutura procedimento nomeindicador de direçãoparâmetros com tipos Quando o fluxo de informações ocorre unicamente no sentido de entrada é dito que a passagem de parâmetros ocorre por valor e quando é bidirecional ocorre por referência Na passagem por valor a alteração nos valores dos parâmetros efetuada no interior da subrotina não se reflete no algoritmo que acionou esta Na passagem por referência toda alteração nos valores dos parâmetros efetuada no interior da subrotina altera imediatamente o valor destes no algoritmo que acionou esta Tecnicamente é dito que na passagem por referência os parâmetros formais que estão escritos na definição da subrotina afetam os parâmetros reais passados para a subrotina pelo algoritmosubrotina principal Na passagem por referência é requerido que os tipos das variáveis formal e real sejam idênticos pois compartilharão o mesmo espaço Na passagem por valor os tipos devem ser apenas compatíveis sendo permitido o uso de constantes ou valores 2 505 ABC verdadeiro como parâmetros É possível que uma subrotina utilize passagem apenas por valor apenas por referência ou pelas duas formas Quando da passagem pelos dois modos primeiro Marcos Marcelino Mazzucco 102 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB serão declarados os parâmetros formais passados por valor e depois os passados por referência conforme os modelos de sintaxes a seguir Estrutura procedimento nomeparâmetro 1tipo 1 parâmetro 2tipo 2 procedimento nomeparâmetro 1tipo 1 parâmetro 2tipo 2 procedimento nomeparâmetro 1tipo 1 parâmetro 2tipo 2 parâmetro 3tipo 3 parâmetro 4tipo 4 procedimento nomeparâmetro 1 parâmetro 2tipo 1 parâmetro 3 parâmetro 4tipo 2 procedimento nomeparâmetro 1 parâmetro 2tipo 1 parâmetro 3 parâmetro 4tipo 2 As notações para uso chamada de subrotinas para elaboração de fluxogramas são variáveis nomeparâmetros variáveis nomeparâmetros A primeira forma normalmente é utilizada para procedimentos enquanto a segunda para funções Neste material será pouco utilizada a passagem de parâmetros por referência visto que a linguagem formal de programação que será utilizada não oferece suporte a este mecanismo O próximo exemplo ilustra as passagens de parâmetros por valor e por referência Marcos Marcelino Mazzucco 103 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Ex Criar um procedimento genérico para determinar a média e o desvio absoluto da média de um vetor testandoo com os 30 primeiros números múltiplos de 2 exceto o zero algoritmo estatística início Determinar os 30 primeiros números múltiplos de 2 Determinar a média e o desvio absoluto da média Apresentar os resultados fim refinamento Determinar os 30 primeiros números múltiplos de 2 Para os números de 1 a 60 Identificar e armazenar os múltiplos de 2 fim refinamento refinamento Determinar a média e o desvio Determinar a média Determinar o desvio absoluto da média fim refinamento refinamento Determinar a média Somar os dados Dividir a soma dos dados pelo número de dados fim refinamento refinamento Determinar o desvio absoluto da média Calcular as somas dos desvios entre os dados e a média dadomédia Dividir a soma dos desvios pelo número de dados fim refinamento refinamento Apresentar os resultados Apresentar a média Apresentar desvio absoluto da média fim refinamento Exemplo As instruções refinamento fim refinamento delineiam o refinamento dos protótipos estabelecidos no algoritmo principal ou nos algoritmos auxiliares procedimentos e funções Uma seção de refinamentos pode conter todas as instruções apresentadas entrada e saída variáveis desvios condicionais estruturas de repetição etc Contudo parece mais adequado que seja mantido um certo grau de objetividade e generalidade na etapa dos protótipos A seguir é apresentado o refinamento final do algoritmo estatística Marcos Marcelino Mazzucco 104 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB programa estatistica Determinar a média e o desvio absoluto de um vetor Refinamento final nível 1 algoritmo principal cálculo da média e desviovariáveis multiplosmatriz30 de real mreal dreal constantes titulo Exparâmetros reais e formais usar assubrotinas início escrever titulo gerardados30 2 multiplos mediadesviomultiplos m d escrever Média dos 30 primeiros números múltiplos de 2 m NL escrever Desvio absoluto da média entre 30 múltiplos de 2 d NL fim unidade assubrotinas função mrealcalculamediadadosmatriz de real variáveis contadorinteiro somareal início soma0 para contador de 1 até 30 fazer somasomadadoscontador fim para m soma30 fim função calculamédia calcular o valor absoluto de um número função rrealabsvalor real início rvalor212 fim função abs procedimento mediadesviovetormatriz de real media desvioreal variáveis iinteiro início mediacalculamediavetor desvio0 para i de 1 até 30 fazer desviodesvioabsmediavetori fim para desviodesvio30 fim procedimento mediadesvio Continua Exemplo Marcos Marcelino Mazzucco 105 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Continuação procedimento gerardadosnumdadosinteiro multiplointeiro dadosmatriz de real variáveis iinteiro início para i de 2 até numdadosmultiplo passo multiplo fazer dadosii fim para escrever Determinados os primeiros quantidade múltiplos de multiplo NL fim procedimento gerardados fim unidade Exemplo Nota A função abs utilizada neste algoritmo fornece o módulo de um número A troca de informações entre o algoritmo principal e as subrotinas ou entre estas pode ser realizada através de parâmetros ou de variáveis globais porém sempre deve ser dada preferência à primeira A troca de dados com variáveis globais deve ser realizada quando for difícil ou inconveniente a passagem de parâmetros ou ainda por questões de legibilidade EXERCÍCIO FLUXOGRAMAS E ALGORITMOS Faça os fluxogramas para os algoritmos calculay e tabeladadoslinear e sugira outro algoritmo para a função abs utilizada no algoritmo estatistica Repetir o algoritmo tabeladadoslinear usando uma variável heterogênea para representar os pares x y em vez de usar uma matriz de duas colunas EXERCÍCIO TEMPERATURA Faça o algoritmo o programa e o fluxograma para converter uma lista de valores de temperatura da escala Celsius para Kelvin EXERCÍCIO BUSCA Faça o algoritmo o programa e o fluxograma para procurar um número em uma lista de valores EXERCÍCIO DISTÂNCIA Se todas as cidades pudessem ser conectadas por estradas retas faça o algoritmo o programa e o fluxograma para calcular a distância entre as cidades se estiver disponível uma tabela de coordenadas cartesianas para as cidades Agora vamos praticar todos os conceitos estabelecidos implementandoos com GNU Octave eou Matlab Antes disso não esqueça de resolver os exercícios desta seção Marcos Marcelino Mazzucco 106 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 17 SUBROTINAS COM GNU OCTAVE E MATLAB Marcos Marcelino Mazzucco 107 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB A linguagem Matlab fornece suporte para subrotinas function bem como o encapsulamento destes em blocos autoidentificáveis com o mesmo nome da função Com isso assegurase a modularização e reutilização de código De forma diferente para Octave é possível criar unidades de subrotinas desde que a primeira instrução válida na unidade não seja a palavra function As subrotinas serão indicadas em Octave conforme as seguintes sintaxes Estrutura function nome da funçãolista de parâmetros instruções endfunction function lista de valores de retornonome da funçãolista de parâmetros instruções endfunction Onde lista de parâmetros se houverparâmetro 1parâmetro 2parâmetro n lista de retorno se houverretorno 1 retorno 2 retorno n A instrução de encerramento de funções endfunction não está disponível em Matlab Para arquivos de função que contém uma única subrotina no GNU Octave esta instrução é opcional Em arquivos de script que contém mais de uma subrotina é obrigatória A palavra reservada global identifica uma variável global neste nível de escopo as demais variáveis são locais A identificação deve ocorrer tanto no programa principal como nas funções que requererem o uso da variável Também são palavras reservadas function e endfunction Em Octave e Matlab a passagem de parâmetros ocorre com fluxo unidirecional também chamado de passagem de parâmetros por valor A passagem de parâmetros por referência ou seja com fluxo bidirecional no mesmo parâmetro não é suportada No exemplo que segue são requeridos utilizar funções e procedimentos para montar uma tabela de dados lineares para no máximo 10 valores de x a serem fornecidos com a devida apresentação destes ao final dos cálculos É necessário criar uma função com nome f e três procedimentos com os nomes dadosentrada calcular e exibirtabela Cada subrotina deve estar contida em um arquivo conforme indicado Marcos Marcelino Mazzucco 108 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB arquivo fm function yfabx yaxb endfunction Exemplo arquivo dadosentradam function dadosentrada global coeficientelinear global coeficienteangular global numeropontos global pontos printfCoeficiente angular coeficienteangularinput disp printfCoeficiente linear coeficientelinearinput disp printffxfxf coeficienteangular coeficientelinear disp printfNúmero de pontos max10 numeropontosinput disp for contador1numeropontos printfInforme o ponto x N dcontador xinput disp pontoscontador1x endfor endfunction Exemplo arquivo calcularm function calcular global coeficientelinear global coeficienteangular global numeropontos global pontos for contador 1numeropontos yfcoeficienteangularcoeficientelinear pontoscontador1 pontoscontador2y endfor endfunction Exemplo arquivo exibirtabelam function exibirtabela global numeropontos global pontos dispx y for contador1 numeropontos printff f pontoscontador1 pontoscontador2 disp endfor endfunction Exemplo Marcos Marcelino Mazzucco 109 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB arquivo tabeladadoslinearm program tabeladadoslinear resolver a equação yfx com fxaxb clear global coeficientelinear global coeficienteangular global numeropontos global pontos begin coeficientelinear00 coeficienteangular00 numeropontos0 pontoszeros1012 tituloMontar uma tabela linear disptitulo dadosentrada calcular exibirtabela end Exemplo Nota A primeira linha de qualquer programa ou subrotina Matlab que contiver um comentário será exibida na linha de comando se for digitada a instrução help nome da função ou arquivo É possível identificar as variáveis globais em uma mesma linha separandoas por espaços As duas seções a seguir são equivalentes global coeficientelinear global coeficienteangular global numeropontos global pontos global coeficientelinear coeficienteangular numeropontos pontos A palavra reservada return força o encerramento de uma funçãoprocedimento e quando utilizada no programa principal gera a finalização deste Quando Octave encontra uma instrução esta é identificada entre as variáveis na área de trabalho global ou local e as funções predefinidas ou já executadas Caso esta tentativa não obtenha sucesso são buscadas informações no diretório de trabalho corrente e na variável de ambiente LOADPATH Se nenhuma destas tentativas obtiver êxito é retornado um erro Caso alguma destas obtenha sucesso a função é compilada para a memória para tornar sua execução mais rápidas Marcos Marcelino Mazzucco 110 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 171 NOMES DE ARQUIVOS E SUBROTINAS As regras para definição de nomes de arquivos e subrotinas seguem as mesmas especificações dos nomes de variáveis Porém deve ser observado que os nomes sejam únicos Ou seja não existam variáveis com o mesmo nome de subrotinas e arquivos com o mesmo nome de variáveis ou subrotinas Normalmente este tipo de conflito não é identificado por GNU Octave ou Matlab resultando apenas em um erro de execução Cabe lembrar que as variáveis locais geradas dentro das subrotinas podem usar nomes iguais às do programa principal sem serem globais constituindose em variáveis diferentes desde que sua visibilidade escopo é local Também deve ser observado que em arquivos que contenham uma única sub rotina que não sejam unidades de subrotinas o nome do arquivo deve ser o mesmo da subrotina que nele está contida Marcos Marcelino Mazzucco 111 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 18 APLICAÇÕES Marcos Marcelino Mazzucco 112 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 181 FATORIAL O algoritmo a seguir determina o fatorial de um número Implementeo com GNU Octave programa fatorialnumero função finteirofatorialnumerointeiro variáveis iinteiro início f1 para i de numero até 1 passo 1 fazer ffi fim para fim função variáveis numerointeiro resultadointeiro início escrever Programa Fatorial NL escrever Determinar o fatorial de numeroler resultadofatorialnumero escrever numero resultado NL fim 182 ESTATÍSTICA O algoritmo a seguir determina a média o desvio padrão a variância e o desvio médio absoluto de um vetor de números reais com no máximo 100 dados a Implemente este programa no GNU Octave b Refaça este algoritmo utilizando uma subrotina que receba os dados e retorne todas as quatro medidas de uma vez reduzindo ao máximo a quantidade de cálculos c Utilize as subrotinas predefinidas do GNU Octave para resolver este problema Média Desvio médio absoluto dm 1 N 1 N 1 N xn N xn Desvio padrão Variância programa estatistica usar Marcos Marcelino Mazzucco 113 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Unidade1 variáveis vetormatriz100 de real numeropontos iinteiro m dm dp vreal início escrever Média Desvio Médio Absoluto Desvio Padrão NL escrever Número de pontos máx 100 numeropontosler i0 repetir ii1 escreverponto i vetoriler até que inumeropontos escrever Calculando média NL mmediavetor numeropontos escrever Calculando desvio médio absoluto NL dmdesviomediovetor numeropontos escrever Calculando desvio padrão NL dpdesviopadraovetor numeropontos escrever Calculando variância NL vvarianciavetor numeropontos escreverMédia m NL escreverDesvio Médio dm NL escreverDesvio Padrão dp NL escreverVariância v NL fim unidade Unidade1 subrotina mreal mediadadosmatriz de real numerodadosinteiro variáveis iinteiro início m0 para i de 1 até numerodados fazer mmdadosi fim para mmnumerodados fim sub subrotina dpreal desviopadraodadosmatriz de real numerodadosinteiro variáveis iinteiro parte1real parte2real parte3real início parte11numerodados1 parte20 para i de 1 até numerodados fazer parte2 parte2dadosi2 fim para parte30 para i de 1 até numerodados fazer parte3 parte3dadosi fim para parte3 parte32 Marcos Marcelino Mazzucco 114 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB parte3 1numerodadosparte3 dpparte1parte2parte3 dp dp12 fim sub subrotina vreal varianciadadosmatriz de real numerodadosinteiroreal início v desviopadraodados numerodados2 fim sub subrotina dmreal desviomediodadosmatriz de real numerodadosinteiroreal variáveis iinteiro mreal início mmediadados numerodados dm0 para i de 1 até numerodados fazer dm dm absmdadosi fim para dmdmnumerodados fim sub fim unidadeunidade1 183 INTEGRAL Escrever um programa para resolver uma integral definida yx3125 usando o método dos trapézios Para resolver um problema é necessário o domínio sobre o conteúdo portanto inicialmente é necessário fundamentar teoricamente o método O Método dos trapézios consiste em dividir o intervalo de integração em subintervalos igualmente espaçados formando trapézios A soma das áreas de todos os trapézios é aproximadamente igual a integral no intervalo definido Marcos Marcelino Mazzucco 115 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB x fx0 x0 x1 x2 x3 x4 x5 x6 fx fx1 A1 A2 A3 A4 A5 A6 xI xS A112fx1fx0x1x0 De uma forma genérica Ai12fxifxi1xixi1 Com subintervalos constantes contidos no espaço entre xI e xS Ai12fxifxi1h Com hxSxIN N número de intervalos O método dos trapézios bem como outros métodos está documentado nos seguintes livros de cálculo numérico ROQUE Waldir L Introdução ao Cálculo Numérico São Paulo Atlas sd FAIRES JDBURDENRI Numerical methods Boston PWS Publishing Company 1993 RUGGIERO M A G e LOPES V L R Cálculo Numérico aspectos teóricos e computacionais 2 ed São Paulo Makron Books 1997 BARBOSA LC Cálculo Numérico São Paulo Harbra sd BARROSO L C et al Cálculo Numérico com aplicações São Paulo Harbra 1987 CAMPOS Rui J A Cálculo Numérico Básico São Paulo Atlas 1978 CLÁUDIO D M MARINS J M Cálculo Numérico Computacional teoria e prática São Paulo Atlas 1994 HUMES A F P C et al Noções de Cálculo Numérico São Paulo McGrawHill do Brasil 1984 1 programa integralmetodotrapezio 2 usar 3 Unidade2 4 variáveis 5 xs xireal 6 ninteiro 7 resultadoreal Marcos Marcelino Mazzucco 116 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 8 início 9 escrever Integral pelo Método dos Trapézios NL 10 escrever Limite inferior de integração 11 xi ler 12 escrever Limite superior de integração 13 xs ler 14 escrever Número de subintervalos 15 n ler 16 resultadointegralxi xs n 17 escrever NL 18 escrever A integral no intervalo xi xs é resultado NL 19 fim 20 unidade Unidade2 21 função a ser integrada 22 subrotina rrealfxreal 23 início 24 função a ser integrada 25 rx3125 26 fim sub 27 integração com o método do trapézio 28 subrotina rrealintegrallimiteinferior limitesuperiorreal numerointervalosinteiro 29 variáveis 30 hreal 31 iinteiro 32 x1 x2real 33 início 34 hlimitesuperior limiteinferiornumerointervalos 35 r0 36 x1limiteinferior 37 x2x1h 38 escrever Calculando integral 39 para i de 1 até numerointervalos fazer 40 rr12fx2fx1h 41 x1x2 42 x2x1h 43 fim para 44 fim sub 45 fim unidade Unidade2 Os dados a seguir podem ser utilizados para a integração da função fxx3125 no intervalo 2 3 com subintervalos constantes iguais a 1 x fx 4 61 3 98 2 117 1 124 0 125 1 126 2 133 3 152 4 189 Marcos Marcelino Mazzucco 117 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 0 50 100 150 200 250 5 4 3 2 1 0 1 2 3 4 5 x fx A seguir são apresentadas a área de armazenamento e o dispositivo de saída durante após a execução do algoritmo integralmétodotrapézio Mapa de estados das áreas de armazenamento Principal Função integralreal Estado 0 início do algoritmo xs3 xi2 n5 resultado Estado 1 entrada da função integral Estado 0 início do algoritmo i indefinido integral indefinido h indefinido x1 indefinido x2 indefinido Estado 1 entrada da função integral i integral h x1 x2 Estado 2 entrada do ciclo parafazer i integral0 h3251 x12 x2211 Estado 3 fim do 1 ciclo i1 integral1205 h1 x11 x2110 Estado 4 fim do 2 ciclo i2 integral245 h1 x10 x2011 Estado 5 fim do 3 ciclo i3 integral3705 h1 Marcos Marcelino Mazzucco 118 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Estado 9 retorno da função integral xs3 xi2 n5 resultado6425 Estado 10 FIM x11 x2112 Estado 6 fim do 4 ciclo i4 integral500 h1 x12 x2213 Estado 7 fim do 5 ciclo i5 integral6425 h1 x13 x2314 Estado 8 início do 6 ciclo fim do ciclo i6 integral6425 h1 x13 x24 Estado 9 retorno à rotina principal i indefinido integral indefinido h indefinido x1 indefinido x2 indefinido Obs neste mapa de estados foram omitidos os parâmetros das subrotinas A apresentação do dispositivo de saída em relação aos estados anteriores é Integral pelo Método dos Trapézios Limite inferior de integração 2 Limite superior de integração 3 Número de subintervalos 5 Calculando integral A integral no intervalo 2 3 é 6425 Estado 0 Estado 0 Estado 0 Estado 0 Estado 2 Estado 9 A solução analítica da integral de x3125 no intervalo 2 3 é 64125 para a qual a solução pelo método dos trapézios apresenta um erro de 019 Alterandose a função a ser integrada linha 25 para rx1 e assumindo os valores Limite inferior de integração0 Limite superior de integração4 e Número de subintervalos2 as linhas executadas e a apresentação do dispositivo de saída após o teste de mesa são 1 7 8 9 10 11 12 13 14 15 26 31 32 33 34 35 36 37 38 21 22 23 24 38 39 40 41 37 38 21 22 23 24 38 39 40 41 37 42 15 16 17 18 Marcos Marcelino Mazzucco 119 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Integral pelo Método dos Trapézios Limite inferior de integração 0 Limite superior de integração 4 Número de subintervalos 2 Calculando integral A integral no intervalo 0 4 é 12 Marcos Marcelino Mazzucco 120 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 19 APLICAÇÕES ESPECÍFICAS OCTAVEMATLAB Marcos Marcelino Mazzucco 121 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 191 MATRIZES Transposta de uma matriz transposta m1 2 3 4 56 7 8 9 0 dispm m fim Inversa de uma matriz inv inversa m1 2 3 4 5 6 7 8 0 dispinvm invm fim Determinante de uma matriz det determinante m1 2 3 4 5 6 7 8 0 dispdetm detm fim Multiplicação de matrizes multiplicação m1 2 3 n4 5 6 dispmn mn fim Multiplicação de matrizes elemento a elemento multiplicação elemento a elemento m1 2 3 n4 5 6 dispmn mn fim Divisão de matrizes divisão de matrizes m1 2 3 4 5 6 7 8 0 n4 5 6 dispm m fim Divisão de matrizes elemento a elemento Divisão de matrizes elemento a elemento m1 2 3 n4 5 6 dispmn mn fim Marcos Marcelino Mazzucco 122 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Multiplicação de matrizes por escalares multiplicação de matrizes por escalares m1 2 3 dispm2 m2 fim Potenciação de matrizes por escalares potenciação de matrizes por escalares m1 2 3 dispm2 m2 fim Potenciação de matrizes potenciação de matrizes m1 2 3 4 5 6 7 8 0 dispm2 m2 fim Sistema de equações lineares x12x23x31 4x15x26x32 7x18x23 sistema linear m1 2 3 4 5 6 7 8 0 n1 2 3vetor coluna dispinvmn invmn m fim 192 POLINÔMIOS Os polinômios são representados por vetores linha onde cada elemento corresponde ao coeficiente de um termo do polinômio Os termos inexistentes devem receber zero como coeficiente Por exemplo O polinômio 4x33x22x1 deve ser representado em um vetor linha como 4 3 2 1 O polinômio 6x54x33x22x1 deve ser representado como 6 0 4 3 2 1 MatlabOctave fornece soluções para um grande número de problemas envolvendo polinômios Marcos Marcelino Mazzucco 123 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 1921 RAÍZES raiz polinômio coeficientespolinomio1 0 0 125 1x30x20x125 eqpolipolyoutcoeficientespolinomioxpolinômio na forma de texto raizesrootscoeficientespolinomio printfAs raízes de s sãocceqpoli1013 for i 1lengthraizes printfxdi dispraizesi endfor disp fim 1922 MULTIPLICAÇÃO multiplicação polinômio polinomio12 4 6 82x34x26x8 polinomio23 0 5 73x30x25x37 poli1polyoutpolinomio1xpolinômio na forma de texto poli2polyoutpolinomio2xpolinômio na forma de texto polinomio3convpolinomio1polinomio2 multiplicação através da convolução poli3polyoutpolinomio3x resultado na forma de texto printfA operação ssspoli1poli2poli3 disp fim 1923 DIVISÃO divisão polinômio clear polinomio12 4 6 8 polinomio26 12 28 58 58 82 56 poli1polyoutpolinomio1xpolinômio na forma de texto poli2polyoutpolinomio2xpolinômio na forma de texto qrdeconvpolinomio2polinomio1p2rqp1 divisão q quociente rresto yconvpolinomio1qr recompondo a polinomio2 p2p1qr poli3polyoutqxresultado na forma de texto poli4polyoutrxresultado na forma de texto printfA operação sss com resto s poli1poli2poli3poli4 y vetor que representa p1divisão disp fim 1924 ADIÇÃO soma polinômio polinomio12 4 6 82x34x26x8 polinomio23 0 5 73x30x25x37 poli1polyoutpolinomio1xpolinômio na forma de texto poli2polyoutpolinomio2xpolinômio na forma de texto polinomio3polinomio1polinomio2 soma poli3polyoutpolinomio3x resultado na forma de texto printfA operação sss poli1poli2poli3 fim 1925 DERIVAÇÃO derivada polinomial coeficientespolinomio1 0 0 125 1x30x20x125 Marcos Marcelino Mazzucco 124 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB eqpolipolyoutcoeficientespolinomiox coeficientesresultadopolydercoeficientespolinomio eqderpolyoutcoeficientesresultadox printfA derivada de s é s eqpolieqder fim 1926 INTEGRAÇÃO integral polinomial coeficientespolinomio1 0 0 125 1x30x20x125 eqpolipolyoutcoeficientespolinomioxpolinômio na forma de texto coeficientesresultadopolyintegcoeficientespolinomio eqintpolyoutcoeficientesresultadoxpolinômio integrado na forma texto x0polyvalcoeficientesresultado2 x1 polyvalcoeficientesresultado3 resultadox1x0 printfA integral de s cc no intervalo 23 é sg eqpoli1013eqintresultado fim 1927 APROXIMAÇÃO POLINOMIAL aproximação polinomial x2 4 6 8 10 12 14 y7 13 19 25 31 37 43 py1polyfitxy1 aproximação polinomial de ordem 1 linear polyoutpx p é o polinômio obtido Rcorrcoefy1y y1 é o vetor de valores de y calculados a partir do polinômio obtido dispsprintfRfR py1polyfitxy2 aproximação polinomial de ordem 2 quadrática polyoutpx Rcorrcoefy1y dispsprintfRfR py1polyfitxy3 aproximação polinomial de ordem 3 cúbica polyoutpx Rcorrcoefy1y printfRf R fim 1928 EXPANSÃO EM FRAÇÕES PARCIAIS expansão em frações parciais n1 2 dconv1 2 3 4 cpkeresiduend 1s1s2s3s4 fim 193 RAÍZES DE EQUAÇÕES NÃO LINEARES Para a determinação de raízes de equações nãolineares Octave fornece a função fsolve e Matlab a função fzero As duas funções requerem um valor inicial para efetuar a busca raízes de equações nãolineares clear Marcos Marcelino Mazzucco 125 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB function y f x y1 2x12 3x1x2 4sinx2 6 y2 3x12 2x1x22 3cosx1 4 endfunction clc disp2x2 3xy 4siny 6 0 disp3x2 2xy2 3cosx 40 valoresiniciais1 2 valoresiniciais1 condição inicial de x valoresiniciais2 condição inicial de y x info fsolve f valoresiniciais if info1 dispA solução convergiu else printfA solução não convergiu g info endif x fim É possível determinar a raiz de uma equação de uma variável x diretamente na linha de comando fornecendo um valor inicial 194 EQUAÇÃO DIFERENCIAL ORDINÁRIA Para resolver sistemas de equações diferenciais ordinárias Matlab dispõe das funções ode23 e ode45 enquanto Octave dispõe também da função lsode Os argumentos de todas as funções são semelhantes Resolver a equação diferencial ordinária dydx xy para x0 1 e y0y mfileedom clear Marcos Marcelino Mazzucco 126 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB function dydx fyx dydx1xy1 y é o vetor de variáveis dependentes endfunction y012 valor inicial de y xlinspace0110 cria um vetor com 10 valores entre 0 e 1 x0 deve ser o limite inferior de integração e x10 deve ser o limite superior ylsodefy0x retorna a integral para os 10 valores de x fornecidos printfO resultado da integral no intervalo gg é gx1x10y10 plotxy gráfico com os 10 valores de x e y xlabelvalores de x nome do eixo x ylabelvalores de y nome do eixo y fim mfileedom clear function dydx fyx dydx1xy1 y é o vetor de variáveis dependentes endfunction xyode45f0121 retorna a integral para o intervalo 01 condição inicial2 printfO resultado da integral no intervalo gg é g x1 xlengthx ylengthy plotxy xlabelvalores de x nome do eixo x ylabelvalores de y nome do eixo y prompt close fim É possível determinar a raiz de uma equação de uma variável x diretamente na linha de comando fornecendo um valor inicial Marcos Marcelino Mazzucco 127 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 195 INTEGRAÇÃO DE EQUAÇÕES A UMA VARIÁVEL Tanto Matlab quanto Octave utilizam o método da quadratura para resolver integrais de uma variável Integral de x2 entre 0 2x332666666667 mfilequadraturam function y fx yx2 endfunction v ier nfun err quadf 0 2 fim É possível integrar uma equação de uma variável x diretamente na linha de comando fornecendo os limites de integração Marcos Marcelino Mazzucco 128 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 196 GRÁFICOS Para exibir gráficos em duas dimensões pode ser utilizado o comando plot com a seguinte sintaxe ploty onde y é um vetor numérico Os valores de x serão criados automaticamente a partir de 1 plotx y onde x e y são vetores numéricos plotx yopções onde x e y são vetores numéricos Ex opções 1legenda linha símbolo 1cor legendalegenda O parâmetro opções não possui equivalência integral com Matlab cores ccyan mmagenta kblack rred bblue ggreen yyellow wwhite símbolos ponto omarca de círculo xmarca de x marca de marca de linha contínua linha pontilhada traço e ponto linha tracejada Para encerrar uma sessão gráfica devese utilizar o comando close para GNU Octave ou para Matlab close Com Octave encerrar uma sessão gráfica sem o uso de closeplot resulta em perda da conexão entre este e o servidor gráfico gnuplot Os comandos xlabel e ylabel são úteis para adicionar nome aos eixo das abcissas e ordenadas xlabeltítulo do eixo ylabeltítulo do eixo O comando replot atualiza um gráfico até a versão 3150 do GNU Octave Este comando foi substituído por drawnow na versão 38 replot drawnow Para adicionar um título a um gráfico pode ser utilizada a instrução title titletítulo xlinspace11010 yx2 Marcos Marcelino Mazzucco 129 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB plotxy olinha 1 xlabelx ylabely grid titleO grafico replot A instrução hold permite que várias linhas sejam incluídas no mesmo gráfico sem que a existente seja removida holdon holdoff xlinspace1140 yx Marcos Marcelino Mazzucco 130 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB plotxy0yx yx2 holdon plotxy1yx2 yx3 plotxy2yx3 yx4 holdon plotxy3yx4 yx5 holdon plotxyyx5 yx6 plotxyyx6 grid replot Marcos Marcelino Mazzucco 131 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Para eliminar toda a saída de um gráfico podese utilizar o comando clf clf Para criar vários gráficos em uma única janela podese utilizar o comando subplot enquanto para criar uma nova janela usase figure subplotnúmero linhas número colunas índice figurenúmero da janela A instrução clf também restaura o modo de um gráfico por janela clf Ex Criar uma janela com 4 gráficos contendo os gráficos de x2 x3 x4 x5 para valores inteiros de x de 1 a 10 xlinspace11010 y1x2 y2x3 y3x4 y4x5 subplot221 seleciona o quadro 1 de 4 2x2 xlabelx Marcos Marcelino Mazzucco 132 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB ylabely1 titleGrafico 1 plotxy1 olinha 1 subplot222 seleciona o quadro 2 de 4 2x2 xlabelx ylabely2 titleGrafico 2 plotxy2 linha 2 subplot223seleciona o quadro 3 de 4 2x2 xlabelx ylabely3 titleGrafico 3 plotxy3 xlinha 3 subplot224 seleciona o quadro 4 de 4 2x2 xlabelx ylabely4 titleGrafico 4 plotxy4 linha 4 A seguir está a saída gráfica do script anterior executado em Octave 2136 Marcos Marcelino Mazzucco 133 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 197 MANIPULAÇÃO DE DADOS EM ARQUIVOS A forma mais simples de armazenar e recuperar valores de variáveis em arquivos ocorre através das instruções save e load As sintaxes destas instruções são variávelloadnome do arquivo para dados quaisquer loadnome do arquivo para dados gravados com a instrução save savetipo do arquivonome do arquivonome da variável Obs Os parâmetros nome do arquivotipo do arquivo e nome da variável são do tipo literal string tipo do arquivo pode assumir os valores ascii e binary entre outros Exemplo alinspace11010 saveasciiarqtxta clear a loadarqtxt A forma mais flexível de adicionar dados em um arquivo é através das instruções de manipulação direta identificador do arquivofopennome do arquivomodo fprintfidentificador do arquivoformatodados fcloseidentificador do arquivo onde nome do arquivo literal string modo literal string w para escrita e r para leitura identificador do arquivoregistro de dados Exemplo x10510 xyxx2 fidfopendadosmw fprintffid 21f 22f xy fclosefid Será gerado o arquivo dadosm cujo conteúdo pode ser recuperado através de clear abloaddadosm plotab1ab2 Marcos Marcelino Mazzucco 134 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Dados em arquivos podem ser recuperados de formas diversas Por exemplo identificador do arquivofopennome do arquivor fgetlidentificador do arquivo fcloseidentificador do arquivo 198 ATIVIDADES PROPOSTAS PARA PROGRAMAR 1 Desenvolver algoritmos e implementar no GNU Octave para a Resolver a equação dos gases ideais para qualquer variável P VN T b Resolver uma equação do segundo grau c Calcular o determinante de uma matriz quadrada d Gerar uma matriz identidade e Ordenar de forma crescente e decrescente um vetor de números inteiros f Converter medidas de volume massa densidade e temperatura do sistema inglês para o internacional g Determinar o valor inteiro situado entre 10 e 10 que melhor satisfaça a equação x4131x31 760x2445 500x4 050 0000 h Identificar se um número é par ou ímpar i Identificar se um número é múltiplo de outro 2 Escrever uma subrotina única e implementála para converter valores de temperatura entre as escalas Celsius Kelvin Rankine e Farenheit Marcos Marcelino Mazzucco 135 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 20 ATIVIDADES PARA APROFUNDAR OS CONCEITOS Marcos Marcelino Mazzucco 136 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 201 REGRESSÃO LINEAR A regressão linear é um método estatístico que determina quais são os coeficientes de uma reta que melhor representam um conjunto de dados Tratase de um método de ajuste baseado na minimização do quadrado do desvio entre um dado e uma reta intermediária As equações que representam este método são yaxb Onde N Número de pontos A medida da qualidade do ajuste é realizada através do coeficiente de correlação R o qual atesta a melhor qualidade do ajuste quando assume valores próximos de 1 ou 1 Faça um algoritmo o fluxograma e o programa em português estruturado e Octave da regressão linear que determine a melhor reta para os seguintes dados x y 0 09 1 31 2 48 3 72 4 86 5 113 6 127 O algoritmo deve incluir a possibilidade da entrada manual dos dados bem como apresentar a equação da reta e o coeficiente de correlação para a aproximação Marcos Marcelino Mazzucco 137 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 202 EQUAÇÃO DIFERENCIAL Uma equação diferencial ordinária pode ser resolvida numericamente pelo método de Euler com bons resultados para equações sem nãolinearidades fortes Este método se presta a problemas de valor inicial ou seja aqueles onde são conhecidos valores iniciais da função O método consiste nas equações dydxfxy condição inicial x0 y0 Com x0xxN limites y1y0xfx0y0 y2y1xfx1y1 Com x xNx0N onde N número de subintervalos De uma forma genérica yi1yixfxiyi Implemente em Octave um algoritmo para determinar as soluções para a equação dydxxy no intervalo de x0 1 sujeito às condições iniciais x00 y02 para no máximo 10 subintervalos O algoritmo deve apresentar os dados de xi e yi para todos os subintervalos comparando o desvio em relação à solução analítica A solução analítica para esta equação é Condições iniciais x00 y02 Marcos Marcelino Mazzucco 138 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Para x1 y2236 Para x xi 4 2 2 i i x y 203 EQUAÇÃO DIFERENCIAL 2 Aplicar o algoritmo anterior para resolver a equação dydxxy no intervalo 01 sujeito à y01 em x00 Marcos Marcelino Mazzucco 139 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB O FIM DO COMEÇO Este material constitui um apanhado dos conceitos mais importantes de programação para problemas de ciências exatas porém a solução de problemas científicos é muito mais complexa do que as técnicas de programação de computadores O poder de solução está no domínio das ciências envolvidas e no domínio da ferramenta de solução do problema Espero que o domínio de duas das mais importantes ferramentas de solução de problemas GNU Octave e Matlab tenha se iniciado aqui Para o melhor aproveitamento dos software apresentados recomendase um curso de cálculo numérico computacional sem o qual muitas das capacidades existentes não podem ser aproveitadas Este é o fim do começo e a ele se sucedem muitos desafios e descobertas Marcos Marcelino Mazzucco Marcos Marcelino Mazzucco 140 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 21 BIBLIOGRAFIAS FARRER H BECKER C G FARIA E C MATOS H F SANTOS M A MAIA M L Programação Estruturada de Computadores Algoritmos estruturados LTC Livros Técnicos e Científicos 2a edição MANZANO J A N G OLIVEIRA J F Algoritmos Lógica para Desenvolvimento e Programação Editora Érica 7a edição MATLAB Guia do Usuário Makron Books Octave online Documentation wwwoctaveorg Marcos Marcelino Mazzucco 141 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 22 APÊNDICE 1 SOLUÇÕES DAS ATIVIDADES PROPOSTAS 221 FATORIAL Programa para determinar o fatorial de um número Calcular valorfatorialnumero program fatorialnumero clear function ffatorialnumero if remnumero fixnumero0 printfERRO o número g deve ser inteironumero disp fNaN return endif f1 for inumero11 f fi endfor endfunction begin clc numero1 resultado1 numeroinputDeterminar o fatorial de resultadofatorialnumero if isnanresultado printfg d numero resultado disp endif end Nota A função remxy determina o resto da divisão de x por y A função fixx realiza o truncamento de x fix393 NaN é uma constante predefinida que significa Not A Number A função isnanx identifica se x possui algum valor atribuído Na programação em MatLab é requerido que cada função esteja em um arquivo separado com o mesmo nome desta 222 ESTATÍSTICA Algoritmo para determinar a média o desvio padrão a variância e o desvio médio absoluto de um vetor de números reais com no máximo 100 dados program estatistica clear function valormediadados numerodados valor0 for i1numerodados valorvalordadosi endfor valor valornumerodados endfunction function valordesviopadraodados numerodados parte11numerodados1 Marcos Marcelino Mazzucco 142 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB parte20 for i1numerodados parte2 parte2 dadosi2 endfor parte30 for i1numerodados parte3 parte3dadosi endfor parte3 parte32 parte3 1numerodadosparte3 valorparte1parte2parte3 valor valor12 endfunction function valorvarianciadadosnumerodados valor desviopadraodadosnumerodados2 endfunction function valordesviomediodados numerodados mmediadadosnumerodados valor00 for i1numerodados valor valor absmdadosi endfor valor valornumerodados endfunction begin clc vetorzeros1001 numeropontosi0 mdmdpv0 dispMédia Desvio Médio Absoluto Desvio Padrão numeropontosinputNúmero de pontos máx 100 for i1numeropontos printfponto d i vetoriinput endfor clc dispCalculando média mmediavetor numeropontos dispCalculando desvio medio absoluto dmdesviomediovetor numeropontos dispCalculando desvio padrão dpdesviopadraovetor numeropontos dispCalculando variância vvarianciavetor numeropontos printfMédiag m printfDesvio Médiog dm printfDesvio Padraog dp printfVariânciag v end Nota Não esqueça de refazer este algoritmo utilizando uma subrotina que receba os dados e retorne todas as quatro medidas de uma vez otimizando ao máximo a quantidade de cálculos Marcos Marcelino Mazzucco 143 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 223 INTEGRAL Algoritmo para resolver uma integral definida yx3125 usando o método dos trapézios program trapezio clear function valorfx valor x3125 endfunction function valorintegrallimiteinferiorlimitesuperiornumerointervalos hlimitesuperior limiteinferiornumerointervalos integral0 x1limiteinferior x2x1h valor0 dispCalculando integral for i1numerointervalos valor valor 12fx2fx1h x1x2 x2x1h endfor endfunction begin xsxi00 n0 resultado00 dispIntegral pelo Método dos Trapézios xi inputLimite inferior de integração xs inputLimite superior de integração ninputNúmero de subintervalos resultadointegralxixsn disp printfA integral no intervalo gg é g xi xsresultado end A apresentação do dispositivo de saída é Marcos Marcelino Mazzucco 144 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Este problema poderia ser solucionado através de funções polinomiais predefinidas no MatlabOctave como segue program trapezio2 integral de um polinomio begin coeficientespolinomio1 0 0 1251x30x20x31250 eqpolipolyoutcoeficientespolinomiox exibe o resultado integrado coeficientesresultadopolyintegcoeficientespolinomio eqintpolyoutcoeficientesresultadox exibe o resultado integrado x0polyvalcoeficientesresultado2 x1 polyvalcoeficientesresultado3 resultadox1x0 printfA integral de s cc no intervalo 23 é sg eqpoli1013 eqint resultado end A figura a seguir apresenta a solução da integral de x3125 no intervalo 2 3 através da biblioteca polinomial no ambiente de trabalho de Octave A solução analítica da integral de x3125 no intervalo 2 3 é 64125 para a qual a solução pelo método dos trapézios apresenta um erro de 019 Marcos Marcelino Mazzucco 145 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 23 APÊNDICE 2 UNIDADE DATATYPES Programação estruturada com GNU Octave Para fins didáticos Baseada em pascal Autor Marcos M Mazzucco unit datatypes force script function INTEGER for i 1nargout vrval 0 endfor endfunction function DOUBLE for i 1nargout vrval 0 endfor endfunction function REAL for i 1nargout vrval 0 endfor endfunction function STRING for i 1nargout vrval endfor endfunction function BOOLEAN for i 1nargout vrval false endfor endfunction function ARRAYrowscolsatype if nargin1 cols1 atypeDOUBLE endif if nargin2 if isstrcols atypecols cols1 else atypeDOUBLE endif Marcos Marcelino Mazzucco 146 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB endif if strcmpatypeDOUBLEstrcmpatypeREAL for i 1nargout vrval zerosrowscols endfor elseif strcmpatypeSTRING sblankscols for i1rows siblankscols endfor for i 1nargout vrval s endfor elseif strcmpatypeBOOLEAN vrval zerosrowscols else vrval zerosrowscols endif endfunction function COMPLEX for i 1nargout vrval 01i endfor endfunction begin end Marcos Marcelino Mazzucco 147 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB 24 APÊNDICE 3 UNIDADE OCTAVEPASCAL Programação estruturada com GNU Octave Para fins didáticos Baseada em pascal Autor Marcos M Mazzucco unit octavepascal force script uses datatypes function write if nargin1 default endif s for i1nargin argvaarg if strcmptypeinfoargstring sss elseif strcmptypeinfoargscalar ssg endif endfor printfsallvaargs endfunction function writeln if nargin1 default endif s for i1nargin argvaarg if strcmptypeinfoargstring sss elseif strcmptypeinfoargscalar ssg endif endfor ss printfsallvaargs endfunction function rreadlnns if nargin1 if lowernss rinputs else rinput endif else rinput endif endfunction Marcos Marcelino Mazzucco 148 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB function rreadns if nargin1 if lowernss rinputs else rinput endif else rinput endif endfunction begin NL end Marcos Marcelino Mazzucco 149 INTRODUÇÃO ÀS TÉCNICAS DE PROGRAMAÇÃO COM GNU OCTAVE E MATLAB Marcos Marcelino Mazzucco 150