Baixe o app para aproveitar ainda mais
Prévia do material em texto
2020 LÓGICA DE PROGRAMAÇÃO 2 Conteúdo 1. Introdução ..................................................................................................................... 4 1.1. Sobre algoritmos e programas ...................................................................................... 4 1.2. O que é um algoritmo? .................................................................................................. 4 1.3. Representação de algoritmos ........................................................................................ 4 1.4. Algoritmos naturais ....................................................................................................... 4 1.5. Fluxograma convencional .............................................................................................. 4 1.6. Diagrama de blocos ....................................................................................................... 6 1.7. Pseudocódigo ou metalinguagem ................................................................................. 6 1.8. O que é um programa? .................................................................................................. 7 1.9. Programa de computador .............................................................................................. 8 1.10. Dados armazenados em variáveis; ................................................................................ 8 1.11. Variáveis tipadas ............................................................................................................ 8 2. Codificando em shell script ............................................................................................ 9 2.1. A declaração de variáveis em shellscript ....................................................................... 9 3. Instruções de escrita e leitura de dados no shellscript ............................................... 10 3.1. Procedimentos para leitura de dados ......................................................................... 10 3.2. Procedimentos para escrita de dados ......................................................................... 10 3.2.1. Concatenação de informações para apresentação ..................................................... 10 3.3. Procedimentos de decisão usando comando if (se) .................................................... 11 3.3.1. Opções do comando test ou [ ] .................................................................................... 11 3.4. Procedimento de decisão usando comando case (caso) ............................................. 12 3.5. Procedimento de decisão usando comando select (seleção) ...................................... 13 3.6. Comando break ............................................................................................................ 14 4. Loops condicionais ....................................................................................................... 14 4.1. Procedimento de repetição utilizando o comando for................................................ 15 4.1.1. Outra sintaxe para o comando for ............................................................................... 16 4.2. Procedimento de repetição utilizando o comando while ........................................... 16 5. Arrays ........................................................................................................................... 18 5.1. Acesso individual aos valores armazenados no array ................................................. 18 5.2. Acesso sequencial aos valores armazenados no array ................................................ 19 5.3. Gravando dados no array ............................................................................................ 19 6. Entrada, saída e saída de erro padrão. ........................................................................ 20 6.1. Redirecionamentos ...................................................................................................... 20 3 6.2. Redirecionamentos de saída padrão; .......................................................................... 20 6.3. Redirecionamentos de entrada padrão ....................................................................... 20 6.4. Anexar saída ................................................................................................................. 21 7. Funções ........................................................................................................................ 22 7.1. Declarando funções ..................................................................................................... 22 7.2. Outros exemplos com funções .................................................................................... 23 7.3. Acesso a variáveis ........................................................................................................ 24 4 1. INTRODUÇÃO 1.1. SOBRE ALGORITMOS E PROGRAMAS Após o estudo do problema, análise das diversas possibilidades de Solução e a escolha da melhor delas, cabe agora a tarefa de escrever um programa que implemente esta solução. Antes, contudo, é preciso saber a diferença entre um algoritmo em um programa, 1.2. O QUE É UM ALGORITMO? Um algoritmo é uma seqüência extremamente precisa de instruções que, quando lida e executada por outra pessoa, produz o resultado esperado, isto é, a Solução de um problema. Esta seqüência de instruções é nada mais nada menos que um registro escrito da seqüência de passos necessários que devem ser executados para manipular informações, ou dados, para se chegar à resposta do problema. Isto serve por dois motivos: O Através do registro se garante que não haverá necessidade de se redescobrir a solução quando muito tempo tiver passado e todos tiverem esquecido o problema; O Pode ser necessário que outra pessoa execute a solução de um determinado problema, mas através de instruções precisas, de maneira que não haja erros durante o processo. Nestes casos é necessário um algoritmo para representar a Solução do problema. 1.3. REPRESENTAÇÃO DE ALGORITMOS Desde o conhecimento dos algoritmos que tivemos necessidade de encontrar uma forma de representá-los, e então apareceram formas de representá-los. São eles o Fluxograma Convencional, Diagrama de Blocos e Pseudocódigo ou Metalinguagem. 1.4. ALGORITMOS NATURAIS Os algoritmos naturais podem ser entendidos como algoritmos usados no dia-a-dia, descritos numa linguagem natural, como por exemplo, uma simples receita de Culinária, ou a forma como trocamos o pneu da nossa viatura ou a lâmpada do nosso escritório. Os algoritmos são usados no dia-a-dia de forma a poder esquematizar a execução de uma determinada tarefa. Para que um algoritmo seja completo é fundamental descrevê-lo de forma detalhada, passo a passo, de modo a que possa ser executado por qualquer pessoa. 1.5. FLUXOGRAMA CONVENCIONAL O Fluxograma Convencional é uma representação gráfica de algoritmos em que diferentes formas geométricas implicam diferentes ações, instruções ou comandos. Esta propriedade facilita a compreensão de um algoritmo no seu todo. 5 Os fluxogramas convencionais têm implicações com o nível físico da implementação de um algoritmo. Figuras geométricas diferentes São usadas para representar operações de entrada e saída de dados, realizadas em diversos dispositivos, utilizando esta abordagem apenas a podemos utilizar a nível lógico das instruções. Figura 1: Símbolos utilizados na construção de fluxogramas De um modo geral o fluxograma resume-se a um símbolo inicial, onde a execução do algoritmo começa, os símbolos seguintes fazem parte dos passos do algoritmo e o símbolo final, onde a execução do algoritmo pára. Partindo do símbolo inicial existe sempre apenas um ultimo caminho que pode ser seguido, representando assim uma única seqüência de passosque resolvem a questão proposta. Figura 2: Exemplo de fluxograma computacional 6 1.6. DIAGRAMA DE BLOCOS Diagrama de Blocos que é também conhecido por Diagrama de Chapin, trata-se de uma forma gráfica específica que permite o desenvolvimento de algoritmos estruturados através de Símbolos retangulares que acabam por formar o Bloco de Solução. Os símbolos básicos para a representação de um Diagrama de Blocos são os seguintes: Figura 3: Estrutura de seqüência de procedimentos Figura 4: Estrutura de repetição de procedimentos Figura 5: Estrutura de seleção de procedimentos 1.7. PSEUDOCÓDIGO OU METALINGUAGEM Esta é a forma de representação de um algoritmo que apresenta uma descrição mais detalhada e precisa. Este tipo de representação assemelha-se muito a forma de como os programas são escritos, basicamente esta forma de representação baseia-se na descrição de todos os passos e detalhes da seqüência numa linguagem conhecida, e que depois apenas terá de ser convertida para a sintaxe de qualquer linguagem de programação. A representação de um algoritmo usando o método de Pseudocódigo ou Metalinguagem pode é a Seguinte: Figura 6: Representação de algoritmo através de pseudocódigo 7 1.8. O QUE É UM PROGRAMA? Um programa é a codificação em alguma linguagem formal que garanta que os passos do algoritmo sejam executados da maneira como se espera por quem executa as instruções. Veja o exemplo abaixo, ele apresenta o algoritmo de Receita de um bolo de chocolate: Algoritmo de Receita de um bolo de chocolate Bater duas claras em neve; Adicionar duas gemas; Adicionar uma Xícara de açúcar; Adicionar duas colheres de margarina; Adicionar uma xícara farinha de trigo; Adicionar uma Colher de chá de fermento; Adicionar uma xícara de chocolate em pó; Levar à batedeira até obter uma massa homogênea; Colocar numa forma e levar ao forno em fogo brando. Vamos imaginar, a título de ilustração, que é a primeira vez que a pessoa entra na cozinha em toda a sua vida e resolve fazer um bolo de chocolate seguindo o algoritmo apresentado. O algoritmo foi escrito por um cozinheiro para Ser executado por outro cozinheiro, o que não é o caso, pois a pessoa é inexperiente em cozinha e não sabe o que significa "bater as claras em neve". Significa que o novato vai ficar Sem o bolo. O novato precisaria de algo mais detalhado, isto é, de instruções meticulosas de Como Se obtém claras em neve. Para este cozinheiro Seria neceSSário um outro código adicional, veja o exemplo abaixo: Algoritmo para fazer claras em neve. a. Início b. Repita os três seguintes passos: c. Pegue um ovo. d. Quebre o ovo. e. Separe a clara da gema. f. Coloque Somente a clara em um prato fundo. g. Até que todos os ovos tenham sido utilizados. h. Pegue um garfo. i. Mergulhe a ponta do garfo no prato. j. Repita os seguintes passos: k. Bata a clara com o garfo por um tempo. l. Levante o garfo m. Observe se a espuma produzida fica presa no garfo n. Quando a espuma ficar presa no garfo, pare. o. Neste ponto suas claras em neve estão prontas. p. Fim. 8 1.9. PROGRAMA DE COMPUTADOR Programa de computador é a denominação que se dá a um conjunto organizado de instruções em linguagem natural ou codificada, contida em suporte físico de qualquer natureza, de emprego necessário em máquinas automáticas de tratamento da informação, dispositivos, instrumentos ou equipamentos periféricos, baseados em técnica digital ou análoga, para fazê- los funcionar de modo e para fins determinados. (Artigo 1o da Lei de Proteção de Programa de Computador). Figura 7: Exemplo de código em Shell Script Figura 8: Fragmento de código da Linguagem C 1.10. DADOS ARMAZENADOS EM VARIÁVEIS; Variáveis e constantes são os elementos básicos que um programa manipula. Uma Variável é um espaço reservado na memória do Computador para armazenar um tipo de dado determinado. Variáveis devem receber nomes para poderem ser referenciadas e modificadas quando necessário. Um programa deve conter declarações que especificam de que tipo são as variáveis que ele utilizará e às vezes um valor inicial. 1.11. VARIÁVEIS TIPADAS Linguagens tiradas (ou linguagens fortemente tipificadas) são aquelas em que todas as variáveis têm um tipo específico (o tipo serve para indicar qual o tio de dado que está armazenado) seus tipos são importantes para a linguagem. 9 Normalmente as linguagens fortemente tipadas também são estaticamente tipadas, o que significa que o uma vez que a variável foi declarada com um tipo ela será até o seu tipo até a finalização do programa e também normalmente possuem declaração explicita de tipo onde tipo da variável deve ser especificado logo na sua declaração. Uma vez que tais linguagens levam em consideração o tipo, operações entre tipos diferentes o ocasionam erro. Figura 9: Exemplo de utilização de variáveis em pseudocódigo Figura 10: Fragmento de código demonstrando a declaração e variáveis na Linguagem C 2. CODIFICANDO EM SHELL SCRIPT 2.1. A DECLARAÇÃO DE VARIÁVEIS EM SHELLSCRIPT Uma variável é um label (nome) que armazena um valor para ser utilizado posteriormente no Código. Seu uso evita repetições de Valores por parte do programador e torna o código mais informativo, limpo e eficiente. A linguagem do Shell não é tipada, ou Seja, pode-se armazenar qualquer tipo de valor em uma variável, desde Strings a números. Para declará-las a construção do nome da variável deve observar o seguinte: nomeVariavel=Valor nome_da_Variavel=Valor Onde: nome_da_variavel: Sequencia de caracteres que deve começar por qualquer letra maiúscula ou minúscula ou underScore (); Valor: qualquer dado que deva Ser atribuído à variável; O Shell Script é uma linguagem case sensitive, ou seja, nele há diferença entre "nomeUser" e "nomeuser"; 10 Não são permitidos espaços antes nem depois do caractere =; Apenas caracteres alfanuméricos podem ser utilizados como identificadores válidos de variáveis; Os valores do tipo string que contenham espaços devem ser especificados entre aspas como no exemplo em baixo. Exemplos: Ola="bom dia" echo "$ola Paulo" echo "$ola Paulo" #Texto recebido da variável ola 3. INSTRUÇÕES DE ESCRITA E LEITURA DE DADOS NO SHELLSCRIPT 3.1. PROCEDIMENTOS PARA LEITURA DE DADOS Comando utilizado "read" Exemplos de utilização: read nomeUser read numCarro read casaPolice Não esquecer que no momento da atribuição de valores para as variáveis, não é utilizado o "$" e para utilizar ou acessar o valor armazenado devemos utilizar o “$” antes do nome da variável. 3.2. PROCEDIMENTOS PARA ESCRITA DE DADOS Comando utilizado "echo" Exemplos de utilização: o echo “Texto de teste” o echo “Junta texto e variável $valorPagar $txt” Atenção: Não esquecer que para uma variável ser apresentada ou utilizada em cálculos ela deverá ter recebido os valores antes. 3.2.1. CONCATENAÇÃO DE INFORMAÇÕES PARA APRESENTAÇÃO Concatenação é um termo usado em programação para designar a operação de juntar o conteúdo de duas sequencias de caracteres. Por exemplo, considerando as strings "casa" e "mento" a concatenação da primeira com a segunda gera a string "casamento". Observar que uma nova string é criada, o resultado é diferente de se ter ao final a exibição de casamento, mas ela ser obtida através da impressão seqüencial das duas variáveis, Exemplo de código básico #!/bin/bash echo "Digite seu nome" 11 read nome echo "Digite sua idade" read idade echo "Seu nome é Snome e sua idade é $idade" 3.3. PROCEDIMENTOS DE DECISÃO USANDO COMANDO IF (SE) Comando utilizado "if" Exemplos de utilização: Permite executar uma ou mais instruções se o valor inserido atender ao teste lógico proposto; Exemplo da estrutura geral: Figura 11: Estrutura geral da instrução complexa Figura12: Exemplo de código utilizando o comando IF 3.3.1. OPÇÕES DO COMANDO TEST OU [ ] 12 Exemplo: Figura 13: Código funcional utilizando a instrução if 3.4. PROCEDIMENTO DE DECISÃO USANDO COMANDO CASE (CASO) Comando utilizado "case" Exemplos de utilização: Permite executar uma ou mais instruções se o valor informado pelo usuário estiver entre um dos valores esperados; Exemplo da estrutura geral: Outro exemplo: 13 3.5. PROCEDIMENTO DE DECISÃO USANDO COMANDO SELECT (SELEÇÃO) Comando utilizado "select" Exemplos de utilização: Exibe um menu numerado, os valores devem ser listados pelo programador e escolhidos pelo usuário. Exemplo da estrutura geral do programa. Figura 14: Estrutura do comando select Outro exemplo: 14 3.6. COMANDO BREAK O comando ou declaração break é uma forma simples de sair de um loop em execução, interrompendo-a em um momento definido. Pode ser utilizado em laços for, while e do while. Figura 15: Código preparado para exemplificar a utilização do comando break Também é possível a utilização deste comando em loops aninhados, e através dele escolher qual loop será interrompido. Para isso, podemos usar o comando break de acordo com a seguinte sintaxe: break n onde o valor n indica o nível do loop que será interrompido. Por padrão, esse valor é 1, o que significa que o loop interrompido é o loop onde a instrução break se encontra. Se ajustarmos o valor de n para, por exemplo, 2, o comando break irá interromper a execução do próximo nível, que corresponde ao loop externo em relação ao atual, e assim sucessivamente para estruturas de repetição aninhadas mais complexas. Figura 16: Código não funcional para exemplificar a utilização do break em loops aninhados 4. LOOPS CONDICIONAIS Loops (repetições) são muito úteis para ficar iterando sobre determinadas ações até que uma condição seja satisfeita e interrompa o laço(conjunto de instruções que fica entre o início e o fim do marcador do loop). 15 4.1. PROCEDIMENTO DE REPETIÇÃO UTILIZANDO O COMANDO FOR O comando for pode ser utilizado quando se quer criar um laço (conjunto de repetições) e se sabe a quantidade de vezes se deseja repetir o loop. A quantidade pode ser previamente definida, digitada pelo usuário durante a execução do script, obtida por um processo do próprio script ou definida pela quantidade de itens indicada no loop. Figura 17: Uma forma de estruturar o comanto "for". Devido a grande variedade de formas de utilização o comando pode ser montado também de diversas formas, seguem abaixo algumas destas formas: Figura 18: Neste exemplo todos os elementos da lista são atribuídos à variável, um por vez. Figura 19: Aqui todos os elementos da lista (neste caso strings) são atribuídos à variável, um por vez. Figura 20: Esta estrutura permite criar uma seqüência automática. Figura 21: Esta estrutura também permite a criação uma seqüência automática, só que há um passo de 2 em 2. Figura 22: Funciona como demonstrado na figura 19, só que em versões mais antigas de shell script Figura 23: Funciona como demonstrado na figura 20, só que em versões mais antigas de shell script. 16 4.1.1. OUTRA SINTAXE PARA O COMANDO FOR Essa forma de construção de loop através do comando for compartilha uma herança comum com a linguagem de programação C. É caracterizada por uma expressão de controle de loop de três parâmetros, ela consiste em um inicializador (EXP1*), um teste ou condição de loop (EXP2*) e uma expressão de contagem (EXP3*). *para exemplo Figura 24: Estrutura geral do for do shell script semelhante a linguagem C Figura 25: Exemplo de utilização do comando for do shell script semelhante a linguagem C. 4.2. PROCEDIMENTO DE REPETIÇÃO UTILIZANDO O COMANDO WHILE O comando while pode ser utilizado quando se quer criar um laço (conjunto de repetições) e não se tem a necessidade de definir uma quantidade específica de vezes de repetições. No caso o while o loop se manterá enquanto a condição utilizada para comparação obtiver resultado true (verdadeiro). Figura 26: Forma geral do comando while. Figura 27: Fragmento de código, exemplo de utilização do comando while. 17 Figura 28: Exemplo de utilização do comando while, o loop repete enquanto o valor informado for maior que 10. 18 5. ARRAYS 5.1. Acesso individual aos valores armazenados no array Figura 29: A forma de impressão apresenta aqui permite o acesso a apenas uma posição por vez. 19 5.2. Acesso sequencial aos valores armazenados no array Figura 30: A forma de impressão apresentada aqui permite um acesso sequencial a diversos elementos do array Figura 31: Outra forma de acesso sequencial, esta forma permite a obtenção automática do número máximo de elementos do array. 5.3. Gravando dados no array Figura 32: O exemplo acima mostra o processo de entrada de dados num array e logo abaixo a impressão de seus dados. Figura 33: Este exemplo, assim como o anterior (figura 32), mostra o processo de entrada de dados, no entanto a impressão dos dados aqui tem seu limite definido de forma dinâmica. 20 6. ENTRADA, SAÍDA E SAÍDA DE ERRO PADRÃO. Um programa/comando quando executado necessita de pontos para a entrada padrão, a saída padrão e a saída de erro padrão de dados. Estes pontos permitem a comunicação do comando/programa e também podem ser redirecionados para outros dispositivos. Entrada padrão: Lugar de onde o programa recebe informações, por padrão do teclado; Saída padrão: Lugar onde o programa pode mandar informações, por padrão é enviado para a tela; Saída de erro padrão: Lugar onde o programa pode mandar mensagens de erro, por padrão é enviado também para a tela; 6.1. Redirecionamentos Caso seja necessário gravar as mensagens de um programa/comando (aquilo que ele exibe na tela), as saídas em um arquivo afim de não perder informação caso o programa seja desligado. 6.2. Redirecionamentos de Saída Padrão; Permite a modificação no ponto de saída de um programa. O símbolo de redirecionamento de saída padrão é o (>), sua utilização se dá assim: 6.3. Redirecionamentos de Entrada Padrão Permite a modificação no ponto de entrada de um programa. O símbolo de redirecionamento de entrada padrão é o (<), sua utilização se dá assim (observar que, apesar da estrutura do comando ser a mesma pode haver pequenos cuidados a serem tomados): Nos exemplos a utilização do (<) tem o objetivo de copiar valores armazenados em arquivos para variáveis. Uma vez o valor armazenado na variável esta pode ser trabalhada como qualquer outra variável. O comando ls tem a função de listar todos os arquivos (inclusive os ocultos) do diretório corrente no formato longo, a utilização do parâmetro –l serve para que ele apresente detalhes, no entanto o parâmetro “>” desviará a exibição do conteúdo da tela para o arquivo de texto com o nome “lista.txt”. 21 6.4. Anexar Saída Permite a modificação no ponto de saída de um programa. O símbolo para indicação de anexar é o (>>), sua utilização em parte é semelhante a do (>), ou seja, escreve em arquivo, se ele não existir cria um com o nome indicado. Mas há uma diferença, é que ele não apaga o conteúdo anterior, ele escreve no final do arquivo indicado. No exemplo ao lado, a impressão do texto “Bom dia!!” que deveria ser exibida na tela é direcionada para o arquivo “bomDia.txt”. A utilização do (>>) dentro do comando “for” faz com que o texto seja inserido no final do arquivo de texto diversas vezes 22 7. FUNÇÕES As funções podem ser consideradas pequenos blocos de scripts, elas servem para juntar grupos de instruções que são executados somente quando o agrupamento forchamado pelo nome. As funções podem ser compostas por comandos regulares utilizados no restante do script ou até por chamadas de outras funções. O nome relacionado ao grupo de instruções denominado como uma função deve ser única e obedecer as mesmas regras de construção de variável. 7.1. Declarando funções Existem mais de uma forma de declarar funções em um script bash, segue abaixo essas estruturas de construção de função: Abaixo seguem exemplos de utilização das três formas, não há diferenças práticas entre elas se utilizando o interpredador bash. Forma 1 Forma 2 Forma 3 23 7.2. Outros exemplos com funções Com a utilização de funções o corpo do programa fica mais simples, menos poluído. O objetivo de uma função deve ser claro, ela deve ter a uma finalidade específica dentro do script. EXEMPLO 01 24 7.3. Acesso a variáveis No Shell todas as variáveis são por padrão definidas como globais, somente serão definidas como locais as variáveis que forem definidas utilizando a palavra “local” antes. Variáveis globais podem ser acessadas de qualquer parte do script. No código fornecido as funções compartilham as variáveis com o programa principal, a variável total recebe seu valor inicial no início do programa, tem seu valor modificado na função “recebeValor” e imprime seu valor na função “fazSoma”. EXEMPLO 02 No código ao lado é possível ver a limitação do escopo da variável provocada pela utilização de parâmetro “local”, ele não permite que a variável seja acessada fora da função.
Compartilhar