Unix ja shell-ohjelmointi (TIE 205) Unix ja shell-ohjelmointi (TIE 205)

Demo 6, 3.11.1999, ratkaisut
Tehtävä 1

#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 1
#
# "Suora" käsittely
#

printf "Palindromi? ";
$_=<STDIN>;
chop();
s/[ ]|[.]|[,]//g;
y/a-zåäö/A-Zåäö/;
if ($_ eq (reverse($_))) {
  printf "On palindromi!\n";
}
else {
  printf "Ei ole palindromi!\n";
}

tai

#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 1
#
# Muuttujan käsittely. Huomaa "bind"-operaattorin (=~) käyttö.
# =~ -operaattori toimii sekä sijoitus ja ehto-operaattorina
# ks. man perlop
#

printf "Palindromi? ";
$a = <STDIN>;
chop($a);
$b = $a;
$b =~ s/[ ]|[.]|[,]//g;
$b =~ y/a-zåäö/A-Zåäö/;

if ($b eq (reverse($b))) {
  printf "\"$a\" on palindromi!\n";
}
else {
  printf "\"$a\" ei ole palindromi!\n";
}

Tehtävä 2

#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 2
#

while (<STDIN>) {
#poistetaan rivinvaihto
chop();
@taulu=split($ARGV[0]);
# OFS:n ($,) määrittely print-funktiolle
$,=$ARGV[0];
print sort(@taulu);
print "\n";
}

Tehtävä 3

#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 3
#
# Käyttäen m//g -operaattoria + pos-funktiota
#

while (<STDIN>) {
  while (m/(^|[ ])[a-zåäö]/g) {
    $i=pos;
    $a=substr($_,0,$i-1);
    $b=substr($_,$i-1,1);
    $c=substr($_,$i);
    $b =~ tr/a-zåäö/A-ZÅÄÖ/;
    $_=$a.$b.$c;
  }
  print $_;
}

Tehtävä 4

#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 4
#

while (<>) {
  $tavut+=length();
  chop();
  $sanat+=split(/ +|	+/,$_);
}
print "$. $sanat $tavut\n"

Tehtävä 5

#!/usr/local/bin/perl
#
# Demo 6
#
# Tehtävä 5
#

open(PAL, "palkat");
while (<PAL>) {
  next if ($.<2);  # Aloitetaan vasta riviltä kolme
  @tau=split(/  +|	+/);
  $tot+=$tau[2];
  if ($tau[2]>$max) {$max=$tau[2];$nimi=$tau[0];}
  @apu=split("-",$tau[1]);
  $suunnat{$apu[0]}++;
}
printf "%-15s: %.2f mk \n", "Keskipalkka", $tot/($.-2);
printf "%-15s: %.2f mk (%s)\n", "Paras palkka", $max, $nimi;
open(SUU, "suunnat");
while (<SUU>) {
  chop();
  @apu=split(/  +|	+/);
  printf "%-15s: %d kpl\n", $apu[0]." (".$apu[1].")",$suunnat{$apu[1]};
}
close(PAL);
close(SUU);


File translated from TEX by TTH, version 1.98.
On 3 Nov 1999, 17:26.