Cap5 logica

Page 1

Técnico em Informática Lógica de Programação Aula V


Aula 6 - Subalgoritmos Objetivos Compreender a aplicação da modularização do código para resolver problemas mais complexos. Resolver problemas que envolvam a modularização do código.

6.1 Modularização do Código Em geral, problemas complicados exigem algoritmos maiores e com mais linhas de código. Além disso, se estes problemas possuem diversos trechos de códigos que serão repetidos em alguns momentos do código, a repetição destes blocos de comandos ao longo do desenvolvimento do algoritmo pode prejudicar o seu entendimento. Existe uma técnica conhecida como “Dividir para Conquistar”. Esta técnica pode ser aplicada em diversas áreas de estudo e possui este fundamento: dividir um problema maior em problemas menores, até que este problema maior possa ser resolvido. No caso da área de desenvolvimento de algoritmos, esta técnica pode ajudar nas seguintes situações:  Contribui para o reuso do código, uma vez que existirão chamadas para os subalgoritmos e a repetição de códigos será praticamente nula. 

Ajuda a deixar o código mais organizado e legível, ou seja, mais fácil de ser compreendido por qualquer pessoa.

 Facilita no momento de fazer alguma manutenção no código ou descobrir erros.  Serve para que vários membros de uma equipe de desenvolvimento consigam atuar no mesmo projeto, cada um trabalhando em um módulo diferente, dentre outras situações. Desta forma, subalgoritmos, sub-rotinas, subprogramas ou módulos são blocos de instruções que realizam tarefas específicas e podem ser chamados a partir do programa principal ou a partir de outros subalgoritmos, quantas vezes forem necessárias. Com a modularização do código original, surgem dois conceitos importantes: 75


 O programa principal  Os tipos de subprogramas: o Funções o Procedimentos A diferença entre procedimentos e funções está unicamente no tipo de retorno: funções retornam valores após a execução da sua lista de instruções, mas os procedimentos não retornam.

As “funções” e os “procedimentos” aparecem, principalmente, em linguagens baseadas na programação estruturada. Em outros paradigmas de programação, tal como o paradigma orientado a objetos, este conceito não existe da forma como explicamos anteriormente. Sendo assim, quando você for estudar o desenvolvimento de algoritmos em uma linguagem baseada em outro paradigma de programação, você deve verificar todos os conceitos associados e perceber de que forma a subprogramação acontece. Além disso, a sintaxe e a forma de funções de determinadas linguagens de programação também devem ser verificadas. 6.1.1 Funções Uma função, em matemática, significa associar para cada valor x um elemento y correspondente, também denotado por ƒ(x)=y. Uma função, em Lógica de Programação, é um subalgoritmo que pode ou não receber uma informação, mas sempre retorna um valor ou uma informação. A chamada de uma função é feita através da citação do seu nome seguido, opcionalmente, de seus argumentos iniciais entre parênteses. As funções podem ser predefinidas, ou seja, próprias da linguagem ou criadas pelo programador de acordo com o seu interesse. A criação de uma Função deve ser declarada, com os demais objetos, no início do programa. Este tipo de subalgoritmo sempre retorna um e apenas um valor ao algoritmo que lhe chamou. Cada função tem associada ao seu valor de retorno um tipo explícito.

76


Onde:  <identificador> é o nome da função  Passagem de parâmetros por referência: utiliza-se a construção VAR antes dos identificadores para indicar a passagem por referência. Os identificadores são separados por vírgula.  <parâmetros>: Entre um mesmo tipo de dados são separados por vírgula. Entre tipos de dados diferentes a separação é feita com ponto-e-vírgulas ';'.  <tipo de retorno da função>: Real, Inteiro, Lógico ou Literal.  <declaração de variáveis locais> idêntica à declaração de variáveis globais. As variáveis declaradas localmente tem validade dentro do escopo da função.  <retorne> local onde é colocado a variável de retorno.

Sempre declare as variáveis globais antes da função. A função sempre fica dentro do escopo Algoritmo e Fim Algoritmo. Procure não Declarar variáveis globais com o mesmo nome das variáveis locais da função. Veja este algoritmo criado para realizar a soma entre dois números. Criou-se uma função que recebe dois valores reais e devolve a soma destes números para o programa principal, onde o resultado da soma é exibido para o usuário:

77


Digite o algoritmo acima, salve-o como exemplo_funcao e tecle F9 para executá-lo. O VisuALG possui diversas funções predefinidas e você pode usá-las em seus algoritmos. Dica: Para acessar as funções do VisuALG, basta teclar Ctrl + j. A seguinte tela será exibida:

Figura 6.1 - Funções predefinidas do VisuALG, obtidas quando tecla-se Ctrl + j Fonte: Elaborado pela autora

78


Observe que as funções predefinidas são aquelas que possuem abre e fecha parênteses após a definição da função, tal como em Abs(valor:real): real. Isso significa que a função predefinida Abs é uma função, recebe um valor real e devolve outro valor real. Já a função Asc (s: caracter): inteiro recebe um caracter e devolve um valor inteiro. Segue abaixo uma lista de funções predefinidas e as respectivas funcionalidades. Funções predefinidas do VisuALG

Explicação Devolve o valor absoluto de um número,

Abs (valor : real) : real

que é o valor desse mesmo número independentemente

do

seu

sinal.

Exemplo: o valor absoluto de -3 é 3 Asc (s : caracter) : inteiro

Retorna o código ASCII Retorna a dimensão do caractere.

Compr (c : caracter) : inteiro

Compr("abc") devolve 3 Compr("e") devolve 1 Copia

Copia (c : caracter , posini, posfin :

um

determinado

trecho

do

caractere.

inteiro) : caracter Copia ("teste", 4 , 2) devolve te Int (valor : real) : inteiro

Converte o valor em inteiro Converte em Maiúscula

Maiusc (c : caracter) : caracter

Maiusc(“teste”) devolve TESTE Maiusc(“a”) devolve A

Minusc (c : caracter) : caracter

Converte em Minúscula Retorna a posição do Caractere subc

Pos (subc, c : caracter) : inteiro

dentro

do

texto

c.

Pos(e, “teste”) devolve Quad (valor : real) : real

Raizq (valor : real) : real

Devolve um valor elevado quadrado. Quad(4) devolve 16 Devolve a raiz quadrada de um valor. Raizq(16) devolve 4 79


Saiba mais sobre o código ASCII (American Standard Code for Information Interchange) em http://pt.wikipedia.org/wiki/ASCII O algoritmo abaixo faz uso de algumas funções predefinidas no VisuALG:

Linha 6 7

Explicação O valor literal “José Silva” é armazenado na variável nome. A função Compr recebe a variável nome e devolve o seu tamanho. Este valor para tamanho é armazenado na variável quant_caracteres. A função Pos recebe o caractere espaço em branco e a variável onde a

8

primeira ocorrência do mesmo será procurada. O resultado será armazenado na variável local_espaco. A função Copia recebe uma variável nome, o valor inicial (local_espaco + 1)

9

e a quantidade de caracteres após o valor inicial que deve ser devolvido. O resultado será armazenado na variável sobrenome.

Modifique o algoritmo acima para que o nome seja digitado pelo usuário e armazenado na variável nome através do comando de leitura, o leia().

80


6.1.2 Procedimentos Na linguagem de programação do VisuALG, procedimento é um subprograma que não retorna nenhum valor. Sua declaração, que deve estar entre o final da declaração de variáveis e a linha início do programa principal, segue a sintaxe abaixo:

onde:  <identificador> é o nome do procedimento.  [var] significa que a passagem de parâmetros é opcional, mas se existir, as variáveis devem ser declaradas com o uso da palavra reservada var. Os parâmetros são separados por vírgulas.  <parâmetros> são os valores que o procedimento deve receber ao ser chamado. Entre um mesmo tipo de dados são separados por vírgula. Entre tipos de dados a separação é feita com ponto e vírgula ';'. Exemplificaremos o uso de procedimentos através do problema abaixo: Atividade: Implemente um algoritmo, de forma modular, que receba 4 valores inteiros e os ordene em ordem crescente. Entrada: 4 números inteiros. Processo: ordenar estes 4 números em ordem crescente. Saída: exibir os 4 números ordenados. Este tipo de problema exige o uso de variáveis auxiliares, veja a imagem abaixo. 81


Número1

Número2

Número3

Número4

7

6

8

9

Como fazer para trocar o valor armazenado na variável Número2 com o valor armazenado na variável Número1? Você deverá criar uma variável auxiliar para guardar um dos dois valores, caso contrário, um valor será perdido. No exemplo abaixo, a variável auxiliar está recebendo o valor armazenado na variável Número2. Variável Auxiliar 6 Desta forma, a variável Número2 pode receber o valor armazenado na variável Número1: Número1

Número2

Número3

Número4

7

8

9

Para completar o processo de ordenação, o valor armazenado na variável auxiliar já pode ser armazenado na variável Número1: Número1

Número2

Número3

Número4

6

7

8

9

Uma proposta de algoritmo para resolver este problema será apresentada a seguir:

82


Linha 4-11

Explicação Definição e implementação do procedimento. A variável local aux foi declarada. Ela pode ser utilizada apenas dentro do

6

procedimento. Ela servirá como uma variável auxiliar e temporária, enquanto a troca de valores está sendo realizada nas linhas 8, 9 e 10

14

O usuário deve digitar 4 valores inteiros, os quais serão armazenados nas respectivas variáveis A, B, C e D. Enquanto os valores armazenados em A, B, C e D não estiverem ordenados, o

15

bloco de comandos especificados entre o enquanto e fimenquanto serão executados.

29

Os valores ordenados serão exibidos para o usuário

83


Observe o resultado através do console:

6.2 Atividades propostas para a aula 6

1. Escreva um programa que verifique se um número é par ou ímpar através de uma função chamada VERIFICA. A função deve receber um número inteiro (n), verificar se o número é par ou ímpar e deve retornar se o número (n) é par (1) ou ímpar (0). No programa principal, teste este retorno. Se o retorno for 1, exiba “Par”, mas se for 0, exiba “Ímpar”. 2. Escreva um programa que calcule e retorne o valor da hipotenusa através da função HIPOTENUSA. A função recebe o valor da base e da altura de um triângulo. Fórmulas: hipotenusa2 = base2 + altura2 area=(base * altura)/2 3. Escreva um programa que calcule e retorne o salário atualizado através da função REAJUSTE. A função deve receber o valor do salário e o índice de reajuste.

84



Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.