Programación Específica > Diseño de Algoritmos

 estructura de algoritmo for

(1/1)

accelerator:
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:
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 ---For W= X to Y step Z  ' códigonext 
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 ---x= 110for W as byte = x to -102 step   -(x/10)  ' código next 
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 --- Desde x '  w=x Repetir  hasta Y ' w <= y       ' codigo   en pasos de z ' w= w + zfin repetir      
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 --- w=xRepetir:if w <= y then     ' codigo          w=w + z     goto Repetir         ' salto incondicional a la etiqueta Repetirend if     
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 --- w=xif w <= y thenRepetir:      ' codigo      w=w + z     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.end if     
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 --- ' 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...w = x    If x < y Then       ' controla si inicio es mayor que final        If (w + z) => x Then ' controla el paso            If w <= y Then  ' controla si puede ejecutarse el bucleRepetirA:                 ' codigo                 w = w + z                 If (w <= y) Then GoTo RepetirA     ' controla si puede seguirse repitiendo el bucle            End If        End If    Else        If (w + z) <= x Then  ' controla el paso            If w >= y ThenRepetirB:                 ' codigo                 w = w + z                 If (w >= y)  Then GoTo RepetirB            End If        End If    End If  
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 --- ' al compilar se pone este código o el siguientew = x    If x < y Then        If (w + z) > x Then            If w <= y ThenRepetir:                 ' codigo                 w = w + z                 If w <= y Then GoTo Repetir            end if        End If    End if   '  al compilar se pone este código o el anteriorw = x    If x > y Then        If (w + z) < x Then            If w >= y ThenRepetir:                 ' codigo                 w = w + z                 If w >= y Then GoTo Repetir            End If        End If    End If  
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 --- For w = 1 To 2 Step 0        y = y + 1        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    Next  
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.

accelerator:
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:

Navegación

[0] Índice de Mensajes

Ir a la versión completa