Naredna: Celobrojno deljenje Gore: NZD Prethodna: Dokaz zaustavljanja programa   Sadržaj


Prevodjenje 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.

Da bi program imao smisla, moramo obezbediti unošenje vrednosti ulaznih promenljivih x i y od strane korisnika, kao i ispis rezultata na standardni izlaz. Potrebno je voditi računa i o deklaraciji i tipu promenljivih. Kako promenljive x i y mogu imati samo celobrojne nenegativne vrednosti, njihov tip će biti neoznačen ceo broj, pritom potrebno je proveriti da li su ulazne vrednosti jednake nuli. Takođe, podrazumevamo da je podržana operacija % koja izračunava ostatak pri celobrojnom deljenju. Time dobijamo sledeći program:

#include<stdio.h>
#include<stdlib.h>

main()
{
   unsigned int x, y, z;
   unsigned int p, q, pom;
   printf("Unesite prirodne brojeve x i y za koje zelite da izracunate NZD:\n");
   scanf("%d%d", &x, &y);
   if ((x == 0) || (y == 0)) 
   {
	printf("Greska pri unosu vrednosti!\n");   
	exit(1);
   }
   p = x;
   q = y;
   if (p<q)
   {
       pom = p;
       p = q;
       q = pom;
   }
   while (q != 0)
   {
       pom = q;
       q = p % q;
       p = pom;
   }
   z = p; 
   printf("NZD(%d, %d) = %d\n", x, y, z); 
}
Broj pomoćnih promenljivih prethodnog programa može da se smanji. Takođe, uslov (q != 0) ekvivalentan je uslovu (q). Dakle, prethodni program postaje:
#include<stdio.h>
#include<stdlib.h>

main()
{
   unsigned int x, y, pom;
   printf("Unesite prirodne brojeve x i y za koje zelite da izracunate NZD:\n");
   scanf("%d%d", &x, &y); 
   if ((x == 0) || (y == 0)) 
   {
	printf("Greska pri unosu vrednosti!\n");   
	exit(1);
   }
   printf("NZD(%d, %d) = ", x, y); 
   if (x<y)  
   {
        pom = x;
        x = y;
        y = pom;
   }
   while (y)
   {
        pom = y;
        y = x % y;
        x = pom;
   }
   printf("%d\n", x); 
}

Na ovaj način smo došli do kraja razvojnog puta programa za izračunavanje najvećeg zajedničkog delioca prirodnih projeva x i y. Pri tome, znamo da se on uvek zaustavlja i da je korektan za sve vrednosti ulaznih parametara.



Naredna: Celobrojno deljenje Gore: NZD Prethodna: Dokaz zaustavljanja programa   Sadržaj