Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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
* Multiplicação
/ Divisão de números reais
+ Adição
- Subtração
div Divisão inteira arredondada
mod Resto da divisão
= Igual
:= Atribuição
< Menor que
> Maior que
<> Diferente
<= Menor ou igual
>= Maior ou igual
Endereço @
Referência ^
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).
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.
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;
begin
{ ... comandos iniciais ... }
while i := 1 do begin { Repete o [Bloco de comandos] enquanto i = 1
{ ... Bloco de comandos ... }
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;
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;
7) PROGRAMAS EXEMPLOS:
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.
end;
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];
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;
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)
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;
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);
Listas ligadas
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;
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
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
Sintaxe em pascal:
Type
Aponta_nodo = ^ nodo
Nodo = record
Esq : aponta_nodo;
Dado : informação;
Dir : aponta_nodo;
End;
9) Programação modular:
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.
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.
MENU
PRINCIPAL
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;
Function topopilha(p:pilha):tipo;
begin
if not (pilhavazia(p))
then topopilha:=p.p[p.topo];
end;
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).
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 }
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.
Begin
ordena(1,tam);
Function filhodir(i:integer):integer;
Begin
filhodir := 2*i+1;
End;
Begin
sort(v,1,tam);
End;
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
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.
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.
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.
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.
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.
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******************}
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;
{******************alterar*****************}
procedure alterar;
begin
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);
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);
{************************************************************************}
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.
AGRADECIMENTOS
A MINHA ESPOSA MIRIÃ pela paciência das horas em que compilei todo o
material e durante muitas HORAS da noite.
CURSO DE INFORMÁTICA
Técnicas de Programação
1º Semestre 2004