Matlab/Octave zamiana liczby na zapis slowny

0

Witam!
mam do napisania program, który ma działać w programie QtOctave, z tego co sie orientuję składnia tego programu jest taka sama bądź bardzo podobna do Matlab'a. Ten program ma zamieniać wpisaną liczbę na jej zapis słowny. Ma być użyta tu funkcja. Podsumowując wprowadzam dane typu string z zakresu od zera do biliona a otrzymuje napis w string'u. dodatkowym warunkiem choć myślę, że tu chodzi tylko o kosmetykę jest forma zapisu:
tys. - tysiąc, mln. - milion, mld. - miliard, bln. – bilion
przykładowe działanie programu :
‘jeden tys. Dwiescie trzydziesci cztery’ = fun(1234)
wpadłem na pomysł żeby robić to funkcją "if" ale nie mam w tym doświadczenia i czas mnie goni... proszę o pomoc
pozdrawiam

1

Witam

Realizacja tego zadania przy pomocy if byłaby niesłychanie żmudna ; już lepiej byłoby użyć
przełącznika switch. A najlepiej zamienić wczytywaną liczbą na łańcuch, a następnie podzielić ten łańcuch na elementarne cyfry. Cyfry te ( po ponownej zamianie na liczby ) stanowiłyby indeksy w odpowiedniej tablicy dwuwymiarowej ( np. tablicy komórkowej ) :

words = { 'jeden' , 'dziesięć , 'sto ' , 'tysiąc' ; 'dwa' , 'dwadzieścia' , 'dwieście' , 'dwa tysiące' } ; itp.

Wówczas wartość cyfry stanowiłaby jeden z indeksów tej tablicy ; natomiast pozycja tej cyfry w zapisie liczby ( w łańcuchu "głównym" ) stanowiłaby drugi z indeksów tej tablicy.
Problemy tego rodzaju można też przedstawiać na specjalizowanym forum dla użytkowników
Matlaba, Octave czy Scilaba :

http://www.matlab.pl

                                                                                     Pozdrawiam

                                                                                            JK
0

nie wiem czy chodziło o coś takiego... poszukałem też na forach anglojęzycznych i zrealizowałem program w taki sposób:
do sprawdzania dziesiątek służy ta funkcja(tens):

function words = tens(u, words)
global number

% badanie ostatnich dwoc cyfr z ostatnej grupy trojek
if u == 0
words = [words];
return
end

% szuaknie wlasciwego indexu wielokrotnosci 10
words = [words ' ' number{floor((u - 20)/10 + 20)}];
units = u - floor(u/10)*10;
if units == 0
return
end

% dodaje myslnik i odpowiednia jednostke jesli taka istnieje
words = [words ' ' number{units}];

do setek (hundreds) ta :

function words = hundreds(amount, words, h, u)
global number

% szukanie setek jesli sa
hu = floor(amount - h1e5 - u1e3);
if (hu == 0)
words = [words];
return
end

h = floor(hu/100);
if h > 0
words = [words ' ' number{h} ' setki/setek'];
end

u = hu - h*100;
if (0 < u) & (u < 21)
words = [words ' ' number{u}];
else
words = [words tens(u, [])];
end

natomiast tysiące(thousands) są szukane tutaj:

function [words, h, u] = thousands(amount)
global number

words = [];
% szuaknie tysiecy jesli sa
t = floor(amount/1000);
if (t == 0)
h = 0;
u = 0;
return
end

% szuaknie setek
h = floor(amount/100000);

if h > 0
words = [number{h} ' sto/dwiescie/sta/set'];
end

u = floor(amount/1000) - h*100;
if (0 < u) & (u < 21)
words = [words ' ' number{u}];
else
words = [words tens(u, [])];
end

% zakonczenie slowem 'tys'
words = [words ' tys'];

wszystko jest sklejone w tym pliku :

number = {'JEDEN', 'DWA', 'TRZY', 'CZTERY', 'PIEC',...
'SZESC', 'SIEDEM', 'OSIEM', 'DZIEWIEC', 'DZIESIEC',...
'JEDENASCIE', 'DWANASCIE', 'TRZYANSCIE', 'CZTERNASCIE', 'PIETNASCIE',...
'SZESNASCIE', 'SIEDEMNASCIE', 'OSIEMNASCIE', 'DZIEWIETNASCIE',...
'DWADZIESCIA', 'TRZYDZEISCI', 'CZTERDZIESCI', 'PIECDZIESIAT',...
'SZESCDZIESIAT', 'SIEDEMDZIESIAT', 'OSIEMDZIESIAT', 'DZIEWIECDZIESIAT'};

disp('-----------------------zamien liczbe na slowo -----------------------')
disp(' 0_o ')
a = input('podaj liczbe(od 1 do 999999): ', 's');
amount = str2num(a);
if (amount < 1)|(amount > 999999)
disp('~~~~~~~~~~~~liczba poza dozwolonym zakresem~~~~~~~~~~~~~~')

end
x = input('wcisnij enter aby dokonac konwersji ', 's');
disp(' ')

amount_str = [' '...
' ' a];
disp(amount_str)
disp('')
[words, h, u] = thousands(amount);
words = [hundreds(amount, words, h, u)];
disp(words)

nie zrobiłem milionów i bilionów bo nie wystarczyło mi czasu i ochoty. pewnie jest jakis prostszy i przyjemniejszy sposób.... ja skleiłem i przerobiłem ten program z kilku innych :) jak ktoś zrobi to inaczej może się pochwalić :D
pozdrawiam i dzieki za pomoc koniaku

1 użytkowników online, w tym zalogowanych: 0, gości: 1