Академический Документы
Профессиональный Документы
Культура Документы
UNINOVE
1.2.
Lgica de Programao
A arquitetura magntica do computador, onde se processam
as informaes, lgica; ou seja, uma combinao de passar ou no corrente eltrica caracteriza a informao. Teoricamente representado pelos algarismos 0 e 1. Partindo deste princpio a concepo de um algoritmo deve ser tratada da mesma forma, logicamente. A lgica de programao extremamente necessria para quem quer, de fato, aprender a programar em qualquer linguagem de programao. Ela nos ajuda a pensar pela razo e no pela emoo, como em muitas situaes fazemos. Vamos dar um exemplo: Um casal de namorados se amam, a garota pergunta ao garoto: Voc no me ama?, ele, pela emoo, responderia que sim; mas pela razo,
UNINOVE
se responder sim, ele est confirmando a negao questionada por ela, de no amar. Esta situao pode ser bem resolvida em nosso cotidiano, porm, para o computador quer dizer que o garoto no ama a garota, lembremse, o computador raciocina logicamente. Devemos ento entendermos e nos acostumarmos com a forma de pensar do computador, para que no cometamos equvocos que possam ser fatais para o bom funcionamento do algoritmo.
1.2.1.
Algoritmo
Algoritmo um termo usado em diversas disciplinas exatas,
como: Matemtica, clculo, fsica, qumica, entre outras. Nestas disciplinas Algoritmo seria a resoluo integral de um problema proposto. Algoritmos na nossa rea (computao) tem o mesmo significado. Muitos confundem e pensam que algoritmos apenas a soluo final do problema, mas no, alm de chegar a soluo, so especificados todos os passos. Geralmente, criada uma linguagem hipottica
normalmente em portugus para a padronizao do algoritmo. Os critrios empregados so similares aos das linguagens de programao reais. Didticamente para o aluno, o fato da linguagem ser em portugus facilita o aprendizado do algoritmo, at que ele tenha a disciplina necessria para encarar uma linguagem real.
1.2.2.
Programa
Todos os conceitos empregados ao algoritmo servem para o
UNINOVE
desenvolvido em uma linguagem de programao real, ou seja, que de fato funcione no computador.
UNINOVE
2. TIPOS DE INFORMAES
Como vimos no captulo anterior, para fazermos o programador interagir com o computador precisamos definir critrios. O computador uma mquina de processar informaes(dados), logo, estes dados devero seguir algumas propriedades que caracterize e diferencie-o dos demais. Por estarmos tratando genericamente os padres, os citados nesta literatura, no obedece em cem por cento o critrio das linguagens de programao reais.
2.1.
Caracteres
So dados alfanumricos1 que serve para armazenar
informaes que contenham qualquer tipo de smbolo do teclado; por exemplo: Endereo: Rua Ataliba Vieira, 1025. Repare que no exemplo acima os bytes (caracteres) que compem o endereo so alfanumricos, algarismos e smbolos especiais. Os dados do tipo caracteres ocupam na memria RAM o nmero de bytes nele contido, por exemplo: computador - 10 bytes, casa - 4 bytes e Bom dia! 8 bytes.
2.2.
Numricos
So informaes que s podem ser representadas por
Algarismos, letras e caracteres especiais (vrgula, ponto, hfem, parnteses entre outros)
UNINOVE
2.2.1.
Inteiros
Informaes numricas que tem a caracterstica de no
serem fracionrias, por exemplo, Quantidade de filhos: 5, Nmero de alunos: 40 e Total de rodas: 4. Os dados do tipo Inteiro ocupam na memria RAM 2 Bytes e pode armazenar nmeros at o limite de 65535 positivo ou negativo.
2.2.2.
Reais
Informaes numricas que tem a caracterstica de serem
fracionrias, por exemplo, Salrio: 1254.25, Inflao: 0.75842 e Nota: 7.5. Os dados do tipo Real ocupam na memria RAM 4 Bytes e podem armazenar nmeros com 9 dgitos significativos. Vale lembrar que as linguagens de programao tratam nmeros reais diferente do padro brasileiro. Eles usam o ponto para separar a parte fracionria do nmero inteiro, enquanto usamos a vrgula.
2.3.
Lgicos
Informaes lgicas, como diz o prprio nome, tem a
caracterstica binria2. Armazenam valores booleanos (verdade/falso) como muitos dados analisados para implementar um algoritmo. Por exemplo: Maior de idade? Verdade; casado? falso e dependentes? verdade. Fica mais fcil entender estes tipos de dados em forma de perguntas lgicas, como nos exemplos acima. Os dados do tipo Lgico ocupam na memria RAM 2 Bytes e s armazenam os valores .V. (verdade) e .F. (falso).
UNINOVE
3. REPRESENTAES DO ALGORITMO
Existem diversas formas de representar um algoritmo, assim como, fazendo uma analogia, existem diversas formas de representar uma notcia: por jornal, pela internet, pelas revistas, televiso, entre outras. Apresentaremos neste captulo algumas das formas de representao do algoritmo. Vale lembrar, que no decorrer do curso nos apoiaremos no Diagrama de Blocos (fluxograma) na teoria e Linguagem de programao Turbo Pascal na prtica.
3.1.
Descrio Narrativa
Descrio narrativa a forma de representao do algoritmo
atravs de um texto que expresse os processos a serem executados para resoluo do problema. Nesta forma de representao do algoritmo no necessrio tcnicas, regras ou critrios; basta a expresso do algoritmo na forma escrita.
3.2.
representao dos processos do algoritmo atravs de figuras geomtricas que representam as aes do processo (comandos ou instrues). Nesta forma de representao do algoritmo usamos regras particulares para cada uma das figuras/comandos. Comeamos a despertar no aprendiz a necessidade e importncia da disciplina na concepo de um algoritmo.
Somente duas respostas uma oposta da outra. Na teoria .V. simboliza verdade e .F. falso.
UNINOVE
3.3.
linguagem de programao hipottica que usamos para representar os processos do algoritmo atravs de comandos pr-definidos. Estes comandos so padres para todos os algoritmos, da mesma forma que existem regras de um comando para um algoritmo, a mesma servir para um outro. O construo do algoritmo atravs do pseudocdigo fundamental no incio do aprendizado, porm, depois que o aluno acostumar-se com as regras dos comandos, ser mais interessante que o aluno desenvolva seus algoritmos em uma linguagem de programao (Pascal), para que no haja redundncia e confuso de regras entre pascal e pseudocdigo. Por este motivo, neste curso, sempre quando formos desenvolver a teoria de um algoritmo, utilizaremos o fluxograma, e , a partir deste, desenvolveremos o programa em Pascal.
UNINOVE
4.1.1.
4.1.2.
Nomeao
Toda varivel de memria devem ter um nome que
identifique-a, diferenciando-a das demais contidas no mesmo algoritmo. Cada linguagem de programao tem regras semelhantes - ou no - para nomear variveis. Usaremos as regras da linguagem Pascal, afinal, ele ser usada no curso. Comear com letra; No conter caracteres especiais, exceto o sublinhado( _ ) e No ser palavra reservada da linguagem.
UNINOVE
4.1.3.
Atribuio
Atribuio nada mais do que preencher o contedo de
uma varivel com valores definidos pelo usurio do algoritmo ou pelo programador.
4.2.
4.2.1.
constantes de memria. Exceto o ltimo pargrafo. Uma constante de memria no pode ter o seu contedo alterado pelo operador do algoritmo, ou seja, a partir do momento que o algoritmo est em modo de execuo, o valor atribudo a constante no se altera. S utilizaremos constantes de memria em algoritmos se nesta informao houver um carter imutvel, como o valor de PI na matemtica: 3,141519.
4.2.2.
Iniciao
Para atribuirmos um valor numa constante, basta em sua
definio, no ambiente CONST, colocarmos o valor desejado. Mostraremos na prtica o funcionamento mais adiante.
UNINOVE
5.1.1.
OPERADOR LGICO .E. Conjuno. O operador lgico .E. s resulta verdade se todos os operandos forem verdadeiros, nos demais casos, resulta falso. Em C disjuno se escreve && e no Pascal AND. OPERADOR LGICO .OU. Disjuno. O operador lgico .OU. s resulta falso se todos os operandos forem falsos, nos demais casos, resulta verdade. Em C disjuno se escreve || e no Pascal OR. OPERADOR LGICO .NO. Negao. O operador lgico .NO. inverte o valor lgico do operando. Em C disjuno se escreve ! e no Pascal NOT.
10
UNINOVE
No importa o nmero de operandos envolvidos numa expresso, as regras so as mesmas. Em algumas linguagens de programao, existem outros operadores lgicos, como ou exclusivo; porm os estes foram concebidos a partir dos descritos acima.
5.1.2.
Aritmticos
Os operadores aritmticos servem para efetuar clculos
matemticos em um algoritmo. Alguns smbolos so iguais aos da matemtica, outros no. Veja a tabela Operador Descrio Prioridade
+ * / DIV % ou MOD ^ ()
4 4 3 3 3 3 2 1
Se em uma expresso aritmtica houverem operadores de prioridades diferentes, sero executados, primeiro, os de prioridade menor da esquerda para a direita.
11
UNINOVE
5.1.3.
Caracteres
Teoricamente, existe apenas um operador de caracteres: o
sinal de adio (+). Sua funo concatenar (juntar) as cadeias de caracteres (strings). O turbo Pascal, alm de usar este sinal, tambm usa o caractere vrgula, dentro do comando write, com a mesma funo.
5.1.4.
Relacionais
Este tipo de operador tem como objetivo comparar os
Estes operadores podem ser utilizados com qualquer tipo de dados, no importando a classificao ou o tipo.
5.2.
Expresses
A combinao dos operadores, no importando o tipo, com
12
UNINOVE
Esta informao geralmente armazenada em uma varivel de memria, podendo tambm ser exibidas diretamente nos dispositivos de sada do computador (monitor ou impressora).
5.2.1.
Matemticas
Os tipos de expresses matemticas envolvem dados
numricos (inteiros e reais) e operadores aritmticos. A precedncia dos clculos na expresso, obedece a mesma ordem da matemtica. Porm, uma expresso computacional s pode ser escrita em uma linha, diferentemente de uma expresso aritmtica. Exemplo: Expresso Aritmtica Y = 4.63+94 5 Expresso Computacional Y=(4*6*6*6+9-4)/5;
5.2.2.
Lgicas
As expresses lgicas, para o aprendiz, so mais
complicadas do que as matemticas; mais pela novidade do que pela dificuldade. As expresses matemticas, no computador, so parecidas com as expresses da matemtica. Ento, no uma grande novidade, diferentemente das expresses lgicas onde tudo novidade. Como nas expresses matemticas, as lgicas, tambm tem uma prioridade a ser considerada. Desconsiderando os parnteses (que quebram a prioridade) os operadores lgicos so executados na seguinte ordem: .NO., .E. e .OU.. Exemplo: .NO.((.V..OU..F.).E.(.NO..F..E..V.)) Resulta .F.
13
UNINOVE
5.2.3.
Caracteres
A nica operao que podemos montar em uma expresso
caractere, a concatenao (+). String o termo usado para identificar uma seqncia de valores caracteres, logo, concatenao nada mais do que juntar duas ou mais strings independentes. Exemplo: Bom Dia+Joo Carlos Bom DiaJoo Carlos Bom Dia +Joo Carlos Bom Dia Joo Carlos Bom Dia + + Joo Carlos Bom Dia Joo Carlos
5.2.4.
Mistas
Existem situaes, em programao, onde precisamos
montar expresses que envolvam dados de tipos diferentes. Apenas para ilustrar; Imagine um trecho do algoritmo em operao onde, para o usurio acess-lo, precisa entrar com o seu nome e senha. Para a validao do acesso ao algoritmo, o programador ter que montar uma expresso mista que envolva dados caracteres (Nome) e numricos (Senha). A seguir, um exemplo de expresso mista: Exemplo: (4+7<=6).OU.(.NO..V..E..F.).E.(ABC<>BCA) (11<=6).OU.(.F..E..F.).E.(.V.) .F..OU..F..E..V. .F..OU..F. .F.
Nota: Quando houverem operadores de classes diferentes na mesma expresso, devemos resolver na ordem: os aritmticos, os relacionais e, por fim, os lgicos.
14
UNINOVE
6. COMANDOS SIMPLES
Antes de aprendermos os comandos precisamos saber a estrutura de um algoritmo e de um programa em pascal. Estrutura de um algoritmo
Pseudocdigo
programa <nome_programa> var <lista_variveis>:<tipos> inicio <corpo_do_programa> fim
Pascal
program <nome_programa>; var <lista_variveis>:<tipos>; begin <corpo_do_programa>; End.
6.1.
Fluxograma
Pascal
Read(<varivel>);
Sintaxe Pseudocdigo
leia <varivel>
C
scanf(tipo, &<varivel>);
<varivel> Readln<varivel>);
Parmetro:
<varivel> o local onde ser armazenada a informao digitada pelo operador do algoritmo.
6.2.
15
UNINOVE
Fluxograma
Pascal
Sintaxe Pseudocdigo
<varivel> <expresso>
<var>:=<expresso>;
<var><expresso>
<var>=<expresso>;
Parmetro:
<varivel> o local onde ser armazenada o valor resultante da expresso. <expresso> clculo ou valor a ser atribudo varivel. Lembrete No existe um nome prprio para o comando processamento, como nos outros comandos, bastando assim colocar a expresso e atribu-la, obrigatoriamente e exclusivamente, em uma varivel.
6.3.
Fluxograma
Pascal
write(<expresso>);
Sintaxe Pseudocdigo
Escreva <expresso>
C
printf(<expresso>);
<expresso> writeln(<expresso>);
Parmetro:
<expresso> so as informaes que podero ser exibidas. Estas
informaes podero ser constantes, variveis ou expresses. Lembrete No pascal, a diferena do comando write para o writeln o fato do ltimo mudar o cursor para a linha debaixo aps a apresentao da expresso, enquanto no primeiro, continua na mesma linha.
16
UNINOVE
A seguir, daremos um exemplo do algoritmo construdo em suas trs representaes, e, tambm, o programa em pascal. Construir um algoritmo que calcule as frias (salrio+33,3%), incluindo a contribuio de INSS de 11%, de um funcionrio.
Descrio Narrativa: 1. Obter o salrio do funcionrio (SAL) 2. Calcular as Frias Bruta (FB) 3. Calcular o INSS (INSS) 4. Calcular as Frias Lquida. (FL) 5. Exibir um relatrio detalhado das frias. Fluxograma:
incio sal fbsal*1.333 inssfb*0.11 flfb-inss Frias Bru.,fb, INSS,inss, Frias liq.,fl fim
Pseudocdigo: programa ferias_1 var sal,fb:real fl,inss:real inicio leia sal fbsal*1.333 inssfb*0.11 flfb-inss escrevaFrias Bruta:,fb, INSS:,inss, Frias lquida:,fl fim
1} 2} 3} 4}
{passo 5}
17
UNINOVE
Pascal: program ferias_1; var sal,fb:real; fl,inss:real; begin readln(sal); fb:=sal*1.333; inss:=fb*0.11; fl:=fb-inss; write(Frias Bruta:,fb, INSS:,inss, Frias lquida:,fl); end.
1} 2} 3} 4}
{passo 5}
18
UNINOVE
7.1.1.
Fluxo grama
Se...ento If...Then
Pseudocdigo
.F.
<Condio>
.V.
<bloco1>
<bloco1> ;
Se a <condio> resultar um valor verdadeiro, ento executado o <bloco1> , e , depois continua o fluxo do algoritmo; seno, prossegue, somente, o fluxo do algoritmo. Esta variao do comando se/if serve para analisarmos um possvel caminho a ser seguido.
19
UNINOVE
7.1.2.
Se...ento...seno If...then...else
Fluxograma .F.
Pseudocdigo .V.
<Condio>
<Bloco2>
<Bloco1>
Se a <condio> resultar um valor verdadeiro, ento executado o <bloco1> , seno, o <bloco2>. Independentemente do bloco a ser executado, segue o fluxo normal na seqncia do algoritmo. Esta variao do comando se/if serve para analisarmos dois caminhos distintos que podero ser seguidos. A seguir, mostraremos um algoritmo com o comando Se (IF): Elaborar um algoritmo que calcule as frias (salrio+33,3%), o imposto de renda (15%) para quem ganha mais de 900 e a contribuio de INSS de 11%, de um funcionrio.
Descrio Narrativa:
1. Obter o salrio do funcionrio (SAL) 2. Calcular as frias (F) 3. Verificar se as frias ultrapassaram o limite do imposto de renda (R$900,00). 3.1. Se sim, calcular o imposto de renda (IR)
20
UNINOVE
3.2. Seno, iseno de IR 4. Calcular o INSS (INSS) 5. Calcular o saldo (S) 6. Exibir relatrio detalhado dos impostos e proventos
fsal*1.333
f >= 900
ir0
irf*0.15
programa ferias_2 var sal,ir,f,inss,s:real inicio leia sal fsal*1.333 se f>=900 ento irf*0.15
21
UNINOVE
program ferias_2; var sal,ir,f,inss,s:real; begin readln(sal); f:=sal*1.333; if f>=900 then ir:=f*0.15 else ir:=0 ; inss:=f*0.11; s:=f-inss-ir; writeln(Frias:,f,INSS:,inss, IR:,ir,Saldo:,s); fim.
7.1.3.
Se...ento...senoSe If...then...elseIf
Se a <condio> resultar um valor verdadeiro, ento
executado o <bloco1> , seno analisada a prxima condio, podendo resultar verdade ou falso caindo no prximo se...ento...seno. Esta variao do comando se/if serve para analisar diversos caminhos distintos que podero ser seguidos.
22
UNINOVE
7.2.
principalmente o visto no captulo 7.1.3. Este comando mais prtico do que o comando Se em situaes como menus, ou seja, diversas opes de escolha com condies simples. Na verdade, poderamos usar o Se para analisarmos diversas condies, porm, o inconveniente o fato de ter que fechar vrios fim_se, por exemplo, se for montada uma estrutura com quatro caminhos diferentes com o comando Se, obrigatoriamente fecharamos trs fim_se, ou ponto e vrgula no pascal. A desvantagem do comando escolha ao se, o fato de no analisar condies compostas6. Veja sua sintaxe:
<Cond_1>
.v.
<Bloco1>
.f.
<Cond_2>
.v.
<Bloco2>
.f.
<Cond_N>
.v.
<BlocoN>
Pseudocdigo caso <expresso> faa <cond_1>:<bloco1> <cond_2>:<bloco2> ... <cond_N>:<blocoN> seno <bloco_seno> fim_caso
6
Mais de um operador
23
UNINOVE
Pseudocdigo case <expresso> of <cond_1>:<bloco1>; <cond_2>:<bloco2>; ... <cond_N>:<blocoN>; else <bloco_seno>; end;
O funcionamento deste comando : analisada a <cond_1>, se verdadeira, executa-se o <Bloco1> e sai da estrutura, seno, analisa-se a <cond_2> obedecendo o procedimento anterior e assim sucessivamente; at que esgotem-se as condies. O algoritmo a seguir, pede a digitao de um nmero que represente o dia da semana, exibindo-o por extenso.
incio dia
rDOM
rSEG
rSAB
r
.V. incio .F. 24
UNINOVE
Pseudocdigo programa dia_semana var dia:inteiro inicio leia dia caso dia faa 1:r:=DOM 2:r:=SEG ... 7:r:=SAB seno escreva Dia invlido fim_caso escreva r fim. Pascal: Program dia_semana; var dia:integer; begin read(dia); case dia of 1:r:=DOM; 2:r:=SEG; 7:r:=SAB; else write(Dia invlido); end; write(r);
end.
25
UNINOVE
8. ESTRUTURAS DE REPETIO
Estas estruturas so muito utilizadas em programao. So necessrias, principalmente, quando existem rotinas redundantes. Estas
8.1.
previamente o nmero de repeties a serem aplicadas na rotina. Basta configurar o lao com os parmetros
<rotina_redundante>
Pseudocdigo
Para <contador> de <ValorInicial> at <ValorFinal> inc<incremento> <rotina_redundante> fim_para
26
UNINOVE
Pascal
for <contador> := <ValorInicial> to <ValorFinal> do <rotina_redundante> ;
Reparem
que
em
pascal
no
existe
parmetro
<incremento>, porm, bom sabe-lo; pois todas as outras linguagens de programao trabalham com este parmetro. Tambm vale lembrar que a vrgula que fecha esta estrutura no pascal. O algoritmo a seguir escreve os nmeros de 1 a 100 na tela: Fluxograma inicio
cont, 1, 100, 1
fim
cont
Pseudocdigo programa exemplo_para var cont:inteiro inicio para cont de 1 at 100 inc 1 escreva cont fim_para fim Pascal program exemplo_para;
27
UNINOVE
8.2.
condicionalmente, ou seja, a partir de uma condio lgica - definida pelo programador - analisa-se, se resultar verdade, executa a rotina de repetio e volta ao incio do lao, analisando a condio novamente; se falso, a rotina de repetio ignorada seguindo o fluxo do algoritmo normalmente. Primeiramente analisada a condio, depois executada a rotina. Sua sintaxe : Fluxograma .f. <condio> .v. <rotina de repetio> Pseudocdigo Enquanto <condio> faa <rotina de repetio> fim_enquanto Pascal While <condio> do <rotina de repetio> ;
28
UNINOVE
O comando enquanto mais utilizado em situaes onde pode existir a possibilidade de no executar nenhuma vez a rotina de repetio.
8.3.
condicionalmente, como a estrutura enquanto. As diferenas so duas: 1 - primeiramente executada a rotina de repetio, independentemente do resultado da condio, que ainda no foi analizada. 2 - a rotina de repetio volta a ser executada se a condio resultar falso, ou seja, at que a condio seja verdadeira. Sua sintaxe : Fluxograma <rotina de repetio>
.f. <condio>
.v.
Pseudocdigo Repita <rotina de repetio> at que <condio> Pascal repeat <rotina de repetio> until <condio>;
29
UNINOVE
O comando repita mais utilizado em situaes onde h a obrigatoriedade da execuo da rotina de repetio pelo menos uma vez.
30
UNINOVE
9. VARIVEIS INDEXADAS
Sabemos a utilidade de variveis em um algoritmo, porm, em algumas situaes uma varivel simples no atende a nossa necessidade, pois a mesma guarda apenas uma informao por vez. Imaginemos a necessidade de guardarmos as vendas dirias dos dez vendedores de um comrcio, onde, as informaes armazenadas so: o nmero do vendedor e a venda. Criaramos vinte variveis? Fora de cogitao. Veremos ento o conceito de variveis indexadas.
9.1.
Vetor unidimensional
Utilizamos uma varivel do tipo vetor sempre que
precisarmos armazenar mais de uma informao do mesmo tipo - sobre a mesma entidade. A vantagem da varivel do tipo vetor o fato de darmos a ela um nome e podermos guardar diversas informaes, referenciando-as pelo seu ndice na cadeia. Ilustrao de um vetor com cinco posies preenchido com nomes
1 2 3 4 5
Joo
Marcio
Jos
Maria
Tiago
Faremos o pseudocdigo e o programa em pascal que preenche o vetor acima: Pseudocdigo Programa Exemplo_vetor Var VetorNome:conjunto[5] de caractere inicio VetorNome[1]Joo VetorNome[2]Marcio
31
UNINOVE
VetorNome[3]Jos VetorNome[4]Maria VetorNome[5]Tiago fim Pascal Program Exemplo_vetor; Var VetorNome:array[1..5] of string; begin VetorNome[1]:=Joo; VetorNome[2]:=Marcio; VetorNome[3]:=Jos; VetorNome[4]:=Maria; VetorNome[5]:=Tiago; End.
9.2.
Matriz bidimensional
Utilizamos uma varivel do tipo matriz quando necessitamos
armazenar informaes do mesmo tipo em uma estrutura bidimensional, como uma tabela ou planilha, por exemplo. Referenciamos as posies da matriz pelo seu ndice, na ordem, linha e coluna. Ilustrao de uma matriz com 2 linhas e 3 colunas, preenchida com nmeros de 1 a 6, na ordem
1,1 1,2 1,3
1
2,1
2
2,2
3
2,3
Faremos o pseudocdigo e o programa em pascal que preenche a matriz acima: Pseudocdigo Programa Exemplo_matriz Var
32
UNINOVE
MatrizNum:conjunto[2,5] de inteiro i,j,num:inteiro inicio num1 para i de 1 at 2 inc 1 faa para j de 1 at 3 inc 1 faa MatrizNum[i,j]num numnum+1 fim_para fim_para fim Pascal Program Exemplo_matriz; Var MatrizNum:array[1..2,1..5] of integer; i,j,num:integer; begin num:=1; for i:=1 to 2 do for j:=1 to 3 do begin MatrizNum[i,j]num; num:=num+1; end ; ; end.
33
UNINOVE
10. SUBALGORITMOS
Vamos considerar que temos o domnio requerido na construo de um algoritmo; sabemos todos os comandos devidamente, e, ainda o manuseio de variveis indexadas. At o captulo anterior, os problemas que encontrvamos em algoritmos estavam relacionados a criao do algoritmo; as dvidas existem, e muitas, porm, elas s sero sanadas com a prtica e experincia. Quando no mais novidade a elaborao de um algoritmo, comeamos a perceber um outro tipo de problema. Por menor que seja um algoritmo razoavelmente complexo, ele tem umas 200 linhas de cdigo. Aonde est o problema? Quando precisarmos fazer uma manuteno no algoritmo ou descobrir um erro de lgica nele contido, extremamente horrvel. Um Subalgoritmo veio amenizar este problema. Ele otimiza a visualizao do cdigo principal, dividindo os problemas em problemas menores, resolvendo-os separadamente e dando um nome a cada subproblema. Temos dois tipos de subalgoritmo, eles:
10.1.
Procedimento
Utilizamos um procedimento quando desejamos executar
uma seqncia de comandos que atinjam um objetivo. Um procedimento no retorna, formalmente, valor algum ao programa que o chamou. Procedimento mais utilizado em situaes como contruo de layout de telas, manuseio de informaes contidas na tela, entre outras. A seguir, um procedimento junto com o programa principal que centraliza uma mensagem, digitada pelo usurio, no meio da tela; vale
34
UNINOVE
lembrar que as tela do monitor, em modo DOS, tem 25 linhas e 80 colunas. Estas informaes so necessrias para a construo do procedimento. Program Exemplo_Procedimento; Uses crt; Procedure centraliza; var msg:string; tamanho:integer; begin write(Digite uma mensagem:); read(msg); clrscr; tamanho:=(80-length(msg)) div 2; gotoxy(tamanho,12); write(msg); end; begin centraliza; end. Reparemos que em pascal o subalgoritmo construdo no meio do programa principal. O procedimento est destacado, acima, em negrito e itlico.
10.2.
Funo
Utilizamos uma funo, tambm, quando desejamos
executar uma seqncia de comandos que atinjam o mesmo objetivo. Diferentemente do procedimento, uma funo retorna formal e obrigatoriamente um valor ao programa chamador. Uma funo mais usada para efetuarmos clculos, parecida com o conceito da funo matemtica, porm, no efetua apenas clculos matemticos.
35
UNINOVE
A seguir, desenvolveremos uma funo que calcula o valor de delta, passando como parmetros os valores: a, b e c. (pr-requisitos para o desenvolvimento do clculo: Program Exemplo_funo; Uses crt; Var r,a,b,c:integer Function delta(pa,pb,pc:integer):integer; var resultado:integer; begin resultado:=pb*pb-4*pa*pc; delta:=resultado; end; begin read(a,b,c); r:=delta(a,b,c); Write(r); end. Na primeira linha, estamos passando trs informaes do algoritmo para a funo para que o clculo seja efetuado. No final da linha, estamos especificando o tipo de informao inteira que o funo retornar ao algoritmo, aps efetuado o clculo. Na Sexta linha da funo repare que o ato de retornar o valor ao algoritmo, consiste em atribuir um valor ao nome da funo. Na Sexta linha do programa principal a composio do nome da funo com os trs argumentos ser substitudo pelo valor retornado pela funo, e, atribudo a varivel r.
36
UNINOVE
11. PARMETROS
Parmetros so informaes passadas ao subalgoritmo para que ele possa basear-se para efetuar uma operao, ou clculo, de acordo com a concepo do mesmo. Sem sabermos, j utilizamos parmetros no exemplo dado em Funo, porm, estamos agora formalizando este conceito.
11.1.
Real
So os parmetros que aparecem no algoritmo principal
quando na chamada do subalgoritmo; a partir dos valores, passados pelo parmetro real, que o subalgoritmo vai basear-se para se desenvolver. Abaixo, cortamos o corpo do programa principal do ltimo exemplo, para destacarmos - em negrito e itlico - o parmetro real. . . .
11.2.
Formal
So os parmetros localizados na primeira linha cabealho
do subalgoritmo. Sua funo caracterizar a informao que ser absorvida pelo subalgoritmo. Abaixo, cortamos da primeira linha do subalgoritmo do ltimo exemplo, para destacarmos - em negrito e itlico - o parmetro formal.
37
UNINOVE
. . . Function delta(pa,pb,pc:integer):integer; . . .
11.3.
11.3.1.
criado a partir de uma cpia do parmetro real, no podendo assim, alterar o valor do parmetro real (e/ou variveis globais). Tecnicamente, no subalgoritmo no muda nada, continua sendo como sempre usamos o subalgoritmo. Vejamos o exemplo abaixo: Esta funo hipottica, est passando o parmetro por valor: Program pass_valor Var x:integer; Function teste(px:integer):integer; begin px:=px+2; teste:=px; end; begin x:=5; {x vale 5} write(x); {escreva 5} write(teste(x)); {escreva 7} write(x); {escreva 5} end. Repare, no exemplo acima, que a varivel global x no teve o seu valor alterado depois da chamada da funo no programa principal.
38
UNINOVE
11.3.2.
Por referncia
Na passagem de parmetro por referncia, o mesmo espao
criado para o parmetro real ser do formal, logo, o parmetro real (ou varivel global) pode ter o seu valor alterado. Tecnicamente, no subalgoritmo, o que muda a palavra reservada var antes de cada parmetro formal. Vejamos o mesmo exemplo: Esta funo hipottica, est passando o parmetro por referncia: Program pass_referencia; Var x:integer; Function teste(var px:integer):integer; begin px:=px+2; teste:=px; end; begin x:=5; {x vale 5} write(x); {escreva 5} write(teste(x)); {escreva 7} write(x); {escreva 7} end. Perceba a existncia da palavra reservada var antes do parmetro formal. Veja tambm que a varivel global x teve o seu valor alterado aps a chamada da funo.
39