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...
|