sábado, 19 de mayo de 2012

CICLOS EN C


SELECCIÓN MÚLTIPLE

Como su nombre lo indica, permite seleccionar entre varios caminos para llegar al final. En este caso se pueden elegir un camino o acción a ejecutar de entre varios posibles que se debe de evaluar, llamada selector. Sintaxis:

switch(selector)
{
case Etiqueta A:
Acción A;
break;
case Etiqueta B:
Acción B;
break;
case Etiqueta n:
Acción n;
break;
default:
Excepción;
break;
}
En donde:
Selector: Variables, expresiones simples de tipo ordinal, (enteros y caracteres –int y char-)
Etiqueta: Tiene que ser del mismo tipo de datos de selecto. Estas deber ser constantes únicas y diferentes de otras.
Excepción: Es opcional.


CICLOS

Es muy común encontrar en los programas operaciones que se deben ejecutar un número repetido de veces en períodos más o menos espaciados. Si bien las instrucciones son las mismas, los datos sobre los que operan varían. A nuestro alrededor, encontramos problemas que presentan esas características, por ejemplo: el cálculo de la nota final de los estudiantes de Programación I, se realizará tantas veces como alumnos hayan inscritos en dicha asignatura, el cálculo del salario de los empleados de una empresa, etc. En estos casos la solución que se diseñe para un solo grupo de datos se debe repetir tantas veces como sea necesario.
Los cálculos simples o la manipulación de pequeños conjuntos de datos se pueden realizar fácilmente a mano, pero las tareas grandes o repetitivas son realizadas con mayor eficacia por una computadora, ya que estas están especialmente preparadas para ello.
Para repetir varias veces un proceso determinado haremos uso de los ciclos repetitivos, a los cuales se les conoce con el nombre de estructura repetitiva, estructura iterativa, lazo o bucle.

En C, podemos encontrar tres tipos de ciclos:
·         Entrada Asegurada (while)
·         Ciclo Controlado Por Contador (for)
·         Hacer Mientras (do.. while)
Este último, no está lógicamente estructurado, por tanto no haremos mucho hincapié en él.


FUNCIONAMIENTO DE UN CICLO

Un ciclo, funciona de la siguiente manera: Evalúa una condición de resultar cierta, realiza una acción o bloque de acciones, luego vuelve a evaluar la condición y si nuevamente resulta cierta, realiza la (s) acción (es). Cuando la condición de cómo resultado falso, se sale del ciclo y continúa con la ejecución normal del programa.

ACUMULADOR:
Es una variable, que, como su nombre lo indica se encarga de acumular valores. Esto se vuelve muy útil, por ejemplo, cuando queremos encontrar la suma de los números del 0 al 9, en el acumulador, vamos guardando los valores de dichas cifras. Puede ser tanto real como entera. Su valor inicial, en la mayoría de los casos es cero.

CONTADOR:
Es una variable de tipo entero, que nos ayuda, en el programa a contabilizar el número de ejecuciones de una misma acción, de un grupo de alumnos etc. Un acumulador tiene tres valores distintos:
·         Valor Inicial: es el valor con el cual iniciamos nuestro contador. Generalmente es cero. Esta asignación puede hacerse cuando se declara la variable.
·         Valor Final: después de la ejecución del ciclo, el valor del contador, será distinto a su valor inicial, este puede ser mayo o menor que el mismo, todo depende si fue una cuenta creciente o decreciente.
·         Valor de Cambio: Es el valor Constante, en el cual se irá incrementando nuestro contador, este puede ser positivo o negativo; es decir, si la cuanta se realiza de manera ascendente o descendente.

NOTA: el lector no debe confundirse entre las variables tipo acumulador y tipo contador, estas se diferencian unas de otras en que: los contadores, su valor de cambio es una constante, ya que aumenta y disminuyen en el mismo valor, mientras que los acumuladores su valor de cambio no es constante. Un acumulador necesariamente lo inicializamos con cero (o al menos en la mayoría de los casos). Un contador puede iniciar con cualquier valor.

BANDERA:
Las variables tipo bandera son aquellas que sólo admiten dos valores: cierto o falso, true o false, hombre o mujer... etc
Ciclo de Entrada Asegurada
La sintaxis es la siguiente:
while(condición)
Acción;

Funciona de la siguiente manera: primero evalúa la condición, si da como resultado cierta realiza la acción, luego vuelve a evaluar la condición, si su resultado es falso, se sale del ciclo y continúa con la ejecución del programa.
Hay que tener mucho cuidado, cuando trabajamos con ciclos, ya que podemos caer en un ciclo infinito, es decir que nunca se sale de él. Lo cual no es un error de sintaxis sino de lógica. Por lo cual en las acciones debemos siempre colocar algo que haga que se modifique el resultado de la condición, lo cual puede ser una bandera, un contador o un acumulador.


CICLO CONTROLADO POR CONTADOR

En algunas ocasiones, sabemos a ciencia cierta el número de veces que se tiene que repetir una misma acción o bloque de acciones. Y para ello es que nos sirve, esta estructura. Su sintaxis es la siguiente:

for( valor inicial; condición; incremento)
accion;
Donde:
Valor inicial: es el valor con el cual inicializamos nuestra variable de control.
Condición: si la cumple, ejecuta la acción o acciones e incrementa o decrementa la variable de control, sino la cumple la condición, se sale del ciclo.
Incremento; que puede ser positivo o negativo (decremento).


CICLO Do... while

Es te ciclo funciona de la siguiente manera, realiza la acción o conjunto de acciones, luego evalúa una condición de resultar cierta vuelve a realizar la/s accion/es. Cuando sea falsa, se sale del ciclo. Esta estructura, no está lógicamente, estructurada, por ello, no hablaremos mucho, sin embargo realizaremos un par de ejemplos, de este ciclo.
Formato :

do {
sentencia;
.
while(<expL>);
La diferencia fundamental, entre el ciclo while y do...while, es que en este ultimo, las sentencias se realizarán por lo menos una vez, en cambio, con while, solo se cumplirán mientras se cumpla la condición, lo cual puede ser nunca.


ARREGLOS EN C


ARREGLOS

Un Arreglo es una estructura de datos que almacena bajo el mismo nombre (variable) a una colección de datos del mismo tipo.

Los arreglos se caracterizan por:

1.      Almacenan los elementos en posiciones contiguas de memoria
2.      Tienen un mismo nombre de variable que representa a todos los elementos. Para hacer referencia a esos elementos es necesario utilizar un índice que especifica el lugar que ocupa cada elemento dentro del archivo.

VECTORES

Es un arreglo de “N” elementos organizados en una dimensión donde “N” recibe el nombre de longitud o tamaño del vector. Para hacer referencia a un elemento del vector se usa el nombre del mismo, seguido del índice (entre corchetes), el cual indica una posición en particular del vector. Por ejemplo:

                Vec[x]

Donde:
Vec…………Nombre del arreglo
x……………       Numero de datos que constituyen el arreglo

MATRIZ

Es un arreglo de M * N elementos organizados en dos dimensiones donde “M” es el numero de filas o reglones y “N” el numero de columnas.
Donde R indica el renglón y C indica la columna, donde se encuentra almacenado el dato.Para representar una matriz se necesita un nombre de matriz se necesita un nombre de matriz acompañado de dos índices.

                Mat [R,C]
Donde R indica el renglón y C indica la columna, donde se encuentra almacenado el dato.

Llenado de una matriz.
·                          ·           Por renglones
·           Hacer para R= 1 a 5
·                Hacer para C= 1 a 5
Leer Mat [R,C]
Fin-para
Fin-para

·           ·           Por columnas
·           Hacer para C= 1 a 5
·                Hacer para R= 1 a 5
Leer Mat [R,C]
Fin-para
Fin-para

Nota: Para hacer el llenado de una matriz se deben de usar dos variables para los índices y se utilizan 2 ciclos uno para los renglones y otro para las columnas; a estos ciclos se les llama ciclos anidados (un ciclo dentro de otro ciclo).

lunes, 7 de mayo de 2012

INTRODUCCIÓN A C + +


C++ es considerado un C más grande y potente. La sintaxis de C++ es una extensión de C, al que se han añadido numerosas propiedades, fundamentalmente orientada a objetos. ANSI C ya adoptó numerosas características de C++, por lo que la migración de C a C++ no suele ser difícil.

En este apéndice se muestran las reglas de sintaxis del estándar clásico de C++ recogidas en al Annotated Manual (ARM) de Stroustrup y Ellis, así como las últimas propuestas incorporadas al nuevo borrador de C++ ANSI, que se incluyen en las versiones 3 (actual) y 4 (futura de AT&T C++).

ELEMENTOS DEL LENGUAJE
Un programa en C++ es una secuencia de caracteres que se agrupan en componentes léxicos (tokens) que comprenden el vocabulario básico del lenguaje. Estos componentes de léxico son: palabras reservadas, identificadores, constantes, constantes de cadena, operadores y signos de puntuación.

Caracteres
Los caracteres que se pueden utilizar para construir elementos del lenguaje (componentes léxicos o tokens) son:

abcdefghi jklmnopqrstuvwxyz
ABCDEFCHIJKLMNOPQRSTUVWXYZ
0123456789
caracteres espacio (blancos y tabulaciones)

Identificadores
Los identificadores (nombres de variables, constantes,...) deben comenzar con una letra del alfabeto (mayúscula o minúscula) o con un carácter subrayado, y pueden tener uno o más caracteres. Los caracteres segundo y posteriores pueden ser: letras, dígitos o un subrayado, no permitiéndose caracteres no alfanuméricos ni espacios.

tescprueba // legal
Xl23 // legal
multi_palabra // legal
var25 // legal
l5var // no legal
C++ es sensible a las mayúsculas.
Paga_mes es un identificador distinto a paga_mes

Una buena práctica de programación aconseja utilizar identificadores significativos que ayudan a documentar un programa.
nombre apellidos salario precio_neto

Palabras reservadas
Las palabras reservadas o claves no se deben utilizar como identificadores, debido a su significado estricto en C++;  tampoco se deben redefinir. La Tabla B. 1 enumera las palabras reservadas de C++ según el ARM(Siglas del libro de BJARNE STROUSTRUP en el que se definen las reglas de sintaxis del lenguaje C++ estándar).

Palabras reservadas de C++



*Estas palabras no existen en ANSI C.

Los diferentes compiladores comerciales de C++ pueden incluir, además, nuevas palabras reservadas. Estos son los casos de Borland, Microsoft y Sysmantec.

Palabras reservadas de Turbo/Borland C++



Palabras reservadas de Microsoft Visual C/C++ 1.5/2.0




El comité ANSI ha añadido nuevas palabras reservadas.

Nuevas palabras reservadas de ANSI C++



TIPOS DE DATOS
Los tipos de datos simples en C++ se dividen en dos grandes grupos: integrales (datos enteros) y de coma flotante (datos reales). La Tabla muestra los diferentes tipos de datos en C++,

Tipos de datos simples en C++



Verificación de tipos
La verificación o comprobación de tipos en C++ es más rígida (estricta) que en C. Algunas consideraciones a tener en cuenta son:

Usar funciones declaradas. Esta acción es ilegal en C++, y está permitida en C:

int main()
{
//...
printf(x) //C int printf(x)
//C++ es ilegal, ya que printf no esta declarada
return 0;
}

• Fallo al devolver un valor de una función. Una función en C++ declarada con un tipo determinado de retomo, ha de devolver un valor de ese tipo. En C, está permitido no seguir la regla.

• Asignación de punteros void. La asignación de un tipo void* a un puntero de otro tipo se debe hacer con una conversación explícita en C++. En C, se realiza implícitamente.

• Inicialización de constantes de cadena. En C++ se debe proporcionar un espacio para el carácter de terminación nulo cuando se inicializan constantes de cadena. En C, se permite la ausencia de ese carácter

int main()
{
//......
char car[7] = “Cazorla“; // legal en C
//error en C++
//......
return 0;
}

Una solución al problema que funciona tanto en C como en C++ es: char car [] ="Cazorla";

CONSTANTES
C++ contiene constantes para cada tipo de dato simple (integer, char,...). Las constantes pueden tener dos sufijos, u, l y f. Que indican tipos unsigned, long y float, respectivamente. Así mismo, se pueden añadir los prefijos o y ox, que representan constantes octales y hexadecimales.

456 0456 0x476 // constante enteras : decima1, octal , hexadecimal
1231 123ul // constante enteras :long, unsigned, long
´B´ ´b´ ´4´ // constante de tipo char
3.1415f // constante reales de diferente posición
“cadena de caracteres” // Constante de cadena

Las cadenas de caracteres se encierran entre comillas, y las constantes de un solo carácter se encierran entre comillas simples.

” ” // cadena vacía ‘\0’

Declaración de constantes
En C++, los identificadores de variables/constantes se pueden declarar constantes, significando que su valor no se puede modificar. Esta declaración se realiza con la palabra reservada const.

contar double PI= 3.11416;
const char BLANCO = ´ ´;
const double PI_EG = -I;
const double DOBLE_I = 2 * PI ;

El modificador de tipos const se utiliza en C++, también para proporcionar protección de sólo lectura para variables y parámetros de funciones. Las funciones miembro de una clase que no modifican los miembros dato a que acceden pueden ser declarados const.  Este modificador evita también que parámetros por referencia sean modificados:

void copy (const char * fuente, char * destino):


DECLARACIÓN DE VARIABLES
En ANSI C, todas las declaraciones de variables y funciones se deben hacer al principio del programa o función. Si se necesitan declaraciones adicionales, el programador debe volver al bloque de declaraciones al objeto de hacer los ajustes o inserciones necesarios. Todas las declaraciones deben hacerse antes de que se ejecute cualquier sentencia. Así, la declaración típica en C++, NombreTipo Nombrevariablel, Nombrevariable2; proporciona declaraciones tales como:

int saldo, meses;
double clipper, salario;
Al igual que en C, se pueden asignar valores a las variables en C++:
int mes =4, dia, anio=1995;
doble salario = 45.675;

En C++, las declaraciones de variables se pueden situar en cualquier parte de un programa. Esta característica hace que el
programador declare sus variables en la proximidad del lugar donde se utilizan las sentencias de su programa. El siguiente programa es legal en C++ pero no es válido en C:

#include <stdio.h>
int main ()
{
int i ;
for ( i= 0; i<100; ++i)
printf ( “%d\n” , i);
double j;
for ( j= 1.7547; j<25.4675; j+= .001)
printf ( “%lf\n” , j);
}

El programa anterior se podría reescribir, haciendo la declaración y la definición dentro del mismo bucle:

int main ()
{
for ( int i= 0; i<100; ++i)
cout<< i << endl;
for ( int j= 1.7547; j<25.4675; j+= .001)
cout << j <<;
}

OPERADORES
C++ es un lenguaje muy rico en operadores. Se clasifican en los siguientes grupos:
• Aritméticos.
• Relacionales y lógicos.
• Asignación.
• Acceso a datos y tamaño.
• Manipulación de bits.
• Varios.

Como consecuencia de la gran cantidad de operadores, se producen también una gran cantidad de expresiones diferentes.

Operadores aritméticos
C++ proporciona diferentes operadores que relacionan operaciones aritméticas. 



Operadores aritméticos en C++


Operadores de asignación
El operador de asignación (=) hace que el valor situado a la derecha del operador se adjudique variable situada a su izquierda. La asignación suele ocurrir como parte de una expresión de asignación y las conversiones se producen implícitamente.

z = b + 5; //asigne (b + 5) a variable z
C++ permite asignaciones múltiples en una sola sentencia. Así:
a = b + (c=l0); equivale a: c = 10; a = b + c;
otros ejemplos de expresiones válidas y no válidas son:
// expresiones legales //expresiones no legales
a = 5 * (b+a); a+3=b;
doble x = y; PI = 3; // siendo PI una constante
a = b = c; x++ = y;

C++ proporciona operadores de asignación que combinan operadores de asignación y otros diferentes, produciendo operadores tales como +=, /=, -=, *= y %= . C++ soporta otros de operadores de asignación para manipulación de bits.

Operadores aritméticos de asignación




BUCLES: SENTENCIAS REPETITIVAS
Los bucles sirven para realizar tareas repetitivas. En C++, existen tres diferentes tipos de sentencias repetitivas:
• while
• do
• for
Sentencia while
La sentencia while es un bucle condicional que se repite mientras la condición es verdadera. El bucle while nunca puede iterar si la condición comprobada es inicialmente falsa. La sintaxis de la sentencia while es:
while (expresión)
sentencia;
o bien:
while (expresión) {
< secuencia de sentencias >
}Página 16 de 28
Ejemplo:
int n, suma = 0;
int i = 1;
while ( i <= 100 )
{
cout << “Entrar”;
cin >> n;
suma += n;
i++;
}
cout << “La media es” << double(suma) / 100.0;
Sentencia do
La sentencia do actúa como la sentencia while. La única diferencia real es que la evaluación y la prueba de salida del bucle se hace después que el cuerpo del bucle se ha ejecutado, en lugar de antes. El formato es:
do {
sentencias
}while (expresión);
sentencia siguiente
Se ejecuta sentencia y a continuación se evalúa expresión y, si es verdadero (distinto de cero), el control se pasa de nuevo al principio de la sentencia do y el proceso se repite, hasta que expresión es falso(cero) y el control pasa a la sentencia siguiente.
La sentencia for
Una sentencia for ejecuta la iteración de un bucle un número determinado de veces. for tiene tres componentes: expresion1, inicializa las variables de control del bucle; expresion2,  es la condición que determina si el bucle realiza otra iteración; la última parte del bucle for es la cláusula que incrementa o decrementa las variables de control del bucle. El formato general de for es:
for (expresionl; expresion2; expresion3)
sentencia; <secuencia de sentencias>;
expresionl se utiliza para inicializar la variable de control de bucle; a continuación expresion2 se evalúa, si es verdadera (distinta de
cero), se ejecuta la sentencia y se evalúa expresion3 y el control pasa de nuevo al principio del bucle. La iteración continúa hasta que
expresion2 es falsa (cero), en cuyo momento el control pasa a la sentencia siguiente al bucle.
 Sentencias break y continue
El flujo de control ordinario de un bucle se puede romper o interrumpir mediante las sentencias break y continue.
La sentencia break produce una salida inmediata del bucle flor en que se encuentra situada:
for (i = 0; i < 100; i++)
{
cin » X;
if (x < 0.0)
{
cout <<”salir del bucle” <<endl;
break;
}
cout << sqrt(x)<< endl;
}
La sentencia break también se utiliza para salir de la sentencia switch.
La sentencia continue termina la iteración que se está realizando y comenzará de nuevo la siguiente iteración:
for (i = 0; i < 100; ++i)
{
cin >> x;
if (x < 0.0)
continue;
   }
Advertencia:
• Una sentencia break puede ocurrir únicamente en el cuerpo de una sentencia for, while, do o switch.
• Una sentencia continue sólo puede ocurrir dentro del cuerpo de una sentencia for, while o do.
Sentencia nula
La sentencia nula se representa por un punto y coma, y no hace ninguna acción.
char cad[80]=”Cazorla”;
int i;
for (i = 0; cad[i] != ‘\0’; i++);
Sentencia return
La sentencia return detiene la ejecución de la función actual y devuelve el control a la función llamada. Su sintaxis es:
return expresión;
donde el valor de expresión se devuelve como el valor de la función.

martes, 13 de marzo de 2012

ALGORITMOS Y DIAGRAMAS CON REPETICIONES


1. TIPOS DE ITERACIÓN
Existen tres tipos principales de sentencias de repetición:
• Bucle MIENTRAS…
• Bucle REPETIR… MIENTRAS
• Bucle PARA
A continuación se describe cada una de ellas:

1.1         BUCLE MIENTRAS

El bucle mientras permite ejecutar un bloque de instrucciones mientras que una expresión lógica dada se cumpla, es decir, mientras su evaluación dé como resultado verdadero.
La expresión lógica se denomina condición y siempre se evalúa antes de ejecutar el bloque de instrucciones. Si la condición NO se cumple, el bloque NO se ejecuta. Si la condición SÍ se cumple, el bloque SÍ se ejecuta, después de lo cual la instrucción vuelve a empezar, es decir, la condición se vuelve a evaluar.
En el caso en que la condición se evalúe la primera vez como falsa, el bloque de instrucciones no será ejecutado, lo cual quiere decir que el número de repeticiones o iteraciones de este bloque será cero. Si la condición siempre evalúa como verdadera, la instrucción se ejecutará indefinidamente, es decir, un número infinito de veces.

La forma general del bucle mientras es la siguiente:
DIAGRAMA DE FLUJO PSEUDOCODIGO
mientras <condición> hacer
<bloque instrucciones>
fin_mientras

Donde, <condición> es la expresión lógica que se evalúa para determinar la ejecución o no del bloque de instrucciones, y <bloque instrucciones> es el conjunto de instrucciones que se ejecuta si la condición evalúa a Verdadero.

Ejemplos.
Ejemplo 1. Dado un número natural n se desea calcular la suma de los números naturales desde 1 hasta n.

ANALISIS DEL PROBLEMA:
Variables Conocidas: Un número natural.
Variables Desconocidas: Un número natural.
Condiciones El número buscado es la suma de los naturales empezando en uno hasta el número dado.

ESPECIFICACIÓN:
Entradas n Enteros, n ≥ 0 (n es el número dado).
Salidas
suma Enteros, suma ≥ 0
suma es la sumatoria de los primeros n números naturales.

DISEÑO:
Primera Aproximación:
Inicio
Paso 1. Leer el número.
Paso 2. Recorrer los números desde cero hasta el número dado e irlos sumando.
Paso 3. Imprimir la suma
Fin

Refinamiento:
1.    n: entero /* se define la variable para el número */
2.    suma: entero /* se define la variable para la suma */
3.    i: entero /* se define la variable para recorrer los números entre 0 y n */
4.    escribir ( “Escriba el numero: ” )
5.    leer (n) /* lee el primer número */
6.    suma = 0 /* inicia la suma en cero */
7.    i :=1 /* empieza la variable que recorre los números en 1 */
8.    mientras (i <= n) hacer
9.    suma = suma + i /* en cada iteración suma el número i */
10. i = i + 1 /* para tomar el siguiente número en la próxima iteración */
11. fin_mientras
12. escribir (“La suma es: ”, suma)

Diagrama de Flujo:
1.2         BUCLE REPETIR… MIENTRAS

El bucle REPETIR… MIENTRAS es similar al bucle mientras, la diferencia radica en el momento de evaluación de la condición.
En el bucle REPETIR… MIENTRAS la condición se evalúa después de ejecutar el bloque de instrucciones, por lo tanto, el bloque se ejecuta por lo menos una vez. Este bloque se ejecuta nuevamente si la condición evalúa como verdadero, y no se ejecuta más si se evalúa como falso.
La forma general del bucle REPETIR… MIENTRAS es la siguiente:

repetir
<bloque instrucciones>
mientras <condición>
Donde, <bloque instrucciones> es el conjunto de instrucciones que se ejecuta y
<condición> es la expresión lógica que determina si el bloque se ejecuta. Si la <condición> se
evalúa como verdadero el bloque es ejecutado de nuevo y si es evaluada como falso no es
ejecutado. Después de ejecutar el bloque de acciones se evalúa la <condición>.

Ejemplos
Ejemplo 1. El problema de calcular la suma de los números naturales desde 1 hasta n (enunciado anteriormente), se puede solucionar usando el bucle REPETIR… MIENTRAS.
A continuación se describe el algoritmo solución:

1.    n: entero /* se define la variable para el número */
2.    suma: entero /* se define la variable para la suma */
3.    i: entero /* se define la variable para recorrer los números entre 0 y n */
4.    escribir ( “Introduzca el número: ” )
5.    leer (n) /* lee el primer número */
6.    suma :=0 /* inicia la suma en cero */
7.    i =1 /* empieza la variable que recorre los números en 1 */
8.    haga
9.    suma := suma + i /* en cada iteración suma el número i */
10. i = i + 1 /* incrementa i en 1 para tomar el siguiente número en la próxima iteración */
11. mientras (i <= n)
12. escribir ( “La suma es: ”, suma )

Diagrama de Flujo:


1.3 BUCLE PARA
El bucle para ejecuta un bloque de instrucciones un número determinado de veces.
Este número de veces está determinado por una variable controladora que toma valores desde un valor inicial hasta un valor final.
En cada bucle después de ejecutar el bloque de instrucciones, la variable controladora es incrementada en un valor llamado incremento automáticamente y en el momento en que la variable sobrepasa el límite superior el bucle termina.
De la definición de bucle para se puede inferir que el bloque de instrucciones no se ejecuta si el límite inferior es mayor al límite superior.

La forma general del bucle para es la siguiente:
para (<variable> = <Voo> hasta <Vf> con incremento = inc =1)
hacer
<bloque instrucciones>
fin_para
Donde:
<variable> es la variable controladora del bucle, <Vo> es el valor inicial que toma la variable controladora.
<Vf> es el último valor que toma la variable controladora; cuando el valor de la variable contadora supere este valor, el bucle termina.
<bloque instrucciones> es el conjunto de instrucciones que se ejecuta en cada iteración, mientras la variable controldora no sobrepase el <lim_sup>.
Casos:
• Cuando <Vo> es menor que <Vf> ocurre lo siguiente (si <inc> = 1):
1. La variable contadora se inicializa con <Vo>
2. Se ejecuta <bloque de instrucciones>
3. Se incrementa automáticamente en 1 la variable contadora del bucle.
4. Si el valor de contador del bucle es menor o igual que <Vf> se vuelve de nuevo al paso 2. De otro modo se abandona el bucle.
• Es importante observar que el valor final de la variable contadora supera a <Vf> para que pueda finalizar el bucle
• Cuando <Vo> es mayor que <Vf> el bucle termina sin ejecutarse nunca el <bloque de instrucciones>., excepto si el incremento <inc> es negativo. Tenga en cuenta que no se genera error al correr el programa

Ejemplo:
para (x=5 hasta 4 con inc = 1)
hacer
Esta línea de código nunca se ejecuta.
• Pero:
para (x=5 hasta 4 con inc = -1)
hacer
para variable = Vo,
hasta Vf con inc = 1
ENTRADA
SALIDA
¿?????
Se ejecuta el bucle perfectamente.
• Tanto <Vo> como <Vf> pueden ser expresiones como en el siguiente ejemplo:
para(j=x+1 hasta 2*y)
hacer
En este caso se calculan primero los valores de las expresiones (x+1) y (2*y) empleando para esto los valores actuales de x y y para utilizarlos como <Vo> y <Vf> respectivamente.

Ejemplos.
Ejemplo 1. El problema de calcular la suma de los números naturales desde 1 hasta n (enunciado anteriormente), se puede solucionar usando el bucle para, a continuación se muestra el algoritmo solución:

1.    n: entero /* se define la variable para un número entero*/
2.    suma: entero /* se define la variable para la suma*/
3.    i: entero /* se define la variable la variable contadora */
4.    escribir(“ingrese el número:”)
5.    leer n /* lee el primer número */
6.    suma = 0
7.    para(i =1 hasta n)hacer
8.    suma =suma + i
9.    fin_para
10. escribir (“La suma es:”, suma)
Nótese que se requieren menos instrucciones que en las anteriores estructuras dado que el incremento de i se hace automáticamente en la instrucción 7 al repetir el bucle.
Diagrama de flujo:



Ejemplo 2. Calcular las primeras tres filas de la tabla de multiplicar de un número dado.

ANALISIS DEL PROBLEMA:
Variables Conocidas Un número.
Variables Desconocidas Tres números.
Condiciones
Los números buscados son el resultado de multiplicar un número conocido, por los números entre uno y tres.

ESPECIFICACIÓN:
Entradas n Enteros ( n es el número dado).
Salidas a1, a2, a3 Enteros, (ai es el i-ésimo múltiplo del número dado).
Condiciones ai = n * i para 1 <=i <=3

DISEÑO:
Primera Aproximación:
Inicio
Paso 1. Leer el número a calcularle la tabla de multiplicar
Paso 2. Para los números entre uno y tres calcular el múltiplo del número
Fin

Refinamiento:

1.    n: entero
2.    a: entero
3.    i: entero
4.    escribir ( “Introduzca el número para calcular su tabla de multiplicar:” )
5.    leer (n)
6.    para i =1 hasta 3 hacer
7.    a =n * i
8.    escribir (n, “*”, i, “=”, a, cambio_linea)
9.    fin_para
10. escribir (“Termino...” )

Diagrama de flujo:


3. TIPO DE VARIABLES ÚTILES PARA LA ITERACIÓN

Cuando se diseñan algoritmos que incluyen estructuras de control repetitivas, existen ciertas variables que cumplen una función específica en cada iteración del bucle, las más comunes son:
• Las variables contadoras
• Las variables acumuladoras
• Las variables bandera (flag, switch)

VARIABLES CONTADORAS
Como su nombre lo indica estas variables se usan fundamentalmente para contar, por lo tanto deben ser de tipo entero. Un ejemplo de este tipo de variables es la variable de control en un bucle para.
Una variable contadora se incrementa (o decrementa) en un valor constante en cada iteración del bucle. Es así como en los algoritmos presentados anteriormente para resolver el problema de calcular la suma de los números naturales desde 1 hasta n, la variable i es una variable contadora.

Ejemplo:
Desarrollar un algoritmo que imprima los números impares en orden descendente que hay entre 1 y 100.

Algoritmo Solución
i: entero
i =99
mientras (i >= 1 hacer
escribir ( i, ‘,’ )
i = i – 2
fin_mientras
En este caso i es una variable contadora, ya que en cada repetición del bucle la variable es decrementada en una cantidad fija, 2 en este caso.

VARIABLES ACUMULADORAS
La función de una variable acumuladora es almacenar valores numéricos que generalmente se suman (o multiplican) en cada iteración, por lo tanto la variable debe ser de tipo entero o real. Por ejemplo, en los diferentes algoritmos presentados para solucionar el problema de calcular la suma de los números naturales desde 1 hasta n, la variable suma es una variable acumuladora.

Ejemplo.
Calcular las suma de los cuadrados de los números entre 1 y 100.

Algoritmo Solución
i: entero
suma: entero
i =1
suma = 0
mientras (i <= 100)hacer
suma:= suma + i * i
i = i + 1
fin_mientras
escribir (“La suma de los cuadrados hasta 100 es:”, suma)

En este caso suma es una variable acumuladora mientras que la variable i es una
variable contadora.

VARIABLES BANDERA (FLAG, SWITCH)
Una variable bandera es utilizada dentro de la condición de un bucle, para determinar cuándo un bucle se sigue iterando o cuando no. De esta manera una variable bandera debe ser de tipo booleano o entero.

Ejemplo.
Realizar un programa que lea una serie de números reales y los sume. El programa debe preguntar al usuario cuando desea ingresar un siguiente dato y si el usuario responde que no desea ingresar más datos el programa debe confirmar la respuesta. Si el usuario desea continuar ingresando datos se debe seguir solicitando datos y si el usuario confirma su deseo de salir, el programa debe mostrar la suma de los datos leídos y terminar.

ESPECIFICACIÓN:

Donde, datos es la colección de n números reales que el usuario ingresa hasta que decide no continuar ingresando datos y suma es la sumatoria de dichos números y pertenece a los reales.

Algoritmo Solución
bandera: entero
dato: real
c: caracter
bandera = 1
suma = 0.0
mientras (bandera = 1) hacer
escribir (“Introduzca un dato:”)
leer (dato)
suma = suma + dato
escribir (“Desea continuar ingresando datos (S/N):”)
leer (c)
si (c = ‘N’ OR c = ‘n’) entonces
bandera = 0
fin_si
fin_mientras
escribir( “La suma es:”, suma)

4. CORRESPONDENCIA ENTRE BUCLES

En la teoría matemática de programación sólo es necesario un tipo de bucle, en esta sección se explican las correspondencias que hacen posible esta afirmación, tomando como bucle referencia el bucle mientras.
Correspondencia entre el bucle mientras y el bucle repetir –mientras La diferencia fundamental entre los bucles mientras y haga-mientras, es que en el segundo se ejecuta por lo menos una vez el <bloque de instrucciones>, mientras que en el primero hay la posibilidad de que no se ejecute alguna vez.

El ejecutar el bloque de acciones una vez antes del bucle mientras permite modelar un bucle haga-mientras, es decir:

haga
<bloque>
mientras (<condición>)
mientras <condición> hacer
<bloque>
fin_mientras

Correspondencia entre el bucle para y el bucle mientras:
Formalmente, un bucle para es una forma abreviada de un bucle mientras, precedido por una asignación y que en cada iteración incrementa una variable. Por lo tanto, el siguiente bucle para:

para <variable> = <Vo> hasta <Vf> hacer
<bloque>
fin _para

Es la abreviación del siguiente bloque de acciones:

<variable> = <Vo>
mientras <variable> <= <Vf> hacer
<bloque>
<variable> = <variable> + 1
fin _mientras

Cuando usar estructuras de controles definidos o indefinidos:
El bucle para se conoce comúnmente como estructura de control definida, ya que los valores iniciales y finales especificados para la variable contadora que controla el bucle determina de manera exacta el número de veces que se ejecuta el bucle.
Para utilizar un bucle para al resolver un algoritmo se debe determinar el número exacto de veces que se va a ejecutar el bucle. En el ejemplo de calcular la suma de los números de 1 hasta n. Se sabe que el bucle se repetirá n veces:
n = ((Vf - Vo)\inc) + 1

Resumen
Las estructuras de control cíclico permiten controlar la ejecución repetida de una secuencia de instrucciones.
El bucle mientras permite ejecutar un bloque de instrucciones mientras que la evaluación de una expresión lógica de cómo resultado verdadero.
El bucle repetir-mientras permite ejecutar un bloque de instrucciones por lo menos
una vez, después evalúa la condición para ejecutar de nuevo el bucle si la condición es verdadera.
El bucle para ejecuta un bloque de instrucciones un número determinado de veces.