Baixe o app para aproveitar ainda mais
Prévia do material em texto
WFernando Bastos 1 Computação Aplicada Engenharia WFernando Bastos WFernando Bastos 2 Admirável mundo novo A velocidade da evolução da informática cria uma sucessão de novidades e desafia o profissional da área a um aprendizado contínuo WFernando Bastos 3 História Entre a invenção do ábaco, o primitivo instrumento de calcular desenvolvido pelo homem na Antiguidade, e a criação do primeiro computador eletrônico, em 1946, passaram-se mais de 5 mil anos. Desde então, o ritmo de evolução nessa área da tecnologia vem se acelerando de tal modo que, em poucas décadas, já representa a maior revolução no estilo de vida do ser humano de que se tem notícia. A moderna Tecnologia da Informação e Comunicação (TIC), ou simplesmente TI, contudo, parece mal ter começado, se considerarmos sua incrível capacidade de inovação: desde que se consolidou no final do século passado, a informática é a área que mais cresce, cria empregos e inova em todo o planeta. Uma frase célebre de Bill Gates, fundador da Microsoft, é ilustrativa nesse sentido: “Se a General Motors tivesse evoluído tecnologicamente tanto quanto a indústria de computadores evoluiu, estaríamos todos dirigindo carros que custariam 25 dólares e rodando 420 quilômetros por litro”. No comando e na retaguarda de tamanho desenvolvimento, estão verdadeiros exércitos de cientistas, engenheiros e técnicos, que desempenham um variado e instigante leque de funções. “Não existe um dia igual ao outro nessa área”, conta Edson Luiz Pereira, executivo de parcerias educacionais da IBM. Esse dinamismo permite ao técnico em informática algo que parece impossível para a imensa maioria dos trabalhadores de outras áreas: divertir-se enquanto trabalha. Infelizmente, porém, os mesmos jovens que usufruem diariamente as novas tecnologias não têm consciência das possibilidades oferecidas por esse mercado de trabalho. “Há um certo preconceito. Ainda se acredita que informática é algo para nerds”, diz Walter José Dias, gerente acadêmico da Microsoft no Brasil. A figura do nerd, o gênio precoce de óculos com lentes grossas e imbatível no jogo de xadrez, que horrorizava a juventude rebelde dos anos 1970, permanece no imaginário dos adolescentes até hoje. Mas não é preciso ser genial para ser bom em informática. Ao contrário. A primeira condição é simplesmente gostar de aprender. A segunda, ter um raciocínio lógico bem desenvolvido. Sem raciocínio lógico, fica difícil mergulhar no criativo mundo da informática. Quem se aventura nessa área, no entanto, garante que vale a pena. Entre seus pontos mais positivos está a abrangência de diferentes temas, que possibilita ao profissional mudar frequentemente de função e mesmo de especialidade. Isso sem falar em outro atrativo bastante valorizado nos tempos de hoje: os salários. Mercado promissor WFernando Bastos 4 Os técnicos em TI recebem, em média, salários 80% mais altos do que os pagos no mercado formal de trabalho no Brasil. Nas empresas, algumas funções técnicas são tão bem remuneradas quanto altos cargos executivos. Isso porque a demanda por profissionais da área ainda supera largamente a quantidade de técnicos disponíveis. Para se ter uma idéia, no ano 2008, apesar da crise financeira global, a demanda não atendida por profissionais de informática no País chegou a 100 mil postos de trabalho. Um fenômeno que, em diferentes proporções, ocorre no mundo inteiro. “Deixamos de exportar serviços de TI por falta de técnicos capacitados”, diz Pereira, da IBM. “O mercado externo é o grande gerador de empregos atualmente. Para programar aplicativos ou operar sistemas, já não é preciso estar ao lado do cliente.” Outra tendência que vem se consolidando no setor é a expansão mais acelerada na área de desenvolvimento de softwares do que na de manutenção de sistemas. “Programação é o segmento que mais vai gerar emprego, em relação a qualquer outra área da economia”, diz Pereira, referindo-se aos próximos anos. Um efeito direto da internet – em que as novidades se sucedem em velocidade quase inacreditável – bem como das diferentes aplicações a ela associadas. Além disso, computadores passaram a fazer parte de nossas vidas mesmo em lugares onde nem sequer percebemos sua presença: automóveis, utilitários domésticos, repartições públicas etc. A microeletrônica comandada por softwares é a alma invisível no setor de serviços – em especial nos segmentos financeiro, comercial e de telecomunicações –assim como na área de educação, cultura e entretenimento. Na indústria, os processos produtivos há muito se tornaram automáticos e os bens de consumo adquirem cada vez mais funções inteligentes. Não é por acaso que nossa época recebeu o nome de era digital. Formação profissional Atender a todas essas necessidades do mundo moderno requer uma boa formação. Fazer um curso técnico costuma ser o primeiro passo em direção a uma carreira em TI. Como são muitas funções e constantes novidades, o profissional deve procurar, primeiro, um segmento específico de atuação e, depois, continuar se atualizando nele: “É preciso escolher uma especialidade ao concluir o curso técnico ou faculdade. Não existem no mercado vagas para técnicos em TI, mas sim para programadores Java, Cobol, administradores de bancos de dados”, explica Walter Dias, da Microsoft. Para o técnico habilitado, as principais companhias de software, como IBM, Microsoft e Oracle, entre outras, emitem certificações comprovando que o profissional conhece bem suas respectivas tecnologias – e, portanto, será capaz de desenvolver e criar aplicativos a partir dessas bases. Quanto mais certificações de conhecimento de produtos e de experiência profissional o técnico possuir, mais valorizado será seu trabalho. WFernando Bastos 5 Historicamente, a Informática vem causando grandes transformações no modo de vida do ser humano, cada vez mais dependente dessa tecnologia para trabalhar, divertir-se e se comunicar. Em breve, quem não conseguir operar um computador pessoal poderá se tornar uma espécie de analfabeto: sua comunicação com o mundo será restrita, uma vez que os conteúdos de todas as áreas da cultura estão migrando velozmente para a internet. Assim, nem é preciso aspirar a uma carreira técnica para perceber o quanto é útil estudar Informática. “Com o advento da internet, todos têm de ter conhecimentos básicos. Estudar é recomendável, inclusive, para poder aproveitar essa enorme gama de recursos da era digital”, diz Luiz Eduardo Gonzalez, professor do Centro Paula Souza, que tem a formação profissional por competências como uma das metas político-pedagógicas de sua Unidade de Ensino Médio Técnico – CETEC (consulte o quadro Formação por Competências). Passado, presente e futuro Na opinião de diversos especialistas, uma das transformações mais radicais nos modos de comunicação social do ser humano foi o advento da chamada Web 2.0, que nada mais é do que o conceito que define a utilização da internet de maneira colaborativa, dinâmica, com trocas de arquivos e informações diretamente entre os participantes. Foi ela que pavimentou o caminho para as redes sociais (como Orkut e Facebook) e os sites de informação e conteúdo alimentados abertamente, como a Wikipédia, o YouTube, entre outros. Essa nova maneira de usar a internet foi sendo engendrada aos poucos por um grupo anônimo de cientistas, pesquisadores e técnicos do mundo inteiro. Eles foram aperfeiçoando as descobertas uns dos outros e quase nem perceberam como, num certo momento, no início do século XXI, a sonhada Web 2.0 havia se imposto ao mundo de modo retumbante. “Não há um dono, um criador. Quando percebemos, a Web 2.0 eraalgo presente”, diz Gonzalez. “A rede mundial não é apenas um depósito de conteúdos, como o livro, por exemplo. A grande diferença é que possibilita a interação do usuário diretamente com a informação.” Essa dinâmica tecno-social começa a impactar de modo explícito a forma como estruturamos nossos pensamentos, idéias e percepções. Olhando para as novas gerações, é possível perceber que a internet já foi incorporada a uma nova forma de construção e articulação do conhecimento. Tudo o que se quer saber está lá, em sistemas de busca cada vez mais inteligentes e eficazes, disponíveis gratuitamente para consulta a apenas alguns cliques de distância. E, o mais interessante, com milhares de pessoas dispostas a discutir os mais variados assuntos, sejam especialistas, leigos, sejam simplesmente curiosos. “Isso sem contar as novidades que estão chegando por aí: redes Wimax e 3G, que permitem conexão sem fio em alta velocidade em locais públicos; a IPTV, que é o conteúdo de TV sob demanda, em que você poderá criar seu próprio canal; e o papel eletrônico, ou iPaper, uma superfície fina como um papel que funciona como uma tela de computador”, comenta Rafael Lamardo, professor de Tecnologia da WFernando Bastos 6 Informação dos cursos de Pós-Graduação da Escola Superior de Propaganda e Marketing (ESPM). Outra novidade importante é o conceito de Web 3.0, também conhecida como a web semântica, que para muitos representa a terceira onda da internet. Trata se de um novo modo de organização e disponibilização das informações oferecidas na rede, mais ágil e inteligente que a atual. Com tantas novidades e tecnologias em desenvolvimento, as possibilidades desse novo ambiente 100% conectado são incríveis. Aplicações envolvendo localização por GPS e base de dados da rede nos permitirão que encontrar o que desejarmos ao nosso redor, de um bom restaurante a um amigo, bem como acionar comandos e acessar arquivos remotos. Filmes e programas de TV não terão mais horários, pois poderão ser vistos na hora que quisermos. Poderemos acessar tudo o que o conhecimento humano já produziu com apenas um clique. E o melhor é que isso será possível para qualquer pessoa, em qualquer momento, em qualquer lugar. É nesse futuro assombroso que os profissionais de TI terão um papel de destaque, ajudando de maneira decisiva na construção de um mundo melhor. WFernando Bastos 7 Introdução ao desenvolviment o de software WFernando Bastos 8 A automação, há algum tempo, tornou-se um diferencial competitivo para as organizações. Tal modernização pode ser entendida como o esforço para transformar as tarefas manuais repetitivas em processos independentes, realizados por máquinas. Com isso, a gestão passou por uma verdadeira revolução: erros que antes eram cometidos por falhas de cálculos agora são quase nulos. As empresas não precisam se voltar tanto para atividades contínuas e podem se dedicar mais ao foco do seu negócio. Os benefícios disso se estendem por toda a cadeia de valor, desde compra de materiais, produção e vendas até entrega de produtos para os clientes e pós-venda. O desenvolvimento de software é uma atividade muito complexa. Sim, porque não existe uma solução pronta para cada cenário. O trabalho é sempre realizado por pessoas, o que torna o sucesso do projeto diretamente relacionado à competência da equipe e à maneira como se trabalha. Outra dificuldade considerável é o fato de, muitas vezes, não ser adotado um processo definido para apoiar essa tarefa. A tecnologia da informação passou por uma grande evolução nos últimos anos. Com isso, há exigências contínuas e renovadas de aumento na qualificação dos profissionais da área, o que, consequentemente, favorece o seu desenvolvimento. Afinal, esse segmento é composto pela tríade pessoas, gestão e tecnologia. O emprego desse tripé levou a uma significativa melhoria no desenvolvimento das companhias chamadas inteligentes, aquelas que necessitam de sistemas tolerantes a falhas e capazes de gerar informações críticas para o processo de decisão. Na década de 1960 as empresas trabalhavam com o conceito de processamento centralizado de dados e muitos dos seus recursos eram direcionados ao CPD (Centro de Processamento de Dados). Os sistemas daquela época rodavam de forma mecanizada e em batch (processamento em lote). Com o passar do tempo, porém, as corporações perceberam a necessidade e a importância de se basear em informações concretas para tomar suas decisões e, assim, aprimorar a gestão dos negócios. Então, abandonaram o padrão do tradicional processamento de dados e passaram a trabalhar com WFernando Bastos 9 centro de informações. Nesse modelo, já havia integração dos sistemas, mesmo que ainda existissem algumas redundâncias, ou seja, dados duplicados que levavam ao retrabalho. Atualmente, as organizações vivem a era da Tecnologia da Informação (TI). Agora, os sistemas são todos integrados, possibilitando a otimização dos processos e a diminuição da redundância de dados. Com isso, é possível melhorar muito o desempenho da empresa, pois os processos se tornam mais estruturados, fato que minimiza o retrabalho (REZENDE, 2002). 1.1. Conceitos iniciais Com a crescente necessidade das empresas de contar com informações cada vez mais rápidas e confiáveis, foi necessário desenvolver não apenas sistemas, como também novos hardwares. Era preciso ter máquinas que atendessem às especificações de softwares de alto desempenho e de grande disponibilidade. I.2. Gerações de computadores Vamos conhecer agora as cinco gerações de equipamentos, a tecnologia empregada em cada uma delas, suas vantagens e desvantagens. • Primeira (1940-1958) O primeiro computador digital eletrônico de grande escala foi o Eniac (Electrical Numerical Integrator and Calculator, ou integradora e calculadora numérica elétrica). Começou a ser desenvolvido em 1943, durante a Segunda Guerra Mundial, para auxiliar o Exército dos Estados Unidos nos cálculos de balística. Foi lançado em fevereiro de 1946 pelos cientistas norte-americanos John Presper Eckert e John W. Mauchly, da Electronic Control Company. O Eniac realizava 5 mil operações por segundo, velocidade mil vezes superior à das máquinas da época. No entanto, se comparado com os computadores atuais, o seu poder de processamento seria menor do que o de uma simples calculadora de bolso. Mas a primeira geração de máquinas teve como marco histórico o lançamento do primeiro computador comercial, o Univac I (Universal Automatic Computer ou computador automático universal), em 1951. Ele possuía cem vezes a capacidade do Eniac, era dez vezes mais rápido e tinha um décimo de seu tamanho. O Univac I tinha como componentes entre 10 mil e 20 mil válvulas eletrônicas, com duração média de oitocentos a mil horas. O primeiro modelo do Univac foi construído pela empresa Eckert-Mauchly Computer Corporation, adquirida pela Remington Rand pouco depois. Hoje, os direitos sobre o nome Univac pertencem à Unisys, que aponta a Força Aérea Americana, o Exército e a Comissão de Energia Atômica norte- americanos como seus primeiros clientes. Inicialmente, o Univac era usado para executar funções no Escritório de Censo dos Estados Unidos. Além de órgãos governamentais, eram usuárias do computador empresas como a General Electric, a Metropolitan Life e a Du Pont. Naquela época, cada uma WFernando Bastos 10 das 46 unidades fabricadas do Univac custava US$ 1 milhão. Em 1953, surgiu o IBM 701 e, em 1954, o IBM 650. Ambos tiveram muito sucesso de vendas para a época, chegando a 2 mil unidades em cinco anos. • Segunda (1958-1964) A fabricação dos computadores foi alterada e as válvulas deram lugar aos transistores, cuja vida útil era bemmaior (90 mil horas). Com isso, as máquinas ficaram mais rápidas e menores. Pertence a essa segunda geração o IBM 7090, que possuía 40 mil transistores e 1,2 milhão de núcleos magnéticos. Ocupava uma área de 40 m2, contra a de 180 m2 do Eniac. • Terceira (1964-1971) Em 1964, a IBM anunciou o lançamento da série 360 com circuito integrado. Os circuitos impressos são milimétricos e podem conter transistores, resistências e condensadores. Para se ter uma idéia, 50 mil desses conjuntos cabem em um dedal. A novidade permitiu um grande aumento na velocidade de computação de dados, passando de milionésimos de segundo para bilionésimos de segundo. Assim, um programa que era executado em uma hora, no modelo de computador de 1951, levava entre três e quatro segundos para rodar nos equipamentos da terceira geração. • Quarta (1971-1987) A integração de circuitos teve grandes incrementos, com crescimento de mil vezes a cada dez anos. Foram introduzidas várias escalas de incorporação, definidas pelo número de conjuntos que podem ser colocados em uma única lâmina miniaturizada feita de silício, o famoso chip. Assim, foram surgindo tecnologias consecutivas: em 1970, LSI (Large Scale Integration – integração em larga escala); em 1975, VLSI (Very Large Scale Integration – integração em muito larga escala); e, em 1980, ULSI (Ultra Large Scale Integration – integração em ultralarga escala). • Quinta (1987- primeira década do século 21) A geração de equipamentos em uso na primeira década do século 21 surgiu em 1987, com o uso de novas tecnologias, principalmente relacionadas a dispositivos ópticos e a telecomunicações. Houve aumento de processamento paralelo, diversidade de formato, incremento da capacidade computacional e de armazenamento, assim como difusão do processamento distribuído. Além disso, delineou-se a tendência de convergência de WFernando Bastos 11 computadores e aparelhos de comunicação, o que facilitou a interoperabilidade e a universalização da operação do sistemas, assim como a sua normatização. 1.3. Gerações de linguagem de programação É importante conhecer as gerações de linguagens de programação, para entender bem o contexto atual (SWEBOK, 2004). Primeira (1Gl) A primeira geração de programação utiliza apenas linguagem de máquina, ou seja, o sistema binário de 0 (zero) e 1 (um) para o desenvolvimento dos softwares. Sua desvantagem é ser pouco intuitiva, pois não utiliza linguagens mais sofisticadas que permitem a portabilidade do programa, isto é, o código utilizado acaba restrito a um único tipo de hardware e à arquitetura utilizada. Segunda (2Gl) A linguagem de programação chamada Assembly representa a segunda geração. Mais próxima do ser humano do que da máquina (como acontecia na 1GL), cada Assembly ainda é bastante associada à arquitetura do computador, fazendo com que a 2GL também seja pouco portável entre ambientes. Terceira (3Gl) A terceira geração das linguagens de programação está muito próxima do ser humano, pois é facilmente entendida por uma pessoa com pouco – ou nenhum – conhecimento de informática. Isso porque é similar à comunicação do dia a dia. Essa geração é representada pelas linguagens Cobol, Fortran, Algol, Basic, C, C++, entre outras. Para mais informações sobre a 3GL veja quadro abaixo. Quarta (4Gl) A linguagem SQL (Structured Query Language, ou Linguagem de Consulta Estruturada) tornou-se tão popular que passou a representar toda a quarta geração. Ainda hoje, é bastante utilizada como linguagem de manipulação e consulta de banco de dados, como o SQL-Server da Microsoft, Oracle Database da Oracle e MySQL da Sun. A principal característica das linguagens de quarta geração é descrever o que deve ser feito, permitindo ao programador visar um resultado imediato. São consideradas capazes de, por si sós, gerar códigos, ou seja, os RADs (Rapid Application Development, ou Desenvolvimento Rápido de Aplicação), WFernando Bastos 12 com os quais podem ser criadas aplicações, mesmo sem se especializar na linguagem. Também nesse grupo estão as linguagens orientadas a objetos. Quinta (5Gl) A quinta geração ainda está pouco desenvolvida e engloba as linguagens para inteligência artificial. Sua maior representante é a LISP, nome originado da expressão LISt Processing (Processamento em Lista), já que a lista é a sua estrutura de dados fundamental. Para desenvolver um software pode-se utilizar uma geração de linguagem ou um conjunto delas. Entretanto, o melhor resultado no projeto final é obtido quando se vence o desafio de adequar a programação aos sistemas de informação de diversas áreas do conhecimento. Roger S. Pressman indica sete áreas ou categorias potenciais de aplicação de softwares em seu livro Engenharia de Software (PRESSMAN, 2006). Para saber mais sobre essas sete áreas, consulte o quadro abaixo. 1.4. processo de desenvolvimento Na área de tecnologia da informação, desenvolvimento de sistemas significa o ato de elaborar e implementar um programa, ou seja, entender as necessidades dos usuários e transformá-las em um produto denominado software, de acordo com a definição de Ana Regina Cavalcanti da Rocha, no seu livro Qualidade de Software: Teoria e Prática (DA ROCHA, 2004). Os processos de desenvolvimento são essenciais para o bom andamento do projeto de um software, assim como a compreensão do sistema como um todo. Quanto mais aumenta a complexidade dos sistemas, mais difícil se torna a sua visibilidade e compreensão, portanto, sem um processo bem definido o projeto tem grande chance de insucesso. O processo envolve atividades necessárias para definir, desenvolver, testar e manter um software. Exige inúmeras tentativas de lidar com a complexidade e de minimizar os problemas envolvidos no seu desenvolvimento. E devem ser levados em consideração fatores críticos: entrega do que o cliente deseja, com a qualidade, o prazo e o custo acordados (PMI, 2004). Para assegurar qualidade e padrão aos projetos, devem ser seguidos modelos de desenvolvimento de software: em cascata, iterativo ou incremental e prototipagem. Também é importante levar em conta o ciclo de vida de um programa, desde a sua concepção até a sua extinção. Logo, é necessário saber quanto tempo o software ficará em funcionamento e quais os benefícios gerados durante esse período, sempre tendo em mente o retorno do investimento (FOWLER, 2009). É crucial entender perfeitamente os entraves envolvidos no desenvolvimento de um software. Embora não exista uma conduta padrão, é sempre bom partir do princípio de que se está em busca de soluções para os problemas do cliente. WFernando Bastos 13 Com a definição de objetivos, atividades e participantes, consegue-se a excelência no desenvolvimento de software, pois há gestão, controle e padronização do processo. Tudo isso diminui os riscos de problemas com cronograma, treinamento, qualidade e aceitação do sistema pelos usuários. Vejamos quais são os objetivos, as atividades e os participantes. 1.4.1. objetivos Definição: alinhar todas as atividades a executar no decorrer de todo o projeto e, assim, desenvolver tudo o que foi previsto no seu escopo. Planejamento: definir, em um cronograma, quando, como (quais os recursos de hardware e de software necessário) e quem irá realizar determinada tarefa. Controle: ter sempre meios de saber se o cronograma está sendo cumprido e criar planos de contingência caso haja problemas no fluxo. Padronização: seguir as mesmas metodologias por todos os envolvidos no projeto para não haver dificuldades de entendimento. 1.4.2. atividades Levantamento de requisitos: entender a necessidade do cliente e as regras do seu negócio (é a fase mais importante do desenvolvimento). Análisede requisitos: definir o que fazer sob o ponto de vista de análise de sistemas. Projeto: desenvolver o sistema já com cronograma, necessidades e riscos preestabelecidos. Implementação: começar a usar um novo processo. Testes: analisar se todas as funcionalidades solicitadas pelo cliente no levantamento de requisitos estão funcionando corretamente. Implantação: disponibilizar os processos para utilização pelo usuário final. WFernando Bastos 14 Lógica de programação Fluxograma e pseudocódigo WFernando Bastos 15 A lógica computacional é um dos primeiros passos para quem pretende entrar no mundo da computação. Normalmente, não percebemos sua aplicação para resolver diferentes níveis de problemas nem sua relação com outras áreas da ciência. Isso porque, em geral, a lógica computacional está associada à lógica matemática (FORBELONE, 2005). É um recurso que permite a criação de alternativas viáveis e tecnicamente corretas, eficientes e rápidas. Antes de resolver um problema, no entanto, temos de saber interpretá-lo. Assim, evitam-se resultados indesejáveis ou desvios de percurso, da mesma maneira que surge a oportunidade de eliminar eventuais dúvidas, definindo o melhor algoritmo, que pode ser o pseudocódigo ou o fluxograma. A maioria das atividades que executamos é resultado de uma sequência de passos lógicos. Por exemplo, amarrar o cadarço de um tênis, abrir uma porta, trocar uma lâmpada ou fazer aquele delicioso bolo de chocolate. A sequência das etapas, ou melhor, das operações a executar, é determinada pelo algoritmo de forma lógica. Uma maneira mais simples de dizer isso é que a sucessão de ações faz todo o sentido. Usando o mesmo exemplo do bolo, o começo de tudo é reunir os ingredientes e usá-los na sequência certa. É assim também com as operações de cálculos, representadas pelo pseudocódigo a partir de comandos no formato de texto (exatamente como uma receita) ou pelo fluxograma de forma gráfica. E o fato de ser constituído por símbolos geométricos facilita o processo de visualização das operações. 1.1. Fluxograma e pseudocódigo Para entender melhor o conceito, vamos elaborar, resumidamente, um algoritmo que represente os passos necessários para que alguém tome um refrigerante em uma lata: 1. pegar o recipiente; 2. abrir a tampa; 3. tomar o conteúdo. Pseudocódigo Os algoritmos são desenvolvidos em uma linguagem denominada pseudocódigo ou, como preferem alguns autores, português estruturado. Podem ser criados sem o formalismo das linguagens de programação, mas obedecem a uma regra básica de estruturação: cabeçalho, declaração e instruções. Um algoritmo deve ter como característica um número finito de passos, descritos de forma precisa e que possam ser executados em um determinado tempo. Pode permitir zero ou mais entradas de dados e gerar saídas de dados refinados. Para construir um algoritmo, é preciso usar informações claras e objetivas, geralmente compostas de um verbo ou de uma frase direta. WFernando Bastos 16 1.2. tipos de dados A manipulação de dados em um algoritmo – ou até mesmo nas linguagens de programação – só é possível com base em algumas regras fundamentais para a definição dos tipos de dados. É preciso diferenciar um dado com números ou outros tipos de caracteres. • numéricos inteiros Esse tipo de dado é representado por números não fracionados positivos ou negativos, como: 10, 50, -56, -1.000 etc. • numéricos flutuantes São representados por números fracionados positivos ou negativos, por exemplo: 10.5, -45.78, 178.67 etc. • Caracteres ou literais É o maior conjunto de dados. São representados por letras, números, símbolos e espaço em branco, sempre entre aspas. Exemplo: “cadeira”, “100”, “R$ 10.00”, “11h00” etc. • atribuição e declaração Atribuir um valor qualquer para uma constante ou uma variável requer o uso do sinal de “” ou “=”. Isso quer dizer que o valor na frente do sinal será armazenado no elemento anterior ao sinal de atribuição. Veja: nome “Joãozinho” idade 10 pi 3.14 Independentemente do tipo de dado adotado – caracteres variados (“Joãozinho”), números inteiros (10) ou flutuantes (3.14) –, o processo de atribuição é o mesmo. Mas a declaração requer cuidado. Por isso, procure escolher o nome da variável de acordo com o tipo de dado que será recepcionado, inicie sempre com letras o nome de sua variável ou constante e não utilize espaço em branco ou caracteres especiais, com exceção do underline (_). Exemplos: nome “Joãozinho” idade 0 WFernando Bastos 17 minha_idade 15 pag_final “R$ 1.479,00” 1.4. operadores Os operadores são utilizados pelos pseudocódigos. O mesmo acontece com as linguagens de programação, cuja função é realizar as diferentes operações de aritmética e de lógica em um ambiente computacional. • aritméticos Esse grupo tem como responsabilidade realizar as operações aritméticas (tabela 2) de um pseudocódigo. As operações serão realizadas de acordo com a prioridade, ou seja, parênteses, potência, multiplicação, divisão e, por último, soma e subtração. • Relacionais Os operadores relacionais (tabela 3) permitem a execução de testes entre constantes e variáveis. • lógicos e tabela Verdade Os operadores lógicos (tabela 4 ) executam funções especiais dentro dos pseudocódigos, quando relacionados aos testes condicionais ou a outros valores lógicos. 1.5. Comandos Uma ação para o computador é definida com um comando que executa determinada operação (mostrar os dados e realizar um cálculo, por exemplo). Essas ações serão representadas nos pseudocódigos por meio de expressões predefinidas na lógica computacional. • Comando Escreva() É utilizado para mostrar a saída de dados, ou seja, quando uma mensagem ou resultado de uma operação deverá ser exibida ao usuário. Para que seja possível a visualização do dado, alguns cuidados são fundamentais: as expressões devem aparecer entre aspas, exceto as variáveis e valores (inteiros ou flutuantes). O pseudocódigo a seguir representa um exemplo mais completo, assim como o fluxograma, na sequência: Programa exemplo_escreva Declare nome como caractere WFernando Bastos 18 média, nota1, nota2 como flutuante Inicio nome “Fulaninho” nota1 10.0 nota2 2.0 media (nota1 + nota2)/2 Escreva(“Sua nota final é:”) Escreva(média) Fim • Comando leia() Ao contrário do comando Escreva(), o Leia() permite a inserção de dados pela interação com o usuário. Eles serão armazenados em variáveis devidamente definidas. Leia(nome) Leia(nota1) Leia(nota2) Leia(temp) Ao realizar uma entrada de dados, o ideal é que o usuário seja notificado sobre o tipo de informação que deverá ser inserida. Veja como: Programa exemplo_leia Declare nome como caractere média, nota1, nota2 como flutuante Início Escreva(“calculando a média”) Escreva(“Qual o seu nome?”) Leia(nome) Escreva(“Qual a sua nota 1?”) Leia(nota1) Escreva(“Qual a sua nota 2?”) Leia(nota2) media ß (nota1 + nota2)/2 Escreva(“Sua média final é:”) Escreva(media) Fim • Estrutura de decisão – Se...Fim-Se Os algoritmos, assim como as linguagens de programação, executam as atividades de forma sequencial. Mas, às vezes, devemos definir alguns desvios de acordo com as condições estabelecidas no processo de execução do algoritmo conforme a interferência do usuário. Para que isso ocorra, é preciso executar o comando Se(), que permite realizar desvios condicionais com base em testes lógicos. A estrutura dos algoritmos é composta por um teste condicional e por um comando ou conjunto de comandos a seremWFernando Bastos 19 executados a partir desse teste, mas somente quando o resultado for verdadeiro Se (condição) Então {comando(s)} Fim-Se No próximo exemplo, para estabelecer a condição vamos utilizar os operadores lógicos já vistos. Se (média >= 7.00) Então Escreva(“Você está aprovado!!!! ”) Fim-Se • Estrutura de decisão – Se...Senão...Fim-Se Podemos organizar o comando Se(), para criar desvios condicionais de verdadeiro ou falso no mesmo teste. Se (condição) Então {comando(s) condição verdadeira} Senão {comando(s) condição falsa} Fim-Se Como ficaria a repetição do teste com a variável média. Se (media >= 7.00) Então Escreva(“Você está aprovado!!!! ”) Senão Escreva(“Você está reprovado!!!! ”) Fim-Se Vamos organizar todo o pseudocódigo. Programa exemplo_teste Declare nome como caractere media, nota1, nota2 como flutuante Início Escreva(“calculando a média”) Escreva(“Digite o seu primeiro nome.”) Leia(nome) Escreva(“Qual a sua nota 01?”) Leia(nota1) Escreva(“Qual a sua nota 02?”) Leia(nota2) média (nota1 + nota2)/2 Escreva(“Sua nota final é:”) Escreva(média) Se (media >= 7.00) Então Escreva(“Aprovado”) Senão WFernando Bastos 20 Escreva(“Reprovado”) Fim-Se Escreva(“Fim de programa”) Fim • Estrutura de decisão – Selecione Caso...Senão...Fim-Selecione Em alguns momentos, haverá necessidade de testar a mesma variável diversas vezes, como acontece no menu de opções. Para isso, utilizamos o comando “Selecione Caso” da seguinte forma Selecione Caso {variável} Caso condição 01 {comando(s)} Caso condição 02 {comando(s)} Caso condição 03 {comando(s)} Senão {comando(s)} Fim-Selecione É preciso descobrir, em determinada situação, se o usuário escolheu os números 1, 2 ou 3. Qualquer outro diferente, deverá gerar a mensagem “número inválido” Leia(número) Selecione Caso número Caso 1 Escreva(“Você escolheu o número 01”) Caso 2 Escreva(“Você escolheu o número 02”) Caso 3 Escreva(“Você escolheu o número 03”) Senão Escreva(“Número inválido”) Fim-Selecione • Estrutura de repetição – Para...Fim-Para Além dos desvios sequenciais, é possível criar desvios em loop, ou seja, repetir trechos do algoritmo sobre determinada condição e controlar a forma com que os loops serão executados. O comando Para...Fim-Para permite que uma variável realize a contagem do número de loops a executar, conforme a indicação inicial e final dessa contagem, e também identifique o formato em que essa tarefa será realizada. Para <variável> = <vlr.inicial> Até <vlr.final> Passo <arg> Faça {comando(s)} Fim-Para Alguns exemplos: WFernando Bastos 21 Para x = 1 Até 5 Faça Escreva(x) // Serão visualizados os números: 1,2,3,4 e 5. Fim-Para Para num = 3 Até 6 Faça Escreva(num) // Serão visualizados os números: 3,4,5 e 6. Fim-Para Para vlr = 0 Até 10 Passo 2 Faça Escreva(vlr) // Serão visualizados os números: 0,2,4,6,8 e10. Fim-Para Para cont = 3 Até 0 Passo -1 Faça Escreva(cont) // Serão visualizados os números: 3,2,1 e 0. Fim-Para • Estrutura de repetição – Enquanto...Fim-Enquanto Assim como o comando Para...Fim-Para permite realizar loop, a instrução Enquanto... Fim-Enquanto executa o mesmo processo. Mas é preciso lembrar que esse comando não realiza a contagem automaticamente. Por isso, é necessário implementar um contador de passos. Enquanto (condição) Faça {comando(s)} Fim-Enquanto Vamos repetir os exemplos da instrução Para...Fim-Para, mas agora com o comando Enquanto. x 1 Enquanto (x<=5) Faça Escreva(x) // Serão visualizados os números: 1,2,3,4 e 5. x x + 1 Fim-Enquanto num 3 Enquanto (num <=6) Faça Escreva(num) // Serão visualizados os números: 3,4,5 e 6. num num + 1 Fim-Enquanto vlr 0 Enquanto (vlr <=10) Faça Escreva(vlr) // Serão visualizados os números: 0,2,4,6,8 e 10. vlr vlr + 2 Fim-Enquanto WFernando Bastos 22 cont 3 Enquanto (cont >=0) Faça Escreva(cont) // Serão visualizados os números: 3,2,1 e 0. cont cont -1 Fim-Enquanto • Estrutura de repetição – Repita...até que O comando Repita tem a mesma finalidade do comando Enquanto, quando o assunto é funcionalidade. A única diferença é a localização da condição de teste, que ocorre no final da cadeia de loop garantindo a execução dos comandos no mínimo uma vez. Repita {comando(s)} Até que (condição) x 1 Repita Escreva(x) // Serão visualizados os números: 1,2,3,4 e 5. x x + 1 Até que (x<=5) num 3 Repita Escreva(num) // Serão visualizados os números: 3,4,5 e 6. num num + 1 Até que (x<=6) vlr 0 Repita Escreva(vlr) // Serão visualizados os números: 0,2,4,6,8 e 10. vlr = vlr + 2 Até que (vlr <=10) cont 3 Repita Escreva(cont) // Serão visualizados os números: 3,2,1 e 0. cont cont -1 Até que (cont >=0) 1.6. Vetor Definido também como matriz unidimensional, um vetor (tabelas 6 e 7) é uma variável que possui vários dados, acessados por meio de uma posição relativa, seguindo a mesma regra da concepção e atribuição das variáveis. WFernando Bastos 23 No exemplo anterior, podemos verificar que cada elemento de um vetor é caracterizado por uma posição relativa. Observando o vetor de letras, teremos: Posição 1 à valor A Posição 5 à valor R Posição 8 à valor Q Em um pseudocódigo, realizamos a declaração de um vetor da seguinte forma: Programa vetores Declare vet como conjunto[n..n1] de <tipo> Início {comandos ou bloco de comandos} Fim O nome do vetor é representado pela expressão “vet”, cujo conjunto de informações é identificado por “n”, posição inicial, e “n1”, posição final, ou seja, um vetor de 10 posições poderá ser representado como [1..10]. E o “tipo” de informação que este vetor deverá receber. Programa vetores Declare vet como conjunto[1..5] de inteiro Início vet[1] 90 vet[2] 1 vet[3] 100 vet[4] 4 - 1 vet[5] 21 Fim WFernando Bastos 24 Para realizar o acesso à posição de um vetor, é preciso identificar a posição que está entre os sinais de [], logo após o nome do vetor: Escreva(vet[3]) Leia(vet[2]) • trabalhando com vetor A entrada de dados em um vetor é realizada por intermédio de seu identificador. Para isso, utiliza-se um contador crescente ou decrescente, de acordo com a necessidade. Vamos carregar 10 informações numéricas dentro de um vetor. vet como conjunto[1..10] de inteiro Para i = 1 Até 10 Faça Escreva(“Digite um valor na posição”, i, “do vetor”) Leia(vet[i]) Fim-Para Seguindo a mesma lógica, podemos realizar a impressão do conteúdo desse vetor. Para i = 1 Até 10 Faça Escreva(“Valor da posição:”, i, “do vetor é”, vet[i]) Fim-Para Vamos reunir os conceitos de leitura e impressão no mesmo algoritmo. Programa vetor_dados Declare vet como conjunto[1..10] de inteiro i como inteiro Início Para i = 1 Até 10 Faça Escreva(“Digite um valor na posição”, i, “do vetor”) Leia(vet[i]) Fim-Para Para I = 1 Até 10 Faça Escreva(“Valor da posição:”, i, “do vetor é”, vet[i]) Fim-Para Fim Outro exemplo para analisar: Programa média Declare vetor como conjunto[1..8] de inteiro soma, média como flutuante ct como inteiro Início soma = 0 Para ct = 1 Até 8 Faça WFernando Bastos 25 Escreva(“Digite um valor na posição”, ct, “do vetor”) Leia(vetor[ct]) soma soma + vetor[ct] Fim-Para média soma / 8 ---- ou ---- média ß soma / ct Escreva(“A média final é:”, média) Fim 1.7. matriz A matriz, ao contrário do vetor, é multidimensional. Nesse caso, os dadossão armazenados ou lidos de acordo com a relação entre os eixos, e seu índice é representado por dois ou mais valores. Uma matriz 3x2, por exemplo, possui três linhas por duas colunas. Portanto, qualquer referência aos dados deverá apontar para ambas as posições da forma matriz[2,1], indicando que a informação referenciada está na linha 2 e na coluna 1 da matriz. Graficamente, tem-se: Programa matriz Declare mat como conjunto[1..5][1..3] de inteiro Início {comando ou bloco de comandos} Fim Assim como os vetores, para a atribuição de valores em uma matriz, devemos identificar a linha e a coluna. Programa matriz Declare mat como conjunto[1..2][1..2] de inteiro Início mat[1,1] 19 mat[1,2] 2 mat[2,1] 77 mat[2,2] 16 Fim • trabalhando com matriz A leitura e a impressão das matrizes seguem o mesmo esquema dos vetores. Mas será necessário utilizar dois contadores: um para identificar a linha e outro, para coluna. Vejamos o exemplo de uma matriz 2x2. WFernando Bastos 26 Programa matriz Declare matriz como conjunto[1..2][1..2] de flutuante lin, col como inteiro Início Para lin = 1 Até 2 Faça Para col = 1 Até 2 Faça Escreva(“Linha”, lin, “da matriz”) Escreva(“Coluna”, col, “da matriz”) Escreva(“Qual o valor?”) Leia(matriz[lin,col]) Fim-Para Fim-Para Escreva(“Visualizando os dados da matriz:”) Para lin = 1 Até 2 Faça Para col = 1 Até 2 Faça Escreva(“Linha”, lin, “da matriz”) Escreva(“Coluna”, col, “da matriz”) Escreva(“O valor é:”) Escreva(matriz[lin, col]) Fim-para Fim-para Fim Outro exemplo: Programa soma Declare a,b,c como conjunto[1..8][1..4] de flutuante ln, cl como inteiro Início Para ln = 1 Até 8 Faça Para cl = 1 Até 4 Faça Escreva(“Digite o valor para a Matriz A:”) Leia(a[ln, cl]) Escreva(“Digite o valor para a Matriz B:”) Leia(b[ln, cl]) Escreva(“Valores somados para a Matriz C:”) c[ln, cl] = a[ln, cl] + b[ln, cl] Escreva(c[ln, cl]) Fim-Para Fim-Para Fim 1.8. Programação modular Uma das técnicas bem empregadas para o desenvolvimento de programas é a modulação de parte do código. Isso significa que o programa principal é quebrado em partes menores. E cada parte representa uma unidade funcional. Essas sub-rotinas são identificadas como procedimentos ou WFernando Bastos 27 funções. Permitem que parte do código seja reaproveitada em outra parte do código principal ou, até mesmo, em projetos diferentes, por outros programadores. • Procedimento Um procedimento, assim como o programa principal, é formado por toda a estrutura lógica (início-fim, variáveis e instruções). Pode ser utilizado em qualquer parte de um programa que seja referenciado. Dessa forma, ao ser acionado, o procedimento assume o controle da execução. E, quando é finalizado, o controle retorna ao programa principal. Procedimento nome-do-procedimento ( parâmetro:tipo ) Declare {variáveis} {comando ou bloco de comando Fim-Procedimento O nome-do-procedimento faz a identificação do programa – e é por essa expressão que ele será referenciado. Logo após essa etapa, encontramos os parâmetros e a definição de seu tipo, os quais representam variáveis que receberão valores no momento da chamada. Assim como o código principal, o procedimento possui as variáveis locais de manipulação de dados e os comandos necessários para a sua execução. • Variáveis locais ou globais As variáveis locais são consideradas apenas em uma sub-rotina (procedimento ou função). Dessa forma, são desconhecidas pelo algoritmo principal, ao contrário das globais, que são consideradas por todo o algoritmo. WFernando Bastos 28 O quadro em seguida mostra o campo de visualizações das variáveis, conforme o pseudocódigo apresentado anteriormente. • Passagem de parâmetro WFernando Bastos 29 A passagem de parâmetros por valor é utilizada para que as sub-rotinas possam receber informações e realizar qualquer tipo de manipulação fora do pseudocódigo principal. • Função Uma função tem as mesmas características estruturais de um procedimento, no que diz respeito a fatores como funcionalidade, visualização de variáveis e chamadas. Mas a sua principal vantagem é a possibilidade de retorno de valores em tempo real. Isso quer dizer que, quando chamamos determinada função, podemos receber valores em tempo real, armazenando o resultado em uma variável. WFernando Bastos 30
Compartilhar