Zadatak 1.



void pomeri(int a[], int *n, int k, int pos)
{
  int i;
  for(i = pos + k; i < *n; i++) a[i - k] = a[i];
  *n -= k;
}

void sakupi(int a[], int *n)
{
  int el, i, m = *n, br, zamena = 0, j;
  i = 0;
  while(i <= m)
  {
    el = a[i];
    j = i + 1;
    br = 0;
    while((a[j]==el)&&(j < m))
    {
      br++;
      j++;
    }
    if(br > 0)
    {
      a[i] *= br + 1;
      pomeri(a, &m, br, i + 1);
      i = 0;
    }
    else i++;
  }
  *n = m;
}

void main()
{
  int a[20], n, i;
  printf("n = "); scanf("%d",&n);
  printf("Unesi elemente niza :\n");
  for(i = 0; i < n; i++) scanf("%d",&a[i]);

  sakupi(a,&n);

  printf("Promenjeni niz : \n");
  for(i = 0; i < n; i++) printf("%5d",a[i]);
}




Zadatak 2.



void main()
{
  int a[20][20], n, i, j, i0, j0, el;

  printf("n = "); scanf("%d",&n");

  i0 = j0 = n - 1;

  for(i = 0; i < n; i++)
    for(j = 0; j < n; j++)
    {
      el = abs(i - i0) + abs(j - j0);
      a[i][j] = a[i][2*n - 1 - j] = a[2*n - 1 - i][j] = a[2*n - 1 - i][2*n - 1 - j] = el;
    }
  stampaj(a,2*n);
}




Zadatak 3.



(define (nzd a b)
  (cond ((= a b) a)
        ((> a b) (nzd (- a b) b))
        (t (nzd a (- b a)))
  )
)

(define (put m n p q)
  (append (trazi m n) (unazad (reverse (trazi p q))))
)

(define (unazad l)
  (if (null? l) nil
      (cons (- (car l)) (unazad (cdr l)))
  )
)

(define (trazi m n)
  (cond ((= m n) nil)
        ((> m n) (cons -1 (trazi (- m n) n)))
        (t (cons 0 (trazi n m)))
  )
)

Zadatak 4.



brDel(X,1,X).
brDel(X,N,Br) :- P is X mod Br, P == 0, Br is Br + 1, brDel(X,N1,Br1), N is N1 + 1.
brDel(X,N,Br) :- Br1 is Br + 1, brDel(X,N,Br1).

vece(X,Y) :- brDel(X,N1,1), brDel(Y,N2,1), !, N1 > N2.
vece(X,Y) :- brDel(X,N1,1), brDel(Y,N2,1), N1 == N2, X > Y.

sort(L,S) :- pomSort(L,[],S).

pomSort([],S,S).
pomSort([G|R],L,S) :- ubaci(G,L,L1), pomSort(R,L1,S).

ubaci(G,[],[G]).
ubaci(G,[G1|R1],[G1|S]) :- vece(G,G1), ubaci(G,R1,S).
ubaci(G,L,[G|L]).