Sie sind auf Seite 1von 13

30 de abril de 2013

Introduccin a GNU Octave

Segunda parte

Laboratorio Abierto de Electrnica - Ciclo de seminarios introductorios

Curso Octave 2013 - Segunda parte

LABI Cursos

ndice
1. Grficos
1.1. Funciones bsicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Manipulando ventana de grficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
3
4

2. Grficos con formato


2.1. El comando figure . . . . . .
2.2. El comando subplot . . . . .
2.3. El comando axis . . . . . . .
2.4. El comando title . . . . . . .
2.5. Los comandos xlabel e ylabel
2.6. El comando hold . . . . . .
2.7. El comando grid . . . . . . .
2.8. El comando box . . . . . . .
2.9. El comando legend . . . . .
2.10. El comando close . . . . . .
2.11. Tipos de trazo y colores . . .
2.12. Uniendo formato . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.

5
5
5
5
5
6
6
6
6
6
6
6
6

3. Grficos 3D
3.1. El comando mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. El comando meshgrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3. El comando meshc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8
8
8
9

4. Generalidades de la programacin en Octave

5. Control de flujo de programa


5.1. Condicionales . . . . . .
Sentencia if - else - else if
5.2. Bucles . . . . . . . . . .
Sentencia While . . . . .
Sentencia For . . . . . .
5.3. Control de flujo en bucles
El comando pause . . . .
El comando fflush . . . .
El comando break . . . .
Los comandos tic y toc .

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

Pgina 2

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

10
10
10
11
11
12
12
12
13
13
13

Curso Octave 2013 - Segunda parte

1.
1.1.

LABI Cursos

Grficos
Funciones bsicas

Para graficar disponemos de dos funciones; plot() y stem(). La primera lo hace con trazo continuo
(que no es ms que una interpolacin del conjunto de puntos que define a la curva), mientras que la segunda
grfica en forma discreta los puntos de la curva. Recordemos que Octave internamente procesa todas las
funciones o curvas en un conjunto de valores que de alguna forma definimos nosotros. Luego, la representacin que elijamos depender de lo que se quiera mostrar.
Si estas funciones se utilizan recibiendo como argumento tan solo el vector que desea visualizarse, lo
que obtenemos luego de la ejecucin es un grfico con ejes cuya escala se ajusta automticamente tomando
como referencia todos los puntos disponibles. A su vez, no tenemos informacin sobre lo que representa
cada eje, ni sobre lo que representa la o las curva/s graficada/s. Para poder exhibir toda esta informacin
adicional y/o ajustar escalas, dar formato, etc. se cuenta con un conjunto de herramientas que van desde argumentos opcionales de las funciones presentadas en esta seccin, como as tambin comandos y funciones
extras, que cumplen tareas especficas. Las mismas se presentan en la seccin siguiente.

Figura 1: Grfico sin formato usando plot()

Pgina 3

Curso Octave 2013 - Segunda parte

LABI Cursos

Figura 2: Grfico sin formato usando stem()


Las invocaciones de argumento nico del comando plot y del comando stem se muestran a continuacin
y corresponden a las figuras anteriores:
>> plot(curva)
>> stem(curva)
Si queremos en cambio graficar solo para un rango de valores, podemos modificar la forma en que
usamos las funciones plot() y stem(), pasando como primer argumento el vector de valores respecto del cual
queremos representar la curva o funcin evaluada.
>> plot(INICIAL:FINAL, curva)
>> stem(INICIAL:FINAL, curva)

1.2.

Manipulando ventana de grficos

Si bien la interfaz no es muy intuitiva al respecto, es posible tener control sobre la figura que despliega
el grfico generado. Lo ms importante de esta funcionalidad es la posibilidad de hacer zoom. Esto lo
llevamos a cabo clickeando el botn derecho del mouse sobre alguna zona del grfico, y arrastrando el
mouse delimitando una regin. Luego volviendo a hacer click lo que observamos es la regin delimitada,
ampliada.
Asimismo se pueden utilizar comandos de teclado para manejar otras funciones relacionadas. Los ms
comunes son p, vuelve al zoom anterior, n va al zoom prximo, e redibuja el grfico, y el botn
central del mouse marca sobre el grfico las coordenadas del punto en el que nos encontramos.
Se puede acceder a una lista completa de todos los comandos disponibles para el control de una ventana
de grficos. Para esto se debe presionar la tecla h luego de haber generado la grfica, y sin cerrar la
ventana que la contiene. La lista se despliega en el intrprete de Octave.
Pgina 4

Curso Octave 2013 - Segunda parte

2.

LABI Cursos

Grficos con formato

En la seccin anterior se presentaron los comandos bsicos para graficar funciones. Sin embargo Octave
brinda una serie de comandos que permiten modificar la apariencia de los grficos. Se puede por ejemplo
definir los ejes, cambiar el color y el tipo de trazo de cada funcin graficada, agregar nombre a los ejes,
establecer una referencia para indicar qu representa cada funcin graficada, entre muchas otras funciones.
Nota: Todos los comandos que se listan a continuacin son opcionales y al incluirse secuencialmente
actan sobre la ltima figura que se haya declarado. Adems, si bien se ejemplificarn para el comando
plot, funcionan en forma anloga con stem.

2.1.

El comando figure

Cuando se genera un grfico el mismo se despliega sobre un objeto que se denomina Figure. Si queremos
graficar distintas cosas y poder verlas todas a la vez por separado, necesitamos definir una figura por cada
grfico porque de lo contrario el nuevo grfico se genera sobre el anterior, y solo vemos el ltimo que
hayamos ejecutado. Para esto debemos definir los grficos de la siguiente forma:
>>figure(1); plot(grafico1);
>>figure(2); plot(grafico2);
o bien,
>> figure; plot(grafico1);
>> figure; plot(grafico2);
Ambos fragmentos de cdigo hacen exactamente lo mismo.

2.2.

El comando subplot

El comando subplot permite graficar varias curvas diferentes dentro de la misma figura, es decir en
una nica ventana, pero dividiendo a la misma en tantos grficos como filas y columnas pasemos como
argumento. Por ejemplo, si escribimos:
>>figure(1);
>>subplot(3,2,1) #Subplot(FILAS, COLUMNAS, INDICE)
>>plot(grafico1);
Tendremos una figura particionada de la forma; tres filas - dos columnas, y el grfico 1 se mostrar en
la particin 1. Es decir, lo veremos representado en el primero de todos los casilleros en los que se divide
la figura.

2.3.

El comando axis

Para indicarle a Octave que el grfico queremos realizarlo solo para un rango de valores de los ejes
definidos por nosotros, debemos utilizar el comando axis(). La forma de uso es:
>> axis([X_INICIAL X_FINAL Y_INICIAL Y_FINAL])

2.4.

El comando title

Utilizando este comando agregamos ttulo al grfico:


>>title("Titulo")
Pgina 5

Curso Octave 2013 - Segunda parte

2.5.

LABI Cursos

Los comandos xlabel e ylabel

Utilizando este comando se agregan nombres a los ejes:


>>xlabel("Eje X"); ylabel("Eje Y");

2.6.

El comando hold

Cuando este comando est activo, las acciones que se realicen sobre la figura de grfico se efectuarn
superpuestas. Su utilidad radica en que por cada comando agregado la figura no se vuelve a generar, como
s ocurre si se omite la mensin de este comando en el mbito de la figura. Este comando es ejecutado de la
forma hold on o bien hold off.

2.7.

El comando grid

Este comando ejecutado tambin de la forma grid on o bien grid off, activa o desactiva respectivamente
una grilla sobre el grfico.

2.8.

El comando box

Ejecutado en forma equivalente a grid, es decir box on o bien box off, activa o desactiva respectivamente
el marco alrededor del grfico, dejando solo visibles los ejes.

2.9.

El comando legend

Por otro lado, cuando se tiene ms de una curva o funcin por grfico, en general se indica a qu conjunto
de datos corresponde cada curva. Para eso se emplea el comando legend, de la siguiente forma:
>>legend("curva 1", "curva 2", "location", pos, "options",...)

2.10.

El comando close

close cierra la ltima figura abierta y si se lo invoca junto con el modificador all cierra todas las figuras.

2.11.

Tipos de trazo y colores

Los grficos en Octave admiten cambiar el tipo de trazo (o, x, *, -, +) y color (b, k, c,
g, y, r). Tambin pueden cambiarse el tamao de los markers con MarkerSize y el grosor del trazo
continuo con LineWidth. La manera de indicar cada uno de estos parmetros al intrprete no es nica. Es
decir, existen diferentes sintaxis que llevan a los mismos resultados.
plot(1:100,r+,Markersize,20,LineWidth,2)

2.12.

Uniendo formato

Finalmente, si ponemos todos estos comandos en accin juntos, podemos obtener grficos ms personalizados y con informacin til exhibida de forma clara:

Pgina 6

Curso Octave 2013 - Segunda parte

LABI Cursos

Figura 3: Grfico con formato

Figura 4: Grficos mltiples con formato


Pgina 7

Curso Octave 2013 - Segunda parte

3.

LABI Cursos

Grficos 3D

En las secciones anteriores vimos cmo generar grficos sencillos, y cmo agregarles formato para
que fuese ms claro visualizar la informacin, entre otras cosas. Sin embargo todos esos grficos eran
bidimensionales. En esta seccin veremos cmo generar graficos con 3 dimensiones.

3.1.

El comando mesh

Teniendo una superficie definida sobre un conjunto de puntos obtenidos de alguna forma, para graficar
esta superficie utilizamos mesh(z), donde z es la funcin dependiente del par de variables que definen cada
punto del espacio, digamos x e y .
Luego, de ejecutar :
>> mesh(z)
Obtenemos:

Figura 5: Grfico 3D de un paraboloide

3.2.

El comando meshgrid

Pero a la hora de generar un grfico en tres dimensiones, lo que necesitamos vectorialmente hablando,
es una matriz que represente el valor de la funcin para cada par de puntos. Es decir, si tenemos una
funcin z(x, y), para Octave, z es una matriz que en cada una de sus componentes tiene el valor de un
par de puntos (x, y). Pero en general puede ocurrir que tengamos definidos vectores x e y sobre los que
pretendamos obtener una cierta funcin de esas variables. Supongamos la funcin del ejemplo anterior:
z(x, y) = x2 + y 2 . El problema es que si definiramos z de esta forma, obtendramos un vector en lugar de
una matriz, y el grfico sera de la forma:
Pgina 8

Curso Octave 2013 - Segunda parte

LABI Cursos

Figura 6: Grfico 3D de un parbola en tres ejes coordenados


Para evitar esto y tener un grfico como el de la primer figura, lo que debemos hacer es usar la funcin
meshgrid(), que recibe un vector por cada una de las variables independientes, en este caso x e y, y devuelve
una matriz por cada uno de estos vectores, que facilita la representacin de z(x, y). Si no tuviramos la
funcin. Luego, la figura 5 responde al siguiente cdigo:
>>z = zeros(N,M);
>>[X Y] = meshgrid(x, y);
>>z = X.^2 + Y.^2;
>>mesh(X,Y,z);

3.3.

El comando meshc

Por ltimo, existe un tercer comando que realiza la misma funcin que mesh llamado meshc, y que
adems de graficar la superficie grafica sus curvas de nivel proyectadas en el plano.

4.

Generalidades de la programacin en Octave

A diferencia de otros lenguajes, en Octave no hay que agregar bibliotecas a nuestro cdigo, ni definir (a
menos que lo deseemos por alguna razn en particular que veremos ms adelante) nada en archivos externos
al que contendr nuestro cdigo. Tampoco har falta definir ninguna clase de header o encabezado, como
ocurre a veces, ni necesitamos instalar ninguna clase de compilador para poder ejecutar ese cdigo. Recordemos que Octave propone un lenguaje de scripting, el cual no se compila, sino que se va interpretando
lnea a lnea a medida que se van ejecutando.

Pgina 9

Curso Octave 2013 - Segunda parte

5.

LABI Cursos

Control de flujo de programa

Empezamos este curso diciendo que Octave era un programa de clculo numrico, y que dispona de un
lenguaje de programacin propio para llevar a cabo los distintos tipos de tareas que nos permite realizar. Sin
embargo hasta el momento no hemos visto nada inherentemente orientado a programar. Solo nos dedicamos
a definir variables de distintas caractersticas, y operar sobre ellas valindonos de un conjunto de funciones
de las que nos provea el programa.
En esta seccin y las siguientes empezaremos entonces a entender cmo funciona Octave cuando uno
desea programar sus propios scripts en l . Para esto iremos describiendo en orden todas aquellas cosas
propias de cualquier lenguaje de programacin indicando como se implementan dentro de Octave.

5.1.

Condicionales

Todo lenguaje de programacin (en particular aquellos procedurales) proporcionan alguna herramienta
para comparar elementos y tomar decisiones en funcin del resultado de la comparacin. En general a este
tipo de acciones que se toman en funcin de una comparacin se conocen como condicionale, porque
permiten decidir en funcin de una condicin.
Sentencia if - else - else if
Al igual que en muchos otros lenguajes, la sentencia if ser en este caso la encargada de permitirnos
decidir segn una condicin impuesta, si ejecutamos o no un fragmento de cdigo. La misma se puede
acompaar adems por su correspondiente else si resulta pertinente. Esto es, si se precisa un condicional para definir entre dos posibles bloques de cdigo a ejecutar. Para realizar esto nos valdremos de los operadores
lgicos estudiados en la primer parte de este curso. La sintaxis es la siguiente:1
s = 6;
if s > 0 && s < 10
if s == 5
disp("El nmero es 5.")
else if s < 5
disp("El nmero es menor a 5.")
else
disp("El nmero es mayor a 5.")
endif
endif
endif

Notar que no hay parntesis ni ningn otro tipo carcter que encierre a la expresin de la condicin. En
octave los parntesis son opcionales, como tambin lo es la coma luego de la expresin de la condicin, y
el indentado de los bloques de cdigo es tambin opcional. Lo nico que debe cumplirse es que los bloques
condicionales se finalizan con la palabra end. Algo para remarcar es que mientras que end funciona y es
compatible con Matlab, en Octave puede utilizarse una versin modificada de end que es endif. Esto hace
que sea ms clara la lectura cuando hay muchos bloques anidados, y se vuelve complicado identificar dnde
se cierra cada bloque. Ocurrir algo similar con las dems construcciones que veremos en esta seccin.
1

Para los siguientes ejemplos vamos a asumir que trabajamos dentro de un archivo porque resulta ms cmodo que hacerlo
directamente en el intrprete.

Pgina 10

Curso Octave 2013 - Segunda parte

5.2.

LABI Cursos

Bucles

Otra herramienta necesaria en un lenguaje de programacin convencional, es la posibilidad de iterar


sobre hasta que se verifique una determinada condicin impuesta inicialmente. Para esto en Octave, de
la misma forma que en muchos otros lenguajes, dispone de las sentencias while y for. Veremos entonces
algunas formas de uso, y la sintaxis de las mismas.
Sentencia While
En esta sentencia se define una condicin, y el cdigo contenido dentro de sta sentencia se ejecuta
tantas veces como tome cumplirse la condicin. Como puede verse el funcionamiento es equivalente al de
cualquier otro lenguaje.
La forma en que se define un bloque while es muy similar a la definicin de un if, excepto porque los
bloques se finalizan con end o endwhile.
# Defino un vector de entrada que puede ser cualquier dato a procesar
vector_entrada = [1 2 3 4 5 6 7 8 9];
# Guardo el largo del vector en una variable para iterar tantas veces
# como posiciones ocupe el vector de entrada
N = length(vector_entrada);
# Declaro un contador para corroborar la condicin.
# Hay que inicializar en 1 porque si se lo va a usar como ndice de un
# vector, no puede iniciar en 0
contador = 1;
# Declaro un vector nulo del largo del vector de entrada. Aqui voy a
# almacenar el resultado del procesamiento
vector = zeros(N,1);
# Inicio del ciclo o bucle "while"
while contador <= N
vector_salida(contador) = vector_entrada(contador) + contador;
contador += 1;
endwhile
vector_salida
Es importante notar algo que hemos mencionado anteriormente respecto de la definicin dinmica de
los vectores. Si bien no hara falta definir el vector_salida con un largo fijo, en los casos en que se conoce
el largo de la entrada de antemano, es preferible definir un vector vaco y luego completar cada posicin
con el nuevo valor, que declararlo con el valor de un nica posicin y agregarle elementos a medida que se
itera sobre l. La razn es que Octave, al modificarse dinmicamente la longitud de un vector, lo mueve en
memoria a una nueva posicin copiando todos sus elementos. Y esto es costoso en cuanto a procesamiento
y tiempo de ejecucin.
En general, while nos da la libertad de utilizar otro tipo de condiciones, no solo una variable contadora.
Por ejemplo podra definirse que una variable que cambio su valor de cero a uno cuando se verifica una
determinada condicin. Pero eso tiene ms que ver con la programacin en s misma, y no con el manejo
de Octave. Con lo cual no lo trataremos en este curso.
Pgina 11

Curso Octave 2013 - Segunda parte

LABI Cursos

Sentencia For
Esta sentencia tiene caractersticas idnticas a nivel conceptual, que el while. La nica diferencia real
radica en cmo se trata a la condicin. En este caso s se est definiendo una condicin de corte inherentemente relacionada con cuntas veces se realiza una serie de acciones. La sintaxis nuevamente tiene
parntesis opcionales, indentado opcional y los bloques pueden finalizar con end o endfor. A continuacin
vemos un ejemplo que ilustra el uso de la sentencia:
# Defino un vector de entrada que puede ser cualquier dato a procesar
vector_entrada = [1 2 3 4 5 6 7 8 9];
N = length(vector_entrada);
# Declaro un contador para corroborar la condicin
contador = 0;
# Declaro un vector nulo del largo del vector de entrada. Aqui voy a
# almacenar el resultado del procesamiento
vector = zeros(N,1);
# Inicio del ciclo o bucle "for"
for contador = 1:N
vector_salida(contador) = vector_entrada(contador) + contador;
endfor
vector_salida

5.3.

Control de flujo en bucles

El comando pause
En determinadas ocasiones nos interesar que las cosas ocurran en tiempos controlados. Esto es, podemos requerir que el cdigo se ejecute a una velocidad menor a la inherente, dada por la computadora. O
bien directamente esperar hasta recibir la instruccin del usuario para continuar con el avance de nuestro
programa.
Para ilustrar mejor estas situaciones, digamos primero que nuestro programa realiza primero la carga
de una serie de datos, muestra los mismo por pantalla, y luego ejecuta una porcin de cdigo que muestra
otra informacin en pantalla dejando fuera del marco de los lmites de nuestro intrprete, la informacin
referida a la carga de datos. En estas situaciones podemos pausar la ejecucin luego de la carga de datos,
corroborar que los mismos se cargaron correctamente, y recin en ese momento indicarle al programa que
puede continuar. El comando a utilizar se llama precisamente pause, y puede utilizarse sin argumentos,
en cuyo caso impedir que muestro cdigo se ejecute hasta que presionemos una tecla. O puede utilizarse
recibiendo como argumento el tiempo en segundos que quiere que se pause la ejecucin.
# Cuando el programa ejecuta este lnea, queda a la espera
# de que se presione una tecla para continuar
>> pause;
# El programa detiene su ejecucin por 5 segundos
>> pause(5);
Pgina 12

Curso Octave 2013 - Segunda parte

LABI Cursos

El comando fflush
Una particularidad de los bucles o ciclos en Octave es que lo que ocurre durante la ejecucin de los
mismos no se muestra en el intrprete aunque dejemos las lneas sin ;. Esto a veces es un problema
porque en general, cuando un bucle no termina nunca de ejecutarse, o nuestro cdigo tiene algn problema
de alguna ndole, es una prctica comn imprimir resultados parciales en pantalla para buscar el error.
Para el caso en el que se quiera hacer esto, Octave dispone de un comando llamado fflush(flujo_de_salida)
En general el flujo de salida estndar es stdout en este caso, el propio intrprete. No obstante hay que explicitarlo:
for contador=0:N
# No se debe poner el ; si se quiere usar fflush()
disp("Hola mundo")
fflush(stdout)
endfor
Nota: Si se quisiese mantener el efecto de este comando durante todo el script, puede inicializarse el
archivo incluyendo una nica sentencia del siguiente modo:
>> more off;
El comando break
En ocasiones es necesario detener la ejecucin de un determinado bucle en ejecucin. Puede ser esperable disponer de una herramienta que nos permita detener el proceso si se est en busca de un elemento y el
mismo es encontrado. Para estos casos existe un comando llamado break, que hace exactamente eso. Para
entender como funciona observemos el siguiente caso:
for contador = 1:N
vector_salida(contador) = vector_entrada(contador) + contador;
if vector_salida(contador) == 10
break;
else
vector_salida(contador)
fflush(stdout);
endif;
endfor;
Los comandos tic y toc
Sirven para contar la cantidad de tiempo de ejecucin de un fragmento de cdigo. El conteo comienza
con la invocacin del comando tic y termina al invocar el comando toc.

Pgina 13

Das könnte Ihnen auch gefallen