martes, 18 de diciembre de 2007

Practica 6 de DSI

Paquetes, Excepciones y Referencias a Cursor
Objetivo:
  • Crear y usar paquetes
  • Manejar excepciones
  • Utilizar referencias a cursor.
Actividad:

Ahora solamente falta guardar la información referente a las asignaturas que imparten los
profesores. Para ello se necesitan crear las siguientes tablas:
  • Tabla PROFESOR con las siguientes especificaciones:
  • Campos:
    • codigo de tipo cadena de longitud fija e igual a 10.
    • nombre de tipo cadena de longitud variable y máximo 50.
  • Restricciones:
    • El atributo codigo es clave primaria

  • Tabla DOCENCIA con las siguientes especificaciones:
  • Campos:
  • codigoProfesor de tipo codigo de la tabla PROFESOR.
  • nombreAsignatura de tipo nombre de la tabla ASIGNATURAS
  • Restricciones:
  • El par es clave primaria
  • codigoProfesor será clave ajena a codigo de la tabla PROFESOR
  • nombreAsignatura será clave ajena a nombre de la tabla ASIGNATURAS
1. Implementa el siguiente código acerca de la creación de subtipos.
SET SERVEROUTPUT ON FORMAT WRAP;
DECLARE
--Definición de un tipo entero propio. No se puede definir tamaño
subtype entero is number;
--El tamaño se asigna después, al crear variables de dicho subtipo
coco number(2);
--Puedo dotar de tamaño a un subtipo con un truco: declarar una variable tipo ...
nameType VARCHAR2(50);
-- y usar el atributo %TYPE !!!
SUBTYPE name IS nameType%TYPE;
codeType CHAR(10);
SUBTYPE code IS codeType%TYPE;
codigo code;
nombre name;
BEGIN
codigo:=1;
nombre:='Elena';
dbms_output.put_line(codigo || ' ' || nombre);
END;

2. Crear un paquete llamado unpaquete con los tipos code y name. Crear también un procedimiento que utilizando dicho paquete reproduzca las declaraciones del punto 1.

3. Crear las tablas PROFESOR y DOCENCIA. Intentar utilizar para ellos los tipos definidos en el
punto 2. ¿Qué ocurre? ¿Por qué?
Insertar las siguientes tuplas en las tablas PROFESOR y DOCENCIA:
insert into profesor values (‘666’, ‘Cuco Valoy’);
insert into profesor values ( ‘42’, ‘Alfa’);
insert into profesor values ( ‘323’, ‘Romeo’);
insert into profesor values ( ‘435’, ‘Julieta’);
insert into docencia values ( ‘323’,’MP1’);
insert into docencia values ( ‘42’,’L’);
insert into docencia values ( ‘435’, ‘SO’);

4. La Universidad ha decidido que en lo sucesivo no quiere ningún Romeo dando más clases de las que hasta ahora imparte. Crear un procedimiento que asigne docencia de una asignatura a un profesor, y que si se llama Romeo entonces genere una excepción. En dicho caso se debe asignar la docencia al profesor Cuco Valoy.
(
codAsig in docencia.nombreasignatura%type, nomProf in profesor.nombre%type
)
as
excepcionRomeo EXCEPTION;
codProf docencia.codigoProfesor%TYPE;
codigoCuco docencia.codigoProfesor%TYPE;
begin
SELECT codigo into codigoCuco
FROM Profesor
WHERE nombre='Cuco Valoy';
SELECT codigo into codProf
FROM Profesor
WHERE nombre=nomProf;
if nomProf='Romeo' then
RAISE excepcionRomeo;
end if;
insert into docencia values (codProf,codAsig);
EXCEPTION
when excepcionRomeo then
insert into docencia values (codigoCuco,codAsig);
end;
5. Añadir el procedimiento y la excepción anteriores al paquete creado con anterioridad.
AS
PROCEDURE noRomeo (
codAsig in docencia.nombreasignatura%type, nomProf in profesor.nombre%type
)
as
excepcionRomeo EXCEPTION;
codProf docencia.codigoProfesor%TYPE;
codigoCuco docencia.codigoProfesor%TYPE;
begin
SELECT codigo into codigoCuco
FROM Profesor
WHERE nombre='Cuco Valoy';
SELECT codigo into codProf
FROM Profesor
WHERE nombre=nomProf;
if nomProf='Romeo' then
RAISE excepcionRomeo;
end if;
insert into docencia values (codProf,codAsig);
EXCEPTION
when excepcionRomeo then
insert into docencia values (codigoCuco,codAsig);
end noRomeo;
end unpaquete;

6. Añadir al mismo paquete una función que devuelva en un cursor todos los registros de la tabla profesor que no se llamen Romeo.

AS
PROCEDURE noRomeo (
codAsig in docencia.nombreasignatura%type, nomProf in profesor.nombre%type
)
as
excepcionRomeo EXCEPTION;
codProf docencia.codigoProfesor%TYPE;
codigoCuco docencia.codigoProfesor%TYPE;
begin
SELECT codigo into codigoCuco
FROM Profesor
WHERE nombre='Cuco Valoy';
SELECT codigo into codProf
FROM Profesor
WHERE nombre=nomProf;
if nomProf='Romeo' then
RAISE excepcionRomeo;
end if;
insert into docencia values (codProf,codAsig);
EXCEPTION
when excepcionRomeo then
insert into docencia values (codigoCuco,codAsig);
end noRomeo;
function referenciaCursor return referenciaCursorProfesores
IS
retorno referenciaCursorProfesores;
begin

OPEN retorno FOR
SELECT *
FROM profesor
WHERE nombre <> 'Romeo';

return retorno;
end referenciaCursor;
end unpaquete;
7. Añadir al mismo paquete un procedimiento que haga que todos los profesores que no se llamen Romeo devueltos por la función creada en el punto 6 impartan la asignatura de ‘MP1’. Atención!!!

Puede ocurrir que un profesor que no se llame Romeo ya imparta esta asignatura.

Practica 5 de Neuronales salidas

aquí dejo unas cuantas salidas, al ser con pesos iniciales aleatorios, obviamente cada vez que se ejecuta da valores distintos:
Tambien tener en cuenta que aproximadamente 1 de cada 20 no itera en 10000 iteraciones:

miércoles, 12 de diciembre de 2007

Nuevas velocidades de internet de Telecable

Las nuevas velocidades de Internet de Telecable pasan a ser las siguientes:

Los de 1 mega pasan a 4 megas con un upload de 300.
Los de 3 megas pasan a 10 megas con un upload de 500.
Los de 6 megas pasan a 20 megas con un upload de 800.

quedando de la siguiente forma:

ACCESO BÁSICO: 4Mb/300kbps
ACCESO AVANZADO: 10Mb/500kbps
ACCESO SUPERIOR: 20Mb/800kbps

Las nuevas velocidades empezarán a aplicarse a partir del día 17 de diciembre.

sábado, 8 de diciembre de 2007

Vodka en una grapadora

¿Tus jefes no te dejan beber en el trabajo? Aquí tienes la solución...




Las rubias no somos tontas

bueno... a lo mejor hay de todo... ;)

A veces es mejor hacerse el muerto

Mirar sino a esta pobre gacela...

Blas de Lezo

Blas de Lezo, un tío con dos pelotas!!! El video es lento pero merece la pena ;)





Oleguer for president

La casa de apuestas Paddy Power ha puesto una sección de apuestas sobre Oleguer Presas, el defensa del Barça, las apuestas las anuncian con el siguiente texto... ;)

¿Bicho u Oveja Negra?
Aunque Oleguer diga que no es un “bicho raro” por su implicación en temas políticos y sociales, hay que reconocer que sí es un poco ‘especialito’ el chaval. La farándula del mundo del fútbol no se caracteriza precisamente por mojarse en temas escabrosos, pese a que sean “normales en cualquier familia” como él dice. El defensa catalán rompe con los estereotipos cada vez que se pone delante de un micrófono o, incluso, cuando le dan una ‘pluma’ para reflejar sus opiniones sobre temas tabú en nuestro país. Sin entrar ni salir en lo conveniente de sus declaraciones, ¿será Oleguer una de las "ovejas negras" a las que se refiere Edmilson?

Las apuestas en las que se pueden apostar son:
  1. Marcará un gol contra el Madrid (3 a 1)
  2. Será presidente del Barça (10 a 1)
  3. Irá a la prisión por quemar una foto del Rey (14 a 1)
  4. Será President de la Generalitat (20 a 1)
  5. Jugará con España un Mundial o una Eurocopa (28 a 1)
  6. Jugará con Catalunya un Mundial o una Eurocopa (100 a 1)
  7. Será premiado con el Nobel de Literatura (200 a 1)
  8. Será Presidente del Gobierno (250 a 1)
  9. Se hará miembro del Partido Popular (350 a 1)

sábado, 1 de diciembre de 2007

Trabajo Basura

Una recopilación de vídeos de gente en el trabajo... No tiene desperdicio...

El Informatico Karateka

Imaginaos que sale de fiesta un informático freak por primera vez. Hasta ahí todo normal (todos hemos tenido una primera vez)... el tipo se toma unas copillas de mas... y se pone a hacer 'katas' mientras suena Self Esteem de The Offspring

ADVERTENCIA: Este vídeo puede causar vergüenza ajena...



Solo le faltaba gritar algo como "Dame tu poder, Stallman, juntos derrotaremos al software propietario!!"

miércoles, 28 de noviembre de 2007

Practica 5 de Neuronales otros sitios de interes

Números aleatorios:

El sistema de entrenamiento mediante back-propagation consiste en:
  • Empezar con unos pesos sinápticos cualquiera (generalmente elegidos al azar).
  • Introducir unos datos de entrada (en la capa de entradas) elegidos al azar entre los datos de entrada que se van a usar para el entrenamiento.
  • Dejar que la red genere un vector de datos de salida (propagación hacia delante).
  • Comparar la salida generada por al red con la salida deseada.
  • La diferencia obtenida entre la salida generada y la deseada (denominada error) se usa para ajustar los pesos sinápticos de las neuronas de la capa de salidas.
  • El error se propaga hacia atrás (back-propagation), hacia la capa de neuronas anterior, y se usa para ajustar los pesos sinápticos en esta capa.
  • Se continua propagando el error hacia atrás y ajustando los pesos hasta que se alcance la capa de entradas.

viernes, 23 de noviembre de 2007

Anuncio Wilkinson

Un anuncio gracioso en el que un padre y su bebe se pelean por los besos de la madre... ;)



No tiene perdida

martes, 20 de noviembre de 2007

Thing Thing 3

Juego en flash para jugar un solo jugador de plataformas, es de ir pegando tiros... En realidad esta bastante currao y es bastante entretenido... ;)

Para echarte unos 5 minutos y unas risas... lo mejor de todo es jugar con sonido...


Practica 5 de DSI

Procedimientos y funciones. Cursores con parámetros

Objetivo:

  • Implementar funciones y procedimientos.
  • Utilizar cursores con parámetros.
Actividad:
La explosión demográfica ha causado que las aulas se saturen. Por tanto es necesario incrementar los grupos de clases de cada asignatura, disminuyendo de esta manera el ratio alumno/grupo asignatura.

Los criterios a utilizar para realizar esta labor son los siguientes:
  • Para teoría, cada grupo tiene un máximo de 4 alumnos.
  • Se rellena siempre un grupo antes de empezar un nuevo grupo, admitiéndose como mucho un grupo de teoría no completo.
Para implementar esta nueva normativa se utilizan las siguientes tablas:
  • La tabla ESTUDIANTES ya disponible hasta ahora
  • La tabla MATRICULA ya disponible hasta ahora.
  • La tabla ASIGNATURAS ya disponible hasta ahora
  • La tabla GRUPOS, de nueva creación, con las siguientes especificaciones:
Campos:
    • numgrupo de tipo numero de tamaño 1.
    • nombreAsignatura del tipo nombre de la tabla ASIGNATURAS
Restricciones:
    • El par es clave primaria
    • nombreAsignatura será clave ajena a nombre de la tabla ASIGNATURAS
  • La tabla GRUPOSMATRICULA, también de nueva creación, con las siguientes
especificaciones:
Campos:
    • nmatEstudiante del tipo nmat de la tabla ESTUDIANTES
    • numgrupoGrupos del tipo numgrupo de la tabla GRUPOS
    • nombreAsignaturaGrupos del tipo nombre de la tabla ASIGNATURAS

Restricciones:
    • El trio es clave primaria
    • nmatEstudiante será clave ajena a nmat de la tabla ESTUDIANTES
    • El par será clave ajena al par de la tabla GRUPOS
Se pide:
1.- Crear un procedimiento que asigne a un alumno un grupo de teoría que se pasa por parámetro, insertando el correspondiente registro de grupomatricula.
CREATE OR REPLACE PROCEDURE asignaEstudianteGrupo (NmatStu IN estudiantes.NMAT%TYPE, ngrupo IN grupo.NUMGRUPO%TYPE, nomasiggrup IN grupo.NOMBREASIGNATURA%TYPE)IS
begin
INSERT INTO GRUPOSMATRICULA (NMATESTUDIANTE,NUMGRUPOGRUPOS,NOMBREASIGNATURAGRUPOS) VALUES(NmatStu, ngrupo, nomasiggrup);

END;
2.- Crear un procedimiento que para una asignatura determinada que se pasa por parámetro genere todos los grupos de teoría, insertando los registros en la tabla grupos, y asignándoles alumnos.
CREATE OR REPLACE PROCEDURE GENERAGRUPOSTEORIAASIGNATURA(nombreAsig IN ASIGNATURAS.NOMBRE%TYPE)IS
grupoactual GRUPO.NUMGRUPO%TYPE;
numAlumnos NUMBER;

cursor lestu IS select NMATESTUDIANTE from MATRICULA where NOMBREASIGNATURA = nombreAsig;
maestu lestu%ROWTYPE;

begin
open lestu;
fetch lestu INTO maestu;


grupoactual := 1;
numAlumnos := 0;

INSERT INTO GRUPO (NUMGRUPO, NOMBREASIGNATURA) Values ( grupoactual, nombreAsig);
WHILE lestu%FOUND LOOP
asignaEstudianteGrupo(maestu.NMATESTUDIANTE, grupoactual, nombreAsig);
numAlumnos := numAlumnos + 1;
fetch lestu INTO maestu;
if numAlumnos >3 then
numAlumnos := 0;
grupoactual := grupoactual + 1;
INSERT INTO GRUPO (NUMGRUPO, NOMBREASIGNATURA) Values ( grupoactual, nombreAsig);
end if;

END LOOP;
END;

3.- Crear un procedimiento que asigne a todas y cada una de las asignaturas los grupos de teoría necesarios.

CREATE OR REPLACE PROCEDURE GENERAGRUPOSTEORIA IS
cursor lasig IS select NOMBRE from ASIGNATURAS;
maasig lasig%ROWTYPE;

begin
open lasig;
fetch lasig INTO maasig;

WHILE lasig%FOUND LOOP
GENERAGRUPOSTEORIAASIGNATURA(maasig.nombre);
fetch lasig INTO maasig;
END LOOP;
END;
4.- Crear el procedimiento 3 sin llamar al generado en 2 y usando cursores con parámetros.

// Este estaba mal, cuando lo corrija lo subo denuevo...

Key Ball

Juego flash para jugar desde cualquier explorador y pasar un rato entretenido, aunque la inteligencia artificial deja un poco que desear a mi me funde...

Por fin he encontrado el juegazo supremo de futbol, para 2 jugadores en el mismo ordenador... Para pasar esos ratos aburridos.


Key Ball
Tomatillo las que te van a caer...

Juegos java para mi Motorola v360

Una vez mas, dando una vuelta por vagos.es, me encontré con juegos java para mi móvil, el Motorola v360, con una actualización de noviembre de 2007.

resolución de los juegos: 176x220



Antetodo agracer a revon por su subida y por su post.

Descarga de rapidshare.

El archivo contiene los siguientes juegos: (todos son archivos .jar)

50x15
Age of Empires II
Air Strike 1944
Alonso Racing
And1 Street Basketball
Asphalt 3 - Street Rules
Asphalt Urban GT 2
Asphalt Urban GT
Block Breaker Deluxe
Bomberman Panic
Brain Challenge
Bubble Bash
Chessmaster
Driver L A Undercover
Everyday English Trainer
Galaga
God of War
Los Sims - New York Nights
Lumines
MahJong Quest
Medieval Combat
Metal Slug Mobile Impact
Metal Smash Pinball
Micro Machines
Midnight Bowling
Midnight Pool
Might & Magic
Might And Magic II
Mobile Brain Trainer
Monopoly
Mystery Mansion Pinball
Nightmare Creatures
Nitro Street Racing
OutRoad
Pacman
Pang
Pinball
Platinum Sudoku
Prince of Persia - Sands of Time
Prince of Persia - The Two Thrones
Prince of Persia - The Warrior Within
Pro Rally Racing
Rainbow Six 3
Rainbow Six Lockdown
Rayman 3
Real Football 2007
Real Football 2008
Sensible Soccer
Sexy Blocks
Sexy Poker Top Models
Siberian Strike
Solitaire
Sonic The Hedgehog - Part Two
Sonic The Hedgehog Part One
Splinter Cell - Chaos Theory
Splinter Cell - Double Agent
Splinter Cell 2
Splinter Cell
Street Fighter II
Super Bomberman
Super Mario Movil
Super Puzzle Bobble
Tetris Mania
Tour De France 2007
Trivial Pursuit
Ultimate Street Football
Virtua Tennis Mobile
Worms
WWE Raw
XIII 2
XIII

Que los disfruteis tanto como yo... ;)

Real Cap

Juego de futbol de chapas, es multi jugador y envicia bastante!! :)

Antes conocido como: World Cap

pero ahora se ha trasladado a la página del real madrid...

Página Oficial: RealMadrid.com


Dice Wars

Un juego tipo Risk... La verdad es que es entretenido, para pasar 15 minutos en los que no hay nada mejor que hacer no esta mal... ;)


Desktop Tower Defense

Uno de los juegos mas enviciantes del mundo... el objetivo es evitar que los enemigos salga por las salidas de las diferentes pantallas, las contrarias de por las que entran... Para ello hay que colocar Torres de defensa, e ir upgradeandolas para que hagan mas daño... Envicia mucho, lo malo es que cada pantalla dura mucho, casi media hora...


Candy Cane Crisis en Flash

es un juego de los mas freaks que he visto... Este juego de plataformas navideño en el que eres un Papa Noel y vas pisando muñecos de nieve y otros enemigos no menos deleznables...

Sonic en Flash

el mítico Sonic de toda la vida... pero ahora puedes jugarlo desde web!!

sábado, 17 de noviembre de 2007

viernes, 16 de noviembre de 2007

sin TRIKI TRIKI no hay BANG BANG!!!!!

El Ministerio de Salud Argentino ha creado este video para fomentar el uso de preservativos en los jovenes.
Tambien se la conoce como "Sin triki triki, no hay bang bang"...

Practica 5 de Neuronales

Modificar la práctica p4 añadiendo una capa oculta, de esta forma tendremos una red de tres capas que debe ser capaz de poder entrenar y aprender el comportamiento de un XOR u otro problema no linealmente separable.

El número de neuronas en la capa oculta será una constante en el programa.

Deben inicializarse los pesos de forma aleatoria, con valores comprendidos entre -pesoinicial y +pesoinicial donde pesoinicial será una constante en el programa, con valor 0.5

Estos valores iniciales deberán ser además distintos cada vez que se ejecute el programa.

Ejemplo: XOR, con dos neuronas en la capa oculta, ganancia de aprendizaje 0.6, momento 0.4, error máximo 0.01 y pesos iniciales entre -0.5 y +0.5. Ciclos máximos 10000.

Debe tardar entre 1000 y 5000 ciclos, lo más frecuente serán valores alrededor de 1000. En algunas ocasiones (pocas, quizás una entre diez o una entre veinte) puede no entrenar.

NOTA:
utilizar primero pesos iniciales:
0.00
0.01
0.02
...
para poder comprobar resultados (Pesos a usar para depuracion y pruebas), y luego hacer que sean aleatorios.

Practica 4 de Neuronales salidas y archivos de entrada

Aquí estan las salidas que deben salir de la práctica 4 con los archivos que entrenan, uno con los valores 0 y 1, y el otro con los valores 0.05 y 0.95, y el que no entrena...


Archivos de entrada:
ENTRENA (0,1)
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
1 1 1 0 1

ENTRENA(0.05, 0.95)
0.05 0.05 0.05 0.05 0.05
0.05 0.05 0.95 0.95 0.05
0.05 1 0.05 0.95 0.05
0.95 0.95 0.95 0.05 0.95

NO ENTRENA
0 0 0 0 0
0 0 1 1 0
1 1 0 1 0
1 1 1 0 1

Plugin para winamp que mezcla el final de una cancion con el principio de la siguiente

Plugin que cuando termina una canción mezcla el final con el principio de la otra.

página oficial: sqrsoft

Plugin para minimizar thunderbird

y que no moleste... se queda al lado del reloj y no molesta todo el tiempo...

Pagina oficial: Minimize To tray
Pagina en español: Traducción de Minimize to Tray

sábado, 10 de noviembre de 2007

Practica 4 de Neuronales

0 0 0 0 0
0 1 1 0 1
1 0 1 0 1
1 1 1 1 0

El número de salidas será una constante dentro del programa.

En el ejemplo de arriba la red tendrá 3 entradas y dos salidas si la constante vale 2.

Serán constantes también el error máximo permitido (0.001) calculado como:

error límite = error cuadrático total / (patrones * salidas),

la ganancia de aprendizaje (0.6), el momento (0.9) y el número máximo de ciclos (10000).

Finalizado el aprendizaje se mostrarán los resultados como una tabla con:

x1,x2,x3,s1,y1,s2,y2,s3,y3 ...

Ejemplo que entrena (184 ciclos, 108 si se usa 1->0.95 y 0->0.05):

0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
1 1 1 0 1

Ejemplo que no entrena:

0 0 0 0 0
0 0 1 1 0
1 1 0 1 0
1 1 1 0 1

Se empleará para cálculo de los incrementos de los pesos las expresiones vistas en clase de retropropagación del gradiente.

martes, 6 de noviembre de 2007

Practica 3 de Neuronales

La práctica de neuronales que menos tiempo me ha llevado... ;)



Pues nada... solo hay que cambiar la función de Y para que en vez de ser la anterior (0 si x<=0 y1 si x>0) sea la sigmoide(1/1+e^(-p)) teniendo en cuenta que anteriormente tenemos que admitir n entradas... :)

un saludo

Practica 3 de Neuronales

Modificar p2 para que emplee varias entradas y para que use una sigmoide como función de activación. Máximo de entradas: 20, el número de entradas se obtendrá del fichero de patrones y será el número de columnas menos la última que es la salida.

Ejemplo que entrena (225 ciclos):

0 0 0 0
0 0 1 0
0 1 0 0
1 1 1 1

Ejemplo que no entrena:

1 0 0 0
1 0 1 1
0 1 0 1
0 1 1 0


Practica 2 de Neuronales salidas y archivos de entrada

Aquí estan las salidas que deben salir de la práctica 2, con las entradas and, or y xor respectivamente...

and en 6 iteraciones, or en 4 y xor nunca converge.



Entradas:
AND
0 0 0
0 1 0
1 0 0
1 1 1

OR
0 0 0
0 1 1
1 0 1
1 1 1

XOR
0 0 0
0 1 1
1 0 1
1 1 0

lunes, 5 de noviembre de 2007

Practica 3 de DSI

Primeros pasos en PL/SQL
Objetivos
• Realizar el primer código en PL/SQL.
• Implementar funciones y procedimientos en PL/SQL.

Actividad
Se dispone de la tabla aula y de la tabla asignaturas. Se desea asignar horarios de manera que a cada asignatura se le asigne un aula a una determinada hora. Para ello se construye una relación
denominada horario entre aula y asignatura, que se implementará mediante la tabla HORARIO.

Esta tabla debe rellenarse en base al siguiente algoritmo:
Mientras queden asignaturas por asignar aula y aulas disponibles obtener siguiente asignatura obtener siguiente par
insertar tupla en la tabla HORARIO

1.- Eliminar la clave ajena a aula de la tabla asignaturas.

2.- Crear la tabla HORARIO, con las siguientes especificaciones:
Campos:
-codigoAula del tipo codigo de la tabla AULAS
-nombreAsignatura del tipo nombre de la tabla ASIGNATURAS
-hora de tipo entero con rango 1 a 5, minimizando el espacio requerido para éste

Restricciones:
-El par ha de ser único
-El par ha de ser único
-El par será clave primaria.
-codigoAula será clave ajena a codigo de la tabla AULAS
-nombreAsignatura será clave ajena a nombre de la tabla ASIGNATURAS

3.- Generar el código PL/SQL que rellene de la forma indicada la tabla HORARIO.
declare
horaactual horario.hora%TYPE;

cursor lasig IS select nombre from asignaturas;
maasig lasig%ROWTYPE;

cursor laula IS select codigo from aulas;
maaula laula%ROWTYPE;


begin
open lasig;
open laula;

fetch laula INTO maaula;
fetch lasig INTO maasig;

horaactual := 1;

WHILE laula%FOUND AND lasig%FOUND LOOP
INSERT INTO horario (CODIGOAULA,NOMBREASIGNATURA,HORA)
VALUES (maaula.codigo ,maasig.nombre, horaactual );

horaactual := horaactual + 1;
fetch lasig INTO maasig;
if horaactual >5 then
horaactual := 1;
fetch laula INTO maaula;
end if;
END LOOP;
END;
4.- Crear un procedimiento denominado generaHorario que utilice el código generado en el punto 3.

CREATE OR REPLACE PROCEDURE generaHorario IS
horaactual horario.hora%TYPE;

cursor lasig IS select nombre from asignaturas;
maasig lasig%ROWTYPE;

cursor laula IS select codigo from aulas;
maaula laula%ROWTYPE;


begin
open lasig;
open laula;

fetch laula INTO maaula;
fetch lasig INTO maasig;

horaactual := 1;

WHILE laula%FOUND AND lasig%FOUND LOOP
INSERT INTO horario (CODIGOAULA,NOMBREASIGNATURA,HORA)
VALUES (maaula.codigo ,maasig.nombre, horaactual );

horaactual := horaactual + 1;
fetch lasig INTO maasig;
if horaactual >5 then
horaactual := 1;
fetch laula INTO maaula;
end if;
END LOOP;
END;
5.- Crear una función denominada consultaAula que recibe por parámetro el nombre de una asignatura y devuelve el código del aula de dicha asignatura.
CREATE OR REPLACE FUNCTION consultaAula (argumento1 IN horario.NOMBREASIGNATURA%TYPE)

RETURN horario.codigoaula%TYPE
IS
cod horario.codigoaula%TYPE;

begin
Select horario.codigoaula into cod
from horario
where argumento1 = horario.NOMBREASIGNATURA;
RETURN cod;
END;

jueves, 1 de noviembre de 2007

Practica 2 de Neuronales otros sitios de interes

Para la lectura del archivo, al pasarlo al array en floats necesitaremos estas 2 funciones:
la función para dividir un String en trozos
la función para convertir una cadena en un float

y posteriormente, en la funcion y = F(p) nos vendra muy bien la función exponencial...
la función exponencial en c++

PD: aun sigo peleandome con la practica...

martes, 30 de octubre de 2007

Practica 2 de Neuronales

Iniciada la Practica 2 de Neuronales:

Debido a que la Practica 1 no estaba todabía en perfecto estado para cumplir todos los requerimientos de la practica 2, decidí arreglarla antes de ponerme con la practica 2...

Hasta ahora he hecho la parte de importar de un archivo, para lo cual me resulto muy util la página de Programación en C/C++ por Virgilio Gómez Negrete

jueves, 25 de octubre de 2007

Configurar Centauro

Centauro.aulario.uniovi.es
$chsh "USUARIO" 
te preguntará el shell que deseas por ejemplo, /bin/bash

y despues insertar el .profile para que te diga en que directorio estas...


Practica 1 de Neuronales

Acabada la practica 1:

Repetir el entrenamiento hecho el primer día de clase para:

x1 x2 so
0 0 1
1 1 0

con una delta = 0.2


Para la realización de la practica 1 utilizaba las variables globales:
const int x0 = 0;
const int x1 = 1;
const int x2 = 2;
const int s0 = 3;
const int w0 = 4;
const int w1 = 5;
const int w2 = 6;
const int P = 7;
const int Y = 8;
const int D = 9;

const float variacion = 0.2;
const int n = 150;

float valores[n][10];
float variaciones[n][3];
int finIteraciones = n;

Lo cual hacia bastante incomodo ampliar el numero de entradas en cada patrón...



Esa es la salida que generaba en la primera versión de la practica... una vez dado el guión de la 2ª practica decidí rediseñar el codigo de la practica 1... quedando asi:

// maximo numero de patrones de entrenamiento
#define maxpat 1000
// maximo numero de entradas
#define maxent 20
// error maximo permitido
#define epsilon 0.001
// numero maximo de ciclos de entrenamiento permitidos
#define maxciclos 10000
// constante de aprendizaje
#define delta 0.25


const int ment = maxent;
const int mpat = maxpat;

const float variacion = 0.2;

float x[mpat][ment];
float s[mpat];
float w[mpat][ment];
float p[mpat];
float y[mpat];
float d[mpat];

float variaciones[mpat][ment];


de esta forma saldria esta salida (decidí en esta ocasión dejar las variaciones del problema)



sin variaciones sería asi: que es como se tiene que entregar...



Aunque la salida sea la misma, lo que es normal, ya que el problema es el mismo... el código ha sido remodelado entero para que sirva para todas las entradas que queramos (siempre que sea menor que "maxent", en este caso 20).

miércoles, 24 de octubre de 2007