Vous êtes sur la page 1sur 44

CENTRO EDUCACIONAL FUCAPI – CEEF

CURSO TÉCNICO – INFORMÁTICA


APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

APOSTILA

LÓGICA E
TÉCNICAS DE
PROGRAMAÇÃO

REVISÃO 03 – MARÇO / 2004

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 1


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

INTRODUÇÃO

A automatização de tarefas é um aspecto marcante da sociedade moderna. O aperfeiçoamento tecnológico


alcançado, com respeito a isto, teve como elementos fundamentais a análise e a obtenção de descrições da
execução de tarefas em termos de ações simples o suficiente, tal que pudessem ser automatizadas por uma
máquina especialmente desenvolvida para este fim, O COMPUTADOR.
Em ciência da computação houve um processo de desenvolvimento simultâneo e interativo de máquinas
(hardware) e dos elementos que gerenciam a execução automática (software) de uma dada tarefa. E essa descrição
da execução de uma tarefa, como considerada acima, é chamada algoritmo.
O objetivo desse curso é a Lógica de Programação dando uma base teórica e prática, suficientemente boa,
para que, o aluno domine os algoritmos e esteja habilitado a aprender uma linguagem de programação. Será
mostrado também um grupo de algoritmos clássicos para tarefas cotidianas, tais como : ordenação e pesquisa.

ALGORITMO

• “Algoritmo é uma seqüência de instruções ordenadas de forma lógica para a resolução de uma
determinada tarefa ou problema”.
• "O conceito central da programação e da Ciência da Computação é o conceito de algoritmos, isto é,
programar é basicamente construir algoritmos."
• É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa.
• "O algoritmo pode ser usado como uma ferramenta genérica para representar a solução de tarefas
independente do desejo de automatizá-las, mas em geral está associado ao processamento eletrônico de
dados, onde representa o rascunho para programas (Software)."
• "Serve como modelo para programas, pois sua linguagem é intermediária à linguagem humana e às
linguagens de programação, sendo então, uma boa ferramenta na validação da lógica de tarefas a serem
automatizadas."
• "Um algoritmo é uma receita para um processo computacional e consiste de uma série de operações
primitivas, interconectadas devidamente, sobre um conjunto de objetos. Os objetos manipulados por essas
receitas são as variáveis."
• É a forma pela qual descrevemos soluções de problemas do nosso mundo, afim de, serem implementadas
utilizando os recursos do mundo computacional. Como este possuí severas limitações em relação ao nosso
mundo, exige que, sejam impostas algumas regras básicas na forma de solucionar os problemas, para que,
possamos utilizar os recursos de hardware e software disponíveis. Pois, os algoritmos, apesar de servirem
para representar a solução de qualquer problema, no caso do Processamento de Dados, eles devem seguir
as regras básicas de programação para que sejam compatíveis com as linguagens de programação.

PRINCÍPIOS DE RESOLUÇÕES DE PROBLEMAS

Primeiramente, devemos entender e compreender a palavra “problema”. Podemos dizer que problema é
uma proposta duvidosa, que pode ter inúmeras soluções, ou questão não resolvida e que é o objeto de discussão,
segundo a definição encontrada no Dicionário Aurélio.
Preferimos dizer que problema é uma questão que foge a uma determinada regra, ou melhor, é o desvio de
um percurso, o qual impede de atingir com sucesso um determinado objetivo com eficiência e eficácia.
Uma das soluções utilizadas para a resolução de problemas tem sido a utilização dos diagramas que são
utilizados com o intuito de auxiliar os aprendizados tanto na resolução de problemas como no conhecimento das
técnicas de programação.
Como exemplos de algoritmos podemos citar os algoritmos das operações básicas (adição,
multiplicação, divisão e subtração) de números reais decimais. Outros exemplos seriam os
manuais de aparelhos eletrônicos, como um videocassete, que explicam passo-a-passo como, por
exemplo, gravar um evento.
Até mesmo as coisas mais simples, podem ser descritas por seqüências lógicas. Por exemplo:

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 2


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

“Chupar uma bala”. Exemplos de Diagrama de Bloco


• Retirar o papel “Chupar Uma Bala”
• Chupar a bala
• Pegar a bala
• Jogar o papel no lixo

Num diagrama de bloco, toda decisão terá sempre como resposta o resultado verdadeiro ou falso.
Imaginemos que algumas pessoas não gostem de chupar bala de Morango, neste caso teremos que modificar o
algoritmo para:

“Chupar uma bala”. “Chupar Bala” utilizando diagrama de Blocos


• Pegar a bala
• A bala é de morango?
• Se sim, não chupe a bala
• Se não, continue com o algoritmo
• Retirar o papel
• Chupar a bala
• Jogar o papel no lixo

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 3


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

Simbologia utilizada para representar algoritmo em diagrama de bloco

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 4


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

PROGRAMAÇÃO ESTRUTURADA

Basicamente, a Programação Estruturada consiste numa metodologia de projeto de


programas visando:

facilitar a escrita dos programas;


facilitar a leitura (o entendimento) dos programas;
facilitar a manutenção e modificação dos programas.

A idéia da Programação Estruturada, que vai de encontro a 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.

Esse material, 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
Um programa é um Algoritmo escrito em uma linguagem computacional.

MAIS O QUE É UM ALGORITMO?

Algoritmo é um processo de cálculo matemático ou de resolução de um grupo de problemas semelhantes, em


que se estipulam, com generalidade e sem restrições. Podemos dizer também, que são regras formais para
obtenção de um resultado ou da solução de um problema, englobando fórmulas de expressões aritméticas.

LINGUAGENS DE PROGRAMAÇÃO

São Softwares que permitem o desenvolvimento de programas. Possuem um poder de criação ilimitado,
desde jogos, editores de texto, sistemas empresariais até sistemas operacionais.
Existem várias linguagens de programação, cada uma com suas características próprias.
Exemplos:
• Pascal
• Clipper
• C
• Visual Basic
• Delphi e etc.

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

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 5


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

ALGORITMOS EM “PORTUGOL”

Durante o curso aprenderemos a desenvolver Algoritmos em uma pseudo-linguagem conhecida como


“Portugol” ou Português Estruturado.
“Portugol” é derivado da aglutinação de Português + Algol. Algol é o nome de uma linguagem de
programação estruturada usada no final da década de 50.

OPERADORES ARITMÉTICOS

+ Adição
- Subtração
* Multiplicação
/ Divisão

OPERADORES RELACIONAIS

> Maior que


< Menor que
>= Maior ou Igual
<= Menor ou Igual
= Igual
<> Diferente

LINEARIZAÇÃO DE EXPRESSÕES

Para a construção de Algoritmos todas as expressões aritméticas devem ser linearizadas, ou seja,
colocadas em linhas.

MODULARIZAÇÃO DE EXPRESSÕES

A modularização é a divisão da expressão em partes, proporcionando maior compreensão e definindo


prioridades para resolução da mesma.
Como pode ser observado no exemplo anterior, em expressões computacionais usamos somente
parênteses “( )” para modularização.
Na informática podemos ter parênteses dentro de parênteses.
Exemplos de prioridades:
(2+2) / 2=2 ou seja 2 + 2 = 4 e 4 / 2 = 2;
2+2 / 2=3 ou seja 2 / 2 = 1 e 1 + 2 = 3;

OPERADORES ESPECIAIS (MOD e DIV)

MOD Retorna o resto da divisão entre 2 números inteiros.


DIV Retorna o valor inteiro que resulta da divisão entre 2 números inteiros.

FUNÇÕES

Uma função é um instrumento (Sub–algoritmo) que tem como objetivo retornar um valor ou uma
informação.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 6


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
A chamada de uma função é feita através da citação do seu nome seguido opcionalmente de seu
argumento inicial entre parênteses.
As funções podem ser predefinidas pela linguagem ou criadas pelo programador de acordo com o seu
interesse.

BIBLIOTECAS DE FUNÇÕES

Armazenam um conjunto de funções que podem ser usadas pelos programas.

FUNÇÕES NUMÉRICAS PRE-DEFINIDAS

IN(EA) LOGARITMO NEPERIANO


EXP(EA) NÚMERO E ELEVADO A EA
ABS(EA) VALOR ABSOLUTO
TRUNC(EA) VALOR TRUNCADO
ROUND(EA) VALOR ARREDONDADO
SQR(EA) QUADRADO
SQRT(EA) RAÍZ QUADRADA
SIN(EA) SENO
COS(EA) COSENO
ARCTAN(EA) ARCO TANGENTE

Exemplos:
exp(y*(b+2)-6)
ln(sqrt(a+2*b)-b)

As funções acima são as mais comuns e importantes para nosso desenvolvimento lógico, entretanto, cada
linguagem possui suas funções próprias. As funções podem ser aritméticas, temporais, de texto e etc.

VARIÁVEIS

Variáveis são endereços de memória destinados a armazenar informações temporariamente.


* Todo Algoritmo ou programa deve possuir variável!

VARIÁVEIS DE ENTRADA E SAÍDA

Variáveis de Entrada armazenam informações fornecidas por um meio externo, normalmente usuários ou
discos.
Variáveis de Saída armazenam dados processados como resultados.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 7


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
Exemplo:
A B C=A+B

2 5 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

Constantes são endereços de memória destinados a armazenar informações fixas, inalteráveis durante a
execução do programa.
Exemplo:
PI = 3.1416

IDENTIFICADORES

São os nomes dados a variáveis, constantes, Tipo de Dados, Registros e programas.


Regras Para construção de Identificadores:
• Não podem ter nomes de palavras reservadas (comandos da linguagem);
• Devem possuir como 1º caractere uma letra ou Underscore ( _ );
• Ter como demais caracteres letras, números ou Underscore;
• Ter no máximo 127 caracteres;
• Não possuir espaços em branco;
• A escolha de letras maiúsculas ou minúsculas é indiferente.
Exemplos:

NOME TELEFONE IDADE_FILHO


NOTA1 SALARIO PI
UMNOMEMUITOCOMPRIDOEDIFICILDELER
UM_NOME_MUITO_COMPRIDO_E_DIFICIL_DE_LER

TIPOS DE DADOS

Todas as Variáveis devem assumir um determinado tipo de informação.


O tipo de dado pode ser:
• Primitivo Pré-definido pela linguagem;
• Sub-Faixa É uma parte de um tipo já existente;
• Escalar Definidos pelo programador.

TIPOS PRIMITIVOS DE DADOS

ADMITE SOMENTE NÚMEROS INTEIROS. GERALMENTE É UTILIZADO PARA


INTEIRO
REPRESENTAR UMA CONTAGEM (QUANTIDADE).
ADMITE NÚMEROS REAIS (COM OU SEM CASAS DECIMAIS). GERALMENTE É
REAL
UTILIZADO PARA REPRESENTAR UMA MEDIÇÃO.
ADMITE CARACTERES ALFANUMÉRICOS. OS NÚMEROS QUANDO
CARACTERE DECLARADOS COMO CARACTERES TORNAM SE REPRESENTATIVOS E PERDEM
A ATRIBUIÇÃO DE VALOR.
LÓGICO ADMITE SOMENTE VALORES LÓGICOS(VERDADEIRO/FALSO).

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 8


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

COMANDOS DE I/O (INPUT/OUTPUT)

LEIA(READ) Comando de entrada que permite a leitura de Variáveis de Entrada.


ESCREVERA(WRITE) Comando de saída que exibe uma informação na tela do monitor.
IMPRIMA(WRITE LST) Comando de saída que envia uma informação para a impressora.

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

As constantes são eternamente iguais a determinados valores, portanto usamos o sinal de “=”.
Exemplos:
PI = 3.1416;
Empresa = ‘Colégio de Informática L.T.D.A.’
V = Verdadeiro

CORPO GERAL DE UM PROGRAMA

ALGORITMO LINGUAGEM PASCAL

PROGRAMA <<identificador>>; PROGRAM <<identificador>>;


CONST CONST
<<identificador>> = <<dado>> VAR <<identificador>> = <<dado>> VAR
<<identificador>>:<<tipo>>; <<identificador>>:<<tipo>>;
ÍNICIO BEGIN
{COMANDOS DE ENTRADA, {COMANDOS DE ENTRADA,
PROCESSAMENTO E SAÍDA READLN e WRITELN
<<comando1>>; <<comando1>>;
<<comandoN>>} <<comandoN>>}

FIM. END.

ESTRUTURAS SEQÜÊNCIAIS

Como pode ser analisado no tópico anterior, todo programa possui uma estrutura seqüencial determinada
por um ÍNICIO e FIM.

ENTRADA, PROCESSAMENTO E SAÍDA

Para se criar um programa que seja executável dentro de um computador, você deverá ter em mente três
pontos de trabalho: a entrada de dados, o seu processamento 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, resultarão
conseqüentemente em respostas erradas.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 9


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
O processo de execução de um programa ocorre segundo o exposto, após a entrada de dados com a
instrução leia e saída dos mesmos com a instrução escreva, o processamento será uma conseqüência da
manipulação das variáveis de ação.

Uma entrada e uma saída poderão ocorrer dentro de um computador de diversas formas. Por exemplo,
uma entrada poderá ser feita via teclado, moddem, leitores óticos, disco, entre outras. Uma saída poderá ser feita
em vídeo, impressora, disco, entre outras formas. Devido a esta grande variedade, faremos menção apenas às
instruções leia e escreva.

Exemplo 01.

Desenvolver um algoritmo que lê o nome e as 4 notas bimestrais de um aluno e:


a) Calcular e escreve a média obtida.

ALGORITMO LINGUAGEM PASCAL


PROGRAMA MEDIA_FINAL; PROGRAM MEDIA_FINAL;
VAR VAR
NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: INTEIRO; NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: INTEGER;
NOME : CARACTERE; NOME : STRING;
INICIO BEGIN
ESCREVA(‘DIGITE O NOME DO ALUNO’); WRITELN(‘DIGITE O NOME DO ALUNO’);
LEIA (NOME); READLN(NOME);
ESCREVA (‘DIGITE A NOTA1’); WRITELN(‘DIGITE A NOTA1’);
LEIA (NOTA1); READLN(NOTA1);
ESCREVA(‘DIGITE A NOTA2’); WRITELN(‘DIGITE A NOTA2’);
LEIA(NOTA2); READLN( NOTA2);
ESCREVA(‘DIGITE A NOTA3’); WRITELN(‘DIGITE A NOTA3’);
LEIA( NOTA3); READLN(NOTA);
ESCREVA(‘DIGITE A NOTA4’); WRITELN(‘DIGITE A NOTA 4’);
LEIA(NOTA4); READLN(NOTA4);
MEDIA (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4; MEDIA := (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4;
ESCREVER (NOME, MEDIA) WRITELN(NOME, MEDIA)’;
FIM. END.

Exemplo 02.

Desenvolver um algoritmo que lê o raio de uma circunferência e calcula sua área.

ALGORITMO LINGUAGEM PASCAL

PROGRAMA AREA_CIRCUNFERENCIA; PROGRAM AREA_CIRCUNFERENCIA;


CONST PI = 3.1416; CONST PI = 3.1416;
VAR VAR
RAIO, AREA : REAL; RAIO, AREA : REAL;
INICIO BEGIN
ESCREVA(‘DIGITE O VALOR DO RAIO); WRITELN(‘DIGITE O VALOR DO RAIO);
LER (RAIO) {PROCESSAMENTO} READLN (RAIO) {PROCESSAMENTO}
AREA PI * SQR(RAIO) {ENTRADA} AREA := PI * SQR(RAIO) {ENTRADA}
ESCREVER (“AREA = ”, AREA) {SAÍDA} WRITELN(’AREA =’, AREA) {SAÍDA}
FIM. END.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 10


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

{LINHAS DE COMENTÁRIO}

Podemos inserir em um Algoritmo comentários para aumentar a compreensão do mesmo, para isso basta que o
texto fique entre Chaves “{}”.
Outra forma de inserir comentários e utilizando (* texto *). Esse método é bastante utilizando, quando deseja-se
omitir um determinado grupo de instruções.

Exemplo:

LER (RAIO); {ENTRADA}


(*WRITE(‘DIGITE O VALOR DO RAIO);
READ (RAIO) {PROCESSAMENTO}
AREA := PI * SQR(RAIO) {ENTRADA}
WRITELN(’AREA =’, AREA) {SAÍDA} *)

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 11


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

EXERCÍCIOS DE APRENDIZAGEM

1. Desenvolver um algoritmo que efetue o cálculo de um salário líquido de um professor. Para fazer este
programa você deverá possuir alguns dados, tais como: valor da hora aula, número de aulas dadas no mês e
percentual de desconto do INSS. Em primeiro lugar, deve-se estabelecer qual será o seu salário bruto para
efetuar o desconto e ter o valor do salário líquido.
2. Desenvolver um algoritmo que leia dois números inteiros e efetuar as operações de adição, subtração,
multiplicação e divisão de A por B apresentando ao final os quatro resultados obtidos.
3. Desenvolver um algoritmo que leia 3 valores aleatórios e escreva o maior e o menor valor.
4. Desenvolver um algoritmo que leia um número inteiro positivo e determine se é para ou impar, usar função
RESTO.
5. Desenvolver um algoritmo que lei 3 valores numéricos inteiros N1,N2,N3. Se a soma de N1 + N2 for maior
que N3, escreva a mensagem (‘N1 + N2 é maior que N3’).
6. Desenvolver um algoritmo que calcule a soma dos números pares entre 10 e 200 e mostre a soma.
7. Desenvolver um algoritmo que leia e escreva os números impares entre 20 e 30.
8. Desenvolver um algoritmo que leia e escreva os números entre 10 e 50 inclusive. Quando o número for igual
a 25 escreva a mensagem “Parabéns”.
9. Desenvolver um algoritmo que leia três valores numéricos inteiros e escreva-os em ordem crescente.
10. Em uma classe existem 40 alunos e, após a aplicação de três provas deseja-se saber a situação dos alunos,
para tanto desenvolva um algoritmo que leia o nome, e as três notas de cada aluno e:
a. calcular a média aritmética ( N1 + N2 + N2) / 3;
b. se média for maior ou igual a 6.0, escreva o nome a média e a mensagem “Aprovado”;
c. se média for maior ou igual a 4.0 e menor que 6.0, escreva o nome a média e a mensagem
“Recuperação”;
d. se média for menor que 4.0, escreva o nome a média e a mensagem “Reprovado”;
e. no final calcular e escrever a média geral da turma (Total_medias ) / (Total de alunos);
11. Fazer um programa que leia dois valores V1 e V2 e calcule a diferença do maior pelo menor.
12. Fazer um programa que leia dois valores numéricos N1 e N2 e inverta seus valores.
13. Uma pesquisa sobre algumas características físicas da população de uma determinada região, coletou os
seguintes dados, referente a cada habitante para serem analisados.
a. Sexo {M ou F} Masculino ou Feminino
b. Idade;
c. Cor dos olhos (A/ V/ C) – Azul, verde ou castanho;
Fazer um programa que leia os dados coletados para cada habitante e quando for digitada uma idade = -1,
finalize o programa e escreva o seguinte relatório :
a. Quantidade de habitantes que possuem olhos azuis ou verdes;
b. Quantidade de mulheres com idade superior a 20 anos;
c. Sexo e idade do habitante mais velho;
14. Fazer um programa para somar os números inteiros positivos menor que 100 e no final
imprimir o resultado.
16. Fazer um programa que leia o nome a idade e altura de 50 pessoas escreva:
a. Nome, idade, altura da pessoa mais baixa;
b. Nome, idade, altura da pessoa mais alta;

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 12


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

ESTRUTURA DE CONTROLE – E TOMADA DE DECISÕES

Executa uma seqüência de comandos de acordo com o resultado de um teste.


A estrutura de decisão pode ser Simples ou Composta, baseada em um resultado lógico.

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;

OPERADORES LÓGICOS

Atuam sobre expressões retornando sempre valores lógicos como Falso ou Verdadeiro.

E RETORNA VERDADEIRO SE AMBAS AS PARTES FOREM VERDADEIRAS.


OU BASTA QUE UMA PARTE SEJA VERDADEIRA PARA RETORNAR VERDADEIRO.
NÃO INVERTE O ESTADO, DE VERDADEIRO PASSA PARA FALSO E VICE-VERSA.

TABELA VERDADE

A B AEB A OU B NÃO (A)


V V V V F
V F F V F
F V F V V
F F F F V

EXPRESSÕES LÓGICAS

As expressões compostas de relações sempre retornam um valor lógico.


Exemplos:

2+5>4 Verdadeiro 3<>3 Falso

De acordo com a necessidade, as expressões podem ser unidas pelos operadores lógicos.

Símbolo Significado
= Igual a
<> Diferente de
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 13


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
Exemplo 01.

Desenvolver um algoritmo que lê 2 números inteiros e escreve o maior.

ALGORITMO LINGUAGEM PASCAL

PROGRAMA ACHA_MAIOR; PROGRAM ACHA_MAIOR;


VAR A, B : INTEIRO; VAR A, B : INTEGER;
INICIO BEGIN
ESCREVA(‘DIGITE O VALOR DE A’); WRITELN(‘DIGITE O VALOR DE A’);
LEIA(A); READLN(A);
ESCREVA(‘DIGITE O VALOR DE B’); WRITE(‘DIGITE O VALOR DE B’);
LEIA (B); READLN(B);
SE A>B ENTÃO IF (A>B) THEN
INICIO BEGIN
ESCREVER (A); WRITELN(‘MAIOR VALOR É ‘,A);
FIM END
SENÃO ELSE
INICIO BEGIN
ESCREVER (B); WRITELN(’MAIOR VALOR É ’,B);
FIM; END;
FIM. END.

Exemplo 02.

Desenvolver um algoritmo que lê o nome e as 4 notas bimestrais de um aluno e:


a) Calcular e escrever a média obtida pelo aluno escrevendo também se o aluno foi aprovado ou reprovado.
Média para aprovação = 6.

ALGORITMO LINGUAGEM PASCAL

PROGRAMA MEDIA_FINAL; PROGRAM MEDIA_FINAL;


VAR NOTA1,NOTA2,NOTA3,NOTA4,MEDIA: REAL; USES CRT;
NOME : CADEIA [35]; VAR NOTA1,NOTA2,NOTA3,NOTA4,MEDIA: REAL;
INICIO NOME : STRING[35];
ESCREVA(‘DIGITE O NOME DO ALUNO’); BEGIN
LEIA (NOME); CLRSCR;
ESCREVA(‘DIGITE A NOTA1); WRITELN(‘DIGITE O NOME DO ALUNO’);
LEIA(NOTA1); READLN(NOME);
ESCREVA(‘DIGITE A NOTA2); WRITELN(‘DIGITE A NOTA1);
LEIA(NOTA2); READLN(NOTA1);
ESCREVA(‘DIGITE A NOTA3); WRITELN(‘DIGITE A NOTA2);
LEIA(NOTA3); READLN(NOTA2);
ESCREVA(‘DIGITE A NOTA4); WRITELN(‘DIGITE A NOTA3);
LEIA(NOTA4); READLN(NOTA3);
MEDIA:= (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4; WRITELN(‘DIGITE A NOTA4);
SE MEDIA >= 6 READLN(NOTA4);
ENTÃO MEDIA:= (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4;
INICIO IF MEDIA >= 6 THEN
ESCREVER (‘APROVADO’) WRITELN (‘APROVADO’)
FIM ELSE
SENÃO WRITELN (‘REPROVADO’);
INICIO
ESCREVER (‘REPROVADO’) WRITELN (NOME,’ ‘, MEDIA);
FIM DELAY(800);
ESCREVER (NOME, MEDIA) FIM.
FIM.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 14


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

NINHOS DE SE

Usados para tomadas de decisões para mais de 2 opções.


Forma Geral:

SE <<CONDIÇÃO>>
ENTÃO <<COMANDO1>>
SENÃO SE <<CONDIÇÃO>>
ENTÃO <<COMANDO1>>
SENÃO <<COMANDO1>>

Exemplo 01.

Desenvolva um algoritmo que lê 3 números e escreve o maior.

ALGORITMO LINGUAGEM PASCAL

PROGRAMA ACHA_MAIOR; PROGRAM ACHA_MAIOR;


VAR A, B, C : INTEIRO; USES CRT;
INICIO VAR A, B, C : INTEGER;
ESCREVA(‘DIGITE O VALOR A’); BEGIN
LEIA(A); CLRSCR;
ESCREVA(‘DIGITE O VALOR B’); WRITELN(‘DIGITE O VALOR A ‘);
LEIA(B); READLN(A);
ESCREVA(‘DIGITE O VALOR C’); WRITELN(‘DIGITE O VALOR B ‘);
LEIA(C); READLN(B);
SE (A>B) E (A>C) ENTÃO WRITELN(’DIGITE O VALOR C ’ );
INICIO READLN(C);
ESCREVER (A); IF (A>B) AND (A>C) THEN
FIM BEGIN
SENÃO WRITELN(‘MAIOR VALOR ’,A);
SE (B>A) E (B>C) ENTÃO END
INICIO ELSE
ESCREVER (B); IF (B>A) AND (B>C) THEN
FIM BEGIN
SENÃO WRITELN(‘MAIOR VALOR ‘,B);
INICIO END
ESCREVER (C); ELSE
FIM; BEGIN
FIM. WRITELN(‘MAIORVALOR ‘,C);
END;
DELAY(800);
END.

ESTRUTURAS DE CONDIÇÃO

A estrutura de condição equivale a um ninho de SE’S.


Forma Geral:

FACA CASO
CASO <<CONDIÇÃO1>>
<<COMANDO1>>;
CASO <<CONDIÇÃON>>
<<COMANDO1>>;
OUTROS CASOS
<<COMANDO1>>;
FIM DE CASO

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 15


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

Exemplo 01.

Desenvolver um algoritmo que informe o valor digitado.

ALGORITMO LINGUAGEM PASCAL

PROGRAMA MOSTRAR_VALOR; PROGRAM MOSTRAR_VALOR;


VAR CH : CARACTERE; USES CRT;
INICIO VAR CH : CHAR;
ESCREVA(‘DIGITE O VALOR CH’); BEGIN
LEIA (CH); WRITE(‘DIGITE O VALOR CH’);
FAÇA CASO CH CH : READKEY;
‘A’..’Z’,’a’..’z’:ESCREVA(‘LETRAS’); CASO CH OF
‘0’..’9’ :ESCREVA(‘DIGITO’); ‘A’..’Z’,’a’..’z’: WRITELN(‘LETRAS’);
‘+’,’-‘,’*’,’/‘:ESCREVA(‘OPERADORES’); ‘0’..’9’ : WRITELN(‘DIGITO’);
OUTROS CASOS ‘+’,’-‘,’*’,’/‘ : WRITELN(‘OPERADORES’);
ESCREVER(‘CHAR ESPECIAL’); ELSE
FIM DE CASO WRITELN(‘CHARACTERE ESPECIAL’);
FIM. END;
DELAY(800);
END.

EXERCÍCIOS DE APRENDIZAGEM.

1) Desenvolver um algoritmo que lê 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.
2) Desenvolver um algoritmo que leia 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 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.
3) Desenvolver um algoritmo que leia 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.

ESTRUTRA DE CONTROLE – LAÇOS OU MALHAS DE REPETIÇÃO

Existem ocasiões onde é necessário efetuar a repetição de um trecho de programa um determinado


número de vezes. Neste caso, poderá ser criado um looping que efetue o processamento de um determinado
trecho, tantas vezes quantas forem necessárias. Os loopings também são chamados de: laços de repetição ou
malhas de repetição.
Na programação estruturada existem comandos apropriados para efetuar a repetição de
determinados trechos de programas o número de vezes que for necessário. A principal vantagem deste
recurso é que o programa passa a ter um tamanho menor, podendo sua amplitude de processamento ser
aumentada em se alterar o tamanho do código de programação. Desta forma, pode-se determinar
repetições com números variados de vezes.

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.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 16


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
Forma Geral 1: VALIDAÇÃO INICIAL

ENQUANTO <<CONDIÇÃO>> FACA


<<COMANDO1>>;

Forma Geral 2:
ENQUANTO <<CONDIÇÃO>> FACA
ÍNICIO
<<COMANDO1>>;
<<COMANDON>>
FIM;

Exemplo 01.

Desenvolver 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.
ALGORITMO LINGUAGEM PASCAL

PROGRAMA SOMA_SALARIOS; PROGRAM SOMA_SALARIOS;


VAR SOMA, SALARIO : REAL; USES CRT;
INICIO VAR SOMA, SALARIO : REAL;
SOMA:=0; BEGIN
SALARIO:=1; CLRSCR;
SOMA:=0;
ENQUANTO SALARIO>=0 FACA SALARIO:=1;
INICIO
ESCREVA(‘DIGITE O VALOR DO SALÁRIO’); WHILE SALARIO >= 0 DO
LEIA (SALARIO); BEGIN
SOMA:=SOMA+SALARIO WRITELN(‘DIGITE O VALOR DO SALÁRIO’);
FIM; READLN(SALARIO);
ESCREVER (SOMA) SOMA:= (SOMA+SALARIO);
FIM. END;
WRITELN(‘A SOMA DO SALARIO E ; ‘,SOMA);
DELAY(800);
END.

A estrutura enquanto...faça...fim_enquanto tem o seu funcionamento controlado por decisão. Sendo


assim poderá executar um determinado conjunto de instruções enquanto a condição verificada for Verdadeira. No
momento em que esta condição se torna falsa, o processamento da rotina é desviado para fora do looping. Se a
condição for Falsa logo de início, as instruções contidas no looping são ignoradas.

TODAS AS VARIÁVEIS QUE ACUMULAM VALORES DEVEM RECEBER UM VALOR INICIAL.

Assim como a estrutura ENQUANTO é usada para repetir N vezes uma ou mais instruções. A estrutura
REPITA também é utilizada para repetir N vezes a instrução porém seu controle é determinado por uma decisão.
Forma Geral;

REPITA
<<COMANDO1>>;
<<COMANDON>>
ATE <<CONDIÇÃO>>

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 17


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

Exemplo 01.

Desenvolver 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.

ALGORITMO LINGUAGEM PASCAL

PROGRAMA SOMA_SALARIOS; PROGRAM SOMA_SALARIOS;


VAR USES CRT;
SOMA, SALARIO : REAL; VAR
INICIO SOMA, SALARIO : REAL;
SOMA 0; BEGIN
REPITA CLRSCR;
ESCREVA(‘DIGITE O VALOR DA SALARIO ‘); SOMA:= 0;
LEIA (SALARIO); REPEAT
SOMA:=SOMA+SALARIO WRITELN(‘DIGITE O VALOR DA SALARIO ‘);
ATE SALARIO<0; READLN(SALARIO);
ESCREVER (SOMA) SOMA:= (SOMA+SALARIO);
FIM. UNTIL SALARIO < 0;
WRITELN(SOMA);
DELAY(800);
FIM.

Exemplo 02.
Desenvolver um algoritmo que escreve os 100 primeiros números pares.
ALGORITMO LINGUAGEM PASCAL;
PROGRAMA PARES_2; PROGRAM PARES_2;
VAR I, PAR, CONTADOR : INTEIRO; USES CRT;
INICIO VAR PAR, CONTADOR : INTEGER;
CONTADOR := 0; BEGIN
PAR := 0; CLRSCR;
REPITA CONTADOR := 0;
ESCREVER (PAR); PAR := 0;
PAR := PAR+2; REPEAT
CONTADOR := CONTADOR+1; WRITELN(PAR);
ATE CONTADOR=100 PAR := PAR+2;
FIM. CONTADOR := CONTADOR+1;
UNTIL CONTADOR=100;
DELAY(800);
END.

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.

REPETIÇÃO DO TIPO: VARIÁVEL DE CONTROLE

Anteriormente, formas vistas duas formas de se elaborar looping. Uma usando o conceito enquanto e a
outra usando o conceito repita. Foi visto também como se estabelecer rotinas que efetuarem a execução de um
looping um determinado número de vezes através da utilização de um contador (através de uma variável de
controle).
Porém, existe uma possibilidade de faciliar o uso de contadores finitos, sem fazer uso das estruturas
anteriores, deixando-as para a utilização de loopings onde não se conhece de antemão o número de vezes que uma
determinada sequência de instruções deverá ser executada. Os looping que possuem um número finito de
execuções poderão ser processados através de estrutura de laços contados para, sendo conseguida com a
utilização do conjunto de instruções para..de..até..passo.faça..fim_para.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 18


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
A estrutura para..de..até..passo.faça..fim_para tem seu funcionamento controlado por uma variável
denominada contador. Sendo assim, poderá executar um determinado conjunto de instruções um determinado
número de vezes.
Sua sintaxe é a seguinte:
Para <variável> de <inicio> até <fim> passo<incremento> faça
<instruções>
fim_para

Exemplo 01.
Desenvolver um algoritmo que lê 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 seqüência por cinco vezes.

ALGORITMO LINGUAGEM PASCAL


PROGRAMA LOOPING_PARA PROGRAM LOOPING_PARA;
VAR USES CRT;
X, R ,CONT: INTEIRO; VAR
INICIO X, R ,CONT: INTEGER;
PARA CONT DE 1 ATÉ 5 PASSO 1 FAÇA BEGIN
INICIO FOR CONT := 1 TO 5 DO
ESCREVA(‘DIGITE O VALOR X’); BEGIN
LEIA (X); WRITELN(‘DIGITE O VALOR X’);
R <= X * R; READLN(X);
ESCREVA(R); R := X * R
FIM_PARA; WRITELN(‘O valor de r é : ‘,R);
FIM. END;
DELAY(800);
END.

Será executado o conjunto de instruções entre a instrução para e a instrução fim_para, sendo a variável
CONT (variável de controlo) inicializada com valor 1 e incrementada de mais 1 através da instrução passo até o
valor 5. Este tipo de estrutura de repetição poderá ser utilizado todas as vezes que se tiver a necessidade de repetir
trechos finitos, onde se conhece o valor inicial e o valor final.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 19


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

EXERCÍCIOS DE APRENDIZAGEM

(Desenvolver Cada Exercício utilizando as três estruturas de repetição apresentadas)

1) Desenvolver um algoritmo para apresentar os quadrados do números inteiros de 15 a 200.


2) Desenvolver um algoritmo para apresentar o total da soma do cem primeiros números inteiros ( 1 + 2+ 3 +
4...+ 100).
3) Desenvolver um algoritmo que apresente no final o somatório dos valores pares existentes na faixa de 1 até
500.
4) Desenvolver um algoritmo para apresentar todos os valores numéricos inteiros ímpares situados na faixa 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.
5) Desenvolver um algoritmo para 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.
6) 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.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 20


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

ESTRUTURA DE DADOS – TABELAS EM MEMÓRIAS

Vimos anteriormente como um identificador referencia um tipo, como inteiro, real, char, boolean e string. A
linguagem Pascal também dispõe meios para que um mesmo identificador referencie vários dados, do mesmo tipo
ou de tipos diferentes.
Isso é conhecido em Pascal como variável estruturada. Há dois tipos dessas variáveis:

• Variáveis Compostas Homegêneas


• Variáveis Compostas Heterogêneas

Variáveis Compostas Homogêneas

São variáveis conhecidas em Pascal como arrays (vetores), e correspondem a um conjunto de dados de um mesmo
tipo. Essas variáveis podem ser unidimensionais ou multidimensionais, ou seja, dependem da quantidade de
índices necessários para individualização de cada elemento do conjunto.

Variáveis Compostas Homegêneas Unidimensionais

São variáveis compostas que necessitam de somente um índice para individualizar um elemento do conjunto. A
criação desse tipo de variável é feita com a seguinte declaração:

Para se declarar uma variável nota do tipo real com 10 elementos basta escrever nota : array[1..10] of real; Os
índices para a variável nota estão no intervalo 1,2,3,...,10. Para acessar um elemento i dessa variável basta
referenciá-lo como nota[i]. Por exemplo, nota[1], nota[10], que referenciam respectivamente o valor do primeiro e
o valor do décimo elemento da variável nota.

Utilizando-se, por exemplo um variável i do tipo inteiro, tem-se a possibilidade de acesso a qualquer um dos
elementos. Seja nota[i] uma referência em um programa. Antes da variável nota ser consultada, a variável i seria
substituída pelo seu conteúdo no dado instante. Se i=2, então o elemento da acessado seria nota[2]. Os elementos
da variável nota podem ser referenciados por expressões como por exemplo nota[i+1] e nota[i+j+1].

Exemplo 01.

Nota 80 70 75 100 85 92 68 80 90 75
Índice 1 2 3 4 5 6 7 8 9 10

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 21


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

nota[1] = 80
nota[2] = 70
nota[3] = 75

nota[4] = 100

nota[5] = 85

.
.
nota[10] = 75

LEITURA DOS DADOS DE UMA MATRIZ

A leitura de uma matriz é processada passo a passo, um elemento por vez. A instrução de
leitura é leia seguida da variável mais o índice. Abaixo, é apresentado a codificação em portugol da
leitura de 10 notas de 10 alunos, cálculo da média e a apresentação da mesma.

ALGORITMO LINGUAGEM PASCAL

PROGRAMA MEDIA_TURMA PROGRAMA MEDIA_TURMA;


USES CRT;
VAR VAR
MD : CONJUNTO [1..10] DE REAL; MD : ARRAY [1..10] OF REAL;
SOMA, MEDIA : REAL; SOMA, MEDIA : REAL;
I : INTEIRO; I : INTEGER;
INICIO BEGIN
SOMA 0; CLRSCR;
PARA I DE 1 ATE 8 FAÇA SOMA := 0;
INICIO FOR I := 1 TO 10 DO
ESCREVA(‘DIGITE OS VALORES DAS 10 NOTA’); BEGIN
LEIA (MD[I]) WRITELN(‘DIGITE OS VALORES DAS 10 NOTA’);
SOMA SOMA + MD[I]; READLN(MD[I]);
FIM_PARA; SOMA := SOMA + MD[I];
MÉDIA SOMA / 10; END;
ESCREVA (MEDIA); MEDIA := SOMA / 10;
FIM. WRITELN(MEDIA);
DELAY(800);
END.

ESCRITA DOS DADOS DE UMA MATRIZ

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 10 notas, houvesse a necessidade de apresentá-las antes da apresentação do valor da média.
Abaixo é exibido a codificação da escrita dos 10 alunos antes de ser apresentado o cálculo da média.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 22


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

ALGORITMO LINGUAGEM PASCAL


PROGRAMA MEDIA_TURMA; PROGRAM MEDIA_TURMA;
USES CRT;
VAR VAR
MD : CONJUNTO [1..8] DE REAL MD : ARRAY [1..10] OF REAL;
SOMA, MEDIA : REAL SOMA, MEDIA : REAL;
I : INTEIRO I : INTEGER;
INICIO BEGIN
SOMA 0; CLRSCR;
PARA I DE 1 ATE 10 FAÇA SOMA := 0;
INICIO FOR I := 1 TO 10 DO
ESCREVA(‘DIGITE OS VALORES DAS10NOTAS’); BEGIN
LEIA (MD[I]) WRITELN(‘DIGITE OS VALORES DAS10NOTAS’);
SOMA <= SOMA + MD[I] READLN(MD[I]);
FIM_PARA; SOMA := SOMA + MD[I];
END;
PARA I DE 1 ATE 10 FAÇA FOR := 1 TO 10 DO
INICIO BEGIN
ESCREVA (MD[I]); WRITELN(MD[I]);
FIM_PARA; END;
MÉDIA SOMA / 10; MEDIA := SOMA / 10;
ESCREVA (MEDIA) WRITELN(MEDIA);
FIM. END.

EXERCÍCIOS DE APRENDIZAGEM

1) Desenvolver um algoritmo que leia uma matriz A (10) do tipo vetor. Construir uma matriz B de mesmo tipo,
observando a seguinte lei de formação: Se o valor do índice for par, o valor deverá ser multiplicado por 5,
sendo ímpar deverá ser somado por 5. Ao final mostrar os conteúdos das duas matrizes.
2) Desenvolver um algoritmo que leia uma matriz A(5) do tipo vetor. No final, apresente o total da soma de todos
os elementos que sejam ímpares.
3) Desenvolver um algoritmo que leia 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) Desenvolver uma algoritmo que leia uma matriz A(15) 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) Desenvolver uma algoritmo que leia uma matriz A(15) do tipo vetor. Construir uma matriz B de mesmo tipo,
sendo que cada elemento da matriz B seja o fatorial do elemento correspondente da matriz A.
6) Desenvolver um algoritmo que leia 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) Desenvolver um algoritmo que leia uma matriz A(20) 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.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 23


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

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 considerar 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 matriz 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 armazenado na linha
2 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.

OPERAÇÕES BÁSICAS COM MATRIZES DE DUAS DIMENSÕES

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ões TABELA[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.

L C O L U N A
I 1 2 3 4 5
N 1 10 11 12 13 14

H 2 20 21 22 23 24

A 3 30 31 32 33 34
4 40 41 42 43 44
5 50 51 52 53 54
6 60 61 62 63 64
7 70 71 72 73 74
8 80 81 82 83 84

ATRIBUIÇÃO DE UMA MATRIZ

Uma matriz de duas dimensões será atribuída pelas instrução vetor já utilizada para definir o uso de uma
matriz de uma dimensão, sendo bastante parecidos em sua referência. A sintaxe será: VARIAVEL : vetor
[<dimensão1: dimensão2>] de <tipo de dado>, onde <dimensão1> e <dimensão2> serão indicação do tamanho
da tabela e <tipo de dado> o tipo da matriz, que poderá ser formada por valores reais, inteiros, lógicos ou
caracteres.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 24


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

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 variável mais os seus índices. A seguir é
apresentado a codificação em português estruturado da leitura das 5 notas bimestrais de 8 alunos, sem considerar
o cálculo da média.

ALGORITMO LINGUAGEM PASCAL


PROGRAMA LER_ELEMENTOS; PROGRAM LER_ELEMENTOS;
VAR VAR
NOTAS : VETOR [1..8, 1..5] DE REAL NOTAS : ARRAY [1..8, 1..5] OF REAL
I, J : INTEIRO; I, J : INTEGER;
INICIO BEGIN
PARA I DE 1 ATÉ 8 FAÇA FOR I := 1 TO 8 DO
INICIO BEGIN
PARA J DE 1 ATÉ 5 FAÇA FOR J := 1 TO 5 DO
INICIO BEGIN
LEIA(NOTAS[I,J]); READ(NOTAS[I,J]);
FIM_PARA END;
FIM_PARA END;
FIM. END.

ESCRITA DOS DADOS DE UMA MATRIZ

O processo 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 5 notas dos 8 alunos.
ALGORITMO LINGUAGEM PASCAL

PROGRAMA LER_ELEMENTOS; PROGRAM LER_ELEMENTOS;


VAR VAR
NOTAS : VETOR [1..8, 1..5] DE REAL NOTAS : ARRAY [1..8, 1..5] OF REAL
I, J : INTEIRO; I, J : INTEGER;
INICIO BEGIN
PARA I DE 1 ATÉ 8 FAÇA FOR I := 1 TO 8 DO
INICIO BEGIN
PARA J DE 1 ATÉ 4 FAÇA FOR J := 1 TO 5 DO
INICIO BEGIN
ESCREVA(NOTAS[I,J]); WRITELN(NOTAS[I,J]);
FIM_PARA; END;
FIM_PARA; END;
FIM. END.

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.
2) Ler duas matrizes A e B, de (5,8) e (8,5) e criar uma matriz C que seja:
• O produto matricial de A * B;
• A soma de A com B;
• A diferença de A com B;
• Escreva o resultado das matrizes A ,B e C;
3) Faça um algoritmo que leia uma matriz M(4,4) e escreva a soma dos valores da diagonal principal;
4) Faça um algoritmo que leia uma matriz M(30,15) de inteiros e escreva a quantidade
de linhas pares existentes na matriz.
5) Faça um algoritmo que leia uma matriz M(5,5) de inteiros. A seguir transforme-a em um vetor e escreva o
resultado.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 25


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
6) Faça um programa que leia uma matriz m (5,5) e calcule as somas:
a) da linha 4 de M;
b) da coluna 2 de M;
c) da diagonal principal de M;
d) de todos os elementos da matriz M;
e) escreva todas as somas e a matriz;
7) Faça um programa que leia uma matriz M(6,6) e um valor A e multiplique a
matriz M pelo valor de A e coloque os valores da matriz multiplica em um vetor
V(36) e escreva-o;
8) Faça um programa que leia uma matriz M(20x15) de inteiros. Calcule e mostre
a) a soma das linhas pares da matriz;
b) a soma das colunas impares da matriz;
c) a quantidade de colunas pares;
d) a quantidade de linhas impares;
e) escreva os resultados.
9) Faça um programa que calcule a média dos elementos da diagonal principal
de uma matriz M(10,10) de inteiros;

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>

Onde identificador é o nome do tipo registro em caracteres maiúsculos, em itálico como as variáveis, e lista dos
campos e seus tipos é a relação de variáveis que serão usadas como campos, bem como o seu tipo de estrutura de
dados, podendo ser: real, inteiro, lógico ou caractere.
Após a instrução var, deverá ser indicada a variável tipo registro e a declaração do seu tipo de acordo com um
identificador definido anteriormente. Perceba que a instrução tipo deverá ser utilizada antes da instrução var, pois
ao definir um tipo de variável, pode-se fazer uso deste tipo definido.
Tomando como exemplo a proposta de se criar um registro denominado ALUNO, cujos campos são NOME,
NOTA1, NOTA2, NOTA3 e NOTA4, este seria assim declarado:

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 26


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

tipo
CAD_ALUNO = registro
NOME : cadeia
NOTA1 : real
NOTA2 : real
NOTA3 : real
NOTA4 : real
fim_registro
var
ALUNO : CAD_ALUNO

Observe que é especificado um registro denominado CAD_ALUNO, o qual é um conjunto de dados


heterogêneos (um campo tipo caractere e quatro do tipo real). Desta forma é possível guardar em uma mesma
estrutura vários tipos diferentes de dados.
A título de comparação, pode-se dizer que um tipo registro é também um vetor (matriz de uma dimensão).
Pois tem-se a variável ALUNO do tipo cad_aluno como um vetor com os índices NOME, NOTA1, NOTA2,
NOTA3 e NOTA4.

LEITURA DE REGISTROS

A leitura de um registro é efetuada com a instrução leia seguida do nome da variável registro e seu campo
correspondente separado por um caractere “.” ponto.
ALGORITMO
LINGUAGEM PASCAL
PROGRAMA LEITURA; PROGRAM LEITURA;

TIPO TYPE
CAD_ALUNO = REGISTRO
CAD_ALUNO = REGISTRO NOME : STRING[50];
NOME : CADEIA; NOTA1 : REAL;
NOTA1 : REAL NOTA2 : REAL;
NOTA2 : REAL NOTA3 : REAL;
NOTA3 : REAL NOTA4 : REAL;
NOTA4 : REAL END;
FIM_REGISTRO;
VAR
VAR ALUNO : CAD_ALUNO;
ALUNO : CAD_ALUNO BEGIN
INÍCIO READ (ALUNO.NOME);
READ (ALUNO.NOTA1);
LEIA (ALUNO.NOME) READ (ALUNO.NOTA2);
LEIA (ALUNO.NOTA1) READ (ALUNO.NOTA3);
LEIA (ALUNO.NOTA2) READ (ALUNO.NOTA4);
LEIA (ALUNO.NOTA3) END;
LEIA (ALUNO.NOTA4)
FIM

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 27


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

ESCRITA DE REGISTROS

O processo de escrita de um registro é feito com a instrução escreva de forma semelhante ao processo de
leitura.

PROGRAMA ESCRITA

ALGORITMO LINGUAGEM PASCAL


PROGRAMA LEITURA; PROGRAM LEITURA;

TIPO TYPE
CAD_ALUNO = REGISTRO
CAD_ALUNO = REGISTRO NOME : STRING[50];
NOME : CADEIA; NOTA1 : REAL;
NOTA1 : REAL NOTA2 : REAL;
NOTA2 : REAL NOTA3 : REAL;
NOTA3 : REAL NOTA4 : REAL;
NOTA4 : REAL END;
FIM_REGISTRO;
VAR
VAR ALUNO : CAD_ALUNO;
ALUNO : CAD_ALUNO BEGIN
INÍCIO WRITELN(ALUNO.NOME);
WRITELN(ALUNO.NOTA1);
ESCREVA(ALUNO.NOME) WRITELN(ALUNO.NOTA2);
ESCREVA(ALUNO.NOTA1) WRITELN(ALUNO.NOTA3);
ESCREVA(ALUNO.NOTA2) WRITELN(ALUNO.NOTA4);
ESCREVA(ALUNO.NOTA3) END;
ESCREVA(ALUNO.NOTA4)
FIM

ESTRUTURA DE UM REGISTRO DE CONJUNTOS

No tópico anterior, foi apresentado o conceito de se trabalhar com um registro. No ponto de aprendizado em
que estamos, podemos até jurar que você esteja perguntando: Será que não possível definir um vetor ou mesmo
uma matriz dentro de um registro, para não ser necessário utilizar somente os tipos primitivos de dados? Isto é
realmente possível. Considere ainda o exemplo do registro ALUNO, onde temos o campo NOME tipo caractere e
mais quatro campos tipo real para o armazenamento de duas notas sendo, NOTA1, NOTA2, NOTA3 e NOTA4.
Veja que se pode definir um vetor chamado NOTA com quatro índices, uma para cada nota.

ATRIBUIÇÃO DE REGISTROS DE CONJUNTOS

Tomando como exemplo a proposta de se criar um registro denominado ALUNO, cujas notas serão informadas
em um vetor, este seria bastante declarado:

tipo
BIMESTRE = VETOR [1..4] de real
CAD_ALUNO = registro
NOME : caractere
NOTA : BIMESTRE
fim_registro

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

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 28


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
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.

LEITURA DE REGISTRO DE CONJUNTOS

A leitura de um registro de conjunto é efetuada com a instrução leia geralmente dentro de um laço de
repetição. Assim sendo, observe o código abaixo:

ALGORITMO LINGUAGEM PASCAL


PROGRAMA LEITURA; PROGRAM LEITURA;

TIPO TYPE
BIMESTRE = vetor [1..4]DE REAL; BIMESTRE = ARRAY [1..4]OF REAL;
CAD_ALUNO = REGISTRO CAD_ALUNO = REGISTRO
NOME : CADEIA; NOME : CADEIA[50];
NOTA : BIMESTRE; NOTA : BIMESTRE;
FIM_REGISTRO; END;
VAR VAR
ALUNO : CAD_ALUNO; ALUNO : CAD_ALUNO;
I : INTEIRO; I : INTEIRO;

INICIO INICIO
LEIA (ALUNO.NOME) READ(ALUNO.NOME);
PARA DE I ATE 4 FAÇA FOR i := 1 TO 4 DO
INICIO BEGIN
LEIA (ALUNO.NOTA[I]); READ(ALUNO.NOTA[I]);
FIM_PARA; END;
FIM. END.

ESTRUTURA DE UM CONJUNTO DE REGISTROS

Com as técnicas de programação anteriormente apresentadas, passou-se a Ter uma mobilidade bastante grande
, podendo-se trabalhar de uma forma mais adequada com diversos problemas, principalmente os que envolvem a
utilização de dados heterogêneos, facilitando a construção de programas mais eficientes. Porém, os programas
apresentados até aqui com a utilização de registros, só fizeram menção à leitura e escrita de um único registro.
Neste momento, você terá contato com o conjunto de registros que permite a construção de programas, onde é
possível se fazer a entrada, processamento e saída de diversos registros.

ATRIBUIÇÃO DE CONJUNTO DE REGISTROS

Para se declarar um conjunto de registros é necessário em primeiro lugar, possuir a definição de um registro,
ou seja é necessário Ter um formato de um único registro para então definir o número de registros que será
utilizado pelo programa. Para exemplificar o que está sendo exposto, considere que você deverá fazer um
programa que leia o nome e as quatro notas escolares de 8 alunos. Isto já e familiar. Veja a seguir a codificação do
conjunto de registros para os oito alunos:

Tipo
BIMESTRE = conjunto [1..4] de real
CAD_ALUNO = registro
NOME : caractere
NOTA: BIMESTRE
Fim_registro

Var
ALUNO: conjunto [1..8] de CAD_ALUNO

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.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 29


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

LEITURA DE CONJUNTO DE REGISTROS

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:

LINGUAGEM PASCAL
PROGRAMA LEITURA; PROGRAM LEITURA;
TIPO TYPE
BIMESTRE = VETOR [1..4] DE REAL BIMESTRE = ARRAY [1..4] OF REAL;
CAD_ALUNO = REGISTRO CAD_ALUNO = REGISTRO
NOME : CARACTERE; NOME : STRING[50];
NOTA: BIMESTRE; NOTA: BIMESTRE;
FIM_REGISTRO; END;
VAR VAR
ALUNO: CONJUNTO [1..8] DE CAD_ALUNO; ALUNO: ARRAY [1..8] OF CAD_ALUNO;
I, J : INTEIRO; I, J : INTEIRO;

INÍCIO BEGIN
PARA J DE 1 ATÉ 8 FAÇA FOR J:= 1 TO 8 DO
INICIO BEGIN
LEIA (ALUNO[J].NOME); READ(ALUNO[J].NOME);
PARA I DE 1 ATÉ 4 FAÇA FOR I:= 1 TO 4 DO
INICIO BEGIN
LEIA(ALUNO[J].NOME[I]); READ(ALUNO[J].NOME[I]);
FIM_PARA; END;
FIM_PARA; END;
END.
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.

ESCRITA DE CONJUNTO DE REGISTROS

O processo de escrita de um conjunto de registros é similar aos modos anteriores, já estudados. Assim sendo,
veja o código:
ALGORITMO LINGUAGEM PASCAL
PROGRAMA ESCRITA; PROGRAM ESCRITA;

TIPO TYPE

BIMESTRE = VETOR [1..4] DE REAL BIMESTRE = ARRAY [1..4] OF REAL


CAD_ALUNO = REGISTRO CAD_ALUNO = REGISTRO
NOME : CARACTERE NOME : STRING[50];
NOTA: BIMESTRE NOTA: BIMESTRE
FIM_REGISTRO END;

VAR VAR
ALUNO: CONJUNTO [1..8] DE CAD_ALUNO ALUNO : ARRAY [1..8] OF CAD_ALUNO
I, J : INTEIRO I, J : INTEIRO;

INÍCIO BEGIN
FOR I := 1 TO DO
PARA J DE 1 ATÉ 8 FAÇA BEGIN
INICIO WITELN(ALUNO[J].NOME)
ESCREVA (ALUNO[J].NOME) FOR I := 1 TO 4 DO
PARA I DE 1 ATÉ 4 FAÇA BEGIN
INICIO WRITELN (ALUNO[J].NOTA[I])
ESCREVA (ALUNO[J].NOTA[I]) END;
FIM_PARA; END;
FIM_PARA; END.

FIM.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 30


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

TRATAMENTO DE REGISTRO

Imagine a seguinte estrutura. Uma simples ficha estoque:

Um registro é uma estrutura heterogênea, combinando variáveis de tipos diferentes.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 31


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
ALGORITMO LINGUAGEM PASCAL
PROGRAMA ESTOQUE PROGRAM ESTOQUE;
TIPO TPPRODUTO = REGISTRO USES CRT;
CÓDIGO : INTEIRO TYPE TPPRODUTO = RECORD
NOME : CADEIA[50] CODIGO : INTEGER;
PREÇO : REAL NOME : STRING[50];
QTDEEST : REAL PRECO : REAL;
QTDEMIN : REAL QTDEEST : REAL;
FIM_REGISTRO QTDEMIN : REAL;
VAR END;
I,CODAUX,QTDE : INTEIRO; VAR
VALOR : REAL; I,CODAUX,QTDE : INTEGER;
NOME : STRING; VALOR : REAL;
P1 : TPPRODUTO; NOME : STRING;
PRODUTO : VETOR [1..10] OF TPPRODUTO; P1 : TPPRODUTO;
INICIO PRODUTO : ARRAY [1..10] OF TPPRODUTO;
{ LEITURA E ATRIBUIÇÃO DE UM CONJUNTO DE BEGIN
REGISTRO } { LEITURA E ATRIBUICAO DE UM CONJUNTO DE
I <= 1; REGISTRO }
ENQUANTO ( I <= 10) FAÇA CLRSCR; I := 1;
INICIO WHILE ( I <= 10) DO
SE I <= 10 ENTÃO BEGIN
INICIO IF I <= 10 THEN
ESCREVA('ENTRE COM O CODIGO DO PRODUTO : '); BEGIN
LEIA(CODAUX); WRITE('ENTRE COM O CODIGO DO PRODUTO : ');
PRODUTO[I].CODIGO <= CODAUX; READLN(CODAUX);
ESCRERVA('ENTRE COM O NOME : '); PRODUTO[I].CODIGO := CODAUX;
LEIA(NOME); WRITE('ENTRE COM O NOME : ');
PRODUTO[I].NOME <= NOME; READLN(NOME);
ESCREVA('ENTRE COM A QUANTIDADE : '); PRODUTO[I].NOME := NOME;
LEIA(QTDE); WRITE('ENTRE COM A QUANTIDADE : ');
PRODUTO[I].QTDEEST <= QTDE; READLN(QTDE);
ESCREVA('ENTRE COM O VALOR : '); PRODUTO[I].QTDEEST := QTDE;
LEIA(VALOR); WRITE('ENTRE COM O VALOR : ');
PRODUTO[I].PRECO ,<= VALOR; READ(VALOR);
I := i + 1; PRODUTO[I].PRECO := VALOR;
FIM. {SE} I := i + 1;
FIM. (ENQUANTO} END;
{ ESCREVER UM CONJUNTO DE REGISTRO} END;
CLRSCR;
PARA I:= 1 ATÉ 10 FAÇA { ESCREVER UM CONJUNTO DE REGISTRO}
INICIO FOR I:=1 TO 10 DO
ESCREVA (PRODUTO[I].CODIGO, ' ', BEGIN
PRODUTO[I].NOME, ' ', WRITELN (PRODUTO[I].CODIGO, '
PRODUTO[I].QTDEEST,' ', ',PRODUTO[I].NOME, ' ',
PRODUTO[I].PRECO); PRODUTO[I].QTDEEST,' ',PRODUTO[I].PRECO);
FIM; { PARA} DELAY(1500);READKEY;
FIM. { FIM ALGORITMO} END;
END.

ARQUIVOS

É um conjunto de registros armazenados em um dispositivo de memória secundária. Registro é um conjunto de


unidades de informação logicamente relacionadas. Cada unidade de informação constitui um campo do registro.
Considere a cédula de identidade a seguir:

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 32


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
FICHA DE IDENTIFICAÇÃO

INSTITUTO BRASILEIRO DE IDENTIFICAÇÃO

REGISTRO GERAL A-9876

NOME : RAIMUNDO DE CASTRO JR


PAI : RAIMUNDO DE CASTRO
FILIAÇÃO
MÃE : MARIA JOANA

NATURAL : MANAUS NASCIMENTO: 10/10/2000

Nela encontram-se alguns dados referentes a um cidadão: nome, filiação, registro geral, naturalidade, nascimento
etc. O conjunto de informações apresentado por estes dados pode formar um registro:

R.G NOME PAI MÃE NATURAL NASC.


A-9876 RAIMUNDO DE CASTRO JR RAIMUNDO DE CASTRO MARIA J OANA MANAUS 10/10/2000

A relação lógica entre estas informações é a sua associação a uma pessoa. O armazenamento do conjunto formado
pelas regiões contendo as informações das carteiras de identidade dos membros de uma comunidade, por exemplo,
poderá formar um arquivo.
A-9776 RAIMUNDO DE CASTRO JR RAIMUNDO DE CASTRO JULIA BORGES MANAUS 10/10/2000
A-9875 FRANCISCO DE TAL MARIO JORGE BEZERRA MARTA LUCIA MANAUS 10/10/2000
A-9976 ZEED MARIO BARBOSA FREED FRANCISCO SOUZA ZIKA BARBOSA MAUES 10/10/2000
A-8876 QUINTINO ZEFERINO CAMPOS ABRILINO ALBERTO AMANDA DE SÁ BARCELOS 10/10/2000

ARQUIVOS DE ENTIDADES

O Registro conforme apresentado neste exemplo é denominado registro lógico ou, simplesmente, registro. Na
verdade, o arquivo é constituído de um conjunto de registros físicos que, por questão de eficiência, é um conjunto
de um ou mais registros lógicos.

ORGANIZAÇÃO DE ARQUIVOS

As operações básicas que podem ser feitas em um arquivo através de um algoritmo são: obtenção de um registro
do arquivo, inserção de um novo registro, modificação ou exclusão de um registro. Dependendo do tipo de
problema, estas operações poderão ocorrer em maior ou menor número de vezes.

Basicamente, existem duas possibilidades de organização de arquivos: a organização seqüencial, na qual os


registros são obtidos ou inseridos no arquivo em ordem seqüencial, e a organização direta, em que o acesso do
registro é feito em ordem aleatória. Outros tipos de organização são, na verdade, variações destes.

DECLARAÇÃO
O acesso a um arquivo dentro do algoritmo é feito através da leitura e escrita de registros. No algoritmo, o arquivo
deve ser declarado e aberto, antes que tal acesso possa ser feito. No final do algoritmo ou quando houver
necessidade, o arquivo deverá ser fechado.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 33


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

ABERTURA DE ARQUIVOS

A declaração do arquivo é a definição, para o algoritmo, do modelo e dos nomes que estão associados à estrutura
de dados, isto é, ao arquivo. A associação deste modelo ao arquivo físico é uma questão que, no algoritmo, pode
ser resolvida pelo comando:

Abra AGENDA leitura ( Apenas para leitura;


Abra AGENDA escrita ( Somente para escrita;
Abra AGENDA ( Leitura e/ou escrita;

FECHAMENTO DE ARQUIVO

Para se desfazer a associação entre o modelo e o arquivo, usa se o comando

Feche AGENDA;

ORGANIZAÇÃO SEQÜENCIAL

A principal característica da organização seqüencial é a de que os registros são armazenados contiguamente, isto
é, um após o outro. Como conseqüência, o acesso aos registros do arquivo, tanto na leitura quanto na escrita, são
feitos seqüencialmente, ou seja, a leitura de um registro só é possível após a leitura de todos os registros anteriores
e a escrita de um registro só é feita após o último registro.

ORGANIZAÇÃO DIRETA

A principal característica da organização direta é a facilidade de acesso a um registro desejado. Ao contrário da


organização seqüencial, para se Ter acesso a um registro de um arquivo direto, não é necessário pesquisar-se pelo
registro, pois este pode ser obtido diretamente. Isto é possível porque a posição do registro no espaço físico do
arquivo é univocamente determinada a partir de um dos campos do registro, escolhido no momento de criação do
arquivo direto como "chave" .

Chave Registro

820001 Abimael Jesus de Andrade Rua Silva Ramos, 475, Centro MANAUS Am
820002 Francisca de Jesus Barbosa Rua Quintino Bocaiuva,1245 Centro MANAUS Am
820004 Jarbas Vasconcelos Dias Rua 14 de Janeiro, 1017 Praça 14 MANAUS Am
820005 Washington Regis Braga Rua das Cacimbas, 1047 Crespo MANAUS Am
820006 Eduardo Evangelista Xavier Rua das Cachoiras, 147 S.Jorge MANAUS Am
820007 Clayton de Castro Xavier Rua Simão Bolivar, 85 Centro MANAUS Am
830001 Francisco das Chagas Pinto Rua 24, qd-25 c/10 S.Jose
MANAUS Am

A escolha da chave é feita pelo usuário no momento da criação do arquivo. Em geral escolhe-se como chave um
dos campos do registro. Cada registro deverá ser gravado usando sua chave. Não pode haver registros usando a
mesma chave, já que não haverá uma função capaz de distingui-los.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 34


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

EXERCÍCIO

1) Desenvolva um algoritmo que leia e escreva cada um dos registros abaixo:

PH
LOGICO STATUS
TRUE
‘a’ ‘b ‘ ‘c ‘
NOTA

7,5 8,0
9,8 7.0
5,8 4,6

ALGORITIMO LINGUAGEM PASCAL

PROGRAMA REGISTRO; PROGRAM REGISTRO;


TIPO REG = REGISTRO USES CRT;
LOG : CADEIA; TYPE REG = RECORD
STATUS : VETOR [1..3] CARACTERE; LOG : STRING;
NOTA : VETOR [1..3, 1..2] REAL; STATUS : ARRAY [1..3] OF CHAR;
FIM; NOTA : ARRAY [1..3, 1..2] OF REAL;
VAR END;
PH : REG; VAR
I, J : INTEIRO; PH : REG;
I, J : INTEGER;
INICIO
LEIA (PH.LOG); BEGIN
PARA I:= 1 ATÉ 3 FAÇA CLRSCR;
INICIO READ (PH.LOG);
LEIA (PH.STATUS[I]); FOR I:= 1 TO 3 DO
FIM; BEGIN
PARA I := 1 ATÉ 3 FAÇA READ(PH.STATUS[I]);
INICIO END;
PARA J := 1 ATE 3 FAÇA FOR I := 1 TO 3 DO
INICIO BEGIN
LEIA (PH.NOTA[I,J]); FOR J := 1 TO 2 DO
FIM; BEGIN
FIM; READ (PH.NOTA[I,J]);
ESCREVA (PH.LOG); END;
PARA I := 1 ATE 3 FAÇA END;
INICIO
ESCREVA (PH.STATUS[I]; WRITELN(PH.LOG);
FIM;
PARA I := 1 ATE 3 FACA FOR I := 1 TO 3 DO
INICIO BEGIN
PARA J:=1 ATÉ 2 FAÇA WRITELN(PH.STATUS[I]);
INICIO END;
ESCREVA (PH.MAT[I,J];
FIM; FOR I := 1 TO 3 DO
FIM; BEGIN
FIM; FOR J := 1 TO 2 DO
BEGIN
WRITELN(PH.NOTA[I,J]);
END;
END;
END.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 35


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
Desenvolva um algoritmo que armazene em um registro o nome[40], a idade e o sexo de 50 pessoas e escreva o
nome das pessoas de sexo feminino de maior idade.

CAD

Nome

Idade

Sexo

PROGRAMAÇÃO MODULAR

Será estudado a partir deste ponto, a aplicação de subrotinas em algoritmos, também conhecidas pela
denominação módulos ou subalgoritmos. Na realidade, não importa como são chamadas, o que importa é a forma
como funcionam e como devem ser aplicadas em um programa, e é isto que você aprenderá.
Neste capítulo, será introduzido o conceito da criação estruturada de programas, pois para escrever um
programa de computador necessita-se de estudo (levamtamento de todas as necessidades e detalhes do que deverá
ser feito) e metodologia (regras básicas que deverão ser seguidas). Sem a aplicação de métodos não será possível
resolver grandes problemas, quanto muito, pequenos problemas.

AS SUB-ROTINAS

No geral, problemas complexos exigem algoritmos complexos. Mas sempre é possível dividir um problema
grande em problemas menores. Desta forma, cada parte menor tem um algoritmo mais simples, e é este trecho
menor que é chamado de sub-rotina. Uma sub-rotina é na verdade, um programa, e sendo um programa poderá
efetuar diversas operações computacionais (entrada, processamento e saída) e deverá ser tratada como foram os
programas projetados até este momento. As sub-rotinas são utilizadas na divisão de 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

Um procedimento é um bloco de programa, contendo início e fim e será identificado por um nome, através do
qual será referenciado em qualquer parte do programa principal ou do programa chamador da rotina. Quando uma
sub-rotina é chamada por um programa, ela é executada e ao seu término o controle de processamento retorna
automaticamente para a primeira linha de instrução após a linha que efetuou a chamada da sub-rotina.

Procedimento <nome do procedimento>


var
<variáveis>
início

<instruções>

fim

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 36


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

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:

1) Desenvolver um algoritmo para calcular o salário liquido de um empregado.

ALGORITMO LINGUAGEM PASCAL

PROGRAMA SAL_LIQUIDO; PROGRAM SALARIO;


VAR USES CRT;
NOME : CADEIA[50]; VAR
SAL_LIQUIDO : REAL; NOME : STRING[50];
GANHOS : REAL; SAL_LIQUIDO : REAL;
DEDUCOES : REAL; GANHOS : REAL;
DEDUCOES : REAL;
PROCEDIMENTO CALCULO_DOS_GANHOS;
INICIO PROCEDURE CALCULO_DOS_GANHOS;
ESCREVA('DIGITE O VALOR DOS GANHOS '); BEGIN
LEIA(GANHOS); WRITE('DIGITE O VALOR DOS GANHOS ');
FIM READ(GANHOS);
END;
PROCEDIMENTO CALCULO_DAS_DEDUCOES;
INICIO PROCEDURE CALCULO_DAS_DEDUCOES;
ESCREVA('DIGITE O VALOR DAS DEDUÇÕES'); BEGIN
LEIA(DEDUCOES); WRITE('DIGITE O VALOR DAS DEDUÇÕES ');
FIM; READ(DEDUCOES);
END;
INICIO
ESCREVA ('DIGITE O NOME '); BEGIN
LEIA (NOME); CLRSCR;
CALCULO_DOS_GANHOS; WRITE ('DIGITE O NOME ');
CALCULO_DAS_DEDUCOES; READ (NOME);
SAL_LIQUIDO := GANHOS - DEDUCOES CALCULO_DOS_GANHOS;
FIM. CALCULO_DAS_DEDUCOES;
SAL_LIQUIDO := GANHOS - DEDUCOES;
WRITELN ('O SALARIO LIQUIDO É : ', SAL_LIQUIDO:3:2);
DELAY(800);
END.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 37


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
2) Desenvolver um algoritmo que leia três valores inteiros positivos, representando as medidas dos lados de um
triângulo,e informe se o triangulo é:
a) Eqüilátero(todos os lados são iguais),
b) Isósceles (dois dos lados são iguais);
c) Escaleno (todos os lados são diferentes);

ALGORITMO LINGUAGEM PASCAL

PROGRAMA TRIANGULOS; PROGRAM TRIANGULOS;


USES CRT;
TIPO TIPOTRIANG = (EQUILATERO, ISOSCELES, TYPE TIPOTRIANG = (EQUILATERO, ISOSCELES,
ESCALENO); ESCALENO);
VAR VAR
LADO1,LADO2,LADO3 : INTEIRO; LADO1,LADO2,LADO3 : INTEGER;
CLASS : TIPOTRIANG; CLASS : TIPOTRIANG;

PROCEDIMENTO LEIDADOS (VAR LADO1,LADO2,LADO3 : PROCEDURE LEIDADOS (VAR LADO1,LADO2,LADO3 :


INTEGER); INTEGER);
PROCEDIMENTO PERGUNTE (VAR LADO : INTEGER); PROCEDURE PERGUNTE (VAR LADO : INTEGER);
INICIO BEGIN
ESCREVA('ESCREVA O COMPRIMENTO DE UM LADO WRITE('ESCREVA O COMPRIMENTO DE UM LADO DO
DO TRIANGULO ' ); TRIANGULO ' );
LEIA(LADO); READLN(LADO);
FIM; { PERGUNTE} END; { PERGUNTE}
INICIO BEGIN
PERGUNTE(LADO1); { VALOR DO LADO 1 DO PERGUNTE(LADO1); { VALOR DO LADO 1 DO
TRINAGULO} TRINAGULO}
PERGUNTE(LADO2); { VALOR DO LADO 2 DO PERGUNTE(LADO2); { VALOR DO LADO 2 DO
TRIANGULO} TRIANGULO}
PERGUNTE(LADO3); { VALOR DO LADO 3 DO PERGUNTE(LADO3); { VALOR DO LADO 3 DO
TRIANGULO} TRIANGULO}

FIM; {LEIALADOS} END; {LEIALADOS}

PROCEDIMENTO CLASSIFIQUE ( LADO1,LADO2,LADO3 : PROCEDURE CLASSIFIQUE ( LADO1,LADO2,LADO3 :


INTEGER; INTEGER;
VAR CLASS : TIPOTRIANG); VAR CLASS : TIPOTRIANG);
INICIO BEGIN
SE (LADO1=LADO2) AND (LADO2=LADO3) ENTÃO IF (LADO1=LADO2) AND (LADO2=LADO3) THEN
CLASS := EQUILATERO CLASS := EQUILATERO
SENAO ELSE
SE (LADO1=LADO2) OU (LADO1=LADO3) OU IF (LADO1=LADO2) OR (LADO1=LADO3) OR
(LADO2=LADO3) ENTÃO (LADO2=LADO3) THEN
CLASS := ISOSCELES CLASS := ISOSCELES
SENÃO ELSE
CLASS := ESCALENO; CLASS := ESCALENO;
FIM; { CALSSIFIQUE} END; { CALSSIFIQUE}

PROCEDIMENTO INFORME ( CLASS : TIPOTRIANG); PROCEDURE INFORME ( CLASS : TIPOTRIANG);


INICIO BEGIN
CASO CLASS OF CASE CLASS OF
EQUILATERO : ESCREVA (' O TRIANGULO E EQUILATERO : WRITELN (' O TRIANGULO E
EQUILATERO'); EQUILATERO');
ISOSCELES : ESCREVA (' O TRIANGULO E ISOSCELES : WRITELN (' O TRIANGULO E ISOSCELES');
ISOSCELES'); ESCALENO : WRITELN (' O TRIANGULO E ESCALENO ' );
ESCALENO : ESCRERVA (' O TRIANGULO E END;
ESCALENO ' ); END;
FIM;
FIM; { INICIO PROGRAMA PRINCIPAL }

{ INICIO PROCEDIMENTO PRINCIPAL } BEGIN


CLRSCR;
INICIO LEIDADOS(LADO1,LADO2,LADO3);
LEIDADOS(LADO1,LADO2,LADO3); CLASSIFIQUE(LADO1,LADO2,LADO3,CLASS);
CLASSIFIQUE(LADO1,LADO2,LADO3,CLASS); INFORME(CLASS);
INFORME(CLASS); DELAY(1200);
FIM. { TRIANGULO}; END. { TRIANGULO};

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 38


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

EXERCÍCIO DE APRENDIZAGEM

Cria um programa calculadora que apresente um menu de seleções no programa principal. Este menu deverá
dar ao usuário a possibilidade de escolher uma entre quadra operações aritméticas. Escolhida a opção desejada,
deverá ser solicitada a entrada de dois números, e processada a operação deverá ser exibido o resultado.

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:

ALGORITMO LINGUAGEM PASCAL


PROGRAMA CALCULADORA; PROGRAM CALCULADORA;

VAR VAR
OPCAO : CARACTERE; OPCAO : CHAR;

{SUB-ROTINAS DE CÁLCULOS} {SUB-ROTINAS DE CÁLCULOS}

PROCEDIMENTO ROTSOMA; PROCEDURE ROTSOMA;


VAR VAR
R, A, B : REAL; R, A, B : REAL;
INÍCIO BEGIN
ESCREVA (‘ROTINA DE SOMA‘); WRITELN(‘ROTINA DE SOMA‘);
ESCREVA (‘ENTRE UM VALOR PARA A: ‘); WRITELN(‘ENTRE UM VALOR PARA A: ‘);
LEIA(A); READLN(A);
ESCREVA (‘ENTRE UM VALOR PARA B: ‘); WRITELN(‘ENTRE UM VALOR PARA B: ‘);
LEIA(B); READLN(B);
R A + B; R := A + B;
ESCREVA (‘A SOMA DE A COM B É = ‘, R); WRITELN(‘A SOMA DE A COM B É = ‘, R);
FIM; END;

PROCEDIMENTO ROTSSUBTRACAO; PROCEDURE ROTSSUBTRACAO;


VAR VAR
R, A, B : REAL; R, A, B : REAL;
INÍCIO BEGIN
ESCREVA (‘ROTINA DE SUBTRAÇÃO ‘); WRITELN (‘ROTINA DE SUBTRAÇÃO ‘);
ESCREVA (‘ENTRE UM VALOR PARA A: ‘); WRITELN (‘ENTRE UM VALOR PARA A: ‘);
LEIA(A); READLN(A);
ESCREVA (‘ENTRE UM VALOR PARA B: ‘); WRITELN (‘ENTRE UM VALOR PARA B: ‘);
LEIA(B); READLN(B);
R A – B; R := A – B;
ESCREVA(‘A SUBTRAÇÃO DE A COM B É = ‘, R); WRITELN(‘A SUBTRAÇÃO DE A COM B É = ‘, R);
FIM; END;

PROCEDIMENTO ROTMULTIPLICACAO; PROCEDURE ROTMULTIPLICACAO;


VAR VAR
R, A, B : REAL; R, A, B : REAL;
INÍCIO BEGIN
ESCREVA (‘ROTINA DE MULTIPLICAÇÃO ‘); WRITELN (‘ROTINA DE MULTIPLICAÇÃO ‘);
ESCREVA (‘ENTRE UM VALOR PARA A: ‘); WRITELN (‘ENTRE UM VALOR PARA A: ‘);
LEIA(A); READLN(A);
ESCREVA (‘ENTRE UM VALOR PARA B: ‘); WRITELN (‘ENTRE UM VALOR PARA B: ‘);
LEIA(B); READLN(B);
R A * B; R := A * B;
ESCREVA (‘A MULTIPLICAÇÃO DE A COM B É = ‘, R); WRITELN(‘A MULTIPLICAÇÃO DE A COM B É =‘,R);
FIM; END;

PROCEDIMENTO ROTDIVISAO; PROCEDURE ROTDIVISAO;


VAR VAR
R, A, B : REAL; R, A, B : REAL;
INÍCIO BEGIN
ESCREVA (‘ROTINA DE DIVISÃO’); WRITELN (‘ROTINA DE DIVISÃO’);
ESCREVA (‘ENTRE UM VALOR PARA A: ‘); WRITELN (‘ENTRE UM VALOR PARA A: ‘);
LEIA(A); READ(A);
ESCREVA (‘ENTRE UM VALOR PARA B: ‘); WRITELN (‘ENTRE UM VALOR PARA B: ‘);
LEIA(B); READ(B);
R A / B; R := A / B;

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 39


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
ESCREVA (‘A DIVISÃO DE A COM B É = ‘, R); WRITELN (‘A DIVISÃO DE A COM B É = ‘, R);
FIM; END;

{PROGRAMA PRINCIPAL} {PROGRAMA PRINCIPAL}


INICIO BEGIN
OPCAO ‘0’ OPCAO := ‘0’
ENQUANTO (OPCAO <> ‘5’) FAÇA WHILE (OPCAO <> ‘5’) DO
ESCREVA (‘1 – ADIÇÃO’); WRITELN (‘1 – ADIÇÃO’);
ESCREVA (‘2 – SUBTRAÇÃO’); WRITELN (‘2 – SUBTRAÇÃO’);
ESCREVA (‘3 – MULTIPLICAÇÃO’); WRITELN (‘3 – MULTIPLICAÇÃO’);
ESCREVA (‘ 4 – DIVISÃO’); WRITELN (‘ 4 – DIVISÃO’);
ESCREVA (‘5 – FIM DO PROGRAMA’); WRITELN (‘5 – FIM DO PROGRAMA’);
ESCREVA (‘ESCOLHA UMA OPÇÃO’); WRITELN (‘ESCOLHA UMA OPÇÃO’);
LEIA (OPCAO); READLN (OPCAO);
SE OPCAO = ‘1’ ENTÃO IF OPCAO = ‘1’ THEN
ROTSOMA; ROTSOMA;
FIM_SE; IF OPCAO = ‘2’ THEN
SE OPCAO = ‘2’ ENTÃO ROTSUBTRACAO;
ROTSUBTRACAO; IF OPCAO = ‘3’ THEN
FIM_SE; ROTMULTIPLICACAO;
SE OPCAO = ‘3’ ENTÃO IF OPCAO = ‘4’ THEN
ROTMULTIPLICACAO; ROTDIVISAO;
FIM_SE; END;
SE OPCAO = ‘4’ ENTÃO END.
ROTDIVISAO;
FIM_SE;
FIM_ENQUANTO;
FIM.

Obs: Observe que em cada sub-rotina possui 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 opção é 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

Função <nome da função> (parâmetros) : <tipo da função>


Var
<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.
Os 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.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 40


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
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.

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:

ALGORITMO LINGUAGEM PASCAL


PROGRAMA RAIZ_CUBICA PROGRAM RAIZ_CUBICA;
VAR USES CRT;
I : INTEIRO VAR
FUNÇÃO CUBO(N) : REAL I : INTEGER;
INICIO FUNCAO CUBO(N) : REAL;
CUBO N * N * N BEGIN
FIM CUBO := N * N * N;
INICIO END;
ESCREVA(‘DIGITE O VALOR I ); BEGIN
LEIA (I) CLRSCR;
ESCREVA(CUBO(I)) WRITELN(‘DIGITE O VALOR I ‘);
FIM. READ(I);
WRITELN(CUBO(I));
DELAY(800);
END.

Observe que neste caso o parâmetro formal foi a variável “ N ”, enquanto o parâmetro real foi a variável “I ”.
Cada parâmetro passado na lista de parâmetros de uma função ou de um procedimento pode ser passado por
valor ou por referência. Parâmetros passados por valor permanecem inalterados após a chamada de uma função.
Parâmetros passados por referência guardam as modificações sofridas no interior destas. Um parâmetro passado
por referência possui antes do nome do parâmetro a palavra reservada var. Quando a palavra var está ausente é
assumido que o parâmetro é passado por valor.
Para observar a diferença entre a passagem de parâmetros por valor e por referência, acompanhe os seguinte
exemplos:

procedure somaUmPorValor(x: integer);


begin
x := x+1;
end;
procedure somaUmPorRef(var x: integer);
begin
x := x+1;
end;

procedure Teste;
var x: integer;
begin
x := 1; { Atribuir 1 a variável X ( X vale 1 aqui) }
somaUmPorRef(x); { chamar a função}
{ ao retornar da chamada ao procedimento (X vale 2 neste ponto) }
somaUmPorValor(x); { chamar a função}
{ ao retornar da chamada do procedimento (X ainda vale 2 neste ponto. Pois as modificações no
parâmetro X dentro do procedimento somaUmPorValor não fizeram efeito pois x foi passado
por valor neste caso.}
end;

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 41


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
A regra básica para a utilização de parâmetros por valor e por referência é desenhar um módulo na forma de um
esquemático de "caixa–preta". Parâmetros que sejam somente de entrada serão mapeados como parâmetros
passados por valor enquanto que parâmetros de entrada e saída ou somente de saída serão mapeados como
parâmetros passados por referência.

Considere, por exemplo, um módulo que deva receber dois valores inteiros e trocar os seus valores. Desta
forma, a chamada ao módulo Troca(A,B) com os valores de A igual a 2 e o valor de B igual a 3 antes da chamada
deve produzir a troca desta valores, colocando o valor 3 na variável A e o valor 2 na variável B.

A: = 2;
B := 3;
troca (A,B);
{ A vale 3 e B vale 2 agora}

PROGRAMA TROCA; PROGRAM TROCA;


USES CRT;
PROCEDIMENTO TROCA (VAR A,B : INTEIRO); PROCEDURE TROCA (VAR a,b : INTEGER);
VAR X : INTEIRO; VAR X : INTEGER;
INICIO BEGIN
X := A; X := A;
A := B; A := B;
B := X; B := X;
FIM; End;
var VAR
A,B : INTEIRO; A,B : INTEGER;
INICIO { Procedimento principal } BEGIN { Procedimento principal }
CLRSCR;
ESCREVA ('INFORME O VALOR DE A : ') ; WRITE ('INFORME O VALOR DE A : ') ;
LEIA (A); READLN (A);
ESCREVA ('INFORME O VALOR DE B : '); WRITE ('INFORME O VALOR DE B : ');
LEIA(B); READ(B);
TROCA(A,B); TROCA(A,B);
ESCREVA (' VALORES INVERTIDOS '); WRITELN (' VALORES INVERTIDOS ');
ESCREVA ('O VALOR DE A AGORA E : ', A); WRITELN('O VALOR DE A AGORA E : ', A);
ESCREVA ('O VALOR DE B AGORA E : ', B); WRITELN('O VALOR DE B AGORA E : ', B);
DELAY(800);
FIM. END.

Se desenhássemos o esquemático ("caixa–preta") associada a esta rotina teríamos o seguinte

desenho:

A maneira mais intuitiva de proceder à modularização de problemas é feita definindo-se um módulo principal
de controle e módulos específicos para as funções do Algoritmo.
As linguagens de programação hoje existentes dispõem de recursos que facilitam a construção e manipulação
de módulos.
A experiência recomenda que os módulos de um algoritmo devem ter um tamanho limitado.
Módulos muito grandes são difíceis de ser compreendidos e, em geral, são multifuncionais.
Objetos globais são entidades que podem ser usadas em módulos internos a outro modulo do algoritmo onde
foram declaradas.
Objetos locais são entidades que só podem ser usadas no módulo do algoritmo onde foram declaradas.
Estes objetos não possuem qualquer significado fora deste módulo. São Exemplo de objetos globais ou locais:
variáveis, arquivos, outros módulos etc.
Um módulo pode usar objetos globais ou locais em relação a ele. Porém não pode usar objetos declarados em
módulos que não o abrangem. Isto significa que objetos globais, declarados em módulos mais externos ou mesmo
a nível do modulo principal, podem ser também utilizados em módulos mais externos.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 42


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO
A comunicação entre os módulos deverá ser feita através de vínculos, utilizando-se objetos globais ou
transferência de parametros.

FERRAMENTAS PARA MODULARIZAÇÃO

Dentre as ferramentas de modularização pode-se destacar:


Sub-rotinas
Funções
As sub-rotinas e as funções são módulos de programação que servem basicamente a três objetivos:
* Evitar que uma certa seqüência de comandos necessário em vários locais de um algoritmo tenha que ser escrita
repetidamente nestes locais;
* Dividir e estruturar um Algoritmo em partes fechadas e logicamente coerentes;
* Aumentar a legibilidade de um algoritmo;
Sub-rotinas e funções são módulos hierarquicamente subordinados a um algoritmo, comumente chamado de
módulo principal. Da mesma forma uma função pode conter outras sub-rotinas e funções aninhadas, como pode
ser visto no diagrama hierárquico a seguir:

MP

S1 S2 F1 F2

S3 F3 S4 F4

A figura ilustra um algoritmo constituído de um módulo principal MP, as sub-rotinas S1,S2,S3 e


S4 e as funções F1, F2, F3 e F4.

CONCLUSÕES

A técnica apresentada neste módulo para o desenvolvimento de algoritmo é útil e indicada mesmo quando não se
cogita da utilização de computadores. Ao se defrontar com problemas de organização de empresa, do
estabelecimento de uma política de economia, do projeto de uma obra de engenharia, da fixação do plano de ação
de uma equipe de pesquisa, do planejamento de uma novela, romance ou mesmo de um livro didático, as técnicas
de desenvolvimento estruturado de algoritmos podem e devem ser empregadas. Os problemas devem ser
abordados, primeiro, na sua generalidade e somente depois, gradativamente, nas suas particularidades. As ações
devem ser consideradas na sua sequenciação, na sua condicionalidade e na sua repetição.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 43


CENTRO EDUCACIONAL FUCAPI – CEEF
CURSO TÉCNICO – INFORMÁTICA
APOSTILA – LÓGICA E TÉCNICAS DE PROGRAMAÇÃO

O desenvolvimento de um algoritmo capaz de fazer com que as operações básicas de um computador conduza à
solução de um problema, até a obtenção dos seus resultados finais, é apenas uma das fases necessárias para o uso
do computador.

Particularmente, para se resolver um problema num computador, é necessário passar pelas seguintes fases:

DEFINIÇÃO DO PROGRAMA

Antes de se utilizar o computador, é necessário saber qual é o problema que se deseja resolver. É necessário
caracteriza-lo de uma maneira clara e completa.

DESENVOLVIMENTO DE UM ALGORÍTMO

Definido o problema, passa-se em seguida à fase de desenvolvimento de um algoritmo capaz de produzir os


resultados desejados. Nesta fase, quanto mais complexo for o problema, mais se recomenda a utilização da técnica
apresentada neste módulo.

CODIFICAÇÃO

Desenvolvido satisfatoriamente um algoritmo, faz-se nesta fase a sua transcrição para uma linguagem de
programação aceita pelo computador.

DIGITAÇÃO

Escrito o programa, na linguagem escolhida, é necessário introduzi-lo no computador, a fim de executa-lo. Faz-se
estão a sua digitação num teclado, ligado a um computador diretamente ou através de um terminal ligado a uma
maquina separada, que perfura cartões ou grava disquetes
ou fitas magnéticas que serão, posteriormente, lidos pelo computador.

PROCESSAMENTO DO PROGRAMA

Esta fase é feita pelo próprio computador, verificando a correção sintática do programa, considerando o
significado de suas sentenças e procedendo a sua execução. Em alguns casos, a analise das sentenças do programa
e a sua execução são realizadas alternadamente: diz-se, então, que o programa esta sendo interpretado. Em outros
casos, é feita, antes, a tradução de todo o programa para a linguagem de máquina e somente depois se processa a
sua execução: diz-se, neste caso, que oi programa foi compilado.

ANÁLISE DOS RESULTADOS

A obtenção de resultados através de um computador não é garantia de que eles estejam corretos. Mas apenas uma
indicação de que o programa está escrito sem erros de linguagem. Geralmente, o computador não executa
programas com erro de linguagem, mas emite mensagem, tentando localizar o erro e determinar a sua natureza.
Por conseqüência, os primeiros resultados de cada alternativa contida num programa devem ser cuidadosamente
verificadas.

BIBLIOGRAFIA

O assunto aqui abordado foi retirado de vários livros de estrutura de dados e de material pesquisado na
Internet.

LÓGICA E TÉCNICAS DE PROGRAMAÇÃO – PÁGINA 44

Vous aimerez peut-être aussi