jueves, 11 de agosto de 2011

ESTRUCTURAS SELECTIVAS

Se usan para la toma de decisiones dentro de un programa y lo podemos clasificar:
1.       Simple   → (Si_entonces)
2.       Doble    → (Si_entonces_sino)
3.       Anidada o cascada  →(Si_anidada)
4.       Multiple                     → ( Si_múltiple)

ESTRUCTURA SELECTIVA SIMPLE
Permite ejecutar una acción o grupo de acciones solo si se cumple una determinada condición, es decir, donde la condición “C” es un grupo de condiciones a evaluarse. El bloque “A” representa la operación o conjunto de operaciones a realizar si la condición “C” es verdadera.
Pseudocodigo
En C++
Si(C)
      A
Finsi
if(C)
{
     A
}

También se puede decir que se evalúa la condición “C” si es verdadero (true) se ejecuta todas las sentencias que están dentro de las llaves (en C++), hasta el Finsi (en pseudocódigo) para luego continuar con la siguiente línea de código que esta después.
En caso que la condición “C” sea falsa (false) no se ejecutara las sentencias dentro de las llaves (en C++), hasta el Finsi (en pseudocódigo), y el control pasa a la siguiente instrucción de programa (en orden descendente).


Pseudocódigo
En C++
Inicio               
Escribir(“Ingrese un número”)
Leer(numero)           
Si(numero mod 3 = 0)
       Escribir(“El numero es múltiplo de tres”)        
Finsi    
Escribir(“El numero ingresado es”, numero)
Fin
#include<iostream.h>
int main()
{
int numero;
cout<<”Ingrese un número ”;
cin>>numero;
if(numero%3==0)
{
    cout<<”El numero es multiplo de tres<<endl;
}            
cout<<”El numero ingresado es”<<numero<<endl;  
}
system(“pause”);
return 0;
}


Obs. El resultado de: a%b es el residuo de dividir a entre b

Ø Si ingresamos el número: 6 nos saldrá en pantalla:   El numero es múltiplo de tres
                                                                                               El numero ingresado es 6
Ø Si ingresamos el número: 13 nos saldrá en pantalla: El numero ingresado es 13

Explicación

Pedimos el número, lo leemos, ahora evaluamos la condición: si (el residuo de el número entre tres es cero) se ejecuta todas las sentencias que están dentro de los corchetes (en C++), hasta el Finsi (en pseudocódigo), en el ejemplo solo tenemos una sentencia pero se pueden poner mas por ejemplo se pudo poner:

    
if(numero%3==0)
{
      cout<<”El numero es múltiplo de tres”<<endl;
      cout<<”El doble del numero es ”<<numero*2<<endl;
}            
cout<<”El numero ingresado es”<<numero<<endl;

En el caso de que haya una sola sentencia a ejecutarse cuando la condición a evaluar sea verdadera como en el ejemplo anterior se pueden omitir los corchetes, en caso de que haya más de dos sentencias el uso de corchetes es obligatoria.
Por lo tanto seria también correcto. 

if(numero%3==0)
       cout<<”El numero es múltiplo de tres”<<endl;

cout<<”El numero ingresado es”<<numero<<endl;



ESTRUCTURA SELECTIVA DOBLE

Permite seleccionar una ruta de dos posibles, en base a la verdad (V) o falsedad (F) de la condición.


Pseudocódigo
En C++

Si(Condicion)
            a1
            a2
            a3
              .
              .
              .
           an
Sino
           b1
           b1
           b1
            .
            .
            .
           bn
Finsi                   
if(condicion)
{
    a1;
    a2;
    a3;
     .
     .
     .
    an;
}
else
{
    b1;
    b2 ;
    b3;
     .
     .
     .
    bn;
}

Si (if) la condición es verdadera, se ejecutan las sentencias: {a1, a2, a3, …, an} , sino (else) se ejecutaran las sentencias: {b1, b2, b3, …, bn}
Si la sentencia solo tiene una línea no es necesario poner llaves.
  

 SENTENCIAS ANIDADAS

Una estructura de decisión puede estar  anidada dentro de otra estructura de decisión, hay que tener en cuenta que el anidamiento sea total.

Se debe mantener el concepto que una estructura de decisión debe tener una sola entrada y una sola salida tanto para la estructura que anida como para la estructura anidada.


           Pseudocódigo
En C++

Si(Condicion1)
         Si(Codicion2)
                 Ejecuta bloque de acciones 1
         Sino
                 Ejecuta bloque de acciones 2
         Finsi
Sino
         Ejecuta bloque de acciones 3
Finsi
                  
if(Condicion1)
{
   if(Condicion2)
   {
      Ejecuta bloque de acciones1
   }
   else
   {
      Ejecuta bloque de acciones2
   }   
}
else
{
   Ejecuta bloque de acciones3
}


Para entenderlo mejor citare unos ejemplos.
Ejemplos.

Si se quiere saber si el numero ingresado en mayor que cero el código de nuestro programa seria así
(compilado en  dev C++)

E1.
(compilado en  dev C++)
#include<iostream.h>

int main(){
int num;
cout<<"Ingrese un numero : ";
cin>>num;   
if(num>0){
    cout<<"El numero es mayor que cero"<<endl;    
}
else{
    cout<<"El numero no es mayor que cero"<<endl;
}
system("pause");
return 0;
}


Ø Si ingresamos el número: 3 nos saldrá en pantalla: El numero es mayor que cero
Ø Si ingresamos el número: -45 nos saldrá en pantalla: El numero no es mayor que cero

Si además de que el número sea mayor que cero queremos saber si el número es múltiplo de tres el código será:

E2.
#include<iostream.h>

int main(){
int num;
cout<<"Ingrese un numero : ";
cin>>num;   
if(num>0){
    cout<<"El numero es mayor que cero"<<endl;
    if(num%3==0){
        cout<<"El numero es múltiplo de tres "<<endl;
    }
    else{
        cout<<"El numero no es multiplo de tres "<<endl;
    }    
}
else{
    cout<<"El numero no es mayor que cero"<<endl;
}
system("pause");
return 0;
}

Obs. Recordar que a%b nos da el residuo de la división de a entre b y que el operador == es igualdad y = es de asignación.

Ø  Si ingresamos el número: 50 saldrá en pantalla: El numero es mayor que cero
                       El numero no es multiplo de tres

Ø  Si ingresamos el número: 21 saldrá en pantalla: El numero es mayor que cero
                       El numero es multiplo de tres

Ø  Si ingresamos el número: -6 saldrá en pantalla:  El numero no es mayor que cero

Veamos el caso en la que se ingrese el número -6 no sale que es múltiplo de tres sólo nos sale: El numero no es mayor que cero y no se evalúa la  condición si es múltiplo de tres, esto sucede porque tenemos antes una condición que actúa como un filtro que es: Si ( if ) el numero ingresado es mayor que cero ( if(num>0) ) entra al bloque encerrado entre llaves y ahí recién se evalúa si este numero es múltiplo de tres, si lo es se manda a pantalla: El numero es múltiplo de tres en caso contrario : El numero no  es múltiplo de tres; en caso de que el numero no sea mayor de cero entrara al bloque else (sino) de la primera condición y nos muestra por la pantalla: El numero no es mayor que cero.

Una forma de resolver esto seria:

E3.
#include<iostream.h>

int main(){
int num;
cout<<"Ingrese un numero : ";
cin>>num;   
if(num>0){
    cout<<"El numero es mayor que cero"<<endl;
    if(num%3==0){
        cout<<"El numero es multiplode tres "<<endl;
    }
    else{
        cout<<"El numero no es multiplo de tres "<<endl;
    }    
}
else{
    cout<<"El numero no es mayor que cero"<<endl;
    if(num%3==0){
        cout<<"El numero es multiplode tres "<<endl;
    }
    else{
        cout<<"El numero no es multiplo de tres "<<endl;
    }    
}
system("pause");
return 0;
}

Ø Si ingresamos el número: -6 saldrá en pantalla:   El numero no es mayor que cero
                                                                              El numero es multiplo de tres

Ø Si ingresamos el número: -56 saldrá en pantalla: El numero no es mayor que cero
                                                                              El numero no es multiplo de tres

Ø Si ingresamos el número: 32 saldrá en pantalla:  El numero es mayor que cero
                                                                             El numero no es multiplo de tres

Ø Si ingresamos el número: 30 saldrá en pantalla:  El numero es mayor que cero
                                                                             El numero es multiplo de tres


Mas ejemplos…

Obs. En devC++ podemos poner comentarios que son ignorados por el programa y sirven para explicar algunas partes del programa o alguna otra descripción, de una sola línea  ponemos “//” antes del comentario y para un comentario de varias líneas  /*” antes del comentario  y  */” al final.

Ejemplo.
·        //comentario de una sola línea
·       /*comentario de una o varias líneas*/

E4.
Desarrolle un programa que dado dos ángulos averiguar si son complementarios (dos ángulos son complementarios si suman 90)

(Código compilado en devC++)
#include<iostream.h>

int main(){
//declaramos tres variables(comentario de una línea)
int angulo1;
int angulo2;
int sum;
/*Pedimos los ángulos y los guardamos en las variables angulo1 y angulo2(esto es un comentario de varias líneas) */

cout<<"Ingrese primer angulo :";
cin>>angulo1;
cout<<"Ingrese segundo angulo :";
cin>>angulo2;

//le asignamos a la variable sum la suma de los angulos

sum=angulo1+angulo2;
if(sum==90)
    cout<<"Los angulos son complementarios "<<endl;
else
    cout<<"Los angulos NO son complementarios "<<endl;

system("pause");
return 0;
}

Se puede observar en este ejemplo que después del condicional if no se puso corchetes es porque hay una sola sentencia, al igual que después en else.

E5.
Desarrollaremos un algoritmo que leídos dos números A y B indicar si uno de los dos divide al otro exactamente.

Un número dividirá al otro exactamente si el residuo de dividir los números es cero.

(Código compilado en devC++)
#include<iostream.h>

int main(){
//declaramos las variables
int A,B;
cout<<"Ingrese primer numero :";
cin>>A;
cout<<"Ingrese segundo numero :";
cin>>B;
if(A%B==0){
   cout<<B<<"divide a "<<A<<"Exactamente"<<endl; 
}
else{
    if(B%A==0){
        cout<<A<<" divide a "<<B<<"Exactamente"<<endl; 
    }
    else{
        cout<<"Ninguno divide al otro exactamente "<<endl;
    }
}

system("pause");
return 0;
}   
                                                                                 
                                                                                       
E6.
Desarrolle un algoritmo que permita leer tres números y almacenarlo en las variables A, B, C respectivamente. El algoritmo debe indicar quien es el mayor. Para este caso se asume que los tres valores leídos por el teclado son valores distintos.
(Código compilado en devC++)
#include<iostream.h>

int main(){
int A,B,C;
cout<<"Ingrese primer numero : ";
cin>>A;
cout<<"Ingrese segundo numero : ";
cin>>B;
cout<<"Ingrese tercer numero : ";
cin>>C;

if(A>B&&A>C){
    cout<<"A = "<<A<<"  es el mayor"<<endl;
}
else{
    if(B>A&&B>C){
        cout<<"B = "<<B<<"  es el mayor"<<endl;
    }
    else{
        cout<<"C = "<<C<<"  es el mayor"<<endl;
    }   
}
system("pause");
return 0;
}

E7.
Este problema es muy parecido al anterior solo que en ves de hallar el mayor debemos hallar el menor numero de tres ingresados (diferentes).

(Código compilado en devC++)
#include<iostream.h>

int main(){
int A,B,C;
cout<<"Ingrese primer numero : ";
cin>>A;
cout<<"Ingrese segundo numero : ";
cin>>B;
cout<<"Ingrese tercer numero : ";
cin>>C;

if(A<B){
    if(A<C){
        cout<<"A= "<<A<<" es el menor"<<endl;
    }
    else{
        cout<<"C="<<C<<" es el menor"<<endl;  
    }
}
else{
    if(B<C){
        cout<<"B="<<B<<" es el menor"<<endl;  
    }
    else{
        cout<<"C="<<C<<" es el menor"<<endl;  
    }
}
system("pause");
return 0;
}

Bueno eso es todo para este tema si no te quedo claro algo comentarlo y yo te estaré correspondiendo a la brevedad posible…

CONDICIONAL MÚLTIPLES EN EL SIGUIENTE BLOG…

2 comentarios:

  1. disculpe en las entradas de las librerias ai esta si la cambio por seguido de puede que cambie en algo yo lo hice en mi computador y se mostro error pero en clase el prof lo iso asi me podria decir el error o almenos si es correcto acerlo de esa manera algo la libreria iostream que mas abarca¿¿¿¿¿

    ResponderEliminar