Zaawansowane CPP/Ćwiczenia 9: Szablony wyrażeń: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Mirek (dyskusja | edycje)
Nie podano opisu zmian
Pbialas (dyskusja | edycje)
Nie podano opisu zmian
 
(Nie pokazano 11 wersji utworzonych przez 3 użytkowników)
Linia 5: Linia 5:


  <nowiki> bool And(bool q,bool r) {return q && r;}
  <nowiki> bool And(bool q,bool r) {return q && r;}
  table2(And2) ;</nowiki>
  table2(And) ;</nowiki>


powinno wygenerować :
powinno wygenerować :
Linia 19: Linia 19:
}}
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
Patrz plik [http://osilek.mimuw.edu.pl/images/4/4e/Table.h table.h].
Patrz plik [[media:Table.h | table.h]].
</div></div>
</div></div>


Linia 32: Linia 32:
  table2(q >> r);
  table2(q >> r);


powinno wygenerować:  
powinno wygenerować:


<div>
<nowiki>--------------
--------------
| 0 | 0 || 1 |     
| 0 | 0 || 1 |     
| 0 | 1 || 1 |     
| 0 | 1 || 1 |     
| 1 | 0 || 0 |     
| 1 | 0 || 0 |     
| 1 | 1 || 1 |     
| 1 | 1 || 1 |     
--------------
--------------</nowiki>
</div>


a
a


  table1(True == q);
  table1(True <nowiki>==</nowiki> q);


powinno wygenerować:  
powinno wygenerować:


  <nowiki>---------
  <nowiki>---------
Linia 54: Linia 52:
---------</nowiki>
---------</nowiki>
}}
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
Rozwiązanie jest całkowicie analogiczne do szblonów wyrażeń podanych na wykładzie. Zaczynamy od klas reprezentujących odpowiednio pierwszy, drugi i trzeci argument wyrażenia logicznego:
Rozwiązanie jest całkowicie analogiczne do szblonów wyrażeń podanych na wykładzie. Zaczynamy od klas reprezentujących odpowiednio pierwszy, drugi i trzeci argument wyrażenia logicznego:
Linia 109: Linia 108:
Jeśli będziemy korzystać tylko z naszych stałych logicznych <tt>Logic::True</tt> i <tt>Logic::False</tt>, to niepotrzebne są dodatkowe przeciążenia operatora.
Jeśli będziemy korzystać tylko z naszych stałych logicznych <tt>Logic::True</tt> i <tt>Logic::False</tt>, to niepotrzebne są dodatkowe przeciążenia operatora.


Pozostałe operatory implementujemy analogicznie. Całość kodu jest podana w pliku [http://osilek.mimuw.edu.pl/images/b/b4/Logic.h logic.h].
Pozostałe operatory implementujemy analogicznie. Całość kodu jest podana w pliku [[media:Logic.h | logic.h]].
</div></div>
</div></div>


Linia 127: Linia 126:


<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span><div class="mw-collapsible-content" style="display:none">
Patrz plik [http://osilek.mimuw.edu.pl/images/4/4e/Table.h table.h].
Patrz plik [[media:Table.h | table.h]].
</div></div>
</div></div>

Aktualna wersja na dzień 19:43, 4 paź 2006

Ćwiczenie 1

Zaimplementuj szablony funkcji table1, table2 i table3, generujące tabele prawdy dla jednej, dwu lub trzech zmiennych logicznych. Argumentem tych funkcji ma być funkcja przyjmująca, w zależności od funkcji, od 1 do 3 argumentów typu bool, np.:

 bool And(bool q,bool r) {return q && r;}
 table2(And) ;

powinno wygenerować :

--------------
| 0 | 0 || 0 |    
| 0 | 1 || 0 |    
| 1 | 0 || 0 |    
| 1 | 1 || 1 |    
--------------

Podobnie dla table1 i table3.

Rozwiązanie

Ćwiczenie 2

Napisz szablony wyrażeń, które będzie można użyć z powyższymi szablonami. Zaimplementuj trzy klasy First, Second i Third, oznaczające odpowiednio pierwszy, drugi i trzeci argument funkcji logicznej. Zaimplementuj operatory &&(i), ||(lub), !(zaprzeczenie), >> (implikacja) i ==(równoważność) oraz możliwość korzystania ze stałych logicznych True i False. Np.:

First   q;
Second  r;
table2(q >> r);

powinno wygenerować:

--------------
| 0 | 0 || 1 |    
| 0 | 1 || 1 |    
| 1 | 0 || 0 |    
| 1 | 1 || 1 |    
--------------

a

table1(True == q);

powinno wygenerować:

---------
| 0 | 0 |    
| 1 | 1 |    
---------
Rozwiązanie

Ćwiczenie 3

Zaimplementuj szablon funkcji, który będzie przyjmował jako jeden z parametrów szablonu ilość zmiennych logicznych i będzie łączył działanie funkcji table1, table2 i table3. Np.:

table<2>(And);

powinno być równoważne wywołaniu:

table2(And);
Podpowiedź
Rozwiązanie