UEM – Universidade Estadual de Maringá
DIN - Departamento de Informática
Disciplina: Fundamentos da Computação
Profª Thelma Elita Colanzi Lopes
[email protected]
Aula 4
Lógica de Programação
O objetivo principal da Lógica de Programação é demonstrar técnicas para resolução de problemas e conseqüentemente automatização de tarefas.
O aprendizado da Lógica é essencial para formação de um bom programador,
servindo como base para o aprendizado de todas as linguagens de programação, estruturadas ou não.
De um modo geral esses conhecimentos serão importantes, pois nos ajudarão
no cotidiano, desenvolvendo um raciocínio rápido.
Algoritmos
Um Algoritmo é uma seqüência de instruções ordenadas de forma lógica para a
resolução de uma determinada tarefa ou problema. Os algoritmos surgiram no século
IX, muito antes dos computadores, com o matemático Árabe de sobrenome Al-Khowarizmi, que desenvolveu um conjunto de regras para efetuar operações aritméticas com
números decimais. Pode-se ainda descrever algoritmos como uma descrição de um
procedimento padrão, passo a passo, de forma detalhada e sem ambigüidade devendo
ainda ter execução finita para quaisquer valores de dados.
Os algoritmos são aplicados em várias áreas, como a física e a matemática. Um
relatório de física, por exemplo, pode ser visto como um algoritmo, do ponto de vista
que a intenção de um relatório é permitir que alguém repita a experiência relatada e obtenha os mesmos resultados.
A programação de computadores é apenas um dos campos de aplicação dos algoritmos. Sendo assim, um algoritmo pode ser computacional — quando é representado por uma linguagem de programação e pode ser executado no computador (chamamos de programa); ou não computacional — quando somente uma seqüência de instruções é descrita de forma lógica mais não totalmente formal.
A formulação de um algoritmo geralmente consiste em um texto contendo comandos (instruções) que devem ser executados numa seqüência prescrita (receita). A
seguir apresenta-se um algoritmo não computacional para fritar batatas:
Início
Recolha as batatas na geladeira;
Coloque as batatas em uma bacia;
Descasque as batatas;
Lave as batatas;
Fatie as batatas;
Coloque o óleo na panela para esquentar;
Enxugue as batatas;
Jogue as batatas na panela com óleo, com cuidado;
Mexa as batatas até ficarem fritas;
Retire as batatas;
Escorra o óleo;
Coloque as batatas em um recipiente com toalha de papel;
Fim.
Abaixo é apresentado um Algoritmo não computacional cujo objetivo é usar um
telefone público.
Início
Tirar o fone do gancho;
Ouvir o sinal de linha;
Introduzir o cartão;
Teclar o número desejado;
Se der o sinal de chamar
5.1 Conversar;
Desvio
5.2 Desligar;
5.3 Retirar o cartão;
6. Senão
6.1 Repetir;
Fim.
Computacionalmente falando, um algoritmo não é uma solução para um problema, mas um caminho para obtê-la. Sendo assim, podem existir vários caminhos para
uma mesma solução, e conseqüentemente, vários algoritmos diferentes para o mesmo
problema. Como um exemplo, podemos destacar os vários métodos de multiplicação
existentes: método americano (resolução direita para a esquerda), método inglês (resolução da esquerda para a direita) e o método russo (dividir o multiplicando por 2 e multiplicar o multiplicador por 2 até que o multiplicando se torne 1 – somar os multiplicadores onde o multiplicando é impar). Outro exemplo seria a rotina que cada pessoa segue
para tomar banho, trocar um pneu ou executar uma receita de bolo.
Representação de Algoritmos
Os algoritmos podem ser representados de forma gráfica ou textual. Na forma
gráfica, utilizamos principalmente os fluxogramas convencionais. Na forma textual, podemos utilizar uma linguagem de programação, ou uma pseudolinguagem.
início
Algoritmo calc_media;
variáveis n1, n2, media: real;
início
leia(n1, n2);
media := (n1 + n2)/2;
se media >= 6
então escreva(“Aprovado”)
senão escreva(“Reprovado”);
fim.
N1, N2
Media <= (N1 + N2)/2
Media >= 6?
“Aprovado”
“Reprovado”
fim
2
Durante nosso curso iremos aprender inicialmente a desenvolver nossos algoritmos em uma pseudolinguagem 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 que influenciou muito a construção da linguagem Pascal.
Vamos conhecer então, a sintaxe da linguagem que utilizaremos:
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
Escrevendo Expressões
Para a construção de Algoritmos todas as expressões aritméticas devem ser linearizadas, ou seja, colocadas em linhas.
É importante também ressalvar o uso dos operadores correspondentes da aritmética tradicional para a computacional. Exemplo:
2

(
)
+
5
−
3
 3
 + 1 =
Tradicional
(2/3+(5-3))+1=
Computacional
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
2+2/2=3
Operadores Especiais (Mod e Div)
MOD  Retorna o resto da divisão inteira entre 2 números inteiros.
DIV  Retorna o valor inteiro que resulta da divisão entre 2 números inteiros.
3
Exemplo:
13 2
1
13 DIV 2 = 6
6
MOD
13 MOD 2 = 1
DIV
Prioridade entre os operadores aritméticos e os operadores Mod e Div
Na resolução de uma expressão computacional os operadores aritméticos são
resolvidos com as mesmas prioridades atribuídas a eles na matemática. Assim, sempre
resolvemos os operadores de divisão e multiplicação (inclusive os operadores mod e
div) antes de resolvermos os operadores de soma e subtração.
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. Exemplos:
Valor Inicial X
X=9
Processamento
Valor Final Y
x
Y=3
Funções Pré-Definidas
ABS( )
VALOR ABSOLUTO
SQRT( )
RAIZ QUADRADA
SQR( )
ELEVA AO QUADRADO
TRUNC( ) VALOR TRUNCADO
ROUND( ) VALOR ARREDONDADO
LOG( )
LOGARITMO
SIN( )
SENO
COS( )
COSENO
TAN( )
TANGENTE
As funções apresentadas anteriormente 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.
4
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
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
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. Exemplos:
2+5>4 E 3<>3  Falso
2+5>4 OU 3<>3  Verdadeiro
V
F
V
F
E
OU
F
V
NÃO(3<>3)  Verdadeiro
F
NÃO
V
5
Variáveis
Variáveis são endereços de memória destinados a armazenar informações temporariamente. As variáveis de um algoritmo representam os dados que devem ser armazenados na memória do computador para posterior processamento durante a execução do algoritmo. Para o armazenamento desses dados é preciso saber qual o seu
tipo e como eles poderão ser identificados para viabilizar a sua utilização e manipulação a qualquer momento.
Para que a programação se torne mais fácil podemos colocar nomes legíveis
(que nós podemos entender) nesses endereços de memória e utiliza-los no algoritmo.
Uma variável sempre está associada a 4 características:
 O nome da variável: necessário para diferencia-la das demais;
 O endereço da variável: necessário para localizar a variável na memória principal;
 O tipo de dado associado à variável: indica o tipo de informação que pode ser armazenada naquela área de memória e é necessário para que o compilador trate
cada variável de acordo com o seu tipo;
 O conteúdo da variável: é a informação efetivamente guardada na variável;
A declaração em pseudolinguagem das variáveis utilizadas em um algoritmo e seus
respectivos tipos é sempre precedida pela palavra “variáveis”, e é feita logo no início do
algoritmo. Exemplo:
Variáveis
Salário: real;
Idade: inteiro;
Nome: cadeia;
Sexo: caracter;
Variáveis de Entrada e Saída
Variáveis de entrada armazenam informações fornecidas por um meio externo
(normalmente usuários ou discos). No exemplo da média, as variáveis N1 e N2 são variáveis de entrada.
Variáveis de saída armazenam dados processados como resultados. No exemplo da média a variável media é 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
A declaração em pseudolinguagem das constantes utilizadas em um algoritmo
sempre precedida pela palavra “constantes”, e é feita logo no início do algoritmo, antes
da declaração das variáveis. Exemplo:
Constantes pi=3.1416;
Variáveis
Salário: real;
Idade: inteiro;
6
Identificadores
São os nomes dados a variáveis, constantes e algoritmos.
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_facil_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;
PRIMITIVO
Escalar  Definidos pelo programador.
Exemplos:
A : INTEIRO
SUB - FAIXA
TIPO NOTA = [1..10] DE INTEIRO
TIPO SEMANA = (Segunda-feira, Terça-feira, Quarta-feira, Quinta-feira, Sexta-feira,
Sábado, Domingo)
ESCALAR
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. (0..9, A..Z, a..z, !, @, #, $, %, ¨, &, *, (, ),
_, +, {, }, [, ]...) Os números quando declarados como caracteres tornam se representativos e perdem a atribuição de valor.
Cadeia: Admite uma seqüência de caracteres.
Lógico: Admite somente valores lógicos (verdadeiro/falso).
Comandos de Entrada e Saída
LEIA  Comando de entrada que permite a leitura de Variáveis de Entrada.
Exemplo: leia(n1, n2);
ESCREVA  Comando de saída que exibe uma informação na tela do monitor.
Exemplo: escreva(media);
7
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;
D := pi;
Corpo Geral de um Programa
PROGRAMA <<identificador>>;
CONST
<<identificador>> = <<dado>>;
VAR
<<identificador>> : <<tipo>>;
ÍNICIO
{
COMANDOS DE ENTRADA,PROCESSAMENTO E SAÍDA
<<comando1>>;
<<comandoN>>
}
FIM.
Estruturas Seqüenciais
Como pode ser analisado no tópico anterior, todo programa possui uma estrutura
seqüencial determinada por um ÍNICIO e FIM.
Ponto e vírgula ;
O sinal de ponto e vírgula “;” indica a existência de um próximo comando (passa para o
próximo).
Na estrutura ÍNICIO não se usa “;”.
Primeiro Algoritmo
Segue um Algoritmo que lê o nome e as 4 notas bimestrais de um aluno. Em seguida o
Algoritmo calcula e escreve a média obtida.
programa media_final;
var
nota1, nota2, nota3, nota4, media: inteiro;
nome : caractere [35];
inicio
leia (nome);
leia (nota1, nota2, nota3, nota4);
media := (nota1 + nota2 + nota3 + nota4) / 4;
escreva (nome, media);
fim.
8
Segundo Algoritmo
Segue um Algoritmo que lê o raio de uma circunferência e calcula sua área.
programa area_circunferencia;
const pi = 3.1416;
var raio, area : real;
inicio
leia (raio); {processamento}
area := pi * sqr(raio); {entrada}
escreva (‘area =’, area) {saída}
fim.
{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 “{}”.
Exemplo:
ler (raio); {entrada}
‘Aspas simples’
Quando queremos exibir uma mensagem para a tela ela deve estar contida entre aspas simples, caso contrário, o computador irá identificar a mensagem como Variável Indefinida.
Exemplo:
escrever (‘area obtida =’, area) {comando de saída}
area obtida = x.xx {resultado gerado na tela}
Texto baseado na apostila do professor Alysson Paradzinski
9
Download

APOSTILA DE LÓGICA DE PROGRAMAÇÃO