Diferencia entre revisiones de «Estructuras de Control»
(→"IF") |
|||
Línea 12: | Línea 12: | ||
− | [[Archivo:Simbología.bmp |Simbología utilizada comúnmente en diagramas de bloques]] | + | [[Archivo:Simbología.bmp||thumb|| 300px||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. | '''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. |
Revisión del 14:43 29 mar 2013
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.
Contenido
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.
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.
. . 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.
. . 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.
. . 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.
. . 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
Contributors
AK, Anairam, Artdamato, Hyma, JCaceres, Leofragachan, LitzaPinto, Minleung, Racuna