informação processamento da -...

Post on 11-Nov-2018

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related