Título: Cuando le pides a ChatGPT que te explique lo que hace un codigo Publicado por: crazykenny en 29 Abril 2023, 21:18 pm 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. Título: Re: Cuando le pides a ChatGPT que te explique lo que hace un codigo Publicado por: Serapis en 1 Mayo 2023, 16:17 pm El código que le pasas es muy largo.
El tamaño máximo de los mensajes es de 2000 caracteres (eso sí sin límite de mensajes según le pregunté una vez, sin embargo su 'ventana de memoria' se limita a cierta cantidad de kb)... Si es ChatGPT, quien te responde, el mensaje se corta, puedes perdirle que continúe desde donde se quedó y suele funcionar, pero si ocurre varias veces con el mismo mensaje no suele llegar a buen término. Si eres tú quiene le pregunta, a ChatGPT, es muy probable que solo le lleguen los primeros 2000 caracteres, luego la respuesta que te elabore no sea adecuada cuando se le pregunta acerca de una parte que no ha recibido. en ese caso puede que esté leyendo más allá del contenido de tu mensaje, es decir ¿tal vez esté leyendo parte del contenido del mensaje de otro usuario?. Lo que deberías hacer es fraccionar el código en unidades funcionales y preguntarle por cada una separadamente. También para asegurarte, tras pegarle todo el código y encabézalo con un: - "Cuántos caracteres tiene este mensaje a partir de este punto?" O preguntarle en el siguiente mensaje; - "Cuántos caracteres tenía mi mensaje anterior?" o incluso: - Repíteme las 3 últimas línea de mi mensaje previo. ...así tendrás certidumbre de hasta donde ha sido capaz de leer. Cuando el mensaje supera solo ligeramente el límite, uno puede intentar abreviarlo acortando los nombres de las variables, por ejemplo... aunque en este ejemplo, no se resolvería así, porque me temo que supere los 10.000 caracteres... |