////////////////////////////////////////////////////////////////////////////
// ITS – Visoka Škola Strukovnih Studija Za Informacione Tehnologije
//
https://www.its.edu.rs/
// Predmet: Osnovi Programiranja – Programski jezik C
//
// Primer: Program za proveru tačnosti bar koda. Po standardu
// bar kod se sastoji od 13 cifara, kontrola se vrši:
// suma svih cifara na parnim pozicijama pomnožena sa 3 se sabira
// sa sumom cifara na neparnim pozicijama sem poslednje, dobijena
// suma se deli po modulu 10 i dobijeni ostatak pri deljenju se
// oduzima od broja 10. Dobijeni broj je kontrolni broj i čini
// poslednju cifru bar koda, ako kontrolni broj nije jednak
// poslednjoj cifri bar kod nije tačan!
// Način izračunavanja preuzet iz SLUZBENOG GLASNIKA
////////////////////////////////////////////////////////////////////////////

#include<stdio.h>

//prototip funkcije
int provera(int x[]);

main()
{

//deklarisanje promenljivih
int x[13], kBr, i;

//zaglavlje, radi lepseg prikaza
printf(”
************************************************
“);
printf(“************************************************
“);
printf(“**                                                                               **
“);
printf(“** >>PROGRAM ZA PROVERAVANJE ISPRAVNOSTI BAR KODA<< **
“);
printf(“**                                                                                **
“);
printf(“** BROJ UNOSITE: -broj<razmak>broj…                            **
“);
printf(“** -broj<ENTER>broj…                                                  **
“);
printf(“**                                                                                 **
“);
printf(“*************************************************
“);
printf(“*************************************************

“);

//poruka korisniku za unos bar koda
printf(” * Unesite bar kod:
“);

//petlja za unos cifara bar koda
for(i=0;i<13;i++)
{
scanf(“%d”,&x[i]);
}

//poziv funkcije
kBr=provera(x);

//provera da li je poslednja cifra bar koda jednaka kontrolnom broju
if(kBr==x[12])
{
//poruka korisniku
printf(”
****************************
“);
printf(“* VAS BAR KOD JE ISPRAVAN! *
“);
printf(“****************************
“);
}

//u koliko nije jednak poruka o gresci
else
{
    printf(”
****************************
“);
printf(“* VAS BAR KOD NIJE ISPRAVAN! *
“);
printf(“****************************
“);
}

}

//funkcija koja izracunava kontrolni broj
int provera(int x[])
{

//deklarisanje promenljivih
int i, suma=0, suma1=0, suma2=0, suma3=0, c, kontrolniBroj;

//for petlja koja se krece od prve do poslednje cifre bar koda
for(i=0;i<13;i++)
{
//suma cifara koje se nalaze na parnim pozicijama
suma1=x[1]+x[3]+x[5]+x[7]+x[9]+x[11];

     //dobijena suma parnih pozicija pomnozena sa 3
suma2=3*suma1;

     //suma cifara, sem poslednje, koje se nalaze na neparnim pozicijama
suma3=x[0]+x[2]+x[4]+x[6]+x[8]+x[10];

    //zbir cifara na parnim i neparnim pozicijama
suma=suma2+suma3;
}

//promenljiva ‘c’ predstavlja ostatak pri deljenju krajnje sume po modulu 10
c=suma%10;

//provera, u koliko nema ostatka pri deljenju kontrolni broj je 0
if(c==0)
{
kontrolniBroj=0;
}


//u koliko ima ostatka
//od broja 10 se oduzima broj ostatka i dobijeni broj predstavlja kontrolni
else
{
kontrolniBroj=10-c;
}

//funkcija vraca rezultat
return kontrolniBroj;

}