Você está na página 1de 68

1

UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
1) INTRODUÇÃO
Uma máquina é composta de peças e engrenagens (peças mecânica), ou fios,
interruptores, motor (peças elétricas) ou diodos, transistores, capacitores (peças
eletrônicas), tudo isso podemos chamar de HARDWARE = componentes físicos.
Um programa de computador é feito de códigos, comandos escritos numa
determinada linguagem, que faz a máquina tomar decisões múltiplas, e fazer
combinações, funcões diversificadas. Podemos chamar um programa de
computador de SOFTWARE =Componentes Abstratos.

1.1. que é um Programa?


Programa são seqüências de instruções executadas pelo computador
(processador). Conjunto de símbolos, regras de sintaxe e semântica disposto de
forma sequencial.

1.2. Programa X Algoritmo


Um algoritmo é uma seqüência lógica de ações a serem executadas.
Um programa é a formalização de um algoritmo em uma determinada linguagem
de programação.

1.3. Tipos de Linguagem


1.3.1. Linguagem de Máquina: Binária, possui 2 estados (ligado e
desligado) ou 1 e 0, uso interno do processador do computador.
1.3.2. Linguagem de Baixo Nível: Utiliza mnemônicos para representar
instruções elementares. Exemplo: Linguagem de montagem
chamada Assembly. Trabalhosa e difícil para realizar múltiplas
instruções.
1.3.3. Linguagem de Alto Nível: Utiliza instruções próximas da linguagem
humana de forma a facilitar o raciocínio.
Uso Linguagem
Uso Científico Fortran
Uso Geral Pascal, C , QBasic
Uso Comercial Cobol, Clipper, Fox Pro
Uso Específico: Lisp,
Inteligência Artificial Prolog
Orientadas a Visual Basic
Eventos
Orientadas a Objetos Visual Java, Visual C, Delphi
1.4. Interpretador
Traduz simultaneamente uma linha e executa, precisa do programa principal,
exemplos: MSAccess, Dbase são programas que precisam estar juntos para
realizar a tarefa.
1.5. Compilador
Traduz todo o programa fonte, cria um executável com a união de programa
objeto e de um link -editor. Um programa executável pode rodar sozinho.

PROFESSOR BERALDO LOPES FIGUEIREDO


2
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

Léxico
(Scanner)

Analizador Sintático

Gerador de Código
Tabela de Símbolos Otimização
intermediário

Gerador de Código

Linguagem de máquina

PROFESSOR BERALDO LOPES FIGUEIREDO


3
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
1.6. Estrutura Geral de um Compilador:
1.6.1. Analizador Léxico: Reconhece no código fonte unidades básicas
de informação pertencentes à linguagem. Essas unidades de
informação recebem o nome de tokens ou unidade léxicas. Um token
é o elemento ou cadeia do programa fonte, exemplo, os
identificadores, os operadores, etc.
1.6.2. Analizador Sintático: O analizador sintático ou Parser operar sobre
a lista de tokens que recebe do scanner esses erros podem ser:
duplicidade de variáveis, colocar letras em variáveis numéricas. Estas
mensagens são chamadas Warnings.
1.6.3. Gerador de código intermediário: traduz o resultado da análise
no caso de não haver erros, para um código intermediário, visando a
portabilidade
1.6.4. Otimizador de Código: Adapta as características do código
intermediário a cada característica do processador.
1.6.5. Gerador de Código Final: Traduzir do código objeto para o código
final. Linguagem executável.

Módulo de Tratamento de Erros do Compilador


Erros Léxicos Tokens não reconhecíveis, detectados pelo scanner.
Variáveis não definidas.
Erros sintáticos São aqueles que não cumprem as regras de sintaxe
da linguagem, detectados pela parser, erro de escrita.
Erros Semânticos Detectados em alguma fase da compilação, são
aqueles que não interrompem o processo. Chamados
Warnings.
Erros Lógicos Não detectado pelo compilador, são erros de
construção do algoritmo, detectados na fase de teste.
Erros de Execução Erros de OverFlow, estouro de divisão, Loops
infinitos, divisão por zero, número negativo

PROFESSOR BERALDO LOPES FIGUEIREDO


4
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
2) LINGUAGEM DE PROGRAMAÇÃO: PASCAL
2.1. Operadores:

* Multiplicação
/ Divisão de números reais
+ Adição
- Subtração
div Divisão inteira arredondada
mod Resto da divisão

2.2. Operadores Lógicos:

= Igual
:= Atribuição
< Menor que
> Maior que
<> Diferente
<= Menor ou igual
>= Maior ou igual

2.3. Funções e Procedimentos:

Funções Padrões predefinidas


Abs(A) Valor absoluto de A (Real, inteiro)
Addr(V) Endereço da Variável
Addr(SubP) Endereço do SubPrograma (Pointer)
ArcTang(x) Arco de Tangente
Bdos(F,P) Chamada BDOS e volta ao Registrador
Bios(F,P) Chamada Bios
Chr(i) Caracter ascii do valor de i
Concat(S,..,S) Concatenar as string (unir)
Copy(S,P,L) S=Substring, P=posição, L=quantidade de Letras
Cos(x) Cos Seno
EOF(f) Fim do Arquivo teste booleano
EOLn(f) Fim da linha teste booleano
Exp(x) Exponencial de x
FilePos(F) Registro corrente do arquivo f
FileSise(f) Total de registros do arquivo f
Frac(x) Porção Fracionária de x
Hi(X) Byte superior de x
Int(x) Porção inteira de x (real)

PROFESSOR BERALDO LOPES FIGUEIREDO


5
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
KeyPressed Sinalizador de Status do teclado ( booleana)
Length(S) Tamanho numérico de uma String
Ln(x) Logaritmo natural de x
Lo(x) Byte inferior de x
MemAvail Bytes / parágrafos disponíveis
Pos(P,s) Posição da String P em S
Ptr(i) Apontador de endereço
Odd(i) Teste impar/ par para i
Ord(Sc) Valor ordinal de variável escalar
Pred(SC) Predecessor de valor escalar
Random Valor aleatório de 0 a 0.9999
Random(x) Valor aleatório de 0 a 1
Round(x) Valor arredondado do real x
Shl(x) Deslocamento para a esquerda
ShR(x) Deslocamento para a direita
Sin(x) Seno de x (real)
SizeOf(x) Tamanho de bytes da variável
Sqr(x) Quadrado de x (inteiro, real)
Sqrt(x) Extrai raiz quadrada de X ( inteiro, real)
Succ(x) Sucessor escalar de x
Swap(i) Troca de byte superior ou inferior
Trunc (x) Valor truncado de x
UpCase(x) Converte em maiúsculas uma string (caixa alta)
Procedimentos Predefinidos
Assign(F,N) Associar arquivo F cujo nome é N
BlockRead(F,D,N) Ler N blocos, para D de arquivo F
BlockWrite(F,D,N) Escrever N blocos, para D do arquivo F
Chain( f ) Encadear o arquivo f
Close( F ) Fechar o arquivo F
ClrEol Limpar a tela até onde o cursor está
ClrScr Limpar a tela
Delay(milis) Retarda em milisegundos
Delete(S,P,L) Deleta parte da String
DelLine Apaga a linha em que o cursor está posicionado
Dispose(p) Recupera a memória usado por p
Erase(F) Apaga o arquivo F do diretório
Execute(f) Executar o arquivo f
GoToXY(x,y) Mover o cursor para a coluna x, linha y
Halt Parar o programa e retornar ao sistema
HighVideo Alta intensidade no vídeo
InsLine Inserir uma linha na tela
LongSeek(F,P) Uma rotina de busca para o MS-DOS
LowVideo Baixa intensidade no vídeo
NormVideo Vídeo normal
Randomize Iniciar uma semente aleatória

PROFESSOR BERALDO LOPES FIGUEIREDO


6
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
Read(x) Ler itens a partir do teclado
ReadLn(x) Ler itens a partir do teclado numa nova linha
Rename (F) Renomear um arquivo
Reset(F) Abrir o arquivo para ler
Rewrite(F) Abrir o arquivo F para gravar
Seek(f,p) Mudar para p do arquivo f
Str(N,S) Converte o número N para string S
Val(S,N,P) Converte em número a string S, erro em P
Write(x) Escreve itens na tela
WriteLn(x) Escreve itens na tela e muda a linha

2.4. Operadores Booleanos:


Or = Ou
And = e
Not = não

2.5. Concatenação (+)


Efetua a junção de duas Strings com uma variável entre eles
Var
NumTit : integer;
Begin
Read(NumTit);
Writeln ('o Grêmio é ' + NumTit + ' Campeão da Libertadores ';

2.6. Operadores de Ponteiros

Endereço @
Referência ^

Estrutura de um Programa Pascal


Nome do Programa (Identificação)
Área de definições de variáveis
Início
Desenvolvimento (Procedimentos e Funções)
Fim

PROFESSOR BERALDO LOPES FIGUEIREDO


7
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

2.7. Áreas de um programa em Pascal:


1. Área de definição de Rótulos
2. Área de definição de constantes
3. Área de definição de tipos
4. Área de definição de variáveis
5. Área de procedimentos e funções
6. Área de comandos
Program Procura (input, output)
Label
99; ; Cabeçalho, rótulo, constante
Const
Zero=0;
Ultimo=10;
Type
Indice= 1 .. tam; Tipos
Tabela=array [indice] of integer;
Var
Tab:Tabela;
I: integer; Variáveis
Achou: Boolean;

Begin
. Corpo de Comandos e funções
.
end.

2.8. VARIÁVEIS:
2.8.1. Armazenamento na memória do tipo Literal (String):
De maneira bem simplificada, a memória de um computador pode ser vista com
um conjunto ordenado de células, sempre identificada por um número inteiro
distinto conhecido por endereço. Cada célula de memória é mais conhecida como
byte. Um byte é um agrupamento de 8 bits numerado em ordem decrescente de 7
à 0. Cada bit é capaz de guardar uma informação que pode ser 0 ou 1 (binária).
Com esses dois estados (falso ou verdadeiro) temos 2 8 = 256 estados
possíveis. Apesar do byte poder ser subdivido em bits só podemos acessar a
memória byte a byte. Para escrever ou ler qualquer informação o meio será
sempre acessado por um byte.
Essa arquitetura resultou num conjunto com um número de elementos menor que
256, surgiu uma tabela com 256 caracteres onde cada estado do byte representa
um caracter e esse estado representa-se por um número. Exemplo o caracter: A =
65 já o caracter: a = 97. Essa tabela padronizada chama-se ASCII (American
Standart Code for Information Interchange).

PROFESSOR BERALDO LOPES FIGUEIREDO


8
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
Exemplo: banana
Endereço Informação Código ASCII
0 b 98
1 a 97
2 n 110
3 a 97
4 n 110
5 a 97
Palavras acentuadas:
ë 137 í 161 Á 160
é 130 É 144 Ç 128
ã 132 Á 181 ç 135
â 133 õ 228 Ú 163
ê 136 Ã 142 Ó 162
Ó 224 Ë 211 Ê 210

2.8.2. Armazenamento na memória do tipo Literal (String):


De maneira bem simplificada, a memória de um computador pode ser vista com
um conjunto ordenado de células, sempre identificada por um número inteiro
distinto conhecido por endereço. Cada célula de memória é mais conhecida como
byte. Um byte é um agrupamento de 8 bits numerado em ordem decrescente de 7
à 0. Cada bit é capaz de guardar uma informação que pode ser 0 ou 1 (binária).
Com esses dois estados (falso ou verdadeiro) temos 2 8 = 256 estados possíveis.
Apesar do byte poder ser subdivido em bits só podemos acessar a memória byte a
byte. Para escrever ou ler qualquer informação o meio será sempre acessado por
um byte.
Essa arquitetura resultou num conjunto com um número de elementos menor que
256, surgiu uma tabela com 256 caracteres onde cada estado do byte representa
um caracter e esse estado representa-se por um número. Exemplo o caracter: A =
65 já o caracter: a = 97. Essa tabela padronizada chama-se ASCII (American
Standart Code for Information Interchange).
2.8.3. Tabela ASCII
32 [space] 64 @ 96 `
33 ! 65 A 97 a
34 " 66 B 98 b
35 # 67 C 99 c
36 $ 68 D 100 d
37 % 69 E 101 e
38 & 70 F 102 f
39 ' 71 G 103 g
40 ( 72 H 104 h
41 ) 73 I 105 i
42 * 74 J 106 j
43 + 75 K 107 k
44 , 76 L 108 l
45 - 77 M 109 m

PROFESSOR BERALDO LOPES FIGUEIREDO


9
U
Urrccaam
mpp SSããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
46 . 78 N 110 n
47 / 79 O 111 o
48 0 80 P 112 p
49 1 81 Q 113 q
50 2 82 R 114 r
51 3 83 S 115 s
52 4 84 T 116 t
53 5 85 U 117 u
54 6 86 V 118 v
55 7 87 W 119 w
56 8 88 X 120 x
57 9 89 Y 121 y
58 : 90 Z 122 z
59 ; 91 [ 123 {
60 < 92 \ 124 |
61 = 93 ] 125 }
62 > 94 ^ 126 ~
63 ? 95 _ 127 ·
160 [space] 192 À 224 à
161 ¡ 193 Á 225 á
162 ¢ 194 Â 226 â
163 £ 195 Ã 227 ã
164 ¤ 196 Ä 228 ä
165 ¥ 197 Å 229 å
166 ¦ 198 Æ 230 æ
167 § 199 Ç 231 ç
168 ¨ 200 È 232 è
169 © 201 É 233 é
170 ª 202 Ê 234 ê
171 « 203 Ë 235 ë
172 ¬ 204 Ì 236 ì
173 - 205 Í 237 í
174 ® 206 Î 238 î
175 ¯ 207 Ï 239 ï
176 ° 208 Ð 240 ð
177 ± 209 Ñ 241 ñ
178 ² 210 Ò 242 ò
179 ³ 211 Ó 243 ó
180 ´ 212 Ô 244 ô
181 µ 213 Õ 245 õ
182 ¶ 214 Ö 246 ö
183 · 215 × 247 ÷
184 ¸ 216 Ø 248 ø
185 ¹ 217 Ù 249 ù
186 º 218 Ú 250 ú
187 » 219 Û 251 û
188 ¼ 220 Ü 252 ü

PROFESSOR BERALDO LOPES FIGUEIREDO


10
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
189 ½ 221 Ý 253 ý
190 ¾ 222 Þ 254 þ
191 ¿ 223 ß 255 ÿ
· obs: These characters aren't supported by Microsoft Windows.

2.8.4. Armazenamento do Tipo Integer (inteiro):


Um byte (256 estados) é impossível para armazenar os dados do tipo inteiro.
Utiliza-se dois bytes para armazenar um número inteiro:
28 x 28 = 216 65.536 possibilidades (-32.768 até 32.767).
Algumas linguagens de Programação fornecem mecanismo para trabalhar
números inteiros longos (estendidos) com quatro bytes.
(-2.147.483.648 até 2.147.483.647).

2.8.5. Armazenamento do Tipo Real :


Contém um número infinito de elementos pela mesma razão precisa ser limitado.
Por essa razão utiliza-se 4 bytes e no REAL ESTENDIDO para aplicações
científicas utiliza-se 8 bytes.

2.8.6. Conceito e utilidade das Variáveis:


As informações são guardadas na memória do computador, para acessar
individualmente a cada uma dessas informações. Utiliza-se uma variável.

A variável possui três atributos:


Nome
Tipo
Informação
Toda a variável possui um nome, para diferenciá-la das demais, deve sempre
começar por um caracter que seja Letra, não deve conter símbolos com exceção
do sublinhado ( _ ).

PROFESSOR BERALDO LOPES FIGUEIREDO


11
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

Categorias de Variáveis: Tipo Escalar


Integer Números inteiros
Real Números reais com vírgulas
Boolean Valores lógicos TRUE e FALSE
Char Tabelas ASCII
Tipo Estruturado
String Cadeia de Caracteres
Array Conjunto de elementos do mesmo tipo
Record Conjunto de elementos de tipos diferentes
Set Conjunto de elementos
File Arquivo de registros
Text Arquivo de texto
Tipo Apontador
Pointer Referência para uma variável dinâmica

2.8.7. TIPOS DE DADOS ESCALARES:


2.8.7.1. INTEGER
Tipo Faixa de Valores
Shortint - 128 até 127
Integer -32.768 até 32.767
LongInt -2.147.483.648 até 2.147.483.647
Byte 0 até 255
Word 0 até 65.535

2.8.7.2. REAL
Tipo Faixa de Valores
Real 2.9e -39 até 1.7e38
Single 1.5e -45 até 3.4e 38
Double 5.0e -324 até 1.7e 308
Extended 3.4e -4932 até 1.1e 4932
Comp -9.2e 18 até 9.2e 18
2.8.7.3. BOOLEAN
Tipo BOOLEAN representa os valores lógicos TRUE e FALSE.

2.8.7.4. CHAR
Representa um único Caractere pertencente à tabela ASCII.

2.8.7.5. TIPO ENUMERATED


O tipo escalar enumerado é um escalar ordenado onde os valores que as
variáveis deste tipo podem assumir são descritas através de uma lista de
valores. Ex:
Var
Dias: (Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sábado);

PROFESSOR BERALDO LOPES FIGUEIREDO


12
U
Urrccaam
mpp SSããoo GGaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
2.8.7.6. TIPO SUBINTERVALO (SUBRANGE)
É um subconjnto de valores com a seguinte sintaxe:
Var
NumDiasMes : 1..31;
Letras: ' A' .. 'z';
Ano : 1900 .. 2020;
2.9. CONSTANTES:
Uma constante é um valor que não pode ser alterado durante a execução do
programa e podem ser: Integer, real, string, array e Record.
Sintaxe:
Const
Dias = 7 ; {Tipo integer}
Esporte = 'Futebol'; {tipo String}

2.9.1. Constantes Tipadas:


Neste caso predefinimos o tipo exemplo:
Const
Dias : Integer = 7;
Esporte: String[7] = 'Futebol';
2.10. TYPE (DECLARAÇÃO DE TIPOS)
Uma declaração de tipo , permite que se associe um identificador à descrição
de um tipo.
Exemplo:
Program Uso_Tipo;
Type
TDias = (Dom, Seg, Ter, Quar, Quin, Sex, Sab);
TMes = (Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez);
Var
Dias : TDias;
Mês : TMes;
Begin
...
End;

2.11. TIPOS DE ESTRUTURA DE UM PROGRAMA:


Tipos de Estruturas Procedimento
Seqüencial Inicia e vai até o fim sem interrupções
Condicional Inicia e tem decisões sobre dois ou mais caminhos a
(decisão) seguir (uso do IF ou do CASE.
Repetição (Laços) Inicia e retorna quantas vezes for necessário ( uso de
laço finito : For /Next ou laço infinitos : Repeat...Until ou
While ... end)
Mista Junção de duas ou mais estruturas acima.

PROFESSOR BERALDO LOPES FIGUEIREDO


13
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

2.12. COMANDOS DE ENTRADA E SAÍDA:


Write e writeln: Comandos de saída do Pascal , o acréscimo do LN no final é
apenas para o compilador executar e trocar de linha.
Write (' Olá esta linha sairá na tela do computador ');

Read e Readln: comandos de entrada do pascal, o acréscimo do LN no final é


para aexecutar e trocar de linha.

2.13. COMANDO ESTRUTURADOS (COMPOSTOS)


São comandos que são colocados em conjunto. No pascal para cada Begin
existe um End. Exemplo:
Begin
Begin
Begin
...
End;
End;
End.

2.14. COMANDOS CONDICIONAIS


2.14.1. IF - THEN - ELSE
Esse comando permite efetuarmos um desvio bidirecional na lógica do
programa, segundo uma determinada condição booleana
Exemplo:
If a = b then
Begin
C:= a;
End;
Ou
If a = b then
Begin
C:= a;
End
Else
C:=b;
End;

2.14.2. CASE... OF... ELSE... END;


Esse comando permite efetuarmos um desvio Multidirecional na lógica do
programa, segundo uma determinada condição booleana
Consiste de uma lista de declarações que satisfaz a condição de um seletor
de expressões, se nenhuma parte da lista satisfizer ao seletor executa os
comandos do sub-comando else. Para o seletor serão válidos os tipos
definidos, tipo Inteiros ou LongInt. A sintaxe do comando é: CASE {seletor} OF
{Expressão 1}: {comando da expressão 1}; {Expressão 2}: {comando da

PROFESSOR BERALDO LOPES FIGUEIREDO


14
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
expressão 2}; {Expressão n}: {comando da expressão n} ELSE {comando};
end;. Ex.:

begin
{ ... comandos iniciais ... }
case x of
1: { ... Bloco para x = 1 ... }
2, 3: { ... Bloco para x = 2 ou X = 3... }
4..6: { ... Bloco para 4 <= x <= 6 ... }
else
{ ... Bloco para x < 1 ou x > 6 ... };
end;
end;
2.15. COMANDO DE REPETIÇÃO:
2.15.1. repeat... until;
Repete um determinado bloco de declarações até a condição booleana do
subcomando until ser satisfeita. A sintaxe do comando é: REPEAT {comandos}; until
{condição};. Ex.:

begin
{ ... comandos iniciais ... }
x := 0;
repeat
x := x + 1
until (x = 2);
end;

2.15.2. for... to (downto)... do...;


Incrementa em 1 uma determinada variável inteira, repetindo um bloco de comandos,
até que esta atinja o valor final do intervalo, o subcomando downto realiza o incremento
reverso. A sintaxe do comando é: FOR {variável} := {valor inicial} to (downto) {valor final}
do {bloco de comandos};. Ex.:
{ ... comandos iniciais ... }
for i := 1 to 10 do begin { Executa o [comandos A] para i = 1,2,3,4,5,6,7,8,9 e 10
{ ... Comandos A ... }
end;
for s := 10 downto 1 do begin {Executa s [comandos B] para s= 10, 9, 8,7,6,5,4,3,2 e 1}
{ ... Comandos B... }
end;

2.15.3. while... do...;


Repete um bloco de comandos enquanto que determinada condição booleana seja

PROFESSOR BERALDO LOPES FIGUEIREDO


15
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
satisfeita. A sintaxe do comando é: WHILE {condição} DO {bloco de comandos};. Ex.:

begin
{ ... comandos iniciais ... }
while i := 1 do begin { Repete o [Bloco de comandos] enquanto i = 1
{ ... Bloco de comandos ... }
end;

2.15.4. Comando Continue e Break


Continue: Desvia para onde está o comando, esse comando só funciona
dentro de um laço.
Break: Causa saída incondicional de um laço.
(Não fazem parte dos comandos básicos e padrão do Pascal tradicional).

2.16. Comando HALT:


Termina a execução de um programa feito no Pascal.

3) ARRAYS (VETORES E MATRIZES)


Definição : Um array é um tipo de dado estruturado consistindo de um número fixo
de componentes. É um tipo de variável chamada de compostas homogêneas,
são divididas em duas categorias. Unidimensionais : Vetores. Multidimensionais:
Matrizes.
No pascal a sintáxe é: (Criando Tipos)
Type
Tvetor = array [1..10] of integer; {Vetor}
TMatriz = array [1..10,1..10] integer; {Matriz}
Var
Vetor: Tvetor;
Matriz_1, Matriz_2: TMatriz;
Criando diretamente nas variáveis:
Var
Vetor: array [1..10 ] of integer;
Matriz: array [ 1.. 10, 1 .. 10 ] of real;
Vetor2, vetor3 : [1..10] of integer;
Vetor:
1 2 3 4 5 6 7 8 9 10
Matriz:
1,1 1,2 1,3 1,4
2,1 2,2 2,3 2,4
3,1 3,2 3,3 3,4
4,1 4,2 4,3 4,4

PROFESSOR BERALDO LOPES FIGUEIREDO


16
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
4) MANIPULAÇÃO DE REGISTROS (RECORD)
É um tipo de variável chamada de compostas heterogêneas. São
semelhantes aos índices de uma Array. Eles permitem acessar individualmente
cada informação.
Exemplo:
Sintaxe:
Type Reg_Aluno = Record;
Nome: string(40);
Matricula: Integer;
Notas: array [ 1 .. 3 ] of real;
End;

Var
Aluno1: Reg_Aluno;
Aluno2: Reg_Aluno;
A : Integer;
Begin
..
preenche nome e matrícula
Preenchendo as notas:
For a := 1 to 3 do begin
Writeln(aluno1.Nome);
Readln(Aluno1.Notas[a]);
End;
End.
4.1. Comando With:
With Aluno1 do
For a := 1 to 3 do begin
Writeln(Nome);
Readln(Notas[a]);
End;
End;

PROFESSOR BERALDO LOPES FIGUEIREDO


17
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

5) PROCEDIMENTOS (PROCEDURES)
São Subprogramas que funcionam dentro de outro programa, é uma estrutura
autônoma.
Exemplo:
Program Encontro;
uses Crt;
var
Nome:String[40];

Procedure Elogio;
begin
clrscr;
writeln('Bom dia ' + nome + ' seja bem vindo!');
end;

{Programa Principal}
Begin
write( ' informe o seu nome: ' );
readln(nome);
Elogio;
readkey;
end.

6) FUNÇÕES (FUNCTION)
A diferença de uma function para uma procedure, é que a function retorna
parâmetros, sempre ela devolve um valor, existe um retorno, também deve-se
explicitar o tipo de dado que está sendo manipulado.
Exemplo de um Programa:
Sintaxe:
program Calc_Maior;
uses crt;
var
va,a1,b1,c1:integer;

{************** function **************}


function calcula(a,b,c:integer):integer;
var
maior:integer;
begin
maior:=a;
if b > maior then maior:=b;
if c > maior then maior:=c;
calcula:=maior;
end;

PROFESSOR BERALDO LOPES FIGUEIREDO


18
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
{**************************************}
{******** Programa Principal **********}
begin
clrscr;
write ('entre com os valor 1: ');readln(a1);
write ('entre com os valor 2: ');readln(b1);
write ('entre com os valor 3: ');readln(c1);
va:=calcula(a1,b1,c1);
writeln(va);
readkey;
end.

7) PROGRAMAS EXEMPLOS:

7.1. Program CalcMedia;


Uses Crt; { Usa plataforma Carater}
Var
Num_aluno:Integer;
Nota1, Nota2, Media:Real;

Begin
clrscr; {ClearScrean = Limpa a tela do monitor}
write(' Informe o numero de alunos: ' ); {write= Escreva}
Readln(Num_aluno); {ReadLn=Leia e avance uma linha}
writeln (' Informe a nota 1:');
readln(Nota1);
writeln (' Informe a nota 2:');
readln(Nota1);
Media:=(nota1+nota2)/2 ;
writeln(' Media é : ',Media:2:2); {2:2 = numero de casas antes e depois do ponto}
readkey; {Leia uma tecla}
end.

7.2. Programa que conta a(s) letra(s) A de um nome digitado


program aula1;
uses crt;
var a,ct:integer;
n:string[40];
begin
clrscr;
gotoxy(2,2); { GoToxy(coluna,linha)->Posiciona o cursor }
write('Digite:');
readln(n);
for a:=1 to length(n) do
begin

PROFESSOR BERALDO LOPES FIGUEIREDO


19
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
if (copy(n,a,1)='a') or (copy(n,a,1)='A') then
begin
ct:=ct+1;
end;
end;
gotoxy(10,3);
write('Existe(m) ');
highvideo; {Letra no Video Brilhante intenso}
write(ct);
lowvideo; {Letra no video baixa intensidade}
write(' letra(s) A');
readln; { Também espera uma tecla a ser tocada}
end.

7.3. Programa que conta somente as letras de uma frase digitada


program aula2;
uses crt;
var a,ct:integer;
nome:string[60];
begin
clrscr;
write('Digite um nome: ');
readln(nome);
for a:=1 to length(nome) do
begin
if (copy(nome,a,1) <> ' ') then ct:=ct+1;
end;
write('Total de letra(s): ', ct);
readln;
end.

7.4. Programa que recebe 5 numeros e imp rime inversamente na ordem


em que foram digitados
program aula3;
uses crt;
var a,ct:integer;
num:array[1..5] of real; {Vetor de 1 at‚ 5 elementos}
begin
clrscr;
write('Digite os numeros: ');
for a:=1 to 5 do
begin
gotoxy(24,1);
clreol; {limpa a linha em que esta o cursor}
read(num[a]);

end;

PROFESSOR BERALDO LOPES FIGUEIREDO


20
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
writeln;
for a:=5 downto 1 do
begin
write('Vetor Numero ', a, '=>');
writeln(num[a]:6:0);
end;
readln;
readln;
end.

7.5. Programa que recebe 5 numeros reais dentro de um Vetor e


imprime o maior. Uso de cores
Numero das cores:
0-preto 1-azul 2-verde 3-ciano 4-vermelho
5-magenta 6-marron 7-cinza claro 8-cinza escuro 9-azul claro
10-verde claro 11-ciano claro 12-vermelho claro 13-magenta claro
14-Amarelo 15-Branco}

program aula4;
uses crt;
var a:integer;
maior:real;
n:array [1..5] of real;
begin
clrscr;
textcolor(12);
gotoxy(2,2); { GoToxy(coluna,linha)->Posiciona o cursor }
write('Digite:');
for a:=1 to 5 do
begin
gotoxy(12,2);
clrEol;
textbackground(blue);
textcolor(11);
read(n[a]);
textbackground(black);
end;
for a:=1 to 5 do
begin
if a=1 then
begin
maior:=n[a];
end;
if n[a] > maior then
begin
maior:=n[a];

PROFESSOR BERALDO LOPES FIGUEIREDO


21
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
end;
end;
highvideo;
textcolor(14);
write('O maior numero digitado foi: ');
writeln(maior:10:2); {imprime o numero com 10 digitos e dois decimais}
readkey;
end.

7.6. Programa que Conta os "SS" de 3 nomes digitado.


Program SS;
uses crt;
var a,b,c:integer;
s:String;
begin
clrscr;
for a:=1 to 3 do begin
write('Digite um nome: ');
readln(s);
for b:=1 to length(s) do begin
if (copy(s,b,2)='ss') or (copy(s,b,2)='SS') then begin
c:=c+1;
end;
end;
end;
writeln('Existem ', c, ' incidencias com SS ou ss nos nomes digitados.');
end.

7.7. Programa que usa Str(n,s) e Val(s,n,Code).


n=Numero, s=string.Val=Converte uma string em
numero e Str= Converte um numero em string.}
Program Aula6;
uses Crt;
var rn1,rn,n,code:Integer;
rs1,s,rs:string;
begin
clrscr;
s:='24';
n:=12;
Val(s,rn,Code); {Rn assume o valor de s.}
Str(n,rs); {Rs assume como string o numero de n}
rs1:=rs+s;
Rn1:=rn+n;
Writeln('O numero e: ',n,' e a string e: ', s);
writeln(' A soma dos numeros sao: ',Rn1);

PROFESSOR BERALDO LOPES FIGUEIREDO


22
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
write(' A soma das String sao: ', Rs1);
readkey;
end.

7.8. Programa que usa Matrizes


program mattrizes;
uses crt;
const
Matr:array[1..2,1..2] of string = (('cavalo','egua'),('Touro','Vaca'));
var
a,b:integer;
begin
clrscr;
writeln(matr[1,1]);
writeln(matr[1,2]);
writeln(matr[2,1]);
writeln(matr[2,2]);
readkey;
end.

7.9. Program infinito;


uses crt;
var
a:string;
begin
while (a<>'sair') do {enquanto a <> de Sair e o la‡o continuara}
begin
clrscr;
write('Digite um nome: ' );
readln(a);
end;
end.

7.10. PROGRAMA QUE RECEBE 6 NÚMEROS DENTRO DE UM VETOR


E ORDENA-OS.

Program OrdenaVet;
uses crt;
var
Vet1:array[1..6] of longint;
x,y, pega:longint;
begin
clrscr;
for x:=1 to 6 do begin
gotoxy(0,x);
write('-Digite o n§: ');readln(vet1[x]);
end;

PROFESSOR BERALDO LOPES FIGUEIREDO


23
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
for x:=1 to 6 do begin
for y:=1 to 6 do begin
if vet1[x] < vet1[y] then begin
pega:=vet1[x];
vet1[x]:=vet1[y];
vet1[y]:=pega;
end;
end;
end;
x:=0;
for x:=1 to 6 do begin
gotoxy(40,x+2);
write(x ,' - ', vet1[x]);
end;
readkey;
end.

8) A pilha e os ponteiros
Ponteiros:
Um ponteiro é uma variável que contém o endereço de memória.
de uma outra variável ou estrutura de dados. Usamos o sinal ^ como sendo
ponteiro para ... (no pascal)

A maioria das variáveis que você declara no turbo pascal é


estática, ou seja, a memória é alocada para elas no começo ao fim do programa.
A pilha, por outro lado, utiliza tipo de dados dinâmicos conhecidos como
ponteiros. As variáveis de ponteiro são dinâmicas porque você pode cria-las e
dispor delas, durante a execução de um programa. Em resumo, diferentes
variáveis de ponteiros podem usar e reutilizar a memória na pilha.

O uso de variáveis de ponteiro na pilha traz duas vantagens


importantes. Primeiro, expande o espaço de dados total disponível para um
programa. O segmento de dados está limitado a 64 kbytes, mas a pilha está
limitada somente à área de memória ram do seu computador.

A segunda vantagem de usar as variáveis de ponteiro na pilha é


que elas permitem que o seu programa seja executado com menos memória. Por
exemplo um programa pode ter duas estruturas de dados bem grandes, mas

PROFESSOR BERALDO LOPES FIGUEIREDO


24
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
somente uma delas é usada, de cada vez. Se essas estruturas de dados forem
declaradas globalmente , elas residirão no segmento de dados e ocuparão a
memória o tempo todo. Entretanto se essas estruturas de dados forem definidas
como ponteiros, poderão ser posicionadas na pilha e retiradas quando necessária,
reduzindo, assim os requisitos de memória do seu programa.

8.1. A variável de ponteiro


A variável de ponteiro não guarda dados da mesma maneira que
as outras variáveis. Em vez disso, ela guarda o endereço que aponta para uma
variável localizada na pilha. Vamos supor que você tenha uma variável de
ponteiro denominada px que guarda o endereço de uma variável tipo integer .
No exemplo abaixo o uso simples de uma variável de ponteiro.

Program pointerdemo;
Uses crt;
Var
i:^integer;
j:integer absolute i;
Type
str4 = string[40];
Function inttohex(i: word): str4;
Var
hexstr: string[8];
b: array [1..2] of byte absolute i;
bt: byte;

function translate(b: byte): char;


begin
if b< 10 then
translate := chr(b+48)
else
translate := chr(b+55);
end;
begin
hexstr := '';
hexstr := hexstr + translate(b[2] shr 4);
hexstr := hexstr + translate(b[2] and 15);
hexstr := hexstr + translate(b[1] shr 4);
hexstr := hexstr + translate(b[1] and 15);
inttohex := hexstr;
end ;
begin

PROFESSOR BERALDO LOPES FIGUEIREDO


25
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
clrscr;
new (i);
i^ := 100;
writeln('o valor de i é: ',inttohex(j));
writeln('o valor para o qual i aponta é: ',i^);
dispose (i);
writeln;
write ('pressione enter ... ');
Readkey;
end.

O ^ (circunflexo) colocado antes do tipo de dado na definição ao


turbo pascal define quer i é uma variável de ponteiro.
I: ^ integer;

Quando o programa é executado a pilha encontra-se vazia, antes


de usar o ponteiro i, você deve utilizar a instrução new(i), para solicitar ao turbo
pascal que atribua um endereço da pilha ao ponteiro i. Dispose(i) , que aparece
próximo ao final do programa é o oposto de new(i). O dispose retira efetivamente
uma variável da pilha.

8.2. Mark e release


Mark(p: pointer) = armazena o endereço do topo da pilha no
ponteiro p.
Release(p: pointer) = solicita a memória alocada pelo comando
mark( ).
Existe uma alternativa quanto ao uso de new e dispose para alocar
memória dinamicamente . O mark e release em vez de deixar buracos na pilha
como fazem o new e o dispose, mark e release cortam uma extremidade inteira da
pilha a partir de um determinado ponto em diante. Esse processo é demonstrado
no programa a seguir:

Program heaprelease;
Uses crt;

Type
atype = array [1..100] of char;
Var
heaptop: ^word;
a1, a2, a3:^atype;
Begin
Clrscr;
Mark(heaptop);
Writeln('memoria livre inicial: ', memavail);
Writeln;
Writeln('=======================');
New(a1);

PROFESSOR BERALDO LOPES FIGUEIREDO


26
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
Writeln('memoria livre depois de alocar a1: ', memavail);
New(a2);
Writeln('memoria livre depois de alocar a2: ', memavail);
New(a3);
Writeln('memoria livre depois de alocar a3: ', memavail);
Writeln;
Writeln('=======================');
Release(heaptop);
Writeln('memoria livre depois de libera‡ao:', memavail);
Writeln;
Write('pressione enter ... ');
Readkey;
End.

Esse programa aloca três variáveis de ponteiro – a1, a2, a3 – e


utiliza a função padrão memavail para mostrar a área de memória livre disponível.
Memavail é uma função tipo longint (inteiro longo) que retorna a área total de
memória não alocada da pilha.
Dispose e release não podem ser usados simultaneamente no
mesmo programa.

8.3. Getmem e freemem


Um terceiro método de alocação de memória dinâmica é getmem e
freemem. Esse é muito parecido com o new e dispose no sentido que aloca e
desloca memória com uma variável por vez. A grande vantagem de getmem e
freemem é que você pode especificar a área da memória que deseja alocar
independente do tipo de variável que irá utilizar. Exemplo: supondo que você irá
alocar 100 bytes para uma variável integer com a seguinte instrução.
Getmem(i,100);
As variáveis alocadas com getmem são desalocadas com
freemem como mostramos a seguir:
Freemem(i,100);
Obs: quando usar getmem, não use dispose para liberar a memória
use freemem.

Listas ligadas

dado1 dado2 dado3


Nil

Ponteiro Ponteiro Ponteiro

A criação de uma lista ligada em um programa do turbo pascal


exige um esforço considerável. Mesmo assim é um aprendizado valioso, uma vez
que várias rotinas (programas) avançadas de localização e ordenação usam as

PROFESSOR BERALDO LOPES FIGUEIREDO


27
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
listas ligadas para aumentar sua velocidade e expandir ao máximo o uso da
memória. No exemplo que se segue usamos um ponteiro de referência
antecipada que informa ao turbo pascal onde ele pode encontrar o próximo item
de dado da lista . Colocamos o nome deste ponteiro de next. Custptr aponta para
o ponteiro custrec cujo campo denominamos next.
O exemplo a seguir mostra uma lista de ligações simples cria e
trata uma lista de nomes e endereços de clientes.

Program simplelista;
Uses crt;
Type
custptr = ^custrec;
custrec = record
nome:string[20];
endereco: string[40];
cidade:string[20];
estado:string[2];
next:custptr;
end;
Var
firstcust,
prevcust,
currentcust: custptr;
ch: char;
{===============================}
Procedure addrecord;
{===============================}
procedure enterdata;
begin
write('digite o nome do cliente:');
readln(currentcust^.nome);
write('digite o endereço:');
readln(currentcust^.endereco);
write('digite a cidade:');
readln(currentcust^.cidade);
write('digite o nome do estado:');
readln(currentcust^.estado);
end;
{===============================}
Begin
clrscr;
if firstcust = nil then
begin
new(currentcust);
enterdata;
firstcust := currentcust;
currentcust^.next := nil;

PROFESSOR BERALDO LOPES FIGUEIREDO


28
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
end
else
begin
prevcust := currentcust;
new(currentcust);
enterdata;
prevcust^.next := currentcust;
currentcust^.next := nil;
end;
End;
{===============================}
Procedure listrecords;
var
cust : custptr;
begin
cust := firstcust;
while cust <> nil do begin
with cust^ do
writeln(nome, '-',endereco, '-',cidade, '-',estado);
cust := cust^.next;
end;
writeln;
write('pressione enter ... ');
Readkey;
End;
{============ programa principal ================}
Begin
firstcust := nil;
repeat
clrscr;
repeat
write( 'a - adicionar, l - listar, q - sair');
writeln;
ch := readkey;
if ch = #0 then
ch := readkey;
writeln;
until ch in [ 'a', 'l', 'q'];
if ch = 'a' then
addrecord
else if ch = 'l' then
listrecords;
until ch = 'q';
End.

PROFESSOR BERALDO LOPES FIGUEIREDO


29
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
Manipulação de inserção e remoção de algumas listas:
Lifo: last in, fist out (ultimo a entrar, primeiro a sair).
Fifo: first in, first out (primeiro a entrar, primeiro a sair).

8.4. Pilhas: critério lifo (inclui e exclui pelo topo)


8.5. Filas: critério fifo (inclui atrás e exclui na frente)
8.6. Deque: critério híbrido mesclando lifo e fifo.

pilha
topo

Base

Fila

8.7. Grafos:
Um grafo g = (vg, ag) é constituído de um conjunto finito, não - vazio de vértices vg
e um conjunto de arestas ag. Se as arestas são pares ordenados (v,w) de vértices
o grafo é dito orientado. Se as arestas são pares não ordenados o grafo é dito
não - orientado. No computador um grafo é representado utiliza-se uma matriz de
adjacência.

8.8. Árvores
Árvore é um tipo de grafo orientado e é uma estrutura de dados não linear, que
possui um número finito de elementos (nodos). Representa outros tipos de relação
de dados, como a relação de hierarquia e composição.
Quando usar:
Aplicações mais complexas do que as listas. Inúmeros problemas podem ser
modelados através de árvores. Melhor tratamento computacional. São mais
genéricos.
raiz
A

folha B D
C pai (grau= 2)

E G filho
F

8.9. Propriedades de uma árvore:


- Não contém circuítos
- Existem exatamente um vértice, chamado raiz, que não é adjacente a nenhum
vértice.
- Todos os outros vértices são adjacentes de algum vértice
- Existe um caminho da raiz para cada vértice

PROFESSOR BERALDO LOPES FIGUEIREDO


30
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
Uma coleção de árvores é chamada floresta

Esquerda Direit
a
1 2 7
2 3 4
1 3 0 0
4 5 6
2 7 5 0 0
6 0 0
8 7 8 10
3 4 8 0 9
9 0 0
5
10 0 0
6

Acima uma árvore e sua representação.

Sintaxe em pascal:
Type
Aponta_nodo = ^ nodo
Nodo = record
Esq : aponta_nodo;
Dado : informação;
Dir : aponta_nodo;
End;

9) Programação modular:

A programação modular é uma técnica que tem por objetivo simplificar o


desenvolvimento, dividindo-o em partes. Um módulo é uma parte de um programa.
Uma função perfeitamente definida, no caso de determinados comandos e

PROFESSOR BERALDO LOPES FIGUEIREDO


31
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
funções de uma linguagem que faz uma tarefa. Algumas das características de
módulos são:
• Conjunto de comandos com tarefas determinadas.
• Possui um ponto de entrada e um ponto de saída.
• Um módulo pode possuir outros módulos.
• Deve possuir de 10 a 100 comandos.

Em termos funcionais existem dois tipos de módulos:

10) Rotina (procedimento):


Módulo que, a partir de informações de entrada, executa uma tarefa e gera
informações de saída. Uma chamada de rotina é feita através de seu nome
(procedures).

11) Função:
Módulo que, a partir de informações de entrada, executa e gera apenas uma
informação de saída. Toda função possui um nome e parâmetros, que são
valores associados ao que a função irá fazer e devolver como resultado.

Exemplo: função (parâmetros: tipo): tipo;

12) Acoplamento:
Grau de interação entre módulos, é o inter-relacionamente entre um módulo e
outro. Quanto maior o acoplamento, menor a coesão e mais difícil a manutenção
do programa.

13) Coesão:
Grau de relacionamento dos elementos dentro do próprio módulo, quanto maior o
relacionamento mais coeso está o módulo e melhor é a estrutura do programa.

PROFESSOR BERALDO LOPES FIGUEIREDO


32
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

14) Implementação modular top – down:


Todo sistema deve possuir uma estratégia (implementação, de teste, de
depuração, etc), existe uma ampla variedade de estratégias de implementação,
dentre as quais, podemos citar as mais comuns:
Top – down – consiste em implementar projetos (sistemas) começando pelos
módulos do topo e depois ir descendo para os módulos inferiores.

MENU
PRINCIPAL

Inclusão Exclusão Consultas

incluir Alterar Excluir Cancel Individual Geral

Acima um exemplo de top-down onde primeiro se resolve os módulos de cima


para baixo e da esquerda para a direita (o inverso do top-down é bottom-up
(baixo para cima)).

15) Exemplos práticos para objeto de estudo:


15.1. Avançado - ponteiros

Um endereço de memória é um número que serve para identificar um byte


específico da memória.
Podemos imaginar a memória como sendo um vetor onde cada elemento é um
byte, acessível através de um número que é seu endereço.
Normalmente usamos variáveis para armazenar dados (caracteres, inteiros, reais,
etc.). Se um endereço é também um número, nada impede que possamos criar
também variáveis para armazenar endereços de memória. Estas variáveis são
denominadas ponteiros.
Antes de se utilizar ponteiros, precisamos definir seu tipo.
Type
nome da variavél ponteiro = ^tipo de dados;
* sendo tipo de dados um record, um vetor, uma variável, outro tipo, etc.
Exemplo:
Type
dados = record
nome:string;
idade:integer;

PROFESSOR BERALDO LOPES FIGUEIREDO


33
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
end;
ptrdados = ^dados;
Após definido um tipo, pode-se criar variáveis desse tipo.
Exemplo:
Var pdados:ptrdados;
* se uma variável ponteiro p armazena um endereço de memória qualquer, então
p^ nos dá o conteúdo armazenado naquele endereço.
Exemplo:
Pdados^ - é um record
pdados^.nome - é uma string de caracteres
pdados^.idade - é um número inteiro

15.1.1. Funções pascal para ponteiros


15.1.1.1. New (tipo ponteiro);
aloca uma área de memória e guarda seu endereço em p.
15.1.1.1.1. Dispose (tipo ponteiro);
serve para liberar a área de memória cujo endereço está em
p.
* sendo que uma área de memória alocada por new, só estará disponível de novo,
se for usado o comando dispose ou quando a utilização desse área for terminada.

15.1.2. Avançado - estruturas de dados - pilha

Uma pilha é uma lista linear onde as operações de inserção e retirada são
efetuadas apenas em uma extremidade da lista linear, ou seja:
- a inserção de um elemento x torna-o o último elemento da lista;
- a retirada é sempre efetuada sobre o elemento an.
Devido às características das operações da pilha, o último elemento a ser inserido
será o primeiro a ser retirado. Estruturas desse tipo são conhecidas como "lifo"
(last in, first out).
15.1.2.1. Rotinas para pilha
Type
tipo = integer;
pilha = record
p:array [1..20] of tipo;
base, topo:integer;
maxtopo:integer;
end;

procedure inicializapilha(var p:pilha);


begin
p.base:=0;
p.topo:=0;

PROFESSOR BERALDO LOPES FIGUEIREDO


34
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
p.maxtopo:=20;
end;

Procedure inserepilha(var p:pilha;valor:tipo);


begin
if p.topo = p.maxtopo
then writeln('overflow')
else begin
p.topo:=p.topo +1;
p.p[p.topo]:=valor;
end;
end;

Function pilhavazia(var p:pilha):boolean;


begin
if p.topo = 0
then pilhavazia:=true
else pilhavazia:=false;
end;

Function topopilha(p:pilha):tipo;
begin
if not (pilhavazia(p))
then topopilha:=p.p[p.topo];
end;

Function removepilha(var p:pilha):tipo;


begin
if p.topo = 0
then writeln('underflow')
else begin
removepilha:=p.p[p.topo];
p.topo:=p.topo - 1;
end;
end;

15.1.3. Avançado - estruturas de dados - fila

Uma fila é uma lista linear onde as operações de inserção são efetuadas apenas
no final da lista e as retiradas apenas no início da lista linear, ou seja:
- a inserção de um elemento x torna-o o último elemento da lista linear;
- a retirada é sempre efetuada sobre o elemento a1.
Devido às características das operações da fila, o primeiro elemento a ser inserido
será o primeiro a ser retirado. Estruturas desse tipo são conhecidas como "fifo"
(first in, first out).

PROFESSOR BERALDO LOPES FIGUEIREDO


35
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
15.1.3.1. Rotinas para fila
Const tamanho = 20
type fila = record
f: array[1..tamanho] of integer;
frente, tras, maxfila: integer;
end;

procedure initfila(var f: fila);


begin
f.frente := 0;
f.tras := 0;
f.maxfila := tamanho;
end;

Procedure inserefila(var f: fila; valor: integer);


var pos: integer;
begin
pos := (f.tras mod f.maxfila) + 1;
if pos = f.frente
then writeln('overflow')
else begin
f.tras := pos;
f.f[f.tras] := valor;
if f.frente = 0
then f.frente := 1;
end;
end;

Function removefila(var f:fila): integer;


begin
if f.frente = 0
then writeln('underflow')
else begin
removefila := f.f[f.frente];
if f.frente = f.tras
then begin
f.frente := 0;
f.tras := 0;
end
else f.frente:=f.frente mod f.maxfila + 1;
end;
end;

Function filavazia(f: fila): boolean;


begin
if f.frente = 0

PROFESSOR BERALDO LOPES FIGUEIREDO


36
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
then filavazia := true
else filavazia := false;
end;
15.1.4. Avançado - estruturas de dados - listas encadeadas

Em listas implementadas através de alocação seqüêncial de memória, a própria


sucessão dos endereços de memória nos dá a seqüência dos nós na
estrutura.para listas encadeadas, para manter a seqüência dos nós precisamos
acrescentar ao nó a informação de onde está o próximo nó na seqüência, ou seja,
o seu endereço.
15.1.4.1. Rotinas para listas encadeadas
Type
ptrnodolista = ^nodolista;
nodolista = record
conteudo:integer;
proximo:ptrnodolista;
end;
Procedure inicializalista (var l:ptrnodolista);
begin
l:=nil;
end;

Procedure insereiniciolista (var l:ptrnodolista;x:integer);


var p:ptrnodolista;
begin
new(p);
p^.conteudo:=x;
p^.proximo:=l;
l:=p;
end;

Procedure inserefinallista (var l:ptrnodolista;x:integer);


var p,ptr:ptrnodolista;
begin
new(p);
p^.conteudo:=x;
p^.proximo:=nil;
if l = nil
then l:=p
else begin
ptr:=l;
while (ptr^.proximo <> nil) do
ptr:=ptr^.proximo;
ptr^.proximo:=p;
end;
end;

PROFESSOR BERALDO LOPES FIGUEIREDO


37
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

Procedure insereordenadolista (var l:ptrnodolista;x:integer);


var p,ptr,ant:ptrnodolista;
begin
new(p);
p^.conteudo := x;
ptr := l;
while (ptr <> nil) and (ptr^.conteudo < x) do
begin
ant:=ptr;
ptr:=ptr^.proximo;
end;
if ptr = l
then l:=p
else ant^.proximo := p;
p^.proximo := ptr;
end;

Procedure imprimelista (l:ptrnodolista);


var ptr:ptrnodolista;
begin
ptr:=l;
while ptr <> nil do
begin
write(ptr^.conteudo, ' ');
ptr:=ptr^.proximo;
end;
writeln;
end;

Procedure apagalista (var l:ptrnodolista);


var aux,ptr:ptrnodolista;
begin
ptr := l;
while ptr <> nil do
begin
aux:=ptr;
ptr:=ptr^.proximo;
dispose(aux);
end;
l:=nil;
end;

Function pesquisalista (l:ptrnodolista;x:integer):boolean;


var ptr:ptrnodolista;
achou:boolean;
begin

PROFESSOR BERALDO LOPES FIGUEIREDO


38
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
ptr:=l;
achou:=false;
while (ptr <> nil) and not(achou) do
begin
if ptr^.conteudo = x
then achou:=true
else achou:=false;
ptr:=ptr^.proximo;
end;
pesquisalista:=achou;
end;

Function listavazia (l:ptrnodolista):boolean;


var ptr:ptrnodolista;
begin
ptr:=l;
if ptr = nil
then listavazia:=true
else listavazia:=false;
end;

Function removeiniciolista(var l:ptrnodolista;var x:integer):boolean;


begin
if listavazia(l)
then removeiniciolista:=false
else if l^.proximo = nil
then begin
x:=l^.conteudo;
l:=nil;
removeiniciolista:=true;
end
else begin
x:=l^.conteudo;
l:=l^.proximo;
removeiniciolista:=true;
end;
end;

Function removefinallista(var l:ptrnodolista;var x:integer):boolean;


var ptr:ptrnodolista;
begin
ptr:=l;
if listavazia(ptr)
then removefinallista:=false
else if (ptr^.proximo = nil)
then begin
x:=ptr^.conteudo;

PROFESSOR BERALDO LOPES FIGUEIREDO


39
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
ptr:=nil;
removefinallista:=true;
end
else begin
while ((ptr^.proximo)^.proximo <> nil) do
ptr:=ptr^.proximo;
x:=(ptr^.proximo)^.conteudo;
ptr^.proximo:=nil;
removefinallista:=true;
end;
end;

Function removeelementolista(var l:ptrnodolista;x:integer):boolean;


var ptr:ptrnodolista;
achou,btemp:boolean;
temp:integer;
begin
achou:=false;
ptr:=l;
if pesquisalista(ptr,x)
then begin
while ptr^.proximo <> nil do
ptr:=ptr^.proximo;
if (ptr^.proximo = nil) and (ptr^.conteudo = x)
then btemp:=removefinallista(l,temp);
if (l^.proximo = nil) or (l^.conteudo = x)
then btemp:=removeiniciolista(l,temp);
ptr:=l;
while ((ptr^.proximo)^.proximo <> nil) and not(achou) do
if (ptr^.proximo)^.conteudo = x
then begin
achou:=true;
ptr^.proximo:=(ptr^.proximo^).proximo;
end
else ptr:=ptr^.proximo;
removeelementolista:=true;
end
else removeelementolista:=false;
end;

PROFESSOR BERALDO LOPES FIGUEIREDO


40
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

15.1.5. Avançado - estruturas de dados - pilha (usando ponteiros)

15.1.5.1. Rotinas para pilha


Type
ptr = ^recdata;
recdata = record
dado : integer;
lig : ptr;
end;
pilha = ptr;
Procedure initpilha (var topo: pilha);
begin
topo := nil;
end;

Function pilhavazia (topo: pilha): boolean;


begin
if topo = nil
then pilhavazia := true
else pilhavazia := false;
end;

Procedure inserepilha (var topo: pilha; valor: integer);


var auxptr: ptr;
begin
new(auxptr);
auxptr^.dado := valor;
auxptr^.lig := topo;
topo := auxptr;
end;

Function topopilha (topo: pilha): integer;


begin
if not(pilhavazia(topo))
then topopilha := topo^.dado;
end;

Function removepilha (var topo: pilha): integer;


var auxptr: ptr;
begin
if not(pilhavazia(topo))
then begin
removepilha := topo^.dado;
auxptr := topo;
topo := topo^.lig;

PROFESSOR BERALDO LOPES FIGUEIREDO


41
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
dispose(auxptr);
end
else removepilha := 0;
end;

15.1.6. Avançado - estruturas de dados - fila(usando ponteiros)

15.1.6.1. Rotinas para fila


Type
ptr = ^recdata;
recdata = record
dado : integer;
lig : ptr;
end;
fila = ptr;
Procedure initfila (var f, t: fila);
begin
f := nil;
t := nil;
end;

Function filavazia (f: fila): boolean;


begin
if f = nil
then filavazia := true
else filavazia := false;
end;

Procedure inserefila (var f, t: fila; valor: integer);


var auxptr: ptr;
begin
new(auxptr);
auxptr^.dado := valor;
auxptr^.lig := nil;
if t = nil
then f := auxptr
else t^.lig := auxptr;
t := auxptr;
end;

Function removefila (var f, t: fila): integer;


var auxptr: ptr;
begin
if not(filavazia(f))
then begin

PROFESSOR BERALDO LOPES FIGUEIREDO


42
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
removefila := f^.dado;
auxptr := f;
f := f^.lig;
if f = nil
then t := nil;
dispose(auxptr);
end
else removefila := 0;
end;
16) Avançado - arquivos

16.1. Arquivos binários


Arquivos do tipo binário usam o sistema binário de numeração para armazenar
tanto as informações numéricas quanto as informações literais, estas últimas
através de códigos numéricos dos seus caracteres (ascii).
Na linguagem pascal a organização dos arquivos binários é sempre seqüencial,
isto é, os registros são colocados um após o outro, em seqüência. Quanto ao
acesso, embora a linguagem pascal só estabeleça o acesso seqüencial dos
arquivos binários, as suas implementações geralmente também permitem o seu
acesso direto, através do número de ordem do registro.
Declaração de arquivos binários
Type
nome do tipo = file of tipo do registro;
var lista de identificadores: nome do tipo;
Exemplo:
Type
arqint = file of integer;
var notas: arqint;

16.2. Arquivos textos


Arquivos do tipo texto armazenam todas as informações, numéricas ou literais,
através de códigos de seus caracteres (geralmente ascii). Por exemplo, o valor
numérico 65 é armazenado através dos caracteres '6' e '5', cujos códigos ascii são
54 e 53.
Os caracteres de um arquivo tipo texto (ou os seus códigos) são agrupados em
linhas, que por sua vez são agrupadas em páginas. O caractere de código 13
(#13) indica o fim da linha, o de código 12 (#12) o fim da página e o código 26
(#26) o fim do arquivo. Por exemplo se faço write(arq,#13); estou criando uma
quebra de linha no arquivo.
A organização dos arquivos textos no pascal assim como os arquivos binários
também é seqüencial, mas não permite o acesso direto aos elementos do arquivo.

PROFESSOR BERALDO LOPES FIGUEIREDO


43
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

Declaração de arquivos textos


Type
nome do tipo = text;
var lista de identificadores: nome do tipo;
Exemplo:
Type
arqtext = text;
var notas: arqtext;

Para a manipulação de arquivos:


- associar uma variável-apontador para o arquivo;
- abrir o arquivo;
- comandos a serem realizados no arquivo;
- fechar o arquivo;
Abertura de arquivos
Assign (variavel do tipo arquivo,nome externo);
* variavel do tipo arquivo - pode ser uma variável para arquivos do tipo binário ou
para arquivos do tipo texto.
* nome externo - nome e/ou caminho onde está o arquivo gravado no hd
Exemplo:
Var arqtext: text;
arqbin: file of integer;
begin
assign (arqtext,'arquivotexto.txt'); { associa a uma variável para um arquivo do tipo
texto ao arquivo "arquivotexto.txt". }
assign (arqbin,'arquivobinario.bin'); { associa a uma variável para um arquivo do
tipo binário ao arquivo "arquivobinario.txt". }
end.
• Reset (variável do tipo arquivo);
Para abrir um arquivo do tipo texto ou binário para somente leitura.
• Append (variável do tipo arquivo texto);
Para abrir um arquivo para inserção, sendo que a inserção irá continuar após o
último dado inserido no arquivo.
* apenas para arquivos texto.
• Rewrite (variável do tipo arquivo);
Caso o arquivo ainda não tenha sido criado, é criado um arquivo (especificado no
assign) caso contrário se o arquivo já existir ele é sobrescrito e é colocado no
modo de inserção.
Exemplo de uma abertura de arquivo:
Assign(arq,'arqbin.bin');
reset(arq);
Associa um arquivo do tipo binário a variável arq, e abre o arquivo para somente
leitura.
Fechamento de arquivos
Close (variável do tipo arquivo);

PROFESSOR BERALDO LOPES FIGUEIREDO


44
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
Fecha o arquivo.

Leitura de arquivos
• Read (variável do tipo arquivo, variável que irá receber o valor lido);
Exemplo:
Var arq: file of integer;
num:integer;
begin
assign (arq,'arqbin.bin');
reset (arq);
read (arq, num);
close (arq);
end.
• Readln (variável do tipo arquivo, variável que irá receber o valor lido);
Exemplo:
Var arq: text;
linha:string;
begin
assign (arq,'arqtext.txt');
reset (arq);
readln (arq, linha);
close (arq);
end.
* o comando read e readln podem ser usados para arquivos do tipo texto, mas
para arquivos do tipo binário só se pode usar o comando read.

Escrita de arquivos
• Write (variável do tipo arquivo, variável que contém o valor a ser gravado);
Exemplo:
Var arq: file of integer;
num:integer;
begin
num:=10;
assign (arq,'arqbin.bin');
reset (arq);
write (arq, num); { é gravado o número 10 num arquivo binário }
close (arq);
end.
• Writeln (variável do tipo arquivo, variável que contém o valor a ser gravado);
Exemplo:
Var arq: text;
linha:string;
begin
linha:='teste de arquivos';
assign (arq,'arqtext.txt');
rewrite (arq); { cria um arquivo "arqtext.txt" e o deixa em modo de inserção }

PROFESSOR BERALDO LOPES FIGUEIREDO


45
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
writeln (arq, linha); { é gravado a string "teste de arquivos" no arquivo texto }
close (arq);
end.
* o comando write e writeln podem ser usados para arquivos do tipo texto, mas
para arquivos do tipo binário só se pode usar o comando write.

Funções auxiliares
Arquivos Arquivos
nome Utilização
binários textos
Seek (variável do
Posiciona o registro do
tipo
apontador para o número Sim Não
arquivo,número do
de registro especificado.
registro);
Retorna o número total de
Filesize (variável
registros de um arquivo Sim Não
do tipo arquivo);
binário.
Retorna true quando o
Eof (variável do
apontador chega no final doSim Sim
tipo arquivo );
arquivo.
Retorna true quando o
Eoln (variável do
apontador chega no final daSim Sim
tipo arquivo);
linha do arquivo.

16.3. Arquivo texto

os arquivos texto são um tipo de dados pré-definido da linguagem pascal


(turbo pascal), sendo necessária a sua declaração na seção var de um
programa, da seguinte forma:
Var
Arqtxt: text;
A declaração de uma variável do tipo arquivo "text" (file of strings) vai nos
permitir abrir um arquivo em disco e associá-lo a esta variável, usando o
comando assign. Em seguida, para que possamos escrever no arquivo
vamos inicialmente abrir ele com o comando rewrite. O programa listado
abaixo mostra como escrever uma linha de texto em um arquivo em disco:
Program file_hello;
{
este programa cria um arquivo texto em disco - hello.txt
cujo conteúdo é a mensagem "hello world!".
}
Var
arqtxt:text; { define uma variável arqtxt do tipo arquivo texto=string }
Begin
assign(arqtxt,'hello.txt');
{ associa o nome do arquivo a variável arqtxt }

PROFESSOR BERALDO LOPES FIGUEIREDO


46
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
Rewrite(arqtxt);
{ cria um novo arquivo em disco, vazio e pronto para ser escrito }
{ usa os comandos write/writeln para escrever no arquivo... }
writeln(arqtxt); { escreve uma linha em branco no arquivo }
writeln(arqtxt,'hello world!'); { escreve o texto no arquivo }
writeln(arqtxt); { escreve uma linha em branco no arquivo }
Close(arqtxt); { fecha o arquivo. Atualiza informações no disco }
End.
Os comandos write/writeln/read/readln podem ser usados para escrever e
ler dados de arquivos de maneira muito similar ao modo como usamos
estes comandos para escrever e ler dados no vídeo/teclado. A única
diferença é que indicamos como primeiro parâmetro da chamada da
procedure writeln/readln o nome da variável ao qual o arquivo em disco foi
associado. Desta forma os dados são escritos no arquivo como se
estivessem sendo escritos na tela, ou, são lidos do arquivo como se alguém
estivesse digitando no teclado as informações. Tudo é feito em modo texto.

16.4. Os principais comandos


Assign – associa o nome de um arquivo físico existente em disco ao nome de uma
variável do programa usada para se referir ao arquivo em disco. Exemplo:
assign(meuarq,’c:\xpto.txt’);
Rewrite – abre o arquivo em disco, zerando o seu conteúdo, e preparando ele
para que se possa escrever à partir do início do mesmo. O comando rewrite é
usado para criar um arquivo e escrever neste arquivo. Se o arquivo já existir e
possuir informações, ao executar o comando rewrite, todo o seu conteúdo será
destruído! Exemplo: rewrite(meuarq);
Reset – abre um arquivo em disco, já existente, preparando-se para ler o seu
conteúdo à partir do início. O arquivo deve obrigatoriamente existir no disco, caso
contrário ocorrerá um erro de execução. O comando reset é usado para ler um
arquivo. Exemplo: reset(meuarq);
Append – abre um arquivo em disco, já existente, preparando-se para escrever ao
final deste. O arquivo deve obrigatoriamente existir no disco. O comando append é
usado para adicionar (escrever) novas informações no final do arquivo. Exemplo:
append(meuarq);
Close – fecha o arquivo, atualizando as informações em disco. O comando close
permite que este arquivo seja atualizado, esvaziando buffers, ajustando tamanho
final, etc, e disponibilizando (liberando) o arquivo para outros usos. Exemplo:
close(meuarq);
Para escrever e ler nos arquivos tipo texto:
Writeln – escreve uma linha de texto no arquivo. Similar ao comando writeln para o
vídeo.
Readln – lê uma linha de texto de um arquivo. Similar ao comando readln para o
teclado.
Exemplos:
Writeln(meuarq, ‘idade = ‘, reg_funcionario.idade);
writeln(meuarq, nota1,‘ ‘, nota2,‘ ‘,media);

PROFESSOR BERALDO LOPES FIGUEIREDO


47
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
readln(arqfunc, nro_func, salario, reajuste);
readln(arqtexto, linha);
Para que se possa saber a posição em que nos encontramos em um arquivo, ou
para que possamos nos posicionar, temos os seguintes comandos:
Eof – função que indica se chegamos ao fim do arquivo (end-of-file)
Eoln – função que indica se chegamos ao fim de uma linha (end-of-line)
Flush – permite "esvaziar" o buffer de leitura/escrita. Usada para ter certeza que o
que está sendo lido ou escrito realmente está no arquivo e não em um buffer de
memória.
Para manipular com diretórios e com arquivos de modo geral:
Erase – apaga um arquivo existente no disco.
Rename – renomeia um arquivo existente em disco.
Chdir – troca de diretório (change dir).
Mkdir – cria um novo diretório (make dir).
Rmdir – apaga um diretório do disco (remove dir).
Getdir – retorna qual é o diretório corrente de trabalho.
O turbo pascal permite também o uso de uma função de retorno de erros relativos
ao acesso a arquivos através de uma variável chamada ioresult. Para os arquivos
texto, é possível que através desta variável possamos saber se um arquivo já
existe ou não no disco. Exemplo da implementação de uma função do tipo
"existe_arquivo" (vide help do comando reset):
Function existe_arquivo(nomearq: string): boolean;
{
função que retorna um valor boolean indicando se o arquivo existe (true) ou
não (false)
}
Var
arquivo: text; {também aceita => arquivo: file}
begin
{$i-}
Assign(arquivo, nomearq);
reset(arquivo);
close(arquivo);
{$i+}
existe_arquivo:= (ioresult = 0) and (nomearq <> '');
end; { existe_arquivo }
Begin
if existe_arquivo (‘c:\arq.txt’) then
writeln(‘o arquivo existe!')
Else
writeln('o arquivo não existe!');
end.
Observações importantes:
• Lembre-se que o readln e writeln em arquivos se comportam de modo
similar a escrita na tela e leitura do teclado. Sendo assim, quando usamos o
readln, se lermos uma variável numérica, o espaço em branco serve como

PROFESSOR BERALDO LOPES FIGUEIREDO


48
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
separação entre um dado e outro a ser lido, mas se lermos uma variável do
tipo string, toda a linha será lida até chegar no "enter" do final da linha;
• Cuidado ao usar o comando read (no lugar do readln) pois ele não lê o
"enter";
• Os comando de posicionamento de cursor na telas, gotoxy e clrscr, não tem
efeito no que se refere aos arquivos. Para escrever uma linha em um
arquivo, onde o texto se encontra no meio da linha, a única maneira é
escrever vários espaços em branco, deslocando o texto mais para adiante
na linha.

17) ORDENAÇÃO DE VETORES

17.1. Exemplos de ordenação de vetores unidimensionai s


17.1.1. Exemplos de ordenação de vetores - bubblesort
Procedure bubblesort1 (var v:vetor;tam:integer);
Var i,j,aux : integer;
Begin
for i := 1 to tam do
for j := i+1 to tam do
if v[i] > v[j]
then begin
aux := v[i];
v[i] := v[j];
v[j] := aux;
end;
End;

17.1.2. Ordenação de vetores - insertion sort


procedure insertionsort (var v:vetor;tam:integer);
Var i,j,x : integer;
Begin
for i := 2 to tam do
begin
x := v[i];
j := i;
while (x < v[j-1]) and (j > 1)do
begin
v[j] := v[j-1];
dec(j);
end;
v[j] := x;
end;
End;

PROFESSOR BERALDO LOPES FIGUEIREDO


49
UUrrccaammpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
17.1.3. Ordenação de vetores - merge sort
Procedure mergesort (var v:vetor;tam:integer);
Var v2 : vetor;
Procedure ordena(l,r:integer);
Var meio,i1,i2,ia : integer;
Begin
if l<r
then begin
meio := (l+r) div 2;
ordena(l,meio);
ordena(meio+1,r);
i1 := l;
i2 := meio+1;
ia := l;
while (i1<=meio) and (i2 <=r) do
begin
if v[i1] < v[i2]
then begin
v2[ia] := v[i1];
i1:=i1+1;
end
else begin
v2[ia] := v[i2];
i2:=i2+1;
end;
inc(ia);
end;
if i1 > meio
then while i2 <=r do
begin
v2[ia] := v[i2];
inc(i2);
inc(ia);
end
else while i1 <= meio do
begin
v2[ia] := v[i1];
inc(i1);
inc(ia);
end;
for ia := l to r do
v[ia] := v2[ia];
end;
End;

Begin
ordena(1,tam);

PROFESSOR BERALDO LOPES FIGUEIREDO


50
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
End;

17.1.4. Ordenação de vetores - bubble sort 2


procedure bubblesort2 (var v:vetor;tam:integer);
Var i, n, troca, aux : integer;
Begin
n := tam;
repeat
troca:=0;
for i:=1 to n-1 do
begin
if v[i]>v[i+1]
then begin
aux:=v[i];
v[i] := v[i+1];
v[i+1] := aux;
troca:=i;
end;
end;
n := troca;
until troca=0;
End;

17.1.5. Ordenação de vetores - select sort


procedure selectionsort (var v:vetor;tam:integer);
Var i,j,k,x : integer;
Begin
for i := 1 to tam-1 do
begin
k := i;
x := v[i];
for j := i+1 to tam do
begin
if v[j] < x
then begin
k := j;
x := v[k];
end;
end;
v[k] := v[i];
v[i] := x;
end;
End;

17.1.6. Ordenação de vetores - heap sort


Procedure heapsort (var v:vetor;tam:integer);

PROFESSOR BERALDO LOPES FIGUEIREDO


51
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
Function filhoesq(i:integer):integer;
Begin
filhoesq := 2*i;
End;

Function filhodir(i:integer):integer;
Begin
filhodir := 2*i+1;
End;

Procedure transformaheap(var v:vetor;pos:integer;tam:integer);


Var esq,dir,maior,aux : integer;
Begin
esq := filhoesq(pos);
dir := filhodir(pos);
if (esq <= tam) and (v[esq] > v[pos])
then maior := esq
else maior := pos;
if (dir <= tam) and (v[dir] > v[maior])
then maior := dir;
if maior <> pos
then begin
aux := v[pos];
v[pos] := v[maior];
v[maior] := aux;
transformaheap(v,maior,tam);
end;
End;

Procedure criaheap(var v:vetor;tam:integer);


Var i : integer;
Begin
for i := tam div 2 downto 1 do
transformaheap(v,i,tam);
End;

Var i, aux : integer;


Begin
criaheap(v,tam);
for i := tam downto 2 do
begin
aux := v[1];
v[1] := v[tam];
v[tam] := aux;
dec(tam);
transformaheap(v,1,tam);
end;

PROFESSOR BERALDO LOPES FIGUEIREDO


52
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
End;

17.1.7. Ordenação de vetores - shaker sort


Procedure shakersort (var v:vetor;tam:integer);
Var l,r,k,j,x : integer;
Begin
l := 2;
r := tam;
k := tam;
repeat
for j := r downto l do
begin
if v[j-1] > v[j]
then begin
x := v[j-1];
v[j-1] := v[j];
v[j] := x;
k := j;
end
end;
l := k+1;
for j := l to r do
begin
if v[j-1] > v[j]
then begin
x := v[j-1];
v[j-1] := v[j];
v[j] := x;
k := j;
end
end;
r := k-1;
until l > r;
End;

17.1.8. Ordenação de vetores - quick sort


procedure quicksort (var v:vetor;tam:integer);

Procedure sort (var v:vetor;inicio,fim: integer);


Var i,j,x,aux: integer;
Begin
i:=inicio;
j:=fim;
x:=v[(inicio+fim) div 2];
repeat

PROFESSOR BERALDO LOPES FIGUEIREDO


53
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
while v[i]<x do
i:=i+1;
while v[j]>x do
j:=j-1;
if i<=j
then begin
aux := v[i];
v[i] := v[j];
v[j]:=aux;
i:=i+1;
j:=j-1;
end;
until i > j;
if inicio < j
then sort(v,inicio,j);
if i < fim
then sort(v,i,fim);
End;

Begin
sort(v,1,tam);
End;

PROFESSOR BERALDO LOPES FIGUEIREDO


54
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
18) Aulas Práticas com Exercícios:

Dados Inteiros
Shortint De –128 até 127
Integer De -32.768 até 32.767
Longint De –2.147.483.648 até 2.147.483.647
Dados Tipo Real
Real 11 dígitos
Single 8 dígitos
Double 16 dígitos
Extended 20 dígitos

Operadores Operadores Lógicos


* Multiplicação = Igual
/ Divisão := Atribüição
+ Adição < Menor que
- Subtração > Maior que
Div Divisão inteira <= Menor ou igual
Mod Resto de divisão >= Maior ou igual
<> Diferente de
Operadores Booleanos
Or Ou
And E
Not Não

1. FUP que imprima seu nome, endereço e telefone em linhas diferentes.


2. FUP que tenha 4 variáveis, 2 numérica com os valores de 200 e 2 tipo string
(texto) com os valores de 200. Some as duas numéricas e as duas string
(texto). Demonstre em linhas diferentes os dois resultados.
3. Usando o comando GotoXY(Coluna,Linha) faça um programa que imprima na
coluna 25 e linha 12 um nome digitado via teclado.
4. FUP que imprima em cada canto da tela um asterisco, levando em
consideração que o monitor possui 80 colunas e 25 linhas.
5. FUP que receba 2 números via teclado e imprima o maior com a observação:
Este é o maior.
6. FUP que receba um número e diga se ele é positivo ou negativo.
7. FUP que receba uma nota entre 0 e 10. Se for maior que 10 diga nota inválida,
se for menor que 0 diga nota não existe. Se for menor que sete diga. Em
exame. Se for igual ou maior que 7 diga Aprovado.
8. FUP que diga “Começa com A” se a palavra digitada começa com A ou a .

PROFESSOR BERALDO LOPES FIGUEIREDO


55
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
9. FUP que diga “Termina com A” se a palavra digitada termina com A ou a .
10. [Super-Desafio] FUP que entre dois nomes digitados imprima o maior com a
mensagem: Este nome é o maior .
11) FUP que receba um nome e diga quantas letras ele possui.
12) FUP que receba 3 números e imprima o menor.
13) FUP que receba 4 números e imprima os pares.
14) FUP que separe as sílabas (2 em 2 letras) de uma palavra que contenha 6
letras.
15) FUP que calcule essa operação: elevar o quadrado 34 (a função é : Sqrt(A) )
16) FUP que calcule essa operação: a=(23-(784/232)+98)+(87*87)

17) FUP que substitua na fórmula acima o 23 por uma variável que será
introduzida via teclado.
18) FUP que calcule 25% de um número digitado via teclado.
19) FUP que diga ao digitar sua idade ele imprima na tela: menor de idade (se a
idade for menor de 21 anos) ou maior de idade (se a idade for maior ou igual a
21 anos).
20) FUP que imprima na tela um asterisco no começo e outro no final da palavra
digitada.

Um programa que imprime todos os pares de 1 até 20.


Program ForNext; Programa Laço;
Uses Crt; Plataforma Caracter
Var a:Integer; Variáves a:Inteiro
Begin Início
ClrScr; Limpar a Tela
For a:= 1 to 20 do Faça a = 1 até 20
Begin Se (a mod 2)=0 then
If (a mod 2) = 0 then Escreva ("Este número é par:", a)
Begin Fim do Se
Writeln('Este Número é Par: ', Retorna Faça
a); Final.
End;
End;
Readln;
End.
21) FUP que imprima 10 nomes (todos na coluna 30) recebidos numa única
variável?
22) FUP que some todos os números de 1 até 10 usando o laço For/Next.
Exemplo: 1+2+3+4+5+6+7+8+9+ ...
23) FUP que receba 6 números digitados e imprima os pares.
24) FUP que imprima os impares de 1 até 21.
25) FUP que imprima 5 números digitados e só imprima os múltiplos de 5.
26) FUP que imprima um nome digitado na vertical. (Usar: Copy(Var, Pos, nº de
letras)
27) FUP que imprima um nome digitado invertido. Montar com Copy(Var,Pos, Nº
Lts)

PROFESSOR BERALDO LOPES FIGUEIREDO


56
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
28) FUP que imprima um nome na diagonal (transversal)
29) FUP que conte todos as letras "A" ou "a" de um nome digitado.
30) FUP que receba 6 nomes e imprima o maior e o menor.
31) FUP que conte todas as letras de uma frase digitada menos os espaços em
branco.
32) FUP que imprima na primeira linha um letras na Segunda 2, terceira 3 e assim
por diante usando FOR/NEXT, exemplo: se eu digitar Grenal.
G
GR
GRE
GREN
GRENA
GRENAL
33) FUP que receba 6 palavras digitadas e que imprima somente as que
comecem com R e terminem com R.
34) FUP que conte as vogais de um nome digitado.
35) [Super-Desafio] FUP que substitua todas as vogais por asterisco.
Laços infinitos são aqueles que se repetem até que uma condição seja alcançada.

WHILE <condição> DO REPEAT


BEGIN instruções
instruções UNTIL <condição>;
END;

Program infinit1; Program infinit2;


uses crt; uses crt;
var var
a:string; a:string;
begin begin
while (a< > 'sair') do {Faça enquanto a repeat { repeat=repita }
< > de Sair} clrscr;
begin write('Digite um nome: ' );
clrscr; readln(a);
write('Digite um nome: ' ); until (a= 'sair'); { until = até que
readln(a); }
end; end.
end.

36) FUP que repita infinitamente uma condição enquanto não for digitado 'sair'.
Usando While ... do.
37) FUP que repita infinitamente uma condição enquanto não for digitado 'sair'.
Usando Repeat...Until.
38) FUP que repita infinitamente enquanto não for digitado o número 999.
39) FUP usando repeat...until que repita infinitamente enquanto a soma de duas
variáveis não for maior do que 1000.
40) FUP que recebe um nome e imprima em forma de cruz no centro da tela.
41) FUP que conte os SS, RR de 6 nomes digitados.

PROFESSOR BERALDO LOPES FIGUEIREDO


57
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
42) FUP que retire alternadamente as letras de um nome e imprima-os em
variáveis diferentes. Exemplo: Cidade 1ª)Cdd 2ª)iae.
43) FUP que calcule o tempo de viagem daqui a Rosário na velocidade de 120
Km/h sabendo-se que entre as duas cidades a distância é de 64 Km.
44) FUP que preencha a tela com números impares de 1 até 999. Usar o
For...Next.
45) FUP que imprima uma palavra que tenha até 6 letras que se repita quatro
vezes formando um losango bem no meio da tela.
46) FUP que imprima os números primos entre 1 e 100. Usando o For...Next.
47) FUP que junte as duas palavras iniciais de uma string com as duas últimas de
outro string ambas digitadas posteriormente.
48) FUP que uma string ande na tela. Da esquerda para a direita.
49) FUP que uma string ande verticalmente na tela.
50) FUP que a string vá e volte na tela.

Usando as funções
Val(String, Numérica, Variável de Erro ) Converte uma string num número
Str(Numérica, String). Converte um número numa String.
S:String;
I,Code:Integer:
Val(S,I,Code)
51) FUP que some os números de um número digitado. Exemplo: 172.
1+7+2=10.
52) FUP que coloque hífens (-) entre números digitados.
Usando o Randomize inicia-se uma semente aleatório cujos números são
selecionados sem critérios pré definidos.
Exemplo de Randomize:
Program sorteio;
uses Crt;
var a:integer;
begin
clrscr;
Randomize;
repeat
Writeln (Random(11));
delay(200);
until KeyPressed;
end.
readln;
end.
53) FUP que como o MEGA SENA sorteie 6 dezenas entre 01 à 60.
54) Faça um jogo em que o conputador sorteie um número entre 01 até 10 e você
tem 3 alternativas para acertar. Se errar a primeira perde 10 pontos, se errar a
1ª e a 2º perde 20 pontos e se errar as 3 tentativas perderá 30 pontos.
55) FUP de sua autoria que tenha um FOR...NEXT e a condição
SE...ELSE...END.

PROFESSOR BERALDO LOPES FIGUEIREDO


58
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

56) FUP (Usando VETOR) que receba 10 nomes e imprima-os na ordem inversa
em que foi digitado.
57) FUP (Usando VETOR) receba 10 nomes e imprima o 5º digitado.
58) FUP (Usando VETOR) que receba 6 nomes e só imprima as posições pares.
59) FUP (Usando VETOR) que receba 10 nomes e imprima-os lado a lado com
um "-"separando-os
60) FUP (Usando VETOR) que receba 10 números e imprima os pares digitados.
61) FUP (Usando VETOR) que receba 6 nomes e só imprima os que começam
com A .
62) FUP (Usando VETOR) que receba 6 nomes e só imprima os que possuem 4
letras.
63) FUP (Usando VETOR) que receba 6 números e só imprima os primos.
64) FUP (Usando VETOR) que receba 10 números e ordene-os.
65) FUP (Usando VETOR) que receba em dois vetores de 6 posições cada um:
no 1º Vetor = nome e no 2º Vetor = salário ao selecionar um determinada
posição ele traga o salário junto.
66) FUP (Usando Matriz) que preencha uma matriz 4 x 4 com números
seqüenciais, começando por 1.
67) FUP (Usando Matriz) Num Onibus de 40 lugares, como mostra abaixo, um
passageiro quer comprar uma passagem na janela, na poltrona 33
1 5 9 13 17 21 25 29 33 37
2 6 10 14 18 22 26 30 34 38
4 8 12 16 20 24 28 32 36 40
3 7 11 15 19 23 27 31 35 39
68) FUP (Usando Matriz) que preencha somente as posições pares de uma lista
seqüencial de uma matriz 5 x 5.
69) FUP (Usando Matriz) que diga diga quais as posições ascendentes diagonais
de uma matriz 10 x 10 ( exemplo: 1,1 ..2,2 .. 3,3 ...).
70) FUP que preencha um matriz 4x4 diagonalmente cuja somas de (x,y) linha e
coluna sejam 5.
71) FUP (Usando Matriz) Numa matriz 5 x3 crie uma formula para fazer o número
1 e o número 8.
72) FUP (Usando Matriz) que preencha as posições x,1 de uma matriz 6 x 6.
73) FUP (Usando Matriz) que preencha numa Matriz 7 x 7 todas as posições
cujo o y é o dobro do x.

74) FUP que receba um nome e diga quantas RR e SS existem?


75) FUP que receba 10 nomes e diga quantos começam com vogais
76) FUP que receba números de 1 até 30000 e diga quantos múltiplos de 7
existem.
77) FUP que receba um número e imprima se ele é unidade, centena ou milhar.
78) FUP que receba um nome e imprima dez números e diga quantas vezes foi
impresso números repetidos.
79) FUP que receba seis nomes e diga quantas vezes foi digitado nomes iguais.

PROFESSOR BERALDO LOPES FIGUEIREDO


59
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
80) FUP que receba 6 (seis) nomes dentro de um vetor e imprima as posições
pares.
81) FUP que receba numa matriz 2 x 2 = 4 posições colocando em cada posição
um nome, já fixado na programação exemplo:
82) FUP baseado no programa acima que: Preencha aleatoriamente uma matriz
bidimensional de 1 até 100 com (5x5 =25) vinte e cinco posições e conte
quantos números foram sorteados repetidos. (Usar randomize).
83) FUP que receba uma frase e conte todas as palavras maiores de 6 letras.
84) [Desafio] FUP que crie um arquivo txt no disco rígido, que grave e regrave de
acordo com o nome do arquivo que você escolher. Esse arquivo deve gravar
um texto tipo Memo que deverá ser ter: (Dica)

85) FUP que receba 4 números reais e some somente os inteiros (usando a
função Int())
86) FUP que use a função delete(var, pos inicio, caracteres a deletar) que delete
sempre as duas últimas letras de um nome digitado.
87) FUP que receba 6 números digitados e imprima : 'Este é múltiplo de 12 ' .
88) FUP que receba em 3 vetores de 6 posições: Nome , idade e sexo. E imprima
numa linha lado a lado o mais moço, e o mais velho. Ex: Duarte - 27 -
Feminino e na outra linha : Gustavo - 28 - Masculino. Imprima também
quantos homens e mulheres possuem. Imprima a Soma de todas as idades e
faça a média.

Programa que cria um arquivo per manente no HD


program ficha;
uses crt;
type DATA = Record
d:1..31;
m:1..12;
a:1900..2100;
end;
tk = Record
NOME:STRING;
NUMERO:INTEGER;
DIARIA:REAL;
DM:DATA;
end;
{***********************************************}
VAR k: tk;
FV,FN : FILE of tk;
CH:INTEGER;
X:INTEGER;
I:INTEGER;
CT:INTEGER;
SALARIO:REAL;
esp:char;

PROFESSOR BERALDO LOPES FIGUEIREDO


60
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
{*******************NOVO ARQUIVO ***************}
procedure NOVO;
begin
Assign(FV,'C:\FOLHA.TXT'); {Liga a variável FV no arquivo}
Rewrite(FV); {Cria um arquivo para ser gravado ou Recria.}
Reset(fv); {Abre um arquivo para leitura}
With k do
begin
clrscr;
Write('Novo: NUMERO DE FUNCIONARIOS: ');
Highvideo; {Video luminoso}
readln(I);
Lowvideo; {Video Baixo }
Writeln;
Clrscr;
FOR X:=1 to I do
Begin
Lowvideo;
Write(' NOME DO FUNCIONARIO: ');
Highvideo;
Readln(NOME);

Lowvideo;
Write(' NUMERO DO FUNCIONARIO: ');
Highvideo;
Readln(NUMERO);

Lowvideo;
write('VALOR DA DIARIA: ');
Highvideo;
read(DIARIA);

with dm do
begin
write(' -> DATA DA FOLHA(dd mm aaaa): ');
Readln(D,ESP,M,ESP,A);
End;
lowvideo;
writeln;
writeln;
write(fv,k); {direciona para variável o arquivo}
end;
end;
close(FV);
end;

{************************incluir******************}

PROFESSOR BERALDO LOPES FIGUEIREDO


61
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
procedure incluir;
begin
Assign(FV,'C:\FOLHA.TXT'); {Associa o arquivo fv ao do HD}
Reset(FV); {Abre o arquivo para Ler}
With k DO
Begin
Clrscr;
Write('NUMERO DE INCLUSOES DE FUNCIONARIO(S): ');
Highvideo;
readln(I);
Lowvideo;
writeln;
clrscr;
FOR X:=1 TO I DO
begin
Lowvideo;
write(' NOME DO FUNCIONARIO: ');
Highvideo;
readln(NOME);

Lowvideo;
write(' NUMERO DO FUNCIONARIO: ');
Highvideo;
readln(NUMERO);

Lowvideo;
write('VALOR DA DIARIA: ');
Highvideo;
read(DIARIA);
with dm do
Begin
write('->DATA DA FOLHA (dd mm aaaa):');
readln(D,ESP,M,ESP,A);
end;
Lowvideo;
writeln;

seek(FV,filesize(FV)); {seek= Move o ponteiro ao registro}


write(fv,k); {filesize = Retorna Total registro}
end;
end;
close(FV);
end;

{******************alterar*****************}
procedure alterar;
begin

PROFESSOR BERALDO LOPES FIGUEIREDO


62
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
clrscr;

assign(FV,'C:\FOLHA.TXT');
Reset(FV);
With K DO
begin
writeln('digite o nº do registro para alterar:');
readln(I);
Seek(FV,I-1); {Muda para o registro}
Read(FV,k); {Ler itens dos arquivos}
Writeln('NOME DO FUNCIONARIO:', NOME );
Readln(NOME);
Writeln('NUMERO: ',NUMERO);
Readln(NUMERO);
lowvideo;
writeln('DIARIA:',DIARIA:10:2);
highvideo;
write('DIGITE A NOVA DIARIA: ');
readln(DIARIA);
with dm do
begin
write(' -> NOVA DATA DA FOLHA(dd mm aaaa): ');
readln(D,ESP,M,ESP,A);
end;
Writeln;
lowvideo;
seek(FV,I-1); {Busca o registro I no arquivo FV}
WRITE(FV,K); {Escreve itens do arquivo}
end;
close(FV); {Fecha arquivo}
halt;
end;

{***********************consultar****************}
procedure consultar;
begin
clrscr;

{*********************}
Assign(FV,'C:\FOLHA.TXT'); {associa FV ao arquivo}
Reset(FV); {Abre arquivo para Ler}
With K do
Begin
while (NOT EOF(FV)) DO {Enquanto não for fim faça}
Begin
CT:=CT+1;
read(fv,k);

PROFESSOR BERALDO LOPES FIGUEIREDO


63
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
Writeln('NOME DO FUNCIONARIO: ',NOME);
Writeln('NUMERO: ',NUMERO);
Write('DIARIA:',DIARIA:10:2);
Write('.......R$.');

SALARIO:=DIARIA*30;
Writeln(SALARIO:10:2);
with dm do
Begin
write(' ->DATA DA FOLHA(dd mm aaaa): ');
Highvideo;
Writeln(D,ESP,M,ESP,A);
lowvideo;
end;
writeln;
IF CT=4 then
begin
readln;
clrscr;
CT:=0;
end;
end;
readkey;
end;
close(FV);
halt; {sai do programa}
end;

{***********************************************}
procedure sair;
begin
clrscr;
halt; {Sai do programa}
end;

{***********programa principal*************}
begin
clrscr;
lowvideo;
gotoxy(15,05);
write('DIGITE O NUMERO QUE DESEJA: ');
gotoxy(20,10);
write('1 - INCLUIR');
gotoxy(20,12);
write('2 - ALTERAR');
gotoxy(20,14);

PROFESSOR BERALDO LOPES FIGUEIREDO


64
U
Urrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
write('3 - CONSULTAR');
gotoxy(20,16);
write('4 - NOVO ARQUIVO');
gotoxy(20,18);
write('5 - SAIR');
gotoxy(20,20);
write('Digite o numero...:');
highvideo;
gotoxy(44,20);
Readln(CH);
lowvideo;
Case CH of
1:INCLUIR;
2:ALTERAR;
3:CONSULTAR;
4:NOVO;
5:SAIR;
end;
lowvideo;
write('pressione uma tecla sair...');
readkey;
clrscr;
end.

{************************************************************************}

89) Faça esse programa funcionar mudando os registros Record para Nome,
endereço, bairro e telefone todos sendo tipo string.
90) FUP que receba 10 nomes e imprima todos os que tenham somente 2 "a"
(as).
91) FUP que receba 5 números e imprima as soma dos números do número. Se o
número for 12 -> 1+2=3 e se for 172 = 1+7+2
92) FUP que receba 6 números e imprima a soma de todos os números usando
um vetor.
93) FUP que receba dois números e imprima o primeiro invertido e após some-os.
Exemplo: digitado 123 e 401 a soma será 321 + 401 = 722.
94) FUP que dois números se for(em) para eleve a potência 3, multiplique pelo
resultado, divida pela por 2, subtraia pela metade da primeira vez digitação.
95) FUP que receba dois valores e sempre subtraia o maior pelo menor
independente da ordem em que foi recebido.
96) FUP que ordene 3 valores numéricos recebidos.(Forma crescente).
97) FUP que um imóvel foi vendido a 3 irmãos sendo que o valor do imóvel
digitado seja 40% o irmão mais velho do restante 3/4 será do irmão do meio e
o mais moço o restante. Qual o valor pago pelos irmãos.
98) FUP que receba um número milhar (999) e imprima escrito por extenso o seu
valor. Usar vetor.

PROFESSOR BERALDO LOPES FIGUEIREDO


65
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
99) FUP que crie um registro de 10 alunos e suas notas de dois meses em 3
disciplinas.
100) FUP que crie três Procedures (Vitoria Empate e Derrota) elogiando ou
repreendendo uma vitória do seu time, bastando você colocar o placar e a
mensagem de acordo com o resultado.
101) Crie duas funções que recebe 4 números LongInt. A primeira função deve
fazer a média e a Segunda deve fazer a adição.
102) Crie uma função para dizer se um número é impar ou par escrevendo em
vermelho se for impar e azul se for par.
103) Monte uma agenda com nome e endereço de 20 pessoas (usar registro)
104) Montar um programa com uma Matriz M[10,6] que leia o arquivo (record)
com o nome de Matriz.dat. incluir, Mostrar, alterar.
105) Programa que imprima toda a tabuada e quarde-a numa matriz [10,10].
Conforme a solicitação via teclado de 1 até 10 ele mostra na tela a tabuado do
número digitado. Guardando-a num Vetor com 10 elementos.

PROFESSOR BERALDO LOPES FIGUEIREDO


66
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
09) BIBLIOGRAFIA
Rebonato, Marcelo Trindade , Linguagem de programaçã o Pascal,
Apostila, 1999.

Santos Junior, José Maria Rodrigues , Pascal , Universidade Tiradentes,


apostila 2000.

Sebesta, Robert W , Conceitos de Linguagem de programação , 4º


Edição, Bookman, 2001.

Manzano, Jose Augusto e Yamatumi, Wilson , Estudo Dirigido Turbo


Pascal, 3º Edição, Erica , 1999.

Boente, Alfredo – Pascal Técnicas de Programação – RJ:


Brasport, 2003.
Manzano, José Augusto; Yamatumi, Wilson – Programando
em Turbo Pascal 7 – São Paulo: Érica, 1996 – 8º Edição.
Internet.

AGRADECIMENTOS

A MINHA ESPOSA MIRIÃ pela paciência das horas em que compilei todo o
material e durante muitas HORAS da noite.

PROFESSOR BERALDO LOPES FIGUEIREDO


67
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO

UNIVERSIDADE DA REGIAO DA CAMPANHA DE SÃO GABRIEL

CENTRO DE CIÊNCIAS ECONOMIA E INFORMÁTICA

CURSO DE INFORMÁTICA

Técnicas de Programação

1º Semestre 2004

Professor Beraldo Lopes Figueiredo

PROFESSOR BERALDO LOPES FIGUEIREDO


68
UUrrccaam
mpp S
Sããoo G
Gaabbrriieell -- C
Cuurrssoo ddee IInnffoorrm
mááttiiccaa
APOSTILA DE TECNICAS DE PROGRAMAÇÃO
SUMÁRIO
1 Introdução 1
Estrutura Geral de Um Compilador 3
2 Linguagem de Programação 4
Operadores 4
Funções padrões Pré definidas 4
Variáveis 7
ASCII 8
Comandos de Entrada e Saída 13
Comandos Estruturados 13
IF ... then ... else 13
Case ... of 13
Comando de Repetição : Repeat / For / While 14
3 Arrays (Vetores e Matrizes) 15
4 Manipulação de Registro (Record) 16
5 Procedimentos (Procedures) 17
6 Funções (Function) 17
7 Programas Exemplos 18
Programa que calcula a média 18
Programa que conta as letras A de um nome digitado 18
Programa que conta as letras de uma frase digitada 19
Programa que recebe 5 números imprime inversamente na 19
ordem em que foram digitados
Programa que recebe 5 números reais dentro de um vetor e 20
imprime o maior usando cores.
Programa que conta os SS de um nome digitado 20
Programa que usa Str() e Val() conversores de variáveis 20
Programa que usa Matrizes 22
Programa que usa While ...end 22
Programa que recebe 6 números dentro de um vetor ordena-os 22
8 Aulas Práticas e Exercícios 24
9 Bibliografia 36
10 Agradecimentos 36

PROFESSOR BERALDO LOPES FIGUEIREDO

Você também pode gostar