• Jueves 28 de Marzo de 2024, 22:50

Autor Tema:  problema al sumar matris bidimencional  (Leído 1979 veces)

calichecal

  • Nuevo Miembro
  • *
  • Mensajes: 13
  • Nacionalidad: co
    • Ver Perfil
problema al sumar matris bidimencional
« en: Viernes 17 de Julio de 2009, 21:49 »
0
saludo ,ahora en visual basic 6.0 estoy en el tema de las matrises  ,pero tengo el problema de que quiero sumar las filas y las columnas de una matris bidimencional ,pero no me quiere salir ,he revisado el codigo varias veces y la verdad no encuentro la falla ,todo parece estar bien ,agradesco la atencion al que me saque de esta duda,este es el codigo:

Dim mama() As Integer
Private Sub Form_Load()

Dim c As Integer, f As Integer, i As Integer, i2 As Integer, sc As Integer, sf As Integer, a As Integer
c = InputBox("ingrese el numero de columnas :")
f = InputBox("ingrese el numero de filas :")
ReDim mama(1 To c, 1 To f)
For i = 1 To c
  For i2 = 1 To f
     mama(c, f) = InputBox("ingrese el dato numerico de la columna " _
     & i & " de la fila " & i2)
  Next i2
 Next i
For i2 = 1 To f
   sf = 0
  For i = 1 To c
     sf = sf + mama(i, i2)
  Next i
  Print " suma fila "; i2; " = "; sf
Next i2
For i = 1 To c
  sc = 0
  For i2 = 1 To f
     sc = sc + mama(i, i2)
  Next i2
  Print "suma columna "; i; " = "; sc
Next i
End Sub

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: problema al sumar matris bidimencional
« Respuesta #1 en: Martes 21 de Julio de 2009, 09:40 »
0
Bueno, veamos, varias cosas que decir... empezaré por la raíz, y terminaré por tu problema.

En el código evita utilizar nombres de variables inexpresivas, es decir variables como: i,12,sf,sc no significan nada, tú las entiendes hoy, si guardas el código un mes y luego lo relees es probable que recuerdes que se esperaba del programa pero si llevas la atención a una línea cualquiera y ves sc=0 no sabrás que está haciendo... por ejemplo sf podrías llamarlo Total1 y sc podrías llamarlo total2 a c lo podrías llamar Entrada1 y a f entrada2 o bien a c 'columna y a f Fila que imagino era la idea, la única excepción honrosa para esto suelen ser las variables de bucles si no tiene un propósito anterior, sin embargo en en bucles anidados usa variables consecutivas i,j,k,l,m además si te acostumbras a usar siempre un punto inicial y mantienes esa regla si ves k y siempre empiezas por i sea donde sea en tu código sabrás que k es el 3º bucle anidado... para corregir errores o despistes un simple conjunto de reglas para establecer nombres o mejor para no cometer errores es primordial...

A lo que veníamos...
El código es totalmente correcto en su ejecución, la razón porque tu no ves nada es porque no has elegido la rutina adecuada para presentarlo, si el código lo ejecutaras desde un botón verías que funciona correctamente.
Es que no se puede usar el load ?. Si, claro que se puede, pero hay que saber que significa el evento load... imagina que te digo me voy de viaje a Méjico, dicho así parece que eso es todo, pero previamente hay una cascada de sucesos... está la función comprar billetes para méjico, esperar la fecha del viaje, hacer las maletas, tomar el bus hasta el aeropuerto, facturar el equipaje y esperar el embarque, embarcar, despegar y viajar, finalmente llego a méjico..

El load del formulario es una aventura similar... cuando se abre un formulario por primera vez hay una cascada de eventos, primero hay uno que se llama initialize en él se deben poner el código de asignación de valores que se establecen una vez para toda la vida del formulario, luego viene otro que se llama activate recibe el enfoque lo que significa que el control que previamente lo tenía lo pierde, luego viene el load que es donde se debe poner el código que se debe ejecutar cada vez que se carga el formulario, initialize sólo se ejecuta 1 vez sería como si lo llamáramos construir, load sería como si lo llamáramos abrir las puertas, después del load viene el evento show este se encarga de dibujar todo el contenido por ejemplo los controles dentro del formulario se cargan en esta fase y finalmente viene el evento paint que es hacerlo visible, show lo carga gráficamente en memoria y paint lo vuelca al monitor.

Ahí está tu error, tu dibujas en el formulario con print, pero no son gráficos persistentes, cuando se ejecuta el evento paint, por tanto queda borrado. Puedes hacer una de 2 cosas, o bien previamente estableces la propiedad autoredraw = true, tal como se muestra en el código...
Código: Visual Basic
  1.  
  2. Private Sub Form_Load()
  3.     Dim c As Integer, f As Integer, i As Integer, i2 As Integer, sc As Integer, sf As Integer, a As Integer
  4.     AutoRedraw = True ' <====================== mirar aquí ================================================
  5.    c = InputBox("ingrese el numero de columnas :")
  6.     f = InputBox("ingrese el numero de filas :")
  7.    
  8.     ReDim mama(1 To c, 1 To f)
  9.   .....
  10. end sub
  11.  
  12.  
Que lo convierte en un fráfico persistente, o bien precipitamos que el formulario se exhiba y luego dibujamos en él... dentro del propio evento load, esto se haría como se indica en el código de ejemplo:

Código: Visual Basic
  1.  
  2. Private Sub Form_Load()
  3.     Dim c As Integer, f As Integer, i As Integer, i2 As Integer, sc As Integer, sf As Integer, a As Integer
  4.     me.show ' <====================== mirar aquí ================================================
  5.    c = InputBox("ingrese el numero de columnas :")
  6.     f = InputBox("ingrese el numero de filas :")
  7.    
  8.     ReDim mama(1 To c, 1 To f)
  9.   .....
  10. end sub
  11.  
  12.  
El me.show fuerza a que se ejecuten los otros eventos restantes shoe y paint antes de continuar con la carga.

Pero vamos dado que el código que pones no es imprescindible durante la carga lo ideal es que lo ejecutaras desde un botón....
«Ma non troppo»
----> ModoVacaciones = False<----

calichecal

  • Nuevo Miembro
  • *
  • Mensajes: 13
  • Nacionalidad: co
    • Ver Perfil
Re: problema al sumar matris bidimencional
« Respuesta #2 en: Viernes 24 de Julio de 2009, 01:29 »
0
Cita de: "Nebire"
Bueno, veamos, varias cosas que decir... empezaré por la raíz, y terminaré por tu problema.

En el código evita utilizar nombres de variables inexpresivas, es decir variables como: i,12,sf,sc no significan nada, tú las entiendes hoy, si guardas el código un mes y luego lo relees es probable que recuerdes que se esperaba del programa pero si llevas la atención a una línea cualquiera y ves sc=0 no sabrás que está haciendo... por ejemplo sf podrías llamarlo Total1 y sc podrías llamarlo total2 a c lo podrías llamar Entrada1 y a f entrada2 o bien a c 'columna y a f Fila que imagino era la idea, la única excepción honrosa para esto suelen ser las variables de bucles si no tiene un propósito anterior, sin embargo en en bucles anidados usa variables consecutivas i,j,k,l,m además si te acostumbras a usar siempre un punto inicial y mantienes esa regla si ves k y siempre empiezas por i sea donde sea en tu código sabrás que k es el 3º bucle anidado... para corregir errores o despistes un simple conjunto de reglas para establecer nombres o mejor para no cometer errores es primordial...

A lo que veníamos...
El código es totalmente correcto en su ejecución, la razón porque tu no ves nada es porque no has elegido la rutina adecuada para presentarlo, si el código lo ejecutaras desde un botón verías que funciona correctamente.
Es que no se puede usar el load ?. Si, claro que se puede, pero hay que saber que significa el evento load... imagina que te digo me voy de viaje a Méjico, dicho así parece que eso es todo, pero previamente hay una cascada de sucesos... está la función comprar billetes para méjico, esperar la fecha del viaje, hacer las maletas, tomar el bus hasta el aeropuerto, facturar el equipaje y esperar el embarque, embarcar, despegar y viajar, finalmente llego a méjico..

El load del formulario es una aventura similar... cuando se abre un formulario por primera vez hay una cascada de eventos, primero hay uno que se llama initialize en él se deben poner el código de asignación de valores que se establecen una vez para toda la vida del formulario, luego viene otro que se llama activate recibe el enfoque lo que significa que el control que previamente lo tenía lo pierde, luego viene el load que es donde se debe poner el código que se debe ejecutar cada vez que se carga el formulario, initialize sólo se ejecuta 1 vez sería como si lo llamáramos construir, load sería como si lo llamáramos abrir las puertas, después del load viene el evento show este se encarga de dibujar todo el contenido por ejemplo los controles dentro del formulario se cargan en esta fase y finalmente viene el evento paint que es hacerlo visible, show lo carga gráficamente en memoria y paint lo vuelca al monitor.

Ahí está tu error, tu dibujas en el formulario con print, pero no son gráficos persistentes, cuando se ejecuta el evento paint, por tanto queda borrado. Puedes hacer una de 2 cosas, o bien previamente estableces la propiedad autoredraw = true, tal como se muestra en el código...
Código: Visual Basic
  1.  
  2. Private Sub Form_Load()
  3.     Dim c As Integer, f As Integer, i As Integer, i2 As Integer, sc As Integer, sf As Integer, a As Integer
  4.     AutoRedraw = True ' <====================== mirar aquí ================================================
  5.     c = InputBox("ingrese el numero de columnas :")
  6.     f = InputBox("ingrese el numero de filas :")
  7.    
  8.     ReDim mama(1 To c, 1 To f)
  9.   .....
  10. end sub
  11.  
  12.  
Que lo convierte en un fráfico persistente, o bien precipitamos que el formulario se exhiba y luego dibujamos en él... dentro del propio evento load, esto se haría como se indica en el código de ejemplo:

Código: Visual Basic
  1.  
  2. Private Sub Form_Load()
  3.     Dim c As Integer, f As Integer, i As Integer, i2 As Integer, sc As Integer, sf As Integer, a As Integer
  4.     me.show ' <====================== mirar aquí ================================================
  5.     c = InputBox("ingrese el numero de columnas :")
  6.     f = InputBox("ingrese el numero de filas :")
  7.    
  8.     ReDim mama(1 To c, 1 To f)
  9.   .....
  10. end sub
  11.  
  12.  
El me.show fuerza a que se ejecuten los otros eventos restantes shoe y paint antes de continuar con la carga.

Pero vamos dado que el código que pones no es imprescindible durante la carga lo ideal es que lo ejecutaras desde un botón....

ahora resulta que me imprime el resultado de  la ultima ultima fila y la ultima columna, y el resto  la imprime pero resultado cero,

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: problema al sumar matris bidimencional
« Respuesta #3 en: Sábado 25 de Julio de 2009, 00:13 »
0
Yo lo he probado y funcionaba perfectamente.

Por qué no pones el código que estás utilizando ahora ?. Así podría ver donde está el problema...
«Ma non troppo»
----> ModoVacaciones = False<----