A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Lógica de Programação Subalgoritmos

Apresentações semelhantes


Apresentação em tema: "Lógica de Programação Subalgoritmos"— Transcrição da apresentação:

1 Lógica de Programação Subalgoritmos

2 Problema Como resolver um problema bem “cabeludo”?
Como as pirâmides do Egito foram construídas?

3 Solução Dividir para conquistar. Modularização

4 Subalgoritmos São trechos de algoritmos que efetuam determinada tarefa. Ao invés de escrever um algoritmo grande, escrevem-se vários algoritmos menores, os quais, em conjunto, resolvem o problema proposto. É especialmente indicado usá-los quando uma determinada tarefa é efetuada em diversos lugares no mesmo algoritmo. São declarados no início do algoritmo e podem ser chamados em qualquer ponto após sua declaração. Podem ser de dois tipos: Funções - retornam algum valor. Procedimento (Subrotina) - não retorna nada.

5 Vantagens Reduzem o tamanho do algoritmo.
Melhoram a legibilidade do algoritmo. Evitam a repetição de código. Reaproveitamento no mesmo programa ou em outros Facilitam a manutenção Facilitam a divisão de trabalho Possibilitam a utilização de componentes prontos.

6 Funções Retornam um valor ou uma informação.
A chamada de uma função é feita através da citação do seu nome seguido de seus argumentos entre parênteses. As funções podem ser: predefinidas pela linguagem; criadas pelo programador de acordo com o seu interesse.

7 Funções Predefinidas do Visualg

8 Funções Predefinidas do Visualg

9 Funções Predefinidas do Visualg
algoritmo "exemplo" var numero : real nome : caracter inicio escreva("Digite um número: ") leia(numero) escreval("Raiz quad. de ", numero, " é ", raizq(numero)) escreva("Digite um nome: ") leia(nome) escreval("Normal: ", nome) escreval("Maiúsculas: ", maiusc(nome)) escreval("Minúsculas: ", minusc(nome)) escreval("3 primeiras letras: ", copia(nome,1,3)) escreval("tamanho: ", compr(nome)) escreval(maiusc(copia(nome,compr(nome)-2,3))) fimalgoritmo

10 Criação de Funções Algoritmo "<nome do algoritmo>" var <declaração de variáveis globais> funcao <identificador> ([var]<parâmetros>) <tipo de retorno> <declaração de variáveis locais> inicio <lista de comandos> retorne <variável de retorno> fimfuncao < lista de comandos> fimalgoritmo

11 Criação de Funções As variáveis globais ficam antes das funções.
A função sempre fica dentro do escopo Algoritmo e FimAlgoritmo. Evite declarar variáveis globais com o mesmo nome das variáveis da função.

12 Exemplo algoritmo "soma" var n1, n2 : real funcao soma(a, b : real) : real retorne a + b fimfuncao inicio escreva("Digite um número: ") leia(n1) escreva("Digite outro número: ") leia(n2) escreva("Soma: ", soma(n1, n2)) fimalgoritmo

13 Exemplo algoritmo "par_impar" var numero : inteiro funcao par_ou_impar(num : inteiro): caracter inicio se (num % 2 = 0) entao retorne "par" senao retorne "impar" fimse fimfuncao escreva("Digite um número: ") leia(numero) escreva(par_ou_impar(numero)) fimalgoritmo

14 Procedimento Algoritmo "<nome do algoritmo>" var <declaração de variáveis globais> procedimento <identificador> ([var]<parâmetros>) <declaração de variáveis locais> inicio <lista de comandos> fimprocedimento < lista de comandos> fimalgoritmo

15 Exemplo algoritmo "repeticao" var palavra : caracter procedimento repete(texto : caracter; n : inteiro) var i : inteiro inicio para i de 1 ate n faca escreval(texto) fimpara fimprocedimento escreva("Digite uma palavra: ") leia(palavra) repete(palavra, 10) fimalgoritmo

16 Escopo de Variáveis

17 Passagem de Parâmetros
Por valor Por referência Vantagens do uso da passagem de parâmetros por valor: Privacidade dos dados A possibilidade de passar constantes como argumentos de funções x  raizq(25)

18 Exemplo – Passagem por Referência
algoritmo "permuta_valor" var n1, n2, aux : inteiro procedimento troca(var x, y : inteiro) var aux : inteiro inicio aux <- x x <- y y <- aux fimprocedimento Escreva("Digite n1: ") leia(n1) Escreva("Digite n2: ") leia(n2) troca(n1,n2) Escreval("n1 é: ", n1) Escreval("n2 é: ", n2) fimalgoritmo

19 NO VISUALG

20 Subprograma é um programa que auxilia o programa principal através da realização de uma determinada sub tarefa. Também costuma receber os nomes de sub-rotina, procedimento, método ou módulo. Os subprogramas são chamados dentro do corpo do programa principal como se fossem comandos. Após seu término, a execução continua a partir do ponto onde foi chamado. É importante compreender que a chamada de um subprograma simplesmente gera um desvio provisório no fluxo de execução.

21 Há um caso particular de subprograma que recebe o nome de função
Há um caso particular de subprograma que recebe o nome de função. Uma função, além de executar uma determinada tarefa, retorna um valor para quem a chamou, que é o resultado da sua execução. Por este motivo, a chamada de uma função aparece no corpo do programa principal como uma expressão, e não como um comando.

22 Cada subprograma, além de ter acesso às variáveis do programa que o chamou (são as variáveis globais), pode ter suas próprias variáveis (são as variáveis locais), que existem apenas durante sua chamada.

23 Ao se chamar um subprograma, também é possível passar- lhe determinadas informações que recebem o nome de parâmetros (são valores que, na linha de chamada, ficam entre os parênteses e que estão separados por vírgulas). A quantidade dos parâmetros, sua seqüência e respectivos tipos não podem mudar: devem estar de acordo com o que foi especificado na sua correspondente declaração.

24 Para se criar subprogramas, é preciso descrevê-los após a declaração das variáveis e antes do corpo do programa principal. O VisuAlg possibilita declaração e chamada de subprogramas nos moldes da linguagem Pascal, ou seja, procedimentos e funções com passagem de parâmetros por valor ou referência. Isso será detalhado a seguir.

25 Procedimentos

26 Em VisuAlg, procedimento é um subprograma que não retorna nenhum valor
Em 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 inicio do programa principal, segue a sintaxe abaixo: O <nome-de-procedimento> obedece as mesmas regras de nomenclatura das variáveis. Por outro lado, a <seqüência-de-declarações-de-parâmetros> é uma seqüência de

27 <seqüência-de-declarações-de-parâmetros>
O <nome-de-procedimento> obedece as mesmas regras de nomenclatura das variáveis. Por outro lado, a <seqüência-de-declarações-de-parâmetros> é uma seqüência de [var] <seqüência-de-parâmetros>: <tipo-de-dado> separadas por ponto e vírgula. A presença (opcional) da palavra-chave var indica passagem de parâmetros por referência; caso contrário, a passagem será por valor.

28 Por sua vez, <seqüência-de-parâmetros> é uma seqüência de nomes de parâmetros (também obedecem a mesma regra de nomenclatura de variáveis) separados por vírgulas. De modo análogo ao programa principal, a seção de declaração internas começa com a palavra- chave var, e continua com a seguinte sintaxe:

29 <lista-de-variáveis> : <tipo-de-dado>
Nos próximos exemplos, através de um subprograma soma, será calculada a soma entre os valores 4 e –9 (ou seja, será obtido o resultado 13) que o programa principal imprimirá em seguida. No primeiro caso, um procedimento sem parâmetros utiliza uma variável local aux para armazenar provisoriamente o resultado deste cálculo (evidentemente, esta variável é desnecessária, mas está aí apenas para ilustrar o exemplo), antes de atribuí-lo à variável global res:

30 procedimento soma var aux: inteiro inicio // n, m e res são variáveis globais aux <- n + m res <- aux fimprocedimento

31 No programa principal deve haver os seguintes comandos: n <- 4 m <- -9 soma escreva(res)

32 A mesma tarefa poderia ser executada através de um procedimento com parâmetros, como descrito abaixo: procedimento soma (x,y: inteiro) inicio // res é variável global res <- x + y fimprocedimento

33 No programa principal deve haver os seguintes comandos:
n <- 4 m < soma(n,m) escreva(res)

34 A passagem de parâmetros do exemplo acima chama-se passagem por valor
A passagem de parâmetros do exemplo acima chama-se passagem por valor. Neste caso, o subprograma simplesmente recebe um valor que utiliza durante sua execução. Durante essa execução, os parâmetros passados por valor são análogos às suas variáveis locais, mas com uma única diferença: receberam um valor inicial no momento em que o subprograma foi chamado.

35 Funções Funções

36 Em VisuAlg, função é um subprograma que retorna um valor (corresponde ao function do Pascal). De modo análogo aos procedimentos, sua declaração deve estar entre o final da declaração de variáveis e a linha inicio do programa principal, e segue a sintaxe abaixo: funcao <nome-de-função> [(<seqüência- de-declarações-de-parâmetros>)]: <tipo- de-dado> // Seção de Declarações Internas inicio // Seção de Comandos fimfuncao

37 O <nome-de-função> obedece as mesmas regras de nomenclatura das variáveis. Por outro lado, a
 <seqüência-de-declarações-de-parâmetros>  é uma seqüência de [var] <seqüência-de-parâmetros>: <tipo-de-dado> separadas por ponto e vírgula. A presença (opcional) da palavra-chave var indica passagem de parâmetros por referência; caso contrário, a passagem será por valor. 

38 Por sua vez, <seqüência-de-parâmetros> é uma seqüência de nomes de parâmetros (também obedecem a mesma regra de nomenclatura de variáveis) separados por vírgulas. O valor retornado pela função será do tipo especificado na sua declaração (logo após os dois pontos). Em alguma parte da função (de modo geral, no seu final), este valor deve ser retornado através do comando retorne.

39 De modo análogo ao programa principal, a seção de declaração internas começa com a palavra- chave var, e continua com a seguinte sintaxe: <lista-de-variáveis> : <tipo-de-dado> Voltando ao exemplo anterior, no qual calculamos e imprimimos a soma entre os valores 4 e –9, vamos mostrar como isso poderia ser feito através de uma função sem parâmetros.

40 Ela também utiliza uma variável local
 aux  para armazenar provisoriamente o resultado deste cálculo, antes de atribuí-lo à variável global  res:

41 funcao soma: inteiro var aux: inteiro inicio // n, m e res são variáveis globais aux <- n + m retorne aux fimfuncao

42 No programa principal deve haver os seguintes comandos: n <- 4 m < res <- soma escreva(res)

43 Se realizássemos essa mesma tarefa com uma função com parâmetros passados por valor, poderia ser do seguinte modo: funcao soma (x,y: inteiro): inteiro inicio retorne x + y fimfuncao

44 No programa principal deve haver os seguintes comandos:
n <- 4 m <- -9 res <- soma(n,m) escreva(res)

45 Passagem de Parâmetros por Referência
Há ainda uma outra forma de passagem de parâmetros para subprogramas: é a passagem por referência. Neste caso, o subprograma não recebe apenas um valor, mas sim o endereço de uma variável global. Portanto, qualquer modificação que for realizada no conteúdo deste parâmetro afetará também a variável global que está associada a ele.

46 Passagem de Parâmetros por Referência
Durante a execução do subprograma, os parâmetros passados por referência são análogos às variáveis globais. No VisuAlg, de forma análoga a Pascal, essa passagem é feita através da palavra var na declaração do parâmetro.

47 Voltando ao exemplo da soma, o procedimento abaixo realiza a mesma tarefa utilizando passagem de parâmetros por referência: procedimento soma (x,y: inteiro; var result: inteiro) inicio result <- x + y fimprocedimento

48 No programa principal deve haver os seguintes comandos:
n <- 4 m < soma(n,m,res) escreva(res)

49 Recursão e Aninhamento

50 A atual versão do VisuAlg permite recursão, isto é, a possibilidade de que um subprograma possa chamar a si mesmo. A função do exemplo abaixo calcula recursivamente o fatorial do número inteiro que recebe como parâmetro: funcao fatorial (v: inteiro): inteiro inicio se v <= 2 entao retorne v senao retorne v * fatorial(v-1) fimse fimfuncao

51 Em Pascal, é permitido o aninhamento de subprogramas, isto é, cada subprograma também pode ter seus próprios subprogramas. No entanto, esta característica dificulta a elaboração dos compiladores e, na prática, não é muito importante. Por este motivo, ela não é permitida na maioria das linguagens de programação (como C, por exemplo), e o VisuAlg não a implementa.

52 PROCEDIMENTOS valor como parâmetro e escreva o dobro desse número.
 Exemplo 1: Crie um procedimento que receba um valor como parâmetro e escreva o dobro desse número. Não possui tipo de retorno e não retorna nada. Apenas executa o que está na seção de comandos

53 PROCEDIMENTOS como parâmetro e escreva o dobro desse número.
 Exemplo 1: Crie um procedimento que receba um valor como parâmetro e escreva o dobro desse número. É feita apenas a chamada do procedimento, sem precisar atribuir a nenhuma variável.

54 PROCEDIMENTOS número. número como parâmetro e escreva a tabuada desse
 Exemplo 2: Crie um procedimento que receba um número como parâmetro e escreva a tabuada desse número.

55 PROCEDIMENTOS ... dos números de 1 a 9:
 Exemplo 3: Crie um algoritmo que utilize o procedimento criado anteriormente, e escreva a tabuada dos números de 1 a 9: ...

56 PROCEDIMENTOS * * * * * * * * * * * * * * * * * * * * * * * * * tela:
 Exemplo 4: Crie um procedimento que, dado um número N por parâmetro, desenhe o seguinte padrão na tela:  Por exemplo, para N = 5 * * * * * * * * * * * * * * * * * * * * * * * * *

57 PROCEDIMENTOS  Exemplo 4:

58 PROCEDIMENTOS 1 * * * * * 2 * * 3 * * 4 * * * * * 5 tela:
 Exemplo 5: Crie um procedimento que, dado um número N por parâmetro, desenhe o seguinte padrão na tela:  Por exemplo, para N = 5 1 * * * * * 2 * * 3 * * 4 * * * * * 5

59 PROCEDIMENTOS  Exemplo 5:

60 EXERCÍCIOS PROCEDIMENTOS
1. que verifique se esses valores podem ser os comprimentos dos lados de um triângulo e, neste caso, escrever qual o tipo de triângulo esses valores formam. Escreva um procedimento que receba 3 valores reais X, Y e Z e Escreva um procedimento que receba um número inteiro positivo parâmetro e escreva os divisores desse número. por 2. Crie um procedimento que, dado um número N por parâmetro, desenhe os seguintes padrões na tela: 3. 4. 1 2 3 4 5 * 2 4 * * 3 3 * * 4 2 * * 5 4 3 2 1 * * * * *

61 PASSAGEM DE PARÂMETROS
 Parâmetros são canais por onde os dados são transferidos pelo algoritmo chamador a um subalgoritmo.  Parâmetros Formais são os nomes simbólicos usados na definição dos parâmetros de um subalgoritmo. Parâmetros Formais  Parâmetros Reais são aqueles que substituem os parâmetros formais quando da chamada de um subalgoritmo. Parâmetros Reais

62 MECANISMOS DE PASSAGEM DE PARÂMETROS
 A substituição dos parâmetros formais pelos parâmetros reais no ato da invocação de um subalgoritmo é denominada de passagem de parâmetros  Pode se dar por dois mecanismos distintos:  Passagem por valor (ou por cópia)  Passagem por referência

63 PASSAGEM POR VALOR parâmetros reais uma cópia.
 Na passagem por valor, é criada uma cópia dos parâmetros reais  As modificações efetuadas no parâmetro formal não afetam o parâmetro real, pois trabalha-se apenas com uma cópia.

64 PASSAGEM POR VALOR RESULTADO valores de a e b, os valores de x e y
Mesmo alterando os valores de a e b, os valores de x e y continuam os mesmos após a chamada do subalgoritmo

65 PASSAGEM POR REFERÊNCIA
 O espaço de memória ocupado pelos parâmetros reais é compartilhado pelos parâmetros formais correspondentes  As modificações efetuadas nos parâmetros formais também afetarão os parâmetros reais  Na linguagem do Visualg, utiliza-se a palavra var antes do nome do parâmetro na declaração da função para informar que a passagem será por referência

66 PASSAGEM POR REFERÊNCIA
A palavra var antes dos parâmetros indica passagem por referência

67 PASSAGEM POR REFERÊNCIA
RESULTADO Agora, ao alterar os valores de a e b, os valores de x e y são também alterados

68 PASSAGEM POR REFERÊNCIA
 Exemplo 1: Crie um procedimento que receba dois valores inteiros por parâmetro e realize a troca desses valores.

69 PASSAGEM POR REFERÊNCIA
 Um mesmo subalgoritmo pode ter parâmetros que são passados por valor e outros que são passados por referência: Os parâmetros a e b são passados por valor e o parâmetro valorMedia é passado por referência

70 EXERCÍCIOS ordene procedimento e exibir os valores após a ordenação. -
Crie um procedimento que receba dois valores por referência e ordene em ordem crescente. Crie um algoritmo principal para chamar o procedimento e exibir os valores após a ordenação. - os 1. Crie um procedimento para resolver uma equação de segundo grau. O procedimento deve receber 5 parâmetros: os coeficientes a, b e c da equação (por valor), e raiz1 e raiz2 (por referência). Crie um algoritmo principal que leia os coeficientes da equação e chame o procedimento. Em seguida, mostre o resultado das raízes. 2. Crie um procedimento que receba uma remova todos os caracteres de espaços da frase. Ex: a frase “O livro está em cima da mesa” deverá ficar como: “Olivroestáemcimadamesa”. frase por parâmetro e 3.

71 VARIÁVEIS LOCAIS E GLOBAIS
 As variáveis locais são visíveis apenas dentro dos subalgoritmo que as criou  Já as variáveis globais são visíveis tanto no algoritmo principal como nos subalgoritmos  Por esse motivo, é importante que as funções/procedimentos sejam declarados na seção var após a declaração das variáveis globais  É importante não criar variáveis locais e globais com o mesmo nome para evitar ambiguidades.

72 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 1:

73 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 1: Variável Global A variável resultado é uma variável global. Pode ser utilizada dentro de um subalgoritmo Variável Local Subalgoritmo Algoritm o Principal

74 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 1:  Já a utilização de variáveis locais dentro do algoritmo principal não é permitida. A execução de um algoritmo como o mostrado abaixo causará um erro: A variável calculo é uma variável local do procedimento soma e NÃO pode ser utilizada dentro do algoritmo principal

75 VARIÁVEIS LOCAIS E GLOBAIS
 O Visualg ainda não permite a passagem de Vetores e Matrizes como parâmetros de subalgoritmos  Para criar subalgoritmos que precisam de vetores e matrizes, utilize variáveis globais  Exemplo 1: Crie um procedimento para preencher um vetor de posições

76 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 1:

77 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 2: Crie um procedimento para exibir o conteúdo de um vetor

78 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 3: Crie um procedimento para imprimir o conteúdo de um vetor de 10 posições. Esse procedimento deve receber um parâmetro do tipo caractere que indica se o conteúdo deve ser exibido na ordem correta ou na ordem inversa (“C” para correta e “I” para inversa)

79 VARIÁVEIS LOCAIS E GLOBAIS  Exemplo 3:

80 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 4: Crie uma função para inserir um elemento em um vetor. Crie um variável global do tipo vetor de inteiro de 10 posições e uma variável global para indicar quantas posições preenchidas o vetor possui. A função de inserção deve receber por parâmetro o valor a ser inserido no vetor. Se o vetor já estiver cheio, a função deve retornar um valor lógico (falso) para informar que não foi possível inserir um valor no vetor. Caso contrário, deve retornar verdadeiro.

81 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 4:.

82 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 5: Ao algoritmo anterior, acrescente o procedimento para imprimir o conteúdo do vetor. Note que a função deve mostrar apenas as posições preenchidas do vetor. Mesmo sendo um vetor de 10 elementos, se apenas 1 tiver sido inserido, a função deve mostrar apenas esse elemento.elemento em um vetor.

83 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 5:

84 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 6: Ao algoritmo anterior, acrescente a função para remover um elemento em um vetor. Crie um variável global do tipo vetor de inteiro de 10 posições e uma variável global para indicar quantas posições preenchidas o vetor possui. A função de remoção deve receber por parâmetro a posição do elemento a ser removido. Se a posição informada não possui nenhum valor, retornar o valor falso. Caso a remoção seja bem sucedida, retornar verdadeiro. Obs: Note que, ao remover um valor do vetor, todos os valores após o valor removido devem ser deslocados em uma posição

85 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 6:

86 VARIÁVEIS LOCAIS E GLOBAIS
 Exemplo 7: Crie um algoritmo principal para testar as funções/procedimentos criadas

87 EXERCÍCIOS Crie uma função que receba um valor por parâmetro um nome
(caractere) e verifique se esse valor se encontra em um vetor (também de caractere, declarado globalmente). Retorne verdadeiro caso o valor se encontre e falso, caso contrário. Crie um algoritmo principal para testar a função criada. 1. Crie uma função que receba por parâmetro um número inteiro e verifique quantas vezes esse valor se encontra em um vetor (declarado globalmente). Retorne a quantidade de vezes que o valor se encontra no vetor. Crie um algoritmo principal para testar a função criada. 2. Crie um procedimento que receba por parâmetro um número inteiro e remova todas as ocorrências desse valor de um vetor declarado globalmente. 3.

88 EXERCÍCIOS Quando for escolhida a: Escreva um algoritmo
que apresente um menu com quatro opções: 4.  Inserir  Remover  Imprimir  Substituir  Sair Considere um vetor de inteiro de posições declarado globalmente. Quando for escolhida a:  Opção 1: um subalgoritmo Insere deve ser chamado para inserir o valor na próxima posição livre do vetor  Opção 2: chamar o subalgoritmo Remover e eliminar o elemento na posição passada como parâmetro  Opção 3: chamar o subalgoritmo Imprimir para escrever na tela os valores que se encontram no algoritmo  Opção 4: chamar o subalgoritmo Substituir, que recebe por parâmetro um valor e uma posição. O subalgoritmo deve substituir o valor existente na posição informada pelo valor passado por parâmetro. Se ainda não houver elemento na posição informada, deve-se inserir o valor na próxima posição livre.  Opção 5: O programa deverá ser encerrado.

89 POR HOJE É SÓ !!!


Carregar ppt "Lógica de Programação Subalgoritmos"

Apresentações semelhantes


Anúncios Google