Zadatak 1.



void obradi(int n, int cifre[])
{
  while(n>0)
  {
    cifre[n % 10]++;
    n /= 10;
  }
}

void prebroji(int n1, int n2, int cifre[])
{
  int i;
  for(i = 0; i < 10; i++) cifre[i] = 0;
  for(i = n1; i <= n2; i++) obradi(i,cifre);
}

void main()
{
  int i, cifre[10];
  printf("n1 = "); scanf("%d",&n1);
  printf("n2 = "); scanf("%d",&n2);

  prebroji(n1,n2,cifre);

  for(i = 0; i < 10; i++)
    if(cifre[i]) printf("Cifre %d se javlja %d puta. \n",i,cifre[i]);
}




Zadatak 2.



int dodi[4] = {0,1,0,-1};
int dodj[4] = {1,0,-1,0};

void main()
{
  int a[100], k, mat[20][20], n;
  int smer;
  int i, j, treba, br, pomb, broj;

  ...

  i = j = br = smer = pomb = 0;
  treba = n - 1;
  broj = 0;

  while(broj < n * n)
  {
    mat[i][j] = a[br];
    broj++;
    br = (br + 1) % k;
    pomb++;

    i += dodi[smer];
    j += dodj[smer];
    if(pomb == treba)
    {
      smer++;
      pomb = 0;
      if(smer == 4)
        {
          smer = 0;
          treba -= 2;
          i++; j++;
        }
    }
  }
}




Zadatak 3.



(define (b n)
  (if (= n 0) 0
      (+ (modulo n 2) (b (quotient n 2)))
  )
)

(define (suma n m)
  (if (> n m) 0
      (+ (/ n (b n)) (suma (+ n 1) m))
  )
)

Zadatak 4.



deljivi([],0).
deljivi([G|R],N) :- lista(G), deljivi(G,N1), deljivi(R,N2), N is N1 + N2. 
deljivi([G|R],N) :- G mod 5 == 0, deljivi(R,N1), N is N1 + 1.
deljivi([G|R],N) :- deljivi(R,N).

lista([]).
lista([G|R]).