• Publicidad

Tutorial Retro

Aprende Perl

Tutorial Retro

Notapor Miguel-ag82 » 2020-07-20 01:15 @093

¡Hola!

Para volverme a introducir en el mundo Perl estoy haciendo este tutorial: http://geneura.ugr.es/~jmerelo/tutoperl ... print.html
(Hay una redireccion que algun navegador no bloquea, subo el tutorial en pdf).

Aunque sé que los hay más completos y obviamente actualizados, este me parece muy ameno por la historia que mezcla y su aire retro que me hace recordar y sacarme una sonrisa.

El problema es que los ejercicios no están y aunque los saco no sé si mi forma de hacerlos es la más eficiente. ¿Me ayudáis a resolverlos?
Adjuntos
tutoperl-print.pdf
(440.64 KiB) 117 veces
Última edición por Miguel-ag82 el 2020-07-21 02:12 @133, editado 1 vez en total
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Publicidad

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-07-20 06:54 @329

EJERCICIOS 1


Realizar un programa que vaya calculando cuadrados de números hasta que se introduzca una línea en blanco (solo retorno de carro).

Realizar un programa que permita al usuario introducir un nombre, y el ordenador le escriba "Hola >mismo nombre en mayúsculas<".

Realizar un programa que solicite nombres y apellidos del usuario, y los imprima en pantalla en formato formal: apellidos y nombre, separados por coma. Escribir en un fichero todos aquellos que se llamen Juan de nombre.
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-07-20 07:44 @364

1.3

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # programa que calcula los cuadrados de los números introducidos por teclado hasta detectar solo retorno de carro.
  3.  
  4. while (1){
  5.  
  6.     print "introduce un número:";
  7.     $entrada=<STDIN>;
  8.     chop($entrada);
  9.     last if !$entrada;
  10.     $cuadrado=$entrada * $entrada;
  11.     print $cuadrado;
  12.     print "\n";
  13. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-07-20 08:00 @375

EJERCICIOS 2

* Hacer un programa que imprima su entrada estándar en orden inverso, empezando por la última línea y acabando por la primera. Se ejecutará con unix% cat <nombre del fichero> ¦invert.pl (pistas: Usar la orden pop(), que extrae el primer elemento de un array. Reto: Hacerlo en una sola línea).

* $. es una variable que contiene la línea del fichero de la que se está leyendo. Teniendo esto en cuenta, crear un filtro (es decir, un programa que lea de entrada estándar y escriba en salida estándar, tal como el anterior) que imprima un fichero con el número de línea al principio de cada una.

* Hacer un histo(pro)gra, es decir, un programa que recoja una serie de valores numéricos (con valores reales entre 0 y 100), los distribuya en cinco cubos (del 0 al 20, entre 20 y 40, y así sucesivamente), calcule las frecuencias de cada uno de los cubos, e imprima barras horizontales cuya longitud es función de la frecuencia.
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-07-20 08:07 @380

2.1 (en el momento que hice el ejercicio no entendía muy bien lo del pop :) ;)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. @lineas=<STDIN>;
  4.  
  5. for($i=$#lineas;$i>=0;$i--)
  6. {    
  7.     print @lineas[$i] ;
  8. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-07-22 04:29 @228

EJERCICIO 2.2

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. while (<STDIN>) {
  4.     print $.;
  5.     print $_;
  6. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-07-22 04:49 @242

EJERCICIO 2.3 (EXACTAMENTE NO SÉ SI ES LO QUE SE PIDE)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. print "introduce números de 0 a 100, cuando no introduzcas nada saldrá la gráfica\n";
  4.  
  5. do {
  6.  
  7.     chomp( $entrada = <STDIN> );
  8.     if ( $entrada <= 20  && $entrada > 0 )  { $grafica[0] = $grafica[0] . '*'; }
  9.     if ( $entrada <= 40  && $entrada > 20 ) { $grafica[1] = $grafica[1] . '*'; }
  10.     if ( $entrada <= 60  && $entrada > 40 ) { $grafica[2] = $grafica[2] . '*'; }
  11.     if ( $entrada <= 80  && $entrada > 60 ) { $grafica[3] = $grafica[3] . '*'; }
  12.     if ( $entrada <= 100 && $entrada > 80 ) { $grafica[4] = $grafica[4] . '*'; }
  13. } while ($entrada);
  14.  
  15. print "frecuencia de número introducidos del 0 al 20 $grafica[0]\n";
  16. print "frecuencia de número introducidos del 20 al 40 $grafica[1]\n";
  17. print "frecuencia de número introducidos del 40 al 60 $grafica[2]\n";
  18. print "frecuencia de número introducidos del 60 al 80 $grafica[3]\n";
  19. print "frecuencia de número introducidos del 80 al 100 $grafica[4]\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor explorer » 2020-07-22 06:11 @299

Lo que muestras ahí son las cuentas o totales de elementos, pero no las frecuencias. Las frecuencias son el número de elementos de cada "cubo" dividido por el total de elementos introducidos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-07-22 08:04 @378

EJERCICIOS 3

* Leer un fichero con el formato Primer_Apellido Segundo_Apellido, Nombre y escribirlo como Nombre Primer_Apellido Segundo_Apellido. En el mismo fichero, presentar al final el número de veces que aparece cada apellido.

* Realizar un programa que, haciendo lo mismo que el manta.pl, lo haga en la mitad de líneas.

* Escribir un programa que haga lo mismo que la orden wc de UNIX, es decir, para cualquier fichero, contar el número de líneas, de palabras y de bytes, y presentarlo en 3 columnas con el nombre del fichero en la cuarta. Hacer que funcione para varios ficheros, introducidos en la línea de comandos.

* A partir del fichero de registro de visitas de un sitio Web, o log, poner cuántas veces han consultado las páginas desde dominios de primer y segundo orden, presentarlos por orden, con una opción que permita seleccionar primer o segundo orden.

* Realizar un programa que, a partir de una lista del tipo DNI, Apellidos, Nombre genere un fichero de password, con el formato username:password:uid:gid:Nombre y Apellidos. Calcular el username con la inicial del nombre y el primer apellido; si existe, usar el segundo apellido, y si existe también, añadir un número de orden. Para el password, encriptar el DNI; el uid se genera por orden alfabético a partir del número 1000, el gid es un entero común, y el nombre y apellidos es el indicado. Al terminarlo, ofrecerlo amablemente al administrador del sistema de tu Escuela o Facultad.
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Re: Tutorial Retro

Notapor Miguel-ag82 » 2020-07-23 04:13 @217

Pues la verdad es que me has puesto en un aprieto, le he tenido que dar algo de vueltas a la cabeza y aún así, no consigo que funcione.

¿Me ayudas?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. print "introduce números de 0 a 100, cuando no introduzcas nada saldrá la gráfica\n";
  4.  
  5. do {
  6.  
  7.     chomp( $entrada = <STDIN> );
  8.     if ( $entrada <= 20  && $entrada > 0 )  { $grafica[0]++; }
  9.     if ( $entrada <= 40  && $entrada > 20 ) { $grafica[1]++; }
  10.     if ( $entrada <= 60  && $entrada > 40 ) { $grafica[2]++; }
  11.     if ( $entrada <= 80  && $entrada > 60 ) { $grafica[3]++; }
  12.     if ( $entrada <= 100 && $entrada > 80 ) { $grafica[4]++; }
  13.     $total++;
  14. } while ($entrada);
  15.  
  16. foreach (@grafica) {
  17.  
  18.     # aquí saco la frecuencia y la multiplico por 10 para que me de un numero de entre el 0 y el 10.
  19.     $grafica[$.] = ( $_ / $total ) * 10;
  20.  
  21.     # para no recorrer el array una y otra vez ordenando y asignando valores de mayor a menor, aquí selecciono y añado los asteriscos que forman la barra "grafica".
  22.     if ( $grafica[$.] <= 2 ) { $grafica[$.] = '*'; }
  23.     if ( $grafica[$.] > 2 && $grafica[$.] <= 4 )  { $grafica[$.] = '**'; }
  24.     if ( $grafica[$.] > 4 && $grafica[$.] <= 6 )  { $grafica[$.] = '***'; }
  25.     if ( $grafica[$.] > 6 && $grafica[$.] <= 8 )  { $grafica[$.] = '****'; }
  26.     if ( $grafica[$.] > 8 && $grafica[$.] <= 10 ) { $grafica[$.] = '*****'; }
  27.  
  28. }
  29.  
  30. # aquí viene lo curioso, no pinta el valor de $grafica
  31.  
  32. print "frecuencia de número introducidos del 0 al 20 $grafica[0] \n";
  33. print "frecuencia de número introducidos del 20 al 40 $grafica[1] \n";
  34. print "frecuencia de número introducidos del 40 al 60 $grafica[2] \n";
  35. print "frecuencia de número introducidos del 60 al 80 $grafica[3] \n";
  36. print "frecuencia de número introducidos del 80 al 100 $grafica[4] \n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Miguel-ag82
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2020-07-17 02:53 @162

Siguiente

Volver a Formación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados