Upload
lambao
View
262
Download
0
Embed Size (px)
Citation preview
Linguagem Algorítmica
João Medeiros FATERN 2010.2
Objetivos
• Apresentar os conceitos básicos sobre algoritmos e lógica de programação.
• Apresentar formas distintas para representação do raciocínio da lógica algorítmica.
Linguagem Algorítmica• Pseudolinguagem (também chamada de pseudocódigo) de
programação para representar algoritmos
• Não tem padronização entre as diversas linguagens
• Partes opcionais e obrigatórias
• Palavras reservadas
8
Introdução à Programação
Unidade 2 – Linguagem Algorítmica
pseudolinguagem (também chamada de pseudocódigo) de programação para representar algoritmos. Esta pseudolinguagem, apesar de fazer uso de um português estruturado (o português que conhecemos, porém com regras para formação do algoritmo), se assemelha muito ao modo como os programas são escritos. Por isso, essa representação permite que os algoritmos nela representados possam ser traduzidos, quase que diretamente, para uma linguagem de programação (bom, não?).
A linguagem algorítmica não tem uma padronização. Você vai ver que em cada livro que você consultar, você poderá encontrar
os formatos têm os mesmos tipos de estruturas, apenas escritas de forma um pouco diferente (por exemplo, em um tipo você pode
Para o nosso estudo, vamos adotar a linguagem algorítmica que é
essa ferramenta para a compilação dos nossos algoritmos. E qual o
linguagem algorítmica está representado no Quadro 4.
Algoritmo “<nome_do_algoritmo>”
[<declaração_de_constantes>]
[var <declaração_de_variáveis>]
inicio
Quadro 4 - Formato geral de um algoritmo em linguagem algoritmica
Neste quadro, os trechos que estão entre os sinais < > são obrigatórios e os que estão entre colchetes [ ] são opcionais. Agora,
Por onde começar?
• Primeiro: antes de começar, tente entender o que o problema está pedindo.
• Segundo: leia novamente o problema para identificar as três fases de resolução do problema (quais são elas?)
Identificadores
• Nomes únicos definidos pelos programadores para identificar/distinguir os elementos de um algoritmo, tais como: o nome do algoritmo, as constantes e as variáveis.
• Algumas regras
• O nome do identificador deve sempre começar por uma letra (caractere alfabético). Ou seja, o primeiro caractere do nome deve ser uma letra.
• Depois, os outros caracteres depois do primeiro podem ser letras ou números.
• Não é permitido o uso de espaço em branco ou de caracteres especiais, tais como: @, #, &, *, -, +, ?, $, etc. O único caractere especial permitido é o _ (subescrito). Por exemplo, nome_completo.
• Maiúsculas e minúsculas são consideradas letras iguais, logo a palavra Nome é igual a palavra nome.
• O nome dos identificadores não deve ter acentuação, nem fazer uso do cedilha (ç).
• O nome do identificador não pode ser igual a nenhuma palavra reservada da linguagem algorítmica.
• O nome deve ser significativo. Ou seja, deve expressar o valor que ele pretende representar. Por exemplo, um identificador chamado X, não diz nada. Você não terá a menor idéia do que valor está guardado nele. Porém um identificador chamado nota1, você sabe que, provavelmente, o valor guardado nesse identificador é o da primeira nota.
• Você não pode ter dois identificadores de mesmo nome dentro do algoritmo.
Constantes, Variáveis e Tipos de Dados - Constantes
• Têm valor fixo.
• <nome da constante> = <valor>
• exemplos:
• PI <- 3.1416
• MAX <- 10
• PAIS <- “Brasil”
Constantes, Variáveis e Tipos de Dados - Variáveis
• Armazena valores de dados.
• Corresponde a uma posição de memória
• Tipos de dados: Numéricos, literais e lógicos
17
Introdução à Programação
diferentes valores no decorrer do algoritmo, ela só pode armazenar um valor a cada instante. Antes de mostrar a declaração de variáveis,
TIPOS DE DADOS
na memória. As variáveis podem ser basicamente de três tipos: Numéricas, literais ou lógicas (vide Figura 15).
Figura 15 - Tipos de Variáveis
(positivos ou negativos), que posteriormente poderão ser utilizados
Inteiro ou Real. O tipo inteiro serve para armazenamento de números
exemplo, 234, 1, -89 e 27 e o tipo real serve para o armazenamento de números que possuam casas decimais. Por exemplo, 2.14, -9.0, 1200.09 e 0.23.
O Tipo Literal ou Caracterede uma ou mais letras, números ou símbolos especiais. Porém, os
matemáticas. Geralmente, os dados literais são representados nos algoritmos pela coleção de caracteres, delimitada em seu início
representa um dado do tipo literal, diferindo de 2 que é um dado do tipo inteiro. Com o segundo você poderá fazer cálculos matemáticos. Mas com o caractere não. Como saber a diferença? O dado do tipo
O tipo lógico armazena somente dados lógicos que só possuem dois valores possíveis: Verdadeiro ou Falso. Esse tipo é usado em
Declaração Variáveis
• var <nomeVar1, ..., nomeVarN>: <tipo_dado_da(s)_variavel(eis)>
Exemplos:
18
Introdução à Programação
simplesmente V) ou falso (ou simplesmente F)
DECLARAÇÃO DE VARIÁVEIS
As fases de Entrada, Processamento e Saída podem manipular
fazer a declaração das mesmas. Em linguagem algorítmica as variáveis
pela palavra var), antes do início do algoritmo propriamente dito. A declaração dever ter o seguinte formato:
var
E o que o computador faz a partir dessa declaração? Bem, imagine que a Figura 16 é a memória do computador. Cada pedaço da memória tem um endereço, para poder ser acessada. Esse
tentar lhe explicar como as coisas funcionam. Por exemplo @#1, @#2
verdade são bem mais complexos que apenas isso, são complicados de serem expressos. Algo como @#$1208DFE ou pior.
Figura 16 - Exemplo de Memória do Computador
Declaração Variáveis• Quando declaramos uma variável, estamos reservando na memória uma área para
aquela variável e identificando essa área pelo nome da variável.
• O tamanho da área vai depender do tipo da variável (se é caractere, se é inteiro, se é real ou lógico).
• A seleção da área de memória é aleatória e a área reservada deve caber a variável a ser armazenada.
19
Introdução à Programação
Quando declaramos variáveis, estamos reservando na memória
essa área pelo nome da variável. O tamanho da área vai depender do tipo da variável (se é caractere, se é inteiro, se é real ou lógico). Por
Figura 17
uma área de memória qualquer (aleatoriamente), onde coubesse algo do tipo caractere, marcaria como ocupada e chamaria essa área de nome (vide Figura 17).
aleatoriamente, ou seja, não é nada seqüencial), que coubesse um número inteiro, marcaria a área como ocupada e a chamaria de idade. Da mesma forma, seri reservada uma área para um valor lógico, marcada como ocupada e essa área seria chamada de ativo, que poderia servir, por exemplo, para indicar se a pessoa está ativa ou aposentada, em termos de trabalho (vide Figura 18).
Figura 18 - Memória do Computador após a declaração de todas as variáveis.
Agora, se quiséssemos colocar um valor dentro de cada variável,
automaticamente, levaria para o endereço de memória correto. Por exemplo:
Atribuição de Valores as Variáveis
• Ao atribuirmos um valor, o compilador leva o valor para a posição correspondente na memória.
20
Introdução à Programação
na Figura 19.
Se não tivéssemos a noção de variável, nós teríamos de conhecer cada endereço de memória do computador, para poder implementar
nossa atribuição de valores passaria a algo do tipo:
E com o detalhe que os endereços poderiam mudar de computador para computador, dependendo da marca e da capacidade de armazenamento da memória, do sistema operacional instalado, entre outras coisas. Por isso, usar variáveis é uma forma de facilitar o acesso para armazenamento e recuperação de valores na memória do computador. Pois agora, nós podemos atribuir valores aos nomes das variáveis e a linguagem se encarrega de gerenciar a memória para nós. Lembre, para fazer qualquer algoritmo que precise processar qualquer coisa que seja, você vai precisar declarar variáveis, porque são elas que armazenam os valores para você.
Operadores e Expressões
Agora que as variáveis já estão declaradas, para fazer a parte do PROCESSAMENTO da maior parte dos algoritmos, vamos precisar
20
Introdução à Programação
na Figura 19.
Se não tivéssemos a noção de variável, nós teríamos de conhecer cada endereço de memória do computador, para poder implementar
nossa atribuição de valores passaria a algo do tipo:
E com o detalhe que os endereços poderiam mudar de computador para computador, dependendo da marca e da capacidade de armazenamento da memória, do sistema operacional instalado, entre outras coisas. Por isso, usar variáveis é uma forma de facilitar o acesso para armazenamento e recuperação de valores na memória do computador. Pois agora, nós podemos atribuir valores aos nomes das variáveis e a linguagem se encarrega de gerenciar a memória para nós. Lembre, para fazer qualquer algoritmo que precise processar qualquer coisa que seja, você vai precisar declarar variáveis, porque são elas que armazenam os valores para você.
Operadores e Expressões
Agora que as variáveis já estão declaradas, para fazer a parte do PROCESSAMENTO da maior parte dos algoritmos, vamos precisar
20
Introdução à Programação
na Figura 19.
Se não tivéssemos a noção de variável, nós teríamos de conhecer cada endereço de memória do computador, para poder implementar
nossa atribuição de valores passaria a algo do tipo:
E com o detalhe que os endereços poderiam mudar de computador para computador, dependendo da marca e da capacidade de armazenamento da memória, do sistema operacional instalado, entre outras coisas. Por isso, usar variáveis é uma forma de facilitar o acesso para armazenamento e recuperação de valores na memória do computador. Pois agora, nós podemos atribuir valores aos nomes das variáveis e a linguagem se encarrega de gerenciar a memória para nós. Lembre, para fazer qualquer algoritmo que precise processar qualquer coisa que seja, você vai precisar declarar variáveis, porque são elas que armazenam os valores para você.
Operadores e Expressões
Agora que as variáveis já estão declaradas, para fazer a parte do PROCESSAMENTO da maior parte dos algoritmos, vamos precisar
Sem utilizar variáveis
Operações e Expressões
• Os operadores são os meios usados para incrementar, decrementar, comparar e avaliar dados dentro do computador
• operador de atribuição
• operadores aritméticos,
• operadores relacionais e
• operadores lógicos.
• Expressão faz uso dos operadores e de operandos para construir fórmulas que serão usadas na parte do processamento do algoritmo
• Operandos são as variáveis ou valores usados na expressão
Operador de Atribuição
• Serve para atribuir um valor a uma variável ou para copiar o conteúdo de uma variável para outra do mesmo tipo
• Representado por: <-
• Exemplos
• Nome “Sandra” (aqui temos que a variável Nome recebe o valor Sandra)
• Idade 18 (a variável Idade recebe o valor 18)
• Casado <-F (a variável Casado recebe o valor F (falso))
• Salário <- 500.55 (a variável Salario recebe o valor 500.55)
• Soma <- 45 + 10 (a variável recebe o valor da soma de 45 com 10, ou seja, 55)
• Nome2 <- Nome (a variável Nome2 recebe o mesmo valor que Nome, ou seja, aqui você está copiando para Nome2 o que estava armazenado em Nome, ou seja, o valor “Sandra”).
Operadores Aritméticos
23
Introdução à Programação
dos operadores. Pela tabela 1, a multiplicação tem prioridade sobre a soma. Dessa forma, teríamos 4 + 15 = 19.
Tabela 1 - Operadores Aritméticos e suas Prioridades
É fazer uso dos operadores aritméticos para criar uma fórmula de
expressão? Avalie as prioridades... daria 12. Como? Primeiro deveria
divisão (consulte a tabela 1), daí teríamos 10 + 2 = 12.
Voltando para a Tabela 1, a maior parte dos operadores você já conhece. Porém, gostaria de destacar três deles que você pode não conhecer. A barra invertida (\) equivale a divisão inteira de um número. E o que é isso? Quer dizer você realizar a divisão de um número por outro e não considerar (desprezar) a parte decimal obtida. É o caso do exemplo dado na Tabela 1: 6\4 é igual a 1, porque a divisão normal de 6 por 4 daria 1.5. Porém, na divisão inteira, a parte .5 (parte decimal) seria ignorada, dando como resultado apenas o valor inteiro 1. Outro operador é a pontenciação (^). Só relembrando, se temos X ^ Y, quer dizer que X será multiplicado por ele mesmo Y vezes. Ex: 2 ^ 3 = 2 x 2 x 2 = 8. Por último o operador MOD, que também pode ser representado por %. Ele representa o resto da divisão inteira. E o que é isso? Bem, vamos explicar. Quando você faz uma conta de divisão,
justamente o valor do resto e não o do quociente, como é o caso da
zero. Porque o resto da divisão de um número par por dois, sempre é ZERO (ou seja, a divisão é exata, não possui resto).
Operador Mod (Resto da Divisão inteira)
24
Introdução à Programação
Figura 21 - Elementos da Divisão
Para ver se você entendeu, quanto seria 7 MOD 3? Seria um. Veja na Figura 22.
Figura 22 - Demonstração do cálculo de 7 MOD 3
E quanto seria 4 MOD 6? Mais difícil? Realmente, aqui temos uma exceção (vide Figura 23). Toda vez que se vai calcular o MOD, onde o valor do divisor é maior que o número a ser dividido (dividendo), o resto
nos interessa esperar pelos outros valores da parte decimal, uma vez
Figura 23 - Demonstração do cálculo de 4 MOD 6
Operadores relacionais
Operadores relacionais são sinais utilizados para realizar
Estes operadores sempre retornam valores lógicos (verdadeiro ou falso). Todos os operadores relacionais têm a mesma prioridade, logo, para estabelecer prioridades no que diz respeito a qual operação
tipo. Por exemplo, você não pode comparar um inteiro e um caractere. Mas pode comparar dois números inteiros. Os operadores relacionais podem ser vistos na Tabela 2. Na tabela é dado um exemplo de uso de cada operador e que valor ele retornaria com a comparação (ou 24
Introdução à Programação
Figura 21 - Elementos da Divisão
Para ver se você entendeu, quanto seria 7 MOD 3? Seria um. Veja na Figura 22.
Figura 22 - Demonstração do cálculo de 7 MOD 3
E quanto seria 4 MOD 6? Mais difícil? Realmente, aqui temos uma exceção (vide Figura 23). Toda vez que se vai calcular o MOD, onde o valor do divisor é maior que o número a ser dividido (dividendo), o resto
nos interessa esperar pelos outros valores da parte decimal, uma vez
Figura 23 - Demonstração do cálculo de 4 MOD 6
Operadores relacionais
Operadores relacionais são sinais utilizados para realizar
Estes operadores sempre retornam valores lógicos (verdadeiro ou falso). Todos os operadores relacionais têm a mesma prioridade, logo, para estabelecer prioridades no que diz respeito a qual operação
tipo. Por exemplo, você não pode comparar um inteiro e um caractere. Mas pode comparar dois números inteiros. Os operadores relacionais podem ser vistos na Tabela 2. Na tabela é dado um exemplo de uso de cada operador e que valor ele retornaria com a comparação (ou
quanto seria 7 MOD 3?
E quanto seria 4 MOD 6?
24
Introdução à Programação
Figura 21 - Elementos da Divisão
Para ver se você entendeu, quanto seria 7 MOD 3? Seria um. Veja na Figura 22.
Figura 22 - Demonstração do cálculo de 7 MOD 3
E quanto seria 4 MOD 6? Mais difícil? Realmente, aqui temos uma exceção (vide Figura 23). Toda vez que se vai calcular o MOD, onde o valor do divisor é maior que o número a ser dividido (dividendo), o resto
nos interessa esperar pelos outros valores da parte decimal, uma vez
Figura 23 - Demonstração do cálculo de 4 MOD 6
Operadores relacionais
Operadores relacionais são sinais utilizados para realizar
Estes operadores sempre retornam valores lógicos (verdadeiro ou falso). Todos os operadores relacionais têm a mesma prioridade, logo, para estabelecer prioridades no que diz respeito a qual operação
tipo. Por exemplo, você não pode comparar um inteiro e um caractere. Mas pode comparar dois números inteiros. Os operadores relacionais podem ser vistos na Tabela 2. Na tabela é dado um exemplo de uso de cada operador e que valor ele retornaria com a comparação (ou
Operadores Relacionais e Lógicos
25
Introdução à Programação
Tabela 2 - Operadores Relacionais
Para ilustrar melhor, vamos também dar exemplos das outras
porque x = 2)
Verdadeiro)
Verdadeiro)
valor Falso)
lógicas, que serão explicadas na subseção a seguir.
Operadores lógicos e expressões lógicas
Os operadores lógicos são também conhecidos como operadores booleanos, porque derivam da álgebra de lógica matemática desenvolvida por George Boole. A principal função destes operadores
execução do algoritmo. Em outras palavras, esses operadores servem
operadores lógicos podem ser vistos na Tabela 3 e serão explicados a seguir.
26
Introdução à Programação
Tabela 3 - Operadores Lógicos
NÃO (negação)Ele é um operador unário (opera sobre apenas uma variável) e serve para inverter o valor da expressão ou condição. Por exemplo, se a expressão for verdadeira, ele inverte para falsa e vice-versa.
Exemplo: Não (4 < 3) é avaliada como Verdadeira, porque a expressão (4 < 3) é falsa e Não falto é igual a verdadeiro.
E (conjunção) - é o próximo operador na ordem de precedência. Ele retorna Verdadeiro como resultado se (e somente se) ambos os operandos forem avaliados como Verdadeiros. Se qualquer um dos operandos for avaliado como Falso, ele retorna Falso. Esse operador corresponde ao E usado em português, como na frase
possíveis na Tabela 4.
Exemplo: a expressão (3<4) E ((8+2) = 11) resultaria em Falso. Porque a primeira expressão é verdadeira, mas a segunda é falsa. E, pela Tabela 4, você pode ver que verdadeiro E Falso = Falso.
OR (disjunção) - o operador OU retorna o resultado Verdadeiro se qualquer um dos dois operandos for avaliado como Verdadeiro.
OU em
Operadores Relacionais
Operadores Lógicos
Instruções de Entrada e Saída
• A instrução de entrada de dados permite que informações que os usuários fornecem através dos dispositivos de entrada sejam transferidas para a memória do computador e armazenadas em variáveis
• Ex: Leia (nomeVariavel)
• A instrução de saída de dados é o meio pelo qual o resultado da fase de PROCESSAMENTO do algoritmo será exibido pelos dispositivos de saída de um computador
• Exemplos:
• Escreva (nome, endereco, cidade)
• Escreva (“texto a ser mostrado ao usuário”)
• Escreva (“textoA”, nomeVar, “textoB”, nomeVar1, ..., nomeVarN),
Exemplo
• Suponha que você quer construir um algoritmo para ler o preço unitário e a quantidade de um produto e quer imprimir o preço final a ser pago pelo cliente. Como ficaria?
30
Introdução à Programação
Algoritmo
var real
inteiro
inicio
Leia
Escreva
Importante
Há duas regras básicas para melhorar nossos algoritmos:
1) Antes de toda operação de leitura deve ser impressa uma mensagem informando ao usuário que dados ele deve fornecer para o programa.
2) Todo resultado enviado ao usuário, deve ser precedido de uma mensagem explicativa sobre que valor está sendo mostrado.
Assim sendo, vamos aplicar essas regras no algoritmo que apresentamos anteriormente.
Algoritmo
var real
inteiro
inicio
Escreva
Leia
Escreva
melhor apresentadas ao usuário.
Sintaxe e Semântica
Regras Básicas para Melhorar nossos algoritmos
30
Introdução à Programação
Algoritmo
var real
inteiro
inicio
Leia
Escreva
Importante
Há duas regras básicas para melhorar nossos algoritmos:
1) Antes de toda operação de leitura deve ser impressa uma mensagem informando ao usuário que dados ele deve fornecer para o programa.
2) Todo resultado enviado ao usuário, deve ser precedido de uma mensagem explicativa sobre que valor está sendo mostrado.
Assim sendo, vamos aplicar essas regras no algoritmo que apresentamos anteriormente.
Algoritmo
var real
inteiro
inicio
Escreva
Leia
Escreva
melhor apresentadas ao usuário.
Sintaxe e Semântica
30
Introdução à Programação
Algoritmo
var real
inteiro
inicio
Leia
Escreva
Importante
Há duas regras básicas para melhorar nossos algoritmos:
1) Antes de toda operação de leitura deve ser impressa uma mensagem informando ao usuário que dados ele deve fornecer para o programa.
2) Todo resultado enviado ao usuário, deve ser precedido de uma mensagem explicativa sobre que valor está sendo mostrado.
Assim sendo, vamos aplicar essas regras no algoritmo que apresentamos anteriormente.
Algoritmo
var real
inteiro
inicio
Escreva
Leia
Escreva
melhor apresentadas ao usuário.
Sintaxe e Semântica
Sintaxe e Semântica• A sintaxe dita as regras de como os comandos de
uma linguagem e cada um dos seus termos deve ser construído corretamente. Ou seja, se o comando está correto ou não.
• A semântica diz respeito ao significado lógico das instruções que serão executadas pelo computador.
32
Introdução à Programação
comeu o rato” está, em termos da língua portuguesa, sintaticamente e semanticamente correta. Porque em termos de sintaxe, a frase tem sujeito, verbo e predicado e o verbo está corretamente conjugado. Semanticamente a frase também está correta, porque na vida real um
comeu o gato”, teríamos um problema. A frase continua sintaticamente correta. Porém a semântica apresenta problemas. Porque, na vida real, geralmente, um rato não come um gato. Agora, vamos dar um exemplo relacionado com programação, fazendo uso de uma estrutura que veremos na subseção 1.2.8, a estrutura SE. Suponha o trecho de código:
Se então
Escreva
Senão
Escreva
Você vai ver na subseção 1.2.8 que, sintaticamente, a estrutura
semanticamente errado. Na vida real sabemos que o aluno está APROVADO se obtém media maior ou igual a sete. E não reprovado como mostra o algoritmo.
e interpretadores), enquanto que os erros semânticos não o são. Por isso, os erros semânticos exigem mais atenção para corrigi-los. Agora que já sabemos o que é sintaxe e semântica e já vimos todos os conceitos mais básicos relacionados a algoritmos (variáveis,
de entrada e saída), podemos partir para construir as estruturas de controle de um algoritmo. Existem 3 estruturas básicas de controle nas quais se baseiam os algoritmos:
Seqüencial: conjunto de comandos separados que são executados em uma seqüência linear de cima para baixo.
Seleção, Condicional ou de Decisão: a partir de um teste
podem ser executados ou não, dependendo exatamente do resultado do teste efetuado.
Exercícios1) Leia o nome e o salário de um funcionário e exiba com resultado o nome do mesmo com o salário reajustado em 12%.
2) Leia 2 notas, calcule e exiba a média ponderada dessas notas. Considere que a nota1 tem peso 6 e a nota2 tem peso 4.
3) Faça um algoritmo que receba um valor em dólar e transforme o mesmo em reais, sabendo que a taxa de conversão é: 1 dólar = R$ 1.70.
4) Leia uma distância em km entre dois pontos e o preço da gasolina em reais. Depois, exiba quantos litros de gasolina o carro irá consumir e quanto será o gasto em reais, sabendo que o carro em questão consegue percorrer 12 km com um litro de gasolina.
5) Leia as variáveis inteiras n1 e n2 e troque o valor destas variáveis. Isto é, n1 deve ficar com o valor de n2 e n2 deve ficar com o valor de n1. Exiba os valores antes e depois da troca.