lunes, septiembre 04, 2006

El primer microprocesador

Algunas webs y publicaciones se equivocan al decir que el 8080 de Intel es el primer microprocesador de la historia. Por ello es necesario recordar la historia de Intel, y la creación del micro 4004 primero, el 8008 después y finalmente el 8080.

Hay una web en la que el tema se trata de forma extensa, y en la que contamos con las opiniones del principal diseñador del micro: Federico Faggin. Las iniciales FF con las que están marcados los microprocesadores Intel 4004 son las de su nombre. Por la importancia de este hito he introducido el vínculo en la sección de enlaces de este blog.

El proyecto de creación del micro 8008 comienza en marzo de 1970, antes que el del 4004. En un principio lo lideraba Hal Feeney, pero el proyecto se paralizó meses más tarde hasta que se terminó la creación del 4004.

Poco después de que Intel contratara a Federico Faggin en abril de 1970 se enteró de que había otro proyecto de creación de un microprocesador en marcha, hecho que le disgustó. Estaba convencido de que Hal terminaría antes su microprocesador, ya que además de empezar más tarde, tenía que diseñar los chip set 4001, 4002 y 4003 antes de empezar con la CPU 4004.

En junio de 1971 Federico recibe el chip de la linea de producción a las 18:00 horas. Para las 3:00 horas abandonó el laboratorio sabiendo después de horas de pruebas que se ha creado el primer microprocesador de la historia: el Intel 4004.

Poco después, ese mismo mes de junio colocan a Federico Faggin como supervisor de Hal Feeney. El 8008 fue el primer microprocesado de 8 bits de Intel (el 4004 fue el primero, y era de 4 bits).

sábado, septiembre 02, 2006

Kenbak vs microprocesador

El Kenbak no utilizaba un microprocesador símplemente porque no existían mientras se diseñaba.

Un microprocesador es un circuito integrado LSI (alta escala de integración) con los elementos que constituyen la Unidad Central de Proceso (CPU) de una computadora.

La computadora es por sí misma operativa ya que tiene UNIDAD DE MEMORIA, UNIDAD DE ENTRADA-SALIDA y UNIDAD CENTRAL DE PROCESO. El Kenbak es una computadora denominada personal por su bajo coste en la época.

Sin embargo, un microprocesador por sí mismo no es operativo, ya que le faltan la UNIDAD DE MEMORIA y las UNIDADES DE ENTRADA-SALIDA. Además, los sistemas basados en microprocesador se diseñan teniendo en cuenta los BUSES para la comunicación entre las unidades.

La comercialización del microprocesador en 1971 ha supuesto una verdadera revolución electrónica que todavía continúa en nuestros días. Se utiliza en todo tipo de elementos, no sólo en los ordenadores actuales: televisores, semáforos, coches, lavadoras, ascensores, etc. etc.

viernes, septiembre 01, 2006

La primera computadora personal: el Kenbak-1



Se considera que el Kenbak-1 es la primera computadora personal. Ello se debe a que es la primera realización de máquina de propósito general (modelo de Von Newmann) con un precio asequible para uso personal.

Lo diseño John Blankenbaker. Debe su nombre al apellido del creador.
Se publicitó en las páginas de Scientific American en 1971. Se produjeron 40 unidades.

Costaba 750 dolares y por lo que he visto en un mensaje fechado el 5 de agosto de 2005 se cerró una venta en ebay por 10.850 dolares.

El primer microprocesador sale al mercado el 15 de noviembre de 1971 (Intel 4004), por lo que el Kenbak no utilizó un microprocesador comercial. El Kenbak se construye con componentes TTL (lógica transistor-transistor).

Las rudimentarias unidades de Entrada/Salida (botones y conmutadores para entrada y lucecitas para la salida), lo convertían en un dispositivo bastante limitado, aunque como su creador afirmaba en la publicidad era válido para propósitos educativos.

Tenía una memoria RAM de 256 bytes que había que alimentar utilizando botones y conmutadores. El salida (output) del programa se visualizaba por medio de luces.

jueves, agosto 31, 2006

Ordenador personal o computadora personal

Hoy quería hablar sobre el primer ordenador personal, el Kenbak-1, pero antes quería aclarar otro tema.

Según la Real Academia (www.rae.es) ambos términos (ordenador/computadora) son correctos, y significan lo mismo.

En inglés se dice computer, y me imagino que así ha llegado la palabra computadora.
Según la academia, ordenador viene del latín (ordinator-oris), aunque yo más bien diría que nos ha llegado del francés.

En todo caso, teniendo en cuenta el desarrollo de estas máquinas (Turing, Von Newman, etc.), creo más acertado llamarlas computadoras.

martes, agosto 29, 2006

4 maneras de acabar con el mundo


Ayer volví a ver la película. Hace unos meses la vi por primera vez y me pareció interesante.
Se trata de un genero nuevo entre una película y un documental. Lo mejor es que sólo dura 48 minutos, y es que ya se sabe: lo bueno, si breve, dos veces bueno.
En ella se ven varias situaciones de desastre que afectan a una parte del planeta, o al planeta entero.

Esto es lo que plantean desde la página de la BBC (productora de la película):
"Imagine waking up to the last day on Earth. What's the worst that could happen in just 24 hours?"
http://www.bbc.co.uk/bbcthree/tv/end_day.shtml

El título original es "End day", y se plantea como un día que repiten hasta 4 veces (como en aquella película de la marmota). Cada día ocurre una catastrofe diferente, y continuamente aparecen referencias a un peligroso experimento que pretenden realizar en Nueva York.

Cada vez que le preguntan al científico por la probabilidad de que el experimento resulte fallido, éste contesta lo siguiente:
  • Una entre un millón la primera vez.
  • Una entre mil millones la segunda vez.
  • La misma probabilidad de que le toque a una persona el premio gordo de lotería tres semanas seguidas.

Al final de la película se nos advierte que es imposible que el último desastre pueda ocurrir (la creación de un mini agujero negro que destruya la tierra), aunque realmente el mensaje que transmite es el siguiente: ésto es lo que siempre dicen los científicos antes de que ocurra.

Curiosamente en la revista "investigación y ciencia" (versión en castellano de Scientific American) de este mes (agosto-2006), hay un artículo de Roberto Emparan que trata de agujeros negros.

En el artículo dice que se realizarán experimentos en "los aceleradores de partículas actualmente en proyecto o ya en construcción, como el Gran Colisionador de Hadrones (LHC) en el CERN, cerca de Ginebra. Tal circunstancia daría lugar a consecuencias absolutamente espectaculares: la atracción gravitatoria superintensa en las colisiones entre partículas haría que éstas sufriesen el colapso gravitatorio y formasen miniagujeros en el laboratorio..."

¡JODER! Es igual que en la película. Sólo falta que nos digan que la probabilidad de que algo salga mal es una entre mil millones.

En los siguientes blog la película no ha gustado demasiado:

En http://malaciencia.blogspot.com/2006/05/cuatro-maneras-de-acabar-con-el-mundo.html el autor niega la posibilidad de que se pueda crear un mini agujero negro con un acelerador de partículas actual. Además, aunque se pudiera crear, el radio de acción del agujero sería de pequeñísimo: "miles de millones de veces más pequeño que un núcleo atómico". Y aunque también nos equivocáramos en esto, "un agujero negro de dimensiones subatómicas, desaparecería casi instantáneamente". UF!, así que no hay peligro.

Sin embargo uno de sus lectores (rompebolas) le contesta que "El tiempo de evaporacion de un agujero negro depende del valor de la constante G. Este a su vez depende del numero de dimensiones del espacio. Si son tres como parece a ojos vista, entonces es cierto que cualquier agujero negro suceptible de ser creado en un acelerador (actual o imaginable en un futuro cercano) no seria peligroso, porque se evaporaria inmediatamente. Sin embargo, no se puede descartar que el espacio tenga mas de tres dimensiones (muchos cientificos toman en serio esa posibilidad) y en ese caso puede suceder que la constante G sea bastante mas grande, por lo que podriamos encontrarnos con alguna sorpresa en el futuro".

Para echarse a temblar, ya que en el mismo artículo de "Investigación y ciencia" dicen que el número de dimensiones espaciales podrían ser más de tres.

También critican la película en http://zaragozaciudad.net/posindustrial/2006/062012-cuatro-formas-de-acabar-con-el-mundo-.php, aunque se equivocan en la crítica del desastre del acelerador de partículas: "Un agujero negro que sale durante un experimento en un acelerador de partículas. Hipótesis totalmente absurda si se piensa que el acelerador acelera partículas subatómicas de masa ínfima y un agujero negro es lo que aparece cuando se colapsa una estrella (ergo tiene una masa enorme)".

Ya decían en el blog de malaciencia que "Así que un agujero negro es un objeto muy masivo ¿no? No. Es un objeto muy denso. Este matiz es muy importante, ya que el que un cuerpo sea un agujero negro o no, viene determinado tanto por su masa como por su tamaño".

domingo, agosto 13, 2006

Asesinos sin rostro

Acabo de terminar la novela "Asesinos sin rostro" de Henning Mankell.
Novela policiaca en las que el protagonista, paralelamente a la investigación, sufre desilusiones y situaciones duras bastante frecuentes en la sociedad actual.

Sobre las desilusiones:

"Kurt Wallander pensó en el sueño perdido de Sten Widén, que quería ser cantante de ópera. En cómo ambos habían imaginado un futuro que ninguno de los dos lograría. Kurt Wallander sería el empresario, y la voz de tenor de Sten Widén se oiría en los escenarios de ópera de todo el mundo".

Más adelante...

"A Kurt Wallander le produjo malestar lo que oía.
Aunque por fuera era el mismo que hacía diez años, su interior parecía haber experimentado grandes cambios. Erar una voz fantasma la que le hablaba, rota y desesperada.
Diez años anter Sten Widén era un hombre satisfecho y alegre, el primero en invitar a una fiesta. Pero toda su alegría de vivir parecía haber desaparecido."

El abandono:

"A los divorciados nos dan ataques al corazón. Engordamos y sufrimos por haber sido abandonados. O nos metemos en relaciones nuevas y al final el corazón no puede más.
Le daba rabia y tristez pensar en Mona."

La reflexión:

"Allí había una formación circular de piedras. Un círculo para la mditación, construido en piedra unos años antes. Invitaba a la soledad y a la tranquilidad del alma.

Se sentó en una de las piedras y contempló el mar.
Nunca había tenido un carácter filosófico. No había sentido la necesidad de buscarse a sí mismo. La vida era un juego alternativo entre diferentes asuntos prácticos que esperaban tener solución. Lo que había más allá de eso era algo inevitable que no se inmutaría por mucho que él se preocupara por encontrale un sentido que de todas formas no existía.

Estar unos minutos en soledad era algo diferente. La gran calma escondida en el hecho de no pensar en absoluto. Sólo escuchar, ver, permanecer inmóvil."

miércoles, agosto 09, 2006

Un hombre volando en un globo aerostático...

Estoy haciendo limpieza, y me he encontrado con un antigua hoja impresa.
Es un mail que recibí el 25 de noviembre de 1998 y dice así:

Un hombre está volando en un globo aerostático y se da cuenta de que se encuentra perdido.

Mientras hace algunas maniobras ve a un tipo caminando por el campo. El hombre hace descender el globo algunos metros y grita:

-"Perdone, me puede decir donde estoy?"

A lo que el hombre que esta abajo responde:

-"Usted esta en un globo aerostático, suspendido a unos 10 metros del suelo".

-"Usted es informático. ¿Verdad?"., dice el del globo.

-"Así, es", dice el de abajo. "¿Como se ha dado cuenta?".

-"Bueno", dice el del globo. "Todo lo que usted me ha dicho es técnicamente correcto, pero no resulta de utilidad para nadie".

Y el de abajo responde: "Y usted debe de ser un usuario".

-"Exacto", responde el del globo, "¿Como lo ha sabido?".

-"Sencillo. Usted no sabe donde se encuentra, ni hacia a donde va, pero espera que yo le pueda ayudar.
Usted esta en la misma situación que antes de que nos encontrásemos, pero ahora cree que la culpa la tengo yo"...

He buscado el texto en Internet, y me he encontrado con diferentes versiones del mismo texto.
Algunos cambian al informático por un técnico de sistemas, etc.
Otros cambian bastante la historia, pero creo que no se adapta tan bien como al del informático.
Este es un ejemplo:

Un hombre va volando en globo....De pronto se percata de que está perdido, maniobra y desciende un poco.Divisa a un hombre caminando por la calle, baja un poco y le grita:

- Disculpe, ¿Podria Ud ayudarme? Prometí­ a un amigo que me encontraria con él a las 2:00, llevo media hora de retraso y no sé dónde estoy...

- Claro que puedo ayudarle... Ud. se encuentra en un globo aerostático, de aire caliente, flotando a unos 30 metros encima de esta calle entre los 40 y los 42 grados de latitud Norte y entre los 58 y los 60 grados de longitud Oeste.

- ¿Es Ud. ingeniero?- Si, señor. Lo soy, ¿Cómo lo supo?- Porque todo lo que Ud. me ha dicho es técnicamente correcto, pero aún no se que hacer con la información que me ha dado y continúo perdido....

- Y Ud. debe ser Jefe...

- En efecto, ¡ lo soy ! ¿Cómo lo averiguó?

- Muy fácil: No sabe ni donde está, ni para dónde va... Hizo una promesa que no tiene ni puta idea de como cumplir y espera que ahora otro le resuelva el problema. De hecho, está exactamente en la misma situación en que se hallaba antes de encontrarnos... pero ahora, además, PIENSA QUE LA CULPA ES MIA !!!

jueves, agosto 03, 2006

Las bahías

Si buscamos en cualquier buscador las palabras "bahía" y "ordenador" encontramos multitud de referencias de este tipo:

"El ordenador admite dos discos duros Serial ATA en su bahía de disco duro interna".
"Hay dos soportes para discos duros: una bahía frontal y otra trasera".
"Se prepara el CD-ROM para introducirlo en la bahía de 5 ½".

En el trabajo tenemos una cabina de discos de HP. Concretamente es una EVA 5000.
Resulta que los huecos donde se instalan los discos fibre channel están marcados con el nombre "BAY".

Resulta que "BAY" significa "BAHÍA" normalmente.
Sin embargo, también significa "HUECO", "ENTRANTE", "ESPACIO RESERVADO".

Así que ese es todo el misterio. Por favor, corrijan el error, y digan HUECO en lugar de BAHÍA.

domingo, julio 30, 2006

Un mundo perfecto

Acabo de verla en Calle13 y aunque me he perdido el principio ha sido fácil de enlazar.
No voy a contar nada de la película para no estropear la historia.
Tampoco revelaré el género griego al que pertenece.

Simplemente una curiosidad: Cuando Bob (Kevin Costner) y, en esta fase de la película, su socio Philip, viajan en el coche de una familia, los chicos cantan una curiosa canción: Es la misma canción que cantan en "Harry el sucio" en el autobús escolar secuestrado.

Parece un guiño de Clint Eastwood a aquella película rodada muchos años antes, y que parece sugerir: se masca la tragedia...

sábado, julio 29, 2006

2001 una odisea espacial (segunda parte)

El otro día comenté que había importantes diferencias entre la película y el libro, pero no mencioné cosas concretas.

Lo primero una advertencia: No sigas leyendo si piensas ver la película, o leer el libro alguna vez.

Diferencia primera:

En el libro está claro que "alguien" venido del espacio coloca monolitos. La acción de estos monolitos dispuestos a lo largo del continente africano acelera la evolución del hombre.

En la película no se entiende demasiado bien el tema del monolito. A ello se deben las diferentes interpretaciones basadas en la "metafora" del monolito.

Segunda diferencia:

En el libro se deja entrever que la señal que emite el monólito de la luna hacia Saturno despierta o hace evolucionar otra forma de vida inteligente: el computador HAL. También se plantea la posibilidad de que HAL tenga un dilema moral. Hay un secreto que el conoce y la tripulación no, lo que obliga a HAL a engañar a los tripulantes. Puede que HAL intente por ello cortar la comunicación con la tierra inventando un fallo en el sistema de comunicación.
Estas cosas que hace HAL, hacen sospechar tanto a los tripulantes como a los que siguen la misión en tierra, y deciden desconectarlo. HAL entonces ante una muerte inminente decide defenderse.

En la película parece símplemente que el computador HAL comienza a tener fallos, sin ninguna relación ni influencia del monolito.

Tercera diferencia:

En el libro la misión se dirige hacia una luna de Saturno. Además, en un momento concreto, se descubre que los anillos de Saturno son de una época relativamente reciente (3 millones de años) que coincide con la edad del monolito en la luna. O sea, los mismos seres provocaron los anillos de Saturno estrellando una luna contra su superficie.

En la pelicula la misión se dirige a una luna de Jupiter que se encuentra a menor distancia que Saturno.

Me ha estrañado mucho no haber encontrado referencias a esta diferencia en la red, y es que después de leer y leer comentarios e interpretaciones varias, la gente se echa en cara el no haber leido el libro, y da la impresión de que realmente nadie lo ha leido, ya que todo el mundo habla del viaje a Jupiter en lugar de a Saturno (incluso muchos que asegurar haber leido el libro).

Sólo he encontrado una excepción de una persona que además informa de otras curiosidades. De esto hablare mañana.

jueves, julio 27, 2006

Python



Python es un lenguaje de programación elegante disponible para la mayoría de los sistemas operativos.

Me gustaría que vosotros mismos lo apreciarais. Para ello adjunto un programita que tuve que utilizar en el trabajo.

Habíamos recibido un fichero con miles de registros de longitud fija (150 caracteres). El problema era que los registros se encontraban sin ningún carácter de separación.

El programa introduce un salto de línea al final de cada registro.



print 'Programa para la lectura de ficheros con registro unico.\n\n'

nombre = raw_input('Introduce el nombre del fichero: ')

fentrada = open(nombre, 'r')
fsalida = open('salida.txt', 'w')

texto = fentrada.read()
contador = 0
while contador < len(texto):

fsalida.writelines(texto[contador:contador+149])
fsalida.writelines("\n")
contador = contador+150

fentrada.close()
fsalida.close()

#Para que la ventana Windows no desaparezca sin mas.
raw_input('Pulsa ENTER para terminar>')



La imagen de arriba es una broma que gastan los seguidores de python a los de perl. Nos ocuparemos de perl más adelante.

Más información en www.python.org
y en castellano en www.pythonhispano.org

lunes, julio 03, 2006

La organización


Estoy leyendo lo que en principio es una novela policiaca: La leona blanca de Henning Mankell.

Y que agradable sorpresa cuando me he encontrado con la siguiente cita en boca de Konovalenko, el ex-agente de la KGB que está instruyendo al sicario Victor Mabasha:

Otra lección: por más que uno lo organice todo, siempre ocurre algo inesperado. Pero precisamente por eso es imprescindible elaborar un plan detallado apartir del cual sea posible improvisar. Sin organización, las sorpresas de última hora son fuente segura de caos y desconcierto.

En la foto el autor sueco Henning Mankel.

domingo, julio 02, 2006

2001 una odisea espacial



La semana pasada por fin vi la película. Todavía tengo la sensación de haberla visto antes, tal vez de chaval, pero también puede ser que los recuerdos sean de documentales, homenajes en otras películas, referencias varias, etc. que nunca han faltado desde su estreno en 1968. Sobre todo la banda sonora tiene al menos una obra inconfundible: "Así habló Zarathustra" de Richard Strauss.

El pasado 23 de abril en la feria del libro compré la novela original de Arthur C. Clarke, y una vez vista la película, quería reflejar las grandes diferencias entre ambas.

Antes que nada, recomiendo leer la novela antes de ver la película, y es por la siguiente razón:

La novela es un relato totalmente comprensible (salvo tal vez la parte final) que explica cada uno de los episodios por medio de un narrador ominisciente. Un narrador de este tipo va más allá de la percepción del protagonista para explicarnos aquellas cosas que él no tiene la posibilidad de conocer.

La película en cambio es una cosa totalmente diferente. Claramente recibe la influencia de la época y Kubrick la definió como "experiencia no verbal". Con esta premisa la solución resultante se abre a todo tipo de interpretaciones y segundas lecturas que tratan de explicar la experiencia.

lunes, mayo 29, 2006

GWBASIC


En la época en la que utilizaba mi Olivetti Prodest, el BASIC (gwbasic) era el lenguaje más habitual en los ordenadores domésticos. Pascal se utilizaba en educación, mientras que el lenguaje científico era FORTRAN. En el mundo empresarial el COBOL era el rey.

Sobre el BASIC decían lo siguiente: “Microsoft GW-BASIC is a simple, easy-to-learn, easy-to-use computer programming language with English-like statements and mathematical notations”, aunque en la práctica, la utilización de los GOTOs y la obligación de numerar las líneas, hacían que la programación se complicara en programas de cierta entidad.

Aquí dejo una pequeña agenda hecha en GWBASIC.
Ahora, cuando tenga que buscar un teléfono, lo único que tengo que hacer es encender el viejo Olivetti.

El Prodest no tiene disco duro, pero aún así, arranca mucho más rápido que cualquier ordenador actual.

Y ahora el programa GWBASIC:
(he comprobado que funciona en WindowsXP)

1 CLS
10 PRINT "MI AGENDA"
20 PRINT "---------"
30 INPUT "INTRODUCE EL NOMBRE: ";DATUA$
40 READ IZENA$, ZENBAKIA$
50 IF INSTR(IZENA$,DATUA$) THEN GOTO 100
60 IF IZENA$ = "*" THEN PRINT "NO LO HE ENCONTRADO":RESTORE:GOTO 30
70 GOTO 40
100 PRINT IZENA$;": ";ZENBAKIA$
110 PRINT "¿OTRO NÚMERO?"
120 INPUT E$
130 IF E$ = "SI" THEN GOTO 200
140 IF E$ = "NO" THEN STOP
150 PRINT "RESPONDE SI O NO":GOTO 120
200 RESTORE:GOTO 1
300 DATA PAPI, 945 22 22 22
301 DATA MAMI, 945 33 33 33
302 DATA TATO, 945 44 44 44
1000 DATA “*”, “-“

martes, mayo 23, 2006

Mi ordenador Olivetti Prodest


Olivetti PS-1
Sobre 1988, mis padres decidieron comprar un ordenador.
A decir verdad, nunca me hicieron caso cuando les pedía aquellas consolas que tanto deseaba, pero un ordenador serio era otra cosa. Ya entonces estaba claro que el futuro iba a tener mucho que ver con aquel aparato.
El problema del aparato, al contrario que en otros modelos, era que no había demasiadas opciones en cuento a juegos.
El mundo de los juegos se encontraba en otros modelos, y no tenía un acceso fácil por parte del MS-DOS.
Por lo tanto, por aquella época pase horas y horas programando con el gwbasic que venía incorporado en el MS-DOS. Gwbasic se mantuvo hasta la versión 4 de MS-DOS.

jueves, febrero 23, 2006

Torres de Hanoi

Otro día comentare más cuestiones sobre el autor, pero hoy explicaré la leyenda tal y como la describen habitualmente:

Cuando Dios creó el mundo, dispuso 3 torres de diamante. En una de la torres colocó 64 discos de oro con diferentes diámetros. Los discos se encontraban de mayor a menor, situados los de mayor diámetro cerca de la base.

Desde entonces, los monjes de un monasterio cercano mueven los discos uno a uno, con el propósito de que los 64 discos terminen en la tercera torre.

Las reglas para mover los discos son las siguientes:
  1. No se puede mover más de un disco cada vez.
  2. No se puede colocar un disco mayor sobre otro menor.

El siguiente programa es un simulador del juego:







program hanoi;
uses crt;
const
maxDiscos = 64;
type
Tdiscos = array[1..maxDiscos] of integer;
Ttorre = record
numDiscos : integer;
discos : Tdiscos;
end;
var
torre1, torre2, torre3 : Ttorre;
num : integer;
altura: integer;
fin: boolean;
rta: string[2];
i: integer;
numMovimientos: integer = 0;

procedure dibujarEscenario(altura: integer; torre1, torre2, torre3: Ttorre);
var i, j, z: integer;
begin
clrscr;

{Empezamos dibujando las 3 torres sin ning£n disco}
for z:=1 to 3 do
begin
for i:=6 to 13 do
begin
gotoxy(2+z*20, i);
writeln('±');
end;
end;

{Dibujamos los discos de las 3 torres}

{Torre1}
for z:=1 to torre1.numDiscos do
for i:=-torre1.discos[z] to torre1.discos[z] do
begin
gotoxy(22+i,10-z);
writeln('=');
end;

{Torre2}
for z:=1 to torre2.numDiscos do
for i:=-torre2.discos[z] to torre2.discos[z] do
begin
gotoxy(42+i,10-z);
writeln('=');
end;

{Torre3}
for z:=1 to torre3.numDiscos do
for i:=-torre3.discos[z] to torre3.discos[z] do
begin
gotoxy(62+i,10-z);
writeln('=');
end;
end;

procedure moverDisco(var torreOrigen: Ttorre; var torreDestino: Ttorre);
begin
if torreOrigen.numDiscos <> 0 then
if (torreDestino.discos[torreDestino.numDiscos]>
torreOrigen.discos[torreOrigen.numDiscos])
or (torreDestino.numDiscos = 0) then
begin
torreDestino.numDiscos:=torreDestino.numDiscos+1;
torreDestino.discos[torreDestino.numDiscos]:=
torreOrigen.discos[torreOrigen.numDiscos];
torreOrigen.numDiscos:=torreOrigen.numDiscos-1
end
else
begin
gotoxy(1,24);
textcolor(RED);
writeln('MOVIMIENTO NO PERMITIDO');
readln();
textcolor(BLUE);
end
else
begin
gotoxy(1,24);
textcolor(RED);
writeln('LA TORRE SELECCIONADA NO TIENE DISCOS');
readln();
textcolor(BLUE);
end
end;

begin

textcolor(BLUE);
textbackground(YELLOW);
clrscr;

writeln('Torres de Hanoi');
repeat
write('N£mero de discos (entre 1 y 9): ');
readln(num);
until (num>0) and (num<10);
altura:= num;
torre1.numDiscos := num;
for i:=1 to num do
torre1.discos[i]:=num+1-i;
torre2.numDiscos := 0;
torre3.numDiscos := 0;
fin:=false;
repeat
dibujarEscenario(altura, torre1, torre2, torre3);

if torre3.numDiscos = num then
begin
gotoxy(1,24);
textcolor(RED);
writeln('­HAS GANADO! N£mero de movimientos realizados: ',
numMovimientos);
writeln('N£mero m¡nimo de movimientos posible: ',
2*num-1);
readln();
fin:=true;
end
else
begin
gotoxy(1,15);
writeln('Selecciona un movimiento:');
writeln('12-De la torre 1 a la torre 2');
writeln('13-De la torre 1 a la torre 3');
writeln('21-De la torre 2 a la torre 1');
writeln('23-De la torre 2 a la torre 3');
writeln('31-De la torre 3 a la torre 1');
writeln('32-De la torre 3 a la torre 2');
writeln('0-Salir');
readln(rta);
if rta = '12' then moverDisco(torre1, torre2);
if rta = '13' then moverDisco(torre1, torre3);
if rta = '21' then moverDisco(torre2, torre1);
if rta = '23' then moverDisco(torre2, torre3);
if rta = '31' then moverDisco(torre3, torre1);
if rta = '32' then moverDisco(torre3, torre2);
if rta = '0' then fin:=true;
numMovimientos:=numMovimientos+1;
end;
until fin;
end.

lunes, febrero 13, 2006

Fibonacci y la razón aurea

La serie que hemos calculado, denominada serie de Fibonacci, cumple algunas propiedades
curiosas. La más llamativa de todas es la conexión con la razón aurea.

Esta razón se menciona en el libro VI de Los Elementos de Euclides. La podemos intuir cuando
intentamos dividir un segmento en 2 partes que guarden cierto equilibrio, pero sin que el corte
sea por el medio del segmento.


_______________I_________________________


¿Qué tiene de especial este corte? ¿Cual es la proporción que esconde? ¿Qué tiene que ver
con la serie de Fibonacci?

Símplemente el trozo largo respecto al trozo corto guarda la misma proporción que el segmento
entero respecto al trozo largo.


<------ 1 ----------> <---------- X -------------------->
_______________I_________________________

<-------------------- X+1 ------------------------------>


Algebraicamente:

(X+1) / X = X / 1
Por lo tanto:
(X+1) = X^2

X^2 - X -1 = 0
(X cuadrado - X -1 igual a 0)

Resolviendo esta ecuación de segundo grado obtenemos:

X = (1+SQRT(5))/2
(X es igual a (1 + raiz de 5) entre 2)

O sea que X = 1,6180339887498948482045868343656...

Hagamos el programa que además de la serie de Fibonacci, nos muestre la razón entre 2
elementos consecutivos de la serie:


program Fibonacci;
uses crt;
var numActual, numAnterior, numComodin, limite:longint;
begin
clrscr;
writeln('Serie de Fibonacci');
write('Introduce el l¡mite: ');
readln(limite);
writeln;
writeln;
numActual:=1;
numAnterior:=0;
repeat
write(numActual);
write(' -> ');
if numAnterior <> 0 then
writeln(numActual/numAnterior)
else writeln('X');
numComodin:=numActual;
numActual:=numAnterior+numActual;
numAnterior:=numComodin;
until numAnterior > limite;
readln
end.
 
Sorprendente, ¿verdad?

miércoles, febrero 08, 2006

Lenguajes recursivos

Los lenguajes recursivos son aquellos en los que sus funciones y/o procedimientos pueden llamarse a sí mismos.

Las técnicas que posibilitan soluciones recursivas son muy diferentes a las iterativas o repetitivas.

La recursividad dota de mayor potencia al lenguaje, ya que aunque todas las soluciones recursivas se pueden implementar de forma no recursiva, la recursividad ofrece las siguientes ventajas:
  • Las soluciones recursivas son más fáciles de plantear (hablamos de problemas medianamente complejos como los que plantearé en los próximos días).
  • En problemas no triviales, la solución tiene menos líneas de código.

Como ejemplo, este programa sirve para calcular el valor de un elemento de la serie de Fibonacci. Por supuesto, se hace uso de la recursividad:



program fibonacci_recursivo;
uses crt;
var numero:longint;
function calculaFibonacci(num:longint):longint;
begin
if (num=1) or (num=2) then calculaFibonacci:=1
else calculaFibonacci:=calculaFibonacci(num-1) + calculaFibonacci(num-2);
end;

begin
clrscr;
writeln('Fibonacci recursivo');
write('Introduce un n£mero: ');
readln(numero);
writeln(calculaFibonacci(numero));
readln;
end.

viernes, febrero 03, 2006

Fibonacci

Fibonacci (Leonardo de Pisa) nació en Pisa y vivió de 1170 a 1250.
Mercader y estudioso de las matemáticas fue uno de los que introdujeron los principios de la aritmética y el cálculo arábigo entre los mercaderes Europeos.

Escribió muchos libros sobre matemáticas, aunque teniendo en cuenta que no existía la imprenta, pocos han llegado hasta nuestros días.

En su libro Liber Abaci, entre múltiples problemas, plantea el de la reproducción de la pareja de conejos, que da lugar a la famosa serie de Fibonacci.

Fuente: http://redescolar.ilce.edu.mx/redescolar/act_permanentes/mate/nombres/mate4j.htm

1) Supongamos que tenemos una pareja de conejos (macho y hembra) de un mes de edad que aún no pueden reproducirse, pero que podrán hacerlo cuando cumplan dos meses de edad.

2) Supongamos también que cada mes, a partir del segundo, nace una nueva pareja de conejos (macho y hembra).

3) Si cada pareja de conejos se reproduce de la misma forma que la pareja inicial, ¿cuántas parejas habrá al principio de cada mes?

Primer mes: 1 pareja (el macho y la hembra).
Segundo mes: 1 pareja (el macho y la hembra).
Tercer mes: La pareja inicial + una nueva pareja. En total 2 parejas.
Cuarto mes: La pareja inicial + la pareja nueva del tercer mes + una nueva pareja. En total 3 parejas.
Quinto mes: Aquí el tema se complica, y ya me veo obligado a remitiros a http://redescolar.ilce.edu.mx/redescolar/act_permanentes/mate/nombres/mate4j.htm
para que lo veáis gráficamente.

El caso es que la serie resultante es 1, 1, 2, 3, 5, 8, 13, 21, …

O sea, que se puede calcular el número de parejas sumando los 2 términos anteriores.

Este tema de la serie me sirve de excusa para el primer programa. Un programita que calcule la serie hasta un límite que introduzca el usuario.

Para este tema, y siempre con la intención de hacerlo lo más fácil posible, he descargado el compilador de Turbo Pascal 5.5 de la web del programador de Pascal (http://www.devq.net/pascal)

El programa que calcula la serie hasta el límite de un tipo longint de TurboPascal es el siguiente:


program Fibonacci;
uses crt;
var numActual, numAnterior, numComodin, limite:longint;
begin
clrscr;
writeln('Serie de Fibonacci');
write('Introduce el límite: ');
readln(limite);
writeln;writeln;
numActual:=1;
numAnterior:=0;
repeat
writeln(numActual);
numComodin:=numActual;
numActual:=numAnterior+numActual;
numAnterior:=numComodin;
until numAnterior > limite;
readln
end.




Por otra parte, hace algún tiempo me descargué el BloodShed Dev-Pascal v1.9.2

que por debajo lleva Free Pascal Compiler 1.06.

Así que he decidido hacer una segunda comprobación.

El resultado es el siguiente:

La compilación no da ningún problema, pero en ejecución las tildes no aparecen correctamente. Me imagino que tendrá solución aunque no merece la pena esforzarse si con el antiguo compilador ha ido bien.

Resulta más curioso el tamaño del ejecutable obtenido:
El ejecutable generado con Turbo Pascal 5.5 es de 5 K-s.
El ejecutable generado con Free Pascal compiler 1.06 (con las opciones por defecto) ocupa 22 K-s.

Y es que el que tuvo retuvo.

jueves, febrero 02, 2006

Inicio

Esta es mi primera anotación en el Blog.
En principio quiero dedicarla a la programación en lenguajes de tercera generación algunos de los cuales se consideran anticuados hoy en día.
Mi opinión personal es que un programa debe resolver problemas y no crearlos. Por ello utilizaré el lenguaje apropiado para cada caso.
No tengo demasiado tiempo libre por lo que si consigo realizar un programita semanal que alguien considere útil estaré más que satisfecho.
Saludos.