Você está na página 1de 7

CENTRO UNIVERSITRIO DO LESTE DE MINAS GERAIS

CURSOS DE ENGENHARIA
DISCIPLINA: Fundamentos da Computao II
PROFESSORES: Ncleo de professores de Informtica
MATERIAL DE APOIO Parte 4
Material de Apoio Parte 4 Programa!o Mod"lari#ada
$% O&'eti(o)* Compreender os princpios da programao modularizada. Utilizar funes
e procedimentos com passagem de parmetro por valor.
+% Li(ro te,to* ASCEN!" A. #.$." CA%&!S" E.A.'. -".dame.to) da Programa!o
de Comp"tadore) /Algoritmo)0 Pa)1al e C2C33%4 So &aulo( &rentice )all" *++*.
5% -".dame.ta!o Te6ri1a ,-efer.ncia para consulta e estudos( Captulo / do livro te0to.1
$4 Mod"lari#a!o de programa)
A modularizao consiste em um m2todo utilizado para facilitar a construo de grandes programas" atrav2s
de sua diviso em pe3uenas etapas" 3ue so os mdulos ou subprogramas. A primeira delas" por onde comea a
e0ecuo do tra4al5o" rece4e o nome de programa principal" e as outras so os subprogramas propriamente
ditos" 3ue so e0ecutados sempre 3ue ocorre uma c5amada dos mesmos" o 3ue 2 feito atrav2s da especificao de
seus nomes.
'antagens da utilizao de su4programas(
Economia de c6digo( escreve7se menos8
9esenvolvimento modularizado( pensa7se no algoritmo por partes8
#acilidade de depurao ,correo:acompan5amento1( 2 mais f;cil corrigir:detectar um erro apenas
uma vez do 3ue v;rias vezes8
#acilidade de alterao do c6digo( se 2 preciso alterar" altera7se apenas uma vez8
$eneralidade de c6digo com o uso de parmetros( escreve7se algoritmos para situaes gen2ricas.
); duas esp2cies de su4programas( PROCEDIMENTO e -UN78O.
$4$4 PROCEDIMENTO
Um su4programa do tipo &-!CE9%EN<! 2" na realidade" um programa com vida pr6pria" mas 3ue" para
ser processado" tem 3ue ser solicitado pelo programa principal 3ue o cont2m" ou por outro su4programa" ou por
ele mesmo.
De1lara!o*
PROCEDURE nome; { onde: nome o identificador associado ao procedimento.}
var declarao das variveis locais ao Procedimento
!E"#$
comandos do Procedimento
E$D;
E,emplo 9$*
! programa a4ai0o calcula a m2dia aritm2tica entre * notas" sem o uso de procedimentos.
Program C%&CU&%'(ED#%; {sem o )so de procedimentos}
Var $O*%+,$O*%-,(ED#% : real;
begin
write./Di0ite a primeira nota: /1;
readln.$O*%+1;
write./Di0ite a se0)nda nota: /1;
readln.$O*%-1;
(ED#% :2 .$O*%+ 3 $O*%-1 4 -;
writeln./(edia 2 /, (ED#%:5:-1
end.
%ostraremos agora o mesmo programa" utilizando um procedimento.
Program C%&CU&%'(ED#%;
var $O*%+,$O*%-,(ED#% : real;
{Declarao do Procedimento}
procedure &ER'$O*%6;
begin
write./Di0ite a primeira nota: /1;
readln.$O*%+1;
write./Di0ite a se0)nda nota: /1;
readln.$O*%-1;
end;
{Pro0rama Principal}
begin
LER_NOTAS; {chamada ao procedimento &ER'$O*%6}
(ED#% :2 .$O*%+ 3 $O*%-1 4 -;
Writeln./(edia 2 /, (ED#%:7:+1;
end
E,emplo 9+*
= program salario8
* var sal" novo>sal" perc( real8
5 pro1ed"re calculo8
? &egi.
@ novo>sal (A sal B perc : =++ C sal8
D e.d:
; pro1ed"re ler>dados8
/ &egi.
E Frite,Gnforme o sal;rio G18
=+ read ,sal18
== Frite ,Gnforme o percentual G18
=* read ,perc18
=H e.d:
=? &egi.
=@ ler>dados8
=D calculo8
=I Frite ,G! novo sal;rio 2 G" novo>sal(+(*18
=/ e.d4
! programa apresentado tem como o4Jetivo geral rece4er o valor do sal;rio de um funcion;rio e calcular o
novo sal;rio.
&ara resolver este pro4lema foram utilizados dois procedimentos( um para leitura de dados ,lin5as I a
=H1 e outro para calcular o novo sal;rio ,lin5as H a D1
Ap6s a declarao das vari;veis e dos procedimentos" o algoritmo principal 2 e0ecutado linearmente a
partir da lin5a =?.
Na lin5a =@ e0iste uma c5amada ao procedimento ler<dado). Ao c5amar o procedimento" o programa
principal fica temporariamente suspenso. A ordem de e0ecuo das instrues 2" ento" desviada para a
lin5a I" onde comea o procedimento ler<dado)4
A e0ecuo s6 volta ao programa principal 3uando todas as instrues 3ue esto dentro do procedimento
terminam de ser e0ecutadas.
A e0ecuo do programa principal 2 retornada e0atamente no ponto em 3ue foi interrompida. A partir
da" o programa volta a ser e0ecutado linearmente. Sendo 3ue" a pr60ima instruo ,lin5a =D1 2 outra
c5amada a um procedimento. 9esta vez" o procedimento Cal1"lo. Ao c5amar o procedimento" o
programa principal fica novamente temporariamente suspenso. A ordem de e0ecuo das instrues 2"
ento" desviada para a lin5a H" onde comea o procedimento calculo. A findar a e0ecuo deste
procedimento" a e0ecuo volta novamente ao programa principal e e0ecuta as lin5as =I e =/.
2
E,er1=1io)*
=. Escreva um procedimento 3ue" ap6s a leitura dos dados" realizada por um procedimento com o o4Jetivo de
ler os valores para uma string S e valor para um nKmero inteiro positivo N" e0i4a a string S por N vezes
seguidas na tela. Crie tam42m o programa principal.
*. Escreva um procedimento c5amado SNAL 3ue" ap6s a leitura de um valor inteiro positivo" realizada por
um outro procedimento" escreva a palavra &!S<'! se N for um nKmero maior 3ue zero" NE$A<'! se
N for menor 3ue zero" ou ME-! se N for igual a zero. Crie tam42m o programa principal.
$4+4 -UN78O
As funes" em4ora 4astante semel5antes aos procedimentos" t.m a caracterstica especial de retornar ao
programa 3ue as c5amou um valor associado ao nome da funo. Esta caracterstica permite uma analogia com o
conceito de funo da %atem;tica.
De1lara!o*
!"N#T$ON nome : tipo; { onde: nome o identificador associado 8 f)no e tipo
o tipo da f)no, o) se9a, o tipo do valor de retorno. }
var declarao das variveis locais 8 :)no
%E&$N
Comandos da :)no
EN';
E,emplo 9$*
Program C%&CU&%'(ED#%;
var $O*%+,$O*%-,(ED#% : real;
{Declarao do Procedimento}
procedure &ER'$O*%6;
begin
write./Di0ite a primeira nota: /1;
readln.$O*%+1;
write./Di0ite a se0)nda nota: /1;
readln.$O*%-1;
end;
(unction calc)la: real;
begin
calc)la:2 .$O*%+ 3 $O*%-1 4 -;
end;
{Pro0rama Principal}
begin
LER_NOTAS; {chamada ao procedimento &ER'$O*%6}
(ED#% :2 #alcula; {a varivel (ED#% est rece;endo o valor retornado pela
f)no #alcula}
Writeln./(edia 2 /, (ED#%::5:-1;
end
3
E,emplo 9+*
= program salario8
* var sal" perc( real8
5 pro1ed"re calculo( real8
? &egi.
@ calculo (A sal B perc : =++ C sal8
D e.d:
; pro1ed"re ler>dados8
/ &egi.
E Frite,Gnforme o sal;rio G18
=+ read ,sal18
== Frite ,Gnforme o percentual G18
=* read ,perc18
=H e.d:
=? &egi.
=@ ler<dado)8
=D Frite ,G! novo sal;rio 2 G" 1al1"lo(+(*18 NCalculo retorna o valor calculado dentro da funoO
=I e.d4
E,er1=1io)
H. Construir um programa 3ue leia a 4ase e a altura de um tringulo ,utilizando procedimento1" e calcule a
;rea deste tringulo ,utilizando funo1. %ostrar o resultado na tela.
?. Construir um programa 3ue leia um valor inteiro N ,utilizando procedimento1 e calcule o cu4o deste valor
,utilizando funo1. %ostre o resultado.
$454 E)1opo de Vari>(ei)
P; foi dada uma introduo ao escopo de vari;veis. ! escopo 2 o conJunto de regras 3ue determinam o uso e a
validade de vari;veis nas diversas partes do programa.
Vari>(ei) lo1ai)
'ari;veis locais so a3uelas 3ue s6 t.m validade dentro do m6dulo ,procedimento ou funo1 no 3ual so
declaradas. Assim como no algoritmo ou no programa principal" a declarao de vari;veis ,no caso dos m6dulos"
vari;veis locais1 2 a primeira coisa 3ue devemos colocar num m6dulo. A caracterstica 3ue torna as vari;veis
locais to importantes 2 Justamente a de serem e0clusivas do m6dulo.
E,emplo*
Program #mprime6trin0;
)ar $: integer;
6: *tring;
procedure ler_dado*;
begin
<rite.=#nforme )m nome >1;
read.61;
<rite .=#nforme ?)antas ve@es >, 6, = dever aparecer na tela >1;
read.$1;
end;
procedure imprime;
var i: inte0er;
begin
for i:2 + to $ do
<riteln.61;
end;
begin
ler_dado*;
4
imprime;
end;
Neste e0emplo" a vari;vel i foi declarada dentro do procedimento imprime" logo esta vari;vel 2 local a este
procedimento" ou seJa" ela s6 2 Q(i)=(elR nesta funo. ! programa pri.1ipal e o procedimento ler<dado) no
Qen0ergamR esta vari;vel.
Vari>(ei) glo&ai)
As vari;veis glo4ais so declaradas fora de todos os m6dulos do programa. Elas so con5ecidas e podem ser
alteradas e utilizadas por todos os m6dulos do programa.
'isualizando o mesmo programa utilizado para e0emplificar a utilizao de vari;veis locais" podemos
constatar 3ue as vari;veis S e N so glo4ais" ou seJa" elas so visveis e so utilizadas pelo programa principal e
por todos os m6dulos do programa.
!4s.( Suando uma funo tem uma vari;vel local com o mesmo nome de uma vari;vel glo4al a funo dar;
prefer.ncia T vari;vel local.
Importa.te( Evite ao m;0imo o uso de vari;veis glo4ais. Elas ocupam mem6ria o tempo todo ,as locais s6
ocupam mem6ria en3uanto esto sendo usadas1 e tornam o programa mais difcil de ser entendido.
Par?metro) @ormai)
! terceiro tipo de escopo de vari;vel 3ue veremos so os parmetros formais. Estes so declarados como
sendo as entradas de uma funo ou procedimento. ! parmetro formal 2 uma vari;vel local da funo.
E,emplo*
Program #mprime6trin0;
)ar $: integer;
6: *tring;
procedure ler_dado*;
begin
<rite.=#nforme )m nome >1;
read.61;
<rite .=#nforme ?)antas ve@es >, 6, = dever aparecer na tela >1;
read.$1;
end;
procedure imprime.strin0 P, inte0er A1;
var i: inte0er;
begin
for i:2 + to A do
<riteln.P1;
end;
begin
ler_dado*;
imprime+S, N-;
end;
9izemos 3ue o procedimento imprime tem dois argumentos P e A" estes so valores 3ue o procedimento est;
rece4endo. !4serve 3ue" dentro do procedimento imprime ele manipulou estes dois argumentos" 3ue agora so
vari;veis locais do procedimento imprime. U importante o4servar tam42m 3ue 3uando c5amamos o
procedimento imprime QpassamosR dois parmetros S e N 3ue esto e sempre devero estar na ordem 3ue so
Qrece4idosR no procedimento ou funo.
E,er1=1io)*
@. -astreie os c6digos de programas a4ai0o e mostre 3uais sero os valores impressos em cada um deles
Pro0ram Escopo;
var n)m, first, sec: real;
f)nction f)nc.a, ;: real1: real;
;e0in
a :2 .a 3 ;14-;
5
n)m :2 n)m B a;
f)nc:2 a;
end;
!e0in
first :2 5;
sec :2 C5;
n)m :2 +5;
n)m :2 n)m 3 f)nc.first, sec1;
<rite.=ConfiraD n)m 2 >,n)m, =:irst 2 > ,first, =sec2 >, sec1;
end.
Pro0ram Escopo-;
var E, F: inte0er;
f)nction f: inte0er;
;e0in
f:2E 3 F ;
end;
proced)re p+;
var F: inte0er;
;e0in
E :2 G;
F :2 H;
<rite. f 1;
end;
proced)re p-;
var E: inte0er;
;e0in
E :2 C ;
F :2 7 ;
p+ ;
end;
!e0in
E :2 + ;
F :2 - ;
p+;
p-;
end.
Pro0ram escopoG;
var F, @: inte0er;
f)nction soma'F.E: inte0er1: inte0er;
;e0in
soma'F:2 E 3 F;
end;
f)nction soma'FF.E: inte0er1: inte0er;
;e0in
F :2 G55;
soma'FF :2 E 3 F;
end;
!e0in
F :2 +55;
@ :2 5;
<riteln .soma'F.@11;
<riteln.soma'FF.@11;
<riteln.soma'F.@11;
end.
4% E,er1=1io)
D. Construir um programa 3ue ten5a uma funo 3ue calcule o cu4o de um nKmero inteiro 3ual3uer de forma
3ue esta possa ser usada para resolver os seguintes c;lculos 3ue sero feitos no algoritmo principal
a1 ! volume de uma esfera( ?:H -
H
41 E a e3uao( 0
H
C V
H
C *
6
I. Construir um programa para cada caso" utilizando funes e reduzindo ao m;0imo o uso de vari;veis
glo4ais(
a1 Solicitar ao usu;rio um nKmero e e0i4ir o seu cu4o. #uno deve rece4er o nKmero e retornar o cu4o
correspondente.
41 Solicitar ao usu;rio a idade ,em anos 1 e e0i4ir o nKmero de dias vividos at2 o Kltimo anivers;rio.
#uno deve rece4er a idade e retornar o nKmero de dias vividos.
/. Escreva uma funo c5amada &!<ENCA 3ue rece4a duas vari;veis inteiras W e X e retorne W elevado a
X.
E. Escreva um procedimento c5amado <-!CA 3ue rece4a * vari;veis inteiras ,W e X1 e tro3ue o conteKdo
entre elas8
=+. Escreva um programa 3ue leia um vetor A de H+ elementos reais e" usando o procedimento %E<A9E"
divida todos seus elementos pela metade.
==. Escreva uma funo c5amada %E9A 3ue retorne a m2dia de H valores reais ,W" X e M1 passados como
parmetros.
12. Escreva um procedimento c5amado AU%EN<! 3ue rece4a dois valores reais W e X como parmetros e
aumente o valor de W em XY.
7