• Nenhum resultado encontrado

FísicaComputacional5a.pdf

N/A
N/A
Protected

Academic year: 2019

Share "FísicaComputacional5a.pdf"

Copied!
37
0
0

Texto

(1)

Física Computacional

2011-2

I N T R O D U Ç Ã O À L Ó G I C A D E P R O G R A M A Ç Ã O

P R O F . L U Í S F E R N A N D O D E O L I V E I R A

UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO INSTITUTO DE FÍSICA ARMANDO DIAS TAVARES

(2)

Estrutura de Dados

Além da informação básica presente nas lógicas de

programação (numérico, literal e lógico), um

problema pode necessitar de outras estruturas de

informação.

Uma estrutura muito útil e constantemente presente

nos problemas é a estrutura de informação

homogênea na forma de vetores e matrizes.

Este tipo de estrutura de informação é organizado

através de uma lista indexada de conteúdos

(valores).

(3)

Estrutura de Dados

Matematicamente, uma lista de dados é uma

estrutura referenciada por um identificador e um

conteúdo em particular é localizado através de seu

índice:

x = {x

i

/ i

N

} = {x

0

,x

1

, ... , x

n

, ...}

Como a lista não pode ser infinita, será necessário

definir-se um comprimento (número de dados).

Também é necessário que se defina o tipo do dado

que será armazenado na lista.

(4)

Estrutura de Dados

Em termos de algoritmo, a declaração de uma lista

de dados homogêneo segue o estilo de definição de

uma variável qualquer.

Porém, a dimensão da lista deve ser declarada logo

após o identificador.

Por exemplo, suponhamos que a lista x do exemplo

anterior seja numérica e que tenha um total de 20

elementos:

 declare x[20] numérico {lista com 20 elementos}

(5)

Estrutura de Dados

O índice do primeiro elemento da lista depende de

uma convenção a ser adotada.

Em Física Computacional, o índice será 1 se este não

for apresentado formalmente.

E se o índice inicial não é 1, então é necessário

explicitá-lo:

 declare x[0:19] numérico {20 elemento começando do 0}

De quebra, o índice final também deve ser

explicitado.

 declare identificador[inicio:fim] <natureza>

(6)

Estrutura de Dados

Exemplos:

 declare x[20] numérico {começa no 1, 20 elementos}  declare nome[30] literal {começa no 1, 30 elementos}

 declare y[-10:10] numérico {começa no -10, 21 elementos}  declare estado[0:9] lógico {começa no 0, 10 elementos}

No caso das variáveis literais, não padronizamos no

início do curso a necessidade de se revelar a

dimensão da variável (número de caracteres).

Faremos isso a partir de agora.

(7)

Estrutura de Dados

Uma variável literal sem dimensão é capaz de

armazenar somente um caractere.

Para se armazenar uma

string

(cadeia de caracteres)

é necessário declarar-se uma lista:

 declare ch literal

 declare nome[20] literal  ch  „a‟

 nome  “paralelepípedo”

(8)

Estrutura de Dados

Cada elemento de uma lista é acessado através do

identificador da lista seguido de um índice:

 declare x[20] numérico  declare titulo[30] literal  x[1]  10

 x[5]  -x[1]

 titulo  “Física Computacional”

 escrever x[5], titulo[8] {imprime: -10 C}

Tradicionalmente, uma lista de dados indexados é

chamado de vetor.

(9)

Estrutura de Dados

Podemos construir listas com mais de uma

dimensão.

Uma lista bidimensional é tipicamente uma matriz

de dados.

A declaração de uma lista bidimensional segue o

padrão de uma lista (vetor) apenas se diferenciando

na declaração do comprimento que passam a ser dois

(separados por vírgula):

 declare mat[10,10] numérico {matriz 10 por 10}

(10)

Estrutura de Dados

Se os índices percorrem faixas de valores que não

começam em 1, é necessário explicitá-los:

 declare a[0:9,0:9] numérico {matriz 10x10: aij}

O acesso aos elementos segue o mesmo padrão de

vetores (listas unidimensionais):

 a[0,0]  10  a[8,3]  -20.5  escrever a[1,3]

(11)

Estrutura de Dados

A declaração de listas multidimensionais é simples:

 declare identificador[d1,d2,d3,...,dN] <natureza>

onde d1, d2, ... , dN são os comprimentos em cada

dimensão.

Neste caso, a lista tem N dimensões.

Exemplo:

 {estrutura 3x100x2, total de 600 elementos}  declare dados[3,100,2] numérico

(12)

Estrutura de Dados

A declaração não pode conter variáveis.

É necessário que os comprimentos sejam definidos

na declaração.

Numa situação onde os comprimentos não sejam

conhecidos

a priori

, é preciso usar uma outra

declaração e definir os comprimentos durante o

algoritmo.

(13)

Estrutura de Dados

Então, como exercício:

 Desenvolva um algoritmo para cálculo das médias de 100 alunos onde a média é calculada a partir de 3 provas.

 Primeiro, as notas devem ser armazenadas em uma matriz.  Depois, deve-se calcular as médias de cada aluno.

 Por fim, cada média deverá ser armazenada em uma lista separada.

(14)

Estrutura de Dados

Outro exemplo:

 Digamos que um programador queira criptografar uma mensagem.

 O método escolhido por ele foi inverter a ordem dos caracteres na string.

 Exemplo: a string é “olá”; ao criptografar ficaria “álo”.  Admita que exista uma função chamada tamanho( ) que

retorne o tamanho da string presente na declaração da variável.

 Exemplo:

 declare nome[30] literal

(15)

Estrutura de Dados

 A parte da string que não é usada fica com espaços em branco, por exemplo:

 declare str[10] literal {“_ _ _ _ _ _ _ _ _ _”}

 declare tam numérico {tamanho declarado}

 str  “olá” {“o l á _ _ _ _ _ _ _”}

 O método segue a seguinte lógica:

 percorrer a string de trás para frente;

 enquanto for espaço em branco, continua, até encontrar um

caractere que não seja espaço;

 a partir daí, trocar posição dos caracteres;

 se a posição do último caractere é j, então o caractere da posição j

deve ser trocado com o caractere da posição 1; o caractere da posição j-1 deve ser trocado com o caractere da posição 2;

(16)

Estrutura de Dados

 o caractere da posição j-2 deve ser trocado com o caractere da

posição 3;

 generalizando, o caractere da posição j-(i-1) é trocado com o

caractere da posição i;

 exemplo: o caractere „a‟ está na posição 3 e deve ser trocado com o caractere „o‟ na posição 1; logo, i é 1 e deve se trocado com o

caractere da posição j-(i-1) que é 3-(1-1) = 3; o caractere „l‟ está na

posição i=2 e deve ser trocado com o caractere da posição j-(i-1); se j é 3, então j-(i-1)=3-(2-1)=2 que é o próprio caractere „l‟; daí

surge o critério de parada nas trocas de posição; se i for igual ou maior que j-(i-1), então parar.

 então, primeiro passo é descobrir a posição do último caractere

diferente de espaço; depois começar a troca dos caracteres.

(17)

Estrutura de Dados

Algoritmo Criptografando_String

 Data. 06/09/2011  Autor. Luís Fernando

 Propósito. criptografar uma cadeia de caracteres trocando a posição dos mesmos dentro da cadeia.

 Método. Determinar a posição do último caractere diferente de espaço em branco dentro da cadeia (string). Depois, trocar os caracteres de posição. Se o último caractere está na posição j e este deve ser trocado com o caractere da posição 1, então a

regra de troca de posição será trocar o caractere da posição i com o caractere da posição j-(i-1). O critério de parada fica estabelecido quando o valor de i for maior ou igual a j-(i-1).

(18)

Estrutura de Dados

 Entradas e Saídas.

 Entrada: string a ser criptografada.

 Saída: string criptografada.

 Observações, Requisitos e Restrições. O algoritmo usa uma função que retorna o total de caracteres de uma variável literal baseado na declaração da própria variável. A função se chama tamanho(variável literal).

algoritmo

declare str[128], ch literal {string e variável auxiliar}

declare i, j numérico {contadores de posição} {continua}

(19)

Estrutura de Dados

escrever “Entre com a frase:”

ler str

j  tamanho(str) {tamanho da string}

enquanto (str[j] == „ ‟), fazer {enquanto for espaço...}

j  j-1 {decrementa contador}

fim enquanto {até encontrar caractere diferente de espaço}

i  1 {posição de troca} enquanto (i < j), fazer

ch  str[i]

str[i]  str[j]

str[j]  ch

{continua}

(20)

Estrutura de Dados

{continuação}

i  i+1

j  j-1

fim enquanto

escrever “A frase criptografada é”, str

fim algoritmo

(21)

Estrutura de Dados

Exemplo com média e desvio padrão

 Um aluno tem uma sequência de dados experimentais sobre uma mesma grandeza. Ele deseja calcular a média dos dados e o desvio padrão referente à média. São 15 dados ao total:

x = {10, 2, 3, 7, 5, 3, 7, 4, 6, 4, 32, 1, 4, 5, 3}

 Desenvolva um algoritmo de forma que os dados sejam

fornecidos no início. Depois, o algoritmo deve calcular a média e o desvio padrão. E, por fim, retorna ao aluno a média final e o desvio padrão.

(22)

Estrutura de Dados

Algoritmo Estatística Básica

 Data. 09/09/2011  Autor. Luís Fernando

 Propósito. Calcular a média e o desvio padrão de um conjunto de medidas.

 Método. O cálculo da média é realizado pela expressão xm = (1/N)xi

onde xi é cada medida e N é o número de medidas.

 O desvio padrão é a raiz da variância que é calculada pela expressão

xvar = (1/N)(xi-xm)2 x

(23)

Estrutura de Dados

 Entradas e Saídas.

 Entrada: medidas.

 Saída: média e desvio padrão.

 Observações, Requisitos e Restrições. Como não sabemos ainda como criar um vetor com tamanho indefinido, vamos impor ao usuário que o total de dados não pode

ultrapassar 50 medidas.

algoritmo

declarar dado[50], variância numérico {medidas e variância}

declarar i numérico {contador}

(24)

Estrutura de Dados

{verificação do total de dados}

escrever “Entre com o total de dados (N):” ler N

se (N>50), então

escrever “Total de dados não pode ultrapassar 50 medidas” senão {se N é <= 50, então tudo bem, continuar}

{armazenar os dados em um vetor}

para i de 1 até N, fazer

escrever “Entre com dado ”,i,“:”

leia dado[i]

fim para

{continua}

(25)

Estrutura de Dados

{cálculo da média das medidas}

média  0 {inicializa média com 0}

para i de 1 até N, fazer {somatório dos dados}

média  média+dado[i]

fim para

média  média/N {cálculo da média dos dados} {cálculo do desvio padrão}

variância  0 {inicializa variância com 0}

para i de 1 até N, fazer {diferenças quadráticas}

variância  variância+(dado[i]-média)**2

fim para

{continua}

(26)

Estrutura de Dados

variância  variância/N {cálculo da variância dos dados}

desvio  variância**0,5

escrever “A média é ”, média, “ e o desvio é ”, desvio

fim se

fim algoritmo

(27)

Estrutura de Dados

Exercício: desenvolva um algoritmo para realizar a

regressão linear sobre um conjunto de dados.

 O procedimento de regressão linear procura encontrar os

parâmetros da reta que melhor ajusta os dados experimentais.  Ele traz a essência do método dos mínimos quadrados.

 A equação da reta que melhor ajusta os dados é dada pela expressão

Yr = A + BX

 Os parâmetros A e B devem ser tais que a reta se aproxime o melhor possível dos pares de dados (xi, yi).

 O parâmetro A é o termo independente e B é o coeficiente angular da reta de ajuste.

(28)

Estrutura de Dados

 Se yi é a cota do dado i para a abscissa xi e yri é a aproximação da reta de ajuste para a mesma abcissa, então a diferença

(yi-yri)2 é o erro quadrático de ajuste  i2.

 O método visa encontrar A e B tais que o erro quadrático total seja o menor possível.

 Então, o erro quadrático total é a soma dos erros quadráticos individuais:

T2 = (y

1-yr1)2+ (y2-yr2)2+...+ (yN-yrN)2 T2 = (y

1-A-Bx1)2+ (y2-A-Bx2)2+...+ (yN-A-BxN)2

= (yi-A-Bxi)2

 A e B são incógnitas (variáveis do erro quadrático).

 Logo, o erro quadrático total é função de duas variáveis A e B.

(29)

Estrutura de Dados

 Minimizar o erro quadrático total é encontrar os mínimos da função.

 O mínimo da função pode ser identificado quando a derivada da função se torna nula:

 Como o erro quadrático total é função de duas variáveis, é necessário derivar-se a expressão do erro total em relação a cada uma delas e igualá-las a zero:

(30)

Estrutura de Dados

T2/A = (y

i-A-Bxi) = 0 T2/B = (y

i-A-Bxi)xi = 0

 Abrindo os somatórios, as equações podem ser rescritas como:

yi = AN - Bxi

xiyi = Axi - Bxi2

 Seja SY = yi, SX = xi, SXX = xi2 e SXY = xiyi. Então,

resolvendo este sistema de equações para A e B, chegamos ao seguinte resultado:

A = [SYSXX SXYSX]/[NSXX SXSX] B = [NSXY SXSY]/[NSXX SXSX]

 Estes são os parâmetros de saída do algoritmo: o termo independente A e o coeficiente angular B.

(31)

Estrutura de Dados

 Os dados de entrada são os pares xi e yi.

 Cada dado deve ser armazenado em um vetor próprio x e y.  A saída é A e B.

 As variáveis auxiliares são SX, SY, SXX e SXY, além do contador i.

 Fixe o número máximo de dados em 50, como no exemplo anterior.

 O total de dados do usuário, N, deve ser informado no início do algoritmo e não deve ultrapassar o máximo de 50.

 Se N for maior que 50, o algoritmo deve prever uma

mensagem para o usuário alertando o problema e parar.  Isso se chama lógica defensiva.

(32)

Estrutura de Dados

Algoritmo Regressão Linear

 Data. 13/09/2011

 Autor. Luís Fernando

 Propósito. Determinar os parâmetros da reta de ajuste de

dados através do método dos mínimos quadrados.

 Método. A reta de ajuste segue o modelo Y=A+BX. Os

parâmetros de ajuste A e B são calculados a partir de médias simples e covariâncias dos pares de dados inseridos pelo

usuário (x,y). As variáveis internas são SX, SY, SXX e SXY: SY =

yi, SX = xi, SXX = xi2 e S

XY = xiyi , onde xi e yi são os dados

indexados do usuário. O índice i varia entre 1 e N, sendo N o número total de dados.

(33)

Estrutura de Dados

A partir destas variáveis, os parâmetros A e B podem ser

calculados: A = [SYSXX SXYSX]/[NSXX SXSX] e B = [NSXY SXSY]/[NSXX SXSX].

 Entradas e Saídas. Os dados do usuário e o total de dados são

as entradas. A saída são os parâmetros de ajuste da reta, ou seja, A e B.

 Observações, Requisitos e Restrições. O algoritmo está

preparado para operar sobre um conjunto máximo de 50 pares de dados.

(34)

Estrutura de Dados

algoritmo

declarar x[50], y[50] numérico {dados para ajustar}

declarar N numérico {total de dados}

declarar i numérico {contador}

declarar sx, sy, sxx, sxy numérico {variáveis auxiliares}

declarar A, B numérico {parâmetros da reta}

escrever “Entre com o total de dados (N):” ler N

se (N>50) então

escrever “O total de dados não pode passar de 50!”

{continua}

(35)

Estrutura de Dados

senão

{entrada de dados}

para i de 1 até N fazer

escrever “Entre com x”, i, “ e y”, i

ler x[i], y[i]

fim para

{cálculo de sx}

sx  0

para i de 1 até N fazer

sx  sx+x[i]

fim para

{continua}

(36)

Estrutura de Dados

{cálculo de sy}

sy  0

para i de 1 até N fazer

sy  sy+y[i]

fim para

{cálculo de sxx}

sxx  0

para i de 1 até N fazer

sxx  sxx+x[i]*x[i]

fim para

{continua}

(37)

Estrutura de Dados

{cálculo de sxy}

sxy  0

para i de 1 até N fazer

sxy  sxy+x[i]*y[i]

fim para

{cálculo de A e B}

A  (sy*sxx - sx*sxy)/(N*sxx - sx*sx) B (N*sxy - sx*sy)/(N*sxx - sx*sx)

{saída dos parâmetros A e B}

escrever “Os parâmetros são: A=”, A, “ e B=”, B

fim se

fim algoritmo

Referências

Documentos relacionados

Esta criatura é derrubada: a próxima carta jogada nela que usaria o valor de movimento rápido utilizará seu valor de movimento lento (seu bônus de jogo sujo não se aplica).

Tratando-se de um arrendamento não habitacional, é evidente que as obras executadas pelo inquilino são as exigidas para desenvolver ou melhorar a sua atividade e o seu

“A posição dominante diz respeito a uma posição de poder económico detida por uma empresa que lhe permite afastar a manutenção de uma concorrência efetiva no mercado

V14J Corona Fecha Día Manecilla de hora Manecilla de minuto Manecilla de segundo Manecilla de 24

E2) É desenvolver técnicas para a preservação do meio ambiente utilizando as tecnologias disponíveis, avalia o impacto de obras no meio ambiente com o intuito de prevenir a

a) Eleger apenas uma área ou modalidade das listadas no item 5.2 e ser coordenado por docente com vínculo em curso de licenciatura da UFSM, com formação

( ) Recompor a reserva legal de sua propriedade mediante o plantio, a cada três anos, de no mínimo 4/10 da área total necessária à sua complementação, com espécies nativas, de

• O índice de um caractere em uma cadeia de caracteres é um inteiro que começa com 0 para o primeiro caracter e indica a posição do