EDUCAÇÃO PROFISSIONAL TÉCNICA DE NÍVEL MÉDIO EM INFORMÁTICA
LÓGICA DE
PROGRAMAÇÃO
Módulo II 2013/2
Professor: Marcelo Reis Mendes
Manaus - 2013
1
OBJETIVO
“Habilitar e desenvolver o raciocínio lógico do aluno através de iniciação em
algoritmos e demonstração de várias técnicas utilizadas em programação de computadores,
proporcionando juntamente com o conhecimento de estruturas de dados básicos o estimulo
da criatividade para o desenvolvimento de software”.
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 desta disciplina é 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.
2
Lógica de programação
 Processo de construção de um algoritmo contendo passos para a solução de um
problema.
 Algoritmo
o Ferramenta textual
 Fluxograma
o Ferramenta gráfica utilizada da descrição da lógica
Fluxograma:
início
processo
cartão
decisão
disco
impressão
PRINCÍPIOS DE RESOLUÇÕES DE PROBLEMAS
Primeiramente, devemos entender e compreender a palavra “problema”.
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.
3
Até mesmo as coisas mais simples, podem ser descritas por seqüências lógicas.
Por exemplo:
“Chupar uma bala”.
 Pegar a bala



Exemplos de Diagrama de Bloco
“Chupar uma bala”.
Retirar o papel
Chupar a bala
Jogar o papel no lixo
INÍCIO
PEGAR A BALA
RETIRAR O
PAPEL
CHUPAR A
BALA
JOGAR O PAPEL
NO LIXO
FIM
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”.
 Pegar a bala
 A bala é de morango?
 Se sim, não chupe a bala
 Se não, continue o algoritmo
 Retirar o papel.
 Chupar a bala
 Jogar o papel no lixo
Vejamos agora utilizando o diagrama de blocos:
4
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
5




C
Visual Basic
Java
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
Constantes
 Numéricas
o Utiliza sistema decimal inteiro ou fracionado(+,-) Ex. 25; 12,35
 Lógicas
o Representadas pelas palavras FALSO e VERDADEIRO
 Literal
o Qualquer seqüência de caracteres (letra, dígitos ou símbolos especiais)
o É utilizado entre aspas.
o Ex. “Joaquim”; “FUCAPI”; “12345”; “12/02/2004”
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
Variável
 Cada variável corresponde a uma posição de memória
 O seu conteúdo pode variar ao longo do tempo durante a execução de um programa.
Variáveis são endereços de memória destinados a armazenar informações
temporariamente.
É a representação simbólica dos elementos de um conjunto. Nos algoritmos,
destinados a resolver um problema no computador, a cada variável corresponde uma
posição de memória, cujo conteúdo pode variar ao longo do tempo durante a execução de
um programa. Embora uma variável possa assumir diferentes valores, ela só pode
armazenar um valor a cada instante.
Todo Algoritmo ou programa deve possuir variável.
Ex: A = 2 e B = 5
C = A + B = 7.
Formação de identificadores
 Formado por um ou mais caracteres
6
 O primeiro caracter deve ser letra e os seguintes, podem ser letras, underline(_) ou
dígitos
 Não usa símbolos especiais exceto o underline(_)
 Ter no máximo 127 caracteres;
 Não possuir espaços em branco;
Ex. Válido
nota
X5
A
não válido
5b
nota#2
9ç
Declaração de variáveis
 Classificados como Numéricas, Lógicas e Literais.
 Declare lista-de-identificares nome-do-tipo
 Onde,
o Declare: é uma palavra-chave do algoritmo
o Lista....: são os nomes definidos para as variáveis, devem estar separados por
vírgulas
o Nome..: podem ser Numérico, Lógico ou Literal
 Ex.
o Declare Nota, codigo, X5 numérico;
o Declare teste lógico;
o Declare nome, endereço literal;
Comentários
 Utilizado para comentar detalhes específicos sobre o programa, na identificação do
autor do programa, data, etc.
Ex.
{ Autor: desconhecido }
{ Data de criação: 26/02/2004 }
/**
* Autor: Marcelo Reis Mendes
* Data criação: 01/07/2013
* Última alteração: 22/07/2013
* Versão homologada: 1.89
*/
Expressões Aritméticas
 Adição, Subtração, Multiplicação, Divisão, Potenciação e Radiciação
 Ex.
o X + Y; X – Y; 2 * nota; total / N;
 Prioridade das Operações
o 1o. Potenciação, Radiciação.
o 2o. Multiplicação, Divisão.
o 3o. Adição, Subtração.
Expressões Lógicas
7
 Relações (comparação)
o Dois valores de mesmo tipo básico
o = igual a; <> diferente de; > maior que
o < menor que; >= maior ou igual a
o <= menor ou igual a
 Operadores Lógicos
 A Álgebra das Proposições define três conectivos:
o E – para a conjunção
o OU – para a disjunção
o NÃO – para a negação
 Conjunção
o
o
o
o
Verdadeiro E
Verdadeiro E
Falso
E
Falso
E
Verdadeiro = Verdadeiro
Falso
= Falso
Verdadeiro = Falso
Falso
= Falso
 Disjunção
o
o
o
o
Verdadeiro OU Verdadeiro = Verdadeiro
Verdadeiro OU Falso
= Verdadeiro
Falso
OU Verdadeiro = Verdadeiro
Falso
OU Falso
= Falso
 Negação
o Não é Verdadeiro
TABELA VERDADE
A
V
V
F
F
B
V
F
V
F
AEB
V
F
F
F
A OU B
V
V
V
F
NÃO (A)
F
F
V
V
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.
M
(N1+N2) / 2
8
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 abaixo, 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.
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)
EXP(EA)
ABS(EA)
TRUNC(EA)
ROUND(EA)
SQR(EA)
SQRT(EA)
SIN(EA)
COS(EA)
ARCTAN(EA)
LOGARITMO NEPERIANO
NÚMERO É ELEVADO A (EA)
VALOR ABSOLUTO
VALOR TRUNCADO
VALOR ARREDONDADO
QUADRADO
RAIZ QUADRADA
SENO
COSENO
ARCO DA TANGENTE
Exemplos:
exp(y*(b+2)-6)
ln(sqrt(a+2*b)-b)
9
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.
TIPOS PRIMITIVOS DE DADOS
INTEIRO - admite somente números inteiros. geralmente é utilizado para representar uma
contagem (quantidade).
REAL - admite números reais (com ou sem casas decimais), geralmente é utilizado para
representar uma medição.
CARACTERE - admite caracteres alfanuméricos, os números quando declarados como
caracteres tornam se representativos e perdem a atribuição de valor.
LÓGICO - admite somente valores lógicos(verdadeiro/falso).
COMANDOS DE I/O (INPUT/OUTPUT)
LEIA(READ) . Comando de entrada que permite a leitura de Variáveis de Entrada.
ESCREVA(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 “:=
em pascal”, “ ← em algoritmo”.
Exemplos:
A := 2;
A ← 2;
B := 3;
B ← 3;
C := A + B; C ← A + B;
SINAL DE IGUALDADE
As constantes são eternamente iguais a determinados valores, portanto usamos o sinal de
“=”.
Exemplos:
PI = 3.1416;
Escola = ‘CEEF’
1
0
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.
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.
EXERCÍCIO DE APRENDIZAGEM
1. Desenvolver um algoritmo que lê o nome e as 4 notas bimestrais de um aluno e:
a) Calcule e escreva a média obtida.
ALGORITMO
ALGORITMO MEDIA;
LINGUAGEM PASCAL
PROGRAM MEDIA;
1
1
VAR
NOTA1,NOTA2, NOTA3, NOTA4,
MEDIA: NUMERICAS;
NOME : LITERAL;
INICIO
ESCREVA(‘DIGITE O NOME DO ALUNO’);
LEIA (NOME);
ESCREVA (‘DIGITE A NOTA1’);
LEIA (NOTA1);
ESCREVA(‘DIGITE A NOTA2’);
LEIA(NOTA2);
ESCREVA(‘DIGITE A NOTA3’);
LEIA( NOTA3);
ESCREVA(‘DIGITE A NOTA4’);
LEIA(NOTA4);
MEDIA . (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4;
ESCREVER (NOME, MEDIA)
FIM ALGORITMO.
USES CRT;
VAR
NOTA1, NOTA2, NOTA3, NOTA4,
MEDIA: REAL;
NOME : STRING;
BEGIN
CLRSCR;
WRITE(‘DIGITE O NOME DO ALUNO ’);
READLN(NOME);
WRITE(‘DIGITE A NOTA1 ’);
READLN(NOTA1);
WRITE(‘DIGITE A NOTA2 ’);
READLN(NOTA2);
WRITE(‘DIGITE A NOTA3 ’);
READLN(NOTA3);
WRITE(‘DIGITE A NOTA 4’);
READLN(NOTA4);
MEDIA := (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4;
WRITELN(´Nome Aluno ´, NOME, ´ Media ´, MEDIA);
READKEY;
END.
1
2
2. Desenvolver um algoritmo que lê o raio de uma circunferência e calcula sua área.
ALGORITMO
AREA_CIRCUNFERENCIA;
CONST PI = 3.1416;
VAR
RAIO, AREA : REAL;
INICIO
ESCREVA(‘DIGITE O VALOR DO RAIO´);
LEIA (RAIO)
{ENTRADA}
AREA ← PI * SQR(RAIO)
{PROCESSAMANETO}
ESCREVA (“AREA = “, AREA)
{SAÍDA}
FIM ALGORITMO.
LINGUAGEM PASCAL
PROGRAM AREA_CIRCUNFERENCIA;
USES CRT;
CONST PI = 3.1416;
VAR
RAIO, AREA : REAL;
BEGIN
CLRSCR;
WRITELN(‘DIGITE O VALOR DO RAIO´);
READLN(RAIO);
{ENTRADA}
AREA := PI * SQR(RAIO);
{PROCESSAMENTO}
WRITELN(’AREA = ’, AREA:3:2);
{SAÍDA}
READKEY;
END.
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.
1
3
Um algoritmo e seus refinamentos são formados por comandos, que determinam
as ações a serem executadas pelo seu destinatário e por estruturas de controle que
determinam a ordem em que os comandos devam ser Executados, se devem ser executados
ou não e quando devem ser executados.
Estrutura seqüencial, segundo a qual os comandos devem ser executados um após o
outro, na mesma ordem em que aparecem escritos.
Início
Receba o valor do Salário
Processe calcular Salário liquido
Processe escrever Salário liquido
Fim
Estrutura condicional, se um comando de um refinamento for um tanto vago, ele poderá,
por sua vez, ser desdobrado em novos comandos, produzindo-se o refinamento de um
1
4
refinamento, e assim sucessivamente. Portanto, o comando “calcular salário liquido “, poderia
ser desdobrado em:
Inicio
Atribua um valor(qualquer) ao salário bruto
Se salário bruto for maior que 1000,00
Então Calcular valor do IR
Fim se
Calcular valor do Inss
Calcular salário liquido
Escreva salário liquido
Fim
Algoritmo par;
Var
A : numérico;
Inicio
A ← 1;
Enquanto A < 10 faça
Se resto A divido por 2 for igual a zero
Então Escreva (´O valor ´, A . ´e par´)
Senão Escreva (´O valor ´, A . ´e imparr´)
Fim se;
A ← A + 1;
Fim enquanto;
Fim
Na estrutura de repetição, os comandos e as estruturas de controles abrangidos devem ser
executados repetidamente até que se verifique uma condição (FIM) para que se interrompa a
repetição.
1
5
1
6
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
ALGORITMO ACHA_MAIOR;
VAR A, B, C : INTEIRO;
INICIO
ESCREVA(‘DIGITE O VALOR
LEIA(A);
ESCREVA(‘DIGITE O VALOR
LEIA(B);
ESCREVA(‘DIGITE O VALOR
LEIA(C);
SE (A>B) E (A>C) ENTÃO
INICIO
ESCREVER (A);
FIM
SENÃO
SE (B>A) E (B>C) ENTÃO
INICIO
ESCREVER (´MAIOR VALOR
FIM
SENÃO
INICIO
ESCREVER (´MAIOR VALOR
FIM;
FIM ALGORITMO.
PROGRAM ACHA_MAIOR;
USES CRT; {biblioteca de funções pré-definidas}
VAR A, B, C : INTEGER;
BEGIN
CLRSCR; {limpa a tela}
WRITELN(‘DIGITE O VALOR A ‘);
READLN(A);
WRITELN(‘DIGITE O VALOR B ‘);
READLN(B);
WRITELN(’DIGITE O VALOR C ’ );
READLN(C);
IF (A>B) AND (A>C) THEN
BEGIN
WRITELN(‘MAIOR VALOR ’,A);
END
ELSE
IF (B>A) AND (B>C) THEN
BEGIN
WRITELN(‘MAIOR VALOR ‘,B);
END
ELSE
BEGIN
WRITELN(‘MAIOR VALOR ‘,C);
END;
DELAY(1000); {pausa em milesegundo}
END.
A ’);
B ’);
C ’);
É :´,B);
É:´, C);
1
7
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: Serve para efetuar um conjunto de ações repetidas vezes. Existem
três tipos básicos de repetições, sendo elas.
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 1:
ENQUANTO <<CONDIÇÃO>> FAÇA
<<COMANDO1>>;
Forma Geral 2:
ENQUANTO <<CONDIÇÃO>> FAÇA
Í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 igual a ZERO.
ALGORITMO
LINGUAGEM PASCAL
ALGORITMO SOMA_SALARIOS;
VAR SOMA, SALARIO : REAL;
INICIO
SOMA:=0;
PROGRAM SOMA_SALARIOS;
USES CRT;
VAR SOMA, SALARIO : REAL;
BEGIN
1
8
SALARIO:=0;
ESCREVA(‘DIGITE O VALOR DO SALÁRIO, OU ZERO
PARA FINALIZAR’);
LEIA (SALARIO);
ENQUANTO SALARIO>0 FAÇA
INICIO
SOMA:=SOMA+SALARIO;
ESCREVA(‘DIGITE O VALOR DO SALÁRIO, OU ZERO
PARA FINALIZAR’);
LEIA (SALARIO);
FIM;
ESCREVER (´A SOMA DO SALARIO E ´,SOMA);
FIM ALGORITMO.

CLRSCR;
SOMA:=0;
SALARIO:=0;
WRITE(‘DIGITE O VALOR DO SALÁRIO, OU ZERO PARA
FINALIZAR´);
READLN(SALARIO);
WHILE SALARIO > 0 DO
BEGIN
SOMA:= (SOMA+SALARIO);
WRITE(‘DIGITE O VALOR DO SALÁRIO, OU ZERO PARA
FINALIZAR´);
READLN(SALARIO);
END;
WRITELN(‘A SOMA DO SALARIO E ´,SOMA:3:2);
DELAY(1000);
END.
Desenvolver um algoritmo que escreve os 100 primeiros números pares.
ALGORITMO
LINGUAGEM PASCAL;
ALGORITMO PARES_2;
VAR A : INTEIRO;
INICIO
A := 2;
REPITA
SE A > 100 ENTÃO
INTERROMPA;
FIM SE;
ESCREVER (´O NÚMERO ´, A , ´ E PAR´);
A := A+2;
FIM REPITA;
FIM ALGORITMO.
PROGRAM PARES_2;
USES CRT;
VAR A : INTEGER;
BEGIN
CLRSCR;
A := 2;
REPEAT
WRITELN(´O NUMERO ´, A, ´ E PAR´);
A := A+2;
UNTIL A >100;
DELAY(1000);
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.
Para 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, foram 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 facilitar 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 seqüê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
1
9
utilização do conjunto de instruções para..de..até..passo.faça..fim_para. 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
Desenvolver um algoritmo que lê um valor para a variável X, multiplicar este valor por 3
atribuindo o resultado à variável de resposta R e apresentar o valor obtido, repetindo esta
seqüência por cinco vezes.
ALGORITMO
LINGUAGEM PASCAL
ALGORITMO LOOPING_PARA
VAR
X, R ,CONT: INTEIRO;
INICIO
PARA CONT DE 1 ATÉ 5 PASSO 1
FAÇA
INICIO
ESCREVA(‘DIGITE O VALOR X’);
LEIA (X);
R . X * 3;
ESCREVA(´O NVALOR DE R É : ´, R);
R . 0;
FIM_PARA;
FIM ALGORITMO.
PROGRAM LOOPING_PARA;
USES CRT;
VAR
X, R ,CONT: INTEGER;
BEGIN
CLRSCR;
FOR CONT := 1 TO 5 DO
BEGIN
WRITE(‘DIGITE O VALOR X ’);
READLN(X);
R := X * 3;
WRITELN(‘O VALOR DE R É : ´, R);
DELAY(1000);
R := 0;
END;
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 controle) 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.
ESTRUTURA DE DADOS – TABELAS EM MEMÓRIAS
2
0
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+Jj+1].
Exemplo 01.
Nota
Índice
80
1
70
2
75
3
100 85
4
5
92
6
68
7
80
8
90
9
75
10
nota[1] = 80
nota[2] = 70
nota[3] = 75
nota[4] = 100
nota[5] = 85
.
.
nota[10] = 75
2
1
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
ALGORITMO
MEDIA_TURMA;
VAR
MD : VETOR [1..10] DE REAL;
SOMA, MEDIA : REAL;
I : INTEGER;
INICIO
SOMA := 0;
PARA I DE 1 ATÉ 10 PASSO 1 FAÇA
INICIO
ESCREVA(“DIGITE A NOTA DO “, I,”º ALUNO”);
LEIA(MD[I]);
SOMA := SOMA + MD[I];
FIM;
MEDIA  SOMA / 10;
ESCREVA(´A MEDIA DA TURMA É :´, MEDIA:2:2);
FIM ALGORITMO..
LINGUAGEM PASCAL
PROGRAM MEDIA_TURMA;
USES CRT;
VAR
MD : ARRAY [1..10] OF REAL;
SOMA, MEDIA : REAL;
I : INTEGER;
BEGIN
CLRSCR;
SOMA := 0;
FOR I := 1 TO 10 DO
BEGIN
WRITE(‘DIGITE A NOTA DO ´, I,´º ALUNO ’);
READLN(MD[I]);
SOMA := SOMA + MD[I];
END;
MEDIA := SOMA / 10;
WRITELN(´A MEDIA DA TURMA E :´, MEDIA:2:2);
DELAY(1000);
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.
ALGORITMO
ALGORITMO
MEDIA_TURMA;
VAR
MD : CONJUNTO [1.10] DE REAL
SOMA, MEDIA : REAL
I : INTEIRO
INICIO
SOMA 0;
PARA I DE 1 ATE 10
LINGUAGEM PASCAL
PROGRAM MEDIA_TURMA;
USES CRT;
VAR
MD : ARRAY [1..10] OF REAL;
SOMA, MEDIA : REAL;
I : INTEGER;
BEGIN
CLRSCR;
SOMA := 0;
FOR I := 1 TO 10 DO
2
2
PASSO 1 FAÇA
INICIO
BEGIN
WRITE(‘DIGITE A NOTA DO ´,I,´º ALUNO ´ );
ESCREVA(‘DIGITE A NOTA DO ´,I, ´º ALUNO ’);
READLN(MD[I]);
LEIA (MD[I])
SOMA := SOMA + MD[I];
SOMA  SOMA + MD[I]
END;
FIM_PARA;
CLRSCR;
FOR I := 1 TO 10 DO
PARA I DE 1 ATE 10 PASSO 1 FAÇA
BEGIN
INICIO
WRITELN(´A NOTA DO ALUNO ´,I,
ESCREVA (´A NOTA DO ALUNO ´, I, ´ E ´, MD[I]);
´ E ´, MD[I] :2:2);
FIM_PARA;
END;
MÉDIA SOMA / 10;
MEDIA := SOMA / 10;
ESCREVA (´A MEDIA DA TURMA É : ´, MEDIA);
WRITELN(´A MEDIA DA TURMA É : ´,
FIM ALGORITMO.
MEDIA:2:2);
DELAY(1000);
END.
2
3
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.
2
4
Vetor
V
Matriz
4 7 2 5 3
Array Tridimensional
3 8 1 5
6
3
8
1
=
M
0 2 4 7
7
3
0
2
5
2
1
5
9
4
0
3
=
2 5 9 3
T
3
8
=
0 2 4 7 1 5
2 5 9 3
Cada elemento dos arrays podem ser referenciados através de índices.
Exemplos:
V[1] = 4
V[2] = 7
V[5] = 3
M[1,1] = 3
M[2,3] = 4
M[3,1] = 2
T[1,1,1] = 3
T[2,3,2] = 9
T[1,2,3] = 3
2
5
OPERAÇÕES BÁSICAS COM MATRIZES DE DUAS DIMENSÕES
Uma matriz de duas 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.
Exemplos:
L
C
O
L
U
N
A
1 2 3 4 5
I
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
6
7
8
50 51 52 53 54
60 61 62 63 64
70 71 72 73 74
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.
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
ALGORITMO LER_ELEMENTOS;
VAR
NOTAS : VETOR [1..8, 1..5] DE REAL
I, J : INTEIRO;
INICIO
PARA I DE 1 ATÉ 8 PASSO 1 FAÇA
LINGUAGEM PASCAL
PROGRAM LER_ELEMENTOS;
USES CRT;
VAR
NOTAS : ARRAY [1..8, 1..5] OF REAL;
I, J : INTEGER;
BEGIN
2
6
INICIO
PARA J DE 1 ATÉ 5 PASSO 1 FAÇA
INICIO
LEIA(NOTAS[I,J]);
FIM_PARA
FIM_PARA
FIM ALGORITMO.
CLRSCR;
FOR I := 1 TO 8 DO
BEGIN
FOR J := 1 TO 5 DO
BEGIN
WRITELN(´Informe o valor da linha ´, I,
´coluna ´,j);
READLN(NOTAS[I,J]);
END;
END;
Delay(1000);
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
ALGORITMO LER_ELEMENTOS;
VAR
NOTAS : VETOR [1..8, 1..5] DE REAL
I, J : INTEIRO;
INICIO
PARA I DE 1 ATÉ 8 PASSO 1 FAÇA
INICIO
PARA J DE 1 ATÉ 4 PASSO 1 FAÇA
INICIO
ESCREVA(NOTAS[I,J]);
FIM_PARA;
FIM_PARA;
FIM ALGORITMO.
LINGUAGEM PASCAL
PROGRAM LER_ELEMENTOS;
VAR
NOTAS : ARRAY [1..8, 1..5] OF REAL
I, J : INTEGER;
BEGIN
FOR I := 1 TO 8 DO
BEGIN
FOR J := 1 TO 5 DO
BEGIN
WRITELN(NOTAS[I,J]);
END;
END;
END.
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.
2
7
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
OPCAO : CARACTERE;
VAR
OPCAO : CHAR;
{SUB-ROTINAS DE CÁLCULOS}
{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;
PROCEDURE ROTSOMA;
VAR
R, A, B : REAL;
BEGIN
WRITELN(‘ROTINA DE SOMA‘);
WRITELN(‘ENTRE UM VALOR PARA
A: ‘);
READLN(A);
WRITELN(‘ENTRE UM VALOR PARA
B: ‘);
READLN(B);
R := A + B;
WRITELN(‘A SOMA DE A COM B É =
‘, R);
END;
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
PROCEDURE ROTSSUBTRACAO;
VAR
R, A, B : REAL;
BEGIN
WRITELN (‘ROTINA DE
SUBTRAÇÃO ‘);
WRITELN (‘ENTRE UM VALOR
PARA A: ‘);
READLN(A);
WRITELN (‘ENTRE UM VALOR
PARA B: ‘);
READLN(B);
R := A – B;
WRITELN(‘A SUBTRAÇÃO DE A
COM B É = ‘, R);
2
8
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: ‘);
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.
END;
PROCEDURE ROTMULTIPLICACAO;
VAR
R, A, B : REAL;
BEGIN
WRITELN (‘ROTINA DE
MULTIPLICAÇÃO ‘);
WRITELN (‘ENTRE UM VALOR PARA A:
‘);
READLN(A);
WRITELN (‘ENTRE UM VALOR PARA B:
‘);
READLN(B);
R := A * B;
WRITELN(‘A MULTIPLICAÇÃO DE A
COM B É =‘,R);
END;
PROCEDURE ROTDIVISAO;
VAR
R, A, B : REAL;
BEGIN
WRITELN (‘ROTINA DE DIVISÃO’);
WRITELN (‘ENTRE UM VALOR PARA A: ‘);
READ(A);
WRITELN (‘ENTRE UM VALOR PARA B: ‘);
READ(B);
R := A / B;
WRITELN (‘A DIVISÃO DE A COM B É = ‘, R);
END;
{PROGRAMA PRINCIPAL}
BEGIN
OPCAO := ‘0’
WHILE (OPCAO <> ‘5’) DO
WRITELN (‘1 – ADIÇÃO’);
WRITELN (‘2 – SUBTRAÇÃO’);
WRITELN (‘3 – MULTIPLICAÇÃO’);
WRITELN (‘ 4 – DIVISÃO’);
WRITELN (‘5 – FIM DO PROGRAMA’);
WRITELN (‘ESCOLHA UMA OPÇÃO’);
READLN (OPCAO);
IF OPCAO = ‘1’ THEN
ROTSOMA;
IF OPCAO = ‘2’ THEN
ROTSUBTRACAO;
IF OPCAO = ‘3’ THEN
ROTMULTIPLICACAO;
IF OPCAO = ‘4’ THEN
ROTDIVISAO;
END;
END.
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
2
9
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.
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
PASCAL
PROGRAMA RAIZ_CUBICA
VAR
I : INTEIRO
FUNÇÃO CUBO(N) : REAL
INICIO
CUBO N * N * N
FIM
LINGUAGEM
PROGRAM RAIZ_CUBICA;
USES CRT;
VAR
I : INTEGER;
FUNCAO CUBO(N) : REAL;
BEGIN
CUBO := N * N * N;
3
0
INICIO
ESCREVA(‘DIGITE O VALOR I );
LEIA (I)
ESCREVA(CUBO(I))
FIM.
END;
BEGIN
CLRSCR;
WRITELN(‘DIGITE O VALOR I ‘);
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;
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.
3
1
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;
PROCEDIMENTO TROCA (VAR
A,B : INTEIRO);
VAR X : INTEIRO;
INICIO
X := A;
A := B;
B := X;
FIM;
var
A,B : INTEIRO;
INICIO { Procedimento principal }
ESCREVA ('INFORME O VALOR DE A : ') ;
LEIA (A);
ESCREVA ('INFORME O VALOR DE B : ');
LEIA(B);
TROCA(A,B);
ESCREVA (' VALORES INVERTIDOS ');
ESCREVA ('O VALOR DE A AGORA E : ', A);
ESCREVA ('O VALOR DE B AGORA E : ', B);
FIM.
PROGRAM TROCA;
USES CRT;
PROCEDURE TROCA (VAR a,b
: INTEGER);
VAR X : INTEGER;
BEGIN
X := A;
A := B;
B := X;
End;
VAR
A,B : INTEGER;
BEGIN { Procedimento principal }
CLRSCR;
WRITE ('INFORME O VALOR DE A : ') ;
READLN (A);
WRITE ('INFORME O VALOR DE B : ');
READ(B);
TROCA(A,B);
WRITELN (' VALORES
INVERTIDOS ');
WRITELN('O VALOR DE A AGORA E : ', A);
WRITELN('O VALOR DE B AGORA E : ', B);
DELAY(800);
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.
3
2
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.
A comunicação entre os módulos deverá ser feita através de vínculos, utilizando-se
objetos globais ou transferência de parâmetros.
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:
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
3
3
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.
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, é
3
4
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
FORBELLONE, André L.V. & EBERSPÄCHER,Henri F. - "Lógica de programação - A
construção de Algoritmos e estrutura de dados" - São Paulo - Makron, McGraw-Hill,1993.
SALIBA, Walter L. C. - "Técnicas de programação - Uma abordagem estruturada"- Makron,
McGraw-Hill, 1992.
GUIMARÃES, Ângelo M. & LAGES, Newton A. C. - "Algoritmos e estruturas de dados" - Rio
de Janeiro - LTC, 1985.
FARRER, Harry, BECKER, Christiano G.,FARIA, Eduardo C., MATOS, Helton F., SANTOS,
Marcos A., MAIA, Miriam L.- "Algoritmos estruturados" - Rio de Janeiro - Ed.
Guanabara,1989.
3
5
ANEXO I - ESTRUTURA SEQUENCIAL COM SELEÇÃO
1. Ler um valor e escrever a mensagem É MAIOR QUE 10 se o valor lido for maior que 10,
caso contrário escrever NÃO É MAIOR QUE 10.
2. Ler um valor e escrever se é positivo ou negativo (considere o valor zero como positivo).
3. Ler as notas da 1a. e 2a. avaliações de um aluno. Calcular a média aritmética simples e
escrever uma mensagem que diga se o aluno foi ou não aprovado (considerar que nota
igual ou maior que 6.0 o aluno é aprovado). Escrever também a média calculada.
4. Ler o ano atual e o ano de nascimento de uma pessoa. Escrever uma mensagem que diga
se ela poderá ou não votar este ano (não é necessário considerar o mês em que a
pessoa nasceu, considere idade maior ou igual a 16 nos ).
5. Desenvolver um algoritmo que leia dois valores V1 e V2 e calcule a diferença do maior
pelo menor.
6. Desenvolver um algoritmo que escreva os números de 10 até 50. Quando o número for
igual a 25 escreva a mensagem “Parabéns”.
3
6
ANEXO II - ESTRUTURA DE REPETIÇÃO
1. Desenvolver um algoritmo que calcule a soma dos números pares de 10 até 200 e
mostre a soma.
2. Desenvolver um algoritmo que mostre os números impares de 20 até 30 quando o
número for maior que 30 finalize.
3. Calcular o fatorial de um número informado via teclado.
4. 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 + N3) / 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”;
no final calcular e escrever a média geral da turma (Total_medias ) / (Total de
alunos);
5. 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.
- Sexo (M ou F) masculino ou feminino
- Idade;
- 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 igual a -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;
6. Desenvolver um algoritmo para somar os números inteiros positivos de 1 a 100 e
no final imprimir o resultado.
7. Desenvolver um algoritmo que leia o nome a idade e altura de 50 pessoas e
escreva:
a. Nome, idade, altura da pessoa mais baixa;
b. Nome, idade, altura da pessoa mais alta;
8. Desenvolver um algoritmo para ler 2 valores (se o segundo valor informado for
ZERO, deve ser lido um novo valor) e imprimir o resultado da divisão do primeiro
pelo segundo. Utilizar a estrutura REPEAT-UNTIL (Repita - Até).
3
7
9. Desenvolver um algoritmo que solicite ao usuário 5 números. Faça a soma destes 5
números e imprima na tela. Utilize a estrutura FOR...TO...DO (De...Até...Faça).
10. Escreva um programa que calcule e imprima a tabuada do 8 (1 a 10).
(com Arrays):
11. Preencher um vetor X de 10 elementos com o valor inteiro 30. Escrever o vetor X
após seu total preenchimento.
12. Preencher um vetor A de 10 elementos com os números inteiros de 1 a 10.
Escrever o vetor A após o seu total preenchimento.
13. Dado o seguinte vetor:
v [1]
v [2]
v [3]
v [4]
v [5]
v [6]
v [7]
5
1
4
2
7
8
3
v [8]
6
Qual será seu conteúdo depois de executado o seguinte algoritmo?
for i := 8 downto 5 do
begin
aux := v [i];
v [i] := v [8 - i + 1];
v [8 - i + 1] := aux;
end;
v [3] := v [1];
v [3] := v [2];
14. Ler um vetor C de 10 elementos inteiros, trocar todos os valores negativos do vetor
C por 0. Escrever o vetor C modificado.
15. Ler um vetor D de 10 elementos. Criar um vetor E, com todos os elementos de D na
ordem inversa, ou seja, o último elemento passará a ser o primeiro, o penúltimo
será o segundo e assim por diante. Escrever todo o vetor D e todo o vetor E.
16. 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.
3
8
17. Ler duas matrizes A e B, de (8,8) e criar três matrizes C,D e É que sejam :
 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,C,D e E;
18. Faça um algoritmo que leia uma matriz M(4,4) e escreva a soma dos valores da
diagonal principal;
19. Faça um algoritmo que leia uma matriz M(30,15) de inteiros e escreva a quantidade
de linhas pares existentes na matriz.
20. Faça um algoritmo que leia uma matriz M(5,5) de inteiros. A seguir
transforme-a em um vetor e escreva o resultado.
21. Faça um algoritmo que leia uma matriz m (5,5) e calcule as somas:
 dos elementos da linha 4 de M;
 dos elementos da coluna 2 de M;
 dos elementos da diagonal principal de M;
 de todos os elementos da matriz M;
 escreva todas as somas encontradas e a matriz;
22. Faça um algoritmo 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;
23. Faça um algoritmo que leia uma matriz M(20x15) de inteiros. Calcule e mostre:
 a soma dos elementos das linhas pares da matriz;
 a soma dos elementos das colunas impares da matriz;
 a quantidade de colunas pares;
 a quantidade de linhas impares;
 escreva os resultados obtidos.
24. Faça um algoritmo que calcule a média dos elementos da diagonal principal de uma
matriz M(10,10) de inteiros;
(com Módulos - Procedimentos e Funções):
25. Escreva um programa em Pascal que leia do teclado um valor inteiro e armazene
este valor em uma variável. Este valor deverá ser passado como parâmetro(por
valor) para um módulo denominado Quadrado. Este módulo imprime na tela o
quadrado do valor passado como parâmetro.
26. Escreva um programa em Pascal que leia do teclado um valor inteiro e armazene
este valor em uma variável. Este valor deverá ser passado como parâmetro(por
3
9
referência) para um módulo denominado Quadrado. Imprimir o valor passado como
parâmetro e seu quadrado.
4
0
Download

LÓGICA DE PROGRAMAÇÃO