Baixe o app para aproveitar ainda mais
Prévia do material em texto
135 UNIDADE 3 LÓGICA DE PROGRAMAÇÃO OBJETIVOS DE APRENDIZAGEM PLANO DE ESTUDOS A partir desta unidade você será capaz de: • compreender os fundamentos de lógica de programação; • entender as estruturas de controle; • conhecer os tipos estruturados; • compreender subalgoritmos e escopo de identificadores. Esta unidade está dividida em cinco tópicos, sendo que no final de cada um deles você encontrará atividades que contribuirão para a apropriação dos conteúdos. TÓPICO 1 – FUNDAMENTOS DE LÓGICA DE PROGRAMAÇÃO TÓPICO 2 – CONSTANTES E VARIÁVEIS TÓPICO 3 – ESTRUTURAS DE CONTROLE TÓPICO 4 – TIPOS ESTRUTURADOS TÓPICO 5 – SUBALGORITMOS E ESCOPO DE IDENTIFICADORES 136 137 TÓPICO 1 FUNDAMENTOS DE LÓGICA DE PROGRAMAÇÃO UNIDADE 3 1 INTRODUÇÃO O dia a dia de pessoas e instituições tem sido facilitado pelo uso de softwares das mais variadas naturezas. Seu uso crescente requer que mais e melhores softwares sejam desenvolvidos para atender diversas áreas de aplicação. O desenvolvimento de software, porém, ainda é uma tarefa árdua e requer profissionais altamente qualificados para sua execução. A maturidade lógica do profissional de programação é um elemento essencial para o sucesso do software que será construído por ele. Estes profissionais devem ter em mente que grande parte do sucesso de um software depende de uma definição clara das regras de negócio a serem implementadas nele. Deve-se desenvolver estas regras de negócio visando alto desempenho e eficiência nos resultados obtidos. Embora seja altamente sistemático, o desenvolvimento de software não deve ser encarado como uma atividade puramente técnica. O profissional de desenvolvimento deve levar em consideração o fato de que geralmente softwares são criados para o atendimento de necessidades de pessoas. Quem pontua a qualidade do software são as pessoas que os utilizam. Tão importante quanto o bom desempenho e eficiência é o atendimento das necessidades dos usuários. Neste sentido, os fatores ergonômicos são relevantes e também devem ser considerados. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 138 2 FUNDAMENTOS DE LÓGICA DE PROGRAMAÇÃO Para tornar esta unidade mais clara e produtiva, neste tópico são descritos alguns conceitos que auxiliarão no aprendizado e entendimento do conteúdo dos demais tópicos. Vejamos: • Programa: é uma unidade de software destinada à execução de determinada tarefa. Geralmente atribui-se esta denominação a uma unidade de software que tenha um conjunto reduzido de funcionalidades. • Sistema: para fins computacionais, sistema pode ser definido como um conjunto inter-relacionado de programas. Um sistema geralmente permite a execução de um número maior de funcionalidades. Estas funcionalidades podem estar organizadas em programas diferentes. Um exemplo é o sistema operacional. Ele possui uma série de pequenos programas que auxiliam no seu funcionamento e na execução das tarefas. • Rotina: é uma pequena unidade dentro de um programa que geralmente executa uma tarefa bastante específica. Um exemplo pode ser a rotina de cálculo de média. Este trecho de programa é denominado rotina, pois executa uma tarefa específica e que sempre ocorre e é tratada da mesma maneira. Nas linguagens de programação as rotinas geralmente são implementadas na forma de funções ou procedimentos. • Sub-rotina: é um trecho bastante particular do software que geralmente auxilia uma rotina. Pode-se dizer que uma sub-rotina é o refinamento de uma rotina. Nas linguagens de programação, tanto as rotinas quanto as sub-rotinas podem ser encontradas na forma de funções (function) ou procedimentos (procedure). • Comando: é uma palavra ou símbolo que indica uma ordem para execução de uma ação. Os comandos são imperativos. Por exemplo: leia, escreva, escolha, entre outros. • Instrução: é uma das tarefas que devem ser executadas para a obtenção do resultado desejado através do software. Esta tarefa pode ser um cálculo, uma atribuição, uma chamada de sub-rotina, entre outras. • Linguagem de Programação: são softwares destinados ao desenvolvimento de novos softwares. É através delas que são escritos códigos de programação entendidos e executados pelos computadores. • Sintaxe: é a forma de organização das instruções para que seja obtido o resultado desejado, seguindo-se as regras da linguagem utilizada. É o conjunto de regras que indicam o formato de escrita das instruções. Considera também a sequência em que as instruções devem ser escritas para atender aos requisitos da linguagem utilizada, pois não basta apenas a escrita estar correta, é necessário que haja coerência na instrução. TÓPICO 1 | FUNDAMENTOS DE LÓGICA DE PROGRAMAÇÃO 139 • Semântica: refere-se ao significado das instruções, ou o que um conjunto de instruções quer informar. Na semântica, um conjunto de instruções deve ser escrito de forma que elas possam ser correta e coerentemente executadas. • Teste de Mesa: é uma técnica de validação de algoritmos que visa testar os resultados obtidos em relação ao objetivo para o qual o algoritmo foi construído. O teste de mesa consiste na definição de um conjunto de dados de entrada e resultados esperados, após o processamento destes dados. Submissão destes dados às instruções do algoritmo e a obtenção do resultado deste processamento. Caso o resultado do teste de mesa seja o mesmo que o resultado esperado, há grande possibilidade de o algoritmo estar correto. Num teste de mesa é fundamental validar todas as situações previstas no algoritmo. • Comentário: é uma informação agregada ao algoritmo que informa ao programador algo importante e que deve ser considerado no momento de interpretar ou alterar o algoritmo. É aconselhável que junto à declaração de variáveis e procedimentos sejam acrescentados comentários descrevendo seus significados e finalidades. Regras de negócios também podem ser descritas em comentários, facilitando futuras manutenções. Nos algoritmos desenvolvidos neste livro serão utilizadas chaves { } para delimitar o início e fim de comentários. • Endentação: é o alinhamento das instruções de forma a simplificar a identificação da subordinação dos blocos de instruções. A endentação também é chamada de indentação ou identação na área de programação. É altamente recomendável que os algoritmos, assim como os programas, sejam endentados, pois facilita o entendimento. Para a maioria das linguagens de programação a endentação não exerce influência. Nestes casos, quem é beneficiado pela endentação é a pessoa que precisa ler e entender o código escrito. 3 LÓGICA Pessoas utilizam lógica em seu cotidiano sem perceber, chegam a citá-la sem entender direito seu significado. Lógica é a ciência das formas do pensamento, além de estudar a correção do raciocínio, visto que ela é a forma mais complexa do pensamento. Pode-se dizer ainda que a lógica visa à ordem da razão, que nossa razão pode funcionar desordenadamente e que ela estuda e ensina a colocar ordem no pensamento (ARAÚJO, 2007). Para entendermos melhor a lógica vejamos o exemplo a seguir: O número 4 é menor que o número 6. O número 8 é maior que o número 6. Logo, o número 4 é menor que os números 6 e 8. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 140 Este exemplo mostra lógica ordenada, porém, muitas vezes nosso raciocínio funciona desordenadamente. Veja se seria possível retirar uma mercadoria no correio na sequência descrita abaixo: 1. Sair do correio; 2. Entrar na fila; 3. Entrar no correio; 4. Informar seus dados ao atendente; 5. Procurar a fila; 6. Pegar a mercadoria; 7. Conferir a mercadoria. Você conseguiria retirar amercadoria? Não, pois mesmo que as ações estão corretas, a sequência não está. Temos como primeira ação sair do correio. Como retiramos a mercadoria estando fora dele? Vamos ver como ficariam as mesmas ações, mas na ordem correta. 1. Entrar no correio; 2. Procurar a fila; 3. Entrar na fila; 4. Informar seus dados ao atendente; 5. Pegar a mercadoria; 6. Conferir a mercadoria; 7. Sair do correio. 4 LÓGICA DE PROGRAMAÇÃO Quando falamos de lógica de programação estamos apenas contextualizando a lógica em programação de computadores, onde, como na lógica, temos uma sequência de ações para solucionar um problema. Essa sequência de ações chama-se algoritmos. Algoritmo é um conjunto finito de instruções que devem ser executadas para a obtenção de um resultado desejado. Por exemplo, ligar um computador é uma instrução. TÓPICO 1 | FUNDAMENTOS DE LÓGICA DE PROGRAMAÇÃO 141 No exemplo acima, podemos observar que, ao objeto computador no estado inicial desligado, é aplicado a instrução ligar, levando ao estado final computador ligado. Algoritmos podem ser representados de forma gráfica ou textual. Na forma gráfica geralmente utiliza-se o fluxograma ou o diagrama estruturado. Já na representação textual utiliza-se um conjunto padronizado de palavras para representar as instruções que podem ser facilmente entendidas e traduzidas para uma linguagem de programação. Num algoritmo, os elementos fundamentais são as instruções e os dados manipulados. Ainda falando sobre a representação de algoritmos, podemos representá- los através de pseudocódigo, fluxograma ou diagrama de Chapin. Pseudocódigo são comandos escritos de forma estruturada em português, também conhecido como portugol. Vejamos a sintaxe do pseudocódigo: inicio comando 1 comando 2 comando 3 fim Fluxogramas utilizam-se de formas geométricas para a representação de comandos e instruções. Vejamos as figuras geométricas e suas representações: FIGURA 59 – FIGURAS UTILIZADAS NOS FLUXOGRAMAS FONTE: Araújo (2007, p. 79) Terminal Indica início e fim do fluxo do programa Seta de fluxo de dados Indica o sentido do fluxo de dados. Serve para conectar os blocos existentes. Entrada de dados Indica que serão recebidas informações através do teclado. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 142 FIGURA 60 – CONTINUAÇÃO FIGURAS UTILIZADAS NOS FLUXOGRAMAS FONTE: Araújo (2007, p. 80) Processamento Indica a realização de cálculos, atribuições ou qualquer manipulação de dados. Exibir da tela Indica que as informações serão exibidas na tela. Desvio Condicional Indica tomada de decisão. Divide o fluxo do programa em dois caminhos. Conector Serve para identificar o limite de um laço de repetição. Repetição com variável de controle Usado especificamente para o comando de repetição. Repetição com teste lógico no início Usado para o comando de repetição com teste lógico no início. Repetição com teste lógico no final Usado para o comando de repetição com teste lógico no final Declaração Usado para as declarações de variáveis, tipos e constantes. O diagrama de Chapin criado por Ned Chapin, nasceu a partir de trabalhos de Nassi-Schneiderman para a substituição dos fluxogramas. Este tipo de representação utiliza quadrados e retângulos para descrever as ações. A vantagem de utilizar este tipo de estrutura é que possui um ponto de entrada e um ponto de saída e são compostas por estruturas básicas de controle de sequência, seleção e repartição (ARAÚJO, 2007). Veja a sintaxe a seguir: Comando 1 Comando 2 Comando 3 143 Caro acadêmico, neste tópico você estudou que: • A sintaxe de um programa se refere à escrita correta das instruções que deverão ser executadas. Tipicamente se entende a sintaxe como sendo o conjunto de palavras reservadas de uma linguagem de programação. Já a semântica se refere ao significado que um conjunto de instruções irá gerar. • A lógica é a forma de ordenar e corrigir pensamentos ou ações voltadas para a solução de problemas. • O algoritmo é a descrição de um conjunto de ações, que quando obedecido resulta em uma sucessão finita de passos. • Podemos representar o algoritmo através de pseudocódigo, fluxograma e diagrama de Chapin. • A estrutura de pseudocódigo representa o algoritmo com comandos escritos na língua portuguesa. • O diagrama de Chapin utiliza quadrados para descrever as ações. • O fluxograma utiliza figuras geométricas para representar o fluxo dos dados e dos comandos. RESUMO DO TÓPICO 1 144 Agora vamos praticar: 1 Monte um algoritmo com a sequência correta de uma pessoa que vai de táxi a uma reunião. a) Entrar no prédio da reunião; b) Sair do táxi; c) Acenar para que o táxi pare; d) Perguntar o preço da corrida; e) Informar o destino ao motorista; f) Esperar o táxi; g) Pagar a corrida; h) Entrar no táxi. 2 Monte um algoritmo para a troca de uma lâmpada queimada. Para essa troca você tem disponível uma escada e uma lâmpada nova testada. 3 Utilize a estrutura pseudocódigo para representar o algoritmo do cálculo matemático 5 + 6, feito em uma calculadora comum. Use termos como “Aperte a tecla xx” nas ações. AUTOATIVIDADE 145 TÓPICO 2 CONSTANTES E VARIÁVEIS UNIDADE 3 1 INTRODUÇÃO Conforme estudos realizados no tópico anterior, vimos que o raciocínio lógico é a base para fazermos um algoritmo, além disso vimos suas estruturas de representação. Porém, para termos um algoritmo por completo necessitamos seguir algumas regras básicas de programação, como: constantes e variáveis, declaração de variáveis, comentar algoritmos, atribuir valores às variáveis, construir expressões aritméticas, literais, relacionais e lógicas e os comandos ler e escrever. 2 CONSTANTES Constantes como o próprio nome diz, é tudo que é fixo, estável, inalterável, imutável, contínuo, incessante, invariável, de valor fixo e que é aplicado em diversos pontos de vista. Assim, constante é uma grandeza numérica fixa utilizada normalmente em uma expressão aritmética ou matemática, a qual define um valor que será inalterado na expressão, independentemente das variáveis envolvidas na operação a ser realizada (MANZANO; OLIVEIRA, 2014). Como exemplo de uso de uma constante podemos utilizar um algoritmo para calcular o imposto de uma nota fiscal, neste algoritmo poderá ser declarada uma constante que irá armazenar o valor percentual do imposto. Caso a legislação mude, basta alterar o valor da constante, assim todos os locais onde ela está sendo utilizada serão automaticamente atualizados com o novo valor. 146 UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 3 VARIÁVEIS Variável é tudo que está sujeito a variação, que é incerto, estável ou inconstante. Os dados a serem processados em computadores são bastante variáveis. Para todo dado a ser armazenado em um computador é necessário saber o tipo de dado para depois fazer seu armazenamento adequado. Após armazenado o dado ele pode ser utilizado e processado a qualquer momento. Para compreender o conceito de variável, imagine que a memória principal de um computador é um arquivo com muitas gavetas, e cada uma delas pode armazenar um valor por vez, e como em um arquivo, essas gavetas devem estar identificadas por uma etiqueta com um nome. Portanto, uma variável é utilizada para sua identificação e representação em um programa de computador (MANZANO; OLIVEIRA, 2014). FIGURA 61 – REPRESENTAÇÃO DA MEMÓRIA DE UM COMPUTADOR COM VARIÁVEIS FONTE: Manzano e Oliveira (2014, p. 43) O nome da variável pode ser formado por um ou mais caracteres e deve estar sempre em letras maiúsculas. O primeiro caractere deve ser obrigatoriamente uma letra e oscaracteres seguintes podem ser letras ou números. Não é permitido o uso de símbolos, sinais gráficos e de pontuação. Alguns exemplos de identificadores permitidos: NOME IDADE END1 NOME_DO_ALUNO TÓPICO 2 | CONSTANTES E VARIÁVEIS 147 4 TIPOS DE DADOS O tipo de dado define o conjunto de valores que um identificador pode assumir ou armazenar. Nas linguagens de programação estão disponíveis vários tipos de dados. Para fins de desenvolvimento de algoritmos utilizam-se os tipos de dados primitivos, pois as variações de tipos são definidas conforme os recursos disponibilizados pela linguagem de programação e a necessidade de representação ou armazenamento. Os tipos de dados primitivos são: inteiro, real, caractere e lógico. • Inteiro: armazena números positivos e negativos pertencentes ao conjunto de números inteiros, excluindo qualquer valor fracionário. Exemplos de tipo inteiro: 2, 0, 501, -7, -88, entre outros. • Real: números positivos e negativos que pertencem ao conjunto de números inteiros, incluindo todos os valores fracionários e inteiros. Exemplo: 36, 0, -57, -2, 5, 55. • Caractere: são delimitados pelo símbolo aspas (“ ”), e são representados por letras de A até Z, números de 0 até 9 e símbolos. Exemplos: “Maria”; “Rua 296”; greisse@uniasselvi.com.br, entre outros. • Lógico: armazena valores do tipo sim e não, verdadeiro e falso. O tipo de dado lógico também é conhecido como booleano. 5 DECLARANDO CONSTANTES E VARIÁVEIS A sintaxe do portugol para declaração de variáveis é a seguinte: variável: tipo de dado; Por exemplo, a variável Cidade armazena somente caracteres: cidade: caractere; Podemos declarar mais variáveis ao mesmo tempo para cada tipo. Vejamos a sintaxe: variavel1, variavel2, variavel3: inteiro; 148 UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO Vejamos o exemplo: peso, altura, idade: inteiro; Para declararmos as constantes não precisamos identificar o tipo de dado, pois quando a declaramos já atribuímos o valor correspondente, sendo que este valor será o mesmo do início até o fim do algoritmo. Vejamos a sintaxe: constante = valor; Exemplos práticos: salario_minino = 750,00; aliquota: 7,5; Você observou que ao término de cada instrução temos um ponto e vírgula (;)? Isto indica que a instrução acabou. O ponto e vírgula tem a função de identificar onde termina e começa outra instrução. Veja agora como fica a declaração da constante e da variável em um algoritmo. Algoritmo declaração; Constantes Percentual = 8,5 Reajuste = 6; Variáveis Sexo: caractere; Quantidade: inteiro; Peso, valor: real; Início <instruções> Fim. As instruções do algoritmo sempre acontecem após as declarações entre os comandos início e fim. TÓPICO 2 | CONSTANTES E VARIÁVEIS 149 6 COMANDOS BÁSICOS DE UM ALGORITMO Os comandos básicos são instruções elementares utilizadas na maioria dos softwares. Estas instruções são atribuição, leitura, escrita e comentário. • Atribuição: o comando de atribuição permite atribuir conteúdo a um determinado identificador. Este conteúdo pode ser um dado que está armazenado em outro identificador, o resultado de um cálculo, o retorno de uma sub-rotina (função), entre outros. É importante observar que à esquerda do símbolo de atribuição deve haver apenas um identificador. A atribuição deve levar em consideração a compatibilidade do conteúdo com o tipo do identificador. A atribuição de conteúdo incompatível ao suportado pelo tipo de dado pode causar erros de compilação ou de execução. Em consequência desta incompatibilidade, o programa pode terminar de forma brusca ou gerar resultados inconsistentes. Na maioria das linguagens de programação, a atribuição é representada por = (igual) ou := (dois pontos e igual). Exemplo(s): Continuar = verdadeiro; Aluna = “Maria”; Quantidade = 7; Total_Bruto = A + B; • Leitura: o comando de leitura permite a obtenção de dados do meio externo para o programa. Em algoritmos, esta entrada de dados geralmente é feita através do teclado. A leitura pode se referir ainda à obtenção de conteúdos de um arquivo, de um banco de dados, de uma porta de comunicação, entre outros. A sintaxe deste comando é leia (identificador). O identificador utilizado neste comando indica onde o dado deve ser armazenado. Exemplo(s): leia(Continuar); leia(Total_Bruto); leia(Idade); leia(Nome); leia(Prosseguir); • Escrita: o comando de escrita permite interagir com o usuário do software através da apresentação do resultado de um processamento ou a solicitação de uma nova entrada de dados. A escrita pode se referir ainda ao armazenamento de dados num arquivo, num banco de dados, no envio de conteúdo para uma impressora, entre outros. 150 UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO A representação é escreva ( [identificador, conteúdo] ). Os parâmetros deste comando podem ser um ou mais identificadores, que podem ser combinados com um ou mais conteúdos predeterminados (caracteres, textos, números e outros identificadores). Exemplo(s): Escreva(“Primeiro Algoritmo.”); Escreva(“Total: “, Total_Bruto); Escreva(“Sua idade é: “, Idade); Escreva(“Deseja prosseguir? (S/N): “); Escreva(“Informe seu nome: “); • Comentários: para que um algoritmo seja entendido e executado facilmente são necessárias informações adicionais chamadas de comentários. Os comentários são delimitados por chaves aberta e fechada ({ }), sendo que o que estiver escrito entre estes comandos será interpretado como comentário e não haverá alguma ação por parte do programa. Exemplo: Algoritmo comentário var {Exemplo de comentário} pessoa: caractere; {Variável para armazenar o nome} idade: inteiro; {Variável para armazenar a idade} Inicio <comandos> Fim. Agora que vimos os comandos básicos vamos construir nosso primeiro algoritmo. Nosso algoritmo fará a leitura de dois números, a soma deles e mostrará o valor na tela. Vejamos como ficaria: TÓPICO 2 | CONSTANTES E VARIÁVEIS 151 Algoritmo Soma {Definição de variáveis} Var {Declara três variáveis para armazenar valores do tipo real} valor1, valor2, soma: real; inicio {Solicita e armazena os dois valores que o usuário deseja somar} Escreva (“Informe o primeiro valor:”); Leia(valor1); Escreva (“Informe o segundo valor:”); Leia(valor2); {Agora faremos a soma dos valores e armazenaremos o resultado na variável soma} soma = valor1 + valor2; {Agora que temos o valor armazenado vamos exibir na tela para o usuário} Escreva (“A soma de”, Valor1, “+”, Valor2, “é”, soma); Fim. Supondo que o usuário informou o número 5 para o valor1 e o número 3 para o valor2, o conteúdo de soma será o número 8. Assim, o resultado exibido pelo comando Escreva (“A soma de”, Valor1, “+”, Valor2, “é”, soma); será: A soma de 5 + 3 é 8 7 EXPRESSÕES No exemplo de nosso primeiro algoritmo utilizamos a expressão somar, para calcularmos a soma dos dois números informados pelo usuário. A seguir você irá conhecer outros tipos de expressões, seus operadores e suas descrições. • Operadores Aritméticos: são utilizados para a realização de operações matemáticas. Os operadores estão relacionados no quadro a seguir. 152 UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO QUADRO 3 – OPERADORES ARITMÉTICOS Operador Função + Adição e concatenação - Subtração * Multiplicação / Divisão de valores reais div Divisão de valores inteiros Mod Resto da divisão de valores inteiros FONTE: A autora • Operadores Lógicos: são utilizados para o tratamento de relações lógicas. O resultado obtido destas operações é sempre o valor verdadeiro ou falso. No quadro a seguir estão relacionados os operadores lógicos. QUADRO 4 – OPERADORESLÓGICOS Operador Função e Conjunção ou Disjunção não Negação FONTE: A autora • Operadores Relacionais: são utilizados para a realização de comparações entre dois elementos do mesmo tipo de dado. O resultado obtido a partir de operações com estes operadores é sempre o valor verdadeiro ou falso. Tais operadores estão relacionados no quadro a seguir. QUADRO 5 – OPERADORES RELACIONAIS Operador Função = Igual > Maior >= Maior igual < Menor <= Menor igual <> Diferente FONTE: A autora Dependendo da situação, os operadores poderão ser utilizados de forma combinada, permitindo resolver operações mais complexas. Estas operações poderão ser aritméticas, lógicas, relacionais ou combinações entre elas. 153 Chegamos ao final do Tópico 2. Neste tópico você estudou que: • As variáveis são o conjunto de memórias auxiliares que ajudam o programador na realização das operações necessárias nos programas. A declaração de variáveis deve seguir uma regra para que os identificadores delas sejam aceitos pelas linguagens de programação. Esta regra diz que uma variável deve iniciar com uma letra ou sublinha (_), conter nos demais elementos letras, números e/ ou sublinha. • Constantes são valores inseridos em cada parte da memória do computador e que permanecem do início ao fim do algoritmo. • Os tipos de dados são o conjunto de valores que um determinado identificador daquele tipo poderá assumir. Também pode-se entender que é o conjunto de valores que ele poderá representar. O conjunto de valores se refere tanto ao formato (caractere, inteiro, real etc.) quanto ao tamanho do conjunto que pode ser representado (0..255, -32768..32767 etc.). RESUMO DO TÓPICO 2 154 AUTOATIVIDADE 1 Defina o tipo de dado mais adequado para as variáveis segundo o conteúdo a ser armazenado (inteiro, real, caractere ou lógico): a) Metros b) Peso c) Valor_da_compra d) CPF e) Endereço f) Ok g) Estado_civil 2 Assinale o tipo de operador utilizado em cada expressão, considerando que uma expressão pode conter mais de um operador: a) 198 + 12 ( ) Aritmético ( ) Aritmético e Lógico ( ) Relacional e Aritmético b) (Parar = Sim) ou (Sinal = ‘Vermelho’) ( ) Aritmético e Lógico ( ) Aritmético e Relacional ( ) Lógico e Relacional 3 Desenvolva os algoritmos propostos a seguir. a) Faça um algoritmo que leia quatro notas de um aluno e escreva a média obtida. b) Faça um algoritmo para determinar o consumo médio de um automóvel sendo fornecida a distância total percorrida pelo automóvel e o total de combustível gasto. 155 TÓPICO 3 ESTRUTURAS DE CONTROLE UNIDADE 3 1 INTRODUÇÃO As estruturas de controle permitem determinar como um conjunto de instruções deverá ser executado para a realização das tarefas desejadas. Esta determinação pode ser a ordem em que as instruções deverão ser executadas, a submissão a determinadas condições ou o refinamento do processamento. É importante observar que não existe uma regra de subordinação básica ou única para a utilização das estruturas de controle. Pode-se utilizar as estruturas de controle em qualquer combinação de subordinação. 2 ESTRUTURAS DE CONTROLE SEQUENCIAL Esta estrutura de controle permite a definição da sequência em que as instruções deverão ser executadas. A finalidade desta estrutura é definir a ordem em que as instruções devem ser executadas. Uma inversão na ordem de execução das instruções pode modificar significativamente o resultado. Exemplo: UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 156 Algoritmo Calcula; var Primeiro, Segundo, Resultado : inteiro; Início Primeiro = 0; Segundo = 0; escreva (“Informe o primeiro número:”’); leia(Primeiro); escreva (’Informe o segundo número: ’); leia(Segundo); Resultado = (Primeiro * 3) + Segundo; escreva(Resultado); fim. Neste algoritmo são solicitados dois números; em seguida, o primeiro número é multiplicado por três e somado ao segundo número. 3 ESTRUTURAS DE CONTROLE CONDICIONAL Para tomar uma decisão em lógica, você deve utilizar a estrutura de controle condicional, também conhecida como estrutura de controle decisória ou de decisão ou estrutura de controle alternativa. Essa estrutura executa um ou vários comandos desde que seja satisfeita uma condição, ou várias, representada por uma expressão lógica. A estrutura de controle condicional se classifica em simples ou composta (XAVIER, 2004). Na estrutura de controle condicional simples utiliza-se os comandos se, então e fim_se na construção da instrução. Nesta instrução se a condição definida entre os comandos se e então for verdadeira, serão executadas todas as instruções subordinadas e definidas dentro do bloco adjacente entre os comandos se...então e fim_se. Após a execução ocorre automaticamente a execução das eventuais instruções existentes após o comando fim_se. Se a condição for falsa, serão executadas apenas as eventuais instruções que estiverem após o comando fim_ se.Veja a sintaxe: se (<condição>) então instruções executadas após condição ser verdadeira fim_se instruções executadas após condição ser falsa ou após executar instruções Exemplos: TÓPICO 3 | ESTRUTURAS DE CONTROLE 157 se (A > 10) então se (Prosseguir = verdadeiro) então se (Nome <> ’ ’) então se ((A > 10) e (A < 20)) então se não Terminou então A estrutura de controle condicional simples possibilita a execução de comandos somente se a condição for verdadeira. Se a condição for falsa, não pode executar qualquer comando dentro desta estrutura. Para isso existe a estrutura condicional composta formada pela mesma estrutura da condicional simples, mas acrescida do comando senão. Se a condição definida entre os comandos se e então for verdadeira, são executadas todas as ações subordinadas do bloco entre os comandos se...então e senão. Caso a condição seja falsa, são executadas todas as instruções subordinadas do bloco entre os comandos senão e fim_se. Vejamos a sintaxe: se (<condição>) então instruções executadas após condição ser verdadeira senão instruções executadas após condição ser falsa fim_se instruções executadas após condição ser falsa ou após executar instruções Exemplo: se (A > 10) então início se escreva(A, “ é maior que 10.”); fim se senão início senão escreva(A, “ é menor que 10.”); fim senão; UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 158 No exemplo anterior, verificamos apenas duas condições. Porém no dia a dia precisaremos muitas vezes fazer vários testes ou comparações, com vários comandos se. Para isso utilizamos o encadeamento de comandos, inserindo um dentro do outro, para aplicar e verificar todas as soluções possíveis. A seleção encadeada é resolvida com a utilização do comando se então subordinado a outro se então. Esta subordinação ou encadeamento pode ter vários elementos envolvidos. Exemplo: se ((A >= 10) e (A <= 20)) então início se se (A <= 15) então início se escreva(A, ’ está entre 10 e 15’); fim se senão início senão escreva(A, ’ está entre 16 e 20’); fim senão; fim se senão início senão escreva(A, ’ não está entre 10 e 20’); fim senão; fim_se; Para a resolução de seleções múltiplas utiliza-se o comando escolha caso. Para a construção da instrução utiliza-se os comandos caso, seja, faça, senão e fim_caso. Vejamos a sintaxe: Escolha (expressão) Caso <rótulo1>: <bloco de comandos> Caso <rótulo2>: <bloco de comandos> Caso <rótulo3>: <bloco de comandos> TÓPICO 3 | ESTRUTURAS DE CONTROLE 159 Senão <bloco de comandos> Fim escolha Exemplo: 4 ESTRUTURAS DE CONTROLE DE REPETIÇÃO Às vezes é necessário repetir a mesma tarefa para se chegara um resultado final. Por exemplo, para encher uma caixa, você coloca dentro dela um objeto e verifica. Se constatar que a caixa ainda não está cheia, coloca mais um objeto. A ação se repetirá até você atingir o objetivo: encher a caixa. Quando isso acontecer, você vai parar de colocar objetos nela (XAVIER, 2004). Para repetir tarefas no algoritmo, evitando escrever várias vezes a mesma coisa, você pode utilizar a estrutura de controle de repetição. 4.1 ESTRUTURA DE REPETIÇÃO EQUANTO-FAÇA O comando enquanto faça é o mais adequado para situações em que a condição de término da repetição deve ser testada antes da execução das instruções subordinadas à estrutura de controle. Os comandos enquanto, faça e fim_enquanto são utilizados para a construção da instrução enquanto...faça/fim_enquanto. Neste trecho de instruções são executadas as instruções subordinadas ao bloco entre os comandos enquanto_ faça e fim_enquanto, no período em que o resultado lógico da condição permanecer verdadeiro entre os comandos enquanto e faça. No momento em que o resultado lógico for falso são executadas as instruções que estiverem após o comando fim_ enquanto. Vejamos a sintaxe: escolha Numero caso 1: escreva(’*’); caso 2: escreva(’**’); caso 3: escreva(’***’); senão escreva(’Este número está fora da faixa.’); fim escolha. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 160 enquanto (<condição>) faça Instruções a serem executadas enquanto a condição for verdadeira fim_enquanto Agora vamos para o exemplo: Vamos a mais um exemplo. Algoritmo que executa cinco vezes e em cada vez escreve o número da execução utilizando o comando enquanto faça. Quantidade = 0; enquanto (Quantidade <= 5) faça início enquanto Quantidade = Quantidade + 1; escreva(Quantidade, ’ª execução.’); fim enquanto; Algoritmo Enquanto_Faca; variáveis Quantidade : inteiro; início Quantidade = 1; enquanto (Quantidade <= 5) faça início enquanto escreva(Quantidade, ’ vez.’); Quantidade = Quantidade + 1; fim enquanto; fim. 4.2 ESTRUTURA DE REPETIÇÃO PARA-FAÇA A utilização do comando para faça é recomendada para situações em que se conhece previamente a quantidade de vezes que o conjunto de instruções deve ser executado. Esta quantidade de vezes também é conhecida como limite inferior e limite superior. Para essa estrutura utiliza-se os comandos para, de, até, passo, faça e fim_ para para realizar a construção da instrução desta estrutura. Pode-se executar um determinado conjunto de instruções subordinadas a um bloco até determinado TÓPICO 3 | ESTRUTURAS DE CONTROLE 161 número de vezes. No momento que o valor da variável de controle atingir o valor definido no segmento de fim de contagem, serão executadas as eventuais instruções que estiverem após o comando fim_para. Vejamos a sintaxe: Para <variável> de <início> até <fim> passo <incremento> faça <Instruções> Fim_para Vejamos o exemplo: para Quantidade de 1 até 5 faça início para escreva(Quantidade, execução.’); fim para; Vejamos mais um exemplo. Algoritmo que executa cinco vezes e em cada vez escreve o número da execução utilizando o comando para faça. Algoritmo Para_Faca; variáveis Quantidade : inteiro; início para Quantidade de 1 até 5 faça início para escreva(Quantidade, ’ vez.’); fim para; fim. 4.3 ESTRUTURA DE REPETIÇÃO REPITA_ATÉ O comando repita até é mais adequado para situações em que as instruções subordinadas à estrutura de controle deverão ser executadas pelo menos uma vez, antes do teste da condição de término. Em algumas linguagens de programação o comando repita até pode ser encontrado como uma variante do enquanto faça. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 162 Na estrutura repita até são executadas instruções entre os comandos repita e até_que durante o período em que o resultado lógico da condição permanecer falso. No momento em que o resultado for verdadeiro, executam-se as eventuais instruções que estiverem após o comando até_que. Vejamos a sintaxe: Repita <instruções> Até_que Vejamos o exemplo: Quantidade = 0; repita Quantidade = Quantidade + 1; escreva(Quantidade, ’ª execução.’); até (Quantidade >= 5); Vejamos mais um exemplo. Algoritmo que executa cinco vezes e em cada vez escreve o número da execução utilizando o comando repita até. Algoritmo Repita_Ate; variáveis Quantidade : inteiro; início Quantidade = 1; repita escreva(Quantidade, ’ vez.’); Quantidade = Quantidade + 1; até (Quantidade > 5); fim. 163 Chegamos ao final de mais um tópico. Neste tópico vimos que: • Os algoritmos são baseados quase em sua totalidade nas estruturas. As estruturas são sequência, seleção e repetição. Com isso, quem aprender a utilizar bem estas estruturas poderá programar grande parte dos softwares existentes atualmente. Exceção pode se dar em casos que utilizem tecnologias mais avançadas. • A estrutura de sequência define a ordem em que as instruções devem ser executadas para que o resultado definido para o algoritmo seja atingido. Caso a estrutura de sequência não seja obedecida, os resultados obtidos por tal algoritmo são imprevisíveis, pois as instruções dependentes podem estar sendo executadas antes daquelas que as deveriam preceder. • A estrutura de seleção permite a definição de desvios condicionados às condições definidas na expressão do comando de seleção definido. A estrutura de seleção pode ser subdividida nos tipos: simples, composta, encadeada e múltipla. Na seleção simples, composta e encadeada é utilizado o comando se e na seleção encadeada é utilizado o comando escolha caso. • A estrutura de repetição visa permitir a execução de um conjunto de instruções na quantidade de vezes necessárias de acordo com a condição estabelecida na expressão de controle do laço. As estruturas de seleção são: enquanto faça, para faça e repita até. • É importante observar que as estruturas de seleção e repetição utilizam expressões como forma de definir o que deve ser executado. Estas expressões demonstram o quanto a computação tem suas raízes na área da matemática. Portanto, conhecimentos e habilidades com lógica são muito importantes para profissionais da área de computação. RESUMO DO TÓPICO 3 164 AUTOATIVIDADE Caro acadêmico, como forma de fixar o conteúdo estudado, realize a autoatividade proposta a seguir: 1 Desenvolva os algoritmos propostos a seguir. a) Elabore um algoritmo onde será lido o valor de vários itens de compra e ao final escreva o valor a ser pago. O algoritmo deverá continuar lendo itens enquanto o valor digitado for diferente de zero. b) Uma loja deseja saber quantos clientes compram 1 = à vista, 2 = 30 dias e 3 = 60 dias. Desenvolva um algoritmo que leia uma quantidade ilimitada de clientes. Ao informar zero, o algoritmo será finalizado e deverá apresentar quantos clientes foram digitados em cada condição. c) Construa um algoritmo para calcular e escrever o IMC (Índice de Massa Corporal) de uma pessoa. São fornecidos o nome da pessoa, o peso e a altura. A fórmula para calcular o IMC é o peso dividido pela altura ao quadrado. Com base no resultado do cálculo do IMC, escreva o resultado conforme as seguintes faixas: até 20,0 (inclusive) = abaixo do peso acima de 20,0 e abaixo de 25,0 = peso normal entre 25,0 e abaixo de 30,0 = sobrepeso entre 30,0 e abaixo de 40,0 = obeso 40,0 e acima = obeso mórbido O algoritmo deverá ser executado até que seja informado “FIM” no nome da pessoa. d) Faça um algoritmo que leia o nome de uma pessoa e várias ligações telefônicas (número do telefone e valor da ligação), enquanto o número do telefone informado for diferente de zero. Ao final escreva o nome do cliente e o valor da conta telefônica. e)No controle de qualidade de uma empresa são classificadas as mercadorias como de primeira, de segunda e refugo. Elabore um algoritmo para ler 100 peças e no final escreva quantas são de primeira, quantas são de segunda e quantas são refugo. 165 TÓPICO 4 TIPOS ESTRUTURADOS UNIDADE 3 1 INTRODUÇÃO A partir do momento em que se passa a construir algoritmos mais sofisticados, aumenta proporcionalmente a necessidade de elementos que deem suporte a esta construção. Utilizando apenas os tipos de dados primitivos, os algoritmos podem ser bastante restritos e limitados. Felizmente, os tipos estruturados permitem romper as barreiras desta limitação. Tipos estruturados são tipos de dados construídos a partir de outros tipos de dados. Os tipos de dados utilizados como base para a criação dos tipos estruturados podem ser tipos primitivos ou tipos estruturados que já tenham sido previamente definidos. 2 REGISTROS Registros permitem a criação de tipos de dados heterogêneos. Os elementos que compõem o registro são chamados de campos. Estes campos devem ter nomes (identificadores) diferentes e podem ter o mesmo tipo de dado ou tipos de dados diferentes, conforme a necessidade. Em algumas linguagens de programação a construção do tipo registro pode ser encontrada com o nome estrutura (struct) (KOCHANSKI; ANDRIETTI, 2005). O algoritmo a seguir contém um registro que armazena o código, o nome e o endereço de uma pessoa. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 166 Algoritmo Registro; tipo TCadastroPessoas = registro Codigo : inteiro; Nome : caracter; Endereco : caracter; fim registro; variaveis CadastroPessoas : TCadastroPessoas; início escreva(’Informe o código: ’); leia(CadastroPessoas.codigo); escreva(’Informe o nome: ’); leia(CadastroPessoas.nome); escreva(’Informe o endereço: ’); leia(CadastroPessoas.endereco); fim. 3 VETORES Vetor é o nome atribuído a um tipo estruturado que armazena um conjunto unidimensional de elementos homogêneos. Os vetores são conjuntos homogêneos, pois todos os elementos que o compõem são do mesmo tipo. Os vetores podem ser classificados em simples e estruturado. Um vetor simples é composto por elementos com apenas um campo. Este conjunto poderá ter vários elementos e em cada elemento poderá ser armazenado apenas um valor (KOCHANSKI; ANDRIETTI, 2005). Vejamos a sintaxe: Variável: conjunto[ ] de <tipo de dado> Exemplo: O algoritmo a seguir implementa um vetor com capacidade para armazenar 10 números do tipo inteiro. TÓPICO 4 | TIPOS ESTRUTURADOS 167 Algoritmo VetorSimples; tipo TNumeros = Vetor[1..10] de inteiro; variáveis VetorNumeros : TNumeros; Contador : inteiro; início para Contador de 1 até 10 faça início para escreva(’Informe um número: ’); leia(VetorNumeros[Contador]); fim para; fim. Um vetor estruturado é composto por elementos cujo tipo de dado utilizado é derivado de outros tipos de dados. Um vetor estruturado também é conhecido como um vetor de registros (KOCHANSKI; ANDRIETTI, 2005). Exemplo: Este algoritmo armazena o código e a idade de 10 alunos em um vetor homogêneo estruturado com registro de apenas um tipo de dado. Algoritmo VetorEstruturadoUm; tipo TCadastroAluno = registro Codigo : inteiro; Idade : inteiro; Fim registro; TAlunos = Vetor[1..10] de TCadastroAluno; variáveis VetCadAlu : TAlunos; Contador : inteiro; início para Contador de 1 até 10 faça início para escreva(’Informe o código do aluno: ’); leia(VetCadAlu[Contador].Codigo); escreva(’Informe a idade do aluno: ’); leia(VetCadAlu[Contador].Idade); fim para; fim. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 168 É importante observar que para criar um vetor homogêneo estruturado deve-se, primeiro, criar um registro com os dados necessários. O passo seguinte é criar um vetor que usará o tipo de dado criado no registro e então declarar uma variável do tipo do vetor. O registro pode ter um ou vários tipos de dados. 4 MATRIZES Matriz é o nome atribuído a um tipo estruturado que armazena um conjunto bidimensional de elementos homogêneos. As matrizes são conjuntos homogêneos, pois todos os elementos que a compõem são do mesmo tipo. Nas matrizes, além do limite inferior e superior do eixo X, há também o limite inferior e superior do eixo Y. Assim como nos vetores, as matrizes também podem ser compostas por elementos baseados em tipos de dados primitivos ou estruturados. Uma matriz simples é composta por elementos com apenas um campo. Este conjunto poderá ter vários elementos em cada dimensão e em cada elemento poderá ser armazenado apenas um valor (KOCHANSKI; ANDRIETTI, 2005). Exemplo: este algoritmo tem capacidade de armazenar nove números do tipo inteiro. Algoritmo MatrizSimples; tipo TMatriz = Vetor[1..3, 1..3] de inteiro; variáveis Matriz : TMatriz; Linha : inteiro; Coluna : inteiro; início para Linha de 1 até 3 faça início para para Coluna de 1 até 3 faça início para escreva(’Informe um número para a ’, Coluna, ’ coluna da ’, Linha, ’ Linha: ’); leia(Matriz[Linha, Coluna]); fim para; fim para; fim. TÓPICO 4 | TIPOS ESTRUTURADOS 169 Neste exemplo a matriz de 3 X 3 com tipo de dado inteiro foi carregada com números na seguinte ordem: • primeira coluna da primeira linha; • segunda coluna da primeira linha; • terceira coluna da primeira linha; • primeira coluna da segunda linha; • segunda coluna da segunda linha; • terceira coluna da segunda linha; • primeira coluna da terceira linha; • segunda coluna da terceira linha; e • terceira coluna da terceira linha. Uma matriz estruturada é composta por elementos cujo tipo de dado utilizado é derivado de outros tipos de dados. Uma matriz estruturada também é conhecida como uma matriz de registros. Exemplo: este algoritmo armazena os dados de 25 alunos em uma matriz de registros onde cada célula da matriz recebe o código e a idade de um aluno. Algoritmo MatrizEstruturadaUm; constantes MaxLin = 5; MaxCol = 5; tipo TAlu = registro Codigo : inteiro; Idade : inteiro; fim registro; TMatAlu = Vetor[1..MaxLin, 1..MaxCol] de TAlu; variaveis Matriz : TMatAlu; Linha : inteiro; Coluna : inteiro; início para Linha de 1 até MaxLin faça início para para Coluna de 1 até MaxCol faça início para escreva(’Informe o código do aluno da ’, Coluna, ’ coluna da ’, Linha, ’ Linha: ’); leia(Matriz[Linha, Coluna].Codigo); escreva(’Informe a idade do aluno da ’, Coluna, ’ coluna da ’, Linha, ’ Linha: ’); leia(Matriz[Linha, Coluna].Idade); fim para; fim para; fim. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 170 Vejamos mais um exemplo: neste algoritmo é possível armazenar os dados de 50 pessoas em uma matriz de registros onde cada célula da matriz recebe o código, o nome, o endereço e a renda de uma pessoa. Algoritmo MatrizEstruturadaDois; constantes MaxLin = 10; MaxCol = 5; tipo TCadPes = registro Codigo : inteiro; Nome : caracter; Endereco : caracter; Renda : real; fim registro; TCad = Vetor[1..MaxLin, 1..MaxCol] de TCadPes; variáveis {Declaração da variável do tipo TCad} Cad : TCad; Linha : inteiro; Coluna : inteiro; início para Linha de 1 até MaxLin faça início para para Coluna de 1 até MaxCol faça início para escreva(’Informe o codigo da pessoa da ’, Coluna, ’ coluna da ’, Linha, ’Linha: ’); leia(Cad[Linha, Coluna].Codigo); escreva(’Informe o nome da pessoa da ’, Coluna, ’ coluna da ’, Linha, ’ Linha: ’); leia(Cad[Linha, Coluna].Nome); escreva(’Informe o endereço da pessoa da ’, Coluna,’ coluna da ’,Linha, ’ Linha: ’); leia(Cad[Linha, Coluna].Endereco); escreva(’Informe a renda mensal da pessoa da ’, Coluna, ’ coluna da ’,Linha, ’ Linha: ’); leia(Cad[Linha, Coluna].Renda); fim para; fim para; fim. 171 RESUMO DO TÓPICO 4 Caro(a) acadêmico(a), neste tópico você estudou que: • Os tipos estruturados ou estruturas de dados estáticas são arranjos de dados que permitem o armazenamento e navegação no conjunto de dados de modo simples e rápido. • Os registros são estruturas nas quais são definidos conjuntos de dados que podem ser utilizados em vetores, matrizes ou mesmo em listas dinamicamente alocadas na memória. Este conjunto de dados pode conter diferentes tipos de dados, pois o registro é uma nova definição de tipo de dado. • Vetores são estruturas homogêneas que permitem a rápida navegação pelos elementos. Os vetores com os quais lidamos neste Caderno de Estudos são estruturas estáticas, ou seja, o seu tamanho deve ser definido em tempo de programação e a alocação é feita uma única vez na carga do programa. Vetores são especialmente úteis para tratamento de dados intermediários cuja quantidade seja pequena e previamente conhecida. Vetores estáticos não são muito aconselháveis em situações em que não se conhece a quantidade de elementos ou esta quantidade seja grande. • Matrizes são estruturas homogêneas cuja diferença dos vetores é a possibilidade de definir quantidade de linhas superior a uma. Os vetores permitem a definição da quantidade de colunas, porém a quantidade de linhas é sempre uma. As matrizes são especialmente úteis em situações em que é necessário armazenar e navegar em um conjunto de dados bidimensional. 172 AUTOATIVIDADE Elabore os algoritmos propostos a seguir. a) Elabore um algoritmo que implemente uma matriz de 15 X 12 onde as linhas são os produtos em estoque e as colunas são as quantidades incluídas em cada mês do ano. Ao terminar a inclusão dos dados, liste a matriz. b) Faça um algoritmo que leia uma matriz de 5 X 5 e multiplique cada um dos seus elementos por um número qualquer. Carregue uma segunda matriz com os valores multiplicados. Ao final, liste a matriz original e a matriz com os números multiplicados. c) Construa um algoritmo que leia duas matrizes de 3 X 3 e ao final mostre as matrizes e uma terceira matriz com a soma das duas. 173 TÓPICO 5 SUBALGORITMOS E ESCOPO DE IDENTIFICADORES UNIDADE 3 1 INTRODUÇÃO Os subalgoritmos são uma forma de organização que visa especializar um conjunto de instruções e tornar ainda mais clara a descrição de cada parte da solução. Quando a quantidade de instruções torna-se muito elevada e principalmente quando um mesmo bloco de instruções precisa ser utilizado várias vezes, é aconselhável o uso de subalgoritmos. A estrutura básica de um subalgoritmo compreende as seguintes partes: Cabeçalho do subalgoritmo Definição de constantes Definição de tipos de dados Definição de variáveis Início do subalgoritmo Corpo principal do subalgoritmo Fim do subalgoritmo. Conforme se pode perceber na estrutura de um subalgoritmo, ele segue o mesmo princípio estrutural de um algoritmo. Um subalgoritmo pode ser chamado a partir do corpo principal do algoritmo ou de outro subalgoritmo. Exemplo: este algoritmo demonstra a utilização de um subalgoritmo. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 174 Algoritmo Soma; variáveis Primeiro : inteiro; Segundo : inteiro; subalgoritmo SomaValores(N1, N2 : inteiro); início SomaValores = N1 + N2; fim; início Primeiro = 0; Segundo = 0; escreva(’Informe o primeiro número: ’); leia(Primeiro); escreva(’Informe o segundo número: ’); leia(Segundo); escreva(SomaValores(Primeiro, Segundo)); fim. 2 ESCOPO DE IDENTIFICADORES O escopo de identificadores (constantes, tipos e variáveis) define a abrangência de utilização dos mesmos. O escopo define onde um identificador pode ser utilizado. Os elementos declarados no cabeçalho podem ser utilizados em qualquer ponto do algoritmo. Este tipo de declaração é conhecido como declaração global (KOCHANSKI; ANDRIETTI, 2005). Exemplo: Variáveis do tipo Global (Primeiro, Segundo e Resultado) podem ser vistas por todo o algoritmo. Vejamos o subalgoritmo com uso de variáveis globais (Primeiro, Segundo e Resultado), as quais podem ser vistas por todo o algoritmo. TÓPICO 5 | SUBALGORITMOS E ESCOPO DE IDENTIFICADORES 175 Algoritmo Calcula; variáveis Primeiro : inteiro; Segundo : inteiro; Resultado : inteiro; subalgoritmo SomaValores(N1, N2 : inteiro); início Resultado = N1 + N2; fim; início escreva(’Informe o primeiro número: ’); leia(Primeiro); escreva(’Informe o segundo número: ’); leia(Segundo); SomaValores(Primeiro, Segundo); escreva(Resultado); fim. Já as declarações feitas no cabeçalho de um subalgoritmo podem ser utilizadas apenas no corpo do subalgoritmo. Fora do subalgoritmo estas declarações não são conhecidas. Este tipo de declaração é chamado local. Exemplo(s): Variáveis do tipo local (Soma) só podem ser vistas por quem a declarou. Algoritmo Calcula; variáveis Primeiro : inteiro; Segundo : inteiro; Resultado : inteiro; subalgoritmo SomaValores(N1, N2 : inteiro); variáveis inteiro : Soma; início Soma = N1 + N2; fim; início escreva(’Informe o primeiro número: ’); leia(Primeiro); escreva(’Informe o segundo número: ’); leia(Segundo); escreva(SomaValores(Primeiro, Segundo)); fim. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 176 Um subalgoritmo, além de processar, pode receber e devolver dados. O recebimento de dados é utilizado em situações em que é necessário fornecer valores específicos para serem manipulados no subalgoritmo. Para isso chamamos de passagem de parâmetros (KOCHANSKI; ANDRIETTI, 2005). A passagem de parâmetros permite generalizar a solução através da indicação de comportamentos específicos passados nos parâmetros. Exemplo: neste algoritmo são passadas por parâmetro duas notas lidas e o subalgoritmo carrega a variável global “Media” com a média do aluno. Algoritmo Media; variáveis inteiro : Nota1; inteiro : Nota2; real : Media; subalgoritmo CalculaMedia(N1, N2 : inteiro); início Media = (N1 + N2) / 2; fim; início escreva(’Informe a primeira nota: ’); leia(Nota1); escreva(’Informe a segunda nota: ’); leia(Nota2); CalculaMedia(Nota1, Nota2); escreva(Media); fim. Na maioria das linguagens de programação a passagem de parâmetros pode ser efetuada de duas formas: por cópia e por referência. Na passagem de parâmetros por cópia, uma cópia do conteúdo da variável informada no parâmetro é fornecida ao subalgoritmo. Após copiado, o conteúdo pode ser manipulado no subalgoritmo sem que a variável de origem seja afetada ou alterada. Exemplo: Algoritmo com passagem de parâmetros por cópia. TÓPICO 5 | SUBALGORITMOS E ESCOPO DE IDENTIFICADORES 177 Algoritmo Emprestimo; variáveis ValorInicial : real; ValorFinal : real; Taxa : inteiro; subalgoritmo CalculaJuros(Valor : real; Tx : inteiro): real; início CalculaJuros = (Valor * Tx) / 100; fim; início escreva(’Informe o valor a emprestar: ’); leia(ValorInicial); escreva(’Informe a taxa de juros: ’); leia(Taxa); escreva(‘O valor dos juros é ‘, CalculaJuros(ValorInicial, Taxa)); ValorFinal = ValorInicial + CalculaJuros(ValorInicial, Taxa); escreva(‘O valor a pagar é ‘, ValorFinal); fim. Na passagem de parâmetros por referência não é feita uma cópia do conteúdo. Neste caso é passada uma referência à variável de origem e as alterações realizadas refletem diretamente sobre esta variável. Exemplo: algoritmo com passagem de parâmetrospor referência. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 178 Algoritmo Juros; variáveis ValorInicial : real; ValorFinal : real; Taxa : inteiro; subalgoritmo CalculaJuros(Valor : real; Taxa : inteiro; ValorFin : variaveis real): real; início ValorFin = Valor + (Valor * Taxa); CalculaJuros = Valor * Taxa; fim; início escreva(’Informe o valor a emprestar: ’); leia(ValorInicial); escreva(’Informe a taxa de juros: ’); leia(Taxa); escreva(‘O valor dos juros é ‘, CalculaJuros(ValorInicial, Taxa, ValorFinal)); escreva(‘O valor valor a pagar é ‘, ValorFinal); fim. A diferença fundamental entre estas formas de passagem de parâmetros é que na primeira os dados de origem não são afetados e, na segunda, são os dados de origem que estão sendo alterados. É importante que se conheça as consequências do uso de ambos para utilizar cada forma nas situações que forem mais adequadas, evitando eventuais falhas na execução por problemas na lógica empregada. TÓPICO 5 | SUBALGORITMOS E ESCOPO DE IDENTIFICADORES 179 LEITURA COMPLEMENTAR QUER APRENDER PROGRAMAÇÃO? SAIBA QUAL A MELHOR LINGUAGEM! A pergunta que é feita por todo mundo que está aprendendo a programar é: que linguagem de programação devo aprender? A resposta é óbvia: uma linguagem de programação para iniciantes! Antes de mais nada, você deve ter consciência de que ao longo da sua carreira como programador, você sempre terá que aprender uma linguagem de programação nova. Pois todas têm suas vantagens e desvantagens. Uma dica interessante é: não seja fanático por uma linguagem específica! Muitas pessoas defendem com unhas e dentes a linguagem de programação que têm mais afinidade. Mas isso não é bom! Para cada projeto, cada trabalho, uma linguagem é mais indicada ou não. Você deve decidir qual usar não com base no seu gosto pessoal, mas nas vantagens que a linguagem oferece para o projeto. QUAL A MELHOR LINGUAGEM PARA APRENDER PROGRAMAÇÃO? Se você é iniciante, procure uma linguagem de programação que te ajude a aprender lógica de programação! Só depois de aprender o básico que você deve aprender uma outra linguagem mais profissional. Muitas pessoas já começam aprendendo lógica de programação com linguagens profissionais, por exemplo java, C, python, C# etc. É totalmente válido e muitos conseguem de fato aprender, mas algumas pessoas podem ter dificuldade de assimilar os conceitos básicos com essas linguagens. Então, para quem nunca programou antes, indico fortemente que comece com uma linguagem que o ajude aprender a programar. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 180 Para mim foi difícil entender isso quando ensinava pessoas a programar, queria logo que elas aprendessem java, ou C# etc. Mas a dificuldade dos iniciantes era conseguir aprender lógica de programação tendo que “decorar” as restrições exigidas pela linguagem. Por isso, nos artigos voltados para iniciante aqui no { Dicas de Programação }, vamos escrever algoritmos em português (pseudocódigos) e utilizar uma linguagem simples para transmitir os conceitos, pois o objetivo é ensinar o básico. VISUALG, IMPLEMENTANDO ALGORITMOS EM PORTUGUÊS! Na minha opinião esta é a melhor ferramenta para iniciantes em programação implementarem seus algoritmos. O Visualg foi criado por um brasileiro (Claudio Morgado de Souza), é fácil de ser usado e compila pseudocódigos escritos em português, também conhecidos como “Portugol”. O Visualg foi desenvolvido para Windows. Para instalar faça o download do instalador (versão 2.5) na página: <http://www.dicasdeprogramacao.com.br/ download-visualg/>. A instalação é muito simples, basta executar o instalador e acionar os botões “Avançar”, a famosa instalação “Next, next, next …”. Quando abrimos o software, vimos uma tela com o esqueleto de um algoritmo já criado, como a imagem a seguir: TÓPICO 5 | SUBALGORITMOS E ESCOPO DE IDENTIFICADORES 181 CRIANDO O PRIMEIRO PROGRAMA COM O VISUALG Para batizar o Visualg vamos criar agora um programa básico. Digite o algoritmo abaixo no visualg (as linhas que iniciam com “//” são comentários e não são interpretadas): Para executarmos o programa, utilize o botão indicado na figura ou pressione F9. UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO 182 Obs.: Diferentemente do que fora visto anteriormente, o visualg não utiliza o ; ao final de cada instrução. IMPORTANT E Para finalizar, o resultado deste programa é como apresentado pela figura a seguir: TÓPICO 5 | SUBALGORITMOS E ESCOPO DE IDENTIFICADORES 183 Outra coisa muito interessante no Visualg é a documentação de referência. É tudo em português! Se você tiver dúvida de uma palavra-chave ou comando, basta acessar a documentação através do menu ajuda. Eu mesmo já acessei muito essas referências para ver como os comandos básicos deveriam ser escritos. Use-a! É uma documentação bem simples e didática, com certeza ela pode te ajudar a aprender programação. Como pôde ser visto, programar utilizando o Visualg é muito fácil! Por utilizar uma linguagem em português, ele torna-se um grande aliado para iniciantes em programação. Evidentemente, não se cria softwares profissionais com esta ferramenta, o seu grande objetivo é ajudar no ensino de lógica de programação. E com certeza cumpre o seu papel. FONTE: Disponível em: <http://www.dicasdeprogramacao.com.br/linguagem-de-programacao- para-iniciantes/>. Acesso em: 25 abr. 2016. 184 RESUMO DO TÓPICO 5 Caro acadêmico, neste tópico você estudou que: • Os subalgoritmos são estruturas de programação que possuem praticamente todas as características e potencialidades de algoritmos. Eles permitem que seja definido um novo tipo de dado, declaradas constantes, declaradas variáveis e em algumas linguagens de programação, até que se definam subalgoritmos deles. • É importante observar que os tipos de dados, constantes e variáveis declarados num subalgoritmo possuem escopo de utilização apenas no subalgoritmo. As variáveis, por exemplo, são chamadas de variáveis locais. Isso significa que elas possuem “vida” apenas dentro do subalgoritmo, não estando disponíveis para uso por outras partes do algoritmo/programa. • A passagem de parâmetros é um recurso bastante útil nos subalgoritmos. A maioria das linguagens de programação permite que se utilize duas formas de passagem de parâmetros: por cópia e por referência. • Na passagem de parâmetros por cópia, os dados são copiados para o subalgoritmo para o qual estão sendo passados e utilizados em seu escopo. Isso significa que os dados passam para o subalgoritmo e podem ser alterados em seu interior, sem que os dados a partir dos quais foram copiados sejam alterados. • Na passagem de parâmetros por referência, o endereço da variável é levado para dentro do subalgoritmo, de forma que quaisquer alterações no conteúdo da variável são realizadas diretamente nela, com base no seu endereço. Isso significa que é necessária muita atenção ao utilizar passagem de parâmetros por referência, pois ao final da execução do subalgoritmo as variáveis passadas poderão ter os valores alterados. 185 AUTOATIVIDADE 1 Elabore um algoritmo que leia 30 números inteiros utilizando um subalgoritmo que recebe como parâmetro se deve mostrar os números pares ou ímpares. Ao final, mostre os números pares e depois os números ímpares. 2 Em uma competição de agilidade são cadastrados 20 cães. Construa um algoritmo que leia o nome, a raça e a pontuação do cão. Ao final, utilize um subalgoritmo para mostrar os dados em ordem crescente de pontuação. 186 187 REFERÊNCIAS ARAÚJO, Everton Coimbra. Algoritmos fundamentos e prática. Florianópolis: VisualBooks, 2007. BOYER, Carl B. História da matemática. São Paulo: Edgard Blücher, 1996. COMER, Douglas E. Redes de computadores e Internet. Porto Alegre: Bookman, 2001. FOROUZAN, Behrouz; MOSHARRAF, Firouz. Fundamentos da ciência da computação. São Paulo: Cengage, 2011 FOROUZAN, Behrouz; MOSHARRAF, Firouz. Fundamentos da computação. São Paulo: Cengage Learning, 2011. KOCHANSKI, Djone; ANDRIETTI, Odilon Jose. Algoritmos. Indaial: Asselvi, 2005. KUROSE, James S. Redes de computadores e a internet: uma nova abordagem. São Paulo: Addison Wesley, 2003. MANZANO, José Augusto N. G; OLIVEIRA, Jayr Figueiredo de. Algoritmos: lógica para desenvolvimento de programação de computadores. São Paulo: Érica/ Saraiva, 2014. MONTEIRO, Mario A. Introdução à organização de computadores. Rio de Janeiro: LTC, 2014. SENGER, Hermes. Redes locais, metropolitanas e de longa distância. Disponível em: <www-usr.inf.ufsm.br/~candia/aulas/espec/Aula_2_LAN_MAN_WAN.pdf>. Acesso em: 1 mar. 2016. SOARES, Luiz Fernando Gomes. Redes de computadores: das LANs, MANs e WANs às redes ATM. Rio de Janeiro: Campus, 1995. TANENBAUM, Andrew S. Organização estruturada de computadores. São Paulo: Pearson, 2009. TECHIWAREHOUSE. Fifth Generation of Computers. 2011. Disponível em: <http://www.techiwarehouse.com/engine/0ee1987d/Fifth-Generation-of- Computers>. Acesso em: 26 fev. 2016. 188 THE HISTORY OF COMPUTERS. 2008. Disponível em: <http://www.ptc.dcs.edu/ Moody/comphistory/comphistory_print.html>. Acesso em: 25 fev. 2016. XAVIER, Gley Fabiano Cardoso. Lógica de Programação. São Paulo: Senac, 2004. 189 ANOTAÇÕES ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
Compartilhar