Você está na página 1de 11

FACULDADE DE CIÊNCIAS

Departamento de Matemática e Informática

Modularização:
Subprogramas

Disciplina: Introdução à Informática

Docentes: João Metambo

António Tembe

Monitor: Samuel Uamba

Maputo, Outubro de 2022


Subprogramas
• A modularização consiste num método utilizado para facilitar a construção de
grandes programas, através de sua divisão em pequenas etapas, que são os módulos
ou subprogramas. A primeira delas, por onde começa a execução do trabalho, recebe
o nome de programa principal, e as outras são os subprogramas propriamente ditos,
que são executados sempre que ocorre uma chamada dos mesmos, o que é feito
através da especificação de seus nomes.
• Os subprogramas destinam-se principalmente a:
 Subdividir de algoritmos complexos, facilitando o seu entendimento;
 Estruturar algoritmos, facilitando principalmente a detecção de erros e a
documentação de sistemas; e
 Ajudar na modularização de sistemas, que facilita a manutenção do sistema e a
reutilização de sub-rotinas já implementadas.

• Em pascal, os subprogramas podem assumir duas formas principais:

 “procedures” ou procedimentos;

 “functions” ou funções.

1
Procedimentos
• É um programa com vida própria, mas que, para ser processado, tem que ser
solicitado pelo programa principal que o contém, ou por outro subprograma, ou
por ele mesmo.
• Declaração:

Na área de declarações, tal como no


programa, podemos ter as seguintes
sub-áreas: Label - Const - Type - Var -
Procedures - Functions.

• Exemplo:
Programa em PASCAL para calculo da média aritmética entre duas notas.
a) Sem o uso de procedimentos;
b) Utilizando um procedimento.

2
Procedimentos
• Exemplos: Programa em PASCAL para calculo da média aritmética entre duas notas.

Sem o uso de procedimentos Utilizando um procedimento

PROGRAM CALCULA_MEDIA; PROGRAM CALCULA_MEDIA;


VAR VAR
NOTA1, NOTA2, MEDIA : real; NOTA1, NOTA2, MEDIA : real;
{declaração do procedimento}
BEGIN PROCEDURE LER_NOTAS;
{lê as notas} BEGIN
WRITE('Digite a primeira nota: '); WRITE('Digite a primeira nota: ');
READLN (NOTA1); READLN(NOTA1);
WRITE('Digite a segunda nota: ');
WRITE('Digite a segunda nota: ');
READLN(NOTA2);
READLN (NOTA2);
END;
{calcula a media} {Programa Principal}
MEDIA := (NOTA1 + NOTA2) / 2; BEGIN
{escreve o resultado} LER_NOTAS; {ativação do procedimento}
WRITELN('Media = ',MEDIA:4:1) MEDIA := (NOTA1 + NOTA2) / 2;
END. WRITELN('Media = ',MEDIA:4:1)
END. 3
Funções
• As funçöes säo muito parecidas com as procedures. A principal diferença é que o
identificador de uma função assume o valor de retorno da função. Uma funçäo
deve sempre retornar um valor. Integer, String, Real, etc.
• Declaração:

Na área de declarações, tal como no programa,


podemos ter as seguintes sub-áreas: Label -
Const - Type - Var - Procedures -
Functions.

• Exemplo:
Programa em PASCAL para calculo da média dos elementos de um vector.
Nota: utilize um procedimento para ler os valores do vector e uma função para
efectuar o cálculo da média.

4
Funções
2
• Exemplos:
PROGRAM SOMA_VETOR; {Programa Principal}
CONST N = 30; BEGIN
VAR {ativa o procedimento LER_DADOS}
VETOR : ARRAY[1..N] OF integer; LER_DADOS;
{declaração do procedimento} {escreve o resultado, chamando a função MEDIA}
PROCEDURE LER_DADOS; WRITELN (MEDIA);
VAR I : integer; READKEY
BEGIN END.
FOR I:=1 TO N DO
As principais diferenças entre Procedimentos e Funções
READLN(VETOR[I]);
END; são:
{declaração da função}  Uma função sempre devolverá um resultado.
FUNCTION MEDIA : integer;  Um procedimento é usado como um comando qualquer.
VAR I,SOMA : integer;
BEGIN  Uma função sempre fará parte de um comando ou de uma
expressão.
SOMA := 0;
FOR I:=1 TO N DO  As funções retornam um, e somente um, valor ao
SOMA := SOMA + VETOR[I]; algoritmo chamador enquanto os procedimentos retornam
MEDIA := SOMA DIV N; zero (nenhum) ou mais valores ao algoritmo chamador.
END; 1 5
Variáveis Globais e Variáveis Locais
• Variáveis Globais
Uma variável é considerada global quando é declarada no início de um programa,
podendo ser utilizada por qualquer procedimento ou função. Assim sendo, este tipo de
variável passa a ser visível a todas as funções ou procedimentos.
• Exemplo:
PROGRAM Exemplo;
Uses CRT;
VAR x, y : Real; (* variáveis globais *)

• Variáveis Locais
são aquelas definidas dentro de um subprograma e, portanto, somente visíveis
(utilizáveis) dentro do mesmo. Outros subprogramas, ou mesmo o algoritmo principal,
não podem utilizá-las.
• Exemplo:
FUNCTION MEDIA : integer;
VAR I, SOMA : integer; (* variáveis locais *)
6
BEGIN
Parâmetros
• A passagem de parâmetros é feita com base no número e tipo de parâmetros
declarados; isto significa que os parâmetros devem:
 Ser declarados como variáveis;
 Na chamada (execução da procedure ou function) os parâmetros podem ser
números inteiros “constantes” ou duas variáveis inteiras, obviamente desde que
haja compatibilidade entre os parâmetros passados.
• A passagem de parâmetros pode ser feita de duas formas: passagem por valor
e passagem por referência.
PROCEDURE nome (lista de parâmetros)
FUNCTION nome (lista de parâmetros) : tipo

• Passagem de parâmetros por Valor


A passagem por valor passa para o subprograma apenas o valor; isto significa que as
alterações feitas nos parâmetros (varáveis) no subprograma não alteram os valores no
programa principal (chamador).
• Exemplo: PROCEDURE PROC (X, Y, Z:integer; K:real)
FUNCTION FUNC (A, B:real; C:string) : integer
7
Parâmetros
• Passagem de parâmetros por Referência
A passagem por referência passa para o subprograma o endereço do parâmetro real;
isto significa que todas as alterações feitas sobre o parâmetros (varáveis) no
subprograma serão reflectidos sobre as variáveis correspondentes no programa
principal (chamador).
Para se utilizar a passagem por referência, deve-se acrescentar a palavra VAR antes do
nome do parâmetro e esse parâmetro obrigatoriamente deve ser uma variável.
• Exemplo: PROCEDURE PROC (X, Y, Z:integer; VAR K:real)
FUNCTION FUNC (VAR A, B:real; C:string) : integer
Exemplo da diferença entre a passagem de parâmetros por referência e a passagem por valor:
PROGRAM EXEMPLO_PASSAGEM_PARÂMETROS;
VAR N1, N2 : integer; 2
PROCEDURE PROC(X: integer; VAR Y:integer); BEGIN
BEGIN N1:=0; N2:=0;
X:= X + 1; WRITELN (N1, ',',N2); {será exibido 0,0 }
Y:= Y + 1; PROC(N1,N2); {será exibido 1,1 }
WRITELN (X, ',',Y); WRITELN (N1); {será exibido o valor 0}
1 WRITELN (N2); (será exibido o valor 1}
END; END. 8
Exemplo - Subprogramas:
1. Escrever uma função chamada MAIOR que receba dois números inteiros e retorne o
maior deles. Escrever um programa para ler dois números inteiros e, utilizando a função
MAIOR, calcular e exibir o maior valor entre os números lidos.
2. Escrever um procedimento chamado DOBRA que multiplique um número inteiro
(recebido como parâmetro) por 2. Escrever um programa para ler um valor inteiro e ,
utilizando o procedimento DOBRA, calcular e exibir o dobro do mesmo.
Exemplo 1: Exemplo 2:
PROGRAM CALCULA_MAIOR; PROGRAM CALCULA_DOBRO;
VAR X,Y,M : integer; VAR X : integer;
FUNCTION MAIOR (N1,N2:integer) : integer; PROCEDURE DOBRA (VAR N:integer);
BEGIN BEGIN
IF N1 > N2 THEN N := N * 2
MAIOR := N1 END;
ELSE BEGIN
MAIOR := N2; READLN(X);
END; DOBRA(X);
BEGIN WRITELN(X);
READLN(X,Y); END.
M := MAIOR(X,Y);
WRITELN(M);
9
END.
Aqui ou em outro mundo, todas as suas acções terão consequências e toda justiça será feita.

O fracasso é uma óptima oportunidade para começar de novo de forma mais inteligente.

Um ladrão rouba um tesouro, mas não furta a inteligência. Uma crise destrói uma herança, mas
não uma profissão. Não importa se você não tem dinheiro, você é uma pessoa rica, pois possui o
maior de todos os capitais: a sua inteligência. Invista nela. Estude!

Se não houver frutos, valeu a beleza das flores; se não houver flores, valeu a sombra das folhas; se
não houver folhas, valeu a intenção da semente.

10

Você também pode gostar