·

Cursos Gerais ·

Linguagens de Programação

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Recomendado para você

Texto de pré-visualização

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 11 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ógicoaritmé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ógicoaritmé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 12 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 escritora 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 reserveos 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 corrijao e teste novamente até que o seu programa responda de forma correta 13 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 131 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 132 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 entrada manual de dados mas o que seria uma entrada manual É quando é perguntado para oa usuárioa 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 retireo do forno se não continue assando Usamos este bloco quando queremos representar o que chamamos de subrotinas Mas o que seria uma subrotina 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árioa do sistema os resultados finais ou intermediários do algoritmo Neste caso o resultado final do nosso algoritmo é o próprio bolo 133 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 batepapo 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 JL 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Ê 21 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 22 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 23 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 subbloco 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 subbloco 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 subbloco 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 24 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 25 Comando de atribuição e operadores aritméticos e lógicos 251 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 252 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 253 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 JL 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Ê 31 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 devese fazer uma coisa caso contrário devese 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 multipliquea por 15 senão multipliquea 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 15 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 32 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 JL 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 41 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 oa usuárioa 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 retireo do forno se não continue assando Usamos este bloco quando queremos representar o que chamamos de subrotinas Mas o que seria uma subrotina 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árioa 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 Início Bolo de laranja Recuperar 1 e 12 xícara de farinha Recuperar 12 xícara de açúcar Armário Recuperar duas pitadas de sal Recuperar duas colheres de café de fermento parteSeca farinha açúcar sal fermento Recuperar 1 xícara de suco de laranja gelado Recuperar 2 colheres de sopa de vinagre parteLiquida suco de laranja vinagre Acenda o forno a 180º Unte uma forma de buraco com farinha massa parteSólida parteLiquida Despeje a massa na forma Coloque no forno bolo assado Sim Não bolo Continue assando Fim Bolo de laranja Início Bolo de chocolate Recuperar 1 e 12 xícara de farinha Recuperar 12 xícara de açúcar Armário Recuperar 12 xícara de achocolatado Recuperar duas pitadas de sal Recuperar duas colheres de café de fermento parteSeca farinha açúcar achocolatado sal fermento Recuperar 1 xícara de água gelada Armário Recuperar 2 colheres de sopa de vinagre Recuperar 1 colher de café de essência de baunilha parteLiquida água vinagre baunilha Acenda o forno a 180º Unte uma forma de buraco com farinha massa parteSólida parteLiquida Despeje a massa na forma Coloque no forno bolo assado Sim Não bolo Continue assando Fim Bolo de chocolate 29 Relembre agora o pseudocódigo 30 Pseudocódigo boloDeChocolate real farinha acucar sal fermento achocolatado parteSeca real agua vinagre baunilha parteLiquida massa farinha 15 acucar 05 achocolatado 05 sal 0005 fermento 001 parteSeca farinha acucar achocolatado sal fermento agua 1 vinagre 001 baunilha 0005 parteLiquida agua vinagre baunilha imprimaForno aceso a 180º imprimaForma untada massa parteLiquida parteSeca imprimaBolo na forma imprimaForma no forno massa igual a 3 significa bolo pronto enquantomassa 3 tirar 001 significa assar o bolo massa massa 001 A massa assada é o bolo retorne massa 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 JL 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 SE 35 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 JL 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 61 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 62 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 63 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 mathh 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 Início Bolo de chocolate Recuperar 1 e 12 xícara de farinha Recuperar 12 xícara de açúcar Armário Recuperar 12 xícara de achocolatado Recuperar duas pitadas de sal Recuperar duas colheres de café de fermento parteSeca farinha açúcar achocolatado sal fermento Recuperar 3 xícaras de água gelada Armário Recuperar 2 colheres de sopa de vinagre Recuperar 1 colher de café de essência de baunilha parteLíquida água vinagre baunilha Acender o forno a 180º Unte uma forma de buraco com farinha massa parteSólida parteLíquida Despeje a massa na forma Coloque no forno bolo assado sim não bolo Continue assando Fim Bolo de chocolate 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 Início Bolo de laranja Recuperar 1 e 12 xícara de farinha Recuperar 12 xícara de açúcar Armário Recuperar duas pitadas de sal Recuperar duas colheres de café de fermento parteSeca farinha açúcar sal fermento Recuperar 1 xícara de suco de laranja gelado Armário Recuperar 2 colheres de sopa de vinagre parteLíquida suco de laranja vinagre Acender o forno a 180º Unte uma forma de buraco com farinha massa parteSólida parteLíquida Despeje a massa na forma Coloque no forno bolo assado sim não bolo Continue assando Fim Bolo de laranja 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 25 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 programadora definir o que cada coisa significa dentro de um programa Sendo assim sintase livre nos programas que você vai confeccionar para definir o que cada valor significa Segundo fluxograma boloDeChocolate real farinha acucar sal fermento achocolatado parteSeca real agua vinagre baunilha parteLiquida massa farinha 15 acucar 05 achocolatado 05 sal 0005 fermento 001 parteSeca farinha acucar achocolatado sal fermento agua 1 vinagre 001 baunilha 0005 parteLiquida agua vinagre baunilha imprimaForno aceso a 180º imprimaForma untada massa parteLiquida parteSeca imprimaBolo na forma imprimaForma no forno massa igual a 3 significa bolo pronto enquantomassa 3 tirar 001 significa assar o bolo massa massa 001 A massa assada é o bolo retorne massa 49 64 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 JL 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