SL


Lenguaje SL

Centro Nacional de Computación CNC


Bienvenida

Novedades

Documentos

Descarga de SLE

Licencia




Programas fuente de ejemplo


Ejemplo 1. Cálculo del Máximo Común Divisor

/*
 * Cálculo del máximo común divisor utilizando el algoritmo
 * de Euclides.
 *
 * (c) jsegovia@cnc.una.py
 */
var
   a, b : numerico
inicio
   imprimir ("Ingrese dos enteros positivos:")
   leer (a, b)
   si ( (a < 1) or (b < 1) ) {
       terminar (“\nLos valores ingresados deben ser positivos”)
   }
   mientras (a <> b ) {
      si ( a > b ) {
         a = a - b
      sino
         b = b - a
      }
   }
   imprimir (“\nEl MCD es “, a)
fin

Ejemplo 2. Cálculo del Mínimo Común Múltiplo

/*
 * Cálculo del mínimo común múltiplo, usando la relación
 *
 *              a * b
 * MCM(a,b) =  ------------
 *            MCD (a, b)
 *
 * (c) jsegovia@cnc.una.py
 */
var
   a, b : numerico
inicio
   imprimir ("Ingrese dos enteros positivos:")
   leer (a, b)
   imprimir (“\nEl MCM de “, a, “ y “, b, “ es “,
             (a*b) / MCD (a, b))
fin


sub MCD (a, b : numerico) retorna numerico
inicio
   mientras (a <> b ) {
      si ( a > b ) {
         a = a - b
      sino
         b = b - a
      }
   }
   retorna a
fin



Ejemplo 3. El clásico factorial

/*
 * Este es el clásico ejemplo del cálculo del factorial
 * de un entero positivo n.
 *
 * (c) jsegovia@cnc.una.py
 */
var
   n : numerico
inicio
   imprimir ("\nCALCULO DE FACTORIAL",
             "\n--------------------",
             "\nIngrese un numero (0-n):")
   leer (n)
   si ( n >= 0 && n == int (n) ) {
      imprimir ("\n\n\n", n, "!=", fact (n))
   sino
      imprimir ("\nNo definido para ", n)
   }
fin


sub fact (n : numerico) retorna numerico
/*
 * Calcula el factorial de n. Imprime los valores que
 * se usaron en la etapa del cálculo.
 */
var
   r : numerico
inicio
   si ( n == 0 ) {
      r = 1
   sino
      imprimir ("\n", n, "! = ", n, " x (", n-1, "!)")
      r = n*fact(n-1)
   }
   retorna r
fin

sub fact2 (n : numerico) retorna numerico
/*
 * Una versión más compacta de fact(), que no imprime el
 * “rastro” de los valores intermedios.
 */
inicio
   retorna ifval ( n == 0, 
                   1, 
                   n*fact2(n-1))
fin



Ejemplo 4. Lectura y ordenación de un vector

/*
 * Lee un vector de 10 elementos numéricos, ordena
 * ascendentemente sus elementos y los imprime.
 * La ordenación se hace con el algoritmo de la “burbuja”.
 *
 * (c) jsegovia@cnc.una.py
 */
var
   A : vector [10] numerico
   m, n : numerico
inicio
   imprimir (“\nIngrese “, alen (A), “ números separados por comas:\n”)
   leer (A)
   desde m=1 hasta alen(A)-1 {
      desde n=m+1 hasta alen (A) {
         si ( A [m] > A [n] ) {
            intercambiar (A [m], A [n])
         }
      }
   }
   imprimir ("\nEl vector ordenado es:\n”, A)
fin



Ejemplo 5. Transpuesta de una matriz

/*
 * Dado un arreglo bidimensional (matriz), genera e imprime
 * su traspuesta.
 *
 * (c) jsegovia@cnc.una.py
 */
var
   /*
    * Las 3 últimas filas de M serán iguales.
    */
   M : matriz [5, 3] = {{7, 12, 5},
                        {1, 4, 22},
                        {6, 20, 13},
                        ...
                       }
   T : matriz [*,*] numerico
inicio
   impr_mat (“Matriz original:\n”, M)
   transponer (M, T)
   impr_mat (“\nLa traspuesta es:\n”, T)
fin


sub transponer ( M : matriz [*,*] numerico
             ref R : matriz [*,*] numerico)
/*
 * trasponer() produce la transpuesta de M y lo deposita
 * en R. 
 * M puede tener cualquier tamaño, con tal de que
 * sea bidimensional y rectangular (cantidad igual de
 * elementos por cada fila).
 * R debe ser un arreglo abierto.
 */
var
   cant_filas = alen (M)
   cant_cols  = alen (M [1])
   filas, cols : numerico
inicio
   /*
    * Nótese que las filas y columnas están en orden
    * inverso en el siguiente dim().
    */
   dim (R, cant_cols, cant_filas)
   desde filas=1 hasta cant_filas {
      desde cols=1 hasta cant_cols {
         R [filas, cols] = M [cols, filas]
      }
   }
fin


sub impr_mat (msg : cadena; M : matriz [*,*] numerico)
var
   k = 0
inicio
   imprimir (msg)
   desde k=1 hasta alen (M) {
      imprimir (M [k], “\n”)
   }
fin



Ejemplo 6. Conversión de decimal a hexadecimal

/*
 * Lee un entero positivo e imprime el mismo número expresado
 * en base 16.
 *
 * (c) jsegovia@cnc.una.py
 */
var
   n = 0
   hex = “”
   k = 0
const
   DIG_HEX = “0123456789ABCDEF”
inicio
   imprimir (“Ingrese un entero positivo:”)
   leer (n)
   repetir
      hex = DIG_HEX [n % 16 + 1] + hex
      n = int (n/16)
   hasta ( n == 0 )
   imprimir (“\nHexadecimal=”, hex)
fin