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,32105 é escrito 4,32E5 4,8877E-4 0,00048877 Real -3,432E-2 -0,03432 Real 1,07E30 1,071030 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 ab c a a/b b ab c (a b) / c Expressões ab e f cd 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 bc ab e cd 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 ab 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 bc 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)