Start Zadania Generacja zestawów Tworzenie zadań Autorzy Pobierz Gezmat English

Gezmat - generator zestawów zadań, matematycznych i innych

Gezmat - generator zestawów zadań
matematycznych i innych

Wersja 2019-09-14


Gezmat umożliwia automatyczną produkcję własnych zestawów zadań, każdego zestawu w wielu wersjach różniących się wartościami liczbowymi, wykresami, rysunkami, wyborem pytań itp. Dla każdej wersji produkuje pliki z: Program i zadania udostępnione są za darmo, na otwartych licencjach:

Aktualności

Już 14 osób współtworzyło Gezmata. Dziękuję za wytrwałą pracę! Udostępniliśmy ponad 260 zadań po polsku. Dziś:
Zobacz 264 zadania z fizyki i matematyki dostępne od razu Generuj własne zestawy: sprawdziany, kartkówki, egzaminy, zbiory zadań Zapisz własne zadania w Gezmacie Autorzy i licencja Pobierz aktualną wersję Gezmata

Przykładowe zestawy zadań z matematyki i fizyki

Wyjaśnienie symboli:

Matematyka, przedszkole lub szkoła podstawowa

Matematyka, szkoła podstawowa

Matematyka, rachunek zbiorów, teoria mnogości

Matematyka, wprowadzenie elementów fizyki, szkoła podstawowa

Fizyka

Inne

W każdym archiwum, w katalogu gzm znajdują się kopie użytego pliku konfiguracyjnego.

Jeśli zestaw powstał poprzez wyszukiwanie zadań pasujących do wzorca (komendy gzm search-...), to w każdym archiwum, w katalogu rgx znajdują się listy identyfikatorów wybranych zadań.

Opis  komend gzm .

Wszystkie zadania, 1 wersja

 Z  ZW  ZO  ZWO  ZIP 
Na razie przygotowaliśmy 264 zadania w j. polskim (fizyka, matematyka). Pracujemy nad kolejnymi.

Generowanie własnych zestawów zadań: sprawdzianów, egzaminów, zbiorów...

Zestaw można zdefiniować, edytując konfiguracyjny plik tekstowy (*.gzm). Można także uzyskać zestaw z pomocą  GezmatGUI , który w szczególności znacznie ułatwia wybór zadań. Uzyskany z pomocą GezmatGUI plik *.gzm można potem edytować, by wykorzystać wszystkie możliwości Gezmata (losową kolejność, losowanie z grupy zadań, odstępy, kratki na rozwiązanie, dodatkowe komentarze i wiele innych).

Gezmat należy zainstalować na komputerze. Poniżej znajdziesz film przedstawiający instalację i uruchomienie Gezmata, a następnie opis instalacji, wymagań, generowania gotowych zestawów oraz definiowania własnych.
Ustaw wysoką rozdzielczość (720p lub 1080p) filmu.

 Gezmat-2019-09-14.tgz 
Pobierz Gezmat, używając powyższego linku.

Start:
$ tar xf Gezmat-[...].tgz
$ cd Gezmat-[...]/
Instalowanie  potrzebnych pakietów  w systemach z APT (Ubuntu, Mint, Debian):
$ sudo ./install-pkgs-for-gezmat.bash
Wpisz hasło, potwierdzaj (Enter lub T, lub Y). Na innych systemach należy zainstalować potrzebne pakiety samodzielnie.
$ ./gezmat.bash def/pl-sprawdzian_testowy.gzm
W katalogu
Outputs/pl-sprawdzian_testowy-[...]/
pojawią się katalogi pdf, tex, txt z zestawami zadań.

Wskazanie innego kompilatora:

W przypadku Mac OS spróbuj:
$ export CXX=clang++ ; ./gezmat.bash def/pl-sprawdzian_testowy.gzm
Na Linuxie można również używać clang++ zamiast g++:
$ export CXX=clang++-3.6 ; ./gezmat.bash def/pl-sprawdzian_testowy.gzm
Domyślny kompilator można też ustawić za pomocą skryptu:
$ unset CXX ; ./set-compiler-for-gezmat.bash
Skrypt sprawdzi dostępne kompilatory (trochę to trwa), a następnie zapisze informację o wyborze użytkownika w pliku
.gezmat.cfg
Jest to wygodniejsze od samodzielnego ustawiania zmiennej CXX na początku każdej sesji.
Wymagane oprogramowanie: Pakiet przetestowano w środowsku Linux.  Łatwe dodawanie wymaganych pakietów. 

Program działa również w ramach Windows Subsystem for Linux w Windows 10 (instalacja wg Linuxiarze.pl).

Program działa także w systemach Mac OS.

Będziemy wdzięczni za informację, jeśli uda Ci się uruchomić Gezmat w innym środowisku.
Poniżej przykład generacji 3 wersji zestawu określonego w pliku
def/pl-sprawdzian_testowy.gzm
Produkowane są 4 arkusze. Dla każdego arkusza pliki PDF i LaTeX z końcówką: Pozostałe pliki PDF i LaTeX zawierają same zadania, a plik TXT zadania ze wskazówkami i odpowiedziami.

Komendy wywołuj w terminalu, w katalogu głównym pakietu, który powstaje po rozpakowaniu archiwum tgz (np. Gezmat-2016-07-14/). Tworzony jest katalog Outputs/pl-sprawdzian..., do którego przenoszone są wygenerowane pliki z rozszerzeniami pdf, tex, txt; pozostałe pliki (m.in. dvi, ps) można znaleźć w katalogu roboczym Work_files/other (ten katalog jest nadpisywany przy każdym uruchomieniu programu).
$ ./gezmat.bash def/pl-sprawdzian_testowy.gzm 3
$ cd Outputs/pl-sprawdzian_testowy-2016-07-14-22/
$ ls *
...
pl-sprawdzian_testowy_v01_a.pdf
pl-sprawdzian_testowy_v01_a.tex
pl-sprawdzian_testowy_v01_ha.pdf
pl-sprawdzian_testowy_v01_ha.tex
pl-sprawdzian_testowy_v01_h.pdf
pl-sprawdzian_testowy_v01_ha.tex
pl-sprawdzian_testowy_v01.pdf
pl-sprawdzian_testowy_v01.tex
pl-sprawdzian_testowy_v01.txt
...
pl-sprawdzian_testowy_v02_a.pdf
pl-sprawdzian_testowy_v02_ha.pdf
pl-sprawdzian_testowy_v02.pdf
pl-sprawdzian_testowy_v02.txt
...
pl-sprawdzian_testowy_v03_ha.pdf
...
W pliku  def/all_problems_pl.gzm  znajdują się identyfikatory wszystkich zadań w j. polskim, nie edytuj tego pliku. Możesz zmienić mu nazwę na np. pl-moj-test.gzm, zmienić część opisową i zostawić w nim tylko wybrane zadania, a następnie wygenerować własne zestawy - tak jak z plikiem pl-sprawdzian_testowy.gzm.

Plik konfiguracyjny nie musi znajdować się w katalogu def/. Dla wygody własne pliki definiujące zestawy możesz przechowywać np. w katalogu priv-def/. Generacja np. 6 wersji Twojego zestawu wygląda wtedy tak:
$ ./gezmat.bash priv-def/pl-moj-test.gzm 6
$ cd Outputs/pl-moj-test-2019-09-14-22/pdf/
$ ls *
...
Plik konfiguracyjny musi mieć końcówkę .gzm, a jego pierwsze 7 linii musi zawierać w tej kolejności:
  1. Tytuł (dowolny łańcuch)
  2. Określenie języka, na razie tylko pl lub en
  3. Separator dziesiętny, np. kropkę lub przecinek
  4. Maksymalną liczbę miejsc dziesiętnych w przypadku zadań na poziomie podstawowym (np. 0 lub 1, lub 2)
  5. Miejsce i datę (dowolny łańcuch)
  6. Autora zestawienia (dowolny łańcuch)
  7. Opis (dowolny łańcuch)
W "dowolnych łańcuchach" można używać komend LaTeX'a.
W kolejnych niepustych liniach, które mogą być oddzielane liniami pustymi, muszą znajdować się jako pierwsze: Wszystkie identyfikatory zadań znajdziesz w pliku def/all_problems_pl.gzm lub w plikach w katalogu
Outputs/all_problems_pl... z _ha w nazwie.
Istotny jest tylko pierwszy łańcuch znakowy (identyfikator), pozostawienie w linii tytułów jest pomocne dla autora, ale nie wpływa na generację zestawu.

Przykład pliku definiującego zestaw zadań:
Sprawdzian
pl
,
1
Warszawa, 2019-06-25
\emph{ Przygotował \textbf{ J.F.} } % LaTeX
Powodzenia!

pl-liczby-0001000 "Śliwki"

  gzm comment Wcięcia są OK
  pl-liczby-0002000 "Jabłka"

pl-prędkość-droga-czas-0005000 "Samochód"
pl-prędkość-droga-czas-0004000-dpc "Prędkość jazdy rowerem"

GezmatGUI

Interfejs graficzny GezmatGUI zapewnia użytkownikowi wygodę na etapie doboru zadań i przygotowania podstawowej wersji pliku konfiguracyjnego, oferując w szczególności: GezmatGUI wymaga pakietów: Python3, PyQt5, PyMuPDF. Instalowanie potrzebnych pakietów w systemach z APT (Ubuntu, Mint, Debian):
$ sudo ./install-pkgs-for-GezmatGUI.bash
Wpisz hasło, potwierdzaj (Enter lub T, lub Y). Na innych systemach należy zainstalować potrzebne pakiety samodzielnie. Uruchomienie GezmatGUI:
$ ./runGezmatGUI.bash
Więcej informacji można znaleźć na  stronie projektu GezmatGUI .

GezmatGUI jest bardzo pomocny na etapie wyboru zadań, ale na razie nie umożliwia wykorzystania wszystkich możliwości Gezmata. Dlatego uzyskany z pomocą GezmatGUI plik *.gzm można potem edytować, by uzyskać losową kolejność, losowanie z grupy zadań, odstępy po zadaniach, kratki na rozwiązanie, dodatkowe komentarze itd. ( komendy gzm ).

Dla autorów zadań – uaktualnianie bazy zadań GezmatGUI w celu dodania do niej własnych zadań:
$ ./ext-GezmatGUI/update.py
W pliku definiującym zestaw (*.gzm) można określać dopuszczalną liczbę miejsc dziesiętnych w zadaniach na poziomie podstawowym; id tych zadań ma końcówkę -dpc. Przykłady:

Budowa identyfikatora zadania lub opisu.

Początek wskazuje na język zadania:
pl-...
Koniec -dpc wskazuje na możliwość określania dopuszczalnej liczby miejsc dziesiętnych (robimy to w pliku definiującym zestaw *.gzm, w 4 linii):
pl-...-dpc
Łańcuch -Description oznacza, że jest to opis (nie będzie numerowany, nie będzie poprzedzany 'Zadanie –', nie ma odpowiedzi ani punktów):
pl-...-Description...

Jeśli wolisz pdflatex zamiast latex:
$ ./gezmat.bash def/pl-zbiory.gzm pdflatex
Osiem wersji:
$ ./gezmat.bash def/pl-zbiory.gzm 8 pdflatex
 Pełny opis argumentów i zmiennych środowiskowych gezmat.bash 

Komendy, które można zamieszczać od 8 linii w pliku definiującym zestaw zadań (*.gzm)
Komendy używane tylko raz na zestaw, dotyczące całego zestawu:
gzm for-all-vspace 2cm
Wstaw pionowy odstęp po każdym zadaniu (tylko Z).  ZIP 
gzm only-number
Tylko numer zadania, bez łamania linii (tylko Z).  ZIP 
gzm only-number-and-title
Numer zadania i tytuł, bez "Zadanie -" (tylko Z).  ZIP 
gzm header-left \textbf{Imię, nazwisko:}
Wstaw tekst w nagłówku po lewej stronie.  ZIP 
gzm search-id czas
Wybierz zadania (w danym języku) z id zawierającym wyrażenie regularne.  więcej   ZIP 
gzm search-description Mars
Wybierz zadania (w danym języku) z treścią zawierającą wyrażenie regularne.  więcej   ZIP 
gzm search-author Nieżurawski
Wybierz zadania (w danym języku) z listą autorów zawierającą wyrażenie regularne.  więcej   ZIP 
gzm shuffle
Ustaw zadania w losowej kolejności.  ZIP 
Wygeneruj znacznie więcej wersji zestawu, a potem wybierz te z najlepszym rozkładem tekstu i rysunków.
Aby ustawić w losowej kolejności tylko część zadań, użyj komendy from-group-choose, żądając wybrania tylu zadań, ile jest w grupie.
gzm all-problems-config
Przygotuj zestaw z wszystkimi zadaniami w danym języku oraz plik def/all_problems_*.gzm.  ZIP 
gzm geometry letterpaper, verbose, tmargin=2cm, bmargin=2cm, lmargin=2cm, rmargin=2cm, headheight=0.7cm, headsep=2mm
Definicja parametrów strony. Domyślna wartość: a4paper, verbose, tmargin=2cm, bmargin=2cm, lmargin=2cm, rmargin=2cm, headheight=0.7cm, headsep=2mm.  ZIP 
gzm points 1.45 2
Przy każdym zadaniu wypisz liczbę punktów. Pierwsza liczba (opcjonalna, rzeczywista) jest czynnikiem, przez który zostanie pomnożona trudość zadania diff: liczba punktów za zadanie = część całkowita z [czynnik]*[wartość diff zadania]. Druga liczba (opcjonalna, całkowita) jest minimalną liczbą punktów za zadanie (każde zadanie będzie miało co najmniej tyle punktów). W przypadku użycia tylko gzm points, bez liczb, punkty za zadanie są równe jego wartości diff.

Wartości diff wypisywane są w pliku ZWO (*_ha.pdf). Dla ułatwienia, po generacji zestawu, w którym użyto polecenia points, wypisywana jest w terminalu całkowita liczba punktów za zestaw. Definiując zestaw, można modyfikować przypisaną zadaniu wartość diff poleceniem gzm difficulty [liczba całkowita]. Kombinacja tych poleceń pozwala na uzyskanie porządanej całkowitej sumy punktów za zestaw z gwarancją, że dane zadanie będzie miało taką samą liczbę punktów w każdej wersji zestawu.
  ZIP 
Komendy, które można zamieszczać w pliku definiującym zestaw zadań po linii, w której znajduje się identyfikator zadania:
gzm vspace 4cm
Wstaw pionowy odstęp po zadaniu (tylko Z).  ZIP 
gzm insert ~\\ Sprawdź \textit{wynik}!
Wstaw tekst po zadaniu.  ZIP 
gzm insert-before ~\\ \textbf{Oddychaj!} \\[-1em]
Wstaw tekst przed zadaniem.  ZIP 
Użyj \needspace{...}, aby wymusić utrzymanie na stronie wstawianego tekstu razem z zadaniem:
gzm insert-before ~\\ \needspace{3\baselineskip} Po tym tekście powinno pojawić się zadanie jeszcze na tej stronie. \\[-1em]
Zwiększ liczbę przed \baselineskip, jeśli trzeba.
gzm grid 0.5cm 17cm 3cm
Wstaw kratkę po zadaniu; parametry: odstęp, szerokość, wysokość; jednostki (tutaj cm) muszą być tuż za liczbami, bez spacji (tylko Z).   ZIP 
Kratka o szerokości tekstu:
gzm grid 0.5cm \textwidth 5cm
Kratka na stronie, gdzie jest treść zadania, oraz na następnej stronie:
pl-termodynamika-0020000 "Przemiany gazowe"

gzm insert \\ \begin{tikzpicture} \draw[step=0.5cm,gray!60,thick] (0, 0) grid (\textwidth, 9.5cm); \end{tikzpicture}

gzm grid 0.5cm \textwidth \textheight
Uwaga: wszystko, co jest dodane komendą "insert", pojawi się także w plikach ze wskazówkami i odpowiedziami (ZW, ZO, ZWO).
gzm difficulty 2
Modyfikuj przypisaną zadaniu wartość diff (trudność). Parametr: nowa wartość diff zadania. Zapoznaj się z opisem komendy gzm points ZIP 
Komendy, które dotyczą grupy identyfikatorów zadań:
gzm from-group-choose 2
  pl-liczby-0001000 "Śliwki"
  pl-liczby-0002000 "Jabłka"
  pl-liczby-0003000 "Kamyki"
gzm end-group
Wybierz losowo i w losowej kolejności z grupy identyfikatorów zadaną liczbę identyfikatorów (tutaj 2 zadania z 3).  ZIP 
Wygeneruj znacznie więcej wersji zestawu, a potem wybierz te z najlepszym rozkładem tekstu i rysunków.
Komendy specjalne:
gzm comment Cokolwiek tutaj
Komentarz.

Przykłady wyszukiwania zadań pasujących do wyrażenia regularnego. Poniższe komendy można zamieszczać od 8 linii w pliku definiującym zestaw zadań (*.gzm). Komenda może być użyta tylko raz. Wyrażenie regularne musi zaczynać się w odstępie dokładnie 1 spacji po komendzie. Należy zadbać, by na końcu wyrażenia nie było zbędnych spacji.

W przypadku użycia dwóch lub trzech komend spośród search-author, search-description, search-id wyszukiwane są zadania spełniające wszystkie warunki.  ZIP 
gzm search-id czas
Wybierz zadania z id zawierającym "czas".
gzm search-id czas|temperat
Wybierz zadania z id zawierającym "czas" lub "temperat".
gzm search-id (?!.*temperatur.*)(^.*$)
Wybierz zadania z id nie zawierającym "temperatur".
gzm search-description [Mm]ars
Wybierz zadania z treścią zawierającą "Mars" lub "mars".
gzm search-description [Pp]olicz|[Pp]rzelicz
Wybierz zadania z treścią zawierającą "Policz" lub "policz", lub "Przelicz", lub "przelicz".
gzm search-description (?!.*Maciek.*)(^.*Jaś.*)
Wybierz zadania z treścią nie zawierającą "Maciek" i zawierającą "Jaś".
gzm search-description (?!.*Maciek.*)(^.*)
Wybierz zadania z treścią nie zawierającą "Maciek".
gzm search-description (?!.*milimetr.*)(^.*metr.*)
Wybierz zadania z treścią nie zawierającą "milimetr" i zawierającą "metr".
gzm search-description (?=.*[Pp]roton)(?=.*[Łł]adunek)
Wybierz zadania z treścią zawierającą równocześnie, w dowolnej kolejności ["proton" lub "Proton"] oraz ["ładunek" lub "Ładunek"]
Ignorowane są identyfikatory zadań wprost wpisane w pliku konfiguracyjnym.
Identyfikatory wybranych zadań wraz z opisem wyrażenia regularnego są zapisywane w pliku z rozszerzeniem .rgx w podkatalogu rgx katalogu Outputs. Możesz tę listę identyfikatorów wykorzystać do ułożenia swojego zestawu.
W Gezmat używane są wyrażenia regularne obsługiwane przez funkcję regex_search z biblioteki regex (C++), zgodnie ze  składnią ECMAScript , z rozróżnianiem wielkości liter.

Dodawanie własnych zadań do Gezmata

Możesz dodawać własne zadania, jeśli opanujesz podstawy C++ i LaTeX, a w przypadku tworzenia rysunków: Asymptote lub TikZ. Oczywiście znaczną pomocą są już przygotowane zadania – zachęcam, byś się na nich wzorował. Niżej znajdziesz sporo wskazówek, jak zacząć wpisywać zadania w Gezmacie.

Każde zadanie jest zapisane jako wyrażenie lambda. Prosty przykład - fragmenty plików z katalogu src/:
// Random integer in
// [min, max] for n=0
// [min*10^n, max*10^n] for n>0
// r(4,6) returns number in [4, 6]
// r(4,6,2) returns number in [400, 600]
int r(int min, int max, int n=0)

// String corresponding to real/10^n
// s(102) --> "102"
// s(102,2) --> "1.02"
// s(1020,3) --> "1.02"
// s(3,2) --> "0.03"
// s(2000,2) or s(2000,2,"removeZeros") --> "20"
// s(2000,2,"keepZeros") --> "20.00"
string s(const int number, const int nPlacesDecimalMarkLeft = 0, const string option = "removeZeros")

//---------------------------------------------
// Śliwki - uproszczona wersja
addProblem
("pl-liczby-0001000", // ID (string)
"Śliwki", // Title (string)
"Piotr Nieżurawski", // Authors (string)
"2016-07-21", // Date of the last update (string)
1, // Difficulty (int)
[]{ // Lambda expression (returns vector<string>)

   string text = "Jaś policzył posiadane śliwki i uzyskał wynik ";
   int n=3*r(5,12);
   text += s(n);
   text += ", a następnie zjadł jedną trzecią śliwek. Ile śliwek zostało Jasiowi?";

   vector<string> pV;
   pV.push_back(text);

   // Wskazówka
   text = "Ile jest równe ";
   text += s(n) + ":3? Odpowiedź: " + s(n/3) + ".";

   pV.push_back(text);

   // Odpowiedź
   text = "Liczba śliwek, które posiada Jaś: ";
   int answer = 2*n/3;
   text += s(answer);
   text += ".";

   pV.push_back(text);

   return pV;

} // End of lambda expression
); // End of addProblem
 Opis pomocnych przy tworzeniu zadań funkcji Gezmata 

Wskazówki dla autorów zadań - łatwy start
W katalogu src/ z pliku
pl-createProblemGeneratorMap-problems-include.cxx
skopiuj jedno zadanie do istniejącego pliku
your-problems-include.cxx
W tym pliku edytuj zadanie (przynajmniej zmień jego id, inaczej Gezmat zgłosi błąd).

Następnie w głównym katalogu pakietu:
./gezmat.bash def/pl-prepare-all-problems-config.gzm
I odszukaj swoje zadanie w wyprodukowanych plikach.

Możesz też w katalogu priv-def utworzyć plik podobny do pliku def/pl-sprawdzian_testowy_search-author.gzm, by produkować zestaw tylko z wszystkimi Twoimi zadaniami. Czyli:
cp def/pl-sprawdzian_testowy_search-author.gzm priv-def/pl-Your-Name-all_problems.gzm
Zmień w pliku "Nieżurawski" na własne nazwisko, a potem:
./gezmat.bash priv-def/pl-Your-Name-all_problems.gzm

Wskazówki dla autorów zadań - skrócenie czasu kompilacji podczas pisania nowego zadania
Podczas wpisywania nowego zadania w pliku src/your-problems-include.cxx uruchamiaj Gezmat z opcją your:
./gezmat.bash pl-prepare-all-problems-config.gzm your
Wtedy kompilowane są tylko zadania z pliku
src/your-problems-include.cxx
oraz tworzony jest tylko pdf z _ha w nazwie.

Wskazówki dla autorów zadań - dodatkowe opcje kompilatora, po napisaniu zadania
By sprawdzić nowe zadanie, uruchom Gezmat z opcją check:
./gezmat.bash pl-prepare-all-problems-config.gzm 10 check
lub
./gezmat.bash pl-prepare-all-problems-config.gzm 10 pdflatex check
Dobrze żądać kilku wersji zestawu, tutaj 10, gdyż np. dzielenie przez zero lub przekroczenie zakresu liczby może się zdarzać tylko czasami. Opcja ta włącza dodatkowe opcje kompilatora:
-fsanitize=undefined
-fsanitize=integer-divide-by-zero
-fsanitize=float-divide-by-zero
-fsanitize=signed-integer-overflow
-fsanitize=float-cast-overflow
-fsanitize=bounds-strict
-fsanitize=address
-fuse-ld=gold
Kompilacja trwa niestety znacznie dłużej.

Oczywiście należy niezależnie sprawdzić poprawność generowanych odpowiedzi. Tego Gezmat za nas nie zrobi...
 Pełny opis argumentów i zmiennych środowiskowych gezmat.bash 

Wskazówki dla autorów zadań - opis funkcji

r(number,...)
// Random integer in:
// [min, max] for n=0
// [min*10^n, max*10^n] for n>0
// r(4,6) returns number in [4, 6]
// r(4,6,2) returns number in [400, 600]
int r(int min, int max, int n=0)
r(vector)
// Random integer from the input vector
// r({0, 3, 7}) returns one of numbers: 0, 3, 7.
int r(vector<int> vec)
s(...)
Liczby i łańcuch znakowy jako argumenty:
// Return string corresponding to real/10^n (move period n places to the left)
// For example:
// s(102) -> "102"
// s(102,2) -> "1.02"
// s(1020,3) -> "1.02"
// s(3,2) -> "0.03"
// s(2000,2) or s(2000,2,"removeZeros") -> "20"
// s(2000,2,"keepZeros") -> "20.00"
string s(const int number, const int nPlacesDecimalMarkLeft = 0, const string option = "removeZeros")
Liczba i łańcuchy znakowe jako argumenty:
// Return string depending on the number:
// s(n,"jabłko","jabłka","jabłek"): 1 jabłko, 2-4, 22-24, ... jabłka, pozostałe: n jabłek (np. miał ...)
// s(n,"jabłka","jabłek"): 1 jabłka, pozostałe: n jabłek (np. brakowało ...)
// s(n,"raz","razy"): 1 raz, pozostałe: n razy
string s(const int number, const string formA, const string formB = "", const string formC = "")
Przykład - "Kamyki".

Łańcuchy, liczba i znowu łańcuchy znakowe jako argumenty:
// Return strings depending on the number:
// s("zostało","zostały","zostało",n,"jabłko","jabłka","jabłek"): zostało 1 jabłko; zostały 2-4, 22-24, ... jabłka; pozostałe: zostało n jabłek
string s(const string wordA, const string wordB, const string wordC, const int number, const string formA, const string formB, const string formC)
Przykład - "Śliwki", "Ochładzanie sali".

o(number, numberOfSignificantDigits)
// Function returns int rounded to specified number of significant digits
// Example: o(12332, 2) -> 12000
// Example: o(-12332, 2) -> -12000
// Example: o(1252, 2) -> 1300
// Example: o(-1252, 2) -> -1300
int o(const int number, const int numberOfSignificantDigits)
equalOrApprox(const int number, ...)
// Function returns string equal to: "=" or "\approx" + s( o(number, numberOfSignificantDigits), nPlacesDecimalMarkLeft, sOption)
// Sign "=" is chosen if number == o(number, numberOfSignificantDigits). It means there is no rounding.
// Otherwise, "\approx" is chosen.
// Example: equalOrApprox(123, 2) -> "\approx 120"
// Example: equalOrApprox(123, 2, 1) -> "\approx 12"
// Example: equalOrApprox(123, 2, 1, "keepZeros") -> "\approx 12.0"
// Example: equalOrApprox(1230, 3) -> "= 1230"
// Example: equalOrApprox(1230, 3, 2) -> "= 12.3"
// Example: equalOrApprox(1230, 3, 2, "keepZeros") -> "= 12.30"
string equalOrApprox(const int number, const int numberOfSignificantDigits, const int nPlacesDecimalMarkLeft = 0, const string sOption = "removeZeros")
shuf(vector)
// Return shuffled vector
vector<T> shuf(vector<T> vec)
powInt(k, n)
// Function "power of k to n" returns k^n, only for n>=0.
int powInt(const int k, const int n)
p10(number)
// "power of 10" returns 10^n, for n>=0.
int p10(int n)
itod(number)
// Function returns double from int
// Example: itod(11) --> 11.0
double itod(const int i)
dtoi(number)
// Function returns int from double rounded by std::round()
// Example: dtoi(10.8) --> 11
int dtoi(const double d)
writeContainerElements(Iterator, Iterator)
// Function returns a string with sequence of integers or strings from a container separated by comma, e.g.: 1, 3, 5, 6
string writeContainerElements(Iterator it, const Iterator end, const string separator = ", ", const string flag = "")
in(x, leftBracket, a, rightBracket)
// Function returns LaTeX string of the form: x \in leftbracket a rightbracket, e.g. t \in { 10, 20, ..., 100 }
string in(string x, string leftBracket, string a, string rightBracket)
in(x, leftBracket, a, b, rightBracket)
// Function returns LaTeX string of the form: x \in leftbracket a, b rightbracket, e.g. t \in [ 10, 20 [
string in(string x, string leftBracket, string a, string b, string rightBracket)
W gezmat.cxx w namespace gezmatTools znajdziesz definicje innych przydatnych funkcji i obiektów:
numberToVectorOfStrings
numberLength
asymptotePicture
asymptoteGraph
tableForOperation
triangleOfNumbers
tableWithTriangleOfNumbers
NumberSnakePicture

Tworzenie rysunków

 Wskazówki dotyczące tworzenia rysunków w Asymptote 

Przy tworzeniu rysunków obwodów elektrycznych należy wzorować się na istniejących zadaniach. W szczególności można wykorzystać zdefiniowane symbole woltomierza i amperomierza, których nie ma w starszych wersjach TikZ.circuits.

Autorzy

Autorzy poszczególnych zadań są wskazani w pliku  all_problems_pl_ha.pdf 
Twórcy zadań w kolejności chronologicznej:
Piotr Nieżurawski    Piotr.Niezurawski@pionie.pl 
Joanna Drabarz    joanna.drabarz@gmail.com 
Magda Gładka    m.gladka@student.uw.edu.pl 
Małgorzata Berajter    malgorzata.berajter@gmail.com 
Andrzej Twardowski    Andrzej.Twardowski@fuw.edu.pl 
Klaudia Dec    klaudiaplodzien@gmail.com 
Zofia Drabek    zosia.drabek@gmail.com 
Jakub Iwański    jakub.iwanski008@gmail.com 
Maria Ploch    maria.ploch.ofc@gmail.com 
Weronika Borczuch    w.nika.132@gmail.com 
Kamil Murakowski    murek5002@gmail.com 

Autorzy środowiska graficznego  GezmatGUI , w kolejności alfabetycznej:
Beata Goźlińska    b.gozlinska@gmail.com 
Jan Kamiński    jasiekkaminski@gmail.com 
Piotr Nieżurawski (drobne zmiany)    Piotr.Niezurawski@pionie.pl 
Katarzyna Życieńska (kierownik projektu)    k.zycienska@gmail.com 

Kod, koordynacja, strona WWW

Piotr Nieżurawski    Piotr.Niezurawski@pionie.pl 
Inne moje projekty:  pionie.pl 

Zapraszamy do współpracy

Chcesz pomóc, zgłosić uwagę, masz pytanie - zajrzyj na  grupę dyskusyjną Gezmat PL 
lub wyślij mail do koordynatora  Piotr.Niezurawski@pionie.pl .

Licencje

GNU GPL
Program Gezmat oraz dodatek GezmatGUI udostępniane są na otwartej licencji GNU General Public License opublikowanej przez Free Software Foundation, w wersji 3
https://www.gnu.org/licenses/gpl.txt

Otrzymane z programu Gezmat zadania oraz pliki z rozszerzeniem gzm, które definiują zestawy zadań, są udostępnione na otwartej licencji CC BY-SA 4.0, Creative Commons - Uznanie autorstwa - Na tych samych warunkach - 4.0 - Międzynarodowe
http://creativecommons.org/licenses/by-sa/4.0/deed.pl
Jeśli zmodyfikujesz zestawy zadań i chcesz je upublicznić, nie musisz wskazywać autora każdego z zadań, a wystarczy, że zamieścisz w widoczny sposób adres strony gezmat.pl, na której znajduje się lista autorów. Oczywiście, zgodnie z warunkami licencji, powinieneś również zamieścić oznaczenie licencji co najmniej w postaci CC BY-SA 4.0

Więcej informacji znajdziesz w katalogu LICENCE pakietu.

Jeśli wprowadzisz modyfikacje lub zamieścisz dodatkowe fragmenty w plikach pakietu Gezmat i chcesz je upublicznić, dopisz swoje nazwisko, e-mail i datę w nagłówku modyfikowanego pliku. Dodawaj tylko to, co sam stworzyłeś, lub to, co należy do domeny publicznej.

Wysłanie do koordynatora projektu lub upublicznienie zmian lub dodatków do pakietu Gezmat oznacza zgodę ich autora na włączenie tych zmian lub dodatków do oficjalnej wersji pakietu Gezmat na zasadach licencji, w ramach której pakiet Gezmat jest udostępniany.
Prosimy o poinformowanie koordynatora projektu o Twoich uzupełnieniach, dodatkach i modyfikacjach pakietu.

Instalowanie potrzebnych pakietów w systemach z APT (Ubuntu, Mint, Debian), w tym w Windows Subsystem for Linux w Windows 10:
$ sudo ./install-pkgs-for-gezmat.bash
Należy wpisać hasło, a następnie potwierdzać (Enter lub T, lub Y).
Instalowane są:

gezmat.bash - argumenty i zmienne środowiskowe

Składnia
./gezmat.bash [configuration_file] [number_of_versions] [pdflatex] [check] [your]
Argumenty

Kolejność argumentów jest dowolna. W przypadku niepodania żadnych argumentów wyświetlana jest informacja o składni. W pozostałych przypadkach konieczne jest podanie pliku konfiguracyjnego (configuration_file) – inaczej pojawia się komunikat o błędzie.

Produkcja jednej wersji zestawu zdefinowanego w def/pl-fale.gzm
./gezmat.bash def/pl-fale.gzm
Produkcja 15 wersji zestawu zdefinowanego w def/pl-fale.gzm
./gezmat.bash def/pl-fale.gzm 15
Produkcja jednej wersji zestawu z użyciem pdflatex zamiast latex
./gezmat.bash def/pl-fale.gzm pdflatex
Produkcja 5 wersji zestawu zdefinowanego w priv-def/pl-podstawy-fizyki-egzamin.gzm
./gezmat.bash priv-def/pl-podstawy-fizyki-egzamin.gzm 5
Kompilacja i uruchomienie z dodatkową weryfikacją poprawności programu
./gezmat.bash def/pl-zbiory.gzm 20 check
lub
./gezmat.bash def/pl-zbiory.gzm 20 pdflatex check
Przygotuj plik all_problems_pl.gzm z wszystkimi identyfikatorami zadań oraz wygeneruj zestaw z wszystkimi zadaniami
./gezmat.bash def/pl-prepare-all-problems-config.gzm
Kompiluj tylko zadania z pliku src/your-problems-include.cxx i twórz tylko pdf z _ha w nazwie:
./gezmat.bash def/pl-prepare-all-problems-config.gzm your
lub
./gezmat.bash priv-def/pl-moje-wybrane-zadania.gzm your
Zmienne środowiskowe

Wskazanie kompilatora
$ export CXX=g++-7 ; ./gezmat.bash def/pl-fale.gzm
Pamiętaj, żeby zlikwidować zmienną, gdy nie chcesz, by wpływała na program. Np. możesz wskazać kompilator
$ export CXX=clang++-3.6 ; ./gezmat.bash def/pl-fale.gzm
a potem usunąć zmienną CXX (wtedy Gezmat użyje domyślnego kompilatora):
$ unset CXX ; ./gezmat.bash def/pl-fale.gzm
Domyślny kompilator można ustawić też za pomocą skryptu:
$ unset CXX ; ./set-compiler-for-gezmat.bash
Skrypt sprawdzi dostępne kompilatory (trochę to trwa), a następnie zapisze informację o wyborze użytkownika w pliku
.gezmat.cfg
Jest to wygodniejsze od samodzielnego ustawiania zmiennej CXX na początku każdej sesji. Plik .gezmat.cfg można edytować i ręcznie wskazać domyślny kompilator. Uwaga! Wskazanie kompilatora za pomocą 'export CXX=...' ma wyższy priorytet niż wskazanie w pliku .gezmat.cfg!

Wskaż alternatywny katalog dla produkowanych plików, zamiast Outputs/... (tylko dla twórców narzędzi korzystających z Gezmata)
export GEZMAT_OUTPUTS_DIR=MyTestDir ; ./gezmat.bash def/pl-fale.gzm
Nie przetwarzaj plików LaTeX, czyli nie wywołuj ani latex, ani pdflatex, w związku z czym nie są produkowane pliki PDF (tylko dla twórców narzędzi korzystających z Gezmata; np. do szybszego tworzenia plików .rgx)
export GEZMAT_NO_LATEX_PROCESSING=true ; ./gezmat.bash def/pl-dynamika.gzm

Wskazówki dla autorów rysunków - Asymptote w LaTeX
Zalecam najpierw przygotować oddzielny plik, w którym zdefinowany jest rysunek w języku  Asymptote . Produkcja obrazka zdefinowanego w pliku zderzenie.asy:
asy zderzenie.asy
Powstaje plik w formacie Encapsulated Postscript zderzenie.eps. Po sprawdzeniu, że rysunek jest poprawny, można wkomponować program w Asymptote w zadanie w Gezmacie.

Uwaga! Nie dołączamy gotowych rysunków (plików *.eps itp.) do Gezmata!

Jak wstawić program-rysunek w Gezmacie? Przyjrzyj się zadaniom, w których znajdują się wywołania funkcji (zalecany sposób):
asymptotePicture
oraz
asymptoteGraph
a także fragmenty tekstu (stary sposób)
\begin{asy}
Jest to początek programu w Asymptote wstawionego w LaTeX.

A oto kilka przykładów rysunków w Asymptote. Zwróć uwagę na zmiany, które należy wprowadzić, wstawiając kod Asymptote w LaTeX - usuwamy linie z "locale", a w przypadku pojedynczych wykresów linie z "size", dopasowujemy rozmiary rysunku.

Wskazówki dla autorów rysunków - Asymptote w LaTeX
Prosty schemat - pocisk i wahadło.
 hit-pendulum.asy 
 hit-pendulum.eps 
 hit-pendulum.tex 
 hit-pendulum.pdf 

Wskazówki dla autorów rysunków - Asymptote w LaTeX
Prosty schemat - równia pochyła i cegła.
 incline-with-box.asy 
 incline-with-box.eps 
 incline-with-box.tex 
 incline-with-box.pdf 

Wskazówki dla autorów rysunków - Asymptote w LaTeX
Prosty wykres x(t).
 graph-simple.asy 
 graph-simple.eps 
 graph-simple.tex 
 graph-simple.pdf 

Wskazówki dla autorów rysunków - Asymptote w LaTeX
Wiele wykresów (wiersze i kolumny) - ilustracja powstawania fali stojącej.
 multiple-sinuses.asy 
 multiple-sinuses.eps 
 multiple-sinuses.tex 
 multiple-sinuses.pdf