Perdona, puedes inicializar al valor de los que puedes poner, y no te pueden 
decir nada lo mas normal es q=0 y noq=1
para que no te quede un valor indeterminado al principio, de la
simulacion.
ya tienes la entidad  ahora solo te falta crear la arquitectura
como te dicen que es algoritmica pues ya sabes
Creas una seal para poder cargar el resultado ya que a las seales de 
salida OUT no se le puede directamente asignar un valor:
no se puede hacer directamente q<='1';
solo si los puertos de salida son INOUT o BUFFER;
SIGNAL temp :STD_LOGIC:='0';
 IF j='1' THEN
temp<='1';
ELSIF j='0' and k:='1' THEN
temp<='0';
ELSIF j='1' and k='1' THEN
temp<= NOT temp;
ELSE
temp<=temp;
END IF;
q<=temp;
noq<=NOT temp;
salud2

Nota .-
Es una forma de hacerlo hay muchas mas, acuerdate que el clear asincrono 
tiene prioridad sobre todos los demas valores ponlo al principio como el 
primer IF que abarque a todos,
clk'EVENT and clk ='1'
significa cuando se produce un cambio en el reloj y se activa por el flanco 
de subida clk='1'; si fuera de bajada seria IF clk='0';
un proceso para el reloj seria
clk<='0','1' WAIT FOR 2ns;
WAIT FOR 4 ns;
el reloj te va cambiando 0 a 1