» »

Program v matlabu

Program v matlabu

Boomerang ::

Lp! Zanima me, ali slučajno kdo dobro pozna Matlab? Rabil bi pomoč pri reševanju ene naloge. Vse kar morate narediti je, da mi razložite program, in sicer vrstico za vrstico - step by step in čim bolj po domače. Če ste razpoloženi za programiranje, mi ga lahko tudi pretvorite v C, Javo ali kakšen drugi jezik, ki ga poznam, o Matlabu pa res nimam blage veze. Da bo bolj razumljivo, imam komentarje za posamezne segmente, vendar še vedno ne razumem določenih vrstic.

Program najdete tukaj: http://matlab.net76.net/matlab.zip

Prenesite datoteko in jo odzipajte. Vsebuje le eno txt datoteko, kjer je zapisan program v Matlabu. Naloge namreč ne morem narediti, če ne vem kaj in kako počne program, zato mi boste precej pomagali, če mi samo tolmačite vrstice. Ne bi vas prosil, če ne bi bilo nujno potrebno, zato že vnaprej hvala.

Math Freak ::

pnet

Najbolje da probavaš eno funkcijo za drugo, kaj katera dela.

Recimo v Matlabu vtipkaš "help disp" in ti pove, da funkcija "disp" izpisuje niz brez imena spremenljivke.

Primer:
>> a= 'nek niz';
>> disp(a)
nek niz


2. Primer:
>> sporocilo = 'Testno sporocilo';
>> sporocilo
sporocilo =
Testno sporocilo

>> sporocilo = sporocilo + 3;
>> sporocilo
sporocilo =
    87   104   118   119   113   114    35   118   115   114   117   114   102   108   111   114

>> char(sporocilo)
ans =
Whvwqr#vsrurflor

>> double('Whvwqr#vsrurflor')
ans =
    87   104   118   119   113   114    35   118   115   114   117   114   102   108   111   114


Opaziš, da so se vsi znaki v nizu zamaknili za 3 naprej in pretvorili v kodirane znake.

itd...

Boomerang ::

To še razumem... nekako razberem iz ukazov in sintakse. Zatakne se mi proti koncu, kjer so gnezdene zanke in dolgi stavki. Tik pred ukazom pause sem poskušal rezultat izpisati in mi je izpisalo niz enic in ničel. Potem sem ta niz poskušal povrniti v začetno vrednost (torej bi moral dobiti stavek Testno sporocilo) in mi nikakor ne gre.

Math Freak ::

n_seg = ceil(length(sporocilo)/8);

-> Sporočilo je bilo dolgo 16 znakov, zato dobiš dva segmenta.
Torej n_seg = 2

pak = cell(1,n_seg);

-> ustvariš pak, ki je tipa cell, dimenzije 1x2

for k = 1 : n_seg
    if k == n_seg
        pak{k}.data = sporocilo((k-1)*8+1:end);
    else
        pak{k}.data = sporocilo((k-1)*8+1:k*8);
    end
end


-> Napolniš pak s podatki: če je k zadnji del sporočila, potem ga napolniš s preostankom znakov, sicer ga pa polniš z zaporedji osmih znakov.

for k = 1:n_seg
    pak{k}.id = 1;
    pak{k}.tip = 1;
    pak{k}.prejemnik = 1;
    pak{k}.npak = n_seg;
    pak{k}.kpak = k;
    pak{k}.dolz = length(pak{k}.data);
end


-> tukaj si dodal glavo podatkom, recimo npak ti pove, na koliko delov si razdelil sporočilo, kpak ti pove kateri del sporočila je trenutni del, dolz ti pove, koliko znakov vsebuje trenutni del sporočila.

Potem pa pride še zadnja for zanka. Preden greš v zadnjo zanko izgledajo podatki takole:

>> pak{1}
ans = 
         data: [87 104 118 119 113 114 35 118]
           id: 1
          tip: 1
    prejemnik: 1
         npak: 2
         kpak: 1
         dolz: 8

>> pak{2}
ans = 
         data: [115 114 117 114 102 108 111 114]
           id: 1
          tip: 1
    prejemnik: 1
         npak: 2
         kpak: 2
         dolz: 8


data_bin = dec2bin(pak{k}.id,16);

Dobiš: 0000000000000001

data_bin = [data_bin,dec2bin(pak{k}.tip,8)];

Dobiš: 000000000000000100000001

Vsaka naslednja ti bo samo nalagala določeno število ničel (to ti pove argument 16 oz. 8 v dec2bin funkciji) in pretvarjala število v binarni zapis.

Potem na koncu šele dodaš besedilo v binarni zapis s to kodo:
(nahaja se v pak{k}.data):
    for l = 1:8
        if l <= l_data
            data_bin = [data_bin,dec2bin(uint8(pak{k}.data(l)),8)];
        else
            data_bin = [data_bin,dec2bin(uint8(0),8)];
        end
    end


Sepravi se tvoje besedilo nahaja na koncu, pred tem pa imaš id, tip, prejemnik, itd ...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Python - pomoč (strani: 1 2 3 )

Oddelek: Programiranje
10318028 (8776) black ice
»

Hacked

Oddelek: Izdelava spletišč
111446 (807) stb
»

[C#] Operacija IN in ALI med dvema int številoma

Oddelek: Programiranje
111169 (982) LeQuack
»

[Access 2007]

Oddelek: Programiranje
132627 (2227) urosz
»

[php] mail() funkcija

Oddelek: Izdelava spletišč
61639 (1587) t3hn0

Več podobnih tem