sobota, 12 listopada 2011

Metaprogramowanie - implementacja dużych liczb całkowitych (część 2)

Na początku listopada zapowiedziałem, że przedstawię metaprogram, który policzy liczbę 100!. Wszystko oczywiście już na etapie kompilacji. W części 1 stworzony został zalążek biblioteki BigInteger, umożliwiającej dodawanie dużych liczb całkowitych. Dziś rozszerzę tę bibliotekę o możliwość mnożenia.

Zaczniemy od napisania metafunkcji, która mnoży dowolną dużą liczbę całkowitą przez dowolną liczbę jednocyfrową. Zostanie ona później wykorzystania do mnożenia dowolnych dwóch dużych liczb całkowitych.

sobota, 5 listopada 2011

Serwer FTP

Dzięki uprzejmości kolegi, Michała, który użyczył mi trochę miejsca na swoim serwerze, będę do postów załączał całe pliki zawierające omawiany przeze mnie kod. Zaktualizowałem też wcześniejsze wpisy (linki do plików znajdują się na samym dole).

Zapraszam na blog Michała. :)

wtorek, 1 listopada 2011

Metaprogramowanie - implementacja dużych liczb całkowitych (część 1)

Ostatnio przypomniało mi się zadanie z pierwszego semestru studiów. Był to raczej klasyk dla uczących się języka C/C++: implementacja dużych liczb całkowitych. W moim przypadku chodziło konkretnie o policzenie liczby 100!. Prowadzący zaproponował nawet mały konkurs, polegający na jak najefektywniejszej implementacji arytmetyki (zwyciężyć miała osoba, której program najszybciej obliczy wynik), jednak jeśli mnie pamięć nie myli, to do niego nie doszło. ;)

Tak sobie pomyślałem, że można by się tu pokusić o małe oszustwo i policzyć wynik już na etapie kompilacji, a po uruchomieniu programu tylko go wyświetlić. Tego rodzaju programowanie nazywa się metaprogramowaniem.

Mając dziś trochę wolnego czasu, zacząłem pisać bibliotekę do obliczeń na dużych liczbach całkowitych wykonywanych w trakcie kompilacji programu. Ponieważ całość implementacji jest zbyt duża na pojedynczy wpis na blogu, podzielę ją na kilka części i omówię osobno. Końcowym efektem będzie obliczenie liczby 100! w trakcie kompilacji.

sobota, 22 października 2011

Opakowywanie struktur języka C

W pierwszym wpisie na blogu chciałbym przedstawić problem, z którym zetknąłem się w pracy. Niezwykle często (a w większych projektach praktycznie zawsze) w tworzonej aplikacji niezbędne jest przesyłanie komunikatów pomiędzy obiektami. W moim przypadku były to wiadomości przesyłane pomiędzy modułami tworzonego sytemu - powiedzmy, że musiały one ze sobą "rozmawiać". Problemem było to, że wiadomości te spływały do nas "gdzieś z góry" i były to zwykłe struktury języka C - zero polimorfizmu czy interfejsów (mimo, że projekt tworzony był w języku C++). Co więcej dla nas były one jedynie read-only. Musieliśmy ich używać, ale nie mogliśmy ich "ulepszać".

Zaprezentuję sposób w jaki struktury języka C można opakować w klasy języka C++ bez edycji tych pierwszych.

sobota, 15 października 2011

Pierwszy post - czyli o czym będzie ten blog.

Witam serdecznie.

Znajdujesz się na blogu dotyczącym matematyki i programowania. Jeśli wciąż jesteś zainteresowany, zapraszam do czytania dalej :)

Nazywam się Paweł. Co jakiś czas opisywać tu będę różne rozwiązania problemów programistycznych, z którymi zetknąć się można "na co dzień". Będą one najczęściej pochodzić z moich własnych doświadczeń. Mam nadzieję, że uda się na kilka tematów podyskutować i że być może informacje, które będą się tu pojawiać, komuś się przydadzą.

Zapraszam.