• Publicidad

Diario de aprendizaje de un perlero desde cero

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Notapor creating021 » 2007-06-17 10:26 @476

Yo lo haría así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
use strict;

print "Lados del cuadrialatero regular: ";
chomp(my $lados = <STDIN>);
if($lados =~ /^(\d+);\s+(\d+)$/){
  my $area = $1*$2;
  if($1 == $2){
    print "El area del cuadrado es $area\n";
  }
  else {
    print "El area del rectangulo es $area\n";
  }
}
else {
  die "Has introducido mal los lados\n";
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Publicidad

Notapor Zeokat » 2007-06-17 11:32 @522

Gracias por la solución creating... pero bueno... el objetivo de mi solución no es hacerlo en menos líneas sino tratar de hacerlo con lo que sé y al mismo tiempo aprender cosillas nuevas. Como bien dijo explorer, una de las soluciones es hacer un bucle... y ando a vueltas con ello :) necesito un poquillo de tiempo para leer sobre los bucles ( el while, if, else, elseif, unless, until, etc...) que parece que eso en Perl es el pan de cada día, así que me voy a parar a leer un ratillo y leer códigos sencillos a ver qué consigo. :)
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Notapor creating021 » 2007-06-17 15:15 @677

Es que no es complicado, fue algo casi espontáneo.

No es por tener menos líneas... bueno sí, se llama recurrencia.
Para eso hay varias formas de hacerlo, una es recrear el código tal como lo he hecho o usar métodos para lograrlo.

Puedes crear funciones o usar otras ya existentes como goto entre otras.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor Perl user » 2007-06-18 20:23 @891

Si eso fue "recurrencia" déjame decirte que tienes un concepto MUY EXTRAÑO (y claro, erróneo) de lo que es recurrencia. Una nadadita en Wikipedia sobre el término acuñado en Ciencias Computacionales te caería MUY bien.

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor explorer » 2007-06-19 03:51 @202

Recurrencia:
  • 1. f. Cualidad de recurrente.
  • 2. f. Mat. Propiedad de aquellas secuencias en las que cualquier término se puede calcular conociendo los precedentes.
Recurrente:
  • 1. adj. Que recurre.
  • 2. adj. Que vuelve a ocurrir o a aparecer, especialmente después de un intervalo.
  • 3. adj. Anat. Dicho de un vaso o de un nervio: Que en algún lugar de su trayecto vuelve hacia el origen.
  • 4. adj. Mat. Dicho de un proceso: Que se repite.
  • 5. com. Persona que entabla o tiene entablado un recurso.

Recurrencia redirige a Recursión, en la Wikipedia:

Recursión es la forma en la cual se especifica un proceso basado en su propia definición. Siendo un poco más precisos, y para evitar el aparente círculo sin fin en esta definición, las instancias complejas de un proceso se definen en términos de instancias más simples, estando las finales más simples definidas de forma explícita.

(Nota: aunque los términos "recursión" y "recursividad" son ampliamente empleados en el campo de la informática, el término correcto en castellano es recurrencia)


Vamos que creating021 realizó un proceso recursivo para escribir algo no recursivo (perdón, recurrente :-) )
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Perl user » 2007-06-19 10:09 @465

explorer escribiste:Vamos que creating021 realizó un proceso recursivo para escribir algo no recursivo (perdón, recurrente :-) )


Sigo sin encontrar la parte recurrente (en cuanto al proceso y a la solución) en su solución. :lol:
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor creating021 » 2007-06-19 15:58 @707

Creo que no me expresé bien... realmente me quería referir a eso y no al código en si:
Puedes crear funciones o usar otras ya existentes como goto entre otras.

Es que estaba pensando en la entrada de 1 y 2, por medio de read (a STDIN) y después por medio de un sub sacarlo.
Claro que he dicho:
Para eso hay varias formas de hacerlo, una es recrear el código tal como lo he hecho

Que iba bien hasta la palabra código, de ahí... nada. :roll:
Oops :P
Aún así, sigo pensando que es más simple que leer cada STDIN como estaba puesto en los otros códigos (¿recurrencia lingüística?) :lol:
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor Zeokat » 2007-07-25 20:29 @895

Hola de nuevo amigos, ¿cómo estáis todos por aquí?

Bueno, han finalizado mis esperadas y cortas vacaciones para la vuelta al trabajo y otra vez aquí molestando con mis preguntas. :)

Y bueno.... la verdad es que sí, sí he sido vago y no he mirado nada durante las vacaciones, pero sí me instalé un Linux, el famoso Ubuntu, para ver cómo era y además tenía curiosidad y ganas de probarlo de una vez y perderle el miedo, y bueno claro por ahora poco partido le quito, aunque ando trasteando con el un poco, jejeje, a ver si voy aprendiendo también como manejarme con él. :)

Lo primero que haré será un repaso general a todos los ejercicios resueltos hasta el momento, ordenaré las ideas de nuevo para que una de mis dos neuronas empiece a reaccionar (la otra aún sigue de vacaciones... jejeje) y retomo donde lo deje.

Saludos señores. ;)
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Notapor Zeokat » 2007-07-26 17:21 @765

Tras vuestro pequeño debate de la recursividad, sigo con lo mío... :lol:

A ver, el ejercicio (para refrescar la memoria a todos) era hacer un programa en el que se calculasen áreas de cuadrados y rectángulos.

Lo quería hacer de forma que al principio te diese la posibilidad de seleccionar entre lo que quieres calcular (cuadrado o rectángulo) de ahí que use el módulo Term::InKey.

Creo haber solucionado aquel problema de que, cuando pide el programa un 1 o un 2, si introducías un 1 todo prefecto, si introducías un 2 todo perfecto y si introducías una letra pues te calculaba el área de un rectángulo jejeje.

Ahora el código es así... he usado un elsif. A ver que os parece.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

use strict;
use Term::InKey;

print "Para calcular el area de un cuadrado pulsa 1 \n";
print "Para calcular el area de un rectangulo pulsa 2 \n";

my $eleccion = &ReadKey;

if ($eleccion == 1) {

    # Cálculo del área del cuadrado
    print "Introduce el valor del lado del cuadrado: ";

    my $lado = <STDIN>;
    chomp($lado);

    my $area_cuadrado = $lado * $lado;

    print "El area del cuadrado es $area_cuadrado";
}
elsif ($eleccion == 2) {

    # Cálculo del área del rectángulo
    print "Introduce el valor del lado \"a\" del rectangulo: ";

    my $lado_a = <STDIN>;
    chomp($lado_a);

    print "Introduce el valor del lado \"b\" del rectangulo: ";
    my $lado_b = <STDIN>;

    chomp($lado_b);

    my $area_rectangulo = $lado_a * $lado_b;

    print "El area del rectangulo es $area_rectangulo";
}
else {
   
    print "El valor introducido no es un valor valido";
   
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


*** Perdón por no poner tildes en el código, pero si las pongo me salen letras extrañas al usar la consola de Windows, aun usando Kedit ***


Voy mirando el siguiente ejercicio.

5) Encontrar áreas de triángulos y triángulos no rectángulos.

Tengo una duda sobre cómo plantear este ejercicio, porque el área de un triángulo y de un triángulo no rectángulo se calculan igual, ambos son triángulos, por lo que el área = base*altura/2

Aquí las variables que pide al usuario deben ser la base y la altura, por lo que el código es el mismo para un triangulo rectángulo que para uno no rectángulo... no sé muy bien cuál es la finalidad de este ejercicio. A ver si creating021 me orienta un poco. :wink:


Quedaría resuelto con algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;

print "Introduce el valor de la base del triangulo: ";

my $base = <STDIN>;
chomp $base;

print "Introduce el valor de la altura del triangulo: ";

my $altura = <STDIN>;
chomp $altura;

my $area_triangulo = ($base * $altura) / 2;

print "El area del triangulo es: " , $area_triangulo;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Aunque ahora que lo pienso, quizás lo que tu querías era que los datos a introducir fueran los lados de los triángulos entonces en el caso de un triangulo rectángulo basta con saber el valor de dos de los lados y sino es es rectángulo debemos de saber el valor de los tres lados (que alguien me corrija si estoy equivocado).... es eso lo que se buscaba con este ejercicio :?:
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Notapor creating021 » 2007-07-26 19:17 @845

Hola.

Y no, área = base*altura/2 solo se cumple para triángulos rectángulos puesto que los no rectángulos carecen de una altura (tendrías que partir el triángulo en dos...)

Te doy una fórmula para hacerlo más fácil... Herón:

http://es.wikipedia.org/wiki/Fórmula_de_Herón

Así solo tendrías que introducir los tres lados del triángulo y si es triángulo es factible dentro del esquema euclidiano (se puede comprobar con trigonometría o con identidades de Mollweid pero eso es muy avanzado para mí) tendrás la respuesta.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron