No estas registrado.
al parecer hay un error en la condición del for y en la sintaxis del print ... así funciona:
for ($i=1; $i<=10; $i++)
{
print "Esto se repetira hasta que la variable ".$i.", valga 10\n";
}
Desconectado
sip...
al parecer hay un error en la condición del for y en la sintaxis del print ... así funciona:
for ($i=1; $i<=10; $i++)
{
print "Esto se repetira hasta que la variable ".$i.", valga 10\n";
}
o también:
for ($i=0; $i<10; $i++)
{
print "Esto se repetirá 10 veces, desde cero a nueve ($i)\n";
printf("\tEsta es la vuelta numero %03d\n",$i+1);
}
(notese la variante printf)
o al revés:
for ($i=10; $i>0; $i--)
{
printf("\tEsta es la vuelta numero %03d\n",$i);
}
Desconectado
Estimado me referia a lo que señala jvergara
Hoy 12:14 al parecer hay un error en la condición del for y en la sintaxis del print ... así funciona:
for ($i=1; $i<=10; $i++)
{
print "Esto se repetira hasta que la variable ".$i.", valga 10\n";
}
nop... es que no tiene por que funcionar.
en el for hay tres secciones, las cuales están separadas por ";", la primera sección indica que valor debe tener la variable escalar al inicio, la segunda sección corresponde a la condición de termino... osea el bloque de código se ejecuta mientras la condición sea "verdad", y la tercera sección es la de incremento de variable.
tu tienes en el for, que "parta en uno", y le dices en la condicionante, "lo ejecute mientras sea 10".... osea nunca se ejecutara, dado que desde el principio la variable es distinta a 10
(me meto de puro patudo, sorry fike)
gokkuu escribió:me imprime infinito esto....
For
Veamos la sintaxis de esta estructura y luego la comentamos:
Código:
for ($i=1; $i=10; $i++)
{
print "Esto se repetira hasta que la variable i, valga 10";
}
algo no funciona .........
"El segundo parametro tenemos i=10, este es el parametro de corte, se le llama asi, ya que cuando i valga 10, el ciclo for habra llegado a su fin."
"Tu mejor consejero será la experiencia.. "
Twitter@gokkuu2
youtube: Gokkuu
Desconectado
al parecer hay un error en la condición del for y en la sintaxis del print ... así funciona:
for ($i=1; $i<=10; $i++)
{
print "Esto se repetira hasta que la variable ".$i.", valga 10\n";
}
si asi me funciona
"Tu mejor consejero será la experiencia.. "
Twitter@gokkuu2
youtube: Gokkuu
Desconectado
Yo no habia tenido ni un problema con el original. Me parece que no es relevante poner i con comillas y puntos, si alguien lo hace sin eso no deberia tener problemas.
Desconectado
Yo no habia tenido ni un problema con el original. Me parece que no es relevante poner i con comillas y puntos, si alguien lo hace sin eso no deberia tener problemas.
eso de las comillas y punto hay que entenderlo bien, lo que haces es "CONCATENAR" o juntar dos valores y se vean consecutivos
osea:
my $variable1="hola benja";
my $variable2="como estas";my $variable3=$variable1." ".$variable2;
print $variable3;
acostúmbrense a usar la palabra "my" para definir variables (por un tema de ámbito)
por cierto la asignación a $variable3 también se puede hacer así:
my $variable3="$variable1 $variable2";
Desconectado
".$i." y en ese caso que estariamos concatenando?
Desconectado
"Esto se repetira hasta que la variable ".$i.", valga 10\n" ( concatenado )
pero que es lo mismo que imprimieramos todo juanto
Esto se repetira hasta que la variable $i, valga 10\n"
onofre?
Desconectado
".$i." y en ese caso que estariamos concatenando?
eso es un error de sintaxis, algo como esto sería concatenar
my $xxx=" ".$i." ";
osea un espacio al principio, el valor de $i y un espacio al final; tres valores diferentes, que se convierten en uno solo (sumado por así decirlo) en la variable "$xxx"
Desconectado
Ya amigos del foro que siguen el curso de fikegroup. Como habian bastantes ganas de aprender y fike esta medio escaso de tiempo, el amigo NAX con la ayuda de Katy nos daran una mano para que las ganas no queden en nada y sigamos aprendiendo, te seguimos esperando fikegroup ,pero NAX y Katy nos colaboraran mientas dispongas de tiempo. Asi que dentro de estos dias se subiran nuevos post en relacion al tema.( Todo lo que sume es bienvenido ).
Saludos
Desconectado
Como dice Benja, colaboraremos en la continuación del curso.
Primera lección, printf:
printf permite formar texto, utilizando secuencias de conversión.
básicamente sirve para desplegar texto, similar a print, pero permite formatear la salida
Ejemplos básicos de printf:
printf("Hola Mundo!\n");
printf("numero %d\n",1);
printf("saludo '%s'\n","hola");
printf("texto formateado '%20s'\n","texto");
printf("texto formateado '%-20s'\n","texto");
explicaciones:
printf("Hola Mundo!\n"); desplegará por pantalla el texto "Hola Mundo!" incluyendo un salto de carro
printf("numero %d\n",1); desplegará por pantalla el texto "numero 1" incluyendo un salto de carro. La secuencia de conversion "%d" será reemplazada por el primer argumento osea 1
printf("saludo '%s'\n","hola"); desplegará por pantalla el texto "saludo 'hola'" incluyendo un salto de carro. La secuencia de conversion "%s" será reemplazada por el primer argumento osea "hola"
printf("texto formateado '%20s'\n","texto"); desplegará por pantalla el texto "texto formateado ' texto'" incluyendo un salto de carro. La secuencia de conversion "%20s" será reemplazada por el primer argumento osea "texto" el cual será justificado a la derecha y se presentará en 20 caracteres
printf("texto formateado '%-20s'\n","texto"); desplegará por pantalla el texto "texto formateado 'texto '" incluyendo un salto de carro. La secuencia de conversion "%-20s" será reemplazada por el primer argumento osea "texto" el cual será justificado a la izquierda y se presentará en 20 caracteres, la justificación a la izquierda es gracias al signo -
secuencias de conversión disponibles:
%% a percent sign
%c a character with the given number
%s a string
%d a signed integer, in decimal
%u an unsigned integer, in decimal
%o an unsigned integer, in octal
%x an unsigned integer, in hexadecimal
%e a floating-point number, in scientific notation
%f a floating-point number, in fixed decimal notation
%g a floating-point number, in %e or %f notation
Notas
* Es importante entender el comando printf dado que nos permite estructurar los datos y hacer mas legible la entrega de información.
* Cualquier error u omisión hacerla saber para corregir a la brevedad.
* Haga pruebas para entender, y realice consultas para clarificar.
Próxima entrega
paso de argumentos por linea de comando
Desconectado
No habia tenido tiempo para pasearme por estos lugares, felicito a nax por continuar con el curso, por mi parte, con el horario que tengo no podre meterme al foro hasta diciembre mas o menos, hasta que termine mi examen. Les comento a los que siguen en contacto conmigo que tome un curso muy peculiar, lo dicta un fisico medio loco... se llama fisica bursatil bueno ya les contare un poco mas por mail.
Saludos a todos
Desconectado
Bueno para redondear un poco en el tema del printf, a continuación hablaremos un poco de las secuencias de escape...
y es que hay caracteres que no se pueden representar de forma fácil.
por ejemplo:
como puedo representar una comilla doble (")??
resulta que cuando imprimimos por pantalla con print o printf, empezamos un texto con (") y lo cerramos con la misma....
entonces, si escribimos: print "hola mundo!!"feo";
tendríamos un problema, dado que la segunda comilla (después del !!) cerraría la sentencia... por tanto tendríamos un error de sintaxis...
pero si quisieramos hacer que nuestro programa en perl despliegue esa comilla como parte del texto, deberíamos poner una secuencia de escape.
así: print "hola mundo!!\"feo";
hay otras secuancias de escape, por ejemplo si queremos deplegar por pantalla el backslash debería ser así: print "mostrando sl backslash \\";
para desplegar una secuencia de escape, debemos anteponer un backslash (\)
Secuencias:
\a Sonido audible (bell)
\b Retroceso (backspace)
\f Salto de formato (formfeed)
\n Saltar una línea (linefeed)
\r Retorno de carro (carriage return)
\t Tabulación horizontal (H Tab)
\v Tabulación vertical (V Tab)
\\ Barra invertida (backslash) [2]
\' Apóstrofo (comilla simple)
\" Doble comilla
\? Interrogación
\O O = cadena de hasta tres dígitos octales
\xH H = cadena de dígitos hexadecimales
\XH H = cadena de dígitos hexadecimales
Explicación:
existen 33 de estos caracteres que no tienen representación gráfica; son los denominados caracteres de control. Con el fin de poder representarlos en el código fuente, se recurrió al artificio de representarlos utilizando una barra invertida (\) seguida de otra serie de caracteres
Desconectado
Segunda lección, paso de argumentos por linea de comando
cuando ejecutamos nuestro programa perl, generalmente lo haremos de la siguiente manera:
perl nuestro_programa.pl
con eso basta para ejecutarlo... pero y como hacemos para darle parametros de entrada (argumento de ejecución)???
simple:
perl nuestro_programa.pl arg1 arg2 xx hola cha 4 5 6
pero... como recibimos esos argumentos?
facil, como comentaba fike, existen tres tipos de datos base en perl:
* escalares: para numeros y texto
* arrays: (arreglos) para secuencias de datos (o paquetes consecutivos)
* hash-maps: para listas de par "clave valor"
si fuera chino lo que estoy hablando, no se preocupen, ya lo entenderán, hasta el momento ustedes han visto los escalares para representar texto o números, ahora verán las arrays (arreglos de memoria); y es en una de estas estructuras donde residen los argumentos de invocación (los argumentos en el ejemplo anterior son; arg1 arg2 xx hola cha 4 5 6 -8 en total-).
Para acceder a los argumentos de invocación, empleamos la variable interna llamada ARGV (argument value).
ARGV es una array que contiene cada uno de los argumentos pasados al momento de invocación.
por ser un arreglo, su definición como arreglo es @ARGV, pero para acceder a cada elemento, debemos usar el subíndice ([posición]).
por ejemplo: el primer elemento del arreglo es el numero cero, entonces accederíamos al primero así: $ARGV[0]
Entonces, un arreglo podría ser una colección de escalares? si de hecho en este caso es así.
entonces, para que nos sirven los argumentos de invocación?
resulta, que cuando queramos ejecutar nuestro sistema o "informe automático", queremos hacerlo sobre cualquier histórico de precios, entonces sería útil por ejemplo invocar nuestro programa así: perl nuestro_programa.pl IPSA;
y que de esa manera el informa sea realizado sobre el histórico de precios del IPSA, en ves de IPSA puede ir COPEC, LAN, BSANTADER, o cualquier papel o índice de mercado.
como podemos recorrer los argumentos de invocación?
Simple, ssamos un ciclo, así:
foreach my $arg ( @ARGV )
{
print "$arg\n";
}
osea: por cada @ARGV se almacenará la unidad en la variable $arg, y será desplegado por pantalla con print.
y como puedo desplegar el primer argumento?
print "$ARGV[0]\n";
o
printf("$ARGV[0]\n");
o
printf("%s\n",$ARGV[0]);
Notas
* es importante saber como rescatar lo argumentos de linea de comando, para dar un comportamiento particular (o selectivo), a nuestro programa perl.
* los argumentos de invocación son útiles para definir el origen de los datos con los que trabajaremos.
Próxima entrega
Operaciones con archivos 1
Desconectado
Agradeceré vuestro feedback para saber si alguien esta interesado en el curso.
Consultas bienvenidas.
Desconectado
Si..... interesado y estudiando a mi ritmo.
Desconectado
dale nax, por aca siguiendo el curso ... podrias dejar algunos ejercicios practicos para ir aplicando lo que pasas en clases
Desconectado
Dele no mas man. Con unos ejercicios quedamos tiqui taca, Se agradece.
Desconectado
muy buena clase don nax. aqui aprendiendo y muy agradecido de todos los teachers .
Saludos y buen trading a todos
Desconectado
Refuerzo: vectores (arrays)
los vectores, en programación, son lugares de la memoria, destinados al almacenamiento de elementos contiguos.
Cada elemento del vector, se accede mediante un índice (posición), donde en un vector de 10 posiciones, la primera posición es la cero, y la última la nueve.
un vector también puede ser llamado arreglo o array.
un arreglo vacío se define así:
my @arreglo=();
la @ denota un arreglo, un $ denota un escalar.
Para esta lección, cada elemento del arreglo será un escalar; por tanto si quisiéramos acceder a cualquier posición válida, deberíamos emplear el simbolo $ seguida del arreglo, más el índice al cual queremos acceder. P.Ej:
print $arreglo[0];
El ejemplo anterior despliega por pantalla el primer escalar del vector.
Tenga claridad que al definir un arreglo o al hacer referencia a este en su totalidad (osea todos los elementos), empleamos el caracter @, pero para referirnos a un elemento especifico, lo hacemos con el caracter $.
para agregar elementos al final del vector, usamos la función push. P.Ej:
my @open = ();
my @high = ();
my @low = ();
my @close = ();
my @volume = ();for ( my $i = 0; $i < 100; $i++ )
{
push ( @open, $i );
push ( @high, $i * 10 );
push ( @low, $i - 100 );
push ( @close, $i * 100 );
push ( @volume, $i * 1000 );
}
para saber cuantos elementos tiene nuestro vector, emplearemos la función scalar (existen otras formas, pero esta será la que emplearemos).
En el siguiente ejemplo, se recorrerán los arreglos desde inicio a fin, y cada elemento almacenado será desplegado por pantalla con printf
for ( my $i = 0; $i < scalar ( @open ); $i++ )
{
printf ( "open[$i]=%d\n", $open[$i] );
printf ( "high[$i]=%d\n", $high[$i] );
printf ( "low[$i]=%d\n", $low[$i] );
printf ( "close[$i]=%d\n", $close[$i] );
printf ( "volume[$i]=%d\n", $volume[$i] );
}
ahora, si quisiéramos mostrar el contenido del arreglo de forma "chancha", simplemente hacemos lo siquiente:
print "@open\n";
print "@high\n";
print "@low\n";
print "@close\n";
print "@volume\n";
funciones para operar con arreglos:
push(@array,Element) Adds to the end of an array
pop(@array) Removes the last element of the array
unshift(@array,Element) Adds to the beginning of an array
shift(@array) Removes the first element of an array
delete $array[index] Removes an element Spam index number
Nota: En un arreglo, cada posición, no solo puede contener un escalar, pueden ser estructuras mas complejas, pero esas quedan para vuestra investigación.
un sitio recomendado: Arrays en Perl
Hagan sus ejercicios y preocúpense por entender esto de los arreglos, dado que serán las estructuras que emplearemos para el "Informe automático".
He realizado ciertas alteraciones a la planificación del curso, dejaremos para después los archivos, antes deben saber arreglos y funciones
Próxima entrega: Funciones
No dude en hacer consultas
Desconectado
Interesante las múltiples posibilidades y la lógica de los arrays, no tengo preguntas por el momento pero están muy buenas las clases
Desconectado
Resueltas mis dudas man, vamos bien....
Desconectado
Refuerzo: funciones
Las funciones son pedazos de código de programación, los cuales pueden ser utilizadas múltiples veces, desde cualquier parte de nuestro programa.
para definir una funcion, se hace así
sub saludar(){
print("Hola!!\n");
}
la función anterior, se llama saludar, se encargará de hacer un print cada vez que sea invocada.
Y para invocar una función, se hace así: "saludar();"
el programa entero es el siguiente:
sub saludar(){
print("Hola!!\n");
}saludar();
(copiar/pegar en sus programa el quote anterior, y lo ejecutan)
También es posible entregar argumentos (parámetros de entrada) a la función así:
sub saludar_con_mensaje()
{
my $primer_argumento = shift;
my $segundo_argumento = shift;
my $tercer_argumento = shift;
print ( "Hola!! $primer_argumento $segundo_argumento $tercer_argumento\n" );
}
&saludar_con_mensaje ( "cabros", "del", "foro" );
(shift es el encargado de sacar los argumentos secuencialmente)
es posible invocar funciones desde otras funciones así:
sub saludar()
{
print ( "Hola!!" );
}sub saludar_con_mensaje()
{
my $primer_argumento = shift;
my $segundo_argumento = shift;
my $tercer_argumento = shift;
saludar();
print ( " $primer_argumento $segundo_argumento $tercer_argumento" );
}saludar();
print ( "\n" );&saludar_con_mensaje ( "cabros", "del", "foro" );
print ( "\n" );
Las funciones nos servirán, por ejemplo, para aplicar una SMA a un vector de precios...
imaginen la función "sub SimpleMovingAverage(){....}" y que esta nos permita calcular la media simple... el que la haga se gana una estrellita en la mano.
Próxima entrega: archivos 1
No dude en hacer consultas
Desconectado
Man en la frase
&saludar_con_mensaje ( "cabros", "del", "foro" );
comienza con un &, puedes explicar su importancia, ya que sin el & no funca.
Desconectado
...comienza con un &, puedes explicar su importancia, ya que sin el & no funca.
diferentes formas de hacer lo mismo, prueba con esto:
saludar();
print ( "\n" );saludar_con_mensaje ( "cabros", "del", "foro" );
print ( "\n" );sub saludar()
{
print ( "Hola!!" );
}sub saludar_con_mensaje {
my $primer_argumento = shift;
my $segundo_argumento = shift;
my $tercer_argumento = shift;
saludar();
print ( " $primer_argumento $segundo_argumento $tercer_argumento" );
}
(solo cambia el lugar de la definición... ahora si funka sin el &)
Desconectado
Complemento: funciones
las funciones también pueden devolver valores gracias a "return"
my $p = promedio ( 1, 3 );
printf ( "el promedio es: %0.3f", $p );sub promedio()
{
return ( $_[0] + $_[1] ) / 2;
}
Fíjense la diferencia, que al recibir los argumentos de entrada, he empleado un vector ($_[0] y $_[1])
(otra forma de hacer lo mismo)
Desconectado
# funciones
my @array = (100, 102, 110, 105, 100, 102, 100, 102, 104, 103);
my $p = 3;
sub sma(){
for ($i = $p; $i < scalar(@array)+$p; $i++)
{
@sma[0..$p-1] = 0;
@sma[$i] += @array[$i-1];
@sma[$i] += @array[$i-2];
@sma[$i] += @array[$i-3];
printf("Cierre: %.1f ", @array[$i-$p]);
printf(" SMA$p: %.1f\n", @sma[$i-$p]/$p);
}}
&sma();
Aqui dejo mi funcion sma, aunque creo que esta bastante indecente ... saludos y se agradece el tiempo nax
Desconectado
excelente aporte
te corriste un espacio en la salida, pero en general funciona.
abajo pongo la salida de tu programa (los numeros nomas), y al lado el valor que debiera realmente salir:
(lo verde es lo ok)
100 0 0,00
102 0 0,00
110 0 104,00
105 104 105,67
100 105,7 105,00
102 105 102,33
100 102,3 100,67
102 100,7 101,33
104 101,3 102,00
103 102 103,00
(una estrellita pal Jota)
después pongo mi solución
Desconectado
y? voy atrasado , pero siguiendo el curso
"Quiero hacer contigo lo que la primavera hace con los cerezos"
Desconectado
Mi solución...
print ( "---- Spam NAX ----\n" );
use strict;
my @close = ( 100, 102, 110, 105, 100, 102, 100, 102, 104, 103 );
my @SMAResult = fnSMA ( 3, \@close );for ( my $i = 0; $i < scalar ( @close ); $i++ )
{
printf ( "%f;%f\n", $close[$i], $SMAResult[$i] );
}sub fnSMA ()
{
my $howManyPeriods = $_[0];
my @array = @ {$_[1]};
my $count = 0;
my @retVal = ();
$retVal[0..$howManyPeriods - 1] = 0;
for ( my $count = $howManyPeriods - 1; $count < scalar ( @array ); $count++ ) {
my $sum = 0;
for ( my $i = $count; $i > $count - $howManyPeriods; $i-- ) {
$sum += $array[$i];
}
push ( @retVal, $sum / $howManyPeriods );
}
return @retVal;
}
En el programa del J y este hay cosas que uds. no han visto, por lo tanto debieran hacer consultas o quedarán bajo la mesa
Desconectado