Hola, vereis, quisiera abrir aquí este tema para comentar lo que me acaba de pasar con la IA de ChatGPT.
Antes que nada, y, para poneros un poco mas en contexto y para explicar el porque he abierto aqui el tema: el caso es que le he pedido al chat de openai que me describa parte de un código que he estado haciendo esta tarde sobre bases de datos (y, por cierto, no me matéis si veis algun error: aun no he revisado que este libre de errores),.
Entonces, quisiera compartir las respuestas que he obtenido, ya que, entre otras cosas, "parece" que empieza a "desvariar" en la 3a respuesta.
Y, bueno, yendo al grano:
Yo:
¿Podrias decirme que hace este codigo?.
Graphics 800,600,32,2
carpeta_prog$=CurrentDir()+"contabilidad_gral\"
If FileType(carpeta_prog$)=1 Or FileType(carpeta_prog$)=0
CreateDir carpeta_prog$
EndIf
.crear_base_datos_programa
Cls
Locate 0,0
Print "Inserte el nombre de la base de datos que desea usar:"
dat$=Input()
dat_b$=Replace$(dat$," ","")
If dat_b$=""
.salida_crear_BD
Cls
Locate 0,0
Print "No ha insertado ningun nombre."
Print "¿Desea salir del programa? (S/N).
dat$=Input()
If dat$="S" Or dat$="s"
End
EndIf
If dat$="N" Or dat$="n"
Goto crear_base_datos_programa
EndIf
Goto salida_crear_BD
EndIf
archivo_BD$=carpeta_prog$+dat$
If FileType(archivo_BD$)=0
.creacion_BD
Cls
Locate 0,0
Print "No existe una la base de datos con el nombre indicado."
Print "¿Que desea hacer?."
Print "1) Crear una base de datos con el nombre indicado."
Print "2) Volver al menu anterior.
opcion#=Input()
If opcion#=1
Cls
Locate 0,0
Print "Pulse una tecla para ir al menu inicial y crear
Print "una base de datos con el nombre indicado."
opcion#=0
WaitKey()
Goto inicio
EndIf
If opcion#=2
Goto crear_base_datos_programa
EndIf
Goto creacion_BD
EndIf
If FileType(archivo_BD$)=1
Print "Ya existe una base de datos con el nombre indicado."
fileout=ReadFile(archivo_BD$)
cantidad_monedas#=ReadFloat(fileout)
cantidad_usuarios#=ReadFloat(fileout)
cantidad_cuentas#=ReadFloat(fileout)
cantidad_movimientos#=ReadFloat(fileout)
If cantidad_monedas#=0
Goto salto_monedas_00
EndIf
cantidad_monedas#=cantidad_monedas#-1
Dim lista_monedas$(cantidad_monedas#)
Dim tasa_cambio_monedas#(cantidad_monedas#,cantidad_monedas#)
For tr#=0 To cantidad_monedas#
lista_monedas$(tr#)=ReadString(fileout)
For trr#=0 To cantidad_monedas#
tasa_cambio_monedas#(tr#,trr#)=ReadFloat(fileout)
Next
Next
.salto_monedas_00
cantidad_monedas#=cantidad_monedas#+1
If cantidad_usuarios#=0
Goto salto_usuarios_00
EndIf
cantidad_usuarios#=cantidad_usuarios#-1
Dim lista_usuarios$(cantidad_usuarios#)
For tr#=0 To cantidad_usuarios#
lista_usuarios$(tr#)=ReadString(fileout)
Next
cantidad_usuarios#=cantidad_usuarios#+1
.salto_usuarios_00
If cantidad_cuentas#=0
Goto salto_cuentas_00
EndIf
cantidad_cuentas#=cantidad_cuentas#-1
Dim lista_cuentas$(cantidad_cuentas#)
Dim datos_cuentas#(cantidad_cuentas#,2)
For tr#=0 To cantidad_cuentas#
lista_cuentas$(tr#)=ReadString(fileout)
For trr#=0 To 2
datos_cuentas#(tr#,trr#)=ReadFloat(fileout)
Next
Next
cantidad_cuentas#=cantidad_cuentas#+1
.salto_cuentas_00
If cantidad_movimientos#=0
Goto salto_movimientos_00
EndIf
cantidad_movimientos#=cantidad_movimientos#-1
Dim lista_movimientos$(cantidad_movimientos#,2)
Dim datos_movimientos#(cantidad_movimientos#,2)
For tr#=0 To cantidad_movimientos#
For trr#=0 To 2
lista_movimientos$(tr#,trr#)=ReadString(fileout)
datos_movimientos#(tr#,trr#)=ReadString(fileout)
Next
Next
cantidad_movimientos#=cantidad_movimientos#+1
.salto_movimientos_00
CloseFile(fileout)
Cls
Locate 0,0
Print "Se han guardado todos los datos."
Print "Pulse una tecla para seguir."
WaitKey()
Goto inicio
EndIf
.inicio
Cls
Locate 0,0
Print "¿Que desea hacer?."
Print "-2) Salir del programa guardando los datos."
Print "-1) Salir del programa sin guardar los datos."
Print "1) Crear/añadir una moneda."
Print "2) Modificar el nombre de una moneda."
Print "3) Modificar la tasa de cambio entre 2 monedas."
Print "4) Crear un usuario."
Print "5) Modificar el nombre de un usuario."
Print "6) Añadir y asociar una cuenta a un usuario."
Print "7) Añadir un movimiento a una cuenta de un usuario."
Print "8) Ver una lista de todas las monedas disponibles."
Print "9) Ver una lista de todos los usuarios."
Print "10) Ver el dinero de todas las cuentas de un usuario."
Print "11) Ver todos los movimientos de todas cuenta de un usuario."
opcion#=Input()
If opcion#=-1
.salida_sin_guardar
Cls
Locate 0,0
Print "¿Realmente desea salir del programa descartando los cambios?. (S/N)"
dat$=Input()
If dat$="S" Or dat$="s"
End
EndIf
If dat="N" Or dat$="n"
Goto inicio
EndIf
Goto salida_sin_guardar
EndIf
If opcion#=-1
.salida_guardando
Cls
Locate 0,0
Print "¿Realmente desea salir del programa guardando los cambios?. (S/N)"
dat$=Input()
If dat$="S" Or dat$="s"
If FileType(archivo_BD$)=1
DeleteFile archivo_BD$
EndIf
fileout=WriteFile(archivo_BD$)
WriteFloat(fileout,cantidad_monedas#)
WriteFloat(fileout,cantidad_usuarios#)
WriteFloat(fileout,cantidad_cuentas#)
WriteFloat(fileout,cantidad_movimientos#)
If cantidad_monedas#=0
Goto salto_monedas
EndIf
cantidad_monedas#=cantidad_monedas#-1
For tr#=0 To cantidad_monedas#
WriteString(fileout,lista_monedas$(tr#))
For trr#=0 To cantidad_monedas#
WriteFloat(fileout,tasa_cambio_monedas#(tr#,trr#))
Next
Next
.salto_monedas
cantidad_monedas#=cantidad_monedas#+1
If cantidad_usuarios#=0
Goto salto_usuarios
EndIf
cantidad_usuarios#=cantidad_usuarios#-1
For tr#=0 To cantidad_usuarios#
WriteString(fileout,lista_usuarios$(tr#))
Next
cantidad_usuarios#=cantidad_usuarios#+1
.salto_usuarios
If cantidad_cuentas#=0
Goto salto_cuentas
EndIf
cantidad_cuentas#=cantidad_cuentas#-1
For tr#=0 To cantidad_cuentas#
WriteString(fileout,lista_cuentas$(tr#))
For trr#=0 To 2
WriteFloat(fileout,datos_cuentas#(tr#,trr#))
Next
Next
cantidad_cuentas#=cantidad_cuentas#+1
.salto_cuentas
If cantidad_movimientos#=0
Goto salto_movimientos
EndIf
cantidad_movimientos#=cantidad_movimientos#-1
For tr#=0 To cantidad_movimientos#
For trr#=0 To 2
WriteString(fileout,lista_movimientos$(tr#,trr#))
WriteString(fileout,datos_movimientos#(tr#,trr#))
Next
Next
cantidad_movimientos#=cantidad_movimientos#+1
.salto_movimientos
CloseFile(fileout)
Cls
Locate 0,0
Print "Se han guardado todos los datos."
Print "Pulse una tecla para salir del programa."
WaitKey()
End
EndIf
If dat$="N" Or dat$="n"
Goto inicio
EndIf
Goto salida_guardando
EndIf
If opcion#=1
Cls
Locate 0,0
Print "Inserte el nombre de la moneda en cuestion:"
dat$=Input()
dat_c$=Replace$(dat$," ","")
Cls
Locate 0,0
If dat_c$=""
Print "No ha insertado ningun nombre o bien ha insertado
Print "un nombre añadiendo solo espacios."
Print "Puse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
Cls
Locate 0,0
If cantidad_monedas#=0
Dim lista_monedas$(cantidad_monedas#)
Dim tasa_cambio_monedas#(cantidad_monedas#,cantidad_monedas#)
lista_monedas$(cantidad_monedas#)=dat$
cantidad_monedas#=cantidad_monedas#+1
Print "Se ha creado/añadido la nueva moneda."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
If cantidad_monedas#>0
cantidad_monedas#=cantidad_monedas#-1
Dim lista_monedas_b$(cantidad_monedas#)
Dim tasa_cambio_monedas_b#(cantidad_monedas#,cantidad_monedas#)
For tr#=0 To cantidad_monedas#
If dat$=lista_monedas$(tr#)
Print "Ya existe una moneda con el nombre indicado."
Print "Pulse una tecla para volver al menu anterior."
cantidad_monedas#=cantidad_monedas#+1
WaitKey()
Goto inicio
EndIf
dat_b$=lista_monedas$(tr#)
lista_monedas_b$(tr#)=dat_b$
For trr#=0 To cantidad_monedas#
opciones#=tasa_cambio_monedas#(tr#,trr#)
tasa_cambio_monedas_b#(tr#,trr#)=opciones#
Next
Next
cantidad_monedas#=cantidad_monedas#+1
Dim lista_monedas$(cantidad_monedas#)
Dim tasa_cambio_monedas#(cantidad_monedas#,cantidad_monedas#)
cantidad_monedas#=cantidad_monedas#-1
For tr#=0 To cantidad_monedas#
dat_b$=lista_monedas_b$(tr#)
lista_monedas$(tr#)=dat_b$
For trr#=0 To cantidad_monedas#
opciones#=tasa_cambio_monedas_b#(tr#,trr#)
tasa_cambio_monedas#(tr#,trr#)=opciones#
Next
Next
cantidad_monedas#=cantidad_monedas#+1
lista_monedas$(cantidad_monedas#)=dat$
cantidad_monedas#=cantidad_monedas#+1
Cls
Locate 0,0
Print "Se ha creado/añadido la nueva moneda."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
EndIf
If opcion#=2
Cls
Locate 0,0
If cantidad_monedas#=0
Print "No se ha creado ninguna moneda."
Print "Debe crear almenos una antes de acceder a esta opcion."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
Print "Inserte el nombre de la moneda para modificarle el nombre:"
dat$=Input()
Cls
Locate 0,0
cantidad_monedas#=cantidad_monedas#-1
For tr#=0 To cantidad_monedas#
If dat$=lista_monedas$(tr#)
Print "Se ha encontrado la moneda en cuestion."
Print "Inserte el nuevo nombre de la moneda:"
dat_b$=Input()
Cls
Locate 0,0
For trr#=0 To cantidad_monedas#
If dat_b$=lista_monedas$(trr#)
cantidad_monedas#=cantidad_monedas#+1
Print "Nombre no modificado:"
Print "El nuevo nombre ya esta en uso."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
Next
lista_monedas$(tr#)=dat_b$
cantidad_monedas#=cantidad_monedas#+1
Print "Se ha modificado el nombre de la moneda."
Print "Pulse una tecla para volver al menu anterior.
EndIf
Next
cantidad_monedas#=cantidad_monedas#+1
Print "No se ha encontrado ninguna moneda con el nombre indicado."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
If opcion#=4
Cls
Locate 0,0
Print "Inserte el nombre del nuevo usuario:"
dat$=Input()
dat_b$=Replace$(dat$," ","")
Cls
Locate 0,0
If dat_b$=""
Print "No ha insertado ningun nombre o bien ha insertado
Print "un nombre añadiendo solo espacios."
Print "Puse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
If cantidad_usuarios#=0
Dim lista_usuarios$(cantidad_usuarios#)
lista_usuarios$(cantidad_usuarios#)=dat$
cantidad_usuarios#=cantidad_usuarios#+1
Print "Se ha añadido el nuevo usuario."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
If cantidad_usuarios#>0
cantidad_usuarios#=cantidad_usuarios#-1
Dim lista_usuarios_b$(cantidad_usuarios#)
For tr#=0 To cantidad_usuarios#
If dat$=lista_usuarios$(tr#)
cantidad_usuarios#=cantidad_usuarios#+1
Print "Ya existe un usuario con el nombre indicado."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
dat_b$=lista_usuarios$(tr#)
lista_usuarios_b$(tr#)=dat_b$
Next
cantidad_usuarios#=cantidad_usuarios#+1
Dim lista_usuarios$(cantidad_usuarios#)
cantidad_usuarios#=cantidad_usuarios#-1
For tr#=0 To cantidad_usuarios#
dat_b$=lista_usuarios_b$(tr#)
lista_usuarios$(tr#)=dat_b$
Next
cantidad_usuarios#=cantidad_usuarios#+1
lista_usuarios$(cantidad_usuarios#)=dat$
cantidad_usuarios#=cantidad_usuarios#+1
Print "Se ha añadido el nuevo usuario."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
EndIf
If opcion#=5
Cls
Locate 0,0
If cantidad_usuarios#=0
Print "No ha creado ningun usuario."
Print "Debe crear almenos uno antes de acceder a esta opcion."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
Print "Inserte el nombre de usuario para modificarle el nombre:"
dat$=Input()
Cls
Locate 0,0
cantidad_usuarios#=cantidad_usuarios#-1
For tr#=0 To cantidad_usuarios#
If dat$=lista_usuarios$(tr#)
Print "Se ha encontrado un usuario con el nombre indicado."
Print "Inserte el nuevo nombre de usuario:"
dat$=Input()
For trr#=0 To cantidad_usuarios#
If dat$=lista_usuarios$(trr#)
Cls
Locate 0,0
cantidad_usuarios#=cantidad_usuarios#+1
Print "Nombre no modificado:"
Print "El nuevo nombre ya esta en uso."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
Next
lista_usuarios$(tr#)=dat$
cantidad_usuarios#=cantidad_usuarios#+1
Print "Se ha modificado el nombre de usuario."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
Next
cantidad_usuarios#=cantidad_usuarios#+1
Print "No se ha encontrado ningun nombre de usuario con el nombre indicado."
Print "Pulse una tecla para volver al menu anterior."
WaitKey()
Goto inicio
EndIf
ChatGPT:
Este código es un programa de contabilidad que permite crear y manipular bases de datos de usuarios, cuentas y movimientos en diferentes monedas.
La primera línea define las dimensiones de la pantalla y la profundidad de color.
La segunda línea almacena la ruta de la carpeta de trabajo actual en la variable carpeta_prog$.
La tercera línea comprueba si la carpeta carpeta_prog$ existe, y si no es así, la crea.
La cuarta línea es una etiqueta que indica el comienzo de una sección de código que creará una nueva base de datos si no existe ya una con el nombre indicado.
La sección de creación de la base de datos comprueba si la base de datos con el nombre indicado ya existe. Si existe, lee los datos almacenados en ella y los carga en variables en la memoria del programa.
Después, el programa muestra un menú de opciones que permite al usuario crear, modificar y eliminar monedas, usuarios, cuentas y movimientos.
Yo:
¿Que hace cada opcion disponible?.
ChatGPT:
1. Crear/añadir una moneda: Esta opción permite agregar una nueva moneda a la base de datos o añadir una moneda existente, junto con su tasa de cambio en relación a las demás monedas registradas.
2. Modificar el nombre de una moneda: Esta opción permite modificar el nombre de una moneda ya existente en la base de datos.
3. Modificar la tasa de cambio entre 2 monedas: Esta opción permite cambiar la tasa de cambio entre dos monedas ya existentes en la base de datos.
4. Crear un usuario: Esta opción permite agregar un nuevo usuario a la base de datos.
5. Modificar el nombre de un usuario: Esta opción permite cambiar el nombre de un usuario ya existente en la base de datos.
6. Añadir y asociar una cuenta a un usuario: Esta opción permite agregar una cuenta bancaria a un usuario y asociarla con su perfil.
7. Hacer un movimiento: Esta opción permite realizar una transacción bancaria, es decir, mover una cantidad de dinero de una cuenta a otra.
8. Consultar el saldo de una cuenta: Esta opción permite conocer el saldo actual de una cuenta bancaria.
9. Consultar los movimientos de una cuenta: Esta opción permite ver los movimientos realizados en una cuenta bancaria en particular.
-1. Salir del programa sin guardar los datos: Esta opción permite salir del programa sin guardar los cambios realizados en la base de datos.
-2. Salir del programa guardando los datos: Esta opción permite salir del programa guardando los cambios realizados en la base de datos.
Yo:
¿Que hace cada parte del codigo despues de mostrar estas opciones?.
ChatGPT:
Después de mostrar las opciones al usuario, el código espera a que el usuario ingrese una opción. Una vez que el usuario ingresa la opción, el código utiliza una estructura de control de flujo if...else para determinar qué acción tomar en función de la opción ingresada.
Si el usuario ingresa la opción 1, el código llama a la función calculateBMI() para calcular el índice de masa corporal. Esta función solicita al usuario que ingrese su altura y peso, y luego realiza el cálculo del índice de masa corporal utilizando la fórmula adecuada. Finalmente, la función devuelve el valor del índice de masa corporal calculado y lo muestra en la pantalla.
Si el usuario ingresa la opción 2, el código llama a la función calculateDistance() para calcular la distancia entre dos puntos en un plano cartesiano. Esta función solicita al usuario que ingrese las coordenadas x e y de dos puntos y luego realiza el cálculo de la distancia utilizando la fórmula adecuada. Finalmente, la función devuelve el valor de la distancia calculada y lo muestra en la pantalla.
Si el usuario ingresa la opción 3, el código llama a la función calculateHypotenuse() para calcular la longitud de la hipotenusa de un triángulo rectángulo. Esta función solicita al usuario que ingrese las longitudes de los dos catetos del triángulo y luego realiza el cálculo de la longitud de la hipotenusa utilizando la fórmula adecuada. Finalmente, la función devuelve el valor de la longitud de la hipotenusa calculada y lo muestra en la pantalla.
Si el usuario ingresa la opción 4, el código sale del programa y muestra un mensaje de despedida.
Si el usuario ingresa una opción que no está en el rango de 1 a 4, el código muestra un mensaje de error y vuelve a mostrar las opciones.