Algoritmos - Lógica para Desenvolvimento de Programação PDF
Algoritmos - Lógica para Desenvolvimento de Programação PDF
Algoritmos - Lógica para Desenvolvimento de Programação PDF
1
Introdução
O material aqui apresentado foi recolhido de algumas literaturas de Estrutura de Dados e Tutoriais
da encontrados no sites da Internet.
A programação é para mim uma diversão, apesar de complexo, mas vejo como a capacidade de um
ser humano dominar e solucionar com recursos computacionais problemas do dia-a-dia
de uma Empresa, Corporação, etc...
O raciocínio da lógica para a programação traz ao indivíduo um novo mundo cheio de outros
mundos. Dominando a lógica você será capaz de aprender sem grandes dificuldades
qualquer outra linguagem de programação seja ela estruturada, orientada a objeto,
orientada a eventos.
2
Sobre o Autor
Atualmente trabalha como Webdesign / Webmaster na Embrapa Cerrados, sua principal tarefa está no
planejamaneto e desenvolvimento de Sites. Utiliza as linguagens HTML, JavaScript e
VbScript e Sistemas de Banco de Dados (ASP) para a Internet.
3
Abordagem Contextual
Muitas pessoas gostam de falar ou julgar que possuem e sabem usar o raciocínio
lógico, porém, quando questionadas direta ou indiretamente, perdem esta linha de raciocínio,
pois este depende de inúmeros fatores para completá-lo, tais como: calma, conhecimento,
vivência, versatibilidade, experiência, criatividade, ponderação, responsabilidade, entre
outros.
Bem sem mais delongas podemos dizer que lógica é a ciência que estudas as leis e
critéios de validade que regem o pensamento e a demonstração, ou seja, ciência dos
princípios formais do raciocínio.
Usar a lógica é um fator a ser considerado por todos, principalmente pelos
profissionais de informática (programadores, analistas de sistemas e suporte), pois seu dia-a-
dia dentro das organizações é solucionar problemas e atingir os objetivos apresentados por
seus usuários com eficiência e eficácia, utilizando recursos computacionais e/ou
automatizados macatronicamente. Saber lidar com problemas de ordem administrativa, de
controle, de planejamento e de estratégica requer atenção e boa performance de
conhecimento de nosso interesse é mostrar como desenvolver e aperfeiçoar melhor esta
técnica, lembrando que para isto, você deverá ser persistente e praticá-la constantemente,
chegando à exaustão sempre que julgar necessário.
ALGORITMO
PROGRAMAÇÃO ESTRUTURADA
4
seus componentes e do grau de interação entre eles. Para Dijkstra, o indiscutível iniciador
da programação estruturada, “a arte de programar consiste na arte de organizar e
dominar a complexidade”.
A idéia da Programação Estruturada, que vai ao encontro da mencionada tarefa do
programador, é reduzir a complexidade, em três níveis:
1. desenvolvimento do programa em diferentes fases por refinamento sucessivo
(desenvolvimento Top-Down);
2. decomposição do programa total em módulos funcionais, organizados de preferência num
sistema hierárquico;
3. usando dentro de cada módulo só um número muito limitado de estruturas básicas de
fluxo de controle.
O curso tem por objetivo apresentar aos alunos os conceitos e desenvolvimento da
programação estruturada, utilizando duas ferramentas muito utilizadas em cursos
acadêmicos, o Portugol e o Pascal.
PROGRAMA
LINGUAGENS DE PROGRAMAÇÃO
5
TÉCNICAS ATUAIS DE PROGRAMAÇÃO
Programação Seqüencial
Programação Estruturada
Programação Orientada a Eventos e Objetos
Programação Orientada a Objetos
ALGORITMOS EM “PORTUGOL”
OPERADORES ARITMÉTICOS
+ Adição
- Subtração
* Multiplicação
/ Divisão
OPERADORES RELACIONAIS
LINEARIZAÇÃO DE EXPRESSÕES
MODULARIZAÇÃO DE EXPRESSÕES
6
FUNÇÕES
BIBLIOTECAS DE FUNÇÕES
FUNÇÕES PRÉ-DEFINIDAS
VARIÁVEIS
A B C=A+B
2 5 7
7
De acordo com a figura acima A e B são Variáveis de Entrada e C é uma Variável de
Saída.
CONSTANTES
IDENTIFICADORES
Exemplos:
UMNOMEMUITOCOMPRIDOEDIFICILDELER
UM_NOME_MUITO_COMPRIDO_E_FACIL_DE_LER
TIPOS DE DADOS
8
ADMITE CARACTERES ALFANUMÉRICOS. OS NÚMEROS QUANDO DECLARADOS
CARACTERE COMO CARACTERES TORNAM SE REPRESENTATIVOS E PERDEM A ATRIBUIÇÃO DE
VALOR.
SINAL DE ATRIBUIÇÃO
Uma Variável nunca é eternamente igual a um valor, seu conteúdo pode ser alterado a
qualquer momento. Portanto para atribuir valores a variáveis devemos usar o sinal de “:=”.
Exemplos:
A := 2;
B := 3;
C := A + B;
SINAL DE IGUALDADE
PROGRAMA <<identificador>>;
CONST
<<identificador>> = <<dado>>
VAR
<<identificador>> : <<tipo>>;
ÍNICIO
{
COMANDOS DE ENTRADA,PROCESSAMENTO E SAÍDA
<<comando1>>;
<<comandoN>>
}
FIM.
9
ESTRUTURAS SEQÜÊNCIAIS
Como pode ser analisado no tópico anterior, todo programa possui uma estrutura
seqüencial determinada por um ÍNICIO e FIM.
A partir deste ponto de estudo, você terá um contato direto com a parte mais prática
deste trabalho. Anteriormente nos preocupamos em proporcionar a você, leitor, um
conhecimento teórico básico, de algns pontos que são por vezes causadores de dúvidas até a
alguns profissionais de informática considerados experientes. Sendo assim, daqui para frente
você terá um contato maior com a aplicação prática dos Algoritmos.
Para se criar um programa que seja executável dentro de um computador, você deverá
term em mente três pontos de trabalho: a entrada de dados, o seu processamamento e a saída
dos mesmos. Sendo assim, todo programa estará trabalhando com estes três conceitos. Se os
dados forem entrados de forma errada, serão consequentemente e resultarão em respostas
erradas. Desta forma, dizer a alguém que foi erro do computador é ser um pouco “medíocre”.
10
Exemplo 01
PROGRAMA MEDIA_FINAL
VAR
NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: INTEIRO
NOME : CARACTERE
INICIO
LEIA (NOME)
LEIA (NOTA1, NOTA2, NOTA3, NOTA4)
MEDIA <= (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4
ESCREVER (NOME, MEDIA)
FIM.
Exemplo 02
PROGRAMA AREA_CIRCUNFERENCIA
CONST PI = 3.1416
VAR RAIO, AREA : REAL
INICIO
LER (RAIO) {PROCESSAMENTO}
AREA <= PI * SQR(RAIO) {ENTRADA}
ESCREVER (“AREA =”, AREA) {SAÍDA}
FIM.
{LINHAS DE COMENTÁRIO}
11
Exercícios de Aprendizagem
Simples: Composta 1:
SE <<CONDIÇÃO>> SE <<CONDIÇÃO>>
ENTÃO <<COMANDO1>> ENTÃO <<COMANDO1>>
SENÃO <<COMANDO1>>
Composta 2:
SE <<CONDIÇÃO>>
ENTÃO INICIO
<<COMANDO1>>;
<<COMANDON>>
FIM;
SENÃO INICIO
<<COMANDO1>>; <<COMANDON>>
FIM;
12
OPERADORES LÓGICOS
Atuam sobre expressões retornando sempre valores lógicos como Falso ou Verdadeiro.
TABELA VERDADE
EXPRESSÕES LÓGICAS
Símbolo Significado
= Igual a
<> Diferente de
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a
Exemplo 01
PROGRAMA ACHA_MAIOR;
VAR A, B : INTEIRO;
INICIO
LER (A, B);
SE A>B
ENTÃO ESCREVER (A)
SENÃO ESCREVER (B)
FIM.
13
Exemplo 02
PROGRAMA MEDIA_FINAL;
VAR
NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: REAL;
NOME : CARACTERE [35]
INICIO
LER (NOME);
LER (NOTA1, NOTA2, NOTA3, NOTA4);
MEDIA := (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4;
SE MEDIA>=6
ENTÃO ESCREVER (‘APROVADO’)
SENÃO ESCREVER (‘REPROVADO’)
ESCREVER (NOME, MEDIA)
FIM.
NINHOS DE SE
SE <<CONDIÇÃO>>
ENTÃO <<COMANDO1>>
SENÃO SE <<CONDIÇÃO>>
ENTÃO <<COMANDO1>>
SENÃO <<COMANDO1>>
14
Exemplo 01
PROGRAMA ACHA_MAIOR;
VAR A, B, C : INTEIRO;
INICIO
LER (A, B, C);
SE (A>B) E (A>C)
ENTÃO ESCREVER (A)
SENÃO SE (B>A) E (B>C)
ENTÃO ESCREVER (B)
SENÃO ESCREVER (C)
FIM.
ESTRUTURAS DE CONDIÇÃO
FACA CASO
CASO <<CONDIÇÃO1>>
<<COMANDO1>>;
CASO <<CONDIÇÃON>>
<<COMANDO1>>;
OUTROS CASOS
<<COMANDO1>>;
FIM DE CASO
Exemplo 01
PROGRAMA ACHA_MAIOR;
VAR A, B, C : INTEIRO;
INICIO
LER (A, B, C);
FACA CASO
CASO (A>B) E (A>C)
ESCREVER (A);
CASO (B>A) E (B>C)
ESCREVER (B);
OUTROS CASOS
ESCREVER (C);
FIM DE CASO
FIM.
Exercícios de Aprendizagem
1) Ler três valores para os lados de um triângulo, considerando lados como: A, B e C. Verificar
se os lados fornecidos formam realmente um triângulo, e ser for esta condição verdadeira,
deverá ser indicado qual tipo de triângulo for formado: isósceles, escaleno ou equilátero.
15
2) Fazer a leitura de 3 valores para extrair uma equação do 2º grau. Deverá ser verificado se
existem raízes reais, uma ou duas raízes conforme necessário.
3) Ler quatro valores referentes a quatro notas escolares e um aluno e imprimr uma
mensagem dizendo que o alunos foi aprovado, se o valor da média escolar for maior ou
igual a 5. Se o aluno não foi aprovado, indicar uma mensagem informando esta condição.
Apresentar junto das mensagem o valor da média do aluno para qualquer condição.
4) Ler quatro valores referentes a quatro notas escolares de um aluno e imprimir uma
mensagem dizendo que o aluno foi aprovado, se o valor da média escolar for maior ou
igual a 7. Se o valor da média for menor que 7, solicitar a nota de exame, somar com o
valor da média e obter nova média. Se a nova média for maior a 5, apresentar uma
mensagem dizendo que o aluno foi aprovado em exame, se o aluno não foi aprovado,
indicar uma mensagem informando esta condição. Apresentar com as mensagens o valor
da média do aluno, para qualquer condição.
16
Repetição do Tipo: Teste lógico no Início do Looping
É usada para repetir N vezes uma ou mais instruções. Tendo como vantagem o fato de
não ser necessário o conhecimento prévio do número de repetições.
Forma Geral 2:
ENQUANTO <<CONDIÇÃO>> FACA
ÍNICIO
<<COMANDO1>>;
<<COMANDON>>
FIM;
Exemplo
Segue um algoritmo que calcule a soma dos salários dos funcionários de uma empresa.
O programa termina quando o usuário digitar um salário menor que 0.
PROGRAMA SOMA_SALARIOS;
VAR SOMA, SALARIO : REAL;
INICIO
SOMA:=O;
SALARIO:=1;
ENQUANTO SALARIO>=0
INICIO
LER (SALARIO);
SOMA:=SOMA+SALARIO
FIM;
ESCREVER (SOMA)
FIM.
Assim como a estrutura ENQUANTO É usada para repetir N vezes uma ou mais
instruções.
Sua validação é final fazendo com que a repetição seja executada pelo menos uma vez.
17
Forma Geral;
REPITA
<<COMANDO1>>;
<<COMANDON>>
ATE <<CONDIÇÃO>>
Exemplo 01
Segue um algoritmo que calcule a soma dos salários dos funcionários de uma empresa.
O programa termina quando o usuário digitar um salário menor que 0.
PROGRAMA SOMA_SALARIOS;
VAR
SOMA, SALARIO : REAL;
INICIO
SOMA:=O;
REPITA
LER (SALARIO);
SOMA:=SOMA+SALARIO
ATE SALARIO<0;
ESCREVER (SOMA)
FIM.
Exemplo 02
PROGRAMA PARES_2;
VAR I, PAR, CONTADOR : INTEIRO;
INICIO
CONTADOR := 0;
PAR := 0;
REPITA
ESCREVER (PAR);
PAR := PAR+2;
CONTADOR := CONTADOR+1;
ATE CONTADOR=100
FIM.
A estrutura repita..até_que tem o seu funcionamento controlado por decisão. Porém, irá
efetuar a execução de um conjunto de instruções pelo menos uma vez antes de verificar a
validade da condição estabelecida. Diferente da estrutura enquanto que executa somente um
conjunto de instruções, enquanto a condição é verdadeira.
Desta forma repita tem seu funcionamento em sentido contrário a enquanto, pois sempre irá
processar um conjunto de instruções, no mínimo uma vez até que a condição se torne
Verdadeira. Pra a estrutura repita um conjunto de instruções é executado enquanto a
condição se mantém Falsa e até que ela seja Verdadeira.
18
REPETIÇÃO DO TIPO: VARIÁVEL DE CONTROLE
<instruções>
fim_para
Exemplo
Pedir a leitura de um valor para a variável X, multiplicar este valor por 3 implicando-o à
variável de resposta R e apresentar o valor obtido, repetindo esta següência por cinco vezes.
Programa Looping_Para
Var
X, R ,CONT: Inteiro
Inicio
19
Exercícios de Aprendizagem
2X1=2
2X2=4
2X3=6
2X4=8
2 X 5 = 10
(...)
2 X 10 = 20
3) Apresentar o total da soma do cem primeiros números inteiros ( 1 + 2+ 3 + 4...+ 99 + 100 ).
4) Elaborar um programa que apresente no final o somatório dos valores pares existentes na
faixa de 1 até 500.
5) Apresentar todos os valores numéricos inteiros ímpares situados nafaixa de 0 a 20. Para
verificar se o número é ímpar, efetuar dentro da malha a verificação lógica desta condição
com a instrução se, perguntando se o número é ímpar, sendo mostre-o, não sendo, passe
para o próximo passo.
6) Apresentar todos os números divisíveis por 4 que sejam menores que 200. Para verificar se
o número é divisível por 4, efetuar dentro da malha de verificação lógica desta condição
com a instrução se, perguntando se o número é divisível, sendo, mostre-o, não sendo
passe para o próximo passo. A variável que controlará o contador deverá ser iniciada com
valor 1.
7) Apresentar as potências de 3 variando de 0 a 15. Deve ser considerado que qualquer
número elevado a zero é 1, e elevado a 1 é ele próprio.
8) Elaborar um programa que apresente o valor de uma potência de uma base qualquer
elevada a um expoente qualquer, ou seja, de N M .
9) Escreva um programa que apresente a série de Fibobnacci atéo décimo quinto termo. A
série de Fibonacci é formada pela seqüência: 1,1,2,3,5,8,13,21,34,... etc. Esta série se
caracteriza pela soma de um termo posterior com o seu anterior subseqüente.
20
A utilização deste tipo de estrutura de dados recebe diversos nomes, com: variáveis
indexadas, variáveis compostas, variáveis subscritas, arranjos, vetores, matrizes, tabelas em
memória ou arrays (do inglês). São vários os nomes encontrados na literatura voltada para o
estudo de técnicas de programação que envolvem a utilização das estruturas homogêneas de
dados. Por nós, serão definidas como matrizes.
As matrizes (tabelas em memória) são tipo de dados que podem ser “constituídos” à
medida que se fazem necessários , pois não é sempre que os tipos básicos (real, inteiro,
caractere ou lógico) e /ou variáveis simples são suficiente para representar a estrutura de
dados utilizado em um programa.
Uma matriz de uma dimensão ou vetor será, neste trabalho, representada por seu
nome e seu tamanho (dimensão) entre colchetes, desta forma seria uma matriz MD [1..n],
onde MD é o seu nome e possuindo uum tamanho de 1 a n. Isto significa que poderão ser
armazenados em MD até um valor definido pelo programador. Perceba que na utilização de
variáveis simples existe uma regra: uma variável pode conter apenas um valor por vez. No caso
das matrizes, esta poderão armazenar mais um valor por vez. No caso das matrizes, esta
poderão armazenar mais de um valor por vez, pos são dimensionadas, exatamente para este
fim. Desta forma poder-se á manipular uma quantidade maior de informação com pouco
trabalho de processamento. Deve-se apenas considerar que com relação à manipulação dos
elementos de uma matriz, eles ocorrerão de forma individualizada, pois nào é possível efetuar
a manipulação de todos os elementos do conjunto ao mesmo tempo.
A leitura de uma matriz é processada passo a passo, um elemento por vez. A instrução
de leitura é leia seuida da variável mais o índice. Abaixo, é apresentado a codificação em
portuguol da leitura de 8 notas de 8 alunos, cálculo da média e a apresentação da mesma.
21
Programa Media_Turma
Var
Md : conjunto [1..8] de real
Soma, media : real
I : inteiro
Inicio
Soma <= 0
Para I de 1 ate 8 faça
Leia (Md[I])
Soma <= Soma + MD[I]
Fim_Para
Média <= Soma / 8
Escreva (Media)
Fim.
O processo de escrita de uma matriz é bastante parecido com o processo de leitura de seus
elementos. Para esta ocorrência deverá ser utilizada a instrução escreva seguida da indicação
da variável e seu índice. Supondo que após a leitura das 8 notas, houvesse a necessidade de
apresentá-las antes da apresentação do valor da média. Abaixo é exibido a codificação da
escritados 8 alunos antes de ser apresentado o cálculo da média.
Programa Media_Turma
Var
Md : conjunto [1..8] de real
Soma, media : real
I : inteiro
Inicio
Soma <= 0
Para I de 1 ate 8 faça
Leia (Md[I])
Soma <= Soma + MD[I]
Fim_Para
Para I de 1 ate 8 faça
Escreva (Md[I])
Fim_Para
Média <= Soma / 8
Escreva (Media)
Fim.
Exercícios de Aprendizagem
22
3) Ler duas matrizes A e B do tipo vetor com 20 elementos. Construir uma matriz C, onde cada
elemento de C é a subtração do elemento correspondente de A com B.
4) Ler 15 elementos de uma matriz A do tipo vetor. Construir uma matriz B de mesmo tipo.
Observando a seguinte lei de formação: “Todo elemento de B deverá ser o quadrado do
elemento de A correspondente”.
5) Ler uma matriz A do tipo vetor com 15 elementos. Construir uma matriz B de mesmo tipo,
sendo que cada elemento da matriz B seja o fatorial do elemento correspondente da
matriz ª
6) Ler duas matrizes A e B do tipo vetor com 15 elementos cada. Construir uma matriz C,
sendo esta a junção das duas outras matrizes. Desta forma, C deverá Ter a capacidade de
armazenar 50 elementos.
7) Ler 20 elementos de uma matriz A tipo vetor e construir uma matriz B de mesma dimensão
com os mesmos elementos de A, sendo que estes deverão estar invertidos. Ou seja, o
primeiro elemento de A passa a ser o último elemento de B. O segundo elemento de A
passa a ser o penúltimo de B e assim por diante.
23
MATRIZES COM MAIS DE UMA DIMENSÃO
Anteriormente, você teve contato com o uso de uma única variável indexada com apenas
uma dimensão (uma coluna e várias linhas), quanto foi utilizado o exemplo para efetuar o
cálculo da média geral das médias dos oito alunos. A partir deste ponto, serão apresentadas as
tabelas com mais colunas, sendo assim teremos variáveis no sentido horizontal e vertical.
Com o conhecimento adquirido até este ponto, você teria condições suficientes para
elaborar um programa que efetuasse a leitura das notas dos alunos, o cálculo da média de
cada aluno e no final apresentar a média do grupo, utilizando-se de matrizes unidemensionais.
Porém, há de se condiderar que o trabalho seria grande, uma vez que se necessitaria manter
um controle de cada índice em cada matriz para um mesmo aluno.
Para facilitar o trabalho com estruturas deste porte é que serão utilizadas matrizes com
mais dimensões. A mais comum é a matriz de duas dimensões por se relacionar diretamente
com a utilização de tabelas. Matrizes com mais de duas dimensões são utilizadas com menos
freqüência, mas poderão ocorrer com momentos em que se necessite trabalhar com um
número maior de dimensões, estas serão fáceis de serem utilizadas se você dominar bem a
utilização de uma matrz com duas dimensões.
Um importante aspecto a ser considerado é que na manipulação de uma matriz é utilizada
uma única instrução de looping(enquanto, para ou repita). No caso de matrizes com mais
dimensões, deverá ser utilizado o número de loopings relativos ao tamanho de sua dimensão.
Desta forma, uma matriz de duas dimensões deverá ser controlada com dois loopings, sendo
que de três dimensões deverá ser controlada por três loopings e assim por diante.
Em matrizes de mais uma dimensão os seus elementos serão também manipulados de
forma individualizada, sendo a referência feita sempre através de dois índices: o primeiro para
indicar a linha e o segundo para indicar a coluna. Desta forma, TABELA[2,3], indica que está
sendo feita uma referência ao elemento armazenadona linha 3 coluna 3. Pode-se considerar
que uma matriz com mais de uma dimensão é também um vetor, sendo válido para este tipo
de matriz tudo o que já foi utilizado anteriormente para as matrizes de uma dimensão.
Uma matriz de das dimensões está sempre fazendo menção a linhas e colunas e será
representada por seu nome e seu tamanho (dimensão) entre colchetes, desta forma seria uma
matriz de duas dimensõesTABELA[1..8, 1..5], onde TABELA é o seu nome, possuindo um
tamanho de 8 linhas (de 1 a 8) e 5 colunas (de 1 a 5), ou seja, é uma matriz de 8 por 5 (8X5).
Isto significa que poderão ser armazenados em TABELA até 40 elementos. A figura 8.1
apresenta a matriz TABELA com a indicação dos endereços (posições) que poderão ser
utilizadas para armazenamento de seus elementos.
Uma matriz de duas dimensões será atribuída pelas instrução conjunto já utilizada para
definir o uso de uma matriz de uma dimensão, sendo bastante parecidos em sua referência. A
sintaze será: VARIAVEL : conjunto [<dimensão1: dimensão2>] de <tipo de dado>, onde
<dimensão1> e <dimensão2> serão indicaçã do tamanho da tabela e <tipo de dado> o tipo da
matriz, que poderá ser formada por valores reais, inteiros, lógicos ou caracteres.
24
Leitura dos Dados de uma Matriz
A leitura de uma matriz de duas dimensões assim como as matrizes de uma dimensão é
processada passo a passo, um elemento por vez, sendo utilizada a instrução leia seguida da
vairável mais os seus índices. A seguir é apresentado a codificação em português estruturado
da leitura das 4 notas bimestrais de 8 alunos, sem considerar o cálculo da média.
Programa Ler_Elementos
Var
Notas : conjunto [1..8, 1..4] de real
I, J : inteiro
Inicio
Para I de 1 até 8 faça
Para J de 1 até 4 faça
Leia(notas[I,J])
Fim_Para
Fim_Para
Fim.
O precesso de escrita será bastante parecido com o processo de leitura de seus elementos.
Supondo que após a leitura das notas dos 8 alunos, houvesse a necessidade de efetuar a
apresentação das notas. Abaixo é apresentado a codificação em português estruturado da
escrita das 4 notas dos 8 alunos.
Programa Ler_Elementos
Var
Notas : conjunto [1..8, 1..4] de real
I, J : inteiro
Inicio
Para I de 1 até 8 faça
Para J de 1 até 4 faça
Escreva(notas[I,J])
Fim_Para
Fim_Para
Fim.
Exercícios de Aprendizagem
1) Ler duas matrizes A e B, cada uma de duas dimensões com 5 linhas e 3 colunas. Construir
uma matriz C de mesma dimensão, onde C é formada pela soma dos elementos da matriz
A com os elementos da matriz B.
25
ESTRUTURA DE DADOS HETEROGÊNEAS
No tópicos anteriores, você teve um contato com técnicas de programação que envolveram
o uso de estruturas de dados homogêneas, através da utilização de matrizes de uma e duas
dimensões. Observou que somente foi possível trabalhar com um tipo de dado por matriz. No
momento em que se precisou trabalhar com dois tipos de dados diferentes, foi necessária a
utilização também de duas matrizes, uma de cada tipo.
Estrutura de um Registro
Agora você terá contato com a utilização da principal estrutura de dados, o registro, a qual
consiste em trabalhar vários dados de tipos diferentes (os campos) em uma mesma estrutura.
Por esta razão, este tipo de dado é considerado heterogêneo.
Atribuição de Registros
Os tipos registro devem ser declarados ou atribuídos antes da variáveis, pois poderá
ocorrer a necessidade de se declarar uma variável com o tipo registro anteriormente atribuído.
Para se declarar um tipo registro em português estruturado deverá ser utilizada a instrução
tipo em conjunto com a instrução registro...fim_registro, conforme a sintaxe indicada abaixo.
Tipo
<identificador> = registro
<lista dos campos e seus tipos>
fim_registro
var
<variável> : <identificador>
26
tipo
CAD_ALUNO = registro
NOME : caractere
NOTA1 : real
NOTA2 : real
NOTA3 : real
NOTA4 : real
fim_registro
var
ALUNO : CAD_ALUNO
Leitura de Registros
Programa Leitura
tipo
CAD_ALUNO = registro
NOME : caractere
NOTA1 : real
NOTA2 : real
NOTA3 : real
NOTA4 : real
fim_registro
var
ALUNO : CAD_ALUNO
Início
Leia (Aluno.Nome)
Leia (Aluno.Nota1)
Leia (Aluno.Nota2)
Leia (Aluno.Nota3)
Leia (Aluno.Nota4)
Fim
27
Escrita de Registros
Programa Escrita
tipo
CAD_ALUNO = registro
NOME : caractere
NOTA1 : real
NOTA2 : real
NOTA3 : real
NOTA4 : real
fim_registro
var
ALUNO : CAD_ALUNO
Início
Escreva (Aluno.Nome)
Escreva (Aluno.Nota1)
Escreva (Aluno.Nota2)
Escreva (Aluno.Nota3)
Escreva (Aluno.Nota4)
Fim
tipo
BIMESTRE = conjuno [1..4] de real
CAD_ALUNO = registro
NOME : caractere
NOTA : BIMESTRE
fim_registro
28
Observe que ao ser especificado o registro CAD_ALUNO, existe nele um campo chamado
NOTA do tipo bimestre, onde bimestre é a especificação de um tipo de conjunto matricial de
um única dimensão com capacidade para quatro elementos. Veja que o tipo de bimestre foi
anteriormente definido, pois se caracteriza por um tipo criado, assim como o tipo cad_aluno
atribuído à variável de registro ALUNO.
Programa Leitura
tipo
BIMESTRE = conjunto [1..4] de real
CAD_ALUNO = registro
NOME : caractere
NOTA : bimestre
fim_registro
var
ALUNO : CAD_ALUNO
I : inteiro
Inicio
Leia (ALUNO.NOME)
Para de I ate 4 faça
Leia (ALUNO.NOTA[I])
Fim_para
Fim.
29
Tipo
Var
Observe que após a instrução var, é indicada a variável de registros ALUNO, sendo esta um
conjunto de 8 registros do tipo Cad_Aluno, que por sua vez é Bimestre é um conjunto de
quatro valores reais.
A leitura de forma semelhante às anteriores. No entanto,m serão utilizadas dois laços, pois
além de controlar a entrada das quatro notas de cada aluno, tem-se que controlar a entrada
de 8 alunos. Esta estrutura é bastante similar a uma matriz de duas dimensões. Assim sendo,
observe o código em português estruturado:
Programa LEITURA
Tipo
Var
ALUNO: conjunto [1..8] de CAD_ALUNO
I, J : inteiro
início
Fim
Veja que o looping da variável J controla o número de alunos da turma, no caso 8, e o looping
da variável I controla o número de notas, até 4 por aluno. Para cada movimentação de mais
uma variável J existem quatro movimentações na variável I.
30
Escrita de Conjunto de Registros
Programa LEITURA
Tipo
Var
ALUNO: conjunto [1..8] de CAD_ALUNO
I, J : inteiro
início
Fim
PROGRAMAÇÃO MODULAR
As Sub-Rotinas
31
algoritmos complexos, permitindo assim possuir a modularização de um determinado
problema, considerado grande e de difícil solução.
Ao se trabalhar com esta técnica, pode-se deparar com a necessidade de se dividir uma
sub-rotina em outras tantas quantas forem necessárias, buscando uma solução mais simples
de uma parte do problema maior. O processo de dividir sub-rotinas em outras é denominado
Método de Refinamento Sucessivo.
Procedimentos
<instruções>
fim
A melhor maneira de se entender como trabalhar com sub-rotinas é fazer a sua aplicação em
um programa mais complexo. Para tanto, imagne o seguinte problema:
Exercício de Aprendizagem
Note que este programa deverá ser um conjunto de 5 rotinas, uma principal e 4
secundárias. A rotina principal efetuará o controle sobre as 4 rotinas secundárias, que por sua
vez pedirão a leitura de dois valores, farão a operação e apresentarão o resultado obtido.
Observe agora a codificação:
32
Programa calculadora
Var
Opcao : caractere
{sub-rotinas de cálculos}
procedimento ROTSOMA
var
r, a, b : real
início
Escreva (“Rotina de Soma”)
Escreva (“Entre um valor para A: “)
Leia(A)
Escreva (“Entre um valor para B:”)
Leia(B)
R <= A + B
Escreva (“A soma de A com B é = “, R)
Fim
procedimento ROTSSUBTRACAO
var
r, a, b : real
início
Escreva (“Rotina de Subtração”)
Escreva (“Entre um valor para A: “)
Leia(A)
Escreva (“Entre um valor para B:”)
Leia(B)
R <= A - B
Escreva (“A subtração de A com B é = “, R)
Fim
procedimento ROTMULTIPLICACAO
var
r, a, b : real
início
Escreva (“Rotina de Multiplicação”)
Escreva (“Entre um valor para A: “)
Leia(A)
Escreva (“Entre um valor para B:”)
Leia(B)
R <= A * B
Escreva (“A multiplicação de A com B é = “, R)
Fim
procedimento ROTDIVISAO
var
r, a, b : real
início
Escreva (“Rotina de Divisão”)
Escreva (“Entre um valor para A: “)
33
Leia(A)
Escreva (“Entre um valor para B:”)
Leia(B)
R <= A / B
Escreva (“A Divisão de A com B é = “, R)
Fim
{Programa Principal}
inicio
opcao <= “0”
enquanto (opcao <>”5 “) faça
escreva (“1 – Adição”)
escreva (“2 – Subtração”)
escreva (“3 – Multiplicação”)
escreva (“4 – Divisão”)
escreva (“5 – Fim do Programa”)
escreva (“Escolha uma opção”)
leia (opcao)
se opcao = “1” então
rotsoma
fim_se
se opcao = “2” então
rotsubtracao
fim_se
se opcao = “3” então
rotmultiplicacao
fim_se
se opcao = “4” então
rotdivisao
fim_se
fim_enquanto
fim.
Obs: Observe que em cada sub-rotina possuia suas próprias variáveis, estas porém só podem
ser acessadas dentro de cada procedimento, neste caso são chamadas de variáveis locais. No
caso da variável opcao é uma variável global, pode ser acessada em qualquer local do
programa, tanto nos procedimentos como no programa principal.
Funções
Uma função também é um bloco de programa como são os procedimentos, contendo início
e fim e sendo identificado por um nome, através do qual também será referenciada em
qualquer parte do programa principal. Uma sub-rotina de função é na verdade muito parecida
com uma sub-rotina de procedimento. A sintaxe em português estruturado será também
idêntica ao estudo anterior. Observe a seguir, o código em português estruturado de uma
função.
Português Estruturado
34
<variáveis>
início
<instruções>
fim.
A sua principal diferença está no fato de uma função retornar um determinado valor, que é
retornado no próprio nome da função. Quando se diz valor, devem ser levados em
consideração os valores numéricos, lógicos ou literais (caracteres).
Você deve ter observado a presença de um item na sintaxe da função, que são os
parâmetros, que tanto podem ser referenciados nos procedimentos, mas vejamos sua
utilidade.
Òs parâmetros têm por finalidade servir como um ponto de comunicação bidirecional entre
uma sub-rotina e o programa principal ou com uma outra sub-rotina hierarquicamente de
nível mais alto. Desta forma, é possível passar valores de uma sub-rotina ou rotina chamadora
à outra sub-rotina e vice-versa, através do uso de parâmetros que poderão ser formais ou
reais.
Serão considerados parâmetros formais quando forem declarados através de variáveis
juntamente com a identificação do nome da sub-rotina, os quais serão tratados exatamente da
mesma forma que são tratadas as variáveis globais ou locais.
Serão considerados parâmetros Reais quando estes substituírem os parâmetros formais,
quando a utilização da sub-rotina por um programa principal ou por uma rotina chamadora.
35
Utilização de Funções
Criaremos uma função que calcule a raiz cúbica de um determinado número inserido pelo
usuário. Observe o Programa:
Programa Raiz_Cubica
Var
I : Inteiro
Função Cubo(N) : Real
Inicio
Cubo <= N * N * N
Fim
Inicio
Leia (I)
Escreva(Cubo(I))
Fim.
Observe que neste caso o parâmetro formal foi a variável “ N ”, enquanto o parâmetro
real foi a variável “I ”.
36