26. kasu praktikoa: sailkatu hitzak luzeraren arabera

     Sarrera-datu gisa testu bat jaso eta bertako hitzak karaktere kopuruaren arabera sailkatuko dituen programa nahi dugu.
Datuak gordetzeko hash egitura erabiliko dugu. Honela: gako bezala karaktere kopurua, eta bere balioa array baterako erreferentzia. Erreferentziatutako array honek gakoan adierazitako karaktere kopurua duten hitzen zerrenda gordeko du.

karKopFitx.pl
 #!/usr/bin/perl
 use strict;
 use warnings;
 my ($fitx, $lerro, @hitzak, $karKop, %Zerrenda);
 $fitx = $ARGV[0];
 open (FI, $fitx) ||
      die(“Ezin $fitx fitxategia zabaldu!n”);
 while ($lerro = <FI>) {
      chomp($lerro);
      # Banatu lerroa hitzetan.
      # Banatzaileak: koma, puntu eta koma, puntua,
      # galdera eta harridura ikurrak eta zuriuneak
       @hitzak = split(/[,.s?!;]+/,$lerro);
       # Lerroko hitz bakoitzeko
       foreach my $hitz (@hitzak) {
          # Hitzaren karaktere kopurua gorde
          $karKop = length($hitz);
          # %Zerrenda hash-ean $karkop gakoa existitzen
          # ez bada, sortu gako horrentzako
          # izengabeko array baten erref.
          $Zerrenda{$karKop} = []
               if (!exists($Zerrenda{$karKop}));
          # Gehitu hitza erreferentziatutako array-aren
          # amaieran
          push(@{$Zerrenda{$karKop}}, $hitz);
       }
 }
 # %Zerrenda egiturako gakoak ordenatuta lortu
 # eta begizta bidez banan-banan pantailaratu
 foreach my $luz (sort({$a <=> $b} keys(%Zerrenda))) {
    print(“$luz karakteretako hitzak: “);
    # $luz luzerako hitzen array-a atzitu eta @hitzak
    # array-an gorde
    @hitzak = @{$Zerrenda{$luz}};
    # @hitzak ordenatu, string bakarrean bildu eta
    # pantailan bistaratu
    print(join(“, “, sort(@hitzak)));
    print(“n”);
 }

Programak bi zati nagusi dauzka:
1.- while begizta. Fitxategia lerroz lerro irakurri eta datuak hash egituran gordetzen ditu.
2.- foreach begizta. Hash egituran gordetako datuak ordenatu eta pantailan bistaratzen ditu.

Jaitsi   karKopFitx.pl   fitxategia

Utzi erantzuna

Zure e-posta helbidea ez da argitaratuko. Beharrezko eremuak * markatuta daude