LeXicoEl poder de los simple

  
Algunos ejemplos utilizando estructuras fundamentales en lógica de la programación:

Secuencia, Decisión, Ciclo Mientras


Incremento de conexiones directas necesarias

N sitios conectados uno a uno en forma directa requieren n(n-1)/2 conexiones. Para calcular las conexiones adicionales al pasar de 100 sitios a 110 sitios se puede calcular la diferencia de conexiones entre las dos cantidades de sitios. El algoritmo siguiente usa una estructura secuencia y no tiene datos de entrada (todos los datos ya los posee el algoritmo escritos en forma explícita, es decir hacen parte de él).

/*Para conectar n sitios en forma directa se requieren n(n-1)/2 conexiones.
Cuántas conexiones adicionales deben construirse para pasar de 100 a 110 sitios ?*/

tarea:
empiece
 el objeto conexionesAdicionales es una cantidad
 copie 110*109/2 - 100*99/2 en conexionesAdicionales
 muestre "Deben construirse adicionalmente ", conexionesAdicionales
termine

Conexiones adicionales necesarias

El algoritmo anterior solo sirve para esa situación en particular por haber sido escrito con código rígido (hardcode) lo que le hace impráctico en otras circunstancias pues siempre habrá que reprogramarlo para la nueva situación. La modificación siguiente le hace menos rígido y permite ser utilizado en una variedad de casos. Está conformado por una estructura secuencia y ésta vez posee dos datos de entrada ( dos datos que el algoritmo no posee, que desconoce y que serán ingresados por el usuario que se halle al frente del computador en el momento de la ejecución).

/*Para conectar n sitios en forma directa se requieren n(n-1)/2 conexiones.
Cuántas conexiones adicionales deben construirse si se aumenta el número de sitios ?*/

tarea:
empiece
 los objetos conexionesAdicionales, sitiosIniciales, sitiosFinales son cantidades

 entre sitiosIniciales, sitiosFinales

 copie  sitiosFinales*(sitiosFinales-1)/2 - sitiosIniciales*(sitiosIniciales-1)/2  en conexionesAdicionales
 muestre "Para pasar de  ", sitiosIniciales, " sitios a ", sitiosFinales, " sitios, se necesitan ", conexionesAdicionales, " conexiones adicionales"
termine

Validación de datos

Es común la presencia de errores cuando el usuario ingresa datos a un programa por lo cual el programador novato debe acostumbrarse a revisar todas las entradas y con ello evitar catátrofes que aparecerá en el momento menos indicado. El código siguiente intenta descubir la equivocación más elemental y emite un mensaje demasiado parco sin dar oprtunidad de corrección. En los sucesivos ejemplos no se hará su revisión con el fin de presentarlos en forma consisa y con la menor cantidad de distractores. Se ha conformado el algoritmo con una estructura secuencia y dentro de ésta una decisión.

/*Para conectar n sitios en forma directa se requieren n(n-1)/2 conexiones.
Cuántas conexiones adicionales deben construirse si se aumenta el número de sitios ?*/

tarea:
{
 los objetos conexionesAdicionales, sitiosIniciales, sitiosFinales son cantidades

 entre sitiosIniciales, sitiosFinales

 es sitiosIniciales < sitiosFinales ?
      si:{
          copie  sitiosFinales*(sitiosFinales-1)/2 - sitiosIniciales*(sitiosIniciales-1)/2  en conexionesAdicionales
          muestre "Para pasar de  ", sitiosIniciales, " sitios a ", sitiosFinales, " sitios, se necesitan ", conexionesAdicionales, " conexiones adicionales"
          }
      no: muestre "Error en la entrada de datos"
}

Cómo saber si un número es par ?

Una forma puede ser usando la propiedad de la potenciación de un número negativo que dará positivo o negativo dependiendo de si el exponente es par o impar (en ejemplo posterior se mostrará otra forma). El algoritmo siguiente está compuesto por una secuencia y dentro de ella hay una decisión.

/*Es par o impar el número que tiene el usuario ?*/

tarea:
empiece
 el objeto número es una cantidad
 entre  número
 es (-1)^número=1? si: muestre número, " es par"
                    no: muestre número, " es impar"
termine

La tabla de multiplicar del 17

Construir una tabla de multiplicar para el 17 exige hacer un proceso repetitivo en el cual cambian muy pocas cosas, el factor y el resultado. Describir linealmente los procesos sería engorroso pues habría que escribir casi lo mismo muchas veces y se debería saber cuantas veces hacerlo en el momento mismo del diseño del algoritmo. La estructura ciclo Mientras permite sintetizar la codificación pues indica que un proceso (codificado solo una vez) se ejecute varias veces. Para suspender la repetición se controla con una expresión lógica apropiada. Significa que el proceso interno en el ciclo (estructura secuencia) se hará mientras la condición sea verdadera. Cuando sea falsa se "sale" del ciclo. El siguiente ejemplo se construyó con una secuencia que internamente tiene un ciclo mientras y éste a su vez posee en su interior otra estructura secuencia.

/* Calcule la tabla de multiplicar del 17 */

tarea:
{
 los objetos factor, producto son cantidades
 copie 0 en factor
 mientras factor < 10 haga:
     {
      copie factor + 1 en factor
      copie factor * 17 en producto
      muestre "17 * ", factor, " = ", producto
     }
}

Tabla de multiplicar

El ejemplo previo fue contruido exclusivamente para la tabla del 17. El Siguiente es para tabla que necesite el usuario por lo que habrá que preguntarle con la instrucción entra tabla. La estructura del algoritmo permanece sin modificación.

/* Calcule la tabla de multiplicar */

tarea:
{
 los objetos tabla, factor, producto son cantidades

 entre tabla
 copie 0 en factor
 mientras factor < 10 haga:
     {
      copie factor + 1 en factor
      copie factor * tabla en producto
      muestre tabla, " * ", factor, " = ", producto
     }
}

Programar para las necesidades del usuario

En el ejemplo siguiente, aún conservando la estructura lógica de los dos precedentes, se amplía la intervención del usuario: él dirá de cual tabla se trata y cuales son los límites de los factores. Descubra los cambios sutiles que se han efectuado.

/* Calcule la tabla de multiplicar */

tarea:
{
 los objetos tabla, factor, factorInicial, factorFinal, producto son cantidades

 entre tabla, factorInicial, factorFinal

 mientras factorInicial <= factorFinal  haga:
     {
      copie factorInicial * tabla en producto
      muestre tabla, " * ", factorInicial, " = ", producto
      copie factorInicial + 1 en factorInicial
     }
}

La suma de los números impares existentes en un rango cerrado de enteros

El ejemplo siguiente se armó con 5 estructuras lógicas: Una secuencia que contiene un ciclo mientras y éste a su vez contiene una secuencia que en su interior alberga una decisión y ella contiene otra secuencia en el ramal si.

/*
El  siguiente código muestra la suma de los números impares existentes dentro de un rango cerrado de números enteros.
Lo que sobra de una división entera o módulo se calcula con la operación % como en número%2 
Se utilizó synonymous para usar otras palabras.
*/

synonymous "empiece" "inicio", "entre" "leer", "muestre" "escribir", "termine" "fin"

tarea:
inicio
 los objetos número, impares, límiteInferior, límiteSuperior, suma son cantidades

 leer límiteInferior, límiteSuperior  

 copie límiteInferior en  número
 copie 0 en impares, suma

 mientras (número <= límiteSuperior) haga:
    {
     es número%2 = 1 ?   si: {
                             copie suma + número en suma
                             copie impares + 1 en impares
                             }
     copie número + 1 en número
     }

 escribir "Cantidad de números impares = ", impares, "...y ellos suman: ", suma
fin

Descargue otros ejemplos con Lexico

codificados por Jorge Pulgarín

codificados por Jorge Pulgarín (arreglos)

codificados por Darío H. Arboleda Guzmán


TTT

EEE

CCC

Más ejemplos proximamente...
 
Todos los derechos reservados :: Powered by Riosur :: Diseñado por EnDeT