• Viernes 29 de Marzo de 2024, 10:19

Autor Tema:  estructura de algoritmo for  (Leído 5609 veces)

accelerator

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
estructura de algoritmo for
« en: Domingo 20 de Septiembre de 2009, 04:43 »
0
Hola a todos tengan buen dia, soy nuevo en su comunidad y me parecio interesante asi que decidi unirme, espero poder estar activo la mayor parte del tiempo que pueda.
Bueno queria ir al punto de mi problema: estoy creando en visual studio 2008 3 ejemplos de algoritmos for y por el momento lo estoy haciendo en una calculadora sencilla que sume o reste dos numeros. El problema es a la hora de escribir el algoritmo for en pseudocodigo. Le doy doble clic al boton total que me mostrara el resultado de la suma y todo eso pero no se como implementar el codigo form, es decir no se que valor va en que lugar. Aqui les pongo el pseudocodigo me dicen el error para corregirlo. Gracias por su tiempo.

Private Sub btntotal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btntotal.Click
        Dim num1, num2, total As Double

        num1 = Me.txtnum1.Text
        num2 = Me.txtnum2.Text
        total = Me.txttotal.Text

        For num1 as  0 & num2 > 0 = 1 to 10 step 1
            total = num1 + num2
            Me.txttotal.Text = total

        Next

    End Sub

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: estructura de algoritmo for
« Respuesta #1 en: Lunes 21 de Septiembre de 2009, 20:04 »
0
No puedes llamar algoritmo a todo lo que té la gana. 'For' es un bloque estructural de programación, sólo podrás llamarlo algoritmo a la implementación del mismo (por ejemplo cuando estés creando un lenguaje) pero nunca al hecho de usarlo desde el lenguaje. todavía al final te pondré códigos que al menos si pueden llamarse algoritmo, por implmentar el bucle for.

Tu has hecho una cosa rara, el código es de visual basic, pero al momento me pareció que querías hacer un bucle de 'C' y al final ni una cosa ni la otra.

la estructura del bucle for tiene este patrón:
Código: Visual Basic
  1. For W= X to Y step Z
  2.   ' código
  3. next
  4.  

donde x,y,z son variables, valores, ó expresiones (incluído el resultado de una llamada a una función) y W es el nombre de una variable a la que si es necesario puede insitu indicarse el tipo de variable que es, por ejemplo:
Código: Visual Basic
  1. x= 110
  2. for W as byte = x to -102 step   -(x/10)
  3.   ' código
  4. next
  5.  

En este pedazo de código W inicialmente valdrá 110, los incrementos será de -11 y al final el código del bucle se ejecuta por última vez cuando W llegará a alcanzar el valor -99  (-102 nunca se llega a alcanzar).

W automáticamente adquiere el valor de X cuando se inicia el bucle, por tanto es x quien previamente puedes ponerle el valor deseado, nunca a w...

Si lo entiendes mejor de esta manera, en pseudocódigo, ahí queda:
Código: Visual Basic
  1.  
  2. Desde x '  w=x
  3. Repetir  hasta Y ' w <= y
  4.        ' codigo
  5.    en pasos de z ' w= w + z
  6. fin repetir    
  7.  
  8.  

Aquí recreamos un bucle (esto si es un algoritmo) sin usar la estructura for, fíjate que es una implementación del pseudocódigo anterior
Código: Visual Basic
  1.  
  2. w=x
  3. Repetir:
  4. if w <= y then
  5.      ' codigo
  6.      
  7.      w=w + z
  8.      goto Repetir         ' salto incondicional a la etiqueta Repetir
  9. end if  
  10.  
  11.  

Para reproducir fielmente los mismos valores que devuelve VB al final de un bucle, sea cual sea el caso, debería modificarse el código así:
Código: Visual Basic
  1.  
  2. w=x
  3. if w <= y then
  4. Repetir:
  5.  
  6.      ' codigo
  7.  
  8.      w=w + z
  9.      if w <= y then goto Repetir         ' vb siempre realiza una suma posterior a la última válida, siempre que al menos se ejecutara una vez el código.
  10. end if  
  11.  
  12.  

Para terminar, indicarte que el mejor sitio para tu pregunta-duda no es este subforo si no el de 'vb .net', pero bueno, para hacerlo válido aquí es que al final te he puesto estos 2 algoritmos y el pseudocódigo, con la excusa del bucle for...

Fíjate que usar un bucle for resulta más claro y limpio que el código del algoritmo (de cara al programador), y también correrá más rápido porque está diseñado a bajo nivel aunque estructuralmente haga exactamente lo mismo. No obstante el algoritmo tesirve cuando debas alterar ligeramente el comportamiento del bucle, por ejemplo la 1ª implementación nunca devolverá un valor de w mayor que y, VB siempre al final del bucle si se entró en él w valdrá el siguiente valor que habría de tomar el bucle.

También te aclaro que las implementaciones están 'resumidas', la idea era que lo comprendas y para eso lo mejor es que quede sencillo, en realidad las implmentaciones sólo funcionarán si 'X' es menor que 'Y'... el código para todos los casos sería...

Código: Visual Basic
  1.  
  2. ' if z= 0 then bucleInfinito... salvo que se use exit for (exit sub, etc..) dentro del código, el programador es responsable de que en alguna ocasión se ejecute dicha salida...
  3. w = x
  4.     If x < y Then       ' controla si inicio es mayor que final
  5.         If (w + z) => x Then ' controla el paso
  6.             If w <= y Then  ' controla si puede ejecutarse el bucle
  7. RepetirA:
  8.                  ' codigo
  9.                  w = w + z
  10.                  If (w <= y) Then GoTo RepetirA     ' controla si puede seguirse repitiendo el bucle
  11.             End If
  12.         End If
  13.     Else
  14.         If (w + z) <= x Then  ' controla el paso
  15.             If w >= y Then
  16. RepetirB:
  17.                  ' codigo
  18.                  w = w + z
  19.                  If (w >= y)  Then GoTo RepetirB
  20.             End If
  21.         End If
  22.     End If 
  23.  

Aunque el código ahora queda mayor, en realidad VB cuando compila pone sólo el caso que se aplica (el condicional)  e ignora el resto, por tanto la aparente repetición de código nunca se produce. Esto es pone uno de los códigos que indico a continuación:

Código: Visual Basic
  1.  
  2. ' al compilar se pone este código o el siguiente
  3. w = x
  4.     If x < y Then
  5.         If (w + z) > x Then
  6.             If w <= y Then
  7. Repetir:
  8.                  ' codigo
  9.                  w = w + z
  10.                  If w <= y Then GoTo Repetir
  11.             end if
  12.         End If
  13.     End if
  14.  
  15.  
  16.  
  17. '  al compilar se pone este código o el anterior
  18. w = x
  19.     If x > y Then
  20.         If (w + z) < x Then
  21.             If w >= y Then
  22. Repetir:
  23.                  ' codigo
  24.                  w = w + z
  25.                  If w >= y Then GoTo Repetir
  26.             End If
  27.         End If
  28.     End If
  29.  
  30.  

Ojo la implementación de Vb no  controla si el paso es 0 que puede producir un bucle infinito, porque se supone que el programador con ello quiere crear un bucle incondicional y dentro del mismo usará cuando proceda un exit for (exit sub, etc..) dentro del código, el programador es responsable de que en alguna ocasión se ejecute dicha salida...

Un ejemplo de bucle incondicional con salida programada
Código: Visual Basic
  1.  
  2. For w = 1 To 2 Step 0
  3.         y = y + 1
  4.         If y > 2000000 Then w = 120 ' cuando se cumpla esta condición se sale, el bucle en ningún momento a ejecutado sólo 2 ciclos.... sino 20 millones
  5.     Next
  6.  
  7.  

Pese a la fama que se da a do..loop en detrimento del bucle for...next, estas particularidades hacen que un bucle for se comporte exactamente igual que un bucle do....loop, por lo que al menos a mi respecta un bucle for es el rey de los bucles, otra cosa son las limitaciones de los programadores que no exploran las capacidades del lenguaje.
«Ma non troppo»
----> ModoVacaciones = False<----

accelerator

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: estructura de algoritmo for
« Respuesta #2 en: Martes 22 de Septiembre de 2009, 15:59 »
0
que bien explicado y detallado tu respuesta; quiero pedir disculpas si al principio malinterpreté el algoritmo, quizas, como muchos, no entienden bien la definicion exacta de un algoritmo; pero quiero decirte que tu respuesta me ayudó mucho en vb, sin embargo, en base a tus ejemplos, decidí usar una estructura creada unicamente por mi e hice lo que quizas yo llamo "algoritmo" jajaja como sigue a continuacion. Mucgas gracias por tu ayuda y tiempo, pido perdon si coloqué la duda en el post equivocado. No volverá a pasar. Gracias

Aui esta mi algoritmo final en vb:

 Dim num1, num2, total, contador As Double

        num1 = Me.txtnum1.Text
        num2 = Me.txtnum2.Text

        For contador = Me.txtnum1.Text To Me.txtnum2.Text
            MsgBox("contando... " & contador, MsgBoxStyle.Information)

            If Me.chksuma.Checked = True Then
                total = num1 + num2
                Me.txttotal.Text = total
            ElseIf Me.chkresta.Checked = True Then
                total = num1 - num2
                Me.txttotal.Text = total
            End If

        Next contador

a ver que tal gracias  :good:  :hola: