Livro
Website: | Moodle-UNESP |
Kurs: | Moodle 2.5. Ricardo Wurhmann Saad |
Buch: | Livro |
Gedruckt von: | Gast |
Datum: | Samstag, 18. Mai 2024, 07:41 |
Beschreibung
Livro com dois capítulos (cada capítulo com 1 sub-capítulos)
1. Capítulo 1
5.0 - Introdução a Programação Pascal
Linguagem de alto nível e, com propósito geral, criado pelo professor NIKLAUS WIRTH da Universidade Técnica de Zuric, na Suíça, em 1971. O nome é uma homenagem ao famoso filósofo e matemático Francês do século XVII Blaise Pascal.
- Linguagem estruturada, confiável e possui portabilidade.
- Não é uma linguagem case sensitive !
- Linguagem compilada.
- Variáveis - Devem ser declaradas no início do programa.
INTEGER - 2488
REAL 1.0
CHAR ‘Y’
BOOLEAN TRUE, FALSE
TEXT
STRING “145” - 255 Caracteres.
- Pascal Padrão - ISO (International Standard Organization)
36 palavras reservadas
5 tipos de dados
20 funções
15 procedimentos
5.1 - Palavras Reservadas
ABSOLUTE |
LABEL |
VAR |
AND |
MOD |
WHILE |
ARRAY |
NIL |
XOR |
BEGIN |
NOT |
|
CASE |
OF |
|
CONST |
OR |
|
DIV |
PACKED |
|
DO |
PROCEDURE |
|
DOWNTO |
PROGRAM |
|
ELSE |
RECORD |
|
END |
REPEAT |
|
EXTERNAL |
SET |
|
FILE |
SHI |
|
FOR |
SHR |
|
FORWARD |
THEN |
|
FUNCTION |
TO |
|
GOTO |
TYPE |
|
IF |
UNTIL |
|
IN |
|
|
|
|
|
5.2 - Estrutura do Programa
Ex. 1.
program alo;
begin
writeln(‘Alo ai !’);
end.
Ex. 2.
program teu;
procedure jose
begin
end
function jose1
begin
end
begin
.
.
end.
5.3 - Operadores
Aritméticos - + , - , * , / , Div (inteira), Mod (módulo)
Lógicos - not, and, or
Relacionais - =, <>, >, < , >= , <=
Strings - +
5.3.1 - Output
Procedure Writeln : é a mais comum função de output do Pascal. Sua finalidade é escrever informações na tela. O formato geral é:
Writeln(item, item, ....);
Item pode ser um valor literal, um caractere, uma string ou um valor booleano. Após a impressão o cursor se move para o início da próxima linha. Para manter o cursor após o último caractere impresso, use o comando
Write(item, item, ....);
Pode-se também usar especificadores para definir o comprimento de um dado item:
Writeln(item:width);
Onde width é uma expressão inteira.
Ex.:
A:= 10; b:= 100;
Name := ‘FRANK’;
writeln(A,B); 10100
Writeln(A,’ ‘,B); 10 100
Writeln(A:4,B:4); 10 100
Writeln(‘Hi’, Name); HiFRANK
Writeln(‘Hi’,Name:6,A:3); Hi, FRANK 10
5.3.2 - InPut
O Pascal Padrão tem duas funções, Read e Readln, que lêem dados do teclado:
Read (item , item, ....);
Readln (item , item, ...);
Seu funcionamento é semelhante ao do Writeln.
5.4 - Constantes e Variáveis
5.4.1 - Constantes
Constantes são objetos cujos valores não variam durante a execução do programa. Elas podem ser qualquer tipo de dado. O tipo de uma constante é compreendido pelo formato de seu valor literal ou atribuído.
5.4.1.1 - Área de Declaração
const
contagem_max =25;
data =‘03/06/58’;
versao =‘12.2’;
raio =1.22;
caractere_bip = ^G;
5.4.2 - Variáveis
Variáveis são objetos nomeados cujos valores podem variar durante a execução do programa. O tipo de cada variável deve ser explicitamente declarado antes dela ser usada num programa. As variáveis no Pascal não são automaticamente inicializadas com um valor quando são declaradas e, portanto, uma variável é considerada indefinida até um valor ser explicitamente atribuído a ela. As declarações de variáveis possuem a forma:
<declaração de variável> :=<identificador>{,<identificador>}:<tipo>;
5.4.2.1 - Área de Declaração
var
ch : char;
preco : real;
indice1,indice2,contagem: integer;
nome :string[30];
5.4.2.2 - Tipos de Variáveis
O Pascal Padrão fornece vários tipos de dados predefinidos ou padrões para variáveis e constantes:
INTEGER
REAL
CHARacter
BOOLEAN
TEXT
Onde cada tipo pode representar uma abrangencia de valores e caracteres.
5.4.3 - Pontuação
Os programas em Pascal utilizam três tipos básicos de pontuação: a vírgula (,), o ponto e vírgula (;) e o ponto (.).
A vírgula é utilizada para separar itens numa lista, como no português. Portanto, a declaração
var
contador, indice, valor :integer;
definirá cada um dos três identificarores como variáveis do tipo integer.
O ponto e vírgula é um separador de comandos e não um finalizador de comandos. Este, talvez, seja um dos mais confusos conceitos para os novos programadores em Pascal.
Não existe ponto e vírgula separando begin e o primeiro comando, e o último comando e end num comando composto porque begin e end são delimitadores, e não comandos. O comando composto é considerado como um simples comando no Pascal, e assim um separador com o ponto e vírgula é utilizado normalmente após o delimitador end, a menos que o comando composto forme uma parte intermediária de outra estrutura.
O ponto é utilizado após o último comando end para indentificar o último comando no programa. Isto permite o compilador verificar que todos os delimitadores begin possuem um delimitador end respectivo.
5.4.4 - Expressões
Comandos e atribuições
x = x + 1
Composta por variáveis , constantes e operadores.
Ex.:
program vazio;
var
soma, a, b : integer;
begin
begin
writeln(‘Programa soma de 2 numeros’);
writeln;
write(‘Entre com o primeiro numero - ‘);
readln(a);
writeln;
write(‘Entre com o segundo numero - ‘);
readln(b);
writeln;
soma:=a+b;
writeln(‘A soma de a e b é - ‘ , soma);
end
end.
5.4.5 - Exercícios
1. Fazer um programa para ler três numeros do teclado e tirar a média aritmética deles.
2. Escreva o resultado do programa abaixo :
Program teste;
Var
X1,X2,X3,X4,X5,X6,X7,X8 : integer;
begin
X1 := 1;
X2 := 2;
X3 := 3;
X4 := 4;
X5 := 5;
X6 := 6;
X7 := 7;
X8 := 8;
Writeln (X1:2, X2:2, X3:2, X4:2 , X5:2, X6:2, X7:2, X8:2);
X1 := X8;
X2 := X7;
X3 := X6;
X4 := X5;
X5 := X4;
X6 := X3;
X7 := X2;
X8 := X1;
Writeln (X1:2, X2:2, X3:2, X4:2 , X5:2, X6:2, X7:2, X8:2);
end.
3. Calcule as expressões abaixo e indique quais são invalidas. Justifique.
Dados X : integer e Y : real
A) X := 4 /2;
B) Y := 0;
X := 2;
Y := (X+1) << X;
X := X * 7;
Y := Y + X div 3 - X mod 4;
C) Y := 4;
X := Y + 1
D) X := 1;
Y := (X -1) / (X >> 1);
5.5 - Estruturas de Controle
5.5.1 - Comando IF
Casos em que você quer executar uma parte do seu programa somente quando uma dada condição é verdadeira ou não.
IF condição THEN comando
IF condição THEN comando1
ELSE comando2;
if (a < b ) then
a=b
else
a=c
Se for necessário executar mais de um comando dentro do if então deve-se usar um comando composto. Um comando composto consiste da palavra chave begin, alguns comandos separados por ;, e a palavra chave end.
Ex.:
If b = 0.0 then
writeln(´Divisão por zero não é permitido´)
else
begin
ratio := a/b;
writeln(´A razão é ´, ratio);
end;
5.5.2 - Comando CASE
Este comando dá ao seu programa a possibilidade de escolher entre alternativas sem ter que especificar muitos if´s.
O comando case consiste de uma expressão ou condição e uma lista de comandos, cada um precedido por um case label (rótulo) do mesmo tipo da expressão ou condição.
CASE expressão OF
constante1 : comando1;
constante2 : comando n;
END;
Ex.:
case soma of
1: resultado:= a + b;
2: resultado:= a - b;
3: resultado:= a * b;
else
resultado:=0;
end;
Ex.:
case resposta of
´S´,´s´ : writeln(‘Opcao confirmada.´);
´N´,´n´ : writeln(‘Opcao cancelada.´)
else
writeln(´Opcao invalida.´);
end;
5.5.3 - Comando WHILE (Laços/Loop)
Assim como há comandos que você os executa sob certas condições, há outros comandos que você pode querer executá-los repetidamente.
WHILE condição DO
comando;
WHILE condição DO
begin
comandos
comandos
end;
Ex.:
program laco1;
const
limite=20;
var
k:integer;
begin
write(‘Entre com o valor inicial (menos o que’,limite,’)-’);
readln(k);
while(k<>limite) do
begin
k:=k+2;
writeln(k);
end;
write;
end.
5.5.4 - Comando REPEAT ... UNTIL
REPEAT
comando(s);
UNTIL condição;
Ex.:
repeat
begin
k:=k+z;
writen(k);
end;
until(k=limite);
5.5.5 - Comando FOR
É o tipo de loop encontrado na maioria das linguagens de programação. Basicamente consiste de um conjuntos de comandos executados um número fixado de vezes, enquanto uma variável, conhecida como variável de índice, passa pelos valores da faixa especificada.
FOR var:=expressão1 TO expressão2 DO comando;
FOR var:=expressão1 DOWNTO expressão2 DO comando;
Ex.1:
program media3;
var
contagem, itens : integer;
dado,soma,media : real;
begin
write(‘Entre com o numero de itens para a média - ‘);
readln(itens);
soma:=0.0;
for contagem:=1 to itens do
begin
write(‘Entre com o valor’,contagem,’- ‘);
readln(dado);
soma:=soma+dado;
end;
media:=soma / itens;
write(‘Media=‘,media:8:2);
end.
Ex.2:
program eu;
var
i: integer;
begin
i:=1;
for i:=1 to 100 do
writeln(i);
end.
Ex.3: Usando while
programa eu;
var
i:integer;
begin
i:=1;
while(i<1000) do
begin
writeln(i);
i:=i+1;
end;
Ex.4:
programa saida;
var
a:integer;
b:real;
c:char;
d:boolean;
e:string[15];
begin
a := 45;
b := 1.33;
c ´:= ´x´
d := false;
e := ´Turbo Pascal´;
writeln(a,b,c,d,e);
writeln(a,´ ´,b,´ ´,c,´ ´,d,´ ´,e);
end.
Lista de Procedure e Funções do Pascal
CLREOL - Apaga os caracteres desde a posição do cursor até o fim da linha.
CLRSCR - Limpa a tela.
DELLINE - Apaga uma linha.
INSLINE - Inseri uma linha vazia.
GOTOXY (C,L)- Posiciona o cursor (Coluna, Linha).
DELAY(num) - Laço de atraso de tempo (Segundos).
EXIT - Sai do bloco corrente.
HALT - Força o retorno ao DOS.
ABS(num) - Valor absoluto - Argumento inteiro ou real.
ARCTAN(num) - Ângulo em radianos cuja tangente é num - inteiro ou real.
COS(num) - Co-seno do ângulo.
EXP(num) - Exponencial.
FRAC(num) - Parte fracinaria de num.
INT(num) - Parte inteira de num.
LN(num) - Logaritmo natural.
SIN(num) - Seno do ângulo.
SQR(num) - Quadrado de num.
SQRT(num) - Raiz quadrada de num.
CHR(num) - Retorna o valor da tabela ASCII.
ROUND(num) - Arredondamento.
TRUNC(num) - Truncamento da expressão real -> inteiro
RANDOM(num) - Retorna um número randómico >= 0
STR(valor) - Converte o valor da expressão númerica para String.
VAL(st) - Converte st para um valor numerico que ela representa.
CONCAT(st1,st2,..) - Retorna uma string que é o resultado da concatenação de todos os strings.
LENGTH(st) - Retorna o tamanho em caracteres da string st.
POS(obj,alvo) - Procura a primeira ocorrência do string obj. Retornando a posição do primeiro caracter se for detectado a coinncidência e zero, caso contrário.
1.1. Sub-Capítulo
5.5.6 - Exercicíos:
1. Escrever um programa para ler uma string e imprimir o numero de caracteres ´a´ encontrados nela.
2. Escrever um programa para ler duas strings e imprimir o numero de letras que existem nas duas strings.
3. Faça um programa que leia numeros em ponto flutuante e imprima o seno do numero. Acaba quando o programa ler zero.
4. Digite o programa abaixo
Program sai
var
n , m : integer;
r : real;
begin
r := 1.23456789;
n := 12;
m := 0;
writeln(m:2,’ ‘,r:n:m);
m := 1;
writeln(m:2,’ ‘,r:n:m);
m := 2;
writeln(m:2,’ ‘,r:n:m);
m := 3;
writeln(m:2,’ ‘,r:n:m);
m := 4;
writeln(m:2,’ ‘,r:n:m);
m := 5;
writeln(m:2,’ ‘,r:n:m);
m := 6;
writeln(m:2,’ ‘,r:n:m);
m := 7;
writeln(m:2,’ ‘,r:n:m);
m := 8;
writeln(m:2,’ ‘,r:n:m);
m := 9;
writeln(m:2,’ ‘,r:n:m);
m := 10;
writeln(m:2,’ ‘,r:n:m);
m := 11;
end.
5. Em Pascal pode se ter erros de “Overflow” ou Underflow”, o programa abaixo ilustra este tipo de erro.
Program overflow;
var
res : integer;
Begin
res := 32767 + 1;
writeln(res);
end.
6. Escreva um programa em Pascal para resolver a equação do 2 grau, obtendo os valores de x1 e x2, não esqueça que não se pode calcular raiz de numeros negativos. A função que calcular a raiz quadrada é sqrt().
7. Digite o programa abaixo:
Program quadrado;
var
a : real;
begin
writeln(‘Programa do quadrado e da raiz quadrada.’);
writeln();
write(‘Entre com o valor - ‘);
readln(a);
writeln;
writeln(‘Entrada = ‘,a:10:3);
writeln(‘Quadrado = ‘,sqr(a):10:3);
writeln(‘Raiz quadrada = ‘, sqrt(a):10:3);
writeln;
writeln(‘ - calculado - ‘);
end.
8. Escreva um programa em Pascal para calcular a média quilômetros/litros de um automóvel.
Leia a quantidade de quilômetros rodados e com a quantidade de gasolina gasta em litros.
média = Km / litros
2. Capítulo 2
5.7 - Procedures e Funções
5.7.1 - Procedures
Procedures e Functions permitem incluir blocos adicionais no bloco do programa principal. Cada procedure ou function tem um cabeçalho seguido por um bloco. A qual faz parte do programa principal.
Procedure inicia;
begin
x := 10;
y := 2.5;
n := ´Sistema Inicializado´;
end;
Sua chamada no programa principal é feito da seguinte maneira
Program Teste_procedimento;
var
x : integer;
y : real;
n : string;
Procedure inicia;
begin
.....
end;
begin (programa principal )
writeln(´Chamada a rotina INICIA : ´);
inicia;
writeln(´Rotina INICIA terminada. ´);
end.
Ex.:
Program simples;
var
x : integer;
Procedure troca;
begin
x :=1;
end;
begin
x :=0;
troca;
write(x);
end.
No programa anterior a variável x, foi definida como global, por este motivo posso alterar seu conteúdo dentro da procedure Troca.
Considere agora:
Program simples;
var
x : integer;
Procedure troca;
var
x : integer;
begin
x := 1;
end;
begin
x :=0;
troca;
write(x);
end.
Temos duas variáveis, ambas denominadas x. A primeira é uma variável global e a outra (definida na Procedure) é local à procedure. O comando de atribuição x:=1 atribui o valor 1 à variável local x. Portanto x:=1 não tem efeito sobre a variável global x que continua igual a zero.
Ao declarar sua variável local com o mesmo nome de uma variável global, inibe ao procedimento o acesso àquela variável global.
5.7.1.1 - Parâmetros de uma Procedure
Tanto uma Procedure como uma Function podem receber uma lista de parâmetros. Obeserve o programa abaixo.
Program teste_var;
var
x : integer;
y ; real;
Procedure calcula;
var
y : integer;
z : real;
begin
y := 10;
z := 1.5;
x := trunc(x*y*z);
end;
begin
y := 2.5;
x := 4;
calcula;
writeln(x:10,y:10:4);
end.
Resposta: 60 2.5000
Neste exemplo a variável x utilizada pela rotina é global (Visível de qualquer bloco do programa). Podemos declarar a variável x como argumento da rotina:
Procedure calcula(var x:integer);
Desta maneira criou-se uma nova variável local à procedure que será utilizada para fazer a passagem de um parâmetro do programa principal para a rotina. O programa principal ficaria assim.
begin
y := 2.5;
x := 4;
calcula(x);
writeln(x:10,y:10:4);
end.
O nome da variável do parâmetro mão precisa ser o mesmo do programa principal.
5.7.1.2 - Passagem de Parâmetros
Há dois tipos de passagem de parâmetros: por referência e por valor.
5.7.1.2.1 - Passagem por Valor
É passada para a sub rotina somente o valor dos argumentos. A variável declara no cabeçalho da rotina é uma nova variável que recebe o valor do argumento. A alteração do valor desta variável não implica na alteração do argumento no bloco que chamou a rotina. Exemplo:
Ex.: Program raizes;
var
x : real;
Procedure raiz(x:real);
begin
x := sqrt(x);
writeln(‘A raiz e’’ :’,x);
end;
begin
write(‘Digite um numero :’);
readln(x);
raiz(x);
writeln(‘X = ‘, x);
end.
Resposta : Digite um numero : 4
A raiz é: 2
X = 4
5.7.1.2.2 - Passagem por referência
Neste caso a variável declarada no cabeçalho da rotina passa a ocupar a mesma posição de memória do argumento. Desta forma, qualquer alteração da variável dentro da rotina implicará na alteração do argumento.
Procedure raiz(var x:real);
Ex.: Program raizes;
var
x : real;
Procedure raiz(var x:real);
begin
x := sqrt(x);
writeln(‘A raiz e’’ :’,x);
end;
begin
write(‘Digite um numero :’);
readln(x);
raiz(x);
writeln(‘X = ‘, x);
end.
Resposta : Digite um numero : 4
A raiz é: 2
X = 2
5.7.1.3 - Variáveis Globais e Locais
As variáveis globais são visíveis em qualquer bloco do programa ! São declaradas no programa principal.
As variáveis locais podemos declarar interna a um bloco. Ela não é visível a blocos externos e só é alocada na chamada do bloco.
Ex.:
Programa vari;
var
x : integer;
y : real;
procedure calculo;
var
y : integer;
z : real;
begin
y :=10;
z :=1.5;
x := x*y*z;
end;
begin
y :=2.5;
x :=4;
calculo;
writeln(x:10, y:10:4);
end.
5.7.1.4 - Exercícios Resolvidos
1. Escreva um programa para calcular a média aritmética para n valores.
program serie1;
var
n : integer;
i : integer;
a : integer;
soma : real;
begin
writeln('Programa para calcular a media arimética para n valores');
writeln;
writeln('Entre com o numero de valores');
readln(n);
i := 1;
while (i <= n) do
begin
write('Elemento ',i,' = ');
readln(a);
soma := soma + a;
i := i + 1;
end;
writeln;
soma :=(soma / n);
writeln('A media dos ',n,' elementos eh ',soma:10:4);
readln(a);
end.
2. Escreva um programa para ler dois caracteres e verificar qual deles é o maior , menor ou igual.
program serie2;
var
a : char;
b : char;
menor , igual , maior : boolean;
begin
writeln('Programa para comparar caracteres');
writeln;
write('Entre com o primeiro caractere: ');
readln(a);
write('Entre com o segundo caractere: ');
readln(b);
writeln;
menor := a < b;
igual := a= b;
maior := a > b;
writeln('O primeiro caractere e'' menor do que o segundo - ',menor);
writeln('O primeiro caractere e'' igual ao segundo - ',igual);
writeln('O primeiro caractere e'' maior do que o segundo - ', maior);
writeln(' - executado -');
readln(a);
end.
3. Escreva um programa para ler dois caracteres e calcular o maior entre eles usando uma procedure.
program serie2a;
var
a : char;
b : char;
procedure compute;
var
menor , igual , maior : boolean;
begin
menor := a < b;
igual := a= b;
maior := a > b;
writeln('O primeiro caractere e'' menor do que o segundo - ',menor);
writeln('O primeiro caractere e'' igual ao segundo - ',igual);
writeln('O primeiro caractere e'' maior do que o segundo - ', maior);
end;
begin
writeln('Programa para comparar caracteres');
writeln;
write('Entre com o primeiro caractere: ');
readln(a);
write('Entre com o segundo caractere: ');
readln(b);
writeln;
compute;
writeln(' - executado -');
readln(a);
end.
4. Escreva um programa para calcular a equação .
{*** o programa calcula a equacao f(x) = Somatoria Y * x2 - srq(x) ****}
program serie3;
var
x : real;
y : real;
somay : integer;
func : real;
a : integer;
begin
writeln('Programa para resolver equacao');
writeln;
x:=100;
while (x <= 150) do
begin
y := 100;
while (y <= 200) do
begin
somay := somay + 1;
y := y + 0.5;
end;
func := (somay * (x*x) - sqr(x));
writeln('Para x = ',x,' f(x) = ',func);
x := x + 0.3;
end;
writeln(' - executado -');
readln(a);
end.
5. Escreva um programa para calcular o fatorial de um numero.
{*** o programa calcula o fatorial de um numero ****}
program serie4;
var
num : integer;
i : integer;
res : integer;
a : integer;
t : boolean;
begin
t:= true;
while (t) do
begin
writeln('Programa para calcular o fatorial');
writeln;
res:=1;
i:=1;
write('Entre com o numero ');
readln(num);
while(i <= num) do
begin
res := res * i;
i := i + 1;
end;
writeln('O fatorial de ',num,' eh = ',res);
writeln(' - executado -');
end;
end.
6. Escreva um programa para resolver a equação do segundo grau.
{*** o programa calcula a equacao do 2 grau ****}
program serie5;
var
a : integer;
b : integer;
c : integer;
x1: real;
x2: real;
d : integer;
begin
writeln('Programa para resolver a equacao do 2 grau');
writeln;
write('Entre com o valor de a ');
readln(a);
write('Entre com o valor de b ');
readln(b);
write('Entre com o valor de c ');
readln(c);
writeln;
d := ((sqr(b)-(4*a*c));
if(d >= 0) then
begin
x1:=((-b+(sqrt(d))/(2*a)));
writeln('Valor de x1 = ',x1:5:2);
x2:=((-b-(sqrt(d))/(2*a)));
writeln('Valor de x2 = ',x2:5:2);
end
else
writeln('Impossivel calcular raiz quadrada de numero negativo !');
writeln(' - executado -');
readln(a);
end.
7 - Escreva um programa para converte centimetros em metros .
{*** o programa converte centimetros em metros ****}
program serie6;
var
a : real;
metros : real;
begin
writeln('Programa para converter centímetro em metro');
writeln;
write('Entre com o valor em centimetros ');
readln(a);
metros := (a / 100);
writeln(a:5:2,' centimetros eh = ',metros:5:2,' metros');
writeln(' - executado -');
readln(a);
end.
5.7.2 - Functions
É um tipo especial de procedimento que calcula um valor.
Como as Procedures as Funções em Pascal são programas completos que atuam guando seus nomes são referenciados no texto dos programas. Existem muitos deles que já vêm pré-programadas, como READ, WRITE. Mas é possivel também ao programador fazer os seus próprios programas.
Toda função resulta num único valor de resposta !
Possui um nome e zero ou mais argumentos, que são colocados entre parênteses.
Ex.
Program Fcubo;
var
num :integer;
function cubo(x:integer):integer;
begin
cubo:= x*x*x;
end;
begin
readln(num);
writeln(‘O cubo de ‘,num,’eh’,cubo(num));
end.
O importante nas funções, é que elas sempre retornam um valor, o que significa que as funções devem ter um tipo: Assim, podemos ler a declaração acima da seguinte maneira: A função cubo tem um parâmetro x que é do tipo inteiro e que dá resultado do tipo inteiro.
2.1. Sub-Capítulo 2
5.8.1.1.1 - Algoritmo de Busca Linear
Este algoritmo faz uma busca no vetor procurando todas as ocorrências do elemento desejado, portanto este algoritmo permite elementos duplicados no vetor. O algoritmo mostra a posição onde o elementos foi encontrado dentro do vetor. Á variável C é um contador, para verificar se foi encontrada alguma ocorrência.
5.8.1.1.1.1 - Estrutura do Algoritmo
writeln('Entre com o elemento a ser encontrado no vetor !');
readln(e);
i := 1;
while (i <= n) do
begin
if(mat[i] = e) then
begin
writeln('Elemento ',e,' encontrado na posicao ',i);
c := c + 1;
end;
i :=i +1;
end;
5.8.1.1.1.2 - Programa Completo
(** Programa para testar o algoritmo de Busca Linear **
** Para n ocorrencias de um elemeto desejado ***
** Autor: Ricardo W. Saad **
** Data : 10/03/97 **
** Para um vetor de 30 elementos **)
program Busc_lin;
var
mat:array[1..30] OF INTEGER;
n:integer;
i:integer;
e:integer;
c:integer;
begin
n :=0;
i :=0;
c :=0;
e :=0;
writeln('Entre com a quantidade de elementos do vetor no maximo 30');
readln(n);
while (i <= n) do
begin
mat[i] := 0;
i := i + 1;
end;
writeln('Entre com os elementos do vetor');
for i:= 1 to n do
readln(mat[i]);
writeln('Elementos lidos ');
writeln;
for i:= 1 to n do
write(mat[i],' ');
writeln;
writeln('Entre com o elemento a ser encontrado no vetor !');
readln(e);
i := 1;
while (i <= n) do
begin
if(mat[i] = e) then
begin
writeln('Elemento ',e,' encontrado na posicao ',i);
c := c + 1;
end;
i :=i +1;
end;
if(c=0) then
begin
writeln('Elemento ',e,'nao encontrado');
end
else
begin
writeln('Elemento ',e,' econtrado ',c,' vezes');
end;
end.
5.8.1.1.1.3 - Teste de Mesa
mat
44 |
55 |
12 |
42 |
94 |
18 |
06 |
67 |
1 2 3 4 5 6 7 8
E |
I |
N |
C |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.8.1.1.2 - Algoritmo de Busca Binária
O algoritmo de Busca Binária requer que os elementos do vetor estejam ordenados de forma crescente e não permite a existencia de elementos duplicados no vetor. Este algoritmo trabalha com posições fornecidas pelo usuário, na tentativa de localizar o elemento desejado , o algoritmo verifica se o elemento procurado é menor ou maiior que o elemento que se encontra na posição sugerida pelo usuário , desprezando os elementos do vetor que se encontrem abaixo ou acima da posição sugerida.
5.8.1.1.2.1 - Estrutura do Algoritmo
writeln('Entre com o elemento a ser encontrado no vetor !');
readln(e);
i := 1;
r := n;
found := 1;
while (i <= n) and (found = 1) do
begin
writeln;
writeln('Entre com uma posicao entre ',i,' e ',r);
readln(pos);
if (pos < i ) or (pos > r) then
found := 1
else
begin
if(mat[pos] = e) or (i = r) then
begin
writeln;
writeln('Elemento ',e,' encontrado na posicao ',pos);
found:=0;
end
else
begin
if mat[pos] < e then
i :=pos + 1
else
r := pos - 1
end
end;
end;
end
5.8.1.1.2.2 - Programa Completo
(** Programa para testar o algoritmo de Busca Binaria **
** Para 1 ocorrencias de um elemeto desejado ***
** Requer que o vetor esteja ordenado e sem elementos duplicados **
** Autor: Ricardo W. Saad **
** Data : 10/03/97 **
** Para um vetor de 30 elementos **)
program Busc_bin;
uses Crt;
var
mat:array[1..30] OF INTEGER;
n:integer;
i:integer;
e:integer;
c:integer;
j:integer;
temp:integer;
r:integer;
found:integer;
pos:integer;
begin
n :=0;
i :=0;
c :=0;
e :=0;
clrscr;
writeln('Entre com a quantidade de elementos do vetor no maximo 30');
readln(n);
while (i <= n) do
begin
mat[i] := 0;
i := i + 1;
end;
writeln('Entre com os elementos do vetor');
for i:= 1 to n do
begin
readln(mat[i]);
for j:= 1 to i do
begin
if (mat[i] = mat[j]) and (i <> j) then
begin
writeln;
writeln('Elemento duplicado ! Digite outro valor');
i := i - 1;
end;
end;
end;
(** Ordenacao do vetor **)
for i := 1 to n do
begin
for j:= n downto i do
begin
if(mat[i] > mat[j]) then
begin
temp := mat[i];
mat[i] := mat[j];
mat[j] := temp;
end;
end;
end;
writeln('Elementos lidos e ordenados');
writeln;
for i:= 1 to n do
write(mat[i],' ');
writeln;
writeln('Entre com o elemento a ser encontrado no vetor !');
readln(e);
i := 1;
r := n;
found := 1;
while (i <= n) and (found = 1) do
begin
writeln;
writeln('Entre com uma posicao entre ',i,' e ',r);
readln(pos);
if (pos < i ) or (pos > r) then
found := 1
else
begin
if(mat[pos] = e) or (i = r) then
begin
writeln;
writeln('Elemento ',e,' encontrado na posicao ',pos);
found:=0;
end
else
begin
if mat[pos] < e then
i :=pos + 1
else
r := pos - 1
end
end;
end;
end.