Naredna: NZD Gore: Faktorijel Prethodna: Dokaz zaustavljanja programa   Sadržaj


Prevođenje u C program

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.




Naredna: NZD Gore: Faktorijel Prethodna: Dokaz zaustavljanja programa   Sadržaj