informação processamento da -...
TRANSCRIPT
Processamento da informação
Prof. Fabrício Olivetti de França
Do latim, informatio onis, conceber ideia.
Informação
Conceber Ideia
Preciso que você encontre a derivada de
log(x)!
Conceber Ideia
Encontre uma forma de construir
isso com segurança máxima e gastando apenas
R$ 100.000,00.
Conceber Ideia
Conceber Ideia
MARTELE ESSE PREGO NA TÁBUA!
Conceber Ideia
O prego que já está na tábua ou colocar o outro
prego na tábua??!
Conceber Ideia
Conceber Ideia
#$!% 0101101?
Ensinar o pensamento computacional para resolver problemas e descrevê-los de forma clara.
Como explicar um algoritmo para o computador a uma linguagem de programação.
Objetivo do Curso
3 horas de aulas teóricas + 2 horas de aulas práticas.
Metodologia
No site:
http://folivetti.github.io /courses/ProcessamentoInformacao/
E códigos exemplos no github:
https://github.com/folivetti/PI-UFABC
Material de Aula
Conceitos de Programação
13
Conceitos de ProgramaçãoA computação está relacionada com a execução de um procedimento bem definido para a solução de um problema.
Não necessariamente está ligado a fazer isso utilizando um computador.
14
Conceitos de ProgramaçãoAlgoritmo é a descrição da solução do problema computável.
O termo vem de al-Khwarizmi, um dos percursores da algebra.
15
Conceitos de Programação
O primeiro algoritmo que se tem conhecimento é o Algoritmo de Euclides, utilizado para calcular o Máximo Divisor Comum.
16
Conceitos de ProgramaçãoDados dois números inteiros m, n.
1. [Encontre o resto] Divida m por n e guarde o resto r (temos que 0 < r < n)
2. [Encontrei a resposta?] Se r==0, o algoritmo termina e n é a resposta
3. [Reduzir o problema] Faça m=n e n=r e retorne ao passo 1
17
Propriedades de um Algoritmo1. Finitude: um algoritmo deve SEMPRE terminar em um
período finito de tempo.
O algoritmo de Euclides é finito, pois n é um inteiro que sempre decresce, necessariamente atingindo zero.
18
Propriedades de um Algoritmo2. Desambiguidade: não pode haver ambiguidade em
qualquer instrução do algoritmo.
19
Propriedades de um Algoritmo3. Entrada: o algoritmo pode requisitar 0 (zero) ou mais
entradas como condições iniciais.
20
Propriedades de um Algoritmo4. Saída: o algoritmo deve ter uma ou mais saídas com a
resposta do problema.
21
Notações e Exemplo
Notações
== representa a RELAÇÃO de igualdade (comparação) entre dois valores
= tem o sentido de atribuição ou substituição dos valores de uma variável matemática (x = y, x agora tem o valor de y).
Notações
Se quisermos alterar o valor de uma variável por uma constante (por exemplo, 1), fazemos:
x = x + 1
Notações
Note, no algoritmo, que a ordem dos passos descritos tem importância:
m = n, n = r
é diferente de
n = r, m = n
Exemplo
Vamos verificar se o algoritmo de Euclides funciona:
Dado m=68 e n=119
Passo 1: dividir m/n e encontrar o resto r; r = 68Passo 2: r==0? NãoPasso 3: m = 119, n = 68
ExemploPasso 1: dividir m/n e encontrar o resto r; r = 68Passo 2: r==0? NãoPasso 3: m = 119, n = 68
ExemploPasso 1: dividir m/n e encontrar o resto r; r = 68Passo 2: r==0? NãoPasso 3: m = 119, n = 68Passo 1: r = 51Passo 2: r==0? Não
ExemploPasso 1: dividir m/n e encontrar o resto r; r = 68Passo 2: r==0? NãoPasso 3: m = 119, n = 68Passo 1: r = 51Passo 2: r==0? NãoPasso 3: m = 68, n = 51
ExemploPasso 1: dividir m/n e encontrar o resto r; r = 68Passo 2: r==0? NãoPasso 3: m = 119, n = 68Passo 1: r = 51Passo 2: r==0? NãoPasso 3: m = 68, n = 51Passo 1: r = 17Passo 2: r==0? Não
ExemploPasso 1: dividir m/n e encontrar o resto r; r = 68Passo 2: r==0? NãoPasso 3: m = 119, n = 68Passo 1: r = 51Passo 2: r==0? NãoPasso 3: m = 68, n = 51Passo 1: r = 17Passo 2: r==0? NãoPasso 3: m = 51, n = 17
ExemploPasso 1: dividir m/n e encontrar o resto r; r = 68Passo 2: r==0? NãoPasso 3: m = 119, n = 68Passo 1: r = 51Passo 2: r==0? NãoPasso 3: m = 68, n = 51Passo 1: r = 17Passo 2: r==0? NãoPasso 3: m = 51, n = 17Passo 1: r = 0Passo 2: r==0? Sim
Linguagem de Programação
Aprendemos como descrever um algoritmo na nossa própria linguagem.
Qualquer aluno do BC&T consegue ler aquelas descrições e efetuar o cálculo do MDC.
Mas e se m e n forem números muito grandes? Levaríamos muito tempo para calcular....
Linguagem de Programação
Para efetuar tais cálculos é interessante usarmos o computador para automatizar essa tarefa.
Se as regras dos cálculos estão bem descritas, o computador não terá problemas em entender né?
Linguagem de Programação
Mas...temos que lembrar que os computadores só entendem 0s e 1s...
Precisamos então de um “dicionário” que traduza aquelas instruções para sequências de bits que o computador entenda.
Linguagem de Programação
Linguagem de Programação é uma linguagem bem definida e sem ambiguidades utilizada para se comunicar com o computador.
36
Linguagem de Programação
Inicialmente consistia em um conjunto limitados de instruções, pré-definidos pelo processador do computador e um conjunto fixo de espaços de memória para serem utilizadas como variáveis do algoritmo.
37
Exemplo Linguagem de Máquina
add eax 360
001000 00001 0000000101011110
Código OP Endereço Valor
38
Algoritmo de Euclides em Ling. Maq.mov esi, 68 # m = 68mov ebx, 119 # n = 119jmp .L2 # vai para o passo 2
.L3: mov ebx, edx # n = r.L2: mov eax, ebx idiv esi # EAX = m / n (EAX), EDX = r mov esi, ebx # m = n test edx, edx # verifica se o resto é zero jne .L3 # se teste anterior não zero, vai para L3 39
Linguagem de Máquina
Além da dificuldade em entender o que cada instrução faz e a limitação de trabalhar com registradores, o entendimento do fluxo do algoritmo é prejudicado.
40
Linguagem de Alto Nível
Para resolver esses problemas, foram criadas linguagens de programação que serviriam como intermediários entre a linguagem de máquina e o programador.
41
Linguagem de Alto NívelOs objetivos dessas linguagens eram:
● Ter um conjunto de instruções próximas da linguagem natural
● Minimizar o número de instruções para tarefas frequentes
● Ter o máximo de controle sobre o computador, mas sem a necessidade de entendê-lo completamente
42
Compilador x Interpretador
Compiladas: o código-fonte é traduzido para código de máquina e escrito em um arquivo executável.
Interpretadas: o código-fonte é traduzido para instruções de máquina em tempo de execução.
43
Algoritmo de Euclides em Java/* valores iniciais */
int m = 68;int n = 119;int r = m%n;
/* reduz o problema para um problema mais simples */while( r!=0 ){ m = n; n = r; r = m%n;} 44
Solução de Problemas
Perceberemos ao longo do curso que a solução de muitos problemas consiste em reduzí-los para um problema mais simples em que a solução é trivial.
45
Java
Linguagem de ProgramaçãoNo JAVA todo programa começa com as seguintes instruções:
class NOME { public static void main (String[] args) { // o algoritmo é escrito aqui }}
Linguagem de ProgramaçãoNo JAVA todo programa começa com as seguintes instruções:
class NOME { public static void main (String[] args) { // o algoritmo é escrito aqui }}
Nome do programa, deve ser o mesmo do nome do arquivo onde está escrevendo.
Marca o início do programa.
Linguagem de ProgramaçãoNo JAVA todo programa começa com as seguintes instruções:
class NOME { public static void main (String[] args) { // o algoritmo é escrito aqui }}
MARCA OS BLOCOS DE INSTRUÇÕES: tudo que está dentro do {} pertence ao programa
Linguagem de ProgramaçãoNo JAVA todo programa começa com as seguintes instruções:
class NOME { public static void main (String[] args) { // o algoritmo é escrito aqui }}
Comentários: o computador ignora tudo que tem após “//” na mesma linha
Linguagem de ProgramaçãoNa aula teórica, para simplificar, vamos ignorar essa parte e escrever apenas o que tem dentro do bloco {}
class NOME { public static void main (String[] args) { // o algoritmo é escrito aqui }}
Linguagem de ProgramaçãoNa aula teórica, para simplificar, vamos ignorar essa parte e escrever apenas o que tem dentro do bloco {}
NOME {// o algoritmo é escrito aqui
}
Cálculo da MédiaDados dois números m, n calcular a média aritmética.
1. [Soma e divida] Some m com n e divida por 2, retorne o resultado
53
Cálculo de MédiaMEDIA {
Dado m e nSome m com n e divida por 2, retorne o
resultado}
Cálculo de MédiaMEDIA {
Dado m e nSome m com n e divida por 2, retorne o
resultado}
???
Cálculo de Média
O conceito de variáveis matemáticas é entendida pelo computador como valores que ele deve memorizar!
Dado m,n => Memorize os valores de m e n
Cálculo de Média
O computador precisa saber que tipo de valores você quer que ele memorize para gerenciar o uso de sua memória (que é limitada).
Alguns tipos possíveis são: numéricos, lógicos e textuais.
Tipos NuméricosPara tipos numéricos com valores inteiros, positivos ou negativos, temos:
Nome Memória Mínimo Máximobyte 1 byte -128 127short 2 bytes -32768 32767int 4 bytes -231 231 – 1long 8 bytes -263 263 – 1
Tipos NuméricosPara tipos numéricos com valores fracionários, positivos ou negativos, temos:
Nome Memóriafloat 4 bytesdouble 8 bytes
Cálculo de MédiaMEDIA {
double m, n;Some m com n e divida por 2, retorne o
resultado}
???
O “;” indica o finalda instrução
NOME DE VARIÁVEIS
Use nomes de variáveis que descrevam de forma sucinta o que ela representa:
double media;
double mediaentredoisnumeros;
okx
NOME DE VARIÁVEIS
Não use acentos ou símbolos para o nome:
double media;
double média;
double média☺;
okxx
NOME DE VARIÁVEIS
O Java diferencia maiúsculas de minúsculas:
double media, Media;
Para saber mais:https://github.com/folivetti/PI-UFABC/blob/master/AULA_01/variaveis.java
Entrada de DadosPara obtermos uma entrada de dados do usuário, utilizaremos uma instrução chamada Scanner.
Primeiro dizemos ao computador que queremos pegar entrada do usuário com:
Scanner leitor = new Scanner(System.in);
Depois requisitamos as entradas com:
m = leitor.nextDouble();
Entrada de DadosAtente que devemos substituir XXX no comando “nextXXX()” pelo tipo do valor que queremos obter (com a primeira letra em maiúscula):
nextByte()nextInt()nextLong()nextDouble()...
Entrada de DadosPara usarmos o Scanner em nossos códigos, temos que escrever, antes da linha class NOME, a seguinte instrução:
import java.util.Scanner;
Entrada de Dados
Na aula teórica vamos ignorar tudo isso e usar apenas os comandos nextXXX() diretamente!
Mas não esqueçam de incluir isso nos códigos da aula prática!
Cálculo de MédiaMEDIA {
double m, n;m = nextDouble();n = nextDouble();Some m com n e divida por 2, retorne o
resultado}
???
OperadoresComo o computador é uma máquina avançada de calcular, existem diversos operadores matemáticos prontos para serem usados:
+ soma dois números- subtrai dois números* multiplica dois números/ divide um número pelo outro% resto da divisão
OperadoresAvançado:
o Java conta com diversas funções matemáticas para serem usadas
http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html
Para saber mais:https://github.com/folivetti/PI-UFABC/blob/master/AULA_01/operadores.java
Cálculo de MédiaMEDIA {
double m, n, media;m = nextDouble();n = nextDouble();media = m+n/2;
}
1010101
SaídaPara mostrar o resultado na tela, usaremos o comando
System.out.println( saida )
Podemos combinar texto com os valores de nossas variáveis utilizando o operador “+”
Para simplificar, utilizaremos apenas “println()”
Cálculo de MédiaMEDIA {
double m, n, media;m = nextDouble();n = nextDouble();media = m+n/2;println(“Media = “+media);
}
1010101
Vamos testar!
Digamos que a entrada é:
m = 10n = 5
Cálculo de MédiaMEDIA {
double m, n, media;m = nextDouble();n = nextDouble();media = m+n/2;println(“Media = “+media);
}
vou guardar 3 valores
float
Cálculo de MédiaMEDIA {
double m, n, media;m = nextDouble();n = nextDouble();media = m+n/2;println(“Media = “+media);
}
o 1º. valor é 10
Cálculo de MédiaMEDIA {
double m, n, media;m = nextDouble();n = nextDouble();media = m+n/2;println(“Media = “+media);
}
o 2º. valor é 5
Cálculo de MédiaMEDIA {
double m, n, media;m = nextDouble();n = nextDouble();media = m+n/2;println(“Media = “+media);
}
armazena 10+5/2
em media
Cálculo de MédiaMEDIA {
double m, n, media;m = nextDouble();n = nextDouble();media = m+n/2;println(“Media = “+media);
}
Media = 12.5
Ordem de OperaçõesA expressão
10 + 2 / 5
é ambígua! O que devo calcular primeiro? Dependendo da escolha da ordem, o resultado muda!
Ordem de OperaçõesO computador segue uma regra de precedência das operações, que define a ordem em que ele irá calcular:
1as. operações: * e / e %2as. operações: + e –
em caso de empate, da esquerda para direita.
Ordem de OperaçõesNo caso de
10 + 2 / 5
ele vai fazer primeiro 2/5 e depois o resultado + 10.
Ordem de OperaçõesPara definir nossa própria precedência utilizamos parênteses!
(10 + 2)/5
Para saber mais:https://github.com/folivetti/PI-UFABC/blob/master/AULA_01/operadores_precedencia.java
Cálculo de MédiaMEDIA {
double m, n, media;m = nextDouble();n = nextDouble();media = (m+n)/2;println(“Media = “+media);
}
código completo:https://github.com/folivetti/PI-UFABC/blob/master/AULA_01/Media.java
Media = 7.5
Cálculo da MédiaDados dois números m, n calcular a média aritmética.
1. [Soma] Some m com n
2. [Divisão]Divida o resultado do passo anterior por 2 e retorne o novo resultado
85
Exercícios da TeoriaOs exercícios na parte teórica (e isso pode incluir a prova) serão feitos em duas partes:
1) Descrição textual do algoritmo (vide slide anterior)
2) Código Java (na teoria pode ser o simplificado utilizado nos slides)
Exercícios
Exercício 1
Descreva um algoritmo para resolver a equação:
a.x2 + b.x + c = 0
Defina a entrada e a saída e o procedimento para efetuar o cálculo de forma clara e desambígua.
https://github.com/folivetti/PI-UFABC/blob/master/AULA_01/SegundoGrau.java
Exercício 2Descreva um algoritmo para calcular a média ponderada entre dois números, a e b, utilizando um peso 0 <= w <= 1.
A média ponderada é dada por:
w * a + (1-w) * b
Algo pode dar errado?
https://github.com/folivetti/PI-UFABC/blob/master/AULA_01/MediaPonderada.java
Atividade para treinar em casa IImplemente um algoritmo para converter uma temperatura em Celsius para Kelvin e Fahrenheit:
pesquise as fórmulas de conversão, defina os tipos de variáveis, descreva o seu algoritmo textualmente, implemente na linguagem Java.
https://github.com/folivetti/PI-UFABC/blob/master/AULA_01/MediaPonderada.java
Atividade para treinar em casa IIImplemente um algoritmo para converter a idade da pessoa em anos para segundos.
A conversão proposta é precisa? Crie soluções para torná-la mais próxima do real!
https://github.com/folivetti/PI-UFABC/blob/master/AULA_01/IdadeSegundos.java
Atividade para treinar em casa IIIImplemente vários programas que calcula área e volume de formas geométricas:
RetânguloTriânguloCircunferênciaCuboEsferaPirâmide
https://github.com/folivetti/PI-UFABC/blob/master/AULA_01/AreaFormas.java
Resumo
Estrutura Básica de um Programa - Java
import java.util.Scanner; // vamos usar Scanner
class NOMEPROGRAMA {public static void main (String[] args) {
// sequencia de comandos}
}
Estrutura Básica de um Programa - Javaint x; // vou precisar de uma variável com nome x e contendo valores do tipo int
Scanner leitor = new Scanner(System.in); // vou pegar entradas do usuário
x = leitor.nextInt(); // pega um valor inteiro do usuário
System.out.prinln(“X = “+x); // imprime na tela
Estrutura Básica de um Programa - Javax = y+z; // soma os valores de y e z e armazena em x
x = (y+z)*2; // soma os valores de y e z, multiplica o resultado por 2 e armazena em x
x = x%y; // x agora tem o valor do resto da divisão de x por y