Contents

Belső ábrázolás

Ha

a=5.5
whos
a =

    5.5000

  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              

akkor látjuk hogy a értéke "double" tipusú valós értékként van tárolva 8 byteon. Lehet hogy mi olyan számokat próbálnánk eltárolni amik kisebb helyen is elférnek. Például

b=int8(6)
whos
b =

  int8

   6

  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  b         1x1                 1  int8                

Így "b" értéke olyan egész ami 0-tól 127-ig vesz fel értéket. Ha pélául az összes magyar ember gyermekeinek számát akarom eltárolni akkor szerencsésebb ilyen formába tárolni őket. De vigyázzunk mert:

c=a+b
whos
c =

  int8

   12

  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  b         1x1                 1  int8                
  c         1x1                 1  int8                

ilyenkor az összeadásnál "a" értékét is egészre kerekíti a kövekezőképp:

int8(a)
ans =

  int8

   6

Szövegek tárolása

Szövegeket tárolhatunk karaktervekotrokként és "string"-ként is. Pl:

s='Monoton üget a süppedő homokon a sivatag lova, a tétova teve tova...'
whos
s =

    'Monoton üget a süppedő homokon a sivatag lova, a tétova teve tova...'

  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  ans       1x1                 1  int8                
  b         1x1                 1  int8                
  c         1x1                 1  int8                
  s         1x68              136  char                

Látjuk, hogy itt az "s" változó egy karaktervektor.

s2=string(s)
whos
s2 = 

    "Monoton üget a süppedő homokon a sivatag lova, a tétova teve tova..."

  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  ans       1x1                 1  int8                
  b         1x1                 1  int8                
  c         1x1                 1  int8                
  s         1x68              136  char                
  s2        1x1               232  string              

Az "s2" változó típusa "string" (kicsit több helyet foglal mint a karaktervektor). A stringek és karaktervektorok kicsit máshogy viselkednek:

s3='Ez valami'
s4='ez Valami'
[s3 s4]
s3 =

    'Ez valami'


s4 =

    'ez Valami'


ans =

    'Ez valamiez Valami'

például ha a karaktervektorokból alkotok vektort akkor összefűzi őket

s5=string(s4)
[s2 s5]
s5 = 

    "ez Valami"


ans = 

  1×2 string array

    "Monoton üget a süppedő homokon …"    "ez Valami"

Ha viszont stringeket rakok a vektorba akkor string vektort kapok. Ha például emeberek vezetékneveit kéne eltárolnom akkor az string vektorként érdemes. A karaktervektor/string felosztás a 2017a verzióban jelent meg először ezért a régebbi függvények a karaktervektorokat még stringnek rövidítik. Ha karaktervektorokat akarnánk összehasonlítani:

s3==s4
ans =

  1×9 logical array

   0   1   1   0   1   1   1   1   1

Akkor csak azonos hosszú vektorokat lehet összehasonlítani és kimenetként logikai vektort kapunk. Ha az szeretnénk tudni hogy a két karaktersorozat azonos-e akkor erre külön függvényt kell használnunk:

strcmp(s3,s4)
ans =

  logical

   0

Vagy ha nem szeretnénk, hogy számítson a kisbetű, nagybetű akkor:

strcmpi(s3,s4)
ans =

  logical

   1

Az isletter() függvény akkor ad igaz értéket, ha a bemeneti karakter betű (és nem space, vessző pont, stb).

isletter(s)
ans =

  1×68 logical array

  Columns 1 through 19

   1   1   1   1   1   1   1   0   1   1   1   1   0   1   0   1   1   1   1

  Columns 20 through 38

   1   1   1   0   1   1   1   1   1   1   1   0   1   0   1   1   1   1   1

  Columns 39 through 57

   1   1   0   1   1   1   1   0   0   1   0   1   1   1   1   1   1   0   1

  Columns 58 through 68

   1   1   1   0   1   1   1   1   0   0   0

karaktervektornál az isletter() kimenete egy logikai vektor. A karaktervektort számvektorrá is alakíthatjuk:

double(s)
ans =

  Columns 1 through 13

    77   111   110   111   116   111   110    32   252   103   101   116    32

  Columns 14 through 26

    97    32   115   252   112   112   101   100   337    32   104   111   109

  Columns 27 through 39

   111   107   111   110    32    97    32   115   105   118    97   116    97

  Columns 40 through 52

   103    32   108   111   118    97    44    32    97    32   116   233   116

  Columns 53 through 65

   111   118    97    32   116   101   118   101    32   116   111   118    97

  Columns 66 through 68

    46    46    46

Így láthatjuk, hogy a Matlab milyen betűt milyen számként ábrázol.

Első közös feladat:

Írjunk olyan betuSzam nevű függvényt ami megszámolja a betűket egy bemenetként kapott karaktervektorban. Bónusz feladat: ha több bemenetet kap akkor a második bemenetként kapott karakterek számát számolja meg.

function ki=betuSzam(v,c)
if nargin==1
    ki=sum(isletter(v));
else
    ki=sum(double(c)==double(v));
end


Teszteljük:

betuSzam(s)
betuSzam(s,'a')
ans =

    53


ans =

     8

Látjuk hogy "string"-re nem működik a függvényük, mert pl:

double(s2)
ans =

   NaN

Viszont ha a "string"-et karaktervektorrá alakítom akkor igen:

double(char(s2))
ans =

  Columns 1 through 13

    77   111   110   111   116   111   110    32   252   103   101   116    32

  Columns 14 through 26

    97    32   115   252   112   112   101   100   337    32   104   111   109

  Columns 27 through 39

   111   107   111   110    32    97    32   115   105   118    97   116    97

  Columns 40 through 52

   103    32   108   111   118    97    44    32    97    32   116   233   116

  Columns 53 through 65

   111   118    97    32   116   101   118   101    32   116   111   118    97

  Columns 66 through 68

    46    46    46

Első Házi feladat

Írjunk latinKodolo nevű függvényt ami a bemeneti karakervektort számmá alakítja hozzáad egyet majd visszalakítja szöveggé! Írjunk mellé egy dekodoló függvényt is!

function kimenet=latinKodolo(szoveg)
kimenet=char(double(szoveg)+1);
end
kodoltS=latinKodolo(s)
kodoltS =

    'Npopupo!ýhfu!b!týqqfeŒ!ipnplpo!b!tjwbubh!mpwb-!b!uêupwb!ufwf!upwb///'

function kimenet=latinDekodolo(szoveg)
kimenet=char(double(szoveg)-1);
end
latinDekodolo(kodoltS)
ans =

    'Monoton üget a süppedő homokon a sivatag lova, a tétova teve tova...'

Bónusz házi feladat

Írjunk olyan kódoló függvényt ami kap egy bemenetként egy kódolandó karaktervektort és egy "kulcs" karaktervektort. A "kulcs" karartervektort ismételje addig amíg olyan hosszú nem lesz mint a kódolandó karaktervektor. A két karaktervektor alakítsa számvektorrá, adja össze őket és kimenetet alakítsa vissza szöveggé. Írjunk ehhez egy dekódoló függvényt is.

function kimenet=kodolo(szoveg,kulcs)
ciklikuskulcs=[repmat(kulcs,1,floor(length(szoveg)/length(kulcs))),kulcs(1:mod(length(szoveg),length(kulcs)))];
kimenet=char(double(szoveg)+double(ciklikuskulcs));
end
kodoltS=kodolo(s,kulcs)
kodoltS =

    'ÃÐÚÐáØäŨÈÒÝ–ÂŒÔũÙæÆÐƲÑåÎÛÌÜ×–ÂŒÔÖß×ÕÍȍÕå×͍Ê–ÕŕÕÜßׁàÆãΖÕÛ×Η¤'

function kimenet=dekodolo(szoveg,kulcs)
ciklikuskulcs=[repmat(kulcs,1,floor(length(szoveg)/length(kulcs))),kulcs(1:mod(length(szoveg),length(kulcs)))];
kimenet=char(double(szoveg)-double(ciklikuskulcs));
end
dekodolo(kodoltS,kulcs)
ans =

    'Monoton üget a süppedő homokon a sivatag lova, a tétova teve tova...'

Fájlkezelés

xls (xlsx) fájlokat az xlsread paranccsal lehet beolvasni. Például letöltve a 2015.xls-t a honlapról:

M=xlsread('2015szept.xls')
M =

     []

Látjuk, hogy számokat akarja kiszedni az xls táblázatból. Mivel egy olyen cella sincs ebben a táblázatban ami tiszán számot tartalmazna ezért üresen tér vissza. Vigyázat! Bizonyos funkciók csak akkor működnek, ha az Excel ois telepítve van a gépünkön.

Ha máshogy hívjuk meg az xlsread-et:

[szamok,szoveg,osszes]=xlsread('2015szept.xls')
szamok =

     []


szoveg =

  31×10 cell array

  Columns 1 through 4

    'D�tum '         ''        ''        'Maxim�lis folyama…'
    '2015.09.01.'    '17�C'    '34�C'    '24 Km/h'            
    '2015.09.02.'    '14�C'    '30�C'    '28 Km/h'            
    '2015.09.03.'    '15�C'    '29�C'    '15 Km/h'            
    '2015.09.04.'    '16�C'    '26�C'    '28 Km/h'            
    '2015.09.05.'    '15�C'    '20�C'    '26 Km/h'            
    '2015.09.06.'    '12�C'    '20�C'    '39 Km/h'            
    '2015.09.07.'    '10�C'    '20�C'    '34 Km/h'            
    '2015.09.08.'    '6�C'     '19�C'    '26 Km/h'            
    '2015.09.09.'    '3�C'     '21�C'    'N/A'                
    '2015.09.10.'    '10�C'    '17�C'    'N/A'                
    '2015.09.11.'    '14�C'    '16�C'    '15 Km/h'            
    '2015.09.12.'    '11�C'    '21�C'    '9 Km/h'             
    '2015.09.13.'    '12�C'    '24�C'    '22 Km/h'            
    '2015.09.14.'    '13�C'    '27�C'    '24 Km/h'            
    '2015.09.15.'    '18�C'    '30�C'    '22 Km/h'            
    '2015.09.16.'    '17�C'    '30�C'    '34 Km/h'            
    '2015.09.17.'    '19�C'    '34�C'    '34 Km/h'            
    '2015.09.18.'    '16�C'    '31�C'    '24 Km/h'            
    '2015.09.19.'    '18�C'    '29�C'    '24 Km/h'            
    '2015.09.20.'    '13�C'    '24�C'    '37 Km/h'            
    '2015.09.21.'    '9�C'     '21�C'    '22 Km/h'            
    '2015.09.22.'    '6�C'     '21�C'    '21 Km/h'            
    '2015.09.23.'    '14�C'    '26�C'    '16 Km/h'            
    '2015.09.24.'    '14�C'    '27�C'    '26 Km/h'            
    '2015.09.25.'    '17�C'    '19�C'    '16 Km/h'            
    '2015.09.26.'    '14�C'    '17�C'    '15 Km/h'            
    '2015.09.27.'    '13�C'    '17�C'    '16 Km/h'            
    '2015.09.28.'    '12�C'    '18�C'    '32 Km/h'            
    '2015.09.29.'    '11�C'    '18�C'    '29 Km/h'            
    '2015.09.30.'    '10�C'    '16�C'    '32 Km/h'            

  Columns 5 through 7

    'Maxim�lis sz�ll�k…'    'Napi �sszes csapa…'    'H�m�lys�g '
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    '54 Km/h'                'N/A'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    '41 Km/h'                '0mm'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    '48 Km/h'                '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       

  Columns 8 through 10

    'L�gnyom�s '    'Ikon '    'Le�r�s '
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       
    'N/A'           ''         ''       


osszes =

  31×10 cell array

  Columns 1 through 4

    'D�tum '         [ NaN]    [ NaN]    'Maxim�lis folyama…'
    '2015.09.01.'    '17�C'    '34�C'    '24 Km/h'            
    '2015.09.02.'    '14�C'    '30�C'    '28 Km/h'            
    '2015.09.03.'    '15�C'    '29�C'    '15 Km/h'            
    '2015.09.04.'    '16�C'    '26�C'    '28 Km/h'            
    '2015.09.05.'    '15�C'    '20�C'    '26 Km/h'            
    '2015.09.06.'    '12�C'    '20�C'    '39 Km/h'            
    '2015.09.07.'    '10�C'    '20�C'    '34 Km/h'            
    '2015.09.08.'    '6�C'     '19�C'    '26 Km/h'            
    '2015.09.09.'    '3�C'     '21�C'    'N/A'                
    '2015.09.10.'    '10�C'    '17�C'    'N/A'                
    '2015.09.11.'    '14�C'    '16�C'    '15 Km/h'            
    '2015.09.12.'    '11�C'    '21�C'    '9 Km/h'             
    '2015.09.13.'    '12�C'    '24�C'    '22 Km/h'            
    '2015.09.14.'    '13�C'    '27�C'    '24 Km/h'            
    '2015.09.15.'    '18�C'    '30�C'    '22 Km/h'            
    '2015.09.16.'    '17�C'    '30�C'    '34 Km/h'            
    '2015.09.17.'    '19�C'    '34�C'    '34 Km/h'            
    '2015.09.18.'    '16�C'    '31�C'    '24 Km/h'            
    '2015.09.19.'    '18�C'    '29�C'    '24 Km/h'            
    '2015.09.20.'    '13�C'    '24�C'    '37 Km/h'            
    '2015.09.21.'    '9�C'     '21�C'    '22 Km/h'            
    '2015.09.22.'    '6�C'     '21�C'    '21 Km/h'            
    '2015.09.23.'    '14�C'    '26�C'    '16 Km/h'            
    '2015.09.24.'    '14�C'    '27�C'    '26 Km/h'            
    '2015.09.25.'    '17�C'    '19�C'    '16 Km/h'            
    '2015.09.26.'    '14�C'    '17�C'    '15 Km/h'            
    '2015.09.27.'    '13�C'    '17�C'    '16 Km/h'            
    '2015.09.28.'    '12�C'    '18�C'    '32 Km/h'            
    '2015.09.29.'    '11�C'    '18�C'    '29 Km/h'            
    '2015.09.30.'    '10�C'    '16�C'    '32 Km/h'            

  Columns 5 through 7

    'Maxim�lis sz�ll�k…'    'Napi �sszes csapa…'    'H�m�lys�g '
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    '54 Km/h'                'N/A'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    '41 Km/h'                '0mm'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    '48 Km/h'                '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    'N/A'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       
    'N/A'                    '0mm'                    'N/A'       

  Columns 8 through 10

    'L�gnyom�s '    'Ikon '    'Le�r�s '
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]
    'N/A'           [  NaN]    [    NaN]

akkor a számok ugyan továbbra is üresek lesznek, de most azok a cellák amikben az Excel szerint szöveg van azok tartalmából is készít egy cell típusú tömböt. A Excel felépítése miatt ezeknek a celláknak az értéke bármi lehet (akár vektor, tömb vagy kép is).

szoveg(2,2)
ans =

  cell

    '17�C'

Látjuk hogy a szokásos hivatkozás itt nem vezet sehova (amit kapunk az még mindig cell típusú amivel sokmindent nem tudunk csinálni). Cell típusú tömb (vektor) elemeire a "{" "}" zárójelekkel kell hivatkozni. Pl:

szoveg{2,2}
ans =

    '17�C'

Szeretnének a cella értékét számként megkapni. Ehhez először levágjuk a karaktervektor végéről a "°C"-t.

fok=szoveg{2,2}
fok(1:end-2)
fok =

    '17�C'


ans =

    '17'

Majd a '17'-et 17 (számmá) alakítjuk.

str2num(fok(1:end-2))
ans =

    17

Most meg szeretnénk kapni a napi minimumhőmérsékleteket egy (szám) vektorban:

Minhomerseklet=zeros(30,1);
for i=2:31
Minhomerseklet(i-1)=str2num(szoveg{i,2}(1:end-2));
end

Második házi feladat

A fentiekből kindulva keressük meg azt a napot ahol a hőmérséklet ingadozás a legnagyobb.

[szamok,szoveg,osszes]=xlsread('2015szept.xls');
Minhomerseklet=zeros(30,1);
for i=2:31
Minhomerseklet(i-1)=str2num(szoveg{i,2}(1:end-2));
end
Maxhomerseklet=zeros(30,1);
for i=2:31
Maxhomerseklet(i-1)=str2num(szoveg{i,3}(1:end-2));
end
[ertek,nap]=max(Maxhomerseklet-Minhomerseklet)
ertek =

    18


nap =

     9

Bónusz házi fealadat

Keressük meg (programmal) azt az Esős/Viharos Esős napot ahol a hőmérséklet ingadozás a legnagyobb.

for i=2:31
    Ido(i-1)=string(A{i,10});
end
esoVagyVihar=Ido==Ido(4)|Ido==Ido(19)
esoVagyVihar =

  1×30 logical array

  Columns 1 through 19

   0   0   0   1   1   1   0   0   0   1   1   0   0   0   1   0   0   0   1

  Columns 20 through 30

   1   0   0   0   0   1   1   1   0   0   0

[ertek,nap]=max(Maxhomerseklet(esoVagyVihar)-Minhomerseklet(esoVagyVihar))
ertek =

    12


nap =

     6
     

Napok=1:30;
szurtNapok=Napok(esoVagyVihar)
szurtNapok(nap)
szurtNapok =

     4     5     6    10    11    15    19    20    25    26    27


ans =

    15