Autor Tema: Tema CU00333A. Lectura de datos de un archivo mediante bucle Visual Basic.  (Leído 3843 veces)

Gilding

  • Sin experiencia
  • *
  • Mensajes: 44
    • Ver Perfil
Muy buenas!

En el tema CU00333A del curso del Visual Basic proponeis el siguiente ejercicio:

 En un complejo industrial se desea incentivar a los encargados de turnos de producción. A cada encargado le corresponde un turno. Hay 18 turnos, y por cada uno de ellos 40 operarios. Para evaluar a los encargados se ha hecho una encuesta entre los trabajadores. Se les ha pedido que evalúen a su encargado de 0 a 10 siendo el 5 el aprobado. Los resultados están almacenados en un array tipo Nota(turno, operario) donde turno indica el número de turno y operario el número de operario dentro del turno. Desarrollar un programa que determine en qué turnos todos los operarios del mismo han aprobado al encargado.

Nota: las notas las generaremos aleatoriamente en un fichero con un pequeño programa auxiliar.


Para resolverlo proponeis utilizar un bucle dentro de otro bucle:
For i = 1 to 18
      For j = 1 to 40
          nota(i, j) = Leer linea del archivo
          Comparar si la nota(i, j) es mayor a 5.
      Next j
Next i

Teniendo en cuenta que en total tenemos 720 notas (18 * 40), en 720 líneas de un archivo. No entiendo como este bucle interpreta que tras la primera iteración (notas de la 1 a la 40) debe leer las notas de la 41 a la 80 en la segunda iteración y así sucesivamente hasta llegar a la nota 720. Ahora mismo yo interpreto que siempre lee las notas de la 1 a la 40. ¿Podría alguien explicarme esto, por favor?

Muchas gracias y un saludo!
« Última modificación: 11 de Noviembre 2014, 19:13 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:Tema CU00333A. Lectura de datos de un archivo mediante bucle Visual Basic.
« Respuesta #1 en: 11 de Noviembre 2014, 19:14 »
Hola, el bucle comienza con i=1 y recorre todos los j, por tanto se lee: nota(1, 1), nota(1,2), nota(1, 3)... así hasta nota(1, 40)

Al llegar aquí el bucle interno llega a su condición de terminación (ha llegado a 40) y termina.

En ese momento el bucle externo que estaba trabajando con i=1 pasa a trabajar con i=2 y se crea un nuevo bucle interno que vuelve a empezar con j=1, de modo que se leen los datos nota(2, 1), nota(2,2), nota(2, 3) ... así hasta llegar a nota(2, 40).

Al llegar aquí el bucle interno termina nuevamente

En ese momento el bucle externo que estaba trabajando con i=2 pasa a trabajar con i=3, y vuelve a leer otras 40 notas...

Así hasta que i llega a 18 y termina el proceso. El total de datos leídos será 18*40 datos, en 720 líneas

Las notas del turno 1 corresponden a la línea 1 a la 40, las notas del turno 2 corresponden a las líneas 41 a la 80, las notas del turno 3 corresponden a las líneas de la 81 a la 120 y así hasta llegar al turno 18 y a la línea 720.

Espero que esto aclare la duda, si no es así vuelve a consultar y tratamos de aclararlo.

Saludos :)

Gilding

  • Sin experiencia
  • *
  • Mensajes: 44
    • Ver Perfil
Re:Tema CU00333A. Lectura de datos de un archivo mediante bucle Visual Basic.
« Respuesta #2 en: 11 de Noviembre 2014, 20:48 »
Hola Mario.

Gracias por intentar ayudarme... pero con tu explicación no ha quedado resuelta mi duda. Entiendo como funcionan tanto el array bidimensional, como los bucles. Lo que no comprendía bien era en que punto el bucle o el array le indicaban al archivo o a la instrucción de lectura del archivo por que línea seguir leyendo. Porque realmente si estamos en la iteración nota(2, 1), a través de este dato la instrucción de lectura del archivo no interpreta de ninguna manera que tiene que leer la linea número 41 del archivo.

Y digo comprendía, porque después de leer varias veces el código y hacer algunas pruebas creo haber entendido "porque" ocurre esto... aunque no el "como" (lo que sucede internamente), pero tampoco me es necesario saberlo.

Este hecho se debe a que abrimos el archivo antes de iniciar el primer bucle, y lo cerramos tras finalizar todas las iteraciones de ambos bucles. Y dentro del bucle llamamos al método o función lectura de línea. Entiendo que al estar abierto en todo momento el archivo este método continua leyendo en orden cada línea del archivo, es decir, cada vez que es llamado lee la siguiente línea del archivo independientemente de la iteración en la que se encuentre el bucle.

Por el contrario, si ponemos las instrucciónes de abrir y cerrar el archivo dentro de uno de los bucles:
Si fuera dentro del primer bucle (de 1 a 18), tendríamos el comportamiento que describo en el primer post. Siempre leería las 40 primeras líneas.
Si fuera dentro del segundo bucle (de 1 a 40), en cada una de las 40 iteraciones leería siempre la primera línea del archivo.

De todos modos muchas gracias por tu tiempo.

Un saludo!

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:Tema CU00333A. Lectura de datos de un archivo mediante bucle Visual Basic.
« Respuesta #3 en: 12 de Noviembre 2014, 07:49 »
Hola, creo que tú mismo has llegado a responderte: una vez abres el archivo, con cada petición de lectura de línea se lee una nueva línea del archivo. Sólo se procede al cierre del archivo cuando has completado la lectura de todas las líneas que necesitas leer. Saludos.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".