Algoritmos
Tipos básicos
Tipos básicos
• Conjunto básico de tipos préexistentes
–
–
–
–
–
–
Inteiros
Reais
Literais
Lógicos
Binários
Ponteiros
Tipos básicos
• Inteiros
– Valores sem parte decimal
– Exemplos
10 7 –14 0 3
• Reais
– Valores com parte decimal, mesmo que
nula
– Exemplos
1,75 3,14 -8,5 0,05 3,0
Tipos básicos
• Notação científica
– Expressão com potências de 10
Inteiros x Reais
– Exemplo
4,32105 é escrito 4,32E5
4,8877E-4
0,00048877
Real
-3,432E-2
-0,03432
Real
1,07E30
1,071030
Inteiro
1E-10
0,0000000001
Real
-1,01E10
-10100000000
Inteiro
O
valor
é
considerado inteiro,
desde que o valor
expresso
em
notação
científica
não contenha parte
decimal se escrito
por extenso
Tipos básicos
• Endereçamento
– Divisão da memória em unidades básicas
– Cada posição possui um endereço
e
e+1
Endereços
Posições
(unidades)
e+2
e+3
e+4
Memória
Tipos básicos
• Armazenamento de dados em
memória
– Representação da informação
• Uso dos bits, agrupados em bytes, para
representar
• Uso das posições de memória para
armazenar as informações representadas
Tipos básicos
Inteiro
(exemplo)
Bases
numéricas
•Uso de 1 byte (8 bits)
•Representação binária
•8 bits = 256 combinações
•Valores: 0 a 255 ou
000000002 a 111111112
Tipos básicos
• Memória
– A interpretação dos bits depende:
• Do número de posições de memória que são
usadas para representar a informação
• Da convenção usada para guardar a
informação
– Exemplo: inteiros de 1 byte com sinal
• Valores: -128 a 127
• O primeiro bit indica se é positivo ou
negativo
00000011 
01111111 
3
127
11111111  -1
10000000  -128
Tipos básicos
-258.448.796
• Escolha da representação x
Interpretação
4 bytes
com sinal
e
36.711
40.347
e+1
e+2
e+3
e+4
10001111
01100111
10011101
10011011
143
103
157
155
-16
103
-30
-28
1 byte
sem sinal
1 byte
com sinal
Memória
2 bytes
sem sinal
Tipos básicos
• Outros exemplos de representação
– Inteiros de 2 bytes com sinal
• Intervalo: -32768 a 32767
• O primeiro bit indica o sinal; os demais 15 bits
indicam o valor
Sinal (1)
– Números reais
• Padrão de 4 bytes (32 bits)
• Uso dos bits
– 1 bit para sinal
– 8 bits para o expoente
– 23 bits para a mantissa
Expoente (8)
Mantissa (23)
Sinal  Mantissa  2Expoente
Tipos básicos
• Literais
– Usados para representar valores textuais
• Incluem letras, dígitos e símbolos
– Notação
• Uso de aspas duplas para indicar o tipo
“Joaquim Xavier”
“Digite seu nome:”
/ indica
O símbolo b
“”
um espaço em branco
//////
“bbbbbb”
“ ”
“Qualquer coisa: % $ * @ 1 2 4 6 5 , ? !”
“123,7”
Tipos básicos
• Lógicos
– Valores válidos
verdadeiro
falso
Tipos básicos
• Ponteiros
– Tudo no algoritmo é representado por
“coisas” que são armazenadas em
memória
• Cada “objeto” tem seu endereço
– Ponteiros indicam endereços
– Ponteiros são importantes para
• Alocação dinâmica de memória
• Estruturas avançadas
Tipos básicos
Tipos básicos
memória
Vila dos inteiros
Vila dos literais
Vila dos reais
Vila dos ponteiros
Ponteiros também estão na memória
Algoritmos
Expressões
Expressões
Todas as expressões
são lineares
a
b
ab
c
a
a/b
b
ab
c
(a  b) / c
Expressões
ab
 e
f
cd
g
(a * b /(c  d )  e / f ) / g
Expressões
• Aritméticas
– Manipulam valores numéricos
– Operadores
+
unário
–
( )
– div
* /
+ –
binário
mod
Precedências iguais
Avaliação da esquerda para
a direita
Parênteses
Quebra da ordem de
precedência normal
Expressões
• Aritméticas
– Exercício: transformar a notação matemática em expressões
algorítmicas
a
bc
ab
e
cd
f
h
g
a / (b + c)
((a + b) / (c – d) + e) / (f / g – h)
Expressões
• Aritméticas
– Exercício: transformar a notação matemática em expressões
algorítmicas
a
bc
a
b
a / (b
b **cc)
a / b / (c / d)
c
d
Expressões
• Aritméticas
– Exercício: transformar a notação matemática em expressões
algorítmicas
a  b
cd
a * –b / (c * d)
abc
 ij  k
e f
d
gh
a * b * c / (d * (e – f) / (g * h)) + i * j – k
Expressões
• Aritméticas
– Exercício: transformar a notação matemática em expressões
algorítmicas
 a  bcd
ef
ab c
 a  b  cd
ef
(–a – b * c * d) / (e * f)
a + b * raiz(c)
(–a + raiz(b – c * d)) / (e * f)
Expressões
• Funções pré-existentes
sen(r), cos(r), tan(r)
real
real
Funções trigonométricas, com
parâmetros em radianos
asen(r), acos(r),
atan(r)
real
real
Funções trigonométicas
inversas, retornando o valor do
arco em radianos
ln(r)
real
real
Logaritmo neperiano (base e)
log(r)
real
real
Logaritmo base 10
exp(r)
real
real
e elevado à potência r
pot(v, r)
real/inteiro,
real/inteiro
inteiro se o
resultado não tiver
parte decimal
sinal(v)
real/inteiro
inteiro
Potência vr
Retorna 1 se o valor for
positivo ou –1 se for negativo;
zero se for nulo
Expressões
• Funções pré-existentes
abs(v)
real/inteiro
tipo do primeiro
argumento
Retorna o valor absoluto (sem
sinal) do argumento, mantendo
o tipo especificado no
parâmetro
trunca(r) ou int(r)
real
inteiro
Retorna somente a parte inteira
do argumento passado
frac(r)
real
real
arred(r)
real
inteiro
Retorna o inteiro mais próximo
do varlor real passado
resto(r, i)
real, inteiro
inteiro
Retorna o resto da divisão
inteira de r por i
quoc(r, i)
real, inteiro
inteiro
Retorna o quociente da divisão
inteira de r por i
Retorna somente a parte
fracionária do argumento
Expressões
• Aritméticas
– Exercício: transformar a notação matemática em expressões
algorítmicas
bc
a
f /g
a + abs((b – c) / raiz(f / g))
sin(a  b)
d
 ln
cosc
ef
sen(a + b) / cos(c) + ln(d / (e * f))
Expressões
• Operadores inteiros div e mod
– div: divisão inteira
– mod: resto da divisão inteira
10 div 5
2
6 mod 3
0
8 div 3
2
7 mod 3
1
5 div 2
2
2322 mod 2
0
21 div 4
5
2327 mod 2
1
3 * 9 div 2
?
19 mod 3
?
Expressões
• Mistura de reais e inteiros
– Regra da promoção
•
•
•
•
•
Inteiro op inteiro  inteiro
Inteiro op real  real
Real op inteiro  real
Real op real  real
Exceção
– Inteiro / inteiro  real
Expressões
• Literais
– Operador único: +
• Concatenação
“abc” + “def”  “abcdef”
/ + “cd”  “ab cd”
“abb”
“b” + “a”  “ba”
“Rua XV” + “, 221”  “Rua XV, 221”
“ab” + “cd” + “ef”  “abcdef”
Expressões
• Funções pré-existentes
compr(s)
literal
inteiro
Retorna o comprimento da cadeia de
caracteres, incluindo os espaços
pos(s1, s2)
literal,
literal
inteiro
Retorna a primeira posição onde a cadeia
s1 ocorre na cadeia s2; Retorna 0 se não
ocorrer nenhuma vez
sub(s, n1, n2)
literal,
inteiro,
inteiro
literal
Retorna a sub-cadeia de s, começando na
posição n1 e comprimento total n2;
primeira posição é 1
val(s)
literal
tipo
equivalente ao
valor numérico
representado
Retorna o valor numérico de uma cadeia de
caracteres que contém um número válido; o
tipo resultante depende o valor
representado na cadeia
cadeia(v)
real/inteiro
literal
Resulta em uma cadeia de caracteres
equivalente ao valor numérico do
parâmetro; assume-se a representação sem
potência de 10
Expressões
• Literais
“prog” + “amação”  “programação”
compr(“tipos”)  5 (inteiro)
sub(“algoritmos”, 4, 3)  “ori”
• “Mistas”
val(“443”)  443 (inteiro)
val(“123,84”)  123,84 (real)
val(“2e5”)  200000 (inteiro)
val(“1,2345e2”)  123,45 (real)
pos(“al”, “valores”)  2
cadeia(10)  “10”
cadeia(3 * 7 + 1)  “22”
cadeia(7 / 2)  “3,5”
cadeia(1 / 3)  “0,33333” (no arbitrário de casas)
Expressões
• Relacionais
– Estabelecem a relação entre valores
• Os tipos devem ser compatíveis
• O resultado é um valor lógico
– Operadores
= ≠ < > ≤
≥
Precedência
Todos os operadores aritméticos têm
Precedência sobre os operadores relacionais
• Relacionais
Expressões
– Exemplos
10 = 10
verdadeiro
8=5+2
falso
10 mod 2 = 1
falso
1 + 2 * 7 ≠ 21
verdadeiro
18 > 3 * 7
falso
1+1<2
falso
1+1≤2
verdadeiro
“variáveis” = “variáveis”
verdadeiro
“tipos” + “dados” = “tipos dados”
falso
“abc” > “abb”
verdadeiro
“123” > “12”
verdadeiro
Expressões
• Lógicas
– Operam sobre valores lógicos
– Resultam em um valor lógico
• Operadores
+
–
não
e
ou
Precedência
Todos os operadores relacionais têm
precedência sobre os operadores lógicos
Expressões
• Operadores lógicos: tabelas verdade
não falso
verdadeiro
não verdadeiro
falso
não
falso e falso
falso
falso e verdadeiro
falso
verdadeiro e falso
falso
verdadeiro e verdadeiro
verdadeiro
falso ou falso
falso
falso ou verdadeiro
verdadeiro
verdadeiro ou falso
verdadeiro
verdadeiro ou verdadeiro
verdadeiro
e
ou
Expressões
Dê o resultado das seguintes expressões
8+3*4/2
3 * 7 div 2 mod 10
4/2/2>1
“leopardo” < “guepardo”
verdadeiro ou verdadeiro e falso
verdadeiro e falso ou verdadeiro e falso
verdadeiro ou falso e falso ou verdadeiro
(verdadeiro ou falso) e falso ou verdadeiro
8 > 3 e 9 = 8 + 1 ou 12 mod 6 > 6
1 ≠ 1 e “zebra” < “gnu” ou 8 / 2 / 4 * 2 > 4










14,0
9
falso
falso
verdadeiro
falso
verdadeiro
verdadeiro
verdadeiro
falso
Expressões
• Observação sobre expressões
relacionais
8 < 21 ≤ 43
verdadeiro ≤ 43
???
8 < 21 e 21 ≤ 43
verdadeiro e verdadeiro
verdadeiro
Algoritmos
Variáveis
Entrada e saída
Atribuição
Variáveis
• O que são
– Áreas da memória que são utilizadas para
guardar valores
• Como funcionam
– Possuem um nome (identificador)
• Referências ao identificador indicam referência ao
valor armazenado
– Possuem um tipo associado
• Os tipos são importantes para indicar como cada
variável pode ser armazenada
Formalização do algoritmo
Algoritmo nomeAlgoritmo
{ Descrição do que o algoritmo faz }
{ Definições necessárias }
Início
{ Comandos que descrevem passo a passo
as etapas a serem cumpridas para resolver
o problema }
Fim
Formalização do algoritmo
• Exemplo
algoritmo quedaLivre
{ Calcula a velocidade de uma partícula ao atingir o solo
após ser largada do repouso a uma dada altura }
declare altura: real
início
leia (altura)
escreva (4,43 * raiz(altura))
fim
Variáveis
• Declaração
declare lista-identificadores: tipo
declare velocidade, altura: real
declare idade: inteiro
declare nome: literal
declare salário, saldo: real
nome: literal
temFilhos: lógico
idade: inteiro
Lista-identificadores: lista de nomes,
separados por vírgulas
Variáveis
salário (real)
declare salário, saldo: real
nome: literal
temFilhos: lógico
idade: inteiro
saldo (real)
nome (literal)
temFilhos (lógico)
idade (inteiro)
Memória
Entrada e saída
• Interface com o “mundo externo”
leia(lista-de-identificadores)
• Faz a transferência entre de dados
de fora do computador para as
variáveis (i.e., para a memória)
escreva(lista-de-expressões)
• Faz a transferência entre de dados
das variáveis (i.e., da memória)
para fora do computador
Entrada e saída
• Comando leia
– Transfere dados para dentro do computador
– Origem dos dados
• Teclado, modem, mouse (coordenadas e botões),
disco rígido, CD, webcam, sensores (temperatura,
pressão, movimento), interface USB etc.
• Comando escreva
– Transfere dados para fora do computador
– Destino dos dados
• Monitor de vídeo, impressora, modem, motores
(acionamento automático), CD, disco rígido, interface
USB etc.
nome
Entrada e saída
“Jurandir”
idade
18
• Exemplo 1
algoritmo exemploES
{ Apenas um exemplo de entrada e saída }
declare nome: literal
salário: real
idade: inteiro
início
leia(nome)
escreva(nome)
leia(idade, salário)
escreva(“Idade =“, idade)
escreva(“Salário =“, salário)
fim
salário
1200,0
Jurandir
Jurandir
18
1200,00
Idade =18
Salário =1200
Entrada e saída
ano
2006
idade
• Exemplo 2
algoritmo exemploES
{ Apenas um exemplo de entrada e saída }
declare idade, ano: inteiro
início
leia(ano, idade)
escreva(“Nascimento:”, ano – idade)
leia(idade)
escreva(“Outro ano =“, ano - idade)
fim
19
18
2006 19
Nascimento: 1987
18
Outro ano: 1988
Variáveis
•
O que tem em
uma variável antes
da leitura?
algoritmo conteúdo
{ exemplo de conteúdo de variáveis }
declare idade: inteiro
nome: literal
início
escreva(idade)
escreva(nome)
escreva(compr(nome)) { nº de caract }
fim
a) nada
b) zero
c) alguma coisa que
eu ignoro
d) n.d.a.
Uma variável somente declarada:
- Tem conteúdo “lixo”
- Não foi iniciada
É considerado erro tal utilização
Atribuição
• Alocação explícita de valor a
variáveis
Identificador é o nome de uma variável
Expressão resulta em um valor do mesmo
tipo que a variável em questão
Identificador  expressão
Atribuição
• Exemplo
algoritmo horasMinutosSegundos
{ Dada uma quantidade de segundos, escreve
o número de horas, minutos e segundos equivalente }
declare totalSegundos,
horas, minutos, segundos: inteiro
início
leia(totalSegundos)
horas  totalSegundos div 3600
minutos  (totalSegundos – 3600 * horas) div 60
segundos  totalSegundos mod 60
escreva(horas, minutos, segundos)
fim
Constantes simbólicas
10,0 ms-2 (Terra, arredondado)
9,80 ms-2 (Terra, mais preciso)
1,67 ms-2 (Lua)
273,42 ms-2 (Sol)
algoritmo quedaLivre
{ Calcula a velocidade de uma partícula ao atingir o solo
após ser largada do repouso a uma dada altura }
constante aceleracao: real = 10,0 { gravidade }
declare altura, velocidade: real
início
leia(altura)
velocidade  raiz(2 * altura * aceleracao)
escreva(velocidade)
fim
Algoritmos
•
Exercício
Informar o índice de massa corporal
(IMC) de uma pessoa, sabendo-se que
é calculada como a razão entre sua
massa e o quadrado de sua altura;
Algoritmos
•
Exercício
Informar a área de um trapézio,
sabendo-se que é calculada por:
(b + B) * h / 2
Algoritmos
•
Exercício
Ler os coeficientes de uma equação de
segundo grau e calcular o valor de y
para um ponto x informado pelo
usuário:
y = a.x2 + b.x + c
Algoritmos
•
Exercício
Sabendo-se que a relação entre
vértices, arestas e faces de um objeto
geométrico é dada pela fórmula:
vértices + faces = arestas + 2
calcule o número de vértices de um
cubo (6 faces e 12 arestas)