lunes, 16 de septiembre de 2013

ESTRUCTURAS REPETITIVAS

Pasar a sus apuntes de programación lo que no tengan de las copias que anteriormente se les dio es una retroalimentación pero mas explicado  es para estudiarlo y vienen ejercicios que pueden corregir y modificar si es necesario siempre y cuando resuelva el problema.
Observación: Sus dudas  me lo hacen saber en comentarios del blogger.

CONCEPTOS BASICOS
Bucle
El bucle es un conjunto de instrucciones que se repiten.
 Interacción
Es cada una de las veces que se ejecuta el bucle.
 Contador
Un contador es una variable cuyo valor incrementa o decrementa en una cantidad fija se utiliza en los siguientes casos.
      Para contabilizar el número de veces que se desea una operación o grupo de operaciones.
      Un contador toma un valor inicial antes de empezar sus funciones y se debe codificar en el siguiente formato:
  cont=cont +1
 cont=cont -1

Donde: cont es el nombre de tu variable contador.
Acumulador
Un acumulador se encarga de almacenar en una variable el resultado de una o varias operaciones matemáticas que se encuentran dentro de una sentencia repetitiva, para obtener un total acumulado.
Un acumulador se debe inicializar a cero (0) en caso de suma y en uno (1) en caso de producto y se codifica bajo el siguiente formato:
acum=acum+variable
acum=acum*variable

Qué es una estructura repetitiva?
Las estructuras repetitivas se utilizan cuando se quiere que un conjunto de instrucciones se ejecuten un cierto número finito de veces, por ejemplo, escribir algo en pantalla cierta cantidad de veces, mover un objeto de un punto a otro cierta cantidad de pasos, o hacer una operación matemática cierta cantidad de veces. Se les llama bucle o ciclo a todo proceso que se repite cierto número de veces dentro de un pseudocódigo o un programa y las estructuras repetitivas nos permiten hacerlo de forma sencilla.
Existen diferentes tipos de estructuras que veremos una a una.
Desde o para (for)
Esta estructura ejecuta las acciones del cuerpo del bucle un número especificado de veces, y de modo automático controla el número de iteraciones o pasos.
Desde i=0 hasta 100
     Acción_1
    Acción_2
    Acción_3
    Acción_n

Fin_desde
  
Mientras (while)
Repite el cuerpo del bucle mientras se cumpla una determinada condición.
Mientras condición
    Acción_1
    Acción_2
    Acción_3
    Acción_n
Fin_mientras


Repetir hasta (do while)

La estructura repetir cumple la misma función que la estructura mientras. La diferencia está en que la estructura mientras comprueba la condición al inicio y repetir lo hace al final. Es por ello que la estructura repetir se ejecuta por lo menos una vez.

Hacer

Acción_1

Acción_2

Acción_3

Acción_n

Mientras condición

ESTRUCTURA REPETITIVA: MIENTRAS QUE (while)

La estructura mientras que (while) es aquella en la que el número de repeticiones de bucle no se conoce por anticipado, y el cuerpo del buque se repite mientras se cumple una determinada condición. 

Ø  Condición es una expresión booleana (puede ver verdadera o falsa)  que se evalúa al principio del bucle y antes de cada iteración de las sentencias.

Ø  Si la condición es verdadera, se ejecuta el bloque de sentencias y se vuelve al principio del bucle.

Ø  Si la condición es falsa, no se ejecuta el bloque de sentencias y se continúa con la siguiente sentencia del programa.




Una representación grafica seria como sigue:


Pseudocódigo
Código C++
Mientras (condición)  Hacer
     grupo de sentencias
FinMientras
while(condicion){
      grupo_de_sentecias
}







Explicación

·         Después de la sentencia: sentencia_n se entra a evaluar la condición  que esta junto a while, si es falsa se pasa el control del programa a la sentencia: sentencia_m (fuera de las llaves como indica la línea de color rojo) para continuar con las otras sentencias… Por lo tanto no se ingresaría ni una sola ves al grupo de sentencias dentro de las llaves del while.


·         En caso de que la condición junto a while sea verdadera se pasa el control del programa  al grupo de sentencias que se encuentran dentro de las llaves (como indica la línea de color verde)para luego regresar (como indica la línea azul) a evaluar la condición esto se repite mientras la condición sea verdadera por lo tanto en el grupo de sentencias que esta dentro de la llaves de:  while se debe de modificar la condición para que en alguna vez la condición evaluada sea falso y salga del bucle para continuar con la sentencia_ m y las otras que continúan.


·         Por eso se dice que el bucle while se ejecuta cero o mas veces.


·         Si la condición nunca llega a ser falsa, tenemos un bucle infinito.


·         La condición se denomina invariante del bucle.

Ejemplos.

E1.

Desarrolle un algoritmo que le permita realizar la escritura de los primeros 100 números naturales.

Análisis. Para poder escribir los primeros 100 números primeo hay que generar dichos valores, Una forma de generar los valores es con la estructuras repetitivas. Declaramos una variable que se inicie con un valor: 1 (int cont=1;) que seria el primer valor a escribir y finaliza en 100 que seria el último número a escribir necesitando un incremento de uno en uno en la variable (se usara un contador).

Inicia: cont=1

Finaliza: cont=100

Incrementa cont en uno o sea : cont =cont+1 

(Código compilado en devC++) copie y péguelo en su compilador para comprovar  

#include<iostream.h>

#include<conio.h >


Void main()

{

int cont=1;

cout<<"Los primeros 100 numeros naturales";

while(cont<=100)

{

    cout<<cont;

    cont=cont+1;

};

cout<<"Aqui ya salio del bucle”;

getch();

}




E2.

Desarrolle un algoritmo que le permita realizar la suma a los primeros N número impares.


Análisis. Al igual que en el ejercicio anterior es necesario apoyarse en una estructura de tipo cíclica a fin de poder dar solución al problema, la idea es desarrollar la estructura para N veces, una variable que lleve la cuenta para generar los numero impares buscando la relación entre la cuenta y el número como tal (se usara un contador, y un acumulador).

(Código compilado en devC++) copie y péguelo en su compilador para comprovar  


#include<iostream.h>

#include<conio.h>


Void main()

{

int n,num,cont=1,acum=0;

cout<<"Ingrese un numero : ";

cin>>n;

while(cont<=n){

    num=2*cont-1;

    cout<<num;         

    acum=acum+num;

    cont=cont+1;

}

cout<<"La suma de los "<<n<<"  Primeros numeros impares es : "<<acum

getch();

}


Nota. El problema se puede resolver de muchas formas por ejemplo solo bastaba con elevar al cuadrado en número ingresado, la forma como se resolvió es para mostrar cómo es que funciona la estructura repetitiva while


E3.

Desarrolle un algoritmo que calcule el promedio de los primeros N números naturales.


Análisis. Para dar solución al ejercicio se procede a la siguiente forma: Se debe generar una estructura repetitiva que se encargue de contar el número de términos a sumar, en el caso del ejercicio será N.   La variable que se encarga de contar los términos sirve además como generadora de los términos a sumar. Se acumularan dichos números generados y al final se promedia dicha sumatoria entre el número de términos sumados.


(Código compilado en devC++) copie y péguelo en su compilador para comprobar  

#include<iostream.h>

#include<conio.h>

Void main()

{

int n,cont,suma;

float promedio;

suma=0;

cont=1;

cout<<"Ingrese la cantidad de numeros : ";

cin>>n;

while(cont<=n){

    suma=suma+cont;

    cont++; 

};


promedio=suma/n;

cout<<"El promedio de los numeros es : "<<promedio;

getch()

}  

E4.

Desarrolle un algoritmo que le permita leer un valor entero positivo N y calcule su factorial.


(Código compilado en devC++) copie y péguelo en su compilador para comprovar  


#include<iostream.h>

#include<conio.h>


Void main()

{

int n,factorial=1,i=1;

cout<<"Ingrese un numero : ";

cin>>n;

while(i<=n)

{

    factorial=factorial*i;

    i++;

};


cout<<"El factorial es : "<<factorial;

getch();

}
Sentencia For
Cuando se desea ejecutar una sentencia simple o compuesta, repetitivamente
un número de veces conocido, la construcción adecuada es la sentencia for.


for(exp_inicialización; condición; expresión_incremento)
{
instrucciones;
}



  El flujo del bucle FOR transcurre de la siguiente forma:
Cuando se encuentra la instrucción for se ejecuta primero la expresión de
inicialización, no volviendo a ejecutarse más. Generalmente esta instrucción
realiza la inicialización de la variable de control de ciclo. Tras esto se prueba
la condición. Siempre que condición se evalúa como verdadero, la instrucción
o instrucciones dentro del ciclo son ejecutados. Después de entrar en el ciclo
y ejecutar todas las instrucciones dentro de éste se ejecuta
expresión_incremento. Sin embargo si condición toma el valor Falso, las
instrucciones dentro del ciclo son ignoradas y la ejecución continúa con la
instrucción al final del ciclo.
        Cuando se necesitan ejecutar varias instrucciones dentro del ciclo se
hacen necesarias definir el bloque con las llaves {}

Ejemplo:

#include <conio.h>
#include <iostream.h>

void main()
{
clrscr();


int x, Ini=0, Inc=5, Fin=20; //Probar con otros valores
for (x=Ini;x<Fin;x=x+Inc)
  cout<<"\t"<<x;

 getch();
}
 

La salida sería:
0  5  10  15

El programa efectúa un total de 5 ciclos, aunque en este último la condición se
hace falsa por lo que finaliza, transfiriendo el control a la línea de código que
lee una tecla. La secuencia de eventos es el siguiente:

No. Ciclo
    1
    2
    3
    4
    5


 x
 0
 5
10
15
20



condicion
   0<20
   5<20
  10<20
  15<20
  20<20

   Acción
  Imprime 0
  Imprime 5
 Imprime 10
 Imprime 15
Fin ciclo for..


 
 

For anidados


Un ciclo for puede colocarse dentro de otro, en este caso el ciclo interno se
ejecutará totalmente cada vez que se ejecute el ciclo que lo contiene.
Ejemplo:
 

#include <conio.h>
#include <iostream.h>


void main()
{
clrscr();
 int x,y;
 int fin1=6, fin2=5;//Probar con otros valores
 for (x=1;x<=fin1;x++)
 {
   cout<<"\n";
   for (y=1;y<=fin2;y++)
     cout<<x*y<<"\t";
 }
 getch();
}

La salida sería:

1     2     3     4       5
2     4     6     8      10 
3     6     9     12    15
4     8     12   16    20
5     10   15   20    25
6     12   16   24    30


Por cada valor que toma x en el ciclo for externo se efectúa totalmente el ciclo
for interno es decir y inicialmente toma el valor de 1 y se imprime 1*1=1,
luego y=2 y se imprime 2, y así hasta que y=5 imprime 5, en el siguiente
ciclo la condición se hace falsa dándose por terminado el ciclo interno, pero el
ciclo externo incrementa su valor y ejecuta nuevamente el ciclo interno, este
proceso se sigue hasta que la condición del ciclo externo se hace falsa.


Do while

Difiere tanto de for como de while en que es un ciclo de verificación
posterior, es decir al ciclo se entra al menos una vez , y la condición del ciclo
se prueba al cabo de la primera iteración. Como los ciclos do-while se
ejecutan como mínimo una vez, es mejor utilizarlos en aquellas aplicaciones
en las que se quiere entrar al ciclo.
do
{
   Instrucción_1;
  Instrucción_2;
}
while(condición);
  


Ejemplo:

#include <conio.h>
#include <iostream.h>

 
void main()
{
clrscr();
  char op;
  do
  { cout<<" MENU";
     cout<<"\n 1.-Altas";
     cout<<"\n 2.-Bajas";
     cout<<"\n 3.-Consultas";
     cout<<"\n 4.-Salir";
     cout<<"\nOpcion:";
     do
     {
        op=getch();
     }
     while(op!='1'&&op!='2'&&op!='3'&&op!='4');
     //Código adicional
  }
  while (op!='4');
}
La salida del programa sería:
MENU
 1.-Altas
 2.-Bajas
 3.-Consultas
 4.-Salir
Opcion:

En este ejemplo se utilizan dos ciclos do-while anidados. El ciclo exterior
controla la terminación del programa y el ciclo interior valida la opción
seleccionada por el usuario, de tal forma que si el usuario selecciona una
opción distinta a las permitidas (1,2,3,4) se vuelve a leer sin salir del ciclo
interior. Solamente si el usuario selecciona la opción ‘4’ la condición del ciclo
exterior será falsa y finalizará, en caso contrario desplegará nuevamente el
menú de opciones.
 

Ejemplos:
1.- Programa para calcula la calificación final de un alumno, teniendo como
datos N calificaciones parciales (3). Imprime el nombre, la calificación final y
un comentario de “Aprobado” si obtiene 70 o más y “Reprobado” en caso
contrario.

#include <stdio.h>
#include <conio.h>
#include <iostream.h>

void main()
{
 clrscr();
  float Prom,SumCal=0,Cal;
  int x;
  char Nom[40];
  cout<<"DETERMINA SI UN ALUMNO APRUEBA O NO";
  cout<<"\n\nNOMBRE DEL ALUMNO: ";
  gets(Nom);
  for (x=1;x<=N;x++)
  {
    cout<<"\n CALIFICACION No "<<x<<": ";
    cin>>Cal;
    SumCal=SumCal+Cal;
  }

  Prom= SumCal/N;
  cout<<"\nEL ALUMNO "<<Nom<<" TIENE EL PROMEDIO DE: "<<Prom<<" Y ESTA:";
  if(Prom>=70)
    cout<<"\n\nAPROBADO";
  else
    cout<<"\n\nREPROBADO";

getch();
}

2.- Programa que calcula el salario de un empleado, Según el número de horas
trabajadas por semana y el salario por hora. Si el número de horas trabajadas
es menor o igual a 40 se paga la cuota normal por hora. Si el número de horas
rebasa las 40 horas reglamentarias, el excedente se paga como tiempo extra:
        1 a 10 hrs. Extras se paga al doble de la cuota por hora
        11 a 20 hrs. Extras se paga al triple de la cuota por hora
        21 ó más hrs. Extras se paga al cuádruple de la cuota por hora
En ningún caso el número de horas trabajadas por semana podrá ser superior a
 80.

/*Salario.cpp */
#include <stdio.h>
#include <conio.h>
#include <iostream.h>



void main()
clrscr();
  float SalSem, SalHra, SalTE=0,SalBase;
  int Hrs;
  char Nom[40];
  cout<<"CALCULA EL SALARIO SEMANAL DE UN TRABAJADOR";
  cout<<"\n\nNOMBRE DEL TRABAJADOR: ";
  gets(Nom);
  cout<<"\nNo. DE HORAS TRABAJADAS POR SEMANA: ";
  do{//Valida el intervalo de Hrs permitidas
    cin>>Hrs;
  }
  while(Hrs<0 || Hrs>80);
  cout<<"\nSALARIO POR HORA:";
  cin>>SalHra;
  if (Hrs<=40)
  {
    SalBase=Hrs*SalHra;
    SalSem=SalBase;
  }
  else
  {
    SalBase=40*SalHra;
    if (Hrs>40 && Hrs <=50)
       SalTE=(Hrs-40)*SalHra*2;
    else
       if (Hrs>50 && Hrs <=60)
         SalTE=(Hrs-40)*SalHra*3;
       else
         SalTE=(Hrs-40)*SalHra*4;
    SalSem=SalBase+SalTE;
  }
  cout<<"\nTRABAJADOR: "<<Nom;
  cout<<"\nSALARIO BASE:"<<SalBase;
  cout<<"\nSALARIO POR TIEMPO EXTRA: "<<SalTE;
  cout<<"\n_______ ";
  cout<<"\nSALARIO TOTAL SEMANAL:"<<SalSem;
}





 

              

5 comentarios:

  1. ¿eso quiere decir que solo vamos a corregir los ejercicios en nuestra libreta solo si ya habíamos copiado las copias?

    ResponderEliminar
  2. Disculpe profe, esto va despues de terminar de copiar las hojas de programacion orientada a objetos? Y para cuando lo revisa?

    ResponderEliminar
  3. hola profe, sabe como se pone el switch en el diagrama de flujo

    ResponderEliminar
  4. plantea 5 recomendaciones para aplicar una estructura repetitiva de forma eficiente en la resolución de un problema.

    ResponderEliminar