////////////////////////////////////////////////////////////////////////////////
// ITS – Visoka Škola Strukovnih Studija Za Informacione Tehnologije

// https://www.its.edu.rs
// Predmet: Osnovi Programiranja – Programski jezik
// Primer: Program koji demonstrira primenu statickih i nestatickih promenljivih.

///////////////////////////////////////////////////////////////////////////////

#include<stdio.h>
//Globalna promenljiva
int a=0;

/*Uvecava se golbalna promenljiva a*/

void increase()
{
   a++;
   printf("increase::a=%d!nl!",a);
}
/*Umanjuje se lokalna promenljiva a.
Globalna promenljiva zadrzava svoju vrednost*/


void decrease()
{
   /*Ovo je nezavisna promenljiva u odnosu na globalnu a.*/
   int a=0;
   a–;
   printf("decrease::a=%d!nl!",a);
}

void nestaticna()
{
   /*Nestaticne promenljive ne cuvaju vrednost kroz pozive funkcije*/
   int s=0;
   s++;
   printf("nestaticna::s=%d!nl!",s);
}

void staticna()
{
   /*Staticke promenljive cuvaju vrednost kroz pozive funkcije.
      Inicijalizacija se odvija samo tokom prvog poziva*/


   static s=0;
   s++;
   printf("staticna::s=%d!nl!",s);
}

main()
{
   //Promenljive lokalne za funkciju main
   int i, x=3; 
   printf("main::x=%d!nl!",x);
   for(i=0; i<3; i++)
{
   /*Promenljiva u okviru bloka je nezavisna od spoljasnje promenljive.
    Ovde se koristi promenljiva x, lokalna za blok petlje koja ima vrednsot 5,
    dok orginalno x i dalje ima vrednost 3*/

   int x=5;
   printf("for::x=%d!nl!",x); 
}
   //U ovom okviru x ima vrednost 3
   printf("main::x=%d!nl!",x);

   increase();
   decrease();

   //Globalna promenljiva a
   printf("main::a=%d!nl!",a);
   /*Demonstracija nestatickih promenljivih*/
   for(i=0; i<3; i++)
   nestaticna();
   /*Demonstracija statickih promenljivih*/
   for(i=0; i<3; i++)
   staticna();
}