14.4Recursividade
Um subprograma recursivo é aquele que chama a si próprio. Pode ser executado várias vezes para valores diferentes de seus parâmetros.
A recorrência ou recursividade pode ser facilmente compreendida quando na prática surge a necessidade de se definir alguma coisa em função dela mesma.
Sabe-se, por exemplo, que o fatorial de um número N pode ser obtido multiplicando-o pelo fatorial de seu predecessor N - 1, ou seja, para N positivo tem-se que:
FAT(N) = N * FAT(N - 1).
Esse e outros tipos de recorrência são tratados internamente pela máquina através do uso de pilhas. Assim sendo, cada vez que o subprograma chama a si próprio, mais informações são colocadas na pilha. O retorno se verifica pelo processo inverso, quando os resultados calculados vão sendo retirados da pilha.
Exemplo de um programa recursivo que calcula o fatorial de um número:
PROGRAM RECURSIVO;
uses CRT;
var
num: integer;
function fatorial(n: integer): longint;
begin
if n=0 then fatorial:=1
else fatorial := n * fatorial(n-1);
end;
begin
write('Numero: ');
readln(num);
writeln('Fatorial de ',num,': ',fatorial(num));
readln;
end.
15.Procedimentos e Funções das Unidades Padrão 15.1Manipulação de Strings e Conversão
Length (s : String ) : Integer;
retorna a quantidade de caracteres contidos em uma string
Concat (s1, [s2 .. sn] : String ) : String;
retorna uma string que é a união de todas as strings passadas como parâmetro
Delete (VAR s : String ; indice, contador : Integer );
retira um ou mais caracteres de uma determinada string
Copy (s : String ; indice, contador : Integer ) : String ;
retorna uma substring de uma string passada como parâmetro
Insert (fonte : String ; VAR destino : String );
Insere uma substring em uma posição preestabelecida.
Pos (pesq : String ; objeto : String) : byte;
retorna a posição que uma substring ocupa dentro de uma string passada como parâmetro.
Val (fonte : String ; Var destino, Var erro : Integer );
Converte uma string para valor numérico e retorna o código de erro.
Str (valor [:tamanho [:decimais]]; VAR destino : String );
Converte uma variável numérica em string.
15.2Manipulação Numérica
ABS (x) : Tipo;
Retorna o valor absoluto de uma expressão
ARCTAN (x : Real ) : Real ;
Retorna o arco de tangente do argumento utilizado
COS (r : Real ) : Real ;
Retorna o valor do co-seno de um argumento passado como parâmetro.
DEC (VAR x [; n ]: Longint)
Decrementa uma variável numérica inteira em uma ou mais unidades
EXP (r : Real ) : Real ;
Retorna o valor exponencial
FRAC (r : Real ) : Real ;
Retorna a parte fracionária
HI ( r ): byte;
Retorna a parte alta de uma constante numérica
INC (VAR x [; n ]: Longint)
Incrementa uma variável numérica inteira em uma ou mais unidades
INT (r : Real ) : Real ;
Retorna o valor inteiro de uma variável do tipo real
LN (r : Real ) : Real ;
Retorna o logaritmo natural
LO ( r ) : byte;
Retorna a parte baixa de uma constante numérica
PI : Real ;
Retorna o valor de PI
ODD (n : Longint ) : Boolean;
Retorna um valor verdadeiro se o argumento for par
RANDOM (n : Word) : (inteiro ou real)
Retorna um número aleatório que pode variar de 0 a 1, ou por um limite passado como parâmetro.
RANDOMIZE ;
Permite gerar uma nova semente para geração de números aleatórios.
ROUND (r : Real ) : Longint ;
Retorna um número real convertido em inteiro e arredondado.
SIN (r : Real ) : Real ;
Retorna o valor do seno
SQR ( r : (numérico)) : numérico;
Retorna o parâmetro elevado ao quadrado.
SQRT (r : Real ) : Real ;
Retorna a raiz quadrada
SWAP ( i : (qualquer_inteiro) ) : (o mesmo tipo do parâmetro)
Inverte o valor em sua ordem
TRUNC (r : Real ) : Longint;
Retorna um valor inteiro truncado nas casas decimais
Nem todas as funções que necessitamos estão prontas e às vezes é necessário utilizar uma fórmula equivalente:
YX = EXP ( LN ( Y ) * X )
= EXP ( LN ( Y ) * ( 1 / X ))
LOG (x) = LN ( X ) / LN ( 10 )
15.3Manipulação de Diretórios
MKDIR (s : String )
Cria um subdiretório
GETDIR (drive : byte; VAR s : String );
Retorna o diretório corrente da unidade passada como parâmetro:
0 - Unidade corrente
1 - Unidade A
2 - Unidade B
3 - Unidade C
CHDIR (s : String )
Muda o subdiretório corrente para o especificado
RMDIR ( s : String )
Remove um subdiretório
15.4Unit CRT
ASSIGNCRT (VAR arq : TEXT);
Associa um arquivo do tipo texto com a console para a saída.
KEYPRESSED : Boolean;
Retorna verdadeiro se for pressionada uma tecla
WINDOW (x1, y1, x2, y2 : Byte);
Define uma área de trabalho no vídeo
CLREOL ;
Limpa todos os caracteres da linha, a partir da posição do cursor
WHEREX : byte ;
Retorna a coordenada X do cursor
WHEREY : byte ;
Retorna a coordenada Y do cursor
DELLINE ;
Elimina a linha em que está o cursor
INSLINE ;
Insere uma linha onde está o cursor
TEXTCOLOR (cor : Byte)
Seleciona a cor de texto:
0 - BLACK - PRETO 8 - DARKGRAY - CINZA ESCURO
1 - BLUE- AZUL 9 - LIGHTBLUE - AZUL CLARO
2 - GREEN -VERDE 10 - LIGHTGREEN - VERDE CLARO
3 - CYAN - CIANO 11 - LIGHTCYAN - CIANO CLARO
4 - RED -VERMELHO 12 - LIGHTRED - VERMELHO CLARO
5 - MAGENTA - MAGENTA 13 - LIGHTMAGENTA - MAGENTA CLARO
6 - BROWN - MARROM 14 - YELLOW - AMARELO
7 - LIGHTGRAY - CINZA CLARO 15 - WHITE - BRANCO
Deve-se somar 128 ao número da cor para o texto ficar piscante (BLINK).
TEXTBACKGROUND (cor : Byte)
Seleciona a cor de fundo:
0 - PRETO
1 - AZUL
2 - VERDE
3 - CIANO
4 - VERMELHO
5 - MAGENTA
6 - MARROM
7 - CINZA CLARO
HIGHVIDEO ;
Seleciona a cor de texto para alta intensidade
LOWVIDEO ;
Seleciona a cor de texto para baixa intensidade
NORMVIDEO ;
Retorna a cor de texto ao normal
TEXTMODE (modo)
Seleciona o modo de texto:
0 - 40x25 Adaptador colorido - Branco/Preto
1 - 40x25 Adaptador colorido - Colorido
2 - 80x25 Adaptador colorido - Branco/Preto
3 - 80x25 Adaptador colorido - Colorido (default)
7 - 80x25 Adaptador monocromático em Branco/Preto
256 - Para EGA/VGA 43 ou 50 linhas
SOUND (hz : Word);
Dispara o alto-falante interno a uma freqüência especificada.
Freqüência em Hertz das notas:
|
DÓ#
|
|
RÉ#
|
|
|
FÁ#
|
|
SOL#
|
|
LÁ#
|
|
|
530
|
|
595
|
|
|
707
|
|
794
|
|
891
|
|
500
|
|
561
|
|
630
|
667
|
|
749
|
|
841
|
|
944
|
DÓ
|
|
RÉ
|
|
MI
|
FÁ
|
|
SOL
|
|
LÁ
|
|
SI
|
|
DÓ#
|
|
RÉ#
|
|
|
FÁ#
|
|
SOL#
|
|
LÁ#
|
|
|
1059
|
|
1189
|
|
|
1414
|
|
1587
|
|
1782
|
|
1000
|
|
1122
|
|
1260
|
1335
|
|
1498
|
|
1682
|
|
1888
|
DÓ
|
|
RÉ
|
|
MI
|
FÁ
|
|
SOL
|
|
LÁ
|
|
SI
|
NOSOUND ;
Desativa a geração de som causada pelo procedimento sound.
|