15. }//koniec if z linii 5
16. }//koniec funkcji powiększ
Zmienna wskaźnik przechowuje pozycje na tablicy na której wykonywane są obliczenia. W liniach 4-6 operujemy na fragmencie liczby, który odwzorowuje rząd jedności. Dlatego zwiększamy tą pozycję o 2, dzięki czemu omijamy w czasie sprawdzania liczby parzyste (UWAGA: musimy zacząć od liczby nieparzystej). Pozostałe pozycje zwiększamy o jeden. W liniach 5. i 10. przy pomocy instrukcji if sprawdzamy czy liczby w danym rzędzie osiągnęły (lub przekroczyły w przypadku rzędu jedności) wartość 10. Jeśli tak jest musimy te pozycje zredukować i zwiększyć liczby w kolejnych rzędach.
Poniżej kod drugiej ze wspomnianych wcześniej funkcji:
--------------ŹRÓDŁO 6--------------
1. void dziel(){
2. char flagawyp=0;
3. long int reszta=0;
4. m=40;
5. reszta=0;
6. while(flagawyp==0 && m—){
7. if(sprliczba[m]!=0)flagawyp=l;
8. }//koniec while
9. while(m>0){
10. if(reszta!=0)reszta=(reszta*10+sprliczba[m])%liczp[j];
11. else reszta=sprliczba[m]%liczp[j];
12. m—;
13. }//koniec while
14. wynikmod=reszta;
15. }//koniec procedury dziel
Przy pomocy pętli while w liniach 6-8, z wykorzystaniem zmiennej m, określamy od jakiej pozycji na tablicy zaczynamy operować na liczbie (pozostałe pozycje zawierają zera).
Choć różnica w prędkości działania pomiędzy powyższą metodą a tą, która zastosowaliśmy wcześniej może nie być zauważalna jeśli uruchomimy program na niskich zakresach, to jednak dla liczb do 108 jej wykorzystywanie wydłuża znacznie czas pracy programu. Dlatego też dla początkowych zakresów będziemy stosować starą metodę. Wprowadźmy zmienną fpid, która będzie regulować z którego algorytmu ma korzystać program.
Funkcja szukaj uzyskuje ostatecznie formę:
--------------ŹRÓDŁO 7--------------
1. void szukaj()
3. short int flaga;
4. long int flagapoz;
5. char flagawyp=0;
6. illiczb=nilliczb;
7. for(long int opl=minzl; opl<=maxzl; opl++)
8. {
9. for(long int op2=minz2; op2<=maxz2; op2++)
11. flaga=l;
12. flagapoz=0;
7