////////////////////////////////////////////////////////////////////////////
// ITS – Visoka Škola Strukovnih Studija Za Informacione Tehnologije
// https://www.its.edu.rs/
// Predmet: Osnovi Programiranja – Programski jezik C
//
// Primer: Program koji proverava tacnost JMBG. Izracunavanje:
// prvih 6 cifara unetog JMBG zatim sledecih 6 se mnoze sa
// 7, 6,…2 zasebno. Suma svih proizvoda se deli po modulu 11
// u koliko je ostatak pri deljenju 0 ili 1 kontrolni broj je 0
// u suprotnom kontrolni broj se dobije oduzimanje dobijene
// sume od 11. Ako je kontrolni broj jednak poslednjoj cifri
// unetog JMBG – JMBG je ispravan!
// Nacin izracunavanja preuzet iz SLUZBENOG GLASNIKA.
////////////////////////////////////////////////////////////////////////////
#include<stdio.h>
//prototip funkcije
int provera(int x[], int i);
main()
{
//deklarisanje promenljivih
int x[13], i, kb=0;
//zaglavlje programa, radi lepseg prikaza
printf("
<><><><><><><><><><><><><><><>
");
printf("<> <>
");
printf("<> PROGRAM ZA PROVERAVANJE <>
");
printf("<> TACNOSTI UNETOG JMBG! <>
");
printf("<> Cifre unosite: <>
");
printf("<> broj<razmak>broj… <>
");
printf("<> <>
");
printf("<><><><><><><><><><><><><><><>
");
//poruka korisniku o unosu maticnog broja
printf("
>> Unesite JMBG:
");
//for petlja koja se krece od prve do poslednje cifre u maticnom broju
for(i=0;i<13;i++)
{
scanf("%d",&x[i]);
}
//poziv funkcije za proveru jmbg
kb=provera(x,i);
//provera, ako je kontrolni broj jednak poslednjoj cifri jmbg
if(kb==x[12])
{
//poruka korisniku o tacnosti jmbg
printf("
<><><><><><><><><><><><><><><>
");
printf("<> Unreti JMBG je ispravan! <>
");
printf("<><><><><><><><><><><><><><><>
");
}
else
{
//poruka korisniku o gresci prilikom unosa jmbg
printf("
<><><><><><><><><><><><><><><><>
");
printf("<> Uneti JMBG nije ispravan! <>
");
printf("<><><><><><><><><><><><><><><><>
");
}
}
//funkcija za racunanje kontrolnog broja
int provera(int x[], int i)
{
//deklarisanje promenljivih
int m, suma=0, kont=0, kontrolniBroj=0, rez=0;
//broj clana niza pre ulaska u petlju
i=0;
//racunanje sume: svaki clan niza(od 0-og do 5-og) se mnozi posebno sa
//clanovima for petlje(od 7 do 2)
//prvi clan niza*7+drugi*6+….
for(m=7;m>1;m–)
{
suma+=m*x[i];
i++; //uvecavanje clana niza
}
//broj clanova niza pre ulaska u petlju
i=6;
//akumuliranje sume za preostalih 6 clanova unetog niza
for(m=7;m>1;m–)
{
suma+=m*x[i];
i++;
}
//ostatak pri deljenju krajnje sume po modulu 11
kont=suma%11;
//provera, ako je rezultat funkcije jednak 1 ili 0
//kontrolni broj je 0
if(kont==0 || kont==1)
{
kontrolniBroj=0;
}
//ako nije kontrolni broj se dobija oduzimanjem rezultata od 11
else
{
kontrolniBroj=11-kont;
}
//funkcija vraca rezultat
return kontrolniBroj;
}