Informatika1-2012/Eloadas2

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „<!-- <section> <h1>Informatika 1.</h1> <h4>(2012)</h4> <h3 style="margin-top: 50px">Második előadás</h3> <p> …”)
 
 
(egy szerkesztő 8 közbeeső változata nincs mutatva)
1. sor: 1. sor:
<!--        <section>
+
<h1>Visszapillantó</h1>
          <h1>Informatika 1.</h1>
+
<ul>
          <h4>(2012)</h4>
+
  <li>= vs ==<br/>értékadás vs 'ellenőrzés'</li>
          <h3 style="margin-top: 50px">Második előadás</h3>
+
  <li>függvény vs metódus</li>
          <p>
+
  <li>változó vs 'szimbólum'</li>
            <small>Németh Tibor</small><br>
+
</ul>
            <small><i>2012. szeptember 12.</i></small>
+
          </p>
+
        </section>
+
  
        <section>
+
<h1>Egyszerű adattípusok</h1>
          <h2>Tartalom</h2>
+
<p>A Sage (és kb. egyben a Python) beépített egyszerű típusai:</p>
          <ul>
+
<table style="margin-left: auto; margin-right: auto; border: 1px solid #777;" border="1">
            <li class="fragment">Adattípusok</li>
+
  <tr><th>Típus</th><th>Leírás</th><th>Példa</th></tr>
            <ul>
+
  <tr><td style="border: 1px solid #777;">None</td><td style="border: 1px solid #777;">"semmi", null típus</td><td style="border: 1px solid #777;">None</td></tr>
              <li class="fragment">Egyszerű típusok</li>
+
  <tr><td style="border: 1px solid #777;">int</td><td style="border: 1px solid #777;">egész szám (32-bites)</td><td style="border: 1px solid #777;">6</td></tr>
              <li class="fragment">Összetett típusok</li>
+
  <tr><td style="border: 1px solid #777;">long</td><td style="border: 1px solid #777;">hosszú egész (tetszőlegesen hosszú)</td><td style="border: 1px solid #777;">2354099L</td></tr>
              <li class="fragment">Listák kezelése</li>
+
  <tr><td style="border: 1px solid #777;">float</td><td style="border: 1px solid #777;">lebegőpontos szám (törtek)</td><td style="border: 1px solid #777;">3.75</td></tr>
              <li class="fragment">Egyéb összetett típusok kezelése</li>
+
  <tr><td style="border: 1px solid #777;">complex</td><td style="border: 1px solid #777;">komplex szám</td><td style="border: 1px solid #777;">3-2*i</td></tr>
            </ul>
+
</table>
            <li class="fragment">Algoritmusok, vezérlési szerkezetek</li>
+
            <ul>
+
              <li class="fragment">IF - ELSE elágazás</li>
+
              <li class="fragment">WHILE ciklus</li>
+
              <li class="fragment">FOR ciklus</li>
+
            </ul>
+
            <li class="fragment">Példák</li>
+
          </ul>
+
        </section>
+
  
        <section>
+
<h1>Összetett adattípusok</h1>
          <h2>Visszapillantó</h2>
+
<p>A Sage (és kb. egyben a Python) beépített egyszerű típusai:</p>
          <ul>
+
<table style="margin-left: auto; margin-right: auto; border: 1px solid #333;" border="1">
            <li class="fragment">= vs ==<br/>értékadás vs 'ellenőrzés'</li>
+
  <tr><th>Típus</th><th>Leírás</th><th>Példa</th></tr>
            <li class="fragment">függvény vs metódus</li>
+
  <tr><td style="border: 1px solid #333;">str</td><td style="border: 1px solid #333;">karakterlánc (string)</td><td style="border: 1px solid #333;">'alma'</td></tr>
            <li class="fragment">változó vs 'szimbólum'</li>
+
  <tr><td style="border: 1px solid #333;">list</td><td style="border: 1px solid #333;">lista</td><td style="border: 1px solid #333;">[2,y,'bb']</td></tr>
          </ul>
+
  <tr><td style="border: 1px solid #333;">tuple</td><td style="border: 1px solid #333;">tuple</td><td style="border: 1px solid #333;">(2,x,'aa')</td></tr>
        </section>
+
  <tr><td style="border: 1px solid #333;">set</td><td style="border: 1px solid #333;">halmaz</td><td style="border: 1px solid #333;">set(['a','c'])</td></tr>
 +
  <tr><td style="border: 1px solid #333;">dict</td><td style="border: 1px solid #333;">szótár<br/>(kulcs:érték)</td><td style="border: 1px solid #333;">dict({'one':1,'two':2})</td></tr>
 +
</table>
  
        <section>
+
<h2>Listák</h2>
          <h2>Egyszerű adattípusok</h2>
+
          <p>A Sage (és kb. egyben a Python) beépített egyszerű típusai:</p>
+
          <table style="margin-left: auto; margin-right: auto; border: 1px solid #777;" border="1">
+
            <tr><th>Típus</th><th>Leírás</th><th>Példa</th></tr>
+
            <tr class="fragment"><td style="border: 1px solid #777;">None</td><td style="border: 1px solid #777;">"semmi", null típus</td><td style="border: 1px solid #777;">None</td></tr>
+
            <tr class="fragment"><td style="border: 1px solid #777;">int</td><td style="border: 1px solid #777;">egész szám (32-bites)</td><td style="border: 1px solid #777;">6</td></tr>
+
            <tr class="fragment"><td style="border: 1px solid #777;">long</td><td style="border: 1px solid #777;">hosszú egész (tetszőlegesen hosszú)</td><td style="border: 1px solid #777;">2354099L</td></tr>
+
            <tr class="fragment"><td style="border: 1px solid #777;">float</td><td style="border: 1px solid #777;">lebegőpontos szám (törtek)</td><td style="border: 1px solid #777;">3.75</td></tr>
+
            <tr class="fragment"><td style="border: 1px solid #777;">complex</td><td style="border: 1px solid #777;">komplex szám</td><td style="border: 1px solid #777;">3-2*i</td></tr>
+
          </table>
+
        </section>
+
  
        <section>
+
<ul>
          <h2>Összetett adattípusok</h2>
+
  <li>Listát definiálhatunk úgy, hogy megadjuk az elemeit (akármilyen típusúak lehetnek) szögletes zárójelek között:
          <p>A Sage (és kb. egyben a Python) beépített egyszerű típusai:</p>
+
    <pre>sage: L1 = [pi, 'abc', 35, pi, 12]</pre></li>
          <table style="margin-left: auto; margin-right: auto; border: 1px solid #333;" border="1">
+
  <li>Hivatkozhatunk a lista egy elemére:
            <tr><th>Típus</th><th>Leírás</th><th>Példa</th></tr>
+
    <pre>sage: L1[2]
            <tr class="fragment"><td style="border: 1px solid #333;">str</td><td style="border: 1px solid #333;">karakterlánc (string)</td><td style="border: 1px solid #333;">'alma'</td></tr>
+
35</pre></li>
            <tr class="fragment"><td style="border: 1px solid #333;">list</td><td style="border: 1px solid #333;">[2,y,'bb']</td><td style="border: 1px solid #333;">6</td></tr>
+
  <p><i>Figyeljünk arra, hogy 0-tól kezdődik az elemek számozása!</i></p>
            <tr class="fragment"><td style="border: 1px solid #333;">tuple</td><td style="border: 1px solid #333;">(2,x,'aa')</td><td style="border: 1px solid #333;">2354099L</td></tr>
+
  <li>Kiválaszthatunk egy rész-listát:
            <tr class="fragment"><td style="border: 1px solid #333;">set</td><td style="border: 1px solid #333;">halmaz</td><td style="border: 1px solid #333;">set(['a','c'])</td></tr>
+
    <pre>sage: L1[1:4]
            <tr class="fragment"><td style="border: 1px solid #333;">dict</td><td style="border: 1px solid #333;">szótár<br/>(kulcs:érték)</td><td style="border: 1px solid #333;">dict({'one':1,'two':2})</td></tr>
+
['abc', 35, pi]</pre></li>
          </table>
+
  <li>Létrehozhatunk egy listát a range függvény segítségével:
        </section>
+
    <pre>sage: L2 = range(5)
 +
sage: L2
 +
[0, 1, 2, 3, 4]</pre></li>
 +
  <li>Lekérdezhetjük a lista hosszát (hány eleme van):
 +
    <pre>sage: len(L2)
 +
5</pre></li>
 +
  <li>A listának bármely elemét felülírhatjuk:
 +
    <pre>sage: L2[1] = 'egy'
 +
sage: L2
 +
[0, 'egy', 2, 3, 4]</pre></li>
 +
</ul>
  
        <section>
+
<h2>A tuple típus</h2>
          <h2>Listák</h2>
+
          <section>
+
            <ul>
+
              <li>Listát definiálhatunk úgy, hogy megadjuk az elemeit (akármilyen típusúak lehetnek) szögletes zárójelek között:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> L1 = [pi, 'abc', 35, pi, 12]</code></pre></li>
+
              <li class="fragment">Hivatkozhatunk a lista egy elemére:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> L1[2]
+
<span class="fragment">35</span></code></pre></li>
+
              <li class="fragment">Figyeljünk arra, hogy 0-tól kezdődik az elemek számozása!</li>
+
            </ul>
+
          </section>
+
          <section>
+
            <ul>
+
              <li>Kiválaszthatunk egy rész-listát:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> L1[1:4]
+
<span class="fragment">['abc', 35, pi]</span></code></pre></li>
+
              <li class="fragment">Létrehozhatunk egy listát a range függvény segítségével:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> L2 = range(5)
+
<span style="color: #ff4040;">sage:</span> L2
+
<span class="fragment">[0, 1, 2, 3, 4]</span></code></pre></li>
+
              <li class="fragment">Lekérdezhetjük a lista hosszát (hány eleme van):
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> len(L2)
+
<span class="fragment">5</span></code></pre></li>
+
          </section>
+
          <section>
+
            <li>A listának bármely elemét felülírhatjuk:
+
              <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> L2[1] = 'egy'
+
<span style="color: #ff4040;">sage:</span> L2
+
<span class="fragment">[0, 'egy', 2, 3, 4]</span></code></pre></li>
+
            </ul>
+
          </section>
+
        </section>
+
        <section>
+
          <h2>A tuple típus</h2>
+
          <section>
+
            A tuple sokmindenben hasonlít a listához, de az elemei utólag nem módosíthatóak.
+
            <ul>
+
              <li class="fragment">Kerek zárójellel definiáljuk:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> T = (pi, 'abc', 35, pi, 12)</code></pre></li>
+
              <li class="fragment">Hivatkozhatunk a tuple egy elemére:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> T[2]
+
<span class="fragment">35</span></code></pre></li>
+
            </ul>
+
          </section>
+
          <section>
+
            <ul>
+
              <li>Ha meg akarnánk változtatni a tuple egy elemét:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> T[1]='s'
+
TypeError: 'tuple' object does not support item assignment</code></pre></li>
+
            </ul>
+
          </section>
+
        </section>
+
  
        <section>
+
<p>A tuple sokmindenben hasonlít a listához, de az elemei utólag nem módosíthatóak.</p>
          <h2>A halmaz típus</h2>
+
<ul>
          <section>
+
  <li>Kerek zárójellel definiáljuk:
            A set típus megfelel a matematikai halmaz fogalomnak: nem rendezett elemek gyüjteménye.
+
    <pre>sage: T = (pi, 'abc', 35, pi, 12)</pre></li>
            <ul>
+
  <li>Hivatkozhatunk a tuple egy elemére:
              <li class="fragment">Definiálható a <code>set</code> kulcsszóval és egy lista megadásával:
+
    <pre>sage: T[2]
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> S = set([pi, 'abc', 35, pi, 12])</code></pre></li>
+
35</pre></li>
              <li class="fragment">Megkérdezhetjük, hogy valami benne van-e a halmazban:
+
  <li>Ha meg akarnánk változtatni a tuple egy elemét:
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> 35 in S
+
    <pre>sage: T[1]='s'
<span class="fragment">True</span></code></pre></li>
+
TypeError: 'tuple' object does not support item assignment</pre></li>
            </ul>
+
</ul>
          </section>
+
          <section>
+
            <ul>
+
              <li>Lekérdezhetjük a halmaz méretét (hány eleme van):
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> len(S)
+
<span class="fragment">4</span></code></pre></li>
+
              <li class="fragment">Törlés a halmazból:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> S.remove(pi)</code></pre></li>
+
            </ul>
+
          </section>
+
        </section>
+
  
        <section>
+
<h2>A halmaz típus</h2>
          <h2>A szótár típus</h2>
+
<p>A <code>set</code> típus megfelel a matematikai halmaz fogalomnak: nem rendezett elemek gyüjteménye.</p>
          <section>
+
<ul>
            A szótár arra való, hogy kulcs-érték párokat egymáshoz rendelhessünk.
+
  <li>Definiálható a <code>set</code> kulcsszóval és egy lista megadásával:
            <ul>
+
    <pre>sage: S = set([pi, 'abc', 35, pi, 12])</pre></li>
              <li class="fragment">Kapcsos zárójellel definiálható a következő módon:
+
  <li>Megkérdezhetjük, hogy valami benne van-e a halmazban:
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> D = {'one':1, 'two':2, 'three':3}</code></pre></li>
+
    <pre>sage: 35 in S
              <li class="fragment">Kulcshoz tartozó érték lekérdezése:
+
True</pre></li>
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> D['one']
+
  <li>Lekérdezhetjük a halmaz méretét (hány eleme van):
<span class="fragment">1</span></code></pre></li>
+
    <pre>sage: len(S)
            </ul>
+
4</pre></li>
          </section>
+
  <li>Törlés a halmazból:
          <section>
+
    <pre>sage: S.remove(pi)</pre></li>
            <ul>
+
</ul>
              <li>Lekérdezhetjük a szótár kulcsait:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> D.keys()
+
<span class="fragment">['three', 'two', 'one']</span></code></pre></li>
+
              <li class="fragment">Megkérdezhetjük, hogy valami benne van-e a szótárban:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> 'two' in D
+
<span class="fragment">True</span></code></pre></li>
+
              <li class="fragment">Az értékek között is kereshetünk a <code>values</code> metódussal:
+
                <pre><code contenteditable style="margin-top: 20px;"><span style="color: #ff4040;">sage:</span> 2 in D.values()
+
<span class="fragment">True</span></code></pre></li>
+
            </ul>
+
          </section>
+
        </section>
+
  
 +
<h2>A szótár típus</h2>
 +
<p>A szótár arra való, hogy kulcs-érték párokat egymáshoz rendelhessünk.</p>
 +
<ul>
 +
  <li>Kapcsos zárójellel definiálható a következő módon:
 +
    <pre>sage: D = {'one':1, 'two':2, 'three':3}</pre></li>
 +
  <li>Vagy a <code>dict</code> kulcsszó használatával:
 +
    <pre>sage: D = dict({'one':1, 'two':2, 'three':3})</pre></li>
 +
  <li>Kulcshoz tartozó érték lekérdezése:
 +
    <pre>sage: D['one']
 +
1</pre></li>
 +
  <li>Lekérdezhetjük a szótár kulcsait:
 +
    <pre>sage: D.keys()
 +
['three', 'two', 'one']</pre></li>
 +
  <li>Megkérdezhetjük, hogy valami benne van-e a szótárban:
 +
    <pre>sage: 'two' in D
 +
True</pre></li>
 +
  <li>Az értékek között is kereshetünk a <code>values</code> metódussal:
 +
    <pre>sage: 2 in D.values()
 +
True</pre></li>
 +
</ul>
  
 +
<h2>Még a típus-okról</h2>
 +
<p>Egy változó típusát a <code>type</code> függvénnyel nézhetjük meg.<br/>
 +
  Például (a változók az órán már korábban szerepelt változók):</p>
 +
<pre>sage: type(L1)
 +
&lt;type 'list'&gt;
 +
sage: type(D)
 +
&lt;type 'dict'&gt;</pre>
 +
<p>Vagy adat esetén:</p>
 +
<pre>sage: type(5)
 +
&lt;type 'sage.rings.integer.Integer'&gt;
 +
sage: type(5.0)
 +
&lt;type 'sage.rings.real_mpfr.RealLiteral'&gt;
 +
sage: type('5')
 +
&lt;type 'str'&gt;</pre>
 +
<h1>Algoritmusok</h1>
 +
<p>Algoritmuson vagy eljáráson olyan megengedett lépésekből álló módszert, utasítás(sorozato)t, részletes útmutatást,
 +
  receptet értünk, amely valamely felmerült probléma megoldasára alkalmas.<br/>Az algoritmust leírhatjuk pszeudokóddal
 +
  vagy folyamatábrával, illetve implementálhatjuk (megvalósíthatjuk) egy konkrét programnyelven, hogy működő programot kapjunk.</p>
  
        <section>
+
<h2>Algoritmus példa</h2>
          <h2>Algoritmusok</h2>
+
<p>Válasszuk ki az a; b; c számok közül a legkisebbet!</p>
          <p>Algoritmuson vagy eljáráson olyan megengedett lépésekből álló módszert, utasítás(sorozato)t, részletes útmutatást,
+
<table>
            receptet értünk, amely valamely felmerült probléma megoldasára alkalmas.<br/>Az algoritmust leírhatjuk pszeudokóddal
+
  <tr>
            vagy folyamatábrával, illetve implementálhatjuk (megvalósíthatjuk) egy konkrét programnyelven, hogy működő programot kapjunk.</p>
+
    <td>
        </section>
+
[http://docs.google.com/open?id=0Bwk5mjaCfPlVaERMRG95c05iTlU Flowchart]
 
+
      <!--                <img  width="320" height="300" src="./images/if.png" alt="IF"> -->
        <section>
+
    </td>
          <h2>Algoritmus példa</h2>
+
    <td>
          Válasszuk ki az a; b; c számok közül a legkisebbet!
+
      <pre>IF a < b:
          <table>
+
            <tr>
+
              <td>
+
                <img  width="320" height="300" src="./images/if.png" alt="IF">
+
              </td>
+
              <td style="vertical-align: top;">
+
                <pre style="top: 20px; width: 500px;" class="fragment"><code>IF a < b:
+
 
     IF a < c:
 
     IF a < c:
 
         RETURN a
 
         RETURN a
196. sor: 141. sor:
 
     ELSE:
 
     ELSE:
 
         RETURN c</pre>
 
         RETURN c</pre>
                </code>
+
    </td>
              </td>
+
  <tr>
            <tr>
+
  <tr>
            <tr class="fragment">
+
    <td style="text-align: center;"><small>Folyamatábra (Flowchart)</small></td><td style="text-align: center;"><small>Pszeudokód (Pseudocode)</small></td>
              <td style="text-align: center;"><small>Folyamatábra (Flowchart)</small></td><td style="text-align: center;"><small>Pszeudokód (Pseudocode)</small></td>
+
  </tr>
            </tr>
+
  <tr>
            <tr>
+
</table>
          </table>
+
        </section>
+
  
        <section>
+
<h2>Feltételes utasítás</h2>
          <h2>Feltételes utasítás</h2>
+
<p>Egy feltételes utasítás így néz ki Sage-ben, ill. Python-ban:</p>
          Egy feltételes utasítás így néz ki Sage-ben, ill. Python-ban:
+
<table>
          <table>
+
  <tr>
            <tr>
+
    <td>
              <td style="vertical-align: top;">
+
      <pre>def k(x):
                <pre style="top: 20px; width: 500px;"><code>def k(x):
+
 
   if x%1O == 0:
 
   if x%1O == 0:
 
     return '0-ra végződik'
 
     return '0-ra végződik'
220. sor: 162. sor:
 
     return 'Nem 0-ra végződő páros'
 
     return 'Nem 0-ra végződő páros'
 
   else:
 
   else:
     return 'Nem 5-re végződő páratlan'</code></pre>
+
     return 'Nem 5-re végződő páratlan'</pre>
              </td>
+
    </td>
              <td>
+
    <td>
                <img  width="350" height="300" src="./images/if2.png" alt="IF2">
+
[http://docs.google.com/open?id=0Bwk5mjaCfPlVbzZpTVY4T2FITFk Flowchart]
              </td>
+
      <!--                <img  width="350" height="300" src="./images/if2.png" alt="IF2"> -->
            </tr>
+
    </td>
          </table>
+
  </tr>
        </section>
+
</table>
  
        <section>
+
<h2>While ciklus</h2>
          <h2>While ciklus</h2>
+
<p>A while-ciklus belseje addig fog ciklikusan újra és újra végrehajtódni,
          A while-ciklus belseje addig fog ciklikusan újra és újra végrehajtódni,
+
  amíg a feltétel része teljesül.<br/>Sage-ben:</p>
          amíg a feltétel része teljesül.<br/>Sage-ben:
+
<table>
          <table>
+
  <tr>
            <tr>
+
    <td>
              <td style="vertical-align: top;">
+
      <pre>x = 30
                <pre style="top: 20px; width: 500px;"><code>x = 30
+
 
while x > 15:
 
while x > 15:
 
   x = x-3
 
   x = x-3
   print x</code></pre>
+
   print x</pre>
              </td>
+
    </td>
              <td>
+
    <td>
                <img  width="320" height="240" src="./images/while.png" alt="WHILE">
+
[http://docs.google.com/open?id=0Bwk5mjaCfPlVVzJlaFRpT3I4T3c Flowchart]
              </td>
+
      <!--                <img  width="320" height="240" src="./images/while.png" alt="WHILE"> -->
            </tr>
+
    </td>
          </table>
+
  </tr>
          Figyelni kell, hogy ne kerüljön a program végtelen ciklusba!
+
</table>
        </section>
+
<p>Figyelni kell, hogy ne kerüljön a program végtelen ciklusba!</p>
 
+
        <section>
+
          <h2>For ciklus</h2>
+
          A <code>for</code> ciklus valamilyen lista vagy szekvencia elemein megy végig egyesével.
+
          <pre><code contenteditable style="margin-top: 20px;">for x in range(4):
+
    print str(x) + '. elemnél járunk'</code></pre>
+
          A fenti kód kimenete:
+
          <pre><code contenteditable style="margin-top: 20px;">0. elemnel járunk
+
1. elemnel járunk
+
2. elemnel járunk
+
3. elemnel járunk</code></pre>
+
          </td>
+
          <td>
+
          </td>
+
          </tr>
+
          </table>
+
        </section>
+
  
        <section>
+
<h2>For ciklus</h2>
          <h2>További olvasnivalók</h2>
+
<p>A <code>for</code> ciklus valamilyen lista vagy szekvencia elemein megy végig egyesével.</p>
          Hasznos olvasnivalók, néhol a tananyagon túl:
+
<pre>for x in range(4):
          <ul>
+
    print str(x) + '. elemnél járunk'</pre>
            <li>Programozás bevezető (angolul):<br/>
+
<p>A fenti kód kimenete:</p>
              http://johnstachurski.net/book/sample2.pdf</li>
+
<pre>0. elemnél járunk
            <li>Sage Tutorial:<br/>
+
1. elemnél járunk
              http://www.sagemath.org/pdf/SageTutorial.pdf</li>
+
2. elemnél járunk
            <li>Algoritmus (Wikipedia oldal):<br/>
+
3. elemnél járunk</pre>
              http://hu.wikipedia.org/wiki/Algoritmus</li>
+
            <li>Folyamatábra (angol Wikipedia oldal):<br/>
+
              http://en.wikipedia.org/wiki/Flow_chart</li>
+
          </ul>
+
        </section>
+
  
      </div>
+
<h1>További olvasnivalók</h1>
-->
+
<p>Hasznos olvasnivalók, néhol a tananyagon túl:</p>
 +
<ul>
 +
  <li>Programozás bevezető (angolul):<br/>
 +
    http://johnstachurski.net/book/sample2.pdf</li>
 +
  <li>Sage Tutorial:<br/>
 +
    http://www.sagemath.org/pdf/SageTutorial.pdf</li>
 +
  <li>Algoritmus (Wikipedia oldal):<br/>
 +
    http://hu.wikipedia.org/wiki/Algoritmus</li>
 +
  <li>Folyamatábra (angol Wikipedia oldal):<br/>
 +
    http://en.wikipedia.org/wiki/Flow_chart</li>
 +
</ul>

A lap jelenlegi, 2012. szeptember 24., 23:13-kori változata

Tartalomjegyzék

Visszapillantó

  • = vs ==
    értékadás vs 'ellenőrzés'
  • függvény vs metódus
  • változó vs 'szimbólum'

Egyszerű adattípusok

A Sage (és kb. egyben a Python) beépített egyszerű típusai:

TípusLeírásPélda
None"semmi", null típusNone
integész szám (32-bites)6
longhosszú egész (tetszőlegesen hosszú)2354099L
floatlebegőpontos szám (törtek)3.75
complexkomplex szám3-2*i

Összetett adattípusok

A Sage (és kb. egyben a Python) beépített egyszerű típusai:

TípusLeírásPélda
strkarakterlánc (string)'alma'
listlista[2,y,'bb']
tupletuple(2,x,'aa')
sethalmazset(['a','c'])
dictszótár
(kulcs:érték)
dict({'one':1,'two':2})

Listák

  • Listát definiálhatunk úgy, hogy megadjuk az elemeit (akármilyen típusúak lehetnek) szögletes zárójelek között:
    sage: L1 = [pi, 'abc', 35, pi, 12]
  • Hivatkozhatunk a lista egy elemére:
    sage: L1[2]
    35
  • Figyeljünk arra, hogy 0-tól kezdődik az elemek számozása!

  • Kiválaszthatunk egy rész-listát:
    sage: L1[1:4]
    ['abc', 35, pi]
  • Létrehozhatunk egy listát a range függvény segítségével:
    sage: L2 = range(5)
    sage: L2
    [0, 1, 2, 3, 4]
  • Lekérdezhetjük a lista hosszát (hány eleme van):
    sage: len(L2)
    5
  • A listának bármely elemét felülírhatjuk:
    sage: L2[1] = 'egy'
    sage: L2
    [0, 'egy', 2, 3, 4]

A tuple típus

A tuple sokmindenben hasonlít a listához, de az elemei utólag nem módosíthatóak.

  • Kerek zárójellel definiáljuk:
    sage: T = (pi, 'abc', 35, pi, 12)
  • Hivatkozhatunk a tuple egy elemére:
    sage: T[2]
    35
  • Ha meg akarnánk változtatni a tuple egy elemét:
    sage: T[1]='s'
    TypeError: 'tuple' object does not support item assignment

A halmaz típus

A set típus megfelel a matematikai halmaz fogalomnak: nem rendezett elemek gyüjteménye.

  • Definiálható a set kulcsszóval és egy lista megadásával:
    sage: S = set([pi, 'abc', 35, pi, 12])
  • Megkérdezhetjük, hogy valami benne van-e a halmazban:
    sage: 35 in S
    True
  • Lekérdezhetjük a halmaz méretét (hány eleme van):
    sage: len(S)
    4
  • Törlés a halmazból:
    sage: S.remove(pi)

A szótár típus

A szótár arra való, hogy kulcs-érték párokat egymáshoz rendelhessünk.

  • Kapcsos zárójellel definiálható a következő módon:
    sage: D = {'one':1, 'two':2, 'three':3}
  • Vagy a dict kulcsszó használatával:
    sage: D = dict({'one':1, 'two':2, 'three':3})
  • Kulcshoz tartozó érték lekérdezése:
    sage: D['one']
    1
  • Lekérdezhetjük a szótár kulcsait:
    sage: D.keys()
    ['three', 'two', 'one']
  • Megkérdezhetjük, hogy valami benne van-e a szótárban:
    sage: 'two' in D
    True
  • Az értékek között is kereshetünk a values metódussal:
    sage: 2 in D.values()
    True

Még a típus-okról

Egy változó típusát a type függvénnyel nézhetjük meg.
Például (a változók az órán már korábban szerepelt változók):

sage: type(L1)
<type 'list'>
sage: type(D)
<type 'dict'>

Vagy adat esetén:

sage: type(5)
<type 'sage.rings.integer.Integer'>
sage: type(5.0)
<type 'sage.rings.real_mpfr.RealLiteral'>
sage: type('5')
<type 'str'>

Algoritmusok

Algoritmuson vagy eljáráson olyan megengedett lépésekből álló módszert, utasítás(sorozato)t, részletes útmutatást, receptet értünk, amely valamely felmerült probléma megoldasára alkalmas.
Az algoritmust leírhatjuk pszeudokóddal vagy folyamatábrával, illetve implementálhatjuk (megvalósíthatjuk) egy konkrét programnyelven, hogy működő programot kapjunk.

Algoritmus példa

Válasszuk ki az a; b; c számok közül a legkisebbet!

Flowchart

IF a < b:
    IF a < c:
        RETURN a
    ELSE:
        RETURN c
ELSE:
    IF b < c:
        RETURN b
    ELSE:
        RETURN c
Folyamatábra (Flowchart)Pszeudokód (Pseudocode)

Feltételes utasítás

Egy feltételes utasítás így néz ki Sage-ben, ill. Python-ban:

def k(x):
  if x%1O == 0:
    return '0-ra végződik'
  elif x%5 == 0:
    return '5-re végződik'
  elif x%2 == 0:
    return 'Nem 0-ra végződő páros'
  else:
    return 'Nem 5-re végződő páratlan'

Flowchart

While ciklus

A while-ciklus belseje addig fog ciklikusan újra és újra végrehajtódni, amíg a feltétel része teljesül.
Sage-ben:

x = 30
while x > 15:
  x = x-3
  print x

Flowchart

Figyelni kell, hogy ne kerüljön a program végtelen ciklusba!

For ciklus

A for ciklus valamilyen lista vagy szekvencia elemein megy végig egyesével.

for x in range(4):
    print str(x) + '. elemnél járunk'

A fenti kód kimenete:

0. elemnél járunk
1. elemnél járunk
2. elemnél járunk
3. elemnél járunk

További olvasnivalók

Hasznos olvasnivalók, néhol a tananyagon túl:

Személyes eszközök