Advertisement
milanmetal

GTIN Validator / Andrea z1

Oct 30th, 2019
785
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.29 KB | None | 0 0
  1. #include "stdio.h"
  2.  
  3. int main() {
  4.  
  5.   // Kod zemlje: 3 cifre
  6.   // Proizvodjac + broj artikla: 9 cifara
  7.   // Kontrolni broj: 1 cifra
  8.   unsigned long long int GTIN = 7622200004607;
  9.   printf("Pocetni GTIN = %llu\n", GTIN);
  10.   // Da bismo izracunali kontrolni broj
  11.   // prvih 12 cifara treba da se pomnozi sa 1 i 3, naizmjenicno
  12.   // a zatim da se sumiraju ovi proizvodi
  13.   // Suma brojeva se zaokruzuje na prvu vecu deseticu.
  14.  
  15.   // Razlika izmedju zaokruzenog broja i nezaokruzene sume
  16.   // jeste kontrolni broj
  17.   // --> poslednja cifra ovog GTIN broja je 7 (ovo je kontrolni broj)
  18.  
  19.   // 1. Korak --> odvojiti cifre od ovog velikog broja.
  20.   // Ovo se radi pomocu operatora / i %
  21.   // -- Operator % je DIJELJENJE PO MODULU, na ovaj nacin dobijamo ostatak
  22.   // pri dijeljenju
  23.   // -- Operator / je obicno dijeljenje, cijelobrojno dijeljenje.
  24.   // Upotrebom ova dva operatora moguce je izdvojiti sve cifre.
  25.  
  26.   // Ostatak pri dijeljenju sa deset je poslednja cifra.
  27.   int kontrolniBroj = GTIN % 10;
  28.   printf("Kontrolni broj: %d\n\n", kontrolniBroj); // C-ovski ispis
  29.  
  30.   // Posto je / cjelobrojno dijeljenje, nakon sto smo izvadili poslednju cifru
  31.   // zelimo je odbaciti, iskoristicu pocetnu promjenjivu, mozes napraviti i
  32.   // novu promjenjivu, nema problema...
  33.   GTIN = GTIN / 10;
  34.   // Sada nakon ove linije imamo GTIN = 762220000460
  35.   // --> Uoci da fali sedmica na kraju
  36.   printf("GTIN bez 7 = %llu\n", GTIN);
  37.  
  38.   // Sada od novog GTIN-a bez 7 na kraju uzimamo opet cifru
  39.   // pomocu operator %
  40.   int c12 = GTIN % 10;
  41.  
  42.   // Sada odbacujemo i 0 sa kraja, time smo odbacili 07 od pocetnog GTIN-a
  43.   // Ovaj proces ponavljamo 12 puta dok ne pokupimo sve cifre...
  44.   // Ovaj zadatak ocigledno ima za cilj
  45.   // da pokaze cemu sluze petlje kada dodjes do njih :)
  46.   GTIN = GTIN / 10;
  47.   printf("GTIN bez 07 = %llu\n", GTIN);
  48.   int c11 = GTIN % 10;
  49.  
  50.   GTIN = GTIN / 10;
  51.   printf("GTIN bez 607 = %llu\n", GTIN);
  52.   int c10 = GTIN % 10;
  53.  
  54.   GTIN = GTIN / 10;
  55.   printf("GTIN bez 4607 = %llu\n", GTIN);
  56.   int c9 = GTIN % 10;
  57.  
  58.   GTIN = GTIN / 10;
  59.   printf("GTIN bez 04607 = %llu\n", GTIN);
  60.   int c8 = GTIN % 10;
  61.  
  62.   GTIN = GTIN / 10;
  63.   printf("GTIN bez 004607 = %llu\n", GTIN);
  64.   int c7 = GTIN % 10;
  65.  
  66.   GTIN = GTIN / 10;
  67.   printf("GTIN bez 0004607 = %llu\n", GTIN);
  68.   int c6 = GTIN % 10;
  69.  
  70.   GTIN = GTIN / 10;
  71.   printf("GTIN bez 00004607 = %llu\n", GTIN);
  72.   int c5 = GTIN % 10;
  73.  
  74.   GTIN = GTIN / 10;
  75.   printf("GTIN bez 200004607 = %llu\n", GTIN);
  76.   int c4 = GTIN % 10;
  77.  
  78.   GTIN = GTIN / 10;
  79.   printf("GTIN bez 2200004607 = %llu\n", GTIN);
  80.   int c3 = GTIN % 10;
  81.  
  82.   GTIN = GTIN / 10;
  83.   printf("GTIN bez 22200004607 = %llu\n", GTIN);
  84.   int c2 = GTIN % 10;
  85.  
  86.   GTIN = GTIN / 10;
  87.   printf("GTIN bez 622200004607 = %llu <-- kraj\n\n", GTIN);
  88.   int c1 = GTIN % 10;
  89.  
  90.   // Sada mozemo da ispisemo sve cifre koje smo uzeli redom
  91.   printf("Cifra 12: %d\n", c12);
  92.   printf("Cifra 11: %d\n", c11);
  93.   printf("Cifra 10: %d\n", c10);
  94.   printf("Cifra 9: %d\n", c9);
  95.   printf("Cifra 8: %d\n", c8);
  96.   printf("Cifra 7: %d\n", c7);
  97.   printf("Cifra 6: %d\n", c6);
  98.   printf("Cifra 5: %d\n", c5);
  99.   printf("Cifra 4: %d\n", c4);
  100.   printf("Cifra 3: %d\n", c3);
  101.   printf("Cifra 2: %d\n", c2);
  102.   printf("Cifra 1: %d\n", c1);
  103.  
  104.   // Sada jednostavno sve cifre izmnozimo sa 1 i 3 naizmjenicno i sumiramo ih
  105.   // Pravimo novu pomocnu promjenjicu koja ce cuvati sumu
  106.   // Posto je suma dosta mala u odnosu na GTIN broj mozemo koristiti
  107.   // obicni integer tip
  108.   int suma;
  109.  
  110.   // Naizmjenicno mnozis cifre sa 1 i 3
  111.   suma = c1*1 + c2*3 + c3*1 + c4*3 + c5*1 + c6*3 + c7*1 + c8*3 + c9*1
  112.     + c10*3 + c11*1 + c12*3;
  113.  
  114.   printf("\nSuma = %d\n", suma);
  115.  
  116.  
  117.   // E sada, kako zaokruziti na prvu narednu deseticu?
  118.   // Vecina programskih jezika nudi gotovu funkciju "ceil", u prevodu "plafon"
  119.   // i ona to obavi, npr: ceil(53) = 60
  120.   // ali jako jednostavno je mozemo napraviti
  121.   int sumaZaokruzeno = ((suma / 10) + 1) * 10;
  122.   // Sta sam uradio u liniji iznad? Od sume koja je u primjeru 53 sam odbacio
  123.   // poslednju cifru, to je ovdje dalo 5, uvecao sam to za 1 i onda to pomnozio sa 10
  124.   // Da je suma bila npr 153, dobili bismo (15 + 1) * 10 = 160 --> radi!
  125.   printf("\nZaokruzena suma = %d\n", sumaZaokruzeno);
  126.  
  127.   // Sada samo ispisemo izracunati kontrolni broj
  128.   printf("\nKontrolni broj (izracunati) = %d\n\n", sumaZaokruzeno-suma);
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement