These C programs 'cases.c', 'table.c', 'funptr.c' implement the same automata that was used in the lecture as an example for the product and power set construction. The regular language accepted is the intersection of 'a b 1*' and '1* b a'. The programs can be compile with 'make -f .make' and tested with './test '. By default 'gcc' is used as compiler and coverage information is included. Run for instance 'gcov funptr.c' after testing it with './test funptr' to produce an annotated listing of 'funptr.c'. The 'cases.c' program is the obvious implementation using a 'switch' statement. An optimizing compiler may reduce the overhead of calculating the next state to a constant lookup as well, but usually it is better to use a transition matrix as in 'table.c'. This is faster but also takes more space. It is the standard implementation technique in for instance parser generators, such as 'yacc'. The last version 'funptr.c' uses function pointers and also just needs constant time for each state transition. It is similar to the 'objects for state design pattern' in object oriented programming. It is very useful for encapsulating the work done in each transition, for instance if 'extended' automata are used, which beside the state itself have additional global data. Armin Biere, JKU Linz, March 2005.