OTcl es un lenguaje muy práctico y sencillo, pero la mayoría lo conoce más por su relación con el programa de simulación NS-2.
No encontre mucha información en español sobre programación en OTcl así que decidí compartir esta presentación con una introducción sencilla para quienes deseen iniciarse con este lenguaje de programación.
Buena suerte.
2. Introducción
• Tcl es un lenguaje utilizado por millones de personas en el mundo. Es un lenguaje
muy simple con una sintaxis muy sencilla que permite una integración muy fácil
con otros lenguajes de programación.
Tcl fue creado por Jhon Ousterhout – de la Universidad de Stanford. Las
características mas relastantes de este poderoso lenguaje son:
•
•
•
•
•
•
Permite un rapido desarrollo
Provee una interfaz grafica
Es compatible con muchas plataformas
Integracion flexible
Facil de usar
Libre
4. Algunas funciones básicas de Tcl y Otcl
Ingresamos a la Shell de TCL
• Primero debemos abrir un terminal
• Luego ejecutamos el comando sudo tclsh para habilitar la Shell de Tcl.
• Deberiamos ver el promtp “%”
5. Algunas funciones básicas de Tcl y Otcl
El comando SET
• Asignación de valores a variables a traves del comando set, por ejemplo:
set b 0
• Asigna el valor 0 a la variable b. Esto es equivalente a decir b=0; en lenguaje C por
ejemplo.
Otros ejemplos:
set c 5
set x 55
6. Algunas funciones básicas de Tcl y Otcl
El signo # (numeral)
• Este signo indica una línea de comentario, la cual no es parte del programa por lo
tanto el interprete no ejecutara esta línea.
7. Algunas funciones básicas de Tcl y Otcl
El signo $ (dollar)
• Si queremos saber cual es el valor contenido en una variable debemos anteponer
el signo $ antes de la variable, por ejemplo
set x $b
• Asigna el valor contenido en la variable b a la variable x.
Otros ejemplos:
set c 5
set x $c
;entonces X vale 5
8. Algunas funciones básicas de Tcl y Otcl
El comando PUTS
• Este comando permite imprimir un resultado, por ejemplo
set b 10
puts b
• Mostrara en pantalla el valor 10
Otros ejemplos:
puts “hola mundo”
puts “el valor almacenado en b es $b”
9. Algunas funciones básicas de Tcl y Otcl
El signo ; (punto y coma)
• Este signo permite la ejecución de 2 o mas comandos en una misma linea
set a 55; set b $a
Otros ejemplos:
puts "¡Hola Mundo!" ; puts "otra linea de caracteres“
set i 0 ; #Comentario, con un ';' para separarlo del comando
10. Algunas funciones básicas de Tcl y Otcl
Operaciones matemáticas con el comando Expr
• Por ejemplo si deseamos asignar a la variable x la suma de las variables a y b,
debemos escribir
set x [expr $a + $b]
Otros ejemplos:
set y [expr 3 * 15]
set x [expr $y+ 55]
;entonces X vale 100
set c [expr $a + $b]
set d [expr [expr $c * $c] + $x]
11. Algunas funciones básicas de Tcl y Otcl
Tipos de variables (Not Typed)
• En Tcl las variables, son sin tipo, por lo tanto una variable puede ser entero o
cadena dependiendo del valor que le asignamos.
• Por ejemplo, si asumimos que deseamos imprimir el resultado de la división 1/60
tendríamos las siguientes opciones:
• puts “[expr 1/60]”
;#entonces el resultado será 0!.
• puts “[expr 1.0/60.0] ;#entonces obtendremos el resultado correcto ya que
los valores serán interpretados como enteros.
Booleanos, Reales, Cadenas, Listas, Diccionarios, Tablas asociativas
12. Algunas funciones básicas de Tcl y Otcl
Variables escalares
• Las variables booleanos, numéricos, cadenas, listas y diccionarios son llamados
tipo escalares, debido a que pueden convertirse automáticamente en el tipo
adecuado, por ejemplo una cadena puede ser una lista:
% set frutas albaricoque
% puts $frutas
albaricoque
% set frutas "pomelo naranja banana"
pomelo naranja banana
% puts [lindex $frutas end]
banana
% puts [lindex $frutas 1]
naranja
13. Algunas funciones básicas de Tcl y Otcl
set data [gets stdin] # or
set numchars [gets stdin data]
Ingresando datos desde el teclado - gets
• En ocasiones necesitamos ingresar datos desde el teclado, en lenguaje C por
ejemplo utilizamos la función scanf.
• Si queremos caputar datos desde el teclado en Tcl debemos utilizar la función
gets tal como se muestra en el siguiente ejemplo:
• set data [gets stdin]
;#donde data es el nombre de la variable
55
• put $data
;#esto imprimirá el valor almacenado en data
(55 en el ejemplo)
puts -nonewline "Enter your name: "
flush stdout
set name [gets stdin]
puts "Hello $name"
Recordemos el uso de fflush (stdout)
En Tcl se usa
flush stdout
14. Algunas funciones básicas de Tcl y Otcl
Crear Archivos
• Para crear un archivo, debemos asignar un nombre de archivo y un nombre de
puntero el cual será utilizado por Tcl para referirse a él. Esto puede realizarse con
el comando:
• Set file1 [open filename w] ;#donde file1 es el nombre del puntero y filename es el archivo.
#cuando se ejecuta el comando anterior el sistema devuelve el channelId. p.e. file5
#es posible cerrar el archivo con el comando “set file1 [open channelId]”
• Podemos usar el comando puts para imprimir algo, pero debemos recordar que
puts genera una línea nueva por cada impresión, por lo tanto es posible aplicar el
parámetro –nonewline después de puts para evitar la nueva línea.
15. Algunas funciones básicas de Tcl y Otcl
Crear Archivos
• Utilizando el comando puts podemos ingresar una cadena de texto al archivo que
hemos abierto con el comando anterior. Como se aprecia en el siguiente ejemplo
#El siguiente comando creara también el archivo con el nombre: mi_archivo1
set archivo1 [open mi_archivo1 w]
#es posible también usar r (read) pero sobre un archivo existente.
#Luego podemos ingresar una cadena de texto
puts $archivo1 “Hola mundo mi variable es c y contiene el valor $c”
#Finalmente cerramos el archivo
set archivo1 [close channelId]
;#reemplaza channelId por el valor
16. Algunas funciones básicas de Tcl y Otcl
Ejecución de comandos de Unix con el comando exec
• Es posible ejecutar comando de unix desde la Shell de Tcl.
Ejemplo:
exec ifconfig exec clear
exec date
exce cal
Otro ejemplo:
exec xgraph data &
exec whoami
;# este comando ejecutaria el ploteo de data
17. Algunas funciones básicas de Tcl y Otcl
Agrupamiento { } , “ ”:
• Las formas de agrupar en Tcl son entre llaves y entre comillas dobles.
• Con “ ”, se representa una cadena de texto con el adicional de que es posible
intercalar el valor de las variables dentro de las comilla colocando el signo $ antes
de la variable.
• Con { }, también pueden contenerse cadenas pero no es posible intercalar el
contenido de las variables.
18. Algunas funciones básicas de Tcl y Otcl
Bloques ( ) , [ ]:
• Las formas de agrupar en Tcl son entre llaves y entre comillas dobles.
• Los ( ), sirven para encerrar los índices en las tablas asociativas, o para agrupar
expresiones aritméticas.
• Con [ ], realizan la sustitución del contenido de un resultado.
Tambien podria escribirse asi:
puts [ expr {1 + [set u 342]} ]
puts $u
19. Ejercicios
1. Elabore un programa en Tcl que permita ingresar el valor de a,b,c,y d y muestre
el promedio.
2. Elabore un programa en Tcl que permita ingresar el nombre y el precio de un
artefacto y descuente el 10% del precio, e imprima en pantalla un mensaje que
indique “el producto a comprar es xxxx y el precio final es xxxxx”.
3. Elabore un programa que le permita ingresar una cadena de texto y luego
imprimar un archivo llamado mensaje.txt con el contenido de la cadena.
21. Estructura condicional IF-ELSE
Estructura
• La estructura de este comando es:
If {expression} {
<execute some commands>
<execute some commands>
}else{
<execute some commands>
<execute some commands>
…
}
Ejemplo 1:
if {$x<0} {
set x 0
} elseif { $x<5 } {
set x 5
} else {
set x 10
}
Ejemplo 2:
if {$x>0} {
set x 55
} elseif { $x>5 } {
puts “mayor 55”
} else {
puts “menor 55”
}
Ejemplo 3:
if {$x==0} {
puts “cero”
} elseif { $x<5 } {
set x 5
} else {
set x 10
}
Ejemplo 4:
if {$x!=0} {
puts “No cero”
} elseif { $x<5 } {
set x 5
} else {
set x 10
}
22. Ejercicios
1. Elabore un programa en Tcl que permita ingresar 2 numero y muestre el mayor
2. Elabore un programa en Tcl que permita ingresar un nombre y la edad de una
persona y si es mayor de 17 años que muestre el mensaje mayor de edad, de lo
contrario que muestre el mensaje menor de edad.
3. Elabore un programa que permita ingresar un numero e indique si el numero
ingresado es par o impar.
26. Estructura Bucle WHILE
Estructura
• La estructura de este comando es:
while { unaExpresionLogica } {
unCommando
unCommando
....
}
Ejemplo 1:
set x 1
while {$x<10} {
puts $x
set x [exp $x+1]
}
Ejemplo 2:
set x 10
while {$x>0} {
puts $x
set x [exp $x-1]
}
27. Ejercicios
1. Elabore un programa que muestre todos los números impares de 3 cifras
2. Elabore un programa en Tcl que permita ingresar un numero entero y que
muestre el factorial del numero como resultado
3. Elabore un programa que permita ingresar numero, y los muestre en pantalla
hasta que se ingrese el valor 0.
29. Estructura Bucle FOR
Estructura
• La estructura de este comando es:
for {set i 0} {$i<10} {incr i} {
execute some commands
}
Ejemplo 1:
for {set i 0} {$i<10} {incr i} {
puts $i
}
Ejemplo 2:
foreach i [list "youpii" "aujourd'hui" "il fait beau" "bravo !" "bravo !"] {
puts $i
}
# no es necesario usar el comando list con valores fijos; esto es equivalente
foreach i {"youpii" "aujourd'hui" "il fait beau" "bravo !" "bravo !"} {
puts $i
}
foreach a $listaA b $listaB c $listaC {
puts "$a $b $c"
}
foreach {x y} [list Sr Gaston Sra Jeanne Sr Robert Sra Raymonde] {
puts "$x $y"
}
30. Ejercicios
1. Elabore un programa que permita generar la siguiente serie : 1, 4, 9, 16, 25, …,
100
2. Elabore un programa en Tcl que permita ingresar un número entero y luego
visualice todos sus divisores.
3. Elabore un programa que permita calcular y visualice la suma de los todos los
números impares de 3 cifras.
4. Elabore un programa que permita ordenar un vector de numero en orden
creciente utilizando el método de la burbuja.
32. Procedimientos
Crear Procedimientos
• Tcl permite crear procedimientos. Estos procedimientos pueden retornar algún
valor en cuyo caso se almacena en una variable con el comando return.
• La estructura para crear un procedimiento es la siguiente:
Creando un procedimiento llamado azul:
proc azul { param1 param2 …} {
global var1 var2
<commands>
return $something
}
33. Procedimientos
• El procedimiento recibe algunos parámetros que pueden ser objetos, archivos o
variables. En el ejemplo anterior estos parámetros se llaman param1 y param2,
etc. Estos parámetros serán usados dentro del procedimiento
• Si escribimos azul x y entonces los valores x, y serán pasados al procedimiento. Si
param1 y param2 son modificados con el procedimiento, esto no afecta los
valores de x, y. Por otro lado si nosotros deseamos que el procedimiento sea
capaz de afectar directamente las variables externas a el, entonces debemos
declarar estas variables como globales. En el ejemplo anterior var1 y var2
34. Procedimientos
Ejemplo: #crear procedimiento.
proc test {} {
set a 43
set b 27
set c [expr $a + $b]
set d [expr [expr $a - $b] *$c]
puts “c= $c d=$d”
for {set k 0} {$k<10} {incr k} {
if {$k<5}{
puts “K<5, pow=[expr pow($d,$k)]”
}else{
puts “k>=5, mod=[expr $d % $k]”
}
}
}
#llamando el procedimiento
test
35. Procedimientos
Ejemplo: #Obtener el factorial de un numero
proc Factorial {x} {
for {set result 1} {$x>1} {set x [expr $x - 1} {
set result [expr $result * $x]
}
Return $result
}
set res [Factorial $f]
puts “Factorial de $f es $res
36. Ejercicios
1. Elabore un procedimiento que permita generar la siguiente serie : 1, 4, 9, 16,
25, …, 100
2. Elabore un procedimiento en Tcl que permita ingresar un número entero y
luego visualice todos sus divisores.
3. Elabore un procedimiento que permita ordenar un vector de numero en orden
creciente utilizando el método de la burbuja.
4. Elabore un programa que muestre todos los números impares de 3 cifras
5. Elabore un programa en Tcl que permita ingresar un numero entero y que
muestre el factorial del numero como resultado
38. Introducción
• Xgraph es una aplicación para plotear datos en 2D con opciones interactivas de
paneo, zoom, impresión, entre otras. Puede plotear datos desde cualquier
cantidad de archivos sobre un mismo grafico y puede manejar tamaños ilimitados
de datos.
• Xgraph produce un archivo wysiwyg en formato POSTSCRIPT, PDF, PPTX, y ODP.
• Xgraph incluye la opción de especificar el color del ploteo para graficos con
multiples colores y también es posible variar el grosor de las lineas
39. Formatos
• Xgraph espera datos en el formato (x,y). Tipicamente debe haber un punto xy por
línea. Los valores de los datos pueden estar separados por un espacio en blanco
(o tab), comas, punto y comas.
• Los datos de multicolumna tienen muchos valores por línea. Cada valor va
separado por espacio en blanco (o tab), comas, punto y comas.
Fuente de información
http://www.xgraph.org/
40. Bibliografía
• Altman, E., & Jimenez, T. (2004). NS Simulator for beginners. Merida.
• Capella Hernández, J. (s.f.). Introducción al simulador de redes NS-2. Valencia:
Universidad Politecnica de Valencia.
• Fundación Wikimedia, Inc. (10 de setiembre de 2013). wikipedia. Obtenido de
http://es.wikipedia.org/wiki/Tcl
• UC Berkeley, LBL, USC/ISI, and Xerox PARC. (2011). The NS manual .