Matlab fórum
Převod sousat - Verzia pre tlač

+- Matlab fórum (http://matlab.sk)
+-- Fórum: Matlab (/forumdisplay.php?fid=4)
+--- Fórum: Programovanie / Programming (/forumdisplay.php?fid=5)
+--- Téma: Převod sousat (/showthread.php?tid=33)



Převod sousat - Nymik - 03-14-2013 15:30

Dobrý den, potřeboval bych poradit jak pozměnit kod, tak aby vypisoval i čísla od 11tkové soustavy do 16tkové v nasledujícím kodu:

M soubor:

a = input('Zadej číslo v desítkové soustavě: ');
b = input('Zadej zaklad soustavy: ');
bin = decbin(a, b);
str = sprintf('%1d je v binarním kodu %1s.', a, bin);
disp(str);

a funkce :

function [bin] = decbin(dec, zaklad)
% Funkce vrací řetězec znaků odpovídající číslu v dec. v soustvě základ
dec = int32(dec);
zaklad = int32(zaklad);
bin = '';
while (dec ~= 0)
zbytek = rem(dec, zaklad);
dec = idivide(dec, zaklad, 'fix');
bin = strcat(char(48 + zbytek), bin);
end


Předem děkuju.


RE: Převod sousat - Larry - 03-15-2013 19:29

vymyslel som nieco taketo:

program:
Kód:
zo_sustavy = input('Zo sustavy: '); % 2-16
do_sustavy = input('Do sustavy: '); % 2-16
cislo = input('Cislo: ');
fromBaseToBase( zo_sustavy, do_sustavy, cislo )

funkcia (fromBaseToBase.m) :

Kód:
function [new_number] = fromBaseToBase(from, to, number)    
    allchars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
    allchars_int32 = int32( allchars );

    if ( from ~= 10 ) %najskor dam do 10kovej ak v nej nieje
        number_ten = 0;
        tmp = int32( number );
        i = length( tmp );
        while ( i > 0 )
            pow = length( tmp ) - i;
            number_ten = number_ten + ( find( allchars_int32==tmp(i) ) - 1 ) * from^pow;
            i = i - 1;
        end

    else
        number_ten = number;
    end
    %prevod z 10 do zadanej v prementj 'to'
    number_ten = int32(number_ten);
    to = int32(to);
    new_number = '';
    while( number_ten ~= 0 )
        rest = rem( number_ten, to );
        number_ten = idivide( number_ten, to, 'fix' );
        new_number = strcat( allchars(rest+1), new_number );
    end

end

ak je cislo (number) v inej ako 10kovej sustave treba ho dat do uvodzovniek '<cislo>'
mozno sa to da aj nejako lahsie, s pomocou funkcii matlabu ale to som nezistoval


RE: Převod sousat - Nymik - 03-18-2013 09:54

Děkuju moc za odpověď Smile.