Zadatak 1.


#include <stdio.h>

int broji(int n,int b,int ch)
{
  int p = 0;
  while(n)
  {
    p += (n % b) == ch;
    n /= b;
  }
  return p;
}

void main()
{
  int n, b, i, ch, m = 0, p;
  char c;

  printf("Unesi c : "); scanf("%c",&c);
  printf("Unesi n : "); scanf("%d",&n);

  if((c >= '0')&&(c <= '9')) ch = c - '0';
  if((c >= 'A')&&(c <= 'J')) ch = c - 'A' + 10;

  b = 0;

  for(i = (ch > 1)?(ch+1):2;i<=20;i++)
  {
    p = broji(n,i,ch);
    if(p>m) { b = i; m = p;}
  }
  if(b)
     printf("Cifra %c se u zapisu broja %d javlja najvise puta u bazi %d.\n",c,n,b);
  else
     printf("Cifra %c se u zapisu broja %d ne javlja ni u jednoj bazi\n",c,n);
}


Zadatak 2.


#include <stdio.h>

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

int livada[20][20];
int m,n,i0,j0;

typedef struct
{
  int i,j,smer;
} TPolje;

TPolje PredjenaPolja[1600];

void citaj()
{
  int i,j,p,x,y;
  printf("Unesi dimenzije livade (m,n) : ");scanf("%d%d",&m,&n);
  for(i=0;i<n;i++) for(j=0;j<m;j++) livada[i][j] = 0;
  printf("Unesi broj prepreka : "); scanf("%d",&p);
  printf("Unesi koordinate prepreka : \n");
  for(i=0;i<p;i++)
   {
     scanf("%d%d",&x,&y);
     livada[x][y] = 1;
   }
  printf("Unesi pocetnu poziciju krave na livadi (i,j) : ");
  scanf("%d%d",&i0,&j0);
}

int moze(int i, int j,int smer)
{
  int x,y;
  x = i + dodi[smer];
  y = j + dodj[smer];
  return (x >= 0) && (x < n) && (y >= 0) && (y < m) && (livada[x][y] != 1);
}

int jednake(TPolje a, TPolje b)
{
 return (a.i == b.i)&&(a.j == b.j)&&(a.smer == b.smer);
}

int pripada(TPolje p, TPolje niz[], int n)
{
 int nadjen = 0, i = 0;
 while(!nadjen && (i < n))
   if(jednake(p,niz[i])) nadjen = 1;
   else i++;
 return nadjen;
}

void main()
{
 int smer = 0, br = 0, nadjen = 0, i,j, pom = 0;
 TPolje tren;

 citaj();

 i = i0; j = j0;

 while(!nadjen)
 {
  if(moze(i,j,smer))
   {
    tren.i = i;
    tren.j = j;
    tren.smer = smer;
    if(pripada(tren,PredjenaPolja,br)) nadjen = 1;
    else
     {
      PredjenaPolja[br++] = tren;
      i += dodi[smer];
      j += dodj[smer];
     }
   }
  else smer = (smer + 1) % 4;
 }
 i = 0;
 while(!pom)
  {
   if(jednake(tren,PredjenaPolja[i])) pom = 1;
   else i++;
  }
 printf("Put se ponavlja posle %d koraka, a duzina puta je %d\n",br,br-i);
}



Zadatak 3.



(define (glavna l)
  (if (null? l) nil
      (sredi l 1 (car l) nil)
  )
)

(define (sredi l trenbr elem rez)
  (cond ((null? (cdr l)) (dodaj trenbr elem rez))
        ((= (cadr l) elem) (sredi (cdr l) (+ 1 trenbr) elem rez))
        (t (sredi (cdr l) 1 (cadr l) (dodaj trenbr elem rez)))
  )
)

(define (pripada el l)
  (cond ((null? l) nil)
        ((= el (caar l)) t)
        (t (pripada el (cdr l)))
  )
)

(define (dodaj n el l)
  (if (pripada el l) (ubaci n el l)
      (append l (list (list el n)))
  )
)

(define (ubaci n el l)
  (if (= el (caar l)) (cons (append (car l) (list n)) (cdr l))
      (cons (car l) (ubaci n el (cdr l)))
  )
)


Zadatak 4.



brisiDate([],_,[]).
brisiDate([G|R],[G|R1],L) :- brisiDate(R,R1,L).
brisiDate([G|R],D,[G|RL]) :- brisiDate(R,D,RL).