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]).