• Nenhum resultado encontrado

Proc ediment os

No documento Apontamentos de Pascal (páginas 52-57)

A cria ção de um pr oced imento c ons iste em assoc iar um n ome a um conj unto de i nstruçõ es corresp ond entes ao proc ed imento. E m Pasca l um proced imento é cri a do atra vés de uma d ecl aração d e pr oced imento q ue tem duas partes: um cabeça lh o e um b lo co.

No cab eça lh o damo s um nome ao proc edime nto e def in imo s como el e comun ica com o pro g rama (o q ue é f eito atra vés da espe cif icaç ão do s parâmetros f ormais) ; no bl oco def in im os as e ntid ade s u sadas pe lo proced imento e a seq uênc ia de a cções a ser e xec utada pe lo proced imento. Sup o nhamos q ue d esej á vamos escre ver um pr oced imento para somar e su btrai r dois n úmeros:

procedure soma (x, y : real; var z, w : real);

soma e subtracção de dois números x e y begin

z : = x + y ; w : = x – y ; end ; soma

Depo is de d ef inid o um proce dime nto, a s i nstruçõ es q ue co nstituem o corpo de sse proc ed i mento são e xecutad as q uando o se u no me seg uido pel o n úmero aprop riad o d e arg ument os (par âmetros c o ncretos) é encontra do n um pro g rama, ou sej a q uando o proc ed imento é chamado.

Uti li zan do uma i nter pretação s impl if icad a da in strução de c hamada de um proce dime nto p odemos di zer q ue ao e ncontrar esta i nstrução o computad or a subst itu i pel as in struçõe s q ue constituem o corpo do proced imento, s ubst itu indo os p arâmetros f ormais pe los p arâmetros concretos. Co ns ider emos q ue q uer íamo s escre ver um prog rama para somar e subtrair do is números se p el o menos um deles f or neg ati vo; aprese ntamos o alg oritmo corresp ond en te e o respecti vo pr og rama q ue uti li za o proc ed iment o soma:

Obj ecti vo: soma e s u btracção d e do is nú meros x e y s e pe lo menos um f or neg ativo;

var iá ve is dad os: a, b , reais , números d a dos; var iá ve is resu ltad os: c, d ,reais , soma e produto; escreva (“es cre va doi s números a e b ”);

leia (a, b);

se (a < 0) ou (b < 0) então c ← a + b;

d ← a – b;

escreva (“a soma de a com b é “ , c, “ e a dif erença é “ , d ) senão

escreva (“ o s no s são amb os pos i ti vos “);

No prog rama da pág ina seg u inte, corres pond ente ao a lg orit mo anter ior, se um dos do is n úmeros l idos f or ne g ativo o pro ced ime nto soma é chamado para ca lcu lar a soma e a s ub tracção d os d oi s nú meros; Os parâmetros f ormais x e y rec ebe m os va l ores do s parâmetros concretos a e b e as operaçõ es são e f ectuadas, sendo os resultad os transmiti dos a o prog rama pel os parâmetr os f ormais z e w.

Program seleccao;

este programa soma e subtrai dois números dados se algum deles for negativo var a, b, c, d : real;

procedure soma (x, y : real ; var z, w : real);

soma e subtracção de dois números x e y begin

z : = x + y ; w : = x – y ; end ; soma

begin

writeln (‘escreva dois números a e b ‘); readln (a, b);

if (a < 0) or (b < 0) then begin

soma (a, b, c, d);

writeln (‘ a soma de a com b é ’ , c, ‘ e a diferença é ’ , d ); end

else

writeln (‘ os nos são ambos positivos ’) end. { program selecção }

Neste prog rama os parâmetros f ormai s z e w são antec edi dos pe la pal a vra “ var”. Como prime ira apro ximaç ã o podemo s cons id er ar q ue eles represent am os val o res q ue o procedim ento va i modif icar n o prog rama q ue o ch amou; as variá vei s corre spon d entes aos parâmetro s concr etos c e d, vã o rece ber os va lores q ue os p arâmetros f ormais z e w t inh am dentro d o pr oced i mento q uand o ter mina a e xecuç ão do cor po d o proced imento.

Os parâmetros f ormais x e y n ão são a nteced id os pe la pa l avr a “var”, e conseq ue ntemente não po dem mod if icar os parâmetros concretos correspo nde ntes a e b, sendo a ú nic a l ig ação e ntre eles uma assoc iaç ão un id irec c ion al d e va lores.

5.2 Fun çõe s

As l ing uag ens de alto n íve l f ornecem aos seus prog ramadores um conj unto de f unções predef ini das (f unções intr ínse cas) q ue podem ser uti li zada s em q ua lq u er prog rama. N o e nt anto estas l ing uag en s permit em q ue o prog ramador crie as s uas pr ópri as f unções e as ut i li ze no s eu prog rama. A util i zação de f unções def inidas p el o prog ramador compreen de dua s fases d isti ntas: a def iniçã o da f unção q ue é f eita f ornecendo um pro cesso de cá lcu lo para val ores da f unção e a

ref erência ao va lor da f unção para u m val or, ou va lor e s dos se us arg umentos.

Em Pas ca l uma f unç ão é def in ida atra vé s de uma d ecl araçã o de f unçã o q ue cons iste n um cabeç al ho seg u ido por um b loco; o ca beça lho da f unção def ine o n ome da f unção, o número e o tip o dos seus arg umentos (dom íni o da f unção) e o t i po dos s eus va l ores (ou sej a o contradom ín io d a f unção). No blo co def inem-se as constante s, dec laram-se as vari áve is ut i li zada s p el a f unção e a prese ntam-se a s instruç ões q ue c alc ul am o va lor da f unção. O bloc o tem necess ari amente d e conter pe lo menos uma in strução de at ribu içã o da f orma

<nome> : = <expre s são>

em q ue o s ímbo lo n ome é o id entif ica do r q ue aparece no c a beça lho da f unção imed iatament e a seg uir à pa la vra f unction o u sej a é o nome da f unção, e a e xpress ã o é do ti po def in ido para a f unção.

Cons id eramos a f unção q ue ca lcu la o f actoria l de um n úmero n: function factorial ( n : integer) : integer ;

esta função calcula o factorial de n var f, i : integer; begin f : = 1; if n > 1 then for i : = 1 to n do f : = f * i; factorial : = f ; end ; factorial

Na f unção f actoria l a var iá ve l f é d o ti p o def in ido para a f unção, uma var iá ve l int eira.

Num prog rama em que uma f unção f oi d ef inida, o s eu va lor é cal cu lado sempre q ue numa express ão apar ece o nome de f unção seg uido d o número a propr iad o de arg umentos ( os parâmetros concr e tos). Deste modo a f unção é ch amada e ta l c omo n o caso dos pr oced i mentos, os parâmetros concr etos são assoc ia dos aos parâmetros f ormais, e as instruç ões d o corp o da f unção sã o e xecutad as; o va lor a tribu ído ao ide ntif icad or q ue rep resenta o nome d a função é co nsi dera do o val or da f unção e é retornad o para o prog rama q ue contin ua. Co nsi deremos um

alg oritmo para ca l cul ar o f actoria l d e n números e o respe cti vo prog rama q ue util i za a f unção f actorial:

Obj ecti vo: ca lcu lar o f actorial de n n úmer os;

Vari á ve is da dos: n, i nteiro, q uant ida de d e números; numero, inte iro , númer os dad os; Vari á ve is res ulta dos : xf act , inteiro, f actoria l; Vari á ve is au xi l iares: i, j ,inteiro s, contad ores; escreva (“ escre va n”);

leia ( n) ;

para i ← 1 até n f aça

escreva (“escre va um númer o”); lei a( nu mero) ;

se numero < 0 então

escre va(“erro - o núme ro é neg ati vo “) senão

xf act ← 1;

if numero > 1 then

para i ← 1 até n ume ro f aça xf act ← xf act * i;

escreva ( “O f actorial do número “, numero,” é ig ual a”, xf act );

No a lg oritmo a nteri o r calc ul a-se o f actori al d e ca da n úmero l i do q ue nã o sej a neg ati vo.

No prog rama corres pond ente ao alg orit mo anterior, q ue se aprese nta na pág ina s eg uinte, em cada pa ssag em pe l o cic lo s e o número li do n ão f or neg ati vo é ch amad a a f unção f actori a l p ara ca lc ul ar o f actoria l do número l ido; o val or da f unção é atri bu íd o à var iá ve l xf act q ue é do tip o def inid o p ara a f unç ão o u sej a d o ti po i nteiro. Como vemos a c hamad a de uma f unçã o d e ntro de um prog ra ma (ou su bprog ra ma) é f eita uti li zand o uma i nstr ução de atri bu ição, e nã o d a mesma f orma como s e ef ectua a chamada d e um proced imento.

Program Fact;

{Este programa calcula o factorial de n números} var n, i, numero : integer ;

xfact : integer ;

function factorial ( k : integer) : integer ;

esta função calcula o factorial de k var f, i : integer; begin f : = 1; if k > 1 then for i : = 1 to k do f : = f * i; factorial : = f ; end ; factorial begin writeln (‘ escreva n ’); readln ( n) ; for i : = 1 to n do begin

writeln (‘ escreva um número para calcular o factorial’); readln( numero) ;

if numero < 0 then

writeln (‘ erro - o número é negativo ‘) else

begin

xfact : = factorial ( numero) ;

writeln( ‘ O factorial do número ‘ , numero, ‘ é igual a ‘ ,xfact ) ;

end;

end ;

end. {program Fact }

No documento Apontamentos de Pascal (páginas 52-57)

Documentos relacionados