Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmo e linguagem de programação Prof. André Furlan 2 SUMÁRIO BLOCO 1: INTRODUÇÃO A ALGORITMOS.................................................................... 3 BLOCO 2: PSEUDOLINGUAGEM E COMANDOS PORTUCÊ........................................... 10 BLOCO 3: COMANDOS DE REPETIÇÃO PORTUCÊ......................................................... 17 BLOCO 4: CONSTRUÇÃO DE ALGORITMOS................................................................... 24 BLOCO 5: LINGUAGEM C............................................................................................. 33 BLOCO 6: LAÇOS E IMPLEMENTAÇÃO DA LINGUAGEM C............................................ 39 3 BLOCO 1: INTRODUÇÃO A ALGORITMOS 1.1. Conceitos básicos de programação de computadores Para entendermos melhor o que é programar um computador, precisamos antes entender o que é um computador. Um computador é composto por uma série de peças cujo objetivo é processar e armazenar dados. Qualquer dispositivo que cumpra esse papel pode ser chamado de computador. A seguir, encontramos um diagrama básico das peças de um computador: Unidades de entrada são mouse, teclado, câmeras etc. Já as memórias secundárias são o que conhecemos como unidades de armazenamento, ou seja, o HD e o pen drive. A CPU é a Unidade de Processamento Central (Central Processing Unity), que é composta de memória cache, registradores, unidade lógico-aritmética e unidade de controle. A memória cache é uma memória intermediária entre o processador e a memória RAM que é usada para aumentar a velocidade de transmissão de dados entre esses dois dispositivos. 4 Os registradores são a memória interna do processador. A diferença dessa memória para memória RAM é que os registradores são muito mais rápidos, no entanto, sua capacidade de armazenamento é muito reduzida. Sem eles, o processador não funciona. Por sua vez, a unidade lógico-aritmética é a parte do processador responsável por fazer todas as operações matemáticas e lógicas que nada mais são do que os nossos programas. Já a unidade de controle garante que todas as partes do processador funcionem de forma sincronizada. A memória RAM é o local onde os dados são armazenados antes de serem processados na CPU. Já a memória ROM é um local no computador que contém um programa básico de inicialização do sistema. Essa memória não pode ser atualizada, ou seja, ela é apenas para leitura. E, finalmente, temos as unidades de saída que na maioria das vezes será nosso monitor ou alguma impressora conectada ao computador. Agora que já conhecemos a estrutura básica de um computador, podemos definir de forma correta o que é programá-lo: Programar um computador nada mais é do que definir uma série de passos que a máquina deve seguir para que um dado problema seja resolvido. Para isso, utilizamos o que chamaremos de linguagem de programação e lógica de programação que nos ajudará a definir regras claras do quê, como e quando o computador deve fazer. Ou seja, programar nada mais é do que definir uma “receita de bolo” que a máquina deve seguir. 1.2 Etapas da programação de computadores Agora que já sabemos o que é um computador e o que é programar um computador, precisamos entender quais são as etapas necessárias para realizar tal tarefa. Quando o problema a ser resolvido não é de grande complexidade, geralmente podemos ir direto à programação sem a necessidade de passos intermediários. No 5 entanto, quando o problema fica mais complexo, é recomendado quebrar o problema maior em problemas menores de forma a facilitar o entendimento, a modelagem e a resolução do problema. Antes de continuarmos, devemos frisar que o método aqui apresentado é apenas um entre muitos outros existentes. O método apresentado foca apenas em quesitos básicos para quem está começando. Para problemas de grande complexidade, recomendamos estudar outras técnicas mais avançadas. Passo 1 – Análise – Coleta de dados Escreva um texto descrevendo seu problema do jeito que achar melhor. Esse texto pode ser dividido em tópicos, ou não, de acordo com o estilo do escritor(a). O texto deve descrever por completo o problema a ser resolvido. Passo 2 – Análise – Identificação dos dados Procure pelos verbos no seu texto, lembrando que verbo é toda palavra que indica algum tipo de ação. Os verbos encontrados serão, provavelmente, as funcionalidades necessárias para resolver o problema. Encontrados os verbos, verifique se eles têm relação com o problema apresentado. Se tiverem, reserve-os para a próxima etapa. Passo 3 – Análise – Interpretação dos dados Com os verbos em mãos, verifique quais se relacionam entre si e quais não se relacionam. Os que se relacionam entre si provavelmente representam uma única funcionalidade, e os que não se relacionam provavelmente representam eles sozinhos uma funcionalidade. Passo 4 – Modelagem Monte seu programa usando o método escolhido. Você pode usar diagramas de fluxo, pseudolinguagem. 6 Passo 5 – Programação Programe seu sistema usando linguagem de programação real. Teste sua lógica usando problemas cujo resultado você já saiba, verificando sempre se sua lógica gera o resultado esperado. Caso isso seja negativo, descubra o problema, corrija-o e teste novamente até que o seu programa responda de forma correta. 1.3 Formas de expressão de algoritmos (fluxograma, pseudolinguagem, linguagem) Até agora tratamos os programas como “lógica”, no entanto, este nome não é o mais apropriado, já que não reflete a totalidade do que estamos fazendo. Afinal de contas, programar não é apenas lidar com a lógica, mas também com a questão matemática. Sendo assim, daqui para a frente definiremos nossos códigos como “algoritmos”, mas.... O que é um algoritmo? 1.3.1 Algoritmo Um algoritmo nada mais é do que uma série de passos para realizar um certo objetivo. Por exemplo: caso queiramos fazer um bolo de chocolate, teremos de juntar os vários ingredientes de uma forma específica para, posteriormente, colocá-los em um recipiente específico e depois colocar tudo dentro de um forno a uma temperatura específica por um tempo definido para, no final, termos um bolo. Essa série de passos pode ser representada de várias formas, sendo que a primeira, a chamamos de fluxograma ou diagrama de fluxo. Um fluxograma ou diagrama de fluxo nada mais é do que um desenho, composto por vários símbolos, que representa a nossa lógica de forma visual facilitando a organização e análise do problema. 1.3.2 Símbolos Os símbolos de um fluxograma geralmente são alguma forma geométrica com texto dentro. A seguir, apresentamos alguns dos principais que são usados para representar os algoritmos. Retomaremos esses símbolos no Bloco 4. 7 A este bloco, damos o nome de bloco de processo. Seu papel é descrever uma ação relativamente simples dentro do algoritmo, como, por exemplo, assar o bolo. Ações mais complexas e com mais passos serão representadas por outro bloco que poderemos ver mais à frente. Este bloco representa o início ou fim do algoritmo. Ele deve ser colocado em primeiro lugar no topo da página e por último na parte de baixo da página que representa sua lógica, indicando respectivamente o início e o fim do nosso algoritmo. Já este bloco indica entradamanual de dados, mas o que seria uma entrada manual? É quando é perguntado para o(a) usuário(a) uma informação que o sistema necessita para seguir em frente com o algoritmo, como, por exemplo, a quantidade de farinha. Este é um dos blocos mais importantes para algoritmos, pois representa uma estrutura de decisão. É com ele que faremos estruturas de desvio e verificação. Um bom exemplo é: O bolo está pronto? Se sim, retire-o do forno; se não continue assando. Usamos este bloco quando queremos representar o que chamamos de sub-rotinas. Mas o que seria uma sub-rotina? Nada mais é do que uma série de comandos que realizam um certo algoritmo, ou seja, este bloco representa um algoritmo inteiro! 8 Apesar de pouco usado, talvez seja necessário usar este bloco. Ele representa uma origem ou destino de dados, como, por exemplo, se você está com dúvida na receita do bolo e precisa de alguma informação da sua avó. O papel deste bloco é simplesmente exibir ao(à) usuário(a) do sistema os resultados finais ou intermediários do algoritmo. Neste caso, o resultado final do nosso algoritmo é o próprio bolo. 1.3.3 Pseudocódigo Pseudocódigo nada mais é do que uma forma de representar a lógica do algoritmo usando palavras do idioma nativo. O pseudocódigo é muito útil na hora de apresentar um algoritmo sem vinculá-lo a uma linguagem de programação específica tornando, assim, a lógica aplicável a quaisquer tecnologias de programação. A seguir, há uma tabela com a correspondência entre os blocos de fluxograma e o PortuCê, pseudolinguagem adotada neste Elemento Textual. Retomaremos essa tabela no Bloco 2: Asse o bolo; 9 Entrevista Muitos podem se perguntar: “Para que estudar algortimos?”. Com o objetivo de responder a essa pergunta, neste bloco, tivemos um bate-papo com a Profa. Debora de Camargo Cavalheiro, do Departamento de Engenharia Civil da Universidade Santo Amaro (UNISA) a fim de elucidarmos as variadas aplicações de algoritmos para facilitar a execução de diversas atividades. Confira a entrevista e descubra esse novo universo. Referências AGUILAR, L. J. Fundamentos de programação: algoritmos, estruturas de dados e objetos. 3. ed. Porto Alegre: AMGH, 2011. AGUILAR, L. J. Programação em C++: algoritmos, estruturas de dados e objetos. 2. ed. Porto Alegre: AMGH, 2011. ALVES, W. P. Linguagem e lógica de programação. 1. ed. São Paulo: Érica, 2014. ASCENCIO, A. F. G.; VENERUCHI, E. A. Fundamentos da programação de computadores. São Paulo: Prentice Hall, 2007. CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L.; STEIN, C. Algoritmos: teoria e prática. 2. ed. Rio de Janeiro: Campus, 2002. DASGUPTA, S; PAPADIMITRIOU, C.; VAZIRANI, U. Algoritmos. Porto Alegre: AMGH, 2010. DOBRUSHKIN, V. A. Métodos para análise de algoritmos. Rio de Janeiro: LTC, 2012. 10 MANZANO, J. A. M. G.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento de programas de computador. 22. ed. São Paulo: Érica, 2009. PEREIRA, S. L. Linguagem C. São Paulo: Érica, 2001. MANZANO, J. A. N. G. Algoritmos: lógica para desenvolvimento de programação de computadores. 28. ed. São Paulo: Érica, 2016. SZWARCFITER, J.L; MARKENZON, L. Estruturas de dados e seus algoritmos. 3. ed. Rio de Janeiro: LTC, 2015. SOFFNER, R. Algoritmos e programação em linguagem C. 1 ed. São Paulo: Saraiva, 2013. BLOCO 2: PSEUDOLINGUAGEM E COMANDOS PORTUCÊ 2.1 Pseudocódigo Como já mencionamos no bloco anterior, pseudocódigo nada mais é do que uma forma de representar a lógica do algoritmo usando palavras do idioma nativo. O pseudocódigo é muito útil na hora de apresentar um algoritmo sem vinculá-lo a uma linguagem de programação específica tornando, assim, a lógica aplicável a quaisquer tecnologias de programação. A seguir, retormamos uma tabela com a correspondência entre os blocos de fluxograma e o PortuCê, pseudolinguagem adotada neste Elemento Textual: 11 Asse o bolo; 2.2 Identificadores, tipos básicos e declaração de variáveis O que é um identificador? Nada mais é do que uma palavra que vai identificar uma região específica da memória do computador, ou seja, em vez de usarmos números complicados para acessar uma certa posição da memória do computador, identificamos essa posição usando uma palavra que seja facilmente inteligível. A essa palavra, damos o nome de variável. Note no trecho de código a seguir as palavras destacadas em negrito. Essas palavras são os nossos identificadores, ou, como usaremos de forma mais frequente, nossas variáveis. 12 Perceba que é nesse momento que estamos declarando as variáveis, e que, quando as declaramos, devemos obrigatoriamente antes delas definir o seu tipo. Nesse caso, inteiro para a variável opção e real para a variável bolo. Em cinza, temos escrito um tipo. O tipo serve para definir que espécie de informação aquela variável carregará. Esses tipos, dentro do nosso pseudocódigo, poderão ser os seguintes: ● real: que nada mais é do que um número inteiro ou um número com casas decimais; ● inteiro: que é apenas um número sem casas decimais; ● carácter: que pode conter texto. Muito cuidado na hora de definir um tipo de variável, pois, caso você atribua um valor errado a ela, pode ter problemas com seu programa. Não se pode, por exemplo, atribuir um texto a uma variável do tipo inteiro ou real. 2.3 Blocos de programa Um bloco de programa nada mais é do que uma forma de agrupar algumas funcionalidades para que elas sejam executadas, ou não, dependendo do contexto. Um bloco de programa é iniciado pelo símbolo “{“ e finalizado pelo símbolo “}”. Perceba que um bloco de programa pode ter dentro outros blocos. A isso, damos o nome de sub-bloco. O trecho a seguir exemplifica melhor: 13 Perceba que o bloco principal do nosso programa (destacado em laranja) é aquele que envolve todos os outros elementos do nosso código. Em seguida, podemos notar um sub-bloco que delimita o que deve ser feito quando o valor da variável opção for igual a 1 (destacado em vermelho). Por fim, percebemos outro sub-bloco que delimita o que deve ser feito caso a variável não seja igual a 1. Ou seja, blocos podem definir tanto funções, como no caso da função principal que vimos anteriormente, quanto blocos de execução, no caso da comparação. 14 2.4 Separador de comando Considerando o código a seguir: Perceba que, ao final de cada uma das linhas, temos o símbolo “;” (ponto e vírgula). Esse símbolo informa ao programa que terminamos de chamar um comando. Esse símbolo é essencial, já que seu esquecimento pode causar erros no programa de forma que ele não seja sequer compilado. Uma coisa importante de se notar também é que blocos de código não são finalizados com ponto e vírgula, pois, como o próprio nome já diz, ponto e vírgula é um separador de comandos e não de blocos. 15 2.5 Comando de atribuição e operadores aritméticos e lógicos 2.5.1 Comando de atribuição O comando de atribuição tem como utilidade atribuir um valor a uma variável, ou seja, armazenar um valor numa posição da memória vinculada a um identificador. O comando de atribuição pode ser feito a qualquer momento no código.A seguir, vemos atribuição do valor 0 a variável opção e a atribuição do valor 10 a variável bolo. O símbolo usado para fazer a atribuição é o símbolo “=” (igual). 2.5.2 Operadores aritméticos Operadores aritméticos são símbolos usados para fazer operações matemáticas tais como: multiplicação, divisão, soma, subtração e resto da divisão. A seguir, estão listados os seus respectivos símbolos: 2.5.3 Operadores lógicos Os operadores lógicos são usados principalmente dentro de comparações, pois, juntamente com os operadores relacionais, nos ajudam a fazer testes com os nossos dados. Os operadores lógicos são os seguintes: A seguir, trechos de códigos com exemplos. 16 Nesse primeiro exemplo, a variável opção deve ser maior que 1 e menor que 5. Caso contrário, o comando dentro do bloco não poderá ser executado. Nesse segundo exemplo, a variável opção deve ter pelo menos um dos valores indicados, ou seja, ela deve ser igual a 20 ou igual a 30 para que o bloco seja executado. Nesse terceiro exemplo, perceba o sinal de exclamação na frente do sinal de igual, ou seja, o valor da variável opção deve ser diferente de 80 para que o bloco de código correspondente seja executado. Referências AGUILAR, L. J. Fundamentos de programação: algoritmos, estruturas de dados e objetos. 3. ed. Porto Alegre: AMGH, 2011. AGUILAR, L. J. Programação em C++: algoritmos, estruturas de dados e objetos. 2. ed. Porto Alegre: AMGH, 2011. ALVES, W. P. Linguagem e lógica de programação. 1. ed. São Paulo: Érica, 2014. ASCENCIO, A. F. G.; VENERUCHI, E. A. Fundamentos da programação de computadores. São Paulo: Prentice Hall, 2007. CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L.; STEIN, C. Algoritmos: teoria e prática. 2. ed. Rio de Janeiro: Campus, 2002. 17 DASGUPTA, S; PAPADIMITRIOU, C.; VAZIRANI, U. Algoritmos. Porto Alegre: AMGH, 2010. DOBRUSHKIN, V. A. Métodos para análise de algoritmos. Rio de Janeiro: LTC, 2012. MANZANO, J. A. M. G.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento de programas de computador. 22. ed. São Paulo: Érica, 2009. PEREIRA, S. L. Linguagem C. São Paulo: Érica, 2001. MANZANO, J. A. N. G. Algoritmos: lógica para desenvolvimento de programação de computadores. 28. ed. São Paulo: Érica, 2016. SZWARCFITER, J.L; MARKENZON, L. Estruturas de dados e seus algoritmos. 3. ed. Rio de Janeiro: LTC, 2015. SOFFNER, R. Algoritmos e programação em linguagem C. 1 ed. São Paulo: Saraiva, 2013. BLOCO 3: COMANDOS DE REPETIÇÃO PORTUCÊ 3.1 Comando condicional SE e operadores relacionais O comando SE é usado para fazer verificações e eventuais desvios de execução dentro do código, ou seja, dada uma certa condição, deve-se fazer uma coisa, caso contrário, deve-se fazer outra. Em nossas vidas cotidianas, usamos o tempo todo o comando condicional SE, por exemplo: “Se você comer, irá crescer” → Aqui vemos que a condição verificada é se essa pessoa come ou não, e que, caso esta condição seja satisfeita, a pessoa irá crescer. “Se o ônibus não passar logo, irei chegar atrasado (a)” → Percebemos aqui que, caso o ônibus não passe em breve, a pessoa chegará atrasada. 18 O comando SE não precisa ter apenas uma ação para os casos em que a verificação da condição seja verdadeira. Caso a verificação da condição seja falsa, é aí que entra o SENÃO. “Se você tomar o remédio, irá melhorar, senão irá morrer!” → Podemos perceber agora que SE a pessoa tomar o remédio, então ela irá melhorar, SENÃO ela irá morrer. Agora que você já entendeu para que serve o comando SE, vamos mostrar como representá-lo em pseudolinguagem a partir da frase a seguir: “Se a altura for maior que 2, então multiplique-a por 1,5, senão multiplique-a por 3”. O código resultante será o seguinte: Perceba que em vermelho temos o comando SE, e que, dentro dos parênteses desse comando, temos a condição de que a altura tem que ser maior do que 2. Perceba também que logo após o fim do bloco do comando do SE, temos o SENÃO. Note que, para cada situação, teremos que fazer um conjunto de instruções diferente: caso a altura seja maior do que 2, deveremos multiplicar a altura por 1,5, senão teremos que multiplicar a altura por 3. O comando SE pode ser usado sozinho ou em conjunto com o SENÃO quando queremos fazer alguma coisa no caso de a condição indicada não ser satisfeita. O comando SE pode ser usado em conjunto com vários operadores relacionais. Veja os exemplos a seguir: 19 Aqui a condição apenas será satisfeita caso a altura seja maior do que 2: Aqui a condição será satisfeita caso a altura seja maior do que 2 ou igual a 2: Aqui a condição apenas será satisfeita caso a altura seja menor do que 2: Aqui a condição será satisfeita caso a altura seja menor do que 2 ou igual a 2: Aqui a condição será satisfeita se a altura for exatamente igual a 2: Aqui a condição será satisfeita se a altura for diferente de 2: 3.2 Estruturas de repetição Algumas vezes, precisamos repetir um comando até que alguma condição seja satisfeita. Outras vezes, precisamos repetir um comando uma certa quantidade de vezes e, em outras, precisamos executar o comando uma vez e verificar se é necessário 20 executá-lo novamente. Para isso, existem as estruturas de repetição, mais conhecidas como laços. Os comandos de repetição não foram representados até agora nos fluxogramas. Eles até têm um símbolo que os representa, no entanto, tais símbolos não são comumente usados. Para representarmos estruturas de repetição em fluxograma, representamos da seguinte forma: Note que, após o início do algoritmo, é pedido ao usuário que informe uma certa quantidade que é guardada na variável de mesmo nome. Em seguida, temos um bloco SE que verifica se a quantidade é menor do que zero, ou seja, negativa. Se o valor da quantidade for negativo, então a seta do SIM leva ao bloco que pergunta a quantidade, ou seja, este comando será repetido enquanto a quantidade for menor do que zero. Caso a quantidade seja maior ou igual a zero, a seta do NÃO será seguida e o algoritmo seguirá em frente. 21 Os laços nada mais são do que uma forma de repetir comandos de uma forma inteligente e elegante dentro do nosso código. A seguir, temos os tipos de laços disponíveis: Comando ENQUANTO Repete um comando enquanto alguma condição for verdadeira: Nesse caso, verificamos que temos uma variável cujo valor inicial é zero, e que enquanto o valor dessa variável for menor ou igual 100, se deve executar o comando escreva para em seguida adicionar 1 ao valor atual dessa variável. Comando FAÇA ENQUANTO Executa um comando uma vez para depois verificar se deve executá-lo novamente: Nesse caso, verificamos que temos uma variável cujo valor inicial é zero, e que já de primeira escrevemos a mensagem “Olá” na tela para, em seguida, adicionar 1 ao valor atual da variável. No entanto, verificamos se devemos continuar apenas depois da primeira vez em que as instruções foram executadas. 22 Comando PARA Executa o comando uma certa quantidade definida de vezes: O comando PARA é um pouco mais complicado de se escrever. Uma de suas principais diferenças é que dentro dele podemos definir claramente a quantidade de vezes que queremos fazer alguma coisa. O comando PARA também é muito usado para gerarmos sequências numéricas, pois, se você notar, definimos a variável que serámodificada dentro dele mesmo. Para entender um pouco melhor, perceba que a parte destacada em verde declara a variável que vamos usar e atribui um valor inicial a ela. A parte destacada em laranja é a condição para que o laço continue sendo executado. E a parte em vermelho é o que acontecerá com a variável, caso a condição seja verdadeira. Logicamente, tudo que está dentro do bloco definido para o comando PARA também será executado caso a condição seja verdadeira. A parte verde é executada apenas uma vez, a parte em laranja é executada todas as vezes, e a parte em vermelho é executada apenas a partir da segunda vez que o laço é executado. Comandos de entrada e saída Os comandos de entrada e saída são usados para interagir com o usuário. Algumas vezes, precisamos perguntar alguma coisa ao usuário como: sua data de nascimento, sua idade, sua altura, tipo sanguíneo etc. Para isso, usamos os comandos de entrada. Mais frequente ainda é a necessidade de informar dados ao usuário. Nesse caso, usamos os comandos de saída. A seguir, vai um exemplo de cada um deles: 23 Vemos aqui uma variável inteira sendo declarada sem nenhum valor inicial atribuído, logo em seguida usamos o comando LEIA que vai solicitar ao usuário que digite um valor seguido da tecla Enter. Após o usuário digitar o valor e teclar Enter, esse valor será guardado na variável que foi colocada dentro dos parênteses do comando LEIA. Percebemos que, em seguida, o comando ESCREVA é usado para exibir a mensagem “Olá usuário”. Em seguida, o mesmo comando também é usado juntamente com uma concatenação de uma sequência de caracteres com o valor da altura para mostrar uma mensagem dizendo ao usuário que a sua altura é a altura informada no comando LEIA. Referências AGUILAR, L. J. Fundamentos de programação: algoritmos, estruturas de dados e objetos. 3. ed. Porto Alegre: AMGH, 2011. AGUILAR, L. J. Programação em C++: algoritmos, estruturas de dados e objetos. 2. ed. Porto Alegre: AMGH, 2011. ALVES, W. P. Linguagem e lógica de programação. 1. ed. São Paulo: Érica, 2014. ASCENCIO, A. F. G.; VENERUCHI, E. A. Fundamentos da programação de computadores. São Paulo: Prentice Hall, 2007. CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L.; STEIN, C. Algoritmos: teoria e prática. 2. ed. Rio de Janeiro: Campus, 2002. DASGUPTA, S; PAPADIMITRIOU, C.; VAZIRANI, U. Algoritmos. Porto Alegre: AMGH, 2010. DOBRUSHKIN, V. A. Métodos para análise de algoritmos. Rio de Janeiro: LTC, 2012. MANZANO, J. A. M. G.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento de programas de computador. 22. ed. São Paulo: Érica, 2009. 24 PEREIRA, S. L. Linguagem C. São Paulo: Érica, 2001. MANZANO, J. A. N. G. Algoritmos: lógica para desenvolvimento de programação de computadores. 28. ed. São Paulo: Érica, 2016. SZWARCFITER, J.L; MARKENZON, L. Estruturas de dados e seus algoritmos. 3. ed. Rio de Janeiro: LTC, 2015. SOFFNER, R. Algoritmos e programação em linguagem C. 1 ed. São Paulo: Saraiva, 2013. BLOCO 4. CONSTRUÇÃO DE ALGORITMOS 4.1 Fluxograma: formas de expressão de algoritmos Retomemos os símbolos: A este bloco, damos o nome de bloco de processo. Seu papel é descrever uma ação relativamente simples dentro do algoritmo, como, por exemplo, assar o bolo. Ações mais complexas e com mais passos serão representadas por outro bloco que poderemos ver mais à frente. Este bloco representa o início ou fim do algoritmo. Ele deve ser colocado em primeiro lugar no topo da página e por último na parte de baixo da página que representa sua lógica, indicando respectivamente o início e o fim do nosso algoritmo. Já este bloco indica entrada manual de dados, mas o que seria uma entrada manual? É quando é perguntado para o(a) usuário(a) uma informação que o sistema necessita para seguir em frente com o algoritmo, como, por exemplo, a quantidade de farinha. 25 Este é um dos blocos mais importantes para algoritmos, pois representa uma estrutura de decisão. É com ele que faremos estruturas de desvio e verificação. Um bom exemplo é: O bolo está pronto? Se sim, retire-o do forno; se não continue assando. Usamos este bloco quando queremos representar o que chamamos de sub-rotinas. Mas o que seria uma sub-rotina? Nada mais é do que uma série de comandos que realizam um certo algoritmo, ou seja, este bloco representa um algoritmo inteiro! Apesar de pouco usado, talvez seja necessário usar este bloco. Ele representa uma origem ou destino de dados, como, por exemplo, se você está com dúvida na receita do bolo e precisa de alguma informação da sua avó. O papel deste bloco é simplesmente exibir ao(à) usuário(a) do sistema os resultados finais ou intermediários do algoritmo. Neste caso, o resultado final do nosso algoritmo é o próprio bolo. 26 A seguir, veja exemplos de uso – Fazendo um bolo de chocolate ou laranja 27 28 29 Relembre agora o pseudocódigo 30 Pseudocódigo 31 32 33 Referências AGUILAR, L. J. Fundamentos de programação: algoritmos, estruturas de dados e objetos. 3. ed. Porto Alegre: AMGH, 2011. AGUILAR, L. J. Programação em C++: algoritmos, estruturas de dados e objetos. 2. ed. Porto Alegre: AMGH, 2011. ALVES, W. P. Linguagem e lógica de programação. 1. ed. São Paulo: Érica, 2014. ASCENCIO, A. F. G.; VENERUCHI, E. A. Fundamentos da programação de computadores. São Paulo: Prentice Hall, 2007. CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L.; STEIN, C. Algoritmos: teoria e prática. 2. ed. Rio de Janeiro: Campus, 2002. DASGUPTA, S; PAPADIMITRIOU, C.; VAZIRANI, U. Algoritmos. Porto Alegre: AMGH, 2010. DOBRUSHKIN, V. A. Métodos para análise de algoritmos. Rio de Janeiro: LTC, 2012. MANZANO, J. A. M. G.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento de programas de computador. 22. ed. São Paulo: Érica, 2009. PEREIRA, S. L. Linguagem C. São Paulo: Érica, 2001. MANZANO, J. A. N. G. Algoritmos: lógica para desenvolvimento de programação de computadores. 28. ed. São Paulo: Érica, 2016. SZWARCFITER, J.L; MARKENZON, L. Estruturas de dados e seus algoritmos. 3. ed. Rio de Janeiro: LTC, 2015. SOFFNER, R. Algoritmos e programação em linguagem C. 1 ed. São Paulo: Saraiva, 2013. BLOCO 5: Linguagem C Chegou o momento de programarmos usando uma linguagem real. Até aqui, usamos uma linguagem de programação imaginária (PortuCê) que nos permitiu treinar nossa lógica e entender as estruturas básicas da maioria das linguagens de programação. 34 Entenda que, após esta parte, você poderá programar na maioria das linguagens de programação existentes, pois elas compartilham todas as estruturas que já vimos anteriormente. Vamos começar comparando as estruturas do PortuCê com a linguagem C: Bloco de programa e comando condicional IF Em PortuCê Em linguagem C Bloco de programa Comando SE35 Identificadores, separadores de comando 36 Comando de atribuição, comentários e comandos de leitura e escrita 37 Operadores aritméticos, lógicos e relacionais 38 Referências AGUILAR, L. J. Fundamentos de programação: algoritmos, estruturas de dados e objetos. 3. ed. Porto Alegre: AMGH, 2011. AGUILAR, L. J. Programação em C++: algoritmos, estruturas de dados e objetos. 2. ed. Porto Alegre: AMGH, 2011. ALVES, W. P. Linguagem e lógica de programação. 1. ed. São Paulo: Érica, 2014. ASCENCIO, A. F. G.; VENERUCHI, E. A. Fundamentos da programação de computadores. São Paulo: Prentice Hall, 2007. CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L.; STEIN, C. Algoritmos: teoria e prática. 2. ed. Rio de Janeiro: Campus, 2002. DASGUPTA, S; PAPADIMITRIOU, C.; VAZIRANI, U. Algoritmos. Porto Alegre: AMGH, 2010. DOBRUSHKIN, V. A. Métodos para análise de algoritmos. Rio de Janeiro: LTC, 2012. MANZANO, J. A. M. G.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento de programas de computador. 22. ed. São Paulo: Érica, 2009. PEREIRA, S. L. Linguagem C. São Paulo: Érica, 2001. MANZANO, J. A. N. G. Algoritmos: lógica para desenvolvimento de programação de computadores. 28. ed. São Paulo: Érica, 2016. SZWARCFITER, J.L; MARKENZON, L. Estruturas de dados e seus algoritmos. 3. ed. Rio de Janeiro: LTC, 2015. SOFFNER, R. Algoritmos e programação em linguagem C. 1 ed. São Paulo: Saraiva, 2013. 39 BLOCO 6: LAÇOS E IMPLEMENTAÇÃO DA LINGUAGEM C 6.1 Switch Esse comando é usado geralmente quando se tem muitos comandos IF e precisamos de uma forma mais elegante de escrever. A forma de usá-lo é a seguinte: A minhaVariavel pode ser qualquer variável. É ela que será comparada com os valores em laranja. Esses valores podem ser 1, 2, 3, como no exemplo ou quaisquer outros. 6.2 Laços Laços são usados para realizar um ou vários comandos repetidas vezes sem que para isso seja necessário escrever o comando várias vezes. Os laços disponíveis na linguagem C são os seguintes: For Usado quando é necessário gerar sequências numéricas crescentes ou decrescentes. Corresponde ao comando PARA do PortuCê. A forma de usá-lo é a seguinte: 40 Tanto na sequência crescente quanto na decrescente temos três partes básicas no laço: a parte laranja que cria uma variável e atribui um valor inicial a ela. A parte vermelha que verifica se o laço deve continuar ou não. A parte em verde que faz a sequência aumentar ou diminuir. While Usado quando é necessário executar um ou mais comandos enquanto uma condição for verdadeira. Corresponde ao comando ENQUANTO do PortuCê. A forma de usá-lo é a seguinte: A parte em verde corresponde a uma condição que deve ser verdadeira para que o laço continue. Do While Usado quando é necessário executar um ou mais comandos, para em seguida, verificar se devem ser repetidos caso uma condição seja verdadeira. Corresponde ao comando FAÇA ENQUANTO do PortuCê. A forma de usá-lo é a seguinte: 41 6.3 Funções úteis em C fopen Usada para gravar dados em arquivos. A forma de usá-la é: Funções matemáticas Todas as funções matemáticas a seguir necessitam que a biblioteca math.h seja incluída no programa. Uma biblioteca é uma coleção de funções pré-programadas prontas para usar. 42 Exemplos Para facilitar a sua prática e relembrar alguns conceitos a mais, faremos um pequeno exemplo de programa com sua representação em diagrama de fluxo, pseudocódigo e em linguagem C: O exemplo em questão é o da confecção de um bolo de chocolate ou de um bolo de laranja. Para fazermos tais bolos são necessários alguns ingredientes e algumas decisões que devem ser tomadas. Neste exemplo, você perceberá que usamos o conceito de função, inclusive no fluxograma para modularizar o nosso código. Modularizar nada mais é do que separar a nossa lógica em blocos menores. Dessa forma, garantimos a legibilidade do algoritmo e a facilidade de manutenção do nosso programa. Sem mais delongas, vamos ao fluxograma: 43 Fluxograma Perceba que nesse primeiro diagrama de fluxo temos a chamada de duas funções: “bolo de chocolate” e “bolo de laranja”. E essas duas funções serão mais detalhadas nos fluxogramas a seguir: 44 45 Já nesse fluxograma temos uma fonte de dados representada pelo "armário". Um armário pode ser um banco de dados, um arquivo externo ou até mesmo (para efeito de exemplo) valores digitados no próprio código do programa. Perceba também que, na parte em que se pergunta se o bolo está assado, na verdade temos um laço que depois será traduzido para o comando enquanto do PortuCê, ou seja, essa parte será traduzida para: “enquanto o bolo não estiver assado, continue assando” 46 47 Vale para o fluxograma sobre bolo de laranja o mesmo comentário do anterior. Pseudocódigo Agora devemos traduzir pedaço a pedaço do nosso fluxograma para pseudolinguagem de programação PortuCê. Tentamos reproduzir o mais fielmente possível a lógica do fluxograma. Ao ler o pseudocódigo, provavelmente você perceberá que quando o valor da variável massa for maior do que 3 ou 2,5 significará que o bolo está pronto. Esse foi apenas um valor escolhido a esmo para esse significado. Qualquer outro valor escolhido poderia ser válido, ou seja, geralmente fica a cargo do programador(a) definir o que cada coisa significa dentro de um programa. Sendo assim, sinta-se livre nos programas que você vai confeccionar para definir o que cada valor significa. 48 49 6.4 Código em C Considerando que o PortuCê é uma pseudolinguagem de programação inspirada na linguagem C, o que devemos fazer agora é quase que uma tradução do português para 50 o inglês. É claro que a linguagem C tem muito mais tipos de variáveis disponíveis do que o PortuCê. Por isso, deveremos escolher com cuidado quais os tipos de nossas variáveis e, feito isso, deveremos testar o nosso programa de forma a verificar se ele funciona como o esperado. 51 52 53 Referências AGUILAR, L. J. Fundamentos de programação: algoritmos, estruturas de dados e objetos. 3. ed. Porto Alegre: AMGH, 2011. AGUILAR, L. J. Programação em C++: algoritmos, estruturas de dados e objetos. 2. ed. Porto Alegre: AMGH, 2011. ALVES, W. P. Linguagem e lógica de programação. 1. ed. São Paulo: Érica, 2014. ASCENCIO, A. F. G.; VENERUCHI, E. A. Fundamentos da programação de computadores. São Paulo: Prentice Hall, 2007. CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L.; STEIN, C. Algoritmos: teoria e prática. 2. ed. Rio de Janeiro: Campus, 2002. DASGUPTA, S; PAPADIMITRIOU, C.; VAZIRANI, U. Algoritmos. Porto Alegre: AMGH, 2010. DOBRUSHKIN, V. A. Métodos para análise de algoritmos. Rio de Janeiro: LTC, 2012. MANZANO,J. A. M. G.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento de programas de computador. 22. ed. São Paulo: Érica, 2009. PEREIRA, S. L. Linguagem C. São Paulo: Érica, 2001. MANZANO, J. A. N. G. Algoritmos: lógica para desenvolvimento de programação de computadores. 28. ed. São Paulo: Érica, 2016. SZWARCFITER, J.L; MARKENZON, L. Estruturas de dados e seus algoritmos. 3. ed. Rio de Janeiro: LTC, 2015. SOFFNER, R. Algoritmos e programação em linguagem C. 1 ed. São Paulo: Saraiva, 2013.
Compartilhar