Você está na página 1de 10

UNIVERSIDADE FEDERAL DE PERNAMBUCO

CENTRO ACADMICO DO AGRESTE


NCLEO DE TECNOLOGIA
CURSO DE ENGENHARIA CIVIL

CLCULO NUMRICO

TRABALHO SUBMETIDA UFPE


COMO ATIVIDADE COMPLEMENTAR
DA DISCIPLINA DE CLCULO NUMRICO
POR

Ronniery Bezerra de Lima

Prof. Alessandro R. E. Antunes

CARUARU, Abril de 2014


Programa para converter nmeros binrios em decimais
utilizando o MATLAB
Nmero para converter: 10010100

% A1 minha entrada, sendo assim este a varivel que contm o %


nmero binrio que deseja-se converter
% em decimal
format long
A1=10010100;

A1= abs(A1);

B1= A1 - fix(A1); % Separando o nmero inteiro do parte decimal


A1= fix(A1);
A3=A1;
B2=0;
b=0;
% Aqui esto algumas restries
if A1==1 & B1==0 % Caso o nmeroo seja 1 (inteiro)
fprintf(' %d\n ',A1)

elseif A1==0 & B1==0 % Caso o nmero seja 0(inteiro)


fprintf(' %d \n',A1)

elseif A1~= 1 & B1==0 % Caso a entrada seja somente um nmero


inteiro

while A1~= 1 % Saber o nmero de vezes que o n binrio foi


dividido
A1 = fix(A1/10); % Salvando em b
b=b+1;
end
A2=0;
while A3~= 1
for a=1 :1:b %Utilizando de b para salvar o nmero em um vetor
A2(1,a)= (mod(A3,10));
A3 = fix(A3/10);
if A3==1
A2(1,a+1)= A3;
end
end
end
soma=0;
for a=1:1:(b+1) % Fazendo todo o clculo com a soma (parte inteira)
soma= (A2(1,a)*2^(a-1))+soma;
end
fprintf('%d\n',soma) %sada

elseif B1 ~= 0 & A1==0


% Caso o nmeroo de entrada seja somente fracinada
% Considerando at um certo nmeroo de casas decimais

b=0;
while B1 ~= 0
B3=B1; % Descobrindo o valor da varivel b
while B3 ~= 0
b=b+1;
multp= B3*10;
if multp>=1
B3= multp-fix(multp);
else
B3=multp;
end
end
soma=0;
for k=1:1:b % Salvando os nmeros dados em um vetor
% Fazendo o Clculo desses nmeros
multp= B1*10;
if multp>=1
B2(1,k)= 1;
B1= multp-fix(multp);
soma = (B2(1,k)*2^(-k))+soma;
else
B2(1,k)= 0;
B1=multp;
soma = (B2(1,k)*2^(-k))+soma;
end
end
end
fprintf(' %.15f \n',soma) %Sada

elseif A1~= 1 & B1 ~= 0 % Repetio dos processo acima citados

while A1~= 1
A1 = fix(A1/10);
b=b+1;
end
A2=0;
while A3~= 1
for a=1 :1:b
A2(1,a)= (mod(A3,10));
A3 = fix(A3/10);
if A3==1
A2(1,a+1)= A3;
end
end
end
soma1=0;
for a=1:1:(b+1)
soma1= (A2(1,a)*2^(a-1))+soma1;
end
b=0;
while B1 ~= 0
B3=B1;
while B3 ~= 0
b=b+1;
multp= B3*10;
if multp>=1
B3= multp-fix(multp);
else
B3=multp;
end
end
soma=0;
for k=1:1:b
multp= B1*10;
if multp>=1
B2(1,k)= 1;
B1= multp-fix(multp);
soma = (B2(1,k)*2^(-k))+soma;
else
B2(1,k)= 0;
B1=multp;
soma = (B2(1,k)*2^(-k))+soma;
end
end
end
soma_total=soma + soma1;
fprintf(' %.15f\n',soma_total)

end

Sada: 148

Outros exemplos:

Entrada: 11010101010101111110
Sada: 874096

Entrada: 10100.1
Sada: 20.500243544518526

Entrada: 1 0 1 1 1 1 1
Sada: 95

Entrada: 100100101
Sada: 293

Entrada: 1001.00101
Sada: 9.156242370598193

Entrada: 10000.1
Sada: 16.500243544518526

Entrada: 10000.11
Sada: 16.750227924421779

Entrada: 10
Sada: 2

Entrada: 0
Sada: 0

Entrada: 1
Sada: 1
Programa para converter nmeros decimais em binrios
utilizando o MATLAB
Nmero para converter: 148

% A1 minha entrada, ou seja, o nmero que eu preciso converter


% Esse nmero pode ser tanto fracionrio quanto decimal

A1=148;

A1= abs(A1);

B1= A1 - fix(A1); % Separando o nmero inteiro do parte decimal


A1= fix(A1);
A3=A1;
B2=0;
b=0;

% Aqui esto algumas restries

if A1==1 & B1==0 % Caso o nmeroo seja 1 (inteiro)


fprintf(' %d \n',A1)

elseif A1==0 & B1==0 % Caso o nmero seja 0(inteiro)


fprintf(' %d \n',A1)

elseif B1 ~= 0 & A1 == 0 % Caso o nmeroo de entrada seja somente


decimal
% Considerando at um certo nmeroo de
casas
% decimais
b=0;
while B1 ~= 0
B3=B1;
while B3 ~= 0 % Descobrir quantas vezes foi preciso
multiplicar
b=b+1; % Salvando em b esse nmero
multp= B3*2;
if multp>=1
B3= multp-fix(multp);
else
B3=multp;
end
end
for k=1:1:b
multp= B1*2; % salvando (modulo) 1 ou 0 em um vetor
if multp>=1
B2(1,k)= 1;
B1= multp-fix(multp);
else
B2(1,k)= 0;
B1=multp;
end
end
end

fprintf('0,')
if size(B2,2)>= 15
fprintf(' %d',B2(1:15))
fprintf(' \n')
else
fprintf(' %d',B2) % Sada
end

elseif A1~= 1 & B1==0 % Caso a entrada seja somente um nmero inteiro

while A1~= 1
A1 = fix(A1/2); % Descobrindo o nmeros de divises b
b=b+1;
end
A2=0;
while A3~= 1
for a=1 :1:b
A2(1,a)= (mod(A3,2));
A3 = fix(A3/2); % Salvando o vetor com a resposta
if A3==1 % Resposta ainda no invertida
A2(1,a+1)= A3;
end
end
end
RA2=0;
for i=1 :1: size(A2,2) % Invertendo a resposta
c=size(A2,2) +1;
RA2(1,c-i)=A2(1,i);

end

fprintf(' %d',RA2) % Sada


fprintf(' \n')

elseif B1 ~=0 & A1 ~= 0


% Caso a entrada se ja tanto um nmero inteiro e fracionrio
% Repetindo todo o procedimento acima
b=0;
w=A1;
while B1 ~= 0
B3=B1;
while B3 ~= 0
b=b+1;
multp= B3*2;
if multp>=1
B3= multp-fix(multp);
else
B3=multp;
end
end
for k=1:1:b
multp= B1*2;
if multp>=1
B2(1,k)= 1;
B1= multp-fix(multp);
else
B2(1,k)= 0;
B1=multp;
end
end
end
b=0;
while A1~= 1

A1 = fix(A1/2);
b=b+1;
end
A2=0;
while A3~=1
for a=1 :1:b
A2(1,a)= (mod(A3,2));
A3 = fix(A3/2);
if A3==1
A2(1,a+1)= A3;
end
end
end
RA2=0;
for i=1 :1: size(A2,2)
c=size(A2,2) +1;
RA2(1,c-i)=A2(1,i);

end
if w==1
RA2=1;
end
% Sadas
fprintf(' %d',RA2)
fprintf(',')
if size(B2,2)>= 15
fprintf(' %d',B2(1:15))
fprintf('\n')
else
fprintf(' %d',B2)
fprintf('\n')
end
end

Sada: 1 0 0 1 0 1 0 0

Outros exemplos:

Entrada: 873854
Sada: 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0

Entrada: 20.500243544518526
Sada: 1 0 1 0 0, 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1

Entrada: 100000001
Sada: 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1

Entrada: 16.5
Sada: 1 0 0 0 0, 1

Entrada: 16.75
Sada: 1 0 0 0 0, 1 1
Entrada: 1
Sada: 1

Entrada: 0
Sada: 0

Entrada: 867583938
Sada: 1 1 0 0 1 1 1 0 1 1 0 1 1 0 0 1 0 0 0 1 1 1 1 1 0 0 0 0 1 0

Entrada: 18.9586748
Sada: 1 0 0 1 0, 1 1 1 1 0 1 0 1 0 1 1 0 1 0 1

Entrada: 2.5
Sada: 10,1

Você também pode gostar