Sum´
ario
1 L´ogica 2
1.1 M´etodo heur´ıstico . . . 3 1.2 Aplica¸c˜ao do m´etodo: somat´orio e produt´orio . . . 5
2 Pr´atica de programa¸c˜ao 8
2.1 Regras da boa programa¸c˜ao . . . 8 2.2 Documenta¸c˜ao externa . . . 10
3 Pseudoc´odigo 13
M ´odulo
1
L´
ogica
Todos estamos habituados a organizar nossas tarefas di´arias segundo uma lista de coisas “para fazer”. Esta lista di´aria pode ser ordenada na forma de prioridades ou em uma ordem que fa¸ca sentido para o indiv´ıduo. O que se deseja ´e que, no final do dia, tudo tenha sido cumprido. Tamb´em ´e normal, na rotina de um trabalho ou estudo, deparar-se com tarefas que devem deparar-ser cumpridas, `as vezes numa mesma ordem, as vezes numa ordem diferente. Algumas rotinas permitem essa flexibilidade, outras n˜ao. Tˆem tarefas que podem ser realizadas simultaneamente, outras n˜ao.
Conforme o indiv´ıduo amadurece e adquire experiˆencia, percebe que algumas tarefas devem ser executadas numa determinada ordem para que as mesmas sejam conclu´ıdas satisfatoriamente. A experiˆencia ´e um instrumento muito valioso neste processo. Na ausˆencia de experiˆencia, devemos agir com sabedoria. O conhecimento, por vezes o ci-ent´ıfico, se faz valer nestes momentos.
A l´ogica ´e o estudo formal sistem´atico dos princ´ıpios da inferˆencia v´alida e do pensa-mento correto. J´a que o pensamento ´e a manifesta¸c˜ao do conhecimento, e que o conhe-cimento busca estabelecer a verdade, ´e preciso a ado¸c˜ao de algumas regras para que essa meta possa ser atingida. Assim, a l´ogica ´e o ramo da filosofia que cuida das regras do bem pensar, ou do pensar correto, sendo, portanto, um instrumento do pensar. Mas a aprendizagem da l´ogica n˜ao constitui um fim em si.
A l´ogica s´o tem sentido enquanto meio de garantir que nosso pensamento proceda corretamente a fim de chegar a conhecimentos verdadeiros. Podemos, ent˜ao, dizer que a l´ogica trata dos argumentos e, consequentemente, das conclus˜oes a que chegamos atrav´es da apresenta¸c˜ao de evidˆencias que a sustentam.
Mas qual m´etodo adotar? O desenvolvimento de algoritmos ´e tradicionalmente apre-sentado como l´ogica de programa¸c˜ao. Esta l´ogica possui caracter´ıstica do m´etodo dedutivo que parte de premissas assumidas como verdadeiras e que, a partir de um racioc´ınio l´ogico dedutivo, ´e capaz de gerar uma conclus˜ao v´alida, assumindo que o processo dedutivo ´e v´alido.
Entretanto, a estrutura formal do m´etodo dedutivo engessa em parte o processo de livre cria¸c˜ao se o indiv´ıduo n˜ao est´a familiarizado com a l´ogica dedutiva. Precede o processo de programa¸c˜ao o processo de cria¸c˜ao que, entre outros elementos, visa estabelecer as estrat´egias a serem usadas na elabora¸c˜ao da solu¸c˜ao do problema.
O contexto da cria¸c˜ao, a gˆenese, ´e o da elabora¸c˜ao mental, muitas vezes n˜ao-linear, mas que, com a experimenta¸c˜ao e a reflex˜ao, cria vieses mais definidos. Por vezes, o processo criativo conduz o desenvolvedor “`a estaca zero” de onde ele parte novamente em busca de
revelar ao desenvolvedor mecanismos e estrat´egias que organizam seu processo de gˆenese sem esgotar sua capacidade inventiva.
1.1
M´
etodo heur´ıstico
Segundo Polya1 apud Rosa e Orey2, a heur´ıstica pode ser compreendida como um
conjunto de regras e m´etodos que conduzem `a descoberta e `a inven¸c˜ao e que s˜ao utilizados na resolu¸c˜ao de problemas. Tem por objetivo compreender as opera¸c˜oes mentais pr´oprias deste processo que se mostrem ´uteis.
Na logica, o m´etodo heur´ıstico antecede, por assim dizer, os m´etodos rigorosos de indu¸c˜ao e dedu¸c˜ao. Enquanto os ´ultimos s˜ao a base do processo de demonstra¸c˜ao e formula¸c˜ao de leis gerais, a heur´ıstica ´e por certo imprecisa e provis´oria e conta com dois elementos caracteristicamente humanos: a intui¸c˜ao e a criatividade. O m´etodo heur´ıstico ´e posto frequentemente como um m´etodo de “tentativa e erro”, que ´e um equ´ıvoco se for considerado que o indiv´ıduo que procura solucionar um problema parte naturalmente de conceitos, modelos e hip´oteses formulados em experiˆencias anteriores.
No entanto, mesmo que a heur´ıstica parta de bases consideradas n˜ao formais, reconhece-se estruturas de inferˆencia similares `as adotadas nos outros m´etodos: o processo de an´alise e de s´ıntese. Polya classifica estes processos segundo as fases do processo mental que o indiv´ıduo aplica na abordagem de um problema e na constru¸c˜ao de sua solu¸c˜ao. O pro-cesso de an´alise se divide em compreens˜ao do problema e elabora¸c˜ao de um plano, enquanto a s´ıntese se divide em execu¸c˜ao do plano e revis˜ao da resolu¸c˜ao. O ponto de partida da an´alise ´e o problema e o seu produto ´e o plano de a¸c˜ao. Na s´ıntese, o ponto de partida ´e o plano de a¸c˜ao e o resultado ´e solu¸c˜ao do problema.
Compreens˜ao do problema
A compreens˜ao do problema ´e est´a relacionada `a interpreta¸c˜ao do enunciado. ´E necess´ario a leitura cont´ınua do mesmo at´e que toda informa¸c˜ao poss´ıvel tenha sido identificada. O processo l´ogico se inicia, ent˜ao, com a an´alise da informa¸c˜ao adquirida, a partir da qual o desenvolvedor deve estabelecer suas metas, pois o problema pode ter implica¸c˜oes. ´E importante entender as causa do problema e os efeitos provocados por ela. Al´em disso, mudar o ponto de vista que ´e lan¸cado sobre o problema ajuda tamb´em na explora¸c˜ao dos aspectos mais gerais do problema. Algumas perguntas s˜ao ´uteis nesta epata: Qual ´e o problema? Que informa¸c˜oes tenho? O que est´a faltando? Onde devo chegar? As respostas a estas e outras perguntas n˜ao s˜ao a solu¸c˜ao, mas evidenciam o escopo de trabalho, seus limites e as dire¸c˜oes a serem tomadas. A compreens˜ao do problema deve estar impregnada de quest˜oes e respostas.
1POLYA, G. A arte de resolver problemas: um novo aspecto do m´etodo matem´atico. Tradu¸c˜ao de Heitor
Lisboa de Ara´ujo. Rio de Janeiro:Interciˆencia, 1978. 196 p.
2ROSA, M.; OREY, D. C. De Pappus a Polya: da heur´ıstica grega `a resolu¸c˜ao de problemas. p. 12–27,
In PLURES – HUMANIDADES: Revista do Programa de P´os-Gradua¸c˜ao em Educa¸c˜ao - Mestrado, n. 11 – jan./jun. 2009. Ribeir˜ao Preto, SP: Centro Universit´ario Moura Lacerda. Departamento de Educa¸c˜ao e Programa de P´os-Gradua¸c˜ao em Educa¸c˜ao – Mestrado –14,5 x 21cm. 164 p.
Elabora¸c˜ao de um plano
Na elabora¸c˜ao de um plano, o desenvolvedor, j´a de posse das informa¸c˜oes ne-cess´arias at´e o presente momento, ´e capaz de idealizar uma solu¸c˜ao inicial. O processo pode ser longo, mas deve ser finito. Como em um processo de amadu-recimento, o desenvolvedor conta com v´arios instrumentos para criar e avaliar poss´ıveis solu¸c˜oes. O uso de diagramas, desenhos, rascunhos e tabelas podem auxili´a-lo a visualizar o plano. Esta fase ´e de alta criatividade e ´e primordial que o desenvolvedor sinta-se livre para compor sua abordagem.
O passo inicial pode ser dif´ıcil, mas uma atitude de perseveran¸ca nesta busca ´e fundamental. A experiˆencia e o bom senso do desenvolvedor s˜ao um bom ponto de partida. Por analogia, compara¸c˜ao e transposi¸c˜ao, ele agrega seu conhecimento `a an´alise do problema e desenvolve uma solu¸c˜ao tempor´aria.
O plano em si ´e um conjunto de a¸c˜oes, sequencialmente organizado, e que dever´a ser executado, na ordem explicitada. ´E como uma receita – se um passo for ignorado, o resultado final poder´a ficar comprometido. Uma boa pr´atica ´e a elabora¸c˜ao das a¸c˜oes usando verbos no modo infinitivo e que cada a¸c˜ao corresponda a um verbo, ou seja, cada passo do plano ´e uma a¸c˜ao e cada a¸c˜ao ´e caracterizado por um verbo. Desta forma, as a¸c˜oes poder˜ao ser facilmente verificadas quanto ao seu efeito e sua validade.
Execu¸c˜ao do plano
A primeira fase da s´ıntese ´e a execu¸c˜ao do plano concebido. Esta etapa ´e menos mental e mais bra¸cal. O desenvolvedor deve seguir cada passo do plano elaborado e conferir se o resultado esperado foi realmente obtido. ´E comum, principalmente nas abordagens iniciais, deparar-se com a necessidade de alterar o plano haja vista alguma incoerˆencia entre os resultados e os objetivos. Se for preciso, o desenvolvedor deve retornar para a etapa de compreens˜ao do problema e refazer todo o caminho at´e que o plano gere resultados coerentes com o esperado.
Revis˜ao da resolu¸c˜ao
Pela dinˆamica pr´opria do m´etodo heur´ıstico, a fase final de revis˜ao do processo como um todo propicia ao indiv´ıduo a oportunidade de aperfei¸coamento do plano, reiniciando cada uma das epatas.
Assim, o esquema geral da heur´ıstica se baseia no tr´ıplice conceito an´ alise-s´ıntese-avalia¸c˜ao.
Deve se destacar que a heur´ıstica permite que o desenvolvedor retorne a qualquer uma das etapas no momento que isso se justificar. Mas deve ser claro tamb´em que ao voltar, as etapas, a partir do ponto de retorno, dever˜ao ser refeitas.
1.2
Aplica¸
c˜
ao do m´
etodo: somat´
orio e produt´
orio
Somat´orio e produt´orio s˜ao express˜oes matem´aticas onde uma mesma opera¸c˜ao (adi¸c˜ao ou multiplica¸c˜ao) ´e realizada entre v´arios termos. Os termos s˜ao dependentes de uma vari´avel usada normalmente para se controlar o n´umero de itera¸c˜oes da express˜ao. Para somat´orios e produt´orios definidos, isto ´e, onde o n´umero de itera¸c˜oes ´e conhecido, as formas gerais sˆao:
y = vf X i=vi termo(i) y = vf Y i=vi termo(i)
onde i ´e um n´umero inteiro, vi e vf s˜ao os valores inicial e final, respectivamente, e termo(i) ´e o termo a ser operado, fun¸c˜ao da vari´avel i.
Expandindo a express˜ao do somat´orio, observa-se a seguinte equa¸c˜ao:
y = termo(vi) + termo(vi + 1) + termo(vi + 2) + · · · + termo(vf − 1) + termo(vf ) Um problema a ser analisado ´e como realizar esta express˜ao um termo de cada vez, vislumbrando uma poss´ıvel implementa¸c˜ao da solu¸c˜ao no computador. O desenvolvedor se deparar´a com um grande problema se ele tentar implementar a express˜ao expandida como se vˆe acima, pois se o n´umero de termos for alterado, o desenvolvedor ter´a que reescrever a express˜ao.
Observando a express˜ao atentamente, ´e poss´ıvel perceber que cada termo depende de um valor que cresce unitariamente termo a termo. Desta forma, o somat´orio poderia ser rescrito como: y = vf −vi X i=0 termo(vi + i) onde o n´umero total de operandos (termos) ser´a vf − vi + 1.
Outra observa¸c˜ao ´e a evolu¸c˜ao do valor y conforme os termos v˜ao sendo adicionados. Para facilitar, imagine que ao se adicionar um novo termo, o resultado seja atribu´ıdo a uma vari´avel yi da seguinte forma:
y0 = termo(vi + 0)
y1 = termo(vi + 0) + termo(vi + 1)
y2 = termo(vi + 0) + termo(vi + 1) + termo(vi + 2)
· · ·
yvf −vi−1 = termo(vi + 0) + termo(vi + 1) + · · · + termo(vf − 1)
yvf −vi = termo(vi + 0) + termo(vi + 1) + · · · + termo(vf − 1) + termo(vf )
Repare que o valor de y1 ´e o valor de y0 + termo(vi + 1) e que y2 ´e o valor de
onde yi = yi−1+ termo(vi + i) para i = 1, · · · , vf e y0 = termo(vi):
y0 = termo(vi + 0) = termo(vi)
y1 = y0+ termo(vi + 1)
y2 = y1+ termo(vi + 2)
· · ·
yvf −vi−1 = yvf −vi−2+ termo(vi + vf − vi − 1) = yvf −vi−2+ termo(vf − 1)
yvf −vi = yvf −vi−1+ termo(vi + vf − vi) = yvf −vi−1+ termo(vf )
Neste ponto da an´alise, j´a ´e poss´ıvel vislumbrar um plano. A estrat´egia seria: iniciar o valor de y0 com termo(vi); depois, calcular y1 usando o valor de y0 e adicionando
termo(vi + 1); depois, calcular y2 usando o valor de y1 mais termo(vi + 2), e assim por
diante at´e yvf −vi.
Pela an´alise do problema e dada esta estrat´egia, a solu¸c˜ao dependeria de vf − vi + 1 inc´ognitas, o que ´e pouco pr´atico. Repare que, a cada passo da itera¸c˜ao, somente duas inc´ognitas est˜ao envolvidas: yi e yi−1. As inc´ognitas que j´a foram operadas n˜ao
s˜ao mais necess´arias e as que vir˜ao n˜ao entram neste c´alculo. Ent˜ao, seria razo´avel admitir-se somente uma inc´ognita que, a cada passo da itera¸c˜ao, tem seu valor atualizado. Para representar esta opera¸c˜ao de atualiza¸c˜ao de valor, utilizar-se-´a um novo operador, o operador de atribu´ı¸c˜ao: ←. A itera¸c˜ao ficaria:
y ← y + termo(vi + i)
para i de 0 at´e vf − vi. Esta express˜ao ´e lida da seguinte forma: adicionar ao valor atual de y o valor de termo(vi+i) e atualizar o valor de y. Como numa express˜ao matem´atica, o termo a direita do operador de atribui¸c˜ao deve ser realizada primeiro; depois, o resultado ´e atribu´ıdo `a inc´ognita a esquerda. Este processo iterativo de atualiza¸c˜ao implementa bem a opera¸c˜ao de somat´orio. O ´unico problema est´a no primeiro passo, na primeira itera¸c˜ao. Para i = 0, qual o valor de y? Ou seja, antes de se iniciar o processo iterativo, qual o valor inicial da inc´ognita y. Para n˜ao causar erro na opera¸c˜ao e n˜ao se interferir no resultado, usa-se como valor inicial de y um valor neutro para a opera¸c˜ao de adi¸c˜ao, isto ´e, zero. Ent˜ao, o primeiro valor de y ´e zero. Zero n˜ao interfere.
Veja o plano.
Plano
y ← 0
para cada valor de i desde 0 at´e vf − vi, fazer y ← y + termo(vi + i)
Aplicando o plano, obt´em-se: y ← 0 para i = 0 y ← y + termo(vi + 0) y ← 0 + termo(vi) = termo(vi) para i = 1 y ← y + termo(vi + 1) y ← termo(vi) + termo(vi + 1) para i = 2 y ← y + termo(vi + 2)
y ← termo(vi) + termo(vi + 1) + termo(vi + 2) · · ·
para i = vf − vi y ← y + termo(vi + vf − vi) y ← termo(vi) + · · · + termo(vf )
A ´ultima atualiza¸c˜ao da inc´ognita y traz o valor final da express˜ao do somat´orio. A express˜ao de produt´orio ´e similar ao do somat´orio a menos das opera¸c˜oes entre os termos serem multiplica¸c˜ao e n˜ao adi¸c˜ao. Assim, a solu¸c˜ao, o plano elaborado para resolver o somat´orio pode ser adaptado para resolver o produt´orio. O ´unico cuidado ´e com o valor inicial da inc´ognita y. O elemento neutro para o somat´orio ´e zero. No caso do produt´orio, o elemento neutro ´e 1. Ent˜ao, o plano para resolver o produt´orio ´e:
Plano
y ← 1
para cada valor de i desde 0 at´e vf − vi, fazer y ← y ∗ termo(vi + i)
Aplicando o plano, obt´em-se:
y ← 1 para i = 0 y ← y ∗ termo(vi + 0) y ← 1 ∗ termo(vi) = termo(vi) para i = 1 y ← y ∗ termo(vi + 1) y ← termo(vi) ∗ termo(vi + 1) para i = 2 y ← y ∗ termo(vi + 2)
y ← termo(vi) ∗ termo(vi + 1) ∗ termo(vi + 2) · · ·
para i = vf − vi y ← y ∗ termo(vi + vf − vi) y ← termo(vi) ∗ · · · ∗ termo(vf )
M ´odulo
2
Pr´
atica de programa¸c˜
ao
A boa experiˆencia de in´umeros profissionais da ´area de computa¸c˜ao1 que foi sendo acumulada ao longo do tempo ´e chamada de boa pr´atica de programa¸c˜ao. Esta cole¸c˜ao de normas e princ´ıpios passou a ser tratada com o tempo como um t´opico da teoria da ciˆencia da computa¸c˜ao.
Quais s˜ao as regras ou princ´ıpios? Quais s˜ao as boas pr´aticas de programa¸c˜ao?
2.1
Regras da boa programa¸
c˜
ao
Na rotina de programa¸c˜ao, existem duas etapas que consomem tempo: o desenvolvi-mento dos algoritmos2 e a valida¸c˜ao da l´ogica de programa¸c˜ao3 dos c´odigos-fonte de um
programa. Portanto, ´e sempre interessante e proveitoso dispor de uma cole¸c˜ao de algo-ritmos e c´odigos-fonte previamente escritos, testados, analisados e validados. Isto acaba sendo um processo quase natural que ocorre em fun¸c˜ao da acumula¸c˜ao de experiˆencia e a maturidade profissional com o passar do tempo.
Uma biblioteca de algoritmos e c´odigos, ou seja, de solu¸c˜oes, ´e sempre incrementada pela adi¸c˜ao de novas solu¸c˜oes para os mesmos ou novos problemas. As novas solu¸c˜oes, na maioria das vezes, s˜ao constru´ıdas tomando como base solu¸c˜oes pr´e-existentes, pr´atica esta reconhecida como sendo valiosa. O processo consiste em reusar, aproveitando, sempre que poss´ıvel, parte do que j´a est´a escrito e, portanto, j´a validado na constru¸c˜ao de uma nova solu¸c˜ao. Por este motivo o acervo de uma biblioteca tendem a formar uma base s´olida que poder´a ser utilizada para a solu¸c˜ao de novos problemas com um grau de confian¸ca cada vez mais elevado.
Sempre que uma solu¸c˜ao ou parte de uma solu¸c˜ao ´e reconhecida como valiosa, ela tende a ser usada e reusada ou adaptada na constru¸c˜ao de uma nova solu¸c˜ao. Um evento comum neste processo de reaproveitamento ´e a necessidade de se fazer pequenas, ou at´e mesmo grandes modifica¸c˜oes, nas solu¸c˜oes j´a existes de forma a melhor´a-las ou adequ´a-las para lidar com as novas situa¸c˜oes e que n˜ao eram previstas nas antigas.
A partir deste fato, pode-se ver que, para n˜ao se perder o controle do processo de desenvolvimento como um todo, ´e essencial que se aplique o que hoje ´e entendido e 1N˜ao somente os cientista da computa¸c˜ao, mas todos que utilizam a computa¸c˜ao como meio ou fim de
suas atividades. Nisto incluem-se, principalmente, os profissionais de exatas e engenharias.
2Aplica¸c˜ao da l´ogica na programa¸c˜ao, isto ´e, a aplica¸c˜ao da heur´ıstica e a elabora¸c˜ao da l´ogica de
pro-grama¸c˜ao.
chamado de boa pr´atica de programa¸c˜ao. No fundo, isto continua sendo aplica¸c˜ao da heur´ıstica.
De forma compacta, destaca-se as principais regras:
Clareza
Toda solu¸c˜ao deve ser bastante clara quanto aos seus objetivos e sua inten¸c˜ao, caso contr´ario ser´a dif´ıcil saber se ela est´a resolvendo o problema de forma correta ou n˜ao. Clareza est´a intimamente ligada `a corre¸c˜ao.
Legibilidade
Todo algoritmo elaborado como solu¸c˜ao de um problema deve ser leg´ıvel. Por isso ´e fundamental utilizar uma diagrama¸c˜ao que facilite sua leitura.
Documenta¸c˜ao interna
Todo algoritmo tem que ser documentado. A documenta¸c˜ao interna ´e impor-tant´ıssima e n˜ao opcional. O uso de um cabe¸calho ´e fundamental, al´em, claro, da identifica¸c˜ao funcional dos blocos de declara¸c˜oes utilizadas na l´ogica. O cabe¸calho deve conter:
• a descri¸c˜ao geral do plano;
• a finalidade da solu¸c˜ao elaborada;
• copyright e outras informa¸c˜oes relevantes;
• deve sempre fazer uso de nomes que sejam os mais autoexplicativos poss´ıveis; • usar sempre coment´arios curtos para as mais diversas finalidades.
Modularidade
Um algoritmo deve, sempre que poss´ıvel, ser escrito de forma particionada, isto ´e, em planos menores.
Reusabilidade
Reusabilidade diz respeito a dois conceitos importantes:
• Generalidade: capacidade de se construir algoritmos que possam ser usados e reutilizados para fins similares;
• Flexibilidade: capacidade de lidar com diferentes tipos de informa¸c˜ao e dife-rentes tipos de procedimentos.
Manutenibilidade
Os algoritmos devem ser escritos de forma a facilitar a sua adequa¸c˜ao `as necessidades futuras.
Documenta¸c˜ao em tempo de execu¸c˜ao
Todo programa tem que orientar bem o usu´ario quanto `as escolhas e a forma dos dados que devem ser fornecidos no momento da sua utiliza¸c˜ao. A documenta¸c˜ao em tempo de execu¸c˜ao ´e important´ıssima e tamb´em n˜ao ´e opcional.
Defensibilidade
Todo programa deve ter meios de lidar com entradas e sa´ıdas erradas.
2.2
Documenta¸
c˜
ao externa
A documenta¸c˜ao de um programa ´e parte integrante e essencial dele, exercendo fun¸c˜ao primordial no processo de desenvolvimento e manuten¸c˜ao do programa.
A documenta¸c˜ao de cada unidade de programa deve ser cuidadosamente elaborada e realizada dentro de padr˜ao pr´e-estabelecido. A padroniza¸c˜ao ´e importante porque facilita o entendimento e o intercˆambio de informa¸c˜ao entre os diversos membros de uma equipe (quando se est´a trabalhando em equipe) que est´a desenvolvendo um sistema complexo, al´em de favorecer a compreens˜ao e o uso do programa por terceiros.
Aqueles que n˜ao est˜ao trabalhando em equipe, isto ´e, est˜ao desenvolvendo e codifi-cando o programa de forma independente ou isolada, tamb´em necessitam documentar os programas. Por quˆe? Porque ele mesmo, em algum momento, necessitar´a reler e/ou reutilizar os programas ou partes deles. Se n˜ao documentou adequadamente o programa escrito, ir´a ter o dissabor de n˜ao mais compreendˆe-lo e, portanto n˜ao ter´a dom´ınio so-bre o programa. Neste caso acabar´a tendo que utilizar um tempo grande e precioso para (re)entender o programa ou ent˜ao escrever um programa novo por incapacidade de reaproveitar o trabalho j´a feito. Desperd´ıcio de tempo (e dinheiro), n˜ao?
As regras e recomenda¸c˜oes que ser˜ao apresentadas sobre a documenta¸c˜ao de progra-mas devem ser seguidas, progra-mas n˜ao devem ser encaradas como regras absolutas. ´E poss´ıvel se adotar algumas regras diferentes, ou melhor, regras que implementem os mesmos con-ceitos e as mesmas boas pr´aticas de programa¸c˜ao de uma forma que se ajuste melhor `as necessidades atuais do que as que est˜ao sendo indicadas aqui. Utilizar estas ou outras regras ´e quest˜ao de bom senso. Entretanto, uma vez adotado um conjunto de regras, estas dever˜ao ser seguidas at´e o fim.
A documenta¸c˜ao de um programa pode ser dividida em trˆes partes ou tipos: docu-menta¸c˜ao interna, documenta¸c˜ao em tempo de execu¸c˜ao e documenta¸c˜ao externa.
A documenta¸c˜ao externa diz respeito `a toda informa¸c˜ao complementar `a l´ogica desen-volvida como solu¸c˜ao de um problema analisado. Resgatando a proposta da heur´ıstica, de an´alise e s´ıntese, a documenta¸c˜ao externa deve conter o plano elaborado em forma narrativa, produto da compreens˜ao do problema e da estrat´egia de solu¸c˜ao revisados. O plano estruturado em itens dar´a espa¸co ao algoritmo, escrito na forma de pseudoc´odigo, seguindo um gloss´ario e regras de sintaxe e semˆantica pr´oprios.
Vale destacar que as informa¸c˜oes complementares se referem `a autoria da solu¸c˜ao, da-tas, vers˜oes, prop´ositos, restri¸c˜oes, observa¸c˜oes e m´etodos. O item principal ´e o algoritmo. Outros itens podem ser inseridos.
Modelo de documenta¸c˜ao externa T´ıtulo: Data: Autor: Prop´osito: Entradas e Sa´ıdas: Entradas: Sa´ıdas: M´etodo:
Observa¸c˜oes, Requisitos e Restri¸c˜oes: Algoritmo/Fim algoritmo
Exemplo Suponhamos que se deseje desenvolver um algoritmo que calcule as ra´ızes de uma equa¸c˜ao do segundo grau. A documenta¸c˜ao externa desse algoritmo seria (a menos da apresenta¸c˜ao do algoritmo propriamente dito):
Documenta¸c˜ao externa
T´ıtulo: Ra´ızes Reais de Polinˆomio de Segundo Grau
Data: 09/04/2013
Autor: Lu´ıs Fernando
Prop´osito: Calcular as ra´ızes reais de um polinˆomio de segundo grau caso elas existam.
Entradas e Sa´ıdas:
Entradas: Coeficientes a, b e c do polinˆomio Sa´ıdas: Ra´ızes reais x1 e x2
M´etodo: Aplicar o m´etodo de B´ascara para determina¸c˜ao das ra´ızes reais. Primeiro se calcula o valor do parˆametro ∆ (∆ = b2− 4ac) e depois se avalia o resultado. Se ∆ for maior que zero, ent˜ao o polinˆomio tem duas ra´ızes. Se ∆ for igual a zero, o polinˆomio tem raiz dupla. Se ∆ for negativo, o polinˆomio n˜ao tem raiz real. As ra´ızes reais s˜ao calculadas usando a express˜ao x = (−b ±√∆)/(2a).
Observa¸c˜oes, Requisitos e Restri¸c˜oes:
O m´etodo s´o funciona para polinˆomios com ra´ızes reais. No caso de polinˆomios com ra´ızes complexas, o m´etodo pode prever uma sa´ıda informando ao usu´ario que o po-linˆomio n˜ao tem ra´ızes reais.
Algoritmo .
. .
M ´odulo
3
Pseudoc´
odigo
3.1
Somat´
orio e produt´
orio
Os planos para somat´orio e produt´orio sˆao:
Plano para somat´orio
y ← 0
para cada valor de i desde 0 at´e vf − vi, fazer y ← y + termo(vi + i)
Plano para produt´orio
y ← 1
para cada valor de i desde 0 at´e vf − vi, fazer y ← y ∗ termo(vi + i)
Como as l´ogicas s˜ao simples, os pseudoc´odigos “tem a cara” dos planos.
Documenta¸c˜ao externa
T´ıtulo: Somat´orio
Data: 09/04/2013
Autor: Lu´ıs Fernando
Prop´osito: Implementar a opera¸c˜ao de somat´orio
y = vf X i=vi termo(i) .
M´etodo: O somat´orio pode ser implementado como um pro-cesso iterativo onde cada termo do somat´orio ´e adici-onado sequencialmente. a express˜ao iterativa ´e: y ← y + termo(i). O valor inicial de y ´e 0 e de i ´e vi. A cada itera¸c˜ao, um novo valor de termo(i) ´e calculado e adicionado ao valor atual de y. O resultado desta adi¸c˜ao ´
e atribu´ıdo `a vari´avel y, atualizando seu conte´udo. Este processo se encerra quando i atinge o valor final estabe-lecido vf .
Entradas e Sa´ıdas:
Entradas: Os valores vi e vf
Sa´ıdas: O resultado do somat´orio Observa¸c˜oes, Requisitos
e Restri¸c˜oes:
Os valores de i, vi e vf s˜ao inteiros. O termo termo(i) no pseudoc´odigo deve ser substitu´ıdo pela express˜ao de-sejada.
Algoritmo
declarar y num´erico declarar i num´erico declarar vi, vf num´ericos
1. ler vi, vf
2. y ← 0
3. para i de vi at´e vf , fazer
4. | y ← y + termo(i)
5. fim para
6. escrever y Fim algoritmo
Documenta¸c˜ao externa
T´ıtulo: Produt´orio
Data: 09/04/2013
Autor: Lu´ıs Fernando
Prop´osito: Implementar a opera¸c˜ao de produt´orio
y = vf Y i=vi termo(i) .
M´etodo: O produt´orio pode ser implementado como um pro-cesso iterativo onde cada termo do produt´orio ´e mul-tiplicado sequencialmente. a express˜ao iterativa ´e: y ← y ∗ termo(i). O valor inicial de y ´e 1 e de i ´e vi. A cada itera¸c˜ao, um novo valor de termo(i) ´e calculado e multi-plicado pelo valor atual de y. O resultado desta opera¸c˜ao ´
e atribu´ıdo `a vari´avel y, atualizando seu conte´udo. Este processo se encerra quando i atinge o valor final estabe-lecido vf .
Entradas e Sa´ıdas:
Entradas: Os valores vi e vf
Sa´ıdas: O resultado do produt´orio Observa¸c˜oes, Requisitos
e Restri¸c˜oes:
Os valores de i, vi e vf s˜ao inteiros. O termo termo(i) no pseudoc´odigo deve ser substitu´ıdo pela express˜ao de-sejada.
Algoritmo
declarar y num´erico declarar i num´erico declarar vi, vf num´ericos
7. ler vi, vf
8. y ← 1
9. para i de vi at´e vf , fazer
10. | y ← y ∗ termo(i)
11. fim para
12. escrever y Fim algoritmo