Baixe o app para aproveitar ainda mais
Prévia do material em texto
INTRODUÇÃO À COMPUTAÇÃO Maceió, 2009 SUMÁRIO LISTA DE FIGURAS ................................................................................................. v LISTA DE TABELAS ................................................................................................ vi 1 Introdução...........................................................................................................7 1.1 Motivação .........................................................................................................7 1.2 Histórico e Desenvolvimento dos Computadores...................................................8 1.3 Sistemas de Computação ................................................................................. 12 1.3.1 Arquitetura................................................................................................... 13 1.3.1.1 Unidade de Entrada ................................................................................... 13 1.3.1.2 Memória.................................................................................................... 13 1.3.1.3 Unidade Central de Processamento (CPU) .................................................... 14 1.3.1.3.1 Unidade Lógica e Aritmética..................................................................... 15 1.3.1.3.2 Unidade de Controle................................................................................ 15 1.3.1.4 Unidade de Saída....................................................................................... 15 2 Noções de Lógica e Algoritmos ............................................................................ 15 2.1 Noções de Lógica ............................................................................................ 15 2.2 Algoritmos ...................................................................................................... 16 2.2.1 Conceituação................................................................................................ 16 2.2.2 Refinamentos Sucessivos............................................................................... 18 2.2.3 Programa Computacional .............................................................................. 19 2.3 Linguagens de Programação............................................................................. 19 2.4 Introdução ao MATLAB .................................................................................... 22 2.4.1 Execução do MATLAB.................................................................................... 23 2.4.2 Alguns Comandos Básicos ............................................................................. 23 3 Tópicos Preliminares........................................................................................... 27 3.1 Tipos Primitivos............................................................................................... 28 3.2 Constantes...................................................................................................... 28 3.2.1 Constante Numérica...................................................................................... 28 3.2.2 Constante Lógica .......................................................................................... 28 3.2.3 Constante Literal .......................................................................................... 28 3.3 Variáveis......................................................................................................... 29 3.4 Expressões Aritméticas .................................................................................... 30 3.4.1 Operadores Aritméticos ................................................................................. 31 3.4.2 Prioridades................................................................................................... 32 3.5 Expressões Lógicas.......................................................................................... 33 3.5.1 Operadores Relacionais ................................................................................. 33 3.5.2 Operadores Lógicos ...................................................................................... 34 3.5.2 Prioridades................................................................................................... 36 3.6 Expressões Literais .......................................................................................... 37 3.7 Comando de Atribuição.................................................................................... 40 3.8 Comandos de Entrada e Saída .......................................................................... 40 3.9 Blocos ............................................................................................................ 44 4 Estruturas de Controle ........................................................................................ 44 4.1 Estruturas Seqüenciais ..................................................................................... 44 4.2 Estruturas de Controle de Fluxo........................................................................ 46 4.2.1 Estruturas de Seleção (Condicional) ............................................................... 46 4.2.1.1 Seleção Simples......................................................................................... 46 4.2.1.2 Seleção Composta...................................................................................... 47 4.2.1.2 Seleção Encadeada .................................................................................... 48 4.2.1.4 Seleção de Múltipla Escolha ........................................................................ 49 4.2.1.5 Exercícios.................................................................................................. 49 4.3 Estruturas de Repetição ................................................................................... 51 4.3.1 Estruturas de Repetição Definidas .................................................................. 51 4.3.2 Estruturas de Repetição Indefinidas ............................................................... 54 4.3.2.1 Exercícios.................................................................................................. 55 5 Estruturas de Dados ........................................................................................... 57 5.1 Introdução...................................................................................................... 57 5.2 Variáveis Compostas Homogêneas .................................................................... 57 5.2.1 Variáveis Compostas Homogêneas Unidimensionais......................................... 58 5.2.2 Variáveis Compostas Homogêneas Multidimensionais...................................... 62 5.3 Variáveis Compostas Heterogêneas................................................................... 65 6 Modularização.................................................................................................... 68 6.1 Introdução...................................................................................................... 68 6.2 Módulos (Funções) .......................................................................................... 69 6.3 Argumentos (Parâmetros) de Funções............................................................... 72 6.4 Valores de Retorno de Funções ........................................................................ 74 Referências Bibliográficas ...................................................................................... 80 vLISTA DE FIGURAS Figura 1 – Stonehenge ............................................................................ 8 Figura 2 – Exemplos de ábacos ................................................................ 9 Figura 3 – Régua de cálculo ....................................................................10 Figura 4 – Arquitetura básica de um computador......................................13 Figura 5 – Compilador ............................................................................20 vi LISTA DE TABELAS Tabela 1 – Linguagens de programação...................................................20 Tabela 2 – Prioridades das operações ......................................................37 7 INTRODUÇÃO À COMPUTAÇÃO 1 Introdução Este primeiro capítulo tem por objetivo motivar o leitor para o estudo do tema “Introdução à Ciência da Computação”, apresentar um breve histórico a respeito do desenvolvimento dos computadores, a forma como esses são organizados e a explicação de alguns termos técnicos. 1.1 Motivação Pode-se dizer que o estudo da introdução à computação é o primeiro passo em direção ao conhecimento do mundo da tecnologia e funcionamento dos computadores. O uso de computadores no dia-a-dia tem sido cada vez mais freqüente. Em todas as áreas de estudo, pesquisa e trabalho eles são essenciais. Veja um exemplo simples que serve para ilustrar esta afirmação. Considere que se deseja fazer um levantamento para avaliar qual o melhor aluno do ano de 2005 em uma determinada universidade. Naturalmente, poderíamos pegar as cadernetas escolares de todos os alunos, calcular a média de suas notas e verificar qual aluno obteve a maior média. Isso representa um trabalho muito laborioso, pois a quantidade de informações (dados) a serem levantados é extremamente grande. Mas e se tivermos um computador? Como ele pode ser útil para resolver o nosso problema? Simples. É necessário apenas garantir que todos os dados dos alunos estejam armazenados em um computador e que se possa usar um programa computacional para fazer os cálculos desejados. Em questão de segundos poderíamos ter a resposta desejada. Mas qual programa usar? Existem duas alternativas: uma é comprar um programa comercial (e existem vários) que possa ser utilizado para resolver o problema. A outra é desenvolvermos o nosso próprio programa. O presente curso tem com objetivo fornecer uma base teórica e prática para permitir o aprendizado, capacitando o leitor a desenvolver programas computacionais para resolver os mais diversos problemas do nosso cotidiano, principalmente aqueles relacionados à Engenharia. 8 1.2 Histórico e Desenvolvimento dos Computadores O objetivo deste item é dissertar a respeito da descoberta do computador e a sua evolução ao longo do tempo. Antes de apresentar o que é e como surgiu o computador, define-se aqui o termo “informática”, criado na França por volta de 1962. information automatique = informação automática Ou seja, informática é a ciência que estuda o tratamento automático e racional da informação com uso de equipamentos e procedimentos da área de processamento de dados. Trata do estudo e desenvolvimento de máquinas e métodos para processar informações. As principais funções da informática são: • Desenvolvimento de novas máquinas; • Desenvolvimento de novos métodos de trabalho; • Construção de aplicações automáticas; • Melhoria dos métodos e aplicações existentes. Desde que o homem começou a processar dados, ele tentou construir máquinas que pudessem ajudá-lo em seu trabalho. O computador eletrônico é o resultado dessas tentativas que vêm sendo realizadas através dos tempos. Certamente, o computador é um dos principais produtos da ciência do século XX. Para alguns pesquisadores, Stonehenge é o primeiro computador feito pelo homem. Trata-se de um monumento paleolítico constituído de blocos de pedra de 3 a 6 metros de altura, construído entre 2.600 a.C. a 1.700 a.C., na planície de Salisbury, na Grã-Bretanha. Em 1960 um astrônomo americano (utilizando computador!) mostrou que se tratava de um meio capaz de prever eclipses lunares. Figura 1 – Stonehenge 9 Porém, a maioria dos estudiosos considera o ábaco o primeiro hardware da história da computação. Registros históricos de cerca de 2.000 a.C. comprovam que o ábaco era utilizado no oriente. Consiste de uma tábua com hastes que trespassam contas com formato lenticular com seção transversal hexagonal. Ábaco chinês Ábaco japonês Ábaco russo Figura 2 – Exemplos de ábacos O ábaco japonês é chamado de Soroban e foi trazido da china em 1622. O Soroban começou como um instrumento simples destinado a registrar valores e realizar operações de soma e subtração. Posteriormente, foram desenvolvidas técnicas de multiplicação e divisão; atualmente, já são conhecidas técnicas para extração de raízes (quadrada e cúbica), operação com horas, minutos e segundos e conversão de pesos e medidas. É possível trabalhar com números inteiros, decimais e negativos. O ábaco chegou ao Brasil em 1908 trazido por imigrantes. Sua versão moderna, introduzida em 1953, teve sua técnica de utilização difundida pelo Prof. Fukutaro Kato, em 1956. Em 1621, o matemático inglês William Outgred inventou a régua de cálculo, considerada um dos primeiros dispositivos analógicos de computação. 10 Figura 3 – Régua de cálculo Em 1642/1647, o francês Blaise Pascal conseguiu somar e subtrair utilizando sua máquina, conhecida como Pascalina, por meio de engrenagens mecânicas. Em 1801, o matemático francês Joseph Marie Jacquard consegue armazenar informações em placas perfuradas, para controle de máquinas de tecelagem. A invenção gerou grande temor de desemprego. Em 1820, uma máquina de calcular criada pelo francês Charles Thomas de Colmar vende mais de 1.500 unidades. As Arithmometers, como eram chamadas, são consideradas o primeiro sucesso de vendas no setor. Em 1822, Ada Lovelace, filha do famoso poeta Lord Byron, é contratada pelo inglês Charles Babbage para programar sua então criada máquina diferencial. Ada é considerada a primeira programadora do mundo. Em 1854, George Boole estabelece os princípios binários que seriam utilizados posteriormente como base para o estudo de lógica matemática. Em 1880, Hermann Hollerith, constrói uma máquina de tabulação, utilizada no senso norte-americano. Em 1896, Hermann Hollerith funda a Tabulating Machine Company. Em 1911, Hollerith associa-se a outras empresas e a Tabulating Machine Company passa a ser dirigida por Tomas Watson. Em 1924 nasce a IBM (International Business Machine Corporation), resultado da associação de Hollerith com Watson. Em 1931 o primeiro computador analógico é construído pelo MIT (Massachusetts Institute of Technology). Em 1937, Howard Haiken, professor de matemática de Harvard, convence Tomas Watson da IBM a fabricar o primeiro computador eletromecânico, o MARK I. 11 Em 1939 surgiu o primeiro computador eletrônico digital, o ABC (Atanasoff Berry Computer), que foi apresentado pelo professor de matemática John Atanasoff. Em 1943, a Inglaterra constrói, com o auxílio de Alan Turing, dez computadores Colossus I. Esse equipamento eletrônico digital, a válvulas, foi utilizado para decifrar códigos militares dos alemães. Em 1946 é apresentado o primeiro grande computador eletrônico da época, o ENIAC (Electronic Numeric Integrator Analyser and Calculator). O ENIAC ocupava quase 200m2, pesava 30 toneladas e conseguia resolver5.000 adições por segundo. Em 1950, John von Neumann, Arthur Burks e Hermann Goldstine desenvolvem conceitos de programação e operações por números binários utilizados até hoje. Em 1951, o UNIVAC I, primeiro computador a utilizar os conceitos de von Neumann, é produzido em escala comercial. Tinha 20 m2 e pesava 5 toneladas. Em 1953 é lançado o computador IBM 701. Em 1954 é lançado o IBM 650, maior sucesso de vendas da década. O ano de 1959 marca o fim dos computadores de primeira geração, baseados em válvulas. Assim, a evolução dos computadores pode ser dividida nas seguintes etapas: ¾ Computadores da 1a Geração: y Utilização de circuitos eletromecânicos e válvulas. ¾ Computadores da 2a Geração: y Utilização de transistores (controlam a passagem de corrente) à Redução do tamanho e da potência consumida; à Dispositivos mais robustos e confiáveis. ¾ Computadores da 3a Geração: y Circuitos integrados à Integração de vários transistores em uma única embalagem com a dimensão aproximada de um transistor; à Maior potência de cálculo; à Mais rápidos; à Mais confiáveis; à Menores fisicamente. ¾ Computadores da 4a Geração: y Circuitos integrados em altíssima escala à Integração de milhares de transistores em uma única pastilha. Além da evolução acima, pode-se destacar a evolução das telecomunicações usando a mesma tecnologia. Isso viabilizou o uso de recursos de telecomunicações 12 (internet, por exemplo) aplicados à computação, possibilitando o uso à distância de um computador por um ou vários usuários. 1.3 Sistemas de Computação Um sistema de computação é formado por usuários, software e hardware; cada um desses componentes será definido posteriormente. O objetivo de um sistema de computação é realizar o processamento dos dados, que é a execução de processos sobre o dado original para transformá-lo em uma informação. Software ou programa é a parte lógica que dota o equipamento físico com a capacidade de realizar algum trabalho. O programa nada mais é que uma seqüência de instruções escritas em uma linguagem de programação, informando ao hardware o que fazer em que ordem. Hardware é a parte física de um sistema de computação, ou seja, todos os elementos materiais que o constitui (circuitos eletrônicos, dispositivos mecânicos, elétricos e magnéticos). Existem dois tipos de computadores: os analógicos e os digitais. Um termômetro é um exemplo de funcionamento por analogia, pois a dilatação de mercúrio é análoga à mudança de temperatura. O princípio da analogia também é utilizado em uma régua de cálculo (figura 3), que pode ser considerada como um computador analógico, onde as operações de multiplicação e divisão são executadas simplesmente somando-se ou subtraindo-se a distância medida na régua externa àquela marcada na régua interna deslizante. Um dos primeiros computadores analógicos de grande porte foi construído para prever a altura das marés nos portos ingleses. Os computadores analógicos de hoje são capazes, por exemplo, de simular as forças que atuam numa represa ou as forças que atuam nas asas de um avião a partir da voltagem elétrica. Resumindo, os computadores analógicos são caracterizados por lidarem com grandezas contínuas. Neles, as variáveis do problema são representadas por tensões, que são quantidades físicas contínuas. Ao contrário dos computadores analógicos, que trabalham com grandezas físicas, os computadores digitais são capazes de somar, subtrair, multiplicar, dividir e comparar 13 através de pulsações elétricas que, em última análise, representam os dígitos 0 (ausência de corrente) e 1 (presença de corrente). Os computadores digitais serão o foco deste nosso curso. 1.3.1 Arquitetura Esta seção trata da estrutura de um computador digital. O esquema de um computador digital pode ser representado pela figura 4. Figura 4 – Arquitetura básica de um computador A seguir, são descritos cada componente do computador digital. 1.3.1.1 Unidade de Entrada Esta unidade traduz informação de uma grande variedade de dispositivos em um código que a unidade central de processamento (CPU) é capaz de entender. Em outras palavras, ela é capaz de traduzir números, letras e imagens em pulsos elétricos que são compreensíveis ao computador. Alguns exemplos de unidades de entrada são: teclado, unidades de discos (disquetes e cds, por exemplo), scanners, mouse, leitores ópticos, etc. As unidades de entrada também são conhecidas como periféricos. 1.3.1.2 Memória É o local físico capaz de armazenar os dados e também os programas que irão manipulá-los. Também conhecida como memória RAM (Randon Access Memory). Memória Unidade de Controle Unidade Lógica e Aritmética Unidade de Entrada Unidade de Saída CPU Memória Unidade de Controle Unidade de Entrada Unidade de Saída CPU 14 Geralmente, a memória de alta velocidade é utilizada para armazenar temporariamente dados e programas que estão sendo processados, já que qualquer programa, para ser executado, tem que estar nessa memória. Além disso, as unidades de controle e lógica e aritmética se comunicam com cada um de seus bytes. Essa memória costuma ser chamada de memória principal. Ao menor item de informação binária dá-se o nome de bit. A palavra bit é uma contração de binary digit (dígito binário) significando um dígito que pode assumir um dos dois valores de estados diferentes 0 ou 1, tal qual um dígito decimal pode assumir um dos dez valores 0, 1, 2, ..., 9. Os bits são agrupados de modo a possibilitar ao usuário representar os dados e programas que deseje. Denomina-se byte a um conjunto de bits. Cada byte armazena o equivalente a um caractere. O número de bits que formam um byte não é fixo e dependem exclusivamente da máquina considerada. O mais usual é encontrar os bytes constituídos de 8 bits. A memória do computador é constituída por um conjunto de bits, sendo que o byte recebe um endereço a fim de que os programas possam fazer referência aos seus dados. A capacidade de um computador normalmente é medida pelo tamanho da sua memória. Cada 1024 bytes representam 1 kbyte (quilobyte). Cada 1024 kbytes representam 1 Mbyte (megabyte). 1024 Mbytes representam 1 Gbyte (gigabyte). 1.3.1.3 Unidade Central de Processamento (CPU) A Unidade Central de Processamento de um computador, devido a sua complexidade, é normalmente dividida em duas partes: unidade lógica e aritmética, e unidade de controle. Devido ao desenvolvimento da microeletrônica é possível construir toda uma CPU em uma única pastilha de Silício. Essa pastilha, ou chip, denomina-se microprocessador. Como exemplo, podemos citar INTEL PENTIUM IV, MOTOROLA 6800, INTEL CELERON, etc. Os microprocessadores são classificados pelo comprimento, em bits, da unidade de informação que são capazes de processar de uma só vez. Atualmente, os microprocessadores mais usuais são os de 32 bits. 15 Resumindo, o microprocessador é a unidade central de processamento (CPU) de um microcomputador. A seguir, são descritas as unidades que constituem a CPU. 1.3.1.3.1 Unidade Lógica e Aritmética Nesta unidade são realizados todos os cálculos aritméticos (adição, subtração, multiplicação e divisão) e qualquer manipulação de dados (sejam eles numéricos ou não). 1.3.1.3.2 Unidade de Controle É a unidade responsável pelo “tráfego” de dados. Ela obtém dados armazenados na memória e interpreta-os. Controla a transferência de dados da memória para a unidade lógica e aritmética, da unidade de entrada para a memória e da memória paraa unidade de saída. 1.3.1.4 Unidade de Saída Os dados processados são convertidos, por esta unidade, de impulsos elétricos em palavras ou números que podem ser disponibilizados ao usuário final. Exemplos dessas unidades são o vídeo (monitor), impressoras, unidades de disco (disquetes e cds, por exemplo), etc. Assim como as unidades de entrada, as unidades de saída também são conhecidas como periféricos. 2 Noções de Lógica e Algoritmos Para compreender melhor o processo de criação de programas computacionais, é necessário entender os conceitos de lógica de programação e algoritmos, que serão descritos nas seções seguintes. 2.1 Noções de Lógica Lógica de programação significa o uso correto das leis do pensamento e de processos de raciocínio para a produção de soluções logicamente válidas e coerentes, que resolvam com qualidade os problemas que se deseja programar. Ou seja, é a técnica de encadear pensamentos para atingir determinado objetivo. 16 A Lógica de programação pode ser representada em qualquer uma das inúmeras linguagens de programação, com a utilização dos algoritmos. O aprendizado dessa técnica é necessário para quem deseja trabalhar com o desenvolvimento de sistemas e programas computacionais. 2.2 Algoritmos 2.2.1 Conceituação Algoritmo é uma seqüência ordenada e sem ambigüidades de passos finitos que visam atingir um objetivo bem definido e, conseqüentemente, levam à solução de um problema. Algoritmo não é a solução do problema. Algoritmo é o conjunto de passos ou ações (caminhos) que levam à solução de um dado problema. Em um algoritmo é importante salientar que: 9 Deve descrever exatamente as instruções que devem ser executadas e em que seqüência. 9 A ordem dos passos deve ser precisamente determinada. 9 Eficiente: resolve o problema com um mínimo de recursos. 9 Eficaz: consegue resolver o problema em qualquer situação. Todas as situações de exceção que possam alterar o comportamento do algoritmo devem ser especificadas e tratadas. Existem várias formas de representar os algoritmos, como, por exemplo: descrição narrativa, fluxograma ou diagrama de blocos, pseudocódigos etc. O exemplo abaixo ilustra o uso de um algoritmo do tipo descrição narrativa para resolver um dado problema. Exemplo 1: Problema: Deseja-se falar com alguém através de um telefone público. Como proceder? Solução: Seguir os passos descritos no telefone (algoritmo) 17 1 – Retirar o telefone do gancho; 2 – Esperar o sinal; 3 – Colocar o cartão; 4 – Discar o número; 5 – Falar ao telefone; 6 – Colocar o telefone no gancho; 7 – Retirar o cartão. O algoritmo é exatamente esta seqüência de passos que foi utilizado para resolver o problema proposto. É como se fosse ensinar uma máquina a fazer alguma tarefa específica. Normalmente, existem vários caminhos que levam à solução de um problema. Podemos concluir, então, que existem diversos algoritmos que podem ser utilizados para encontrar uma solução. O aprendizado de algoritmos não é uma tarefa muito fácil. Só conseguimos utilizá-lo racionalmente através de muitos exercícios práticos. Exercício 1: Algoritmo para o final de semana 1 – Ver a previsão do tempo; 2 – Se fizer sol ir à praia; Senão Estudar; 3 – Almoçar; 4 – Ver televisão; 5 – Dormir. Exercício 2: Algoritmo para fazer uma prova 1 – Ler a prova; 18 2 – Pegar a caneta; 3 – Enquanto houver questão em branco e enquanto o tempo não terminou faça Se souber fazer a questão Resolvê-la; Senão Pular para a próxima; 4 – Entregar a prova. 2.2.2 Refinamentos Sucessivos Um algoritmo é considerado completo se os seus comandos forem do entendimento do seu destinatário. Num algoritmo, um comando que não for do entendimento do destinatário terá de ser desdobrado em novos comandos, que constituirão um refinamento do comando inicial. Por exemplo, o algoritmo para trocar uma lâmpada queimada poderia ser: 1 – Remova a lâmpada queimada. 2 – Coloque uma lâmpada nova. Detalhando ou refinando os passos: 1.1 – Coloque uma escada embaixo da lâmpada queimada. 1.2 – Suba na escada até alcançar a lâmpada queimada. 1.3 – Gire a lâmpada queimada no sentido anti-horário até que ela se solte. 2.1 – Escolha uma lâmpada nova de mesma potência da queimada. 2.2 – Posicione a lâmpada nova no soquete. 2.3 – Gire a lâmpada no sentido horário até que ela se firme. 2.4 – Desça da escada. 2.5 – Guarde a escada. 19 Se um comando de um refinamento for um tanto vago, ele poderá, por sua vez, ser desdobrado em novos comandos, produzindo-se o refinamento de um refinamento, e assim sucessivamente. 2.2.3 Programa Computacional É um algoritmo escrito em uma linguagem computacional (C, Fortran, Pascal, MATLAB etc). É a tradução do algoritmo para uma linguagem que será interpretada pelo computador. O mais importante de um programa computacional é a sua lógica, o raciocínio utilizado para resolver o problema (ou seja, o algoritmo). 2.3 Linguagens de Programação Para armazenar um algoritmo na memória do computador e para que ele possa, em seguida, comandar as operações a serem executadas, é necessário que ele seja programado, ou seja, transcrito para uma linguagem que o computador possa “entender” direta ou indiretamente. Os computadores só podem executar diretamente os algoritmos expressos em linguagem de máquina, que é um conjunto de instruções capazes de ativar diretamente os dispositivos eletrônicos do computador. Essa linguagem tem vários inconvenientes para os humanos: • Diferente para cada tipo de computador, pois depende da sua arquitetura; • Extremamente rudimentar; • Expressa em forma numérica, tornando-se pouco expressiva; • Manipulação dos dados na memória. Para suprir esses problemas, foram desenvolvidas linguagens em que a programação é feita através de uma notação matemática e de algumas palavras reservadas. As linguagens de programação são bem mais simples e podem ser facilmente entendidas e utilizadas pelos usuários do computador. Os programas escritos nessas linguagens são traduzidos para a linguagem de máquina através de um programa especial chamado Compilador. 20 Linguagem de Programação Linguagem de Máquina Compilador Linguagem de Programação Linguagem de Máquina Compilador Figura 5 – Compilador Como exemplo de linguagens de programação, podemos citar o Fortran, C, C++, Pascal, Cobol, MATLAB etc. O MATLAB, cujos detalhes serão descritos nas seções seguintes, tem uma característica bem particular. Ele não só incorpora as características de uma linguagem de programação, mas também do compilador. Isso será visto com mais detalhes na seqüência deste curso. A tabela 1 apresenta uma genealogia de várias linguagens de programação. Observa-se que o ano associado a cada linguagem pode significar os anos do projeto da linguagem, da sua implementação ou da sua primeira descrição publicada. Tabela 1 – Linguagens de programação Linguagem Ano Criador Linguagemoriginária Objetivo FORTRAN 1954-57 J. Backus Computação numérica ALGOL 60 1958-60 Comitê FORTRAN Computação numérica COBOL 1959-60 Comitê Processamento de dados de negócios LISP 1956-62 J. McCarthy Computação simbólica BASIC 1964 J. Kemeny and T. Kurtz FORTRAN Educacional SIMULA 67 1967 O. -J. Dahl ALGOL 60 Simulação Algol 68 1963-68 Comitê ALGOL 60 Objetivos gerais Pascal 1971N. Wirth ALGOL 60 Educacional PROLOG 1972 A. Colmerauer Inteligência artificial C 1972 D. Ritchie Algol 68 Programação de sistemas Pascal atual 1975 P. Brinch Hansen Pascal Programação concorrente Ada 1979 J. Ichbiah Pascal SIMULA 67 Objetivos gerais Sistemas embutidos Smalltalk 1971-80 A. Kay SIMULA 67LISP Computação pessoal C++ 1984 B. Stroutrup C SIMULA 67 Objetivos gerais 21 Tabela 1 – Linguagens de programação Linguagem Ano Criador Linguagemoriginária Objetivo Eiffel 1988 B. Meyer SIMULA 67 Objetivos gerais Java 1995 SUN Microsystems C++ Computação em rede Algumas observações podem ser feitas a respeito das linguagens apresentadas na tabela 1. As linguagens FORTRAN e ALGOL 60 foram desenvolvidas como ferramentas para resolver problemas científicos numéricos (sistemas de equações, por exemplo), ou seja, problemas envolvendo computação complexa e dados relativamente simples. COBOL foi desenvolvido como uma ferramenta para resolver problemas de processamento de dados de negócios, ou seja, problemas envolvendo computação simples e grandes quantidades de dados estruturados, como por exemplo, uma aplicação de folha de pagamento. A exceção do ALGOL 60 – que originou outras linguagens, como Pascal, mas não sobreviveu aos dias atuais –, FORTRAN ainda está entre as linguagens de programação mais utilizadas. As razões para este sucesso tão longo podem ser: a relutância dos usuários em mudar para linguagens mais novas, por causa de necessidade de compatibilidade com aplicações existentes ou simplesmente por medo da mudança; e o fato de que essa linguagem tem evoluído: FORTRAN 66, FORTRAN 77 e FORTRAN 90. SIMULA 67, um sucessor da linguagem ALGOL 60, introduziu o conceito de classe, um esquema de modularização que pode agrupar um conjunto de rotinas relacionadas e estruturas de dados. Classes podem ser organizadas como hierarquias de especialização crescente. O conceito de classe influenciou a maioria das linguagens desenvolvidas após o SIMULA 67, tais como: C++, Smalltalk, Java e Eiffel. A linguagem de programação Pascal também obteve muito sucesso. Apesar de ter sido concebida inicialmente como uma ferramenta para o ensino de programação estruturada, houve uma rápida expansão de interesse em Pascal com o advento de computadores pessoais de baixo custo. A principal vantagem da linguagem é sua simplicidade. Também por razões de simplicidade, Basic é outra linguagem que foi desenvolvida no meio dos anos 60 e que foi muito popular. Melhorias recentes, como 22 Visual Basic, promoveram facilidades de alto nível para o rápido desenvolvimento de aplicações interativas baseadas no ambiente windows. A linguagem de programação C, desenvolvida no início dos anos 70, é hoje uma das linguagens mais utilizadas por causa de sua potencialidade e eficiência para programação de sistemas. A versão atual de Ada apresentada em 1995, Ada 95, incorpora várias melhorias sobre a versão original, em particular, suporte para programação orientada a objetos. As origens da programação orientada a objetos remontam à linguagem de programação Simula 67. Porém, este paradigma só ficou popular por causa do sucesso do Smalltalk, no final dos anos 70, e do C++. A linguagem de programação C++ teve êxito na implantação de características de orientação a objetos em uma linguagem de sucesso e amplamente acessível como C. Isto permitiu que muitos programadores migrassem de um paradigma de programação convencional para outro considerado melhor. Eiffel é outra linguagem orientada a objetos. C++ parece estar ganhando aceitabilidade crescente como uma linguagem de programação para fins diversos, primeiro porque suporta programação orientada a objetos e segundo porque não requer o abandono de métodos convencionais. Uma direção importante para novos desenvolvimentos está na área de computação em rede. Java, derivado de C++ suportando mobilidade de código na Internet, pode ser visto como o ponto inicial de uma nova geração de linguagens de programação. Por fim, é importante dizer que a escolha da melhor linguagem depende da aplicação. É preciso aprender a lidar com uma variedade de linguagens e ser capaz de migrar de linguagem a linguagem quando necessário, ou seja, quando a aplicação mudar. As linguagens evoluem e novas aparecem quando novas necessidades de aplicação emergem. 2.4 Introdução ao MATLAB O MATLAB é um programa que incorpora duas características básicas essenciais. A primeira refere-se ao fato dele possuir uma “linguagem de programação” que pode ser usada para desenvolver programas computacionais. A segunda está relacionada com o fato de ser um programa de computação numérica, podendo ser usado para 23 resolver não só operações matemáticas complexas, mas também auxiliar na solução de problemas das mais diversas áreas, incluindo a Engenharia. Este curso dá ênfase ao uso do MATLAB como “linguagem de programação”, permitindo a construção de programas computacionais para a solução dos mais diversos tipos de problemas. Na realidade, será visto uma noção geral e superficial do MATLAB como um todo. Àqueles que têm um interesse maior no seu aprendizado, recomenda-se um estudo mais aprofundado das referências indicadas. 2.4.1 Execução do MATLAB O MATLAB possui basicamente duas áreas de trabalho: a janela principal, onde é realizado o gerenciamento do MATLAB (e de suas tarefas); e a janela de comandos que é o principal local de interação com o programa. 2.4.2 Alguns Comandos Básicos Comando de Espera • >> Finalização dos comandos • <Enter> Exemplo 01: >> 5 * 3 + 4 ans = 19 Nota-se que o MATLAB funciona como calculadora (executa matemática elementar). 24 Exemplo 02: >> a = 5 >> b = 3 >> c = 4 >> a * b + c ans = 19 Neste exemplo, = é o comando de atribuição, e a, b, e c são variáveis. Esses detalhes serão vistos na próxima seção. Uso do ponto e virgula Exemplo 03: uso do ponto e vírgula >> a = 5; >> b = 3; >> c = 4; >> a*b + c ans = 19 Limpando a tela Exemplo 04: limpando a tela >> clc Esse comando não remove as variáveis criadas. Elas continuam existindo. Verificação de variáveis 25 Exemplo 05: como verificar quais variáveis estão sendo usadas >> who ans b a c Visualização de variáveis Exemplo 06: como visualizar os valores armazenados em cada variável >> a a = 5 Outros comandos Exemplo 07: outros comandos Usar teclas <K ou L> Comentários • Usar o caractere % Exemplo 08: >> % a variável b tem valor inicial = 5 >> b = 5; Configuração de Janelas • Menu View 26 o Passo 1: Selecionar Desktop Layout / Default; o Passo 2: Desselecionar Command History. • Comando Clear o Apagar uma variável específica; o Apagar todas as variáveis. Exemplo 9: >> clear b >> b >> clear Comandos Save/Open • Salvar e ler os dados e informações digitadas. Arquivos M de Comandos São arquivos usados em problemas mais complexos. São arquivos de texto simples. O Seu processamento é feito através da sua execução pelo MATLAB usando, para isso, o Menu File/New (M-File). Exemplo 10: arquivo M % arquivo M – exemplo a = 4; b = 5; c = 3; a * b + c Observações importantes: • Salvar no diretório de trabalho (na janela de comandos do MATLAB); Erro27 • Executar: >> <nome do arquivo> ou RUN. Funções de Entrada e Saída Comandos usados para fornecer dados ao programa computacional ou imprimir resultados na tela do computador. • input: Entrada de dados pelo teclado Exemplo 11: >> a = input(‘Escreva o numero a: ’); >> b = input(‘Entre com um nome: ’, ‘s’); • disp: Imprime na tela um valor Exemplo 12: arquivo M a = input(‘a: ’); b = input(‘b: ’); c = input(‘c: ’); d = a*b + c; disp(d); 3 Tópicos Preliminares Esta seção descreve os principais tópicos preliminares usados na elaboração de programas computacionais. Esses tópicos serão apresentados e inseridos dentro do contexto da linguagem de programação MATLAB, adotada neste curso. Deve-se dedicar atenção especial a este capítulo, pois ele contém os fundamentos necessários para a compreensão dos seguintes. RUN 28 3.1 Tipos Primitivos São os tipos básicos usados para armazenar as informações relacionadas aos dados utilizados pelo programa computacional. Podem ser constantes ou variáveis, como podem ser vistos a seguir. 3.2 Constantes Um dado é dito constante quando ele não sofre alterações durante o decorrer do tempo, ou seja, seu valor é constante desde o início até o final da execução do programa computacional. Uma constante pode ser um número, um valor lógico ou uma seqüência de caracteres quaisquer com algum significado para o problema em estudo. Conforme o seu tipo, a constante é classificada como sendo numérica, lógica ou literal. 3.2.1 Constante Numérica A representação de uma constante numérica é feita no sistema decimal, podendo ser um número com parte fracionária ou não. Ex.: 25 3.14 7.8E3 {7.8 x 103} 2.5E-3 {2.5 x 10-3} 3.2.2 Constante Lógica É um valor lógico, isto é, que só pode ser falso ou verdadeiro, usado em proposições lógicas, conforme será visto mais adiante. 3.2.3 Constante Literal Uma constante deste tipo pode ser qualquer seqüência de caracteres (letras, dígitos ou símbolos especiais) com algum significado para o problema em estudo. Ex.: ‘Francisco P.A. Almeida’ ‘12345’ ‘*A!B?-’ ‘15/05/2006’ 29 Nota-se que um numeral escrito como literal é considerado como uma seqüência de dígitos, e não como uma constante numérica. 3.3 Variáveis Variável é um espaço (endereço) na memória principal do computador usada para armazenar um determinado tipo de dado. A uma variável, associa-se um nome que serve como referência ao dado armazenado nesse espaço na memória. O conteúdo de uma variável pode ser de diversos tipos: numérico (inteiro e real), caractere, lógico, e outros. Normalmente, o estudo de algoritmos trabalha com os tipos acima citados. Na maioria das linguagens de programação, as variáveis precisam ser explicitamente declaradas. Na declaração de uma variável, o seu tipo e seu nome devem ser obrigatoriamente especificados. Quando uma declaração de variável é encontrada no programa, reserva-se um espaço na memória para armazenar um dado tipo da variável e associa-se o nome da variável a este espaço. Exemplo 01 – Declaração de variáveis inteiro: a; real: x; caracter: s; logico: l; a = 5; x = 8.34; s = ‘c’; l = VERDADEIRO; Deve-se observar que na linguagem MATLAB, não existe uma diferença entre números inteiros e reais. Eles são tratados de uma mesma forma como variáveis numéricas. Além disso, o MATLAB não requer a declaração prévia dessas variáveis. Isso é feito implicitamente quando a variável está sendo usada pela primeira vez no programa computacional. 30 Exemplo 02 – Variáveis no MATLAB a = 5; % variável numérica b = 8.35; % variável numérica s = ‘c’; % caractere l = 1; % variável lógica v = ‘casa’; % seqüência de caracteres (string) As seguintes regras básicas devem ser atendidas no uso de variáveis no MATLAB. • Palavra única (sem espaços); • Maiúscula ≠ Minúscula; • Tamanho máximo = 31 caracteres; • Nome deve ser iniciado com letra; • Palavras-chave (reservadas da linguagem) não podem ser usadas. Exemplo 03: >> function = 8 Exemplo 04: Detalhe interessante >> A = ‘1’; % caractere >> B = 1; % valor numérico 1 % A e B são diferentes 3.4 Expressões Aritméticas Expressões aritméticas são aquelas que cujos operadores são aritméticos e os operandos são constantes e/ou variáveis do tipo numérico. Os operadores permitem combinar variáveis e constantes, formando uma expressão que pode ser avaliada e resultar em um valor. O conjunto de operações básicas adotado é o que se conhece da matemática, ou seja: Erro: function é uma palavra-chave 31 adição subtração multiplicação divisão potenciação radiciação Observação: não é permitido omitir o operador de multiplicação, o que é comum nas expressões matemáticas. Isto evita confusão quanto aos nomes de variáveis, pois numa expressão da forma AB+C, como saber se AB é o nome de uma variável ou a multiplicação de entre os conteúdos de duas variáveis, cujos nomes são A e B? 3.4.1 Operadores Aritméticos Conjunto de símbolos que representam as operações básicas da matemática. Os tipos básicos usados no MATLAB são: Soma + Subtração – Multiplicação * Divisão / Observação: por uma questão de uniformidade, na elaboração de algoritmos, não é permitido o uso de outros símbolos para as operações acima, a exemplo de “x” e “÷” para multiplicação e divisão, respectivamente. Além destes, existem outros operadores importantes que podem ser usados na elaboração de programas computacionais. Potenciação ^ Resto de divisão mod(x,y) Radiciação sqrt(x) Outros operadores serão apresentados ao longo do curso. 32 Exemplo 06: 2^3 8 Exemplo 07: mod(5,3) 2 Exemplo 08: sqrt(9) 3 Exemplo 08: >> c = 5 + 3; Ou >> a = 3; >> b = 1; >> c = 3 + a*b; Exemplo 09: >> a = ‘teste’ >> b = a + 2 3.4.2 Prioridades Existe uma ordem que define a precedência (hierarquia) entre os operadores aritméticos, como pode ser visto na tabela abaixo: Parênteses mais internos ^, sqrt *, /, mod +, - Erro: não é uma expressão 33 Exemplo 10: 5 + 9 + 7 + 8/4 5 + 9 + 7 + 2 23 Exemplo 11: 1 + 5 + (2 + 3) * 4 1 + 5 + 5 * 4 1 + 5 + 20 26 3.5 Expressões Lógicas É comum nos algoritmos surgirem situações em que a execução de uma ação, ou seqüência de ações, está sujeita a certa condição. Essa condição é representada no texto do algoritmo por meio de uma expressão lógica. Assim, expressões lógicas são aquelas cujos operadores são lógicos ou relacionais e cujos operandos são relações, constantes e/ou variáveis do tipo lógico. 3.5.1 Operadores Relacionais Os operadores relacionais são usados para realizar comparações entre dois valores do mesmo tipo. Esses valores podem ser constantes, variáveis ou expressões aritméticas. O resultado produzido por um operador relacional é sempre um valor lógico. Como na linguagem C, no MATLAB não existe explicitamente o operador lógico VERDADEIRO ou FALSO. Se o resultado de uma comparação for falso, produz o valor zero; caso contrário, valor um. Os operadores relacionais são conhecidos da Matemática, a saber: = igual a < menor que ≠ diferente de ≥ maiorque ou igual a > maior que ≤ menor que ou igual a Os operadores relacionais do MATLAB são: 34 < Menor que <= Menor que ou igual a > Maior que >= Maior que ou igual a == Igual a ~= Diferente de Exemplo 12: 2 * 4 == 24 / 3 8 == 8 1 Exemplo 13: >> vf = (4*5+3) + 4 == 20/4 + 15; >> vf vf = 0 Exemplo 14: A = 3; B = 2; (A + B) > 3 3.5.2 Operadores Lógicos A Álgebra das Proposições define três conectivos usados na formação de novas proposições a partir de outras já conhecidas. Estes conectivos são os operadores nas expressões lógicas, a saber: e – para a conjunção ou – para a disjunção não – para a negação Cuidado! Expressão Relacional 35 A conjunção de duas proposições é verdadeira se e somente se ambas as proposições são verdadeiras. A disjunção de duas proposições é verdadeira se e somente se, pelo menos uma delas for verdadeira. Dada uma proposição p qualquer, uma outra proposição, chamada negação de p, pode ser formada escrevendo-se “É falso que” antes de p ou, se possível, inserindo a palavra “não” em p. O resultado obtido de uma expressão lógica é sempre um valor lógico (V ou F). Os operadores lógicos são utilizados na formação de proposições lógicas compostas. No MATLAB, tais operadores são representados pelos seguintes comandos: & e | ou ~ não Exemplo 15: (Tabelas-Verdade) Negação A Não A Falso Verdadeiro Verdadeiro Falso Conjunção A B A & B F F F F V F V F F V V V Disjunção Não-Exclusiva A B A ou B F F F 36 F V V V F V V V V Sejam p e q proposições, as tabelas-verdade podem ser apresentadas resumidamente como: p q p e q p ou q não p F F F F V F V F V V V F F V F V V V V F Exemplo 15: 2 < 5 & 15/3 == 5 v & v v 2 < 5 | 15/3 == 5 v | v v 2 < 5 | (~(15/3==5)) v | (~v) v | f v 3.5.2 Prioridades É possível ter mais de um operador lógico na mesma expressão. Em alguns casos, conforme os valores envolvidos, a ordem em que são efetuadas as operações lógicas afeta o resultado final. Assim, igualmente ao que acontece nas expressões aritméticas, também existe uma relação de prioridade entre os operadores lógicos. A 37 tabela 2 apresenta as prioridades entre todos os operadores conhecidos, visto que podem estar presentes na mesma expressão lógica. Tabela 2 – Prioridades das operações Prioridade Operações 1a aritmético 2a relacional 3a não 4a e 5a ou Também nas expressões lógicas, vários níveis de parênteses podem ser utilizados com a finalidade de estabelecer uma ordem de execução entre os operadores lógicos. 3.6 Expressões Literais Uma expressão literal é aquela formada por operadores literais e operandos que são constantes e/ou variáveis do tipo literal. Supondo que A e B são variáveis literais, a operação de concatenação fornece como resultado um único literal formado pelo conteúdo de A seguido do conteúdo de B. No MATLAB, isso é feito da seguinte forma: Exemplo 16: >>txt=’Resultado’; >>txt1=[txt ‘ da Prova’]; % Concatenação horizontal >>txt1=strcat(txt,' da Prova') txt1 = Resultado da Prova 38 Exemplo 17: >>txt=’Resultado’; >>txt1=[txt; ‘ da Prova’] % Concatenação vertical A concatenação vertical com sinal ‘;’só foi possível porque as duas cadeias de caracteres possuem o mesmo tamanho. Cadeias de caracteres com números diferentes de letras não podem ser concatenadas com ‘;’: Exemplo 18: >> txt1=[txt; 'da Prova'] ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns. Nesse caso, deve-se usar a função strvcat, que executa a concatenação, ajustando os tamanhos das cadeias de caracteres com a inclusão de espaços. Exemplo 19: >> txt1=strvcat(txt, 'da Prova') txt1 = Resultado da Prova Além da concatenação de literais, é comum a existência de outras operações desta natureza. Por exemplo, no MATLAB, a função numel informa o comprimento do literal, ou seja, o número de caracteres. Exemplo 20: >> numel(txt) ans = 9 39 É possível identificar qualquer caractere de um literal. Exemplo 21: >> txt(1) ans = R >> n=numel(txt); >> txt(n) ans = o O símbolo ‘:’ define intervalos de indexação. Exemplo 22: >> txt(1,1:2) ans = Re >> txt(1,3:5) ans = sul >> txt(1,6:7) ans = ta >> txt(1,8:9) ans = do A palavra-chave ‘end’ indica fim de intervalo. Exemplo 23: >> txt(1,6:end) ans = tado 40 3.7 Comando de Atribuição Permite fornecer (atribuir) um valor a uma variável. O comando utilizando para definir esse operador é =. Exemplo 24: >> A = 5; >> B = 4; >> C = A+mod(A,B); Deve-se observar que à esquerda do comando de atribuição deve existir apenas uma variável. 3.8 Comandos de Entrada e Saída Os algoritmos necessitam da entrada de dados para que possam efetuar as operações e cálculos a fim de alcançar um resultado desejado (saída de dados). Os comandos de entrada e saída são as ferramentas que determinam o momento da entrada dos dados para o programa e a saída dos resultados obtidos pelo computador. A finalidade da entrada de dados é atribuir o dado a ser fornecido pelo usuário à variável identificada. Nos algoritmos, pode-se utilizar a palavra “leia” para a leitura de variáveis. leia (x1, x2, x3, ..., xn) onde x1, x2, x3, ..., xn são variáveis, lidas na mesma linha. Exemplo: leia (A); leia (altura, peso); No MATLAB, a associação de um valor a uma variável pode ser feita, basicamente de 3 maneiras, a depender de onde e como a variável é definida: 41 ¾ A variável é definida e associada no editor de programas. Exemplo 1 prova_escrita=8; prova_pratica=9; media=(prova_escrita+prova_pratica)/2 ¾ A variável é definida e associada na janela de comandos. Exemplo 2 media=(prova_escrita+prova_pratica)/2 >> prova_escrita=8; >> prova_pratica=9; >> ex2 media = 8.5000 ¾ A variável é definida no editor de programas, mas um valor específico é atribuído na janela de comandos quando o programa é executado. Exemplo 3 prova_escrita=input('Prova escrita= '); prova_pratica=input('Prova pratica= '); media=(prova_escrita+prova_pratica)/2 Para esse último caso, o comando “input” é utilizado para criar a variável. A forma do comando “input” é: nome_da_variavel=input(‘mensagem que é mostrada na janela de comandos’) A finalidade da saída de dados é exibir o conteúdo da variável identificada. Mostrar a resposta do problema. A palavra-chave “escreva” é utilizada nos algoritmos. 42 escreva (x1, x2, x3, ..., xn); Exemplo: escreva (A); escreva (‘Altura = ’, altura, ‘metros’); escreva (‘Você tem ’, peso, ‘kilos’); No MATLAB, dois comandos são muito usados para a saída de dados: “disp” e “fprintf”. O comando “disp” mostra a saída na tela, enquanto que o comando “fprintf” pode ser usado para mostrar a saída na tela ou salvar a saída em um arquivo. O comando “disp” é usado para mostrar os elementos de uma variável sem mostrar o nome da variável, e para mostrar texto. O formato do comando “disp” é: disp (nome de uma variável) ou disp(‘texto’) Apenas uma variável pode ser mostradaem um comando ‘disp’. Exemplo 4 prova_escrita=input('Prova escrita= '); prova_pratica=input('Prova pratica= '); media=(prova_escrita+prova_pratica)/2; disp(media); O comando ‘fprintf’ pode ser usado para mostrar texto e dados na tela ou para salva-los em um arquivo. Com esse comando (diferentemente do comando ‘disp’) a saída pode ser formatada. A utilização do comando ‘fprintf’ para mostrar texto tem a seguinte forma: fprintf (‘texto’) 43 Exemplo 5 prova_escrita=input('Prova escrita= '); prova_pratica=input('Prova pratica= '); media=(prova_escrita+prova_pratica)/2; fprintf('Media= '); disp(media); Obs.: O comando ‘fprintf’ não inicia uma nova linha. Outros comandos podem ser utilizados junto com o comando ‘fprintf’: \n começa uma nova linha; \b Backspace; \t tabulação horizontal A utilização do comando ‘fprintf’ pode ser feita para mostrar uma mistura de texto e dados numéricos. Isso acontece, por exemplo, da seguinte forma: fprintf(‘texto % 5.2f texto adicional’, nome da variável); onde o símbolo ‘%’ marca onde o número entra no texto; no exemplo, ‘5.2f’ é a formatação da variável, no caso, são 5 dígitos, com 2 casas decimais e formatação com ponto fixo. Outros exemplos são: e notação exponencial com letra minúscula; E notação exponencial com letra maiúscula; f notação com ponto fixo; i inteiro. Exemplo 6 prova_escrita=input('Prova escrita= '); prova_pratica=input('Prova pratica= '); media=(prova_escrita+prova_pratica)/2; fprintf('\nMedia=%6.2f',media); 44 O comando ‘fprintf’ permite inserir mais de uma variável dentro do texto: fprintf(‘texto %...%...’, variável1,variável2); 3.9 Blocos Um bloco pode ser definido como um conjunto delimitado de ações a serem executadas. Para delimitar um bloco em um algoritmo, são utilizados delimitadores: início fim 4 Estruturas de Controle Na construção de algoritmos, utilizamos os conceitos de: 9 variáveis 9 constantes 9 atribuições 9 operadores e expressões aritméticas, lógicas e relacionais 9 comandos que traduzem esses conceitos de forma a representar o conjunto de ações desejadas. Para que esse conjunto de ações se torne viável, é necessário estabelecer o fluxo de execução do algoritmo. Isso é possível a partir do uso das estruturas básicas de controle do fluxo de execução e das combinações entre elas, permitindo a criação de algoritmos e programas computacionais usados na solução dos problemas. Essas estruturas são apresentadas na presente seção. 4.1 Estruturas Seqüenciais Correspondem à execução do conjunto de ações primitivas em uma seqüência linear de comandos de cima para baixo e da esquerda para direita (ou seja, na mesma ordem em que foram escritas). 45 Exemplo 01: Calcular a média aritmética de quatro notas semestrais quaisquer fornecidas por um aluno. N1 = input(‘Entre com a nota 1: ’); N2 = input(‘Entre com a nota 2: ’); N3 = input(‘Entre com a nota 3: ’); N3 = input(‘Entre com a nota 4: ’); MA = (N1+N2+N3+N4)/4; disp(‘A media e: ’); disp(MA); Neste exemplo, deve-se observar que o fluxo de execução é de cima para baixo, da esquerda para a direita. Exemplo 02: Fazer um programa que leia os coeficientes de uma equação do primeiro grau do tipo y = Ax + B e calcule a sua raiz. Imprimir o resultado na tela (questão da lista). A = input(‘Coeficiente A: ‘); B = input(‘Coeficiente B: ‘); x = -B/A; disp(‘A raiz e: ‘); disp(x); Exemplo 03: O cálculo do ponto de interseção entre duas retas pode ser obtido igualando-se as suas equações. Baseado nessa informação, fazer um programa que leia os coeficientes das equações das retas e calcule o ponto de interseção. As retas são definidas pelas equações y = Ax+B e y = Cx + D. Imprimir o resultado. A = input(‘Coeficiente A: ‘); B = input(‘Coeficiente B: ‘); C = input(‘Coeficiente C: ‘); D = input(‘Coeficiente D: ‘); x = (D-B)/(A-C); y = Ax + B; disp(‘Coordenada X: ‘); disp(x); disp(‘Coordenada Y: ‘); disp(y); Exemplo 04: Fazer um programa para calcular a norma do vetor x = (x1, x2, x3), onde os coeficientes devem ser lidos. x1 = input(‘Coeficiente 1: ‘); x2 = input(‘Coeficiente 2: ‘); x3 = input(‘Coeficiente 3: ‘); n = sqrt(x1*x1 + x2*x2 + x3*x3); disp(‘A norma e: ‘); disp(n); Ax+B = Cx + D; (A-C)x=(D-B) x=(D-B)/(A-C) y=Ax+B 46 4.2 Estruturas de Controle de Fluxo As estruturas de controle de fluxo são fundamentais para qualquer linguagem de programação. São estruturas que alteram o fluxo de execução do programa. Sem elas só haveria uma maneira do programa ser executado: de cima para baixo comando por comando. Não haveria condições, repetições ou saltos. A linguagem MATLAB possui diversos comandos de controle de fluxo. É possível resolver todos os problemas sem utilizar todas elas, mas deve-se notar que a elegância e facilidade de entendimento de um programa dependem do uso correto das estruturas nos locais certos. 4.2.1 Estruturas de Seleção (Condicional) Essas estruturas permitem a escolha de um grupo de comandos a ser executado quando determinadas condições são ou não satisfeitas (verdadeiro ou falso). Aqui, são usados os conceitos de expressões lógicas e relacionais vistos anteriormente. 4.2.1.1 Seleção Simples Usada quando precisamos testar uma certa condição antes de executar uma ação. Seu modelo é descrito abaixo. if < condição > comando 1; comando 2; comando n; end Exemplo 01: Cálculo da média com verificação de aprovação. N1 = input(‘Entre com a nota 1: ’); N2 = input(‘Entre com a nota 2: ’); N3 = input(‘Entre com a nota 3: ’); N3 = input(‘Entre com a nota 4: ’); MA = (N1+N2+N3+N4)/4; disp(‘A media e: ’); disp(MA); If( MA >= 7 ) disp(‘Aluno aprovado!’); end Expressão Lógica e/ou relacional 47 4.2.1.2 Seleção Composta Usada quando existir situações em que duas alternativas dependem de uma mesma condição (uma ser verdadeira e outra falsa). if < condição é verdadeira > comando a-1; comando a-2; comando a-n; else comando b-1; comando b-2; comando b-n; end Exemplo 02: cálculo da média com verificação de aprovação e reprovação. N1 = input(‘Entre com a nota 1: ’); N2 = input(‘Entre com a nota 2: ’); N3 = input(‘Entre com a nota 3: ’); N3 = input(‘Entre com a nota 4: ’); MA = (N1+N2+N3+N4)/4; disp(‘A media e: ’); disp(MA); if( MA >= 7 ) disp(‘Aluno aprovado!’); Else disp(‘Aluno reprovado!’); End Expressão Ló i / 48 4.2.1.2 Seleção Encadeada Usada quando existe a necessidade de agrupar várias seleções de forma encadeada. if < condição1 > comando a-1; comando a-2; comando a-n; elseif < condição 2 > comando b-1; comando b-2; comando b-n; elseif < condição 3 > if < condição 3-a > comando c-1; comando c-2; comando c-n; end else comando d-1; comando d-2; comando d-n; end Exemplo 03: cálculo da média verificando aprovação, reprovação e final. N1 = input(‘Entre com a nota 1: ’); N2 = input(‘Entre com a nota 2: ’); N3 = input(‘Entre com a nota 3: ’); N3 = input(‘Entre com a nota 4: ’); MA = (N1+N2+N3+N4)/4; disp(‘A media e: ’); disp(MA); if( MA >= 7 ) disp(‘Aluno aprovado!’); elseif( MA < 5 ) disp(‘Aluno reprovado!’); else disp(‘Aluno na final’); end 49 4.2.1.4 Seleção de Múltipla Escolha Esse tipo de seleçãoé uma alternativa para o uso da seleção encadeada if-else- if. switch( variavel ) case v1: comandos 1; case v2: comandos 2; case vn: comandos n; otherwise: comandos; end Deve observar que variável não pode ser uma expressão. Exemplo 04: disp(‘digite 1: primeira opcao’); disp(‘digite 2: segunda opcao’); disp(‘digite 3: terceira opcao’); case 1: disp( ‘Foi digitada a primeira opcao’); case 2: disp( ‘Foi digitada a segunda opcao’); case 3: disp( ‘Foi digitada a terceira opcao’); Otherwise: disp( ‘Opcao nao existente’); End 4.2.1.5 Exercícios Exercício 01: Escrever um algoritmo que leia 3 valores numéricos e mostre-os em ordem crescente. A = input(‘Valor 1: ’); B = input(‘Valor 2: ’); C = input(‘Valor 3: ’); if( A < B ) if( B < C ) disp(A); disp(B); disp(C); else if( A < C ) disp(A); disp(C); disp(B); else 50 disp(C); disp(A); disp(B); end end elseif( A < C) disp(B); disp(A); disp(C); else if( B < C ) disp(B); disp(C); disp(A); else disp(C); disp(B); disp(A); end end Exercício 02 – Ler 3 números, verificar se eles podem ou não ser lados de um triângulo. Se sim, classificar o triângulo quanto os seus lados. 3 lados iguais: Eqüilátero 2 lados iguais: Isósceles Lados desiguais: Escaleno A = input(‘Entre c/ o primeiro lado: ’); B = input(‘Entre c/ o segundo lado: ’); C = input(‘Entre c/ o terceiro lado: ’); if( A < B+C & B < A+C & C < A+B ) if A == B & B == C disp(‘Triangulo Eqüilátero!’); elseif A == B | B == C | A == A disp(‘Triangulo Isósceles!’); else disp(‘Triangulo Escaleno!’); end else disp(‘Lados nao formam um triangulo!’); end Exercício 03 – Criar um algoritmo que entre com o valor de x, calcule e imprima o valor de f(x), onde f(x) = (5x+3) / sqrt(x2 – 16) x = input(‘Entre c/ o valor de x: ’); d = x^2 – 16; if d <= 0 disp( ‘Nao existe solucao real!’ ); else f = (5x+3)/sqrt(d); disp(‘O valor de f e’: ’); disp(f); end 51 Exercício 04 – Escrever um programa que verifique se um dado número é par ou ímpar (entre 0 e 100). A = input(‘Entre c/ o numero: ’); if A < 0 disp(‘O numero e menor que zero!’); elseif A > 100 disp(‘O numero e maior que zero!’); else if mod(A,2) == 0 disp(‘O numero e par!’); else disp(‘O numero e impar!’); end end 4.3 Estruturas de Repetição Considere o seguinte algoritmo para o cálculo da média bimestral de um aluno: Exemplo 07: P1 = input(‘Nota do trabalho: ’); P2 = input(‘Nota da prova: ’); Media = 0.3*P1 + 0.7*P2; disp(Media); E se eu desejar calcular a média de todos os alunos da turma? (21, por exemplo) Uma solução é repetir o código acima 21 vezes; outra opção é “rodar” (executar) o programa acima 21 vezes. No entanto, nem sempre essas soluções são viáveis. A idéia, então, é usar o mesmo trecho do código acima sem a necessidade de reescrevê-lo. As estruturas usadas para implementar essa idéia são chamadas Estruturas de Repetição. Elas podem ser divididas em dois tipos básicos: 9 Estruturas de Repetição Definidas 9 Estruturas de Repetição Indefinidas Essas estruturas são vista na seqüência desta seção. 4.3.1 Estruturas de Repetição Definidas São estruturas de repetição com um número finito de repetições. Sua sintaxe é dada por: 52 para i de vi até vf de passo p faça comando 1; comando 2; M comando n; fim i = variável de controle; vi = valor inicial atribuído a i; vf = valor final atribuído a i (condição de parada); p = incremento/decremento dado à variável i. Exemplo 01: Calcular a média anual de 10 alunos. s = 0; for i = 1:1:10 m = input(‘media: ‘); s = s + m; end media = s / 10; disp(media); O funcionamento do código acima é dado pela tabela abaixo: i m s 1 10 10 2 5 15 3 5 20 4 8 28 5 7 35 6 10 45 7 5 50 8 6 56 9 4 60 10 3 63 53 Ao final da execução, a variável média vai armazenar o valor 63/10 = 6.3. Se o valor do incremento (p) é omitido, considera-se p=1 (for i = 1:10). Se vi = vf, o “laço” é executado uma vez. Se vi > vf e p > 0 ou se vi < vf e p < 0, o laço não é executado. Exemplo 02: Calcular a soma dos 6 primeiros números pares não-negativos. soma = 0; for i = 0:2:10 soma = soma + i; end disp(soma); Ou soma = 0; for i = 0:1:5 soma = soma + 2*i; end disp(soma); E se desejássemos calcular a soma dos 100 primeiros números pares não- negativos? A alteração seria apenas no limite da estrutura de repetição. Isso mostra a importação desse tipo de estrutura. Exemplo 03: Calcular a média bimestral de 10 alunos. for i = 1:1:10 p1 = input(‘Nota do Trabalho: ’); p2 = input(‘Nota da Prova: ’); media = 0.3*p1 + 0.7*p2; disp(‘Media’); disp(media); end Exemplo 04: Dado um número qualquer, calcular o seu fatorial. x = input(‘Entre com um numero: ‘) fat = 1; for i = 1:1:x fat = fat * i; end Disp(fat); 54 4.3.2 Estruturas de Repetição Indefinidas São estruturas onde não se conhece, a priori, quantas execuções serão realizadas. Sua sintaxe é dada por: enquanto ( expressão condicional) comando 1; comando 2; M comando n; fim onde expressão condicional representa a condição de execução do bloco. No Matlab, while ( expressão condicional) comando 1; comando 2; M comando n; end Exemplo 01: Calcular o valor de f(x) = x2 + 2 até que f(x) seja maior que 20. f = 0; while f <= 20 x = input(‘Entre com x: ’); f = x^2 + 2; disp(f); end As estruturas de repetição indefinida também podem ser usadas em problemas definidos. No entanto, o inverso não é verdade. 55 Exemplo 02: Calcular a média anual de 10 alunos usando while. soma = 0; cont = 1; while cont <= 10 m = input(‘Media: ’); soma = soma + m; cont = cont + 1; end media = soma/(cont – 1); disp(media); 4.3.2.1 Exercícios Exercício 01: Jogo do Adivinha: Escolher um número de 0 a 100. Tente adivinhar o número gerado. A cada tentativa, deve-se informar mais baixo, mais alto ou acertou. Quando acertar, mostrar o número de tentativas. Obs.: O comando randint(1,1,[0,100]) deve ser usado para gerar um número inteiro aleatório. teste = 0; soma = 0; segredo = randint(1,1,[0,100]); while teste == 0 chute = input(‘Entre com um numero: ‘); soma = soma + 1; if chute == segredo teste = 1; disp(‘Acertou’); disp(‘Tentativas: ‘); disp(soma); elseif chute < segredo disp( ‘Mais alto...’); else disp(‘Mais baixo…’); end end Exercício 02: Jogo do Adivinha 2: O usuário pensa em um número entre 0 e 100 e executa o programa. O computador “chuta” um valor. A cada chute, deve-se informar se o computador acertou, mais alto ou mais baixo. Ao final, deve-se informar o número de tentativas chutadas pelo computador. teste = 0; soma = 0; segredo = input(‘Entre com um numero: ‘); if segredo >= 0 & segredo <= 100 Min = 0; Max = 100; while teste == 0 chute = randint(1,1,[Min,Max]); 56 soma = soma + 1; disp(‘Numero Chutado: ‘); disp(chute); if chute == segredo teste = 1; disp(‘Acertou’);disp(‘Tentativas: ‘); disp(soma); elseif chute < segredo disp( ‘Mais alto...’); Min = chute; else disp(‘Mais baixo…’); Max = chute; end end end Exercício 03: Calcule o valor do cosseno de x (em radianos) usando os 20 primeiros termos da série ... !8!6!4!2 1)cos( 8642 ++−+−= xxxxx x = input(‘Entre com o valor do ângulo: ‘); c = 0; sinal = 1; for i = 0:1:19 fat = 1; for j = 1:1:2*i; fat = fat * j; end c = c + sinal * x^(2*i)/fat; sinal = -1 * sinal; end disp(c); Exercício 04: Fazer um programa seguindo as seguintes orientações: a) Leia os parâmetros A e B da equação da reta dada por y = Ax+B; b) Leia os parâmetros C, D e R da equação do círculo dada por Cx2+Dy2=R2; c) Leia as coordenadas (x,y) e verifique se esse ponto é um dos pontos de interseção entre a reta e o círculo dados. Um ponto é de interseção se ele atender as equações das curvas dadas. A = input(‘Entre com o parâmetro A: ‘); B = input(‘Entre com o parâmetro B: ‘); C = input(‘Entre com o parâmetro C: ‘); D = input(‘Entre com o parâmetro D: ‘); R = input(‘Entre com o parâmetro R: ‘); 57 x = input(‘Entre com a coordenada X do ponto: ‘); y = input(‘Entre com a coordenada Y do ponto: ‘); If A*x + B == y & C*x^2 + D*y^2 == R^2 disp(‘Ponto de intersecao.’); end 5 Estruturas de Dados 5.1 Introdução Nas seções anteriores, foi feita uma divisão imaginária (numérico, caractere e lógico) com o objetivo de tornar mais simples a classificação das informações (dados) de um programa. No entanto, em muitas situações, esses recursos são escassos. Esta seção descreve novos tipos de dados que são construídos e organizados a partir da composição dos tipos primitivos vistos anteriormente. Esses novos tipos são conhecidos como Estrutura de Dados e são classificados da seguinte forma: • Estrutura de Dados o Variáveis Compostas Homogêneas; Unidimensionais (Vetores); Multidimensionais (Matrizes). o Variáveis Compostas Heterogêneas Registros Essas novas variáveis são descritas na seqüência desta seção. 5.2 Variáveis Compostas Homogêneas São estruturas de dados compostas de variáveis do mesmo tipo primitivo, como podem ser vistos nos exemplos abaixo: 3 8.5 7 5 C A R R O Caractere 58 A variável é o todo (ou seja, o conjunto). Cada termo da variável é chamado de elemento. Em ambos os exemplos, cada elemento tem o mesmo tipo primitivo (números e caracteres). Daí a denominação “homogêneo”. Uma string (cadeia de caracteres) é uma variável composta homogênea. Os exemplos acima são variáveis compostas unidimensionais (também chamadas de vetores). O exemplo abaixo também ilustra uma variável composta homogênea. No entanto, ela é classificada como uma variável composta multidimensional (conhecida como matriz). 1 0 4 5 2 1 7.5 3 1 O exemplo abaixo ilustra o exemplo de uma variável composta que não é classificada como homogênea. C 3 5 1 L 5.2.1 Variáveis Compostas Homogêneas Unidimensionais São estruturas de dados compostas de elementos do mesmo tipo primitivo e armazenados em matrizes linha ou coluna. O exemplo abaixo ilustra a criação de um vetor no MATLAB. Exemplo 01: >> A=(0:2:10) >> B=ones(2,3) >> C=zeros(3,2) O exemplo acima produz o seguinte vetor: A = 0 2 4 6 8 10 59 B = 1 1 1 1 1 1 C = 0 0 0 0 0 0 A seguir, é mostrado outro exemplo para ilustrar o uso de vetores. Exemplo 02: >> % imprime o segundo elemento do vetor. 2 é o índice do vetor. >> disp(A(2)); >> % Alterando o terceiro elemento do vetor. >> A(3) = 10; for i = 1:10 A(i) = 2*i – 1; end disp(A); Mas para que servem os vetores? Os exemplos abaixo servirão para responder tal questão. Exemplo 03: % a) Cálculo da média aritmética de 10 notas soma = 0; for i = 1:10 x = input(‘Entre com a nota: ’); soma = soma + x; end media = soma / 10; % b) Quais notas são maiores que a média? A1 = input(‘Nota 1: ’); A2 = input(‘Nota 2: ’); A3 = input(‘Nota 3: ’); . . . A10 = input(‘Nota 10: ’); media = (A1 + A2 + ... + A10) / 10; if A1 > media disp( A1 ); 1, 3, 5, 7, 9, …, 60 end if A2 > media disp( A2 ); end . . . Mas e se tivéssemos 100 notas? A solução acima seria inviável. O exemplo abaixo usa vetor para resolver o mesmo problema. Exemplo 04: Exemplo anterior usando vetores soma = 0; for i = 1:10 nota(i) = input(‘Entre c/ a nota: ’); soma = soma + nota(i); end media = soma / 10; for i = 1:10 if nota(i) > media disp(nota(i)); end end Exemplo 05: Fazer um programa que leia, some e imprima o resultado da soma entre dois vetores de 10 posições. for i = 1:10 A(i) = input(‘valor armazenado no vetor A: ’); B(i) = input(‘valor armazenado no vetor B: ’); C(i) = A(i) + B(i); end disp( C ); Exemplo 06: Fazer um programa que preencha um vetor de 100 elementos colocando 1 na posição correspondente a um número par e 0 a um número ímpar. for i = 1:100 if mod(i,2) == 0 a(i) = 1; else a(i) = 0; end end disp(a); 61 Exemplo 07: Seja o vetor V = {2, 6, 8, 3, 10, 9, 1, 21, 33, 14}. Seja também x = 2 e y = 4. V(x+1) V(3) = 8 V(x+2) V(4) = 3 V(x*4) V(8) = 21 V(V(x+y)) V(V(6)) = V(9) = 33 V(x+y) V(6) = 9 V(V(1)*V(4)) V(2*3) = V(6) = 9 Exemplo 08: Fazer um programa que leia um vetor de 10 posições e coloque- o em ordem crescente, utilizando a seguinte estratégia: • Selecione o elemento do vetor que apresenta o menor valor; • Troque este elemento pelo primeiro; • Repita essas operações envolvendo agora apenas os 19 elementos restantes, até restar um único elemento. for i = 1:10 a(i) = input(‘A: ’); end for j = 1:10 % inicializacao menor = a(j); posicao = j; % selecionando o menor for i = j:10 if a(i) < menor menor = a(i); posicao = i; end end % troca aux = a(j); a(j) = menor; a(posicao) = aux; end disp(a); Sobre o exemplo acima, as seguintes questões devem ser observadas: a) A variável “posição” armazena a posição do menor valor; b) Uso de uma variável auxiliar “aux” para fazer a troca de 2 números. 62 5.2.2 Variáveis Compostas Homogêneas Multidimensionais São estruturas de dados compostas de elementos do mesmo tipo primitivo e armazenados em formato matricial. O Exemplo abaixo ilustra a diferença entre vetores e matrizes: • Vetores o Um índice (unidimensional) para endereçamento A(1) = 3; A(2) = 7; • Matrizes o Dois índices (bidimensional) para endereçamento A(1,1) = 1; A(2,1) = 5; A(1,2) = 4; A(2,2) = 3; 1 4 5 3 Nesse exemplo, • A é uma matriz bidimensional 2x2; • A é uma variável; • Cada termo de A é um elemento. Para acessar um elemento de uma matriz precisamos de dois índices. O primeiro índice corresponde à linha da matriz; o segundo a coluna. 63 A(i,j) ⇒ linha i, coluna j >> A(3,4) = 2; Aqui, o valor 2 é atribuído ao elemento correspondente a linha 3, coluna 4 da matriz A. 1 2 3 4 1 2 3 2 Alguns detalhes devem ser observados:
Compartilhar