You are on page 1of 9

UNIVERSIDADE ESTADUAL PAULISTA

“JÚLIO DE MESQUITA FILHO”


Faculdade de Engenharia-Câmpus de Ilha Solteira.
DEPARTAMENTO DE MATEMÁTICA

Atividade 1

Marcelo Ikura Fujimura


Davi Moraes Monelli

Fábio Roberto Chavarette

Ilha Solteira – São Paulo


11 de abril de 2018
1
SUMÁRIO
1. Introdução.................................................................................................................. 3
2. Métodos ..................................................................................................................... 3
3. Experimentos Numéricos .......................................................................................... 3
4. Conclusão .................................................................................................................. 4
5. Apêndice.................................................................................................................... 4

2
1. Introdução

Com a assistência do software Octave, foram resolvidos exercícios referentes à


matéria dada até o referido momento na discipilina Aspectos Avançados de
Programação com o objetivo de fixar e auxiliar no entendimento, de uma maneira
prática, da matéria. Tais exercícios tem como a temática: problemas simples de erros,
funções e recursividade.

2. Métodos

O exercício 1 é dividido em duas partes. A primeira parte consiste na construção de


uma função, chamada binaTOdeci, para a conversão de números reais de uma base
binária para uma base decimal. O maior número a ser convertido consiste em um
número binário de trinta 1s, dando mensagem de erro caso fornecido um número maior.
A segunda parte do exercício, é necessário converter números reais de base decimal
para a base binária usando uma função chamada deciTObina. O número binário consiste
de, no máximo, 30 caracteres, 15 elementos antes e 15 elementos depois da vírgula. Se
for fornecido um número maior que 30 caracteres, os algorismos, as posições a direita
da décima quinta casa depois da vírgula será cortada.
O exercício 2 envolve o uso da série de Taylor para cálculo de uma função
exponencial. É necessário informar o número de termos da série necessários para
cálculo da mesma e o exponente da funcão exponencial. Em seguida, é calculado o Erro
Relativo Real usando-se o valor encontrado anteriormente e o valor exato da função.
Tanto o Erro quanto o valor aproximado da função foram arredondados na sexta casa
decimal.

3. Experimentos Numéricos
Segue, a tabela com os resultados da primeira parte do exercício 1, tanto com os
testes para validação do programa, com suas respectivas entradas e resultados, quanto
para os exercícios propostos, com suas respectivas entradas e resultados
Entrada Saída
entre com o valor binario a o numero convertido para
Testes ser convertido para decimal decimal
1101.11 13.75
101010.1010 42.62
11000101.101 197.62
Exercícios Propostos
10010101110001.01110101 9585.25

Segue, a tabela com os resultados da segunda parte do exercício 1, tanto com os


testes para validação do programa, com suas respectivas entradas e resultados, quanto
para os exercícios propostos, com suas respectivas entradas e resultados

3
Entrada Saída
entre com o valor decimal a o numero convertido para
Testes ser convertido para binario binario
22 01101
1 0 1 0 1 0 1.1 0 1 0
85,321
1 0 1
0,00671 0.0
Exercícios Propostos
0 1 1 1 1 1 0 1 1 1 0
3006,42 1.0 1 1 1 1 1 0 1 1 1
0 1

Segue, a tabela com os resultados do exercício 2, tanto com os testes para validação
do programa, com suas respectivas entradas e resultados, quanto para os exercícios
propostos, com suas respectivas entradas e resultados
Entrada Saída
digite o
numero de digite o erro
termos da valor da valor
Testes
serie de exponencial
Taylor
3 -2 1 6.389056
10 -2 0.135097 0.001761
4 -2 -0.333333 3.463019
6 -2 0.066667 0.507396
Exercícios Propostos
8 -2 0.130159 0.038250
7 -1 0.368056 0.000479

4. Conclusão

Para o exercício 1 foi realizado tanto a conversao de binário para decimal quanto
para binário para decimal, com resultados conclusivos em ambos os casos

No exercício 2 foi realizado uma aproximação da série de Taylor, com erros de


arredondamento aproximados.

5. Apêndice

Seguem os códigos, escritos em Octave, para resolução dos quatro exercícios.


Exercício 1, parte 1:

4
Programa Principal para ambos as conversões
disp('o que deseja realizar: ');
disp('1-binario para decimal');
disp('2-decimal para binario');

n = input('escolha: ');

if n == 1

d = input('digite o valor: ');


binaTOdeci(d)

elseif n == 2

d = input('digite o valor: ');


binaTOdeci(d)

elseif

disp('digitou errado');

endif

Função:
function [b] = binaTOdeci (d)

i=1;
dec=0;
d1=0;
k=-1;

c = num2str(d); %%Transforma o numero binario fornecido em uma cadeia de


caracteres

5
t = length(c); %%Obtem o tamanho da cadeia de caracteres acima
if t<30
%%Cálculo da parte inteira
int=floor(d); %%Pega somente a parte a inteira do numero fornecido
tint=num2str(int);
lint=length(tint);
for(i=1:lint)
dec=dec+str2num(tint(i))*2^(lint-i); %%Método de transformação da parte inteira
endfor
%%Cálculo da parte decimal
t=num2str(d);
n=length(t);
pos=findstr(t,'.'); %%Procura a posição do "."
p=pos+1; %%Pega as posições a direita do "."
for (j=p:n) %%Método de transformação da parte decimal, da posição a direita do "."
ate o tamanho da cadeia
d1=d1+str2num(t(j))*2^(k);
k=k-1;
endfor
b=dec+d1; %%Soma as partes inteiras e decimal

else

disp('numero com mais de 30 caracteres!');

endif
endfunction

Segunda parte do exercicio 1:


Função:
function [b] = deciTObina (d)

i=1;

6
j=1;
int=floor(d); %pega a parte inteira do numero
dd=d-int; %pega a parte decimal do numero
disp(dd);

%parte inteira
while(d>0)

r=mod(d,2); %resto da divisao de "d" por 2


nb(i)=floor(r); %salva o arredondamento de "r" no vetor nb
i=i+1; %contador
d=floor(d/2); %metodo de conversao

endwhile

%parte decimal;
while(dd!=0) %confere se existe parte fracionaria

dd=dd*2; %multiplica a parte fracionaria por 2


if(dd<1) %se for menor que 1 salva 0
nbf(j)=0;
else %se for maior que 1 salva 1
dd=dd-1;
nbf(j)=1;
endif
j=j+1; %contador

endwhile

nb2=num2str(nb); %converte o "nb" para numero


nbind2=num2str(nb2); %converte o "nb" para numero
r=('.');

7
if dd > 0

b=strcat(nb2,r,nbind2); %concatena a parte inteira com "." e com a parte fracionaria


s=str2num(b)

else

%b=strcat(nb2); %concatena a parte inteira com "." e com a parte fracionaria


s=str2num(nb2)

endif

endfunction

Exercício 2:
clc;
clear;
format long
n = input('digite o numero de termos da serie de Taylor: '); %%Entrada do número
de termos da série de Taylor

%%Erro caso a entrada dê um número de termos negativos, o que não é possível


if n <= 0
disp('erro!');
else

%%Entrada do valor da exponencial


x = input('digite o valor da exponencial: ');

ft = 1; %%Fatorial começa em 1
s = 0;
y = 1+x;

8
%%Cálculo do fatorial e da série de Taylor que envolve os termos que tem fatorial
for ii=2:n-1

ft = ft*ii; %%Cálculo do fatorial

f =(x.^(ii)./ft); %%Cálculo da série de Taylor que envolve os termos que tem


fatorial, usando o fatorial calculado
s = s+f;
endfor

s1 = s+y; %%Cálculo da série de Taylor total

er = (abs((e.^x)-s1))./abs(e.^x); %%Cálculo do erro relativo real

%%Imprimindo os resultados, arredondando na sexta casa


fprintf('\n valor: %8.6f \n',s1);
fprintf('\n erro: %8.6f \n',er);
disp('');

endif

You might also like