Prevedimo sada program iz paskalolikog jezika (za koji smo dokazali totalnu korektnost), u C program vodeći računa da pri tome ne narušimo invarijantu petlje i korektnost programa.
Direktnim prevođenjem dobija se sledeći program:
main() { y = 1; z = 0; while (z!=x) { z = z + 1; y = y * z; } }
Da bi program imao smisla, moramo obezbediti unošenje vrednosti ulazne promenljive x od strane korisnika, kao i ispis rezultata na standardni izlaz. Zbog toga je neophodno navesti predprocesorsku direktivu #include<stdio.h> kojom uključujemo podršku za ulazne i izlazne funkcije. Potrebno je voditi računa i o deklaraciji i o tipu promenljivih - int. Dodatno, kako bi program mogao da se koristi za što veće (nenegativne cele) brojeve navešćemo uz tip int kvalifikator unsigned long. Time dobijamo sledeći program:
#include<stdio.h>
main()
{
int x,z;
unsigned long int y;
printf("Unesite prirodan broj x za koji zelite da izracunate faktorijel:\n");
scanf("%d",&x);
y = 1;
z = 0;
while (z!=x)
{
z = z + 1;
y = y * z;
}
printf("Faktorijel(%d)=%ld\n",x,y);
}
Ako uključimo proveru ispravnosti unetog ulaza i funkciju exit() (za koju nam je potrebno zaglavlje stdlib.h), i iskoristimo operatore ++ i *= programskog jezika C, dobijamo sledeći program:
#include<stdio.h> #include<stdlib.h> main() { int x,z; unsigned long y; printf("Unesite prirodan broj x za koji zelite da izracunate faktorijel:\n"); scanf("%d",&x); if(x<0) { printf("Greska pri unosu vrednosti!\n"); exit(1); } y = 1; z = 0; while (z!=x) { ++z; y *= z; } printf("Faktorijel(%d)=%ld\n",x,y); }
To se još kraće može zapisati na sledeći način:
#include<stdio.h> #include<stdlib.h> main() { int x,z; unsigned long y; printf("Unesite prirodan broj x za koji zelite da izracunate faktorijel:\n"); scanf("%d",&x); if(x<0) { printf("Greska pri unosu vrednosti!\n"); exit(1); } y = 1; z = 0; while (z!=x) y *= ++z; printf("Faktorijel(%d)=%ld\n",x,y); }
Na ovaj način smo došli do kraja razvojnog puta programa za izračunavanje faktorijela prirodnog broja x. Pri tome, znamo da se on uvek zaustavlja i da je korektan za sve vrednosti ulaznog parametra.