Baixe o app para aproveitar ainda mais
Prévia do material em texto
Docente: MSc. Graçane Muhate Página 1 de 8 UNIVERSIDADE SÃO TOMÁS DE MOÇAMBIQUE FACULDADE DE TECNOLOGIAS E CIÊNCIAS DE INFORMAÇÃO DEPARTAMENTO DE TECNOLOGIAS E SISTEMAS DE INFORMAÇÃO DE DESENVOLVIMENTO DE SOFTWARE DISCIPLINA: LÓGICA DE PROGRAMAÇÃO Aula 5: SUBPROGRAMAS: PROCEDIMENTOS & FUNÇÕES Conteúdo Definição de Conceitos O conceito de subprograma e sua aplicabilidade na construção de programas de computador. A estrutura de um subprograma. Procedimentos Procedimentos Estrutura e chamadas de procedimentos Exercícios práticos e laboratoriais Funções Funções − Estrutura, chamada e tipos de retorno de uma função. Variáveis globais e locais Parâmetros Mecanismos de passagem de parâmetros − Passagem de parâmetros por valor − Passagem de parâmetros por referência Exercícios Práticos e Laboratoriais Docente: MSc. Graçane Muhate Página 2 de 8 1. O CONCEITO DE SUBPROGRAMA (SURGIMENTO) 1.1. Problemas que levaram ao surgimento de Subprogramas • Os custos com as atividades de programação eram cada vez mais elevados; • A ausência de uma metodologia para a construção de programas conduz a elevados erros; • A programação estruturada é hoje o resultado de uma série de estudos e propostas de disciplinas e metodologias para o desenvolvimento de programas. • Conceitos associados como técnicas de refinamentos sucessivos e modularização. 1.2. Conceitos sobre subprogramas A decomposição de um problema é fator determinante para a redução da complexidade. Assim, quando um problema é decomposto em sub-problemas, divide-se a complexidade e, por consequência, simplifica-se a resolução. a) Critérios que orientam o processo de decomposição de um problema: • Dividir o problema em suas partes principais; • Analisar a divisão obtida para garantir coerência; • Se alguma parte ainda permanecer complexa, decompô-la também; • Analisar o resultado final para garantir entendimento e coerência. b) Objetivos de subprogramas Um recurso muito utilizado para se implementar a modularização de programas é o uso de subprogramas (ou subrotinas). Basicamente, os subprogramas têm três objetivos: • evitar que uma certa sequência de comandos necessária em vários locais de um algoritmo tenha que ser escrita repetidamente nestes locais; • Dividir e estruturar um algoritmo em partes fechadas e logicamente coerentes – modularização de programas; • Aumentar a legibilidade de um algoritmo. c) Definição de subprogramas Subprogramas são módulos hierarquicamente subordinados a um algoritmo, comumente chamado de módulo principal. Da mesma maneira, um subprograma pode conter outros subprogramas aninhados, como esquematizado no diagrama a seguir: Fig 1. Esquema de subprogramas Docente: MSc. Graçane Muhate Página 3 de 8 2. TIPOS DE SUBPROGRAMAS 2.1. PROCEDIMENTO(PROCEDURE) Um procedimento (procedure), também conhecido como sub-rotina, é um conjunto de instruções que realiza determinada tarefa. Um algoritmo de procedimento é criado da mesma maneira que outro algoritmo qualquer: deve ser identificado, possui variáveis, operações e até funções. Fig 2. Exemplo de estrutura de um procedimento em pseudocodigo a) Chamada de procedimentos A chamada de procedimento é o momento em que o procedimento é adicionado e seu código é executado, isto é, tarefa associada a ele é realizada pelo algoritmo principal. Todo procedimento deverá ter um nome e um corpo (conjunto de instruções) e deverá ser escrito no campo de declaração de variáveis, imediatamente abaixo destas. Fig 3. Chamada de procedimentos Todas as variáveis locais aos procedimentos são alocadas somente quando o procedimento entra em execução, mas são liberadas quando o procedimento termina, perdendo assim, seus conteúdos. Caso seja necessário o aproveitamento dos dados manipulados, o procedimento deverá utilizar as variáveis globais. Docente: MSc. Graçane Muhate Página 4 de 8 Escopo de Variáveis Variáveis Globais: São declaradas no algoritmo principal e podem ser utilizadas por todos os algoritmos hierarquicamente inferiores. Variáveis Locais: podem ser utilizadas pelo algoritmo em que foram declaradas e nos algoritmos hierarquicamente inferiores, conforme mostra o organograma apresentado a seguir: O programa principal é global a todos os procedimentos, e consequentemente, todos os procedimentos são internos ao programa principal. IMPORTANTE!!! Cada procedimento poderá utilizar suas próprias variáveis ou as variáveis mais globais a ele, mas nunca uma variável de um outro procedimento adjacente. O nível mais global em que uma variável possa ser utilizada é chamado ‘escopo da Variável’. Exercicio: Faça um programa que calcule as raízes de uma equação do 2° grau, usando procedimentos. Existem basicamente 3 tipos de relação entre procedimentos: global, interno e adjacente, da seguinte forma: 1) Um procedimento P1 é dito global a um procedimento P2, se P2 está dentro de P1. Neste caso, P2 é interno a P1. No exemplo temos: - A é global a D e E; 2) Um procedimento P1 é dito interno a um procedimento P2, se P1 está dentro de P2. Neste caso P2 é global a P1. No exemplo temos: - D e E são internos a A 3) Dois procedimento P1 e P2 são adjacentes, se P1 não é interno e nem global a P2, ou vice-versa. - D, E são adjacentes Docente: MSc. Graçane Muhate Página 5 de 8 2.2. FUNÇÕES Funções são rotinas similares aos procedimentos, só que retornam um valor após cada chamada. Uma função não deverá simplesmente ser chamada, como no caso dos procedimentos, mas deverá ser atribuída à alguma Variável. Uma função deve ter um nome e um tipo, e sua sintaxe é mostrada abaixo. O nome da função é quem deve assumir o valor da função, como se fosse uma variável. Assim como nos procedimentos, uma função deve ser definida dentro do espaço de declaração de variáveis do programa. Para que a função possa retornar um valor, este deverá ser explicitamente atribuído ao nome da função, dentro da rotina da função. Exmplo1: Algoritmo para a soma de dois números usando uma função Algoritmo "função para soma" Var t,n1,n2:inteiro // Seção de Declarações das variáveis funcao soma(a,b:inteiro):inteiro var s:inteiro inicio s:=a+b retorne s fimfuncao Inicio // Seção de Comandos, procedimento, funções, operadores, etc... leia(n1) leia(n2) escreva("O resultado da funcao e: ", soma(n1,n2)) Fimalgoritmo Docente: MSc. Graçane Muhate Página 6 de 8 Exemplo2: Algoritmo para atribuição de resultados de notas de estudantes utilizando procedimento e função: algoritmo "medias" var x ,y ,z:inteiro w :real funcao media :real var m: real inicio m<-(x+y+z)/3 retorne m fimfuncao procedimento q var inicio escreval("a média inserida à classificada como : ") se(w=0)e(w<=4)entao escreval ("A média é má ") senao se (w>4) e (w<10) entao escreval("A méda é medíocre ") senao se (w>=10)e(w<14)entao escreval ("A média é suficiente ") senao se (w>=14)e (w<18)entao escreval("A média é boa ") senao se (w>=18)e (w<=20)entao escreval("A média é muito boa ") fimse fimse fimse fimse fimse fimprocedimento inicio escreval (" Escreva a primeira nota :") leia (x) escreval (" Escreva a segunda nota :") leia (y) escreval (" Escreva a terceira nota :") leia (z) w:=media escreval("A média das suas notas é: " ,w) q fimalgoritmo Docente: MSc. Graçane Muhate Página 7 de 8 2.3. PROCEDURES E FUNÇÕES COM PASSAGEM DE PARÂMETROS As chamadas de procedimentos e Funções, consiste na definição dentro destes de um conjunto de variáveis internos como por exemplo SQRT(9) ou SQRT(x). Existem 2 (dois) tipos de passagem de parâmetros: por referência ou por valor. 2.3.1. Passagem por Referência: Os parâmetros devem ser declarados dentro de parênteses, conforme exemplos da declaração abaixo: Procedimento Leitura (a,b : Real; var c:Real) ; ou Funcao Soma (x: Real; var y:Real): Real ; Todas as modificações realizadas nos parâmetros dentro do corpo da função ou do procedimento serão repassados para as variáveis passadas durante a chamada. É como se o procedimento ou função estivessem usando as próprias variáveis que foram passadas como parâmetros. Para chamarmos o procedimento e a função acima, devemos escrever algo do tipo: Leitura (x1, x2, x3); ou s := Soma (f, g) ; IMPORTANTE!!! Tudo o que for feito com os parâmetros declarados será feito com os parâmetros de chamada, quando se usar passagem por referência. As variáveis declaradas se comportam como se fossem as próprias variáveis de chamada. Ex: Seja dado a seguinte função: Algoritmo "parametrosreferencia" Var t,n1,n2:inteiro // Seção de Declarações das variáveis funcao soma(a:inteiro; var b:inteiro):inteiro var s:inteiro inicio b:=6 s:=a+b retorne s fimfuncao Inicio // Seção de Comandos, procedimento, funções, operadores, etc... leia(n1) leia(n2) escreva("O resultado da funcao e: ", soma(n1,n2)) escreva(n2) Fimalgoritmo Docente: MSc. Graçane Muhate Página 8 de 8 2.3.2. Passagem por Valor: Os parâmetros devem ser declarados fora dos parênteses, e dentro do espaço de declaração de variáveis locais. A chamada dos procedimentos e das funções é feita da mesma forma que da passagem por referência. Neste caso, as alterações sofridas pelas variáveis declaradas não serão repassadas para as variáveis de chamada. Este tipo de passagem de parâmetros deve ser utilizado quando só interessa o valor do dado para o procedimento ou para a função. Utilizando o mesmo exemplo anterior, teríamos a seguinte declaração: Procedimento Leitura (a,b,c) ; Var a,b,c : Real ; ou Funcao Soma (x,y: Real): Real ; Analisando este exemplo, poderemos facilmente concluir que a função ‘Soma’ realmente não necessitava de parâmetros por referência, pois eles não eram de fatos alterados. Mas podemos também perceber que o procedimento ‘Leitura’ deve necessariamente utilizar parâmetros por referência, pois senão os dados lidos serão perdidos após o término do procedimento. Assim, concluímos que as formas corretas para declarar estes procedimentos seriam: Procedure Leitura (a,b,c : Real) ; e Funcao Soma (x,y: Real): Real ; IMPORTANTE!!! Podemos utilizar nos procedimentos e nas funções, uma mistura de parâmetros por referência e por valor, de acordo com as necessidades do programa. Ex: Seja dada a seguinte função: Algoritmo "parametrosreferencia" Var t,n1,n2:inteiro // Seção de Declarações das variáveis funcao soma(a,b :inteiro):inteiro var s:inteiro inicio b:=6 s:=a+b retorne s fimfuncao Inicio // Seção de Comandos, procedimento, funções, operadores, etc... leia(n1) leia(n2) escreva("O resultado da funcao e: ", soma(n1,n2)) escreva(n2) Fimalgoritmo
Compartilhar