Escolar Documentos
Profissional Documentos
Cultura Documentos
LÓGICA DE
PROGRAMAÇÃO
Sumário
1 ALGORITMO......................................................................................................................................................................3
3 EXPRESSÕES.....................................................................................................................................................................5
4 VARIÁVEIS DE MEMÓRIA.............................................................................................................................................7
5 COMANDO DE ATRIBUIÇÃO........................................................................................................................................8
7 ESTRUTURAS DE UM ALGORITMO...........................................................................................................................9
7.1 ALGORITMOS SEQÜENCIAIS........................................................................................................................... 9
7.2 ALGORITMOS COM SELEÇÃO....................................................................................................................... 10
7.3 ALGORITMOS COM REPETIÇÃO................................................................................................................... 13
8 SUBALGORITMOS...........................................................................................................................................................16
" Algoritmo é um conjunto finito de regras, bem definidas, que nos levam à
solução de um problema em um tempo finito."
Um algoritmo está sempre associado a um dado objetivo, ou seja, com a solução de um dado problema.
A execução das instruções do algoritmo garante que o seu objetivo é atingido. A descrição das seqüências de
ações para atingir objetivos tem um papel fundamental na nossa vida quotidiana e está relacionada com a
nossa facilidade de comunicar. Estamos constantemente transmitindo ou seguindo seqüências de instruções
em todas tarefas que executamos, em um supermercado, banco, escola, etc. Essas regras muitas vezes
existem de forma organizada como em uma receita culinária, instruções de montagem de um objeto e uso de
uma máquina fotográfica sofisticada.
Um algoritmo não é mais do que uma descrição da seqüência de passos a seguir para atingir um
determinado objetivo. No entanto, nem todas as seqüências de passos para atingir um determinado objetivo
podem ser consideradas um algoritmo, pois para que se tenha um algoritmo, é preciso:
Algoritmos naturais são algoritmos usados no nosso dia-a-dia, descritos em linguagem natural, como por exemplo,
uma receita culinária, a troca de um pneu furado ou a troca de uma lâmpada.
Além dos que usamos no nosso dia-a-dia, os algoritmos são muito usados para a especificação de tarefas que
devem ser repetidas sempre da mesma maneira. Para automatizar uma tarefa, é fundamental descrever seus passos de
forma detalhada e clara, para que qualquer um que venha a executá-la, saiba exatamente o que fazer. Assim, se uma
indústria precisa que uma tarefa seja automatizada, deve descrevê-la através de um algoritmo. Este algoritmo poderá ser
lido por um operário ou transformado em programa para uma máquina.
Para programar computadores são necessários, também, algoritmos que, traduzidos para a linguagem de
programação do computador, farão com que este execute as tarefas desejadas.
Existem várias formas de se representar um algoritmo. Pode-se escrevê-lo através da linguagem natural que
usamos no dia-a-dia. Esta maneira, porém, pode levar a muitas ambigüidades, como na instrução "Afrouxar ligeiramente
as porcas". Uns poderão afrouxar mais e outros menos.
a) seqüência;
b) seleção;
c) repetição condicional;
d) repetição contada.
Mesmo assim, há algumas dicas que podem ajudar na organização do raciocínio no momento da
elaboração de um algoritmo:
A sintaxe de uma linguagem é o conjunto de regras que definem quais as relações válidas entre os
componentes da linguagem, porém não diz nada quanto ao significado de uma frase. Em uma linguagem
natural a sintaxe é conhecida como gramática. Em uma linguagem de programação também se utiliza uma
gramática formal na definição de símbolos válidos e conjuntos de regras, denominadas regras de produção,
que descrevem a estrutura dos vários componentes da linguagem.
A gramática mais conhecida e utilizada para descrever uma linguagem de programação é a BNF -
Backus-Naur Form - inventada por John Backus e Peter Naur, com sua primeira utilização significativa na
definição da sintaxe da linguagem Algol 60.
A semântica de uma linguagem define qual o significado de cada frase da linguagem. A semântica
nada diz quanto ao processo de geração das frases da linguagem.
Assim sendo, um programa pode apresentar dois tipos distintos de erros de natureza sintática e de
natureza semântica. Os erros sintáticos resultam do fato do programador não ter escrito as instruções do seu
programa corretamente de acordo com as regras da gramática da linguagem de programação utilizada. Os
erros semânticos (ou erros de lógica) resultam do fato do programador não ter expressado corretamente a
seqüência de ações a ser executada.
a) CONSTANTES - informações que não sofrem alterações com o decorrer do tempo. As informações
constantes do tipo CARACTER devem ser representadas entre aspas. Ex: ‘Angela’, 5, Falso, ‘#OI!’,
etc.
b) VARIÁVEIS - informações que têm a possibilidade de serem alteradas em algum instante no decorrer
do tempo. Ex: temperatura, índice da inflação, alíquotas do imposto, comprimento, altura, peso, etc.
a) INTEIRO - toda informação numérica que pertença ao conjunto dos números inteiros relativos
(negativos, nulo, positivos);
b) REAL - toda a informação numérica que pertença ao conjunto dos números reais (negativos,
positivos, nulo);
c) CARACTER - toda a informação composta por um caracter alfanumérico (0..9 / A..Z / a..z) e/ou um
caractere especial (#, /, $, %, *, ?, ~, >, !, @, ...). OBS.: o espaço é considerado caracter especial;
d) LÓGICO: toda a informação que pode apenas assumir duas situações (biestável, ou seja, dois
estados). Ex: verdadeiro ou falso, aberto ou fechado.
e) CADEIA: toda a informação composta por uma seqüência de caracteres alfanuméricos e/ou
especiais.
Além dos tipos mencionados acima, existe um outro tipo de dado chamado ponteiro, que ao invés de
representar um tipo de informação, representará um endereço de memória que armazenará uma variável de
um tipo básico.
3 EXPRESSÕES
Expressões aritméticas são aquelas cujos operadores são aritméticos e cujos operandos são constantes
e/ou variáveis do tipo numérico (inteiro ou real).
soma + subtração -
divisão / multiplicação *
EXEMPLOS: quociente da divisão inteira div resto da divisão inteira mod 10 div 3 = 3
10 mod 3 = 1
3 div 5 = 0
25 div 5 = 5 25 mod 5 = 0 3 mod 5 = 3
Os operadores de mesma precedência na tabela são resolvidos da esquerda para a direita, na ordem
que aparecerem na expressão.
3.2.1 Definição:
São aquelas cujos operadores são lógicos e/ou relacionais e cujos operandos são relações e/ou
constantes e/ou variáveis de tipo lógico. O resultado de uma expressão lógica sempre é uma constante lógica
(F - falso ou V - verdadeiro).
e ou não
TABELAS VERDADE
EXEMPLOS:
a) 2 < 5 e 15 / 3 = 5
b) 2 < 5 ou 15 / 3 = 5
c) F ou 20 div 18 / 3 <> 18 /3 div 20
d) Não V e 32 / 3 < 15 - 35 mod 7
Note-se porém que em algumas linguagens de programação os operadores And e Or podem servir tanto como
operadores aritméticos quanto operadores lógicos.
4 VARIÁVEIS DE MEMÓRIA
endereço nome
tipo
conteúdo
OBSERVAÇÕES:
Variáveis
<nome da variável> : <tipo primitivo de dado>
ou
<lista de variáveis> : <tipo primitivo de dados>
EXEMPLO:
Variáveis
idade : inteiro
salário, inflação : real
opção: caracter
alpha : lógico
nome, endereço : cadeia
Quando necessita-se colocar um valor em uma variável tem-se duas formas: atribuindo-se diretamente um
valor a ela ou através de um comando de entrada de dados. No caso de atribuição direta utiliza-se a seguinte
sintaxe:
<variável> <expressão>
EXEMPLO:
A B
B5
A 15
A 32
A A+4
B A-B
Como visto anteriormente a outra forma de colocar-se um valor em uma variável é através de um
comando de entrada de dados. Neste caso utiliza-se a seguinte sintaxe:
EXEMPLOS:
1) Mostre o desenvolvimento (teste de mesa) do valor das variáveis dos algoritmos abaixo e, também, mostre
o que será escrito a cada comando ESCREVER. (Usar duas casas decimais).
a)Variáveis
A,B,C : inteiro
K,R : real
Início
A 15
B A 10
R B/ A
C B
K (10 6)
A A 3*B
Fim
b)
ULBRA - Informática - Lógica de Programação 8
Variáveis
X,Y : inteiro (X=3 Y=10)
Z : real
Inicio
ler(X)
escrever(‘X ao cubo = ‘,X3)
ler(Y)
escrever(X+Y)
Z Y/X
escrever(Z)
Y Z - 0,33
escrever(Y)
Y Y+1
X (Y+X) mod 2
escrever(X)
Fim
7 ESTRUTURAS DE UM ALGORITMO
Através da combinação dos elementos básicos de controle do fluxo de execução (seqüência, seleção e
repetição), pode-se criar algoritmos para a solução de problemas.
O esqueleto de um algoritmo segue a seguinte estrutura:
Uma das estruturas de algoritmo é a seqüencial, que consiste de comandos de atribuição e entrada e
saída encadeados em uma seqüência linear de cima para baixo e da esquerda para a direita, isto é, na mesma
ordem em que foram escritas.
EXEMPLOS:
Algoritmo Notas
Variáveis
N1,N2,N3,MA : real
Início
ler (N1,N2,N3)
MA (N1+N2+N3)/3
escrever(‘A média aritmética do aluno é:’, MA)
Fim
Algoritmo Equação
Variáveis
A,B,C,X1,X2 : real
Início
ler(A, B, C)
X1 - B + B2 4 * A * C / 2 * A
X2 - B - B2 4 * A * C / 2 * A
escrever(`As raizes sao:`, X1, X2)
Fim
se <condição> se <condição>
(V) então <comando único> (V) então <bloco de comandos>
(F) próximo comando (F) próximo comando
condição V
Bloco de Comandos:
F comando Início
<comando 1>
<comando 2>
:
próx. com. <comando n>
Fim
EXEMPLOS:
a) A5
se A = B
então X A2
B A + 1 (próximo comando)
b) ler (X)
se X Y e K < P
então Início
ler (A) BLOCO
X A * 10 DE
escrever (X) COMANDOS
Fim
K Y * A
Uma estrutura de seleção composta verificará uma condição e executará um determinado grupo de
ações, no caso da expressão lógica ser satisfeita, ou executará outro grupo de ações, no caso da expressão
lógica não ser satisfeita.
se <condição>
então <comando ou bloco de comandos>
senão <comando ou bloco de comandos>
condição
V
F comando
comando
Próximos
comandos
EXEMPLOS:
a) se M 8
então escrever (‘APROVADO’)
se M 8
então escrever (‘APROVADO’)
senão escrever (‘REPROVADO’)
se M < 8
então escrever (‘REPROVADO’)
b) P K
se P > 10 e P < 25
então X P * 3
senão K X * 4
L P - K + X
Uma estrutura de seleção encadeada reunirá uma condição sendo verificada quando da satisfação de
uma condição anterior, e executará um grupo de ações determinadas, no caso da última expressão lógica ser
satisfeita.
se <condição 1>
então se <condição 2>
então <comando> (condição 1 = V e condição 2 = V)
senão <comando> (condição 1 = V e condição 2 = F)
senão se <condição 3>
então <comando> (condição 1 = F e condição 3 = V)
senão <comando> (condição 1 = F e condição 3 = F)
O comando CASO é uma variação do comando SE, ENTÃO e SENÃO. Aqui, para uma determinada
expressão, são avaliadas uma ou mais condições e executados os comandos correspondentes à primeira
condição satisfeita. Após a execução dos comandos da condição, o comando é encerrado, sendo então
executada a próxima instrução do algoritmo, como mostrada abaixo:
OBSERVAÇÕES:
Os tipos existentes nas condições devem ser do mesmo tipo da expressão;
Se houver mais de uma condição satisfeita, somente os comandos da primeira que for encontrada serão
executados; e
A opção SENÃO é facultativa. Os comandos ali existentes somente serão executados se nenhuma das
condições acima for satisfeita. Se não houver a opção SENÃO e nenhuma condição for satisfeita, o
comando CASO será encerrado e será executado o comando seguinte do algoritmo.
EXEMPLOS:
enquanto <condição>
faça <comando ou bloco de comandos>
comando
enquanto
V
condição
comandos
F
comando
repetir
<comandos>
até <condição>
comando
comandos
repetir
F
condição
comando
EXEMPLOS:
enquanto repetir
1) : :
X 10 X 10
Y 5 Y 5
enquanto X > Y faça repetir
Y Y + 1 Y Y + 1
escrever (X,Y) até Y = X
: escrever (X,Y)
: :
enquanto repetir
2) : :
N 0 S 0
ler (A) A 0
S 0 repetir
enquanto A > 0 faça S S + A
início ler (A)
S S + A até A 0
N N + 1 :
ler (A)
fim
:
No início da execução o valor inicial (vi) é atribuído à variável de controle (VAR). A seguir, o valor de
VAR é comparado ao valor final (vf). Se VAR for maior que vf, então o comando para é encerrado. Por outro
lado, se VAR for menor ou igual a vf, então os comandos do laço são executados. Da segunda execução em
diante, a variável de controle é incrementada de um (1) e novamente comparada a vf.
OBSERVAÇÕES:
1. VAR é necessariamente uma variável inteira, uma vez que seu valor é alterado a cada iteração (laço).
2. vi e vf podem ser constantes ou variáveis, desde que do mesmo tipo de VAR (inteiro).
3. As variáveis vi e vf, bem como a variável de controle VAR, não podem ser modificadas dentro do laço.
4. vi é sempre menor ou igual a vf.
5. O incremento da variável de controle sempre será 1.
EXEMPLOS:
1)
ENQUANTO PARA
C1 S 0
enquanto C 10 faça para C 1 até 10 faça
início início
S S + C S S + C
C C + 1 fim
Fim
3) Faça três algoritmos, usando as três estruturas de repetição, que leia diversos valores inteiros fornecidos
pelo usuário e calcule o produtório. Encerre quando o valor digitado for igual a zero.
É impossível !
8 SUBALGORITMOS
Muitos problemas de solução mais ou menos complexa podem ser divididos, sucessivamente em problemas
menores e de lógica mais fácil. Em vez de escrever-se um algoritmo grande, escreve-se vários algoritmos
menores, os quais resolvem o problema proposto em conjunto.
Aos trechos de algoritmo que efetuam um ou mais cálculos determinados denomina-se de subalgoritmo e os
valores fornecidos aos subalgoritmos são denominados de argumentos.
O uso de variáveis como argumentos permite escrever uma solução geral para um determinado conjunto de
problemas.
Registro é uma das principais estruturas de dados. Com ele pode-se agrupar em uma mesma estrutura
de dados, informações de diferentes tipos. Por exemplo, podemos ter a ficha de inscrição em um curso
modelada através de um registro:
Nome: ..................................................
Endereço: ..................................................
Telefone: ..................................................
Sexo: ..................................................
Idade: ..................................................
Código do curso: ..................................................
Cada uma das informações de um registro é chamada de campo. Assim, um registro é formado por
diversos campos de tipos diferentes.
9.1 Declaração
Tipo
Variáveis
Para declarar um registro, é necessário antes declarar um tipo de dado registro. Assim, depois da
palavra reservada tipo, segue o nome do novo tipo de dado, seguido da descrição do registro. Cada um dos
campos do registro pode ser de um tipo primitivo, ou pode ser de um tipo definido pelo usuário anteriormente
(dentro da mesma declaração de tipos).
Depois de declarado o tipo registro, é necessário declarar uma variável desse tipo. Para isso, usa-se a
área de declaração de variáveis, como é mostrado acima.
Exemplo:
tipo
regficha = registro
nome : caracter
endereço : caracter
telefone: inteiro
sexo : caracter
idade, codcurso : inteiro
fim
variáveis
ficha : regficha
No exemplo acima, é declarado um tipo registro chamado regficha, contendo os campos nome,
endereço, telefone, sexo, idade e codcurso. A seguir, é declarada a variável ficha, do tipo regficha.
Para acessar individualmente daca um dos campos de um registro, é necessário indicar o nome da
variável e do campo, separados por um ponto. Como exemplo, pode-se referenciar os campos nome,
endereço e idade da variável ficha da seguinte forma:
ler (ficha.nome)
escrever (ficha.endereço)
ler (ficha.idade)
Não é possível a referência apenas do nome da variável, indicando o conjunto dos campos (exemplo:
ler(ficha)).
A
A 1 2 3 4
5
conteúdo conteúdo conteúdo conteúdo conteúdo conteúdo
10.1 VETORES
São um conjunto de variáveis de memória, sob o mesmo nome e tipo, identificados por um índice.
10.1.1 Declaração:
Variáveis
onde:
li - limite inferior do índice do vetor.
lf - limite superior do índice do vetor.
<nome> - nome ou uma lista de nomes de variáveis.
<tipo> - tipo de variável.
Exemplo:
Variáveis
A,B : vetor [1..10] de inteiros
C : vetor [11..20] de real
1 2 3 4 5 6 7 8 9 10
A
B
11 12 13 14 15 16 17 18 19 20
C
OBSERVAÇÕES:
ULBRA - Informática - Lógica de Programação 18
1. li é sempre menor que lf.
2. li pode ser diferente de 1.
3. O limite do vetor geralmente é dependente da memória.
4. li e lf não podem receber variáveis.
5. Nº de elementos dentro do intervalo -> lf - li + 1
10.1.2 Manipulação:
A referência a um elemento do vetor deve sempre ser feita através do nome acompanhado do índice.
Exemplo:
Variáveis
A : vetor [1..5] de inteiro
Início Início
ler (A[1], A[2], A[3], A[4], A[5]) para i 1 até 5 faça
escrever (A[1], A[2],A[3], A[4], A[5]) início
Fim ler (A[i])
escrever (A[i])
fim
Fim
10.2 MATRIZES
10.2.1 Declaração:
Variáveis
<nome> : matriz [li..lf, li..lf] de <tipo>
Exemplo:
Variáveis
COMPRAS : matriz [0..15, 10..30] de real
C : matriz [1..10, 1..7] de inteiro
Definição:
Diagonal
1,1 Diagonal 1,4
Secundária
2,2 Principal 2,3
3,3 3,2 C = nC - L + 1
L= C
4,4 4,1
nC -> nº de colunas da matriz