Diferencia entre revisiones de «Estructuras de Control»

De Wikitronica
Saltar a: navegación, buscar
 
(No se muestran 65 ediciones intermedias de 11 usuarios)
Línea 1: Línea 1:
 +
<div style="top:+0.3em; text-align: center;font-size:100%; border:1px solid #C7D0F8; background:#F2F5FD;width:80%">
 +
'''Este artículo está incompleto. Necesita trabajo adicional. Revisar la discusión.'''</div>
  
  
Las estructuras de control en los lenguajes de programación, son las que nos permiten alterar el flujo de ejecución del programa. Entre los tipos de estructuras de control existen las condicionales, iterativas, e incondicionales. Las condicionales como su nombre lo implica, bifurcan el código dependiendo de si se cumple o no 1 o mas condiciones. Mientras que las iterativas repiten una parte del código hasta que se cumpla una condición de salida de este ciclo.
+
Las estructuras de control en los lenguajes de programación, son las que nos permiten alterar el flujo de ejecución del programa. Entre los tipos de estructuras de control existen las condicionales, iterativas, e incondicionales. Las condicionales como su nombre lo implica, bifurcan el código dependiendo de si se cumple, o no, una o más condiciones. Mientras que las iterativas repiten una parte del código hasta que se cumpla una condición de salida de este ciclo.
  
 +
==Diagramas==
  
== Condicionales ==
+
En el presente artículo se hará uso de diagramas de flujo para explicar el funcionamiento de las estructuras de control, por lo que resulta importante entender cómo se trabaja en un diagrama.
  
=== IF ===
+
Los diagramas son herramientas que se basan en lograr la comprensión de un algoritmo de forma gráfica, así, la solución de un problema es capaz de ser entendida por cualquier persona que conozca las siguientes sencillas reglas para presentar un diagrama.
  
La estructura de  control “if” o “si” en español  requiere como mínimo una condición y un bloque de código a ejecutar si la condición es Verdadera, si es falsa el código ignora el bloque de código y continua su flujo.
 
  
 +
[[Archivo:Simbología.bmp||thumb || 500px||Simbología utilizada comúnmente en diagramas de bloques]]
  
 +
'''Nota:''' Esta técnica de diagramas es altamente recomendada a medida que la complejidad del problema va en aumento ya que garantiza una mejor comprensión del sistema al momento de la codificación.
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
== Condicionales ==
 +
 +
=== "IF" ===
 +
 +
La estructura de  control "if" o "si" en español  requiere como mínimo una condición y un bloque de código a ejecutar si la condición es "verdadera", si es "falsa", el código ignora el bloque de código y continua su flujo.
 +
 +
[[Archivo:Condicional If.png||thumb||300px||Diagrama de bloques para condición del If.]]
  
 
  .
 
  .
Línea 19: Línea 58:
 
  .
 
  .
  
La estructura "if" puede venir acompañada de la estructura “else” “si no” en español, para lo cual es necesario dos bloques de códigos.  Si la condición es Verdadera se realiza el primer bloque de código y si es Falsa se realiza el segundo bloque de código.
+
La estructura "if" puede venir acompañada de la estructura "else", "si no" en español, para lo cual es necesario dos bloques de códigos.  Si la condición es "verdadera" se realiza el primer bloque de código y si es "falsa" se realiza el segundo bloque de código.
 +
 
 +
[[Archivo:Condicional IF-ELSE.png||thumb||300px||Diagrama de bloques para condición del IF:||Diagrama de bloques para condición del If-Else.]]
  
 
  .
 
  .
Línea 30: Línea 71:
 
  .
 
  .
  
[[Archivo:if.png||right||thumb]]
+
Se pueden, además, hacer cadenas de comparación, similar al uso de las estructuras de control "switch" y "case", uniendo un "else" y un "if"
  
====ejemplo en C====
+
 
 +
.
 +
.
 +
IF(condición)
 +
    (bloque de código 1)
 +
ELSE IF(condición)
 +
    (bloque de código 2)
 +
ELSE IF(condición)
 +
    (bloque de código 3)
 +
.
 +
.
 +
ELSE
 +
    (bloque de código n)
 +
.
 +
.
 +
====Ejemplo en C====
  
 
Si “x” es menor a 1 ”y”  es incrementado 1, sino a “y” se le resta 1.  
 
Si “x” es menor a 1 ”y”  es incrementado 1, sino a “y” se le resta 1.  
  
if(x<1){y=y+1;}
 
else {y=y-1;}
 
  
====ejemplo en Asembler====
+
<syntaxhighlight lang="c">
 +
 
 +
    if(x<1){
 +
    y=y+1;
 +
    }
 +
    else {
 +
    y=y-1;
 +
    }
 +
</syntaxhighlight>
 +
 
 +
====Ejemplo en Assembler====
 +
 
 +
Si "x" es menor a 1, "y" es incrementado 1, si no, a "y" se le resta 1. Para este ejemplo vamos a decir que el Apuntador a la "PILA" está apuntando a "x" y que "y" está en la siguiente posición de la "pila".
  
Si “x” es menor a 1 ”y”  es incrementado 1, sino a “y” se le resta 1.Para este ejemplo vamos a decir que el Apuntador a la PILA esta apuntando a “x” y que “y” esta en la siguiente posición de la  Pila.
+
<syntaxhighlight lang="asm">
+
 
  inicio:  
 
  inicio:  
 
         PULA
 
         PULA
Línea 51: Línea 116:
 
         TSX
 
         TSX
 
         TXA
 
         TXA
         ADD 1
+
         ADD #1
 
         TAX
 
         TAX
 
         TXS
 
         TXS
 
         PULA
 
         PULA
         ADD 1
+
         ADD #1
 
         PSHA
 
         PSHA
 
         TSX
 
         TSX
 
         TXA
 
         TXA
         ADD -1
+
         ADD #-1
 
         TAX
 
         TAX
 
         TXS
 
         TXS
Línea 67: Línea 132:
 
         TSX
 
         TSX
 
         TXA
 
         TXA
         ADD 1
+
         ADD #1
 
         TAX
 
         TAX
 
         TXS
 
         TXS
 
         PULA
 
         PULA
         ADD -1
+
         ADD #-1
 
         PSHA
 
         PSHA
 
         TSX
 
         TSX
 
         TXA
 
         TXA
         ADD -1
+
         ADD #-1
 
         TAX
 
         TAX
 
         TXS
 
         TXS
 
  fin:
 
  fin:
 +
</syntaxhighlight>
  
 
===Switch Case===
 
===Switch Case===
  
El Switch Case es una estructura de control que consta de varios casos, se pregunta en que caso se encuentra y luego se realiza el bloque de código de ese caso. De estar en un caso que no tiene asignado un bloque de código especifico se realiza el bloque de código “default”.
+
El '''"Switch Case"''' es una estructura de control que consta de varios casos, se pregunta en qué caso se encuentra y luego se realiza el bloque de código de ese caso. De estar en un caso que no tiene asignado un bloque de código especifico se realiza el bloque de código "default".
  
 
  .
 
  .
Línea 97: Línea 163:
 
  .
 
  .
  
====ejemplo en C====
+
====Ejemplo en "C"====
  
En este ejemplo vamos a utilizar un case para calcular el cuadrado de un numero dado en un dominio [0,3] los demás números quedaran iguales.
+
En este ejemplo vamos a utilizar un "case" para calcular el cuadrado de un número dado en un dominio [0,3], los demás números quedarán iguales.
  
 +
<syntaxhighlight lang="c">
 
  switch (x){   
 
  switch (x){   
 
  case 0: x=0; break;
 
  case 0: x=0; break;
Línea 108: Línea 175:
 
  default: break;
 
  default: break;
 
  }
 
  }
 +
</syntaxhighlight>
  
====ejemplo en Asembler====
+
====Ejemplo en "Ensamblador"====
  
En este ejemplo vamos a utilizar un case para calcular el cuadrado de un numero dado en un dominio [0,3] los demás números quedaran iguales. El numero a utilizar se encuentra en el tope de la Pila.  
+
En este ejemplo vamos a utilizar un "case" para calcular el cuadrado de un número dado en un dominio [0,3], los demás números quedarán iguales. El número a utilizar se encuentra en el tope de la "pila".  
  
 +
<syntaxhighlight lang="asm">
 
  inicio:
 
  inicio:
 
         PULA
 
         PULA
         CMP 0
+
         CMP #0
 
         BEQ caso0
 
         BEQ caso0
         CMP 1
+
         CMP #1
 
         BEQ caso1
 
         BEQ caso1
         CMP 2
+
         CMP #2
 
         BEQ caso2
 
         BEQ caso2
         CMP 3
+
         CMP #3
 
         BEQ caso3
 
         BEQ caso3
 
         BRA default
 
         BRA default
 
  caso0:
 
  caso0:
         LDA 0
+
         LDA #0
 
         PSHA
 
         PSHA
 
         BRA fin
 
         BRA fin
Línea 132: Línea 201:
 
         BRA fin
 
         BRA fin
 
  caso2:  
 
  caso2:  
         LDA 4
+
         LDA #4
 
         PSHA  
 
         PSHA  
 
         BRA fin
 
         BRA fin
 
  caso3:  
 
  caso3:  
         LDA 9
+
         LDA #9
 
         PSHA
 
         PSHA
 
         BRA fin
 
         BRA fin
Línea 142: Línea 211:
 
         PSHA
 
         PSHA
 
  fin:
 
  fin:
 +
</syntaxhighlight>
  
 
==Iterativas==
 
==Iterativas==
Línea 147: Línea 217:
 
===While===
 
===While===
  
La estructura de control While “mientras” en español va a realizar un bloque de código infinitas veces hasta que la condición dentro del while sea falsa, luego el codigo continua su flujo normal.  Al usar esta estructura se recomienda que sea posible que la variable utilizada en la condición sea alterada dentro del bloque de código, de manera tal de que sea posible en alguna iteración salirse del ciclo, sino se crea un ciclo infinito y el código se estanca.  
+
La estructura de control "while", "mientras" en español, va a realizar un bloque de código infinitas veces hasta que la condición dentro del "while" sea "falsa", luego, el código continua su flujo normal.  Al usar esta estructura se recomienda que sea posible que la variable utilizada en la condición sea alterada dentro del bloque de código, de manera tal de que sea posible en alguna iteración salirse del ciclo, si no, se crea un ciclo infinito y el código se estanca.  
 +
 
 +
[[Archivo:Condicional While.png||thumb||300px||Diagrama de bloques para condición del While.]]
  
 
  .
 
  .
Línea 156: Línea 228:
 
  .
 
  .
  
Existe una variante del While que es el DO While, “haz mientras”, es exactamente igual al while con la única diferencia que la condición se pregunta al finalizar el bloque de código y no antes. Por lo tanto el bloque se ejecuta al menos una sola vez.
+
Existe una variante del "while" que es el "DO While", "haz mientras", es exactamente igual al "while" con la única diferencia de que la condición se pregunta al finalizar el bloque de código y no antes. Por lo tanto el bloque se ejecuta al menos una sola vez.
  
 
  .
 
  .
Línea 166: Línea 238:
 
  .
 
  .
  
====ejemplo en C====
+
====Ejemplo en "C"====
  
En este ejemplo se calcula la factorial de un número “z” y se guarda en “x”.
+
En este ejemplo se calcula el factorial de un número "z" y se guarda en "x".
  
 +
<syntaxhighlight lang="c">
 
  x=1;
 
  x=1;
 
  while(z>0){
 
  while(z>0){
Línea 175: Línea 248:
 
  z=z-1;  
 
  z=z-1;  
 
  }
 
  }
 +
</syntaxhighlight>
  
====ejemplo en Assembler====
+
====Ejemplo en Assembler====
  
En este ejemplo se calcula la factorial de un número “z”. En el tope de la pila se encuentra el numero “z”, y justo debajo se encuentra un 1.
+
En este ejemplo se calcula el factorial de un número "z". En el tope de la "pila" se encuentra el numero "z", y justo debajo se encuentra un 1.
  
 +
<syntaxhighlight lang="asm">
 
  inicio:
 
  inicio:
 
         PULA
 
         PULA
Línea 188: Línea 263:
 
         PSHA
 
         PSHA
 
         PULX
 
         PULX
         ADD -1
+
         ADD #-1
         CMP 0
+
         CMP #0
 
         BGT loop
 
         BGT loop
 
  fin:
 
  fin:
 
         PSHX
 
         PSHX
 +
</syntaxhighlight>
  
 
===FOR===
 
===FOR===
  
La estructura de control For  es muy similar al while con la diferencia de que tiene explícitamente un contador el cual se incrementa o decrementa , ya que la condición regularmente depende del valor de este contador.
+
La estructura de control "for" es muy similar al "while" con la diferencia de que tiene explícitamente un contador el cual se incrementa o decrementa, ya que la condición regularmente depende del valor de este contador.
 +
 
 +
[[Archivo:Condicional For.png||thumb||300px||Diagrama de bloques para condición del For]]
  
 
  .
 
  .
Línea 205: Línea 283:
 
  .
 
  .
  
En la inicialización se le coloca el valor inicial al contador. En la condición se pregunta si el contador llego a su ultimo numero. Y en la actualización el contador es aumentado o disminuido. La inicialización se ejecuta 1 sola vez, luego viene la condición, el bloque de código, la actualización, la condición y así sucesivamente, hasta que se salga del ciclo.
+
En la inicialización se le coloca el valor inicial al contador. En la condición se pregunta si el contador llego a su último número. Y en la actualización el contador es aumentado o disminuido. La inicialización se ejecuta 1 sola vez, luego viene la condición, el bloque de código, la actualización, la condición y así sucesivamente, hasta que se salga del ciclo.
  
====ejemplo en C====
+
====Ejemplo en "C"====
  
 
En este ejemplo vamos a recorrer un arreglo de 10 elementos y sumar todos sus elementos.
 
En este ejemplo vamos a recorrer un arreglo de 10 elementos y sumar todos sus elementos.
  
 +
<syntaxhighlight lang="c">
 
  x=0;
 
  x=0;
 
  for (i=0;i<10;i++){
 
  for (i=0;i<10;i++){
 
       x=A[i]+x;
 
       x=A[i]+x;
 
  }
 
  }
 +
</syntaxhighlight>
 +
 +
====Ejemplo en "Ensamblador"====
 +
 +
En este ejemplo vamos a sumar 10 elementos de un arreglo, en orden ascendente (i=9;i>=0;i--) y luego devolver el resultado a la "pila".
 +
 +
<syntaxhighlight lang="asm">
 +
inicio:
 +
BASE FDB 10
 +
LDHX #9
 +
LDA #$0
 +
for:
 +
ADD BASE, X
 +
AIX #-1
 +
CPX #0
 +
BEQ for
 +
PSHA
 +
</syntaxhighlight>
 +
 +
[[Categoría: Microcontroladores]]

Revisión actual del 14:45 29 mar 2013

Este artículo está incompleto. Necesita trabajo adicional. Revisar la discusión.


Las estructuras de control en los lenguajes de programación, son las que nos permiten alterar el flujo de ejecución del programa. Entre los tipos de estructuras de control existen las condicionales, iterativas, e incondicionales. Las condicionales como su nombre lo implica, bifurcan el código dependiendo de si se cumple, o no, una o más condiciones. Mientras que las iterativas repiten una parte del código hasta que se cumpla una condición de salida de este ciclo.

Diagramas

En el presente artículo se hará uso de diagramas de flujo para explicar el funcionamiento de las estructuras de control, por lo que resulta importante entender cómo se trabaja en un diagrama.

Los diagramas son herramientas que se basan en lograr la comprensión de un algoritmo de forma gráfica, así, la solución de un problema es capaz de ser entendida por cualquier persona que conozca las siguientes sencillas reglas para presentar un diagrama.


Error al crear miniatura: Tipo de imagen no contemplado
Simbología utilizada comúnmente en diagramas de bloques

Nota: Esta técnica de diagramas es altamente recomendada a medida que la complejidad del problema va en aumento ya que garantiza una mejor comprensión del sistema al momento de la codificación.















Condicionales

"IF"

La estructura de control "if" o "si" en español requiere como mínimo una condición y un bloque de código a ejecutar si la condición es "verdadera", si es "falsa", el código ignora el bloque de código y continua su flujo.

Diagrama de bloques para condición del If.
.
.
IF(condición)
    (bloque de código) 
.
.

La estructura "if" puede venir acompañada de la estructura "else", "si no" en español, para lo cual es necesario dos bloques de códigos. Si la condición es "verdadera" se realiza el primer bloque de código y si es "falsa" se realiza el segundo bloque de código.

Diagrama de bloques para condición del If-Else.
.
.
IF(condición)
    (bloque de código 1)
ELSE
    (bloque de código 2)
.
.

Se pueden, además, hacer cadenas de comparación, similar al uso de las estructuras de control "switch" y "case", uniendo un "else" y un "if"


.
.
IF(condición)
    (bloque de código 1)
ELSE IF(condición)
    (bloque de código 2)
ELSE IF(condición)
    (bloque de código 3)
.
.
ELSE
    (bloque de código n)
.
.

Ejemplo en C

Si “x” es menor a 1 ”y” es incrementado 1, sino a “y” se le resta 1.


    if(x<1){
    y=y+1;
    }
    else {
    y=y-1;
    }

Ejemplo en Assembler

Si "x" es menor a 1, "y" es incrementado 1, si no, a "y" se le resta 1. Para este ejemplo vamos a decir que el Apuntador a la "PILA" está apuntando a "x" y que "y" está en la siguiente posición de la "pila".

 
 inicio: 
        PULA
        CMP 1
        BGE bloque2
 bloque1:
        PSHA
        TSX
        TXA
        ADD #1
        TAX
        TXS
        PULA
        ADD #1
        PSHA
        TSX
        TXA
        ADD #-1
        TAX
        TXS
        BRA fin
 bloque2:
        PSHA
        TSX
        TXA
        ADD #1
        TAX
        TXS
        PULA
        ADD #-1
        PSHA
        TSX
        TXA
        ADD #-1
        TAX
        TXS
 fin:

Switch Case

El "Switch Case" es una estructura de control que consta de varios casos, se pregunta en qué caso se encuentra y luego se realiza el bloque de código de ese caso. De estar en un caso que no tiene asignado un bloque de código especifico se realiza el bloque de código "default".

.
.
Switch(Caso):
    caso 0: bloque 1
    caso 1: bloque 2
   .
   .
   .
    caso n: bloque n
    default: bloque n+1
.
.

Ejemplo en "C"

En este ejemplo vamos a utilizar un "case" para calcular el cuadrado de un número dado en un dominio [0,3], los demás números quedarán iguales.

 switch (x){  
 case 0: x=0; break;
 case 1: break;
 case 2: x=x*2; break;
 case 3: x=x*3; break;
 default: break;
 }

Ejemplo en "Ensamblador"

En este ejemplo vamos a utilizar un "case" para calcular el cuadrado de un número dado en un dominio [0,3], los demás números quedarán iguales. El número a utilizar se encuentra en el tope de la "pila".

 inicio:
        PULA
        CMP #0
        BEQ caso0
        CMP #1
        BEQ caso1
        CMP #2
        BEQ caso2
        CMP #3
        BEQ caso3
        BRA default
 caso0:
        LDA #0
        PSHA
        BRA fin
 caso1:
        PSHA
        BRA fin
 caso2: 
        LDA #4
        PSHA 
        BRA fin
 caso3: 
        LDA #9
        PSHA
        BRA fin
 default:
        PSHA
 fin:

Iterativas

While

La estructura de control "while", "mientras" en español, va a realizar un bloque de código infinitas veces hasta que la condición dentro del "while" sea "falsa", luego, el código continua su flujo normal. Al usar esta estructura se recomienda que sea posible que la variable utilizada en la condición sea alterada dentro del bloque de código, de manera tal de que sea posible en alguna iteración salirse del ciclo, si no, se crea un ciclo infinito y el código se estanca.

Diagrama de bloques para condición del While.
.
.
WHILE(Condición)
       bloque de código
.
.

Existe una variante del "while" que es el "DO While", "haz mientras", es exactamente igual al "while" con la única diferencia de que la condición se pregunta al finalizar el bloque de código y no antes. Por lo tanto el bloque se ejecuta al menos una sola vez.

.
.
DO 
       bloque de código 
WHILE(Condición)
.
.

Ejemplo en "C"

En este ejemplo se calcula el factorial de un número "z" y se guarda en "x".

 x=1;
 while(z>0){
 x=x*z;
 z=z-1; 
 }

Ejemplo en Assembler

En este ejemplo se calcula el factorial de un número "z". En el tope de la "pila" se encuentra el numero "z", y justo debajo se encuentra un 1.

 inicio:
        PULA
        PULX
 loop:
        PSHA
        MUL
        PSHA
        PULX
        ADD #-1
        CMP #0
        BGT loop
 fin:
        PSHX

FOR

La estructura de control "for" es muy similar al "while" con la diferencia de que tiene explícitamente un contador el cual se incrementa o decrementa, ya que la condición regularmente depende del valor de este contador.

Diagrama de bloques para condición del For
.
. 
FOR (Inicialización)(Condición)(Actualización)
    bloque de código
.
.

En la inicialización se le coloca el valor inicial al contador. En la condición se pregunta si el contador llego a su último número. Y en la actualización el contador es aumentado o disminuido. La inicialización se ejecuta 1 sola vez, luego viene la condición, el bloque de código, la actualización, la condición y así sucesivamente, hasta que se salga del ciclo.

Ejemplo en "C"

En este ejemplo vamos a recorrer un arreglo de 10 elementos y sumar todos sus elementos.

 x=0;
 for (i=0;i<10;i++){
      x=A[i]+x;
 }

Ejemplo en "Ensamblador"

En este ejemplo vamos a sumar 10 elementos de un arreglo, en orden ascendente (i=9;i>=0;i--) y luego devolver el resultado a la "pila".

inicio:
BASE 	FDB 	10
 	LDHX 	#9
 	LDA 	#$0
for:
 	ADD 	BASE, X
 	AIX 	#-1
 	CPX 	#0
 	BEQ 	for
 	PSHA