Perl - cvičení 6

  1. Napište program, který načte větu, vypíše počet znaků, počet slov z vypíše větu s obráceným pořadím slov.
    $veta = <>;
    chop $veta;
    print "Pocet znaku: ", length($veta), "\n";
    print "Pocet slov: ", scalar(split / /, $veta), "\n";
    print "Veta opacne: ", join (' ', reverse split / /, $veta) , "\n";
    
  2. Napište program, který načte ze vstupu čísla oddělená mezerou (na jednom nebo více řádcích) a po ukončení zadávání vypíše podle četnosti seřazená čísla, a za každý výskyt čísla jednu hvězdičku.
    Vstup: 1 2 3 4 123 12 1 2 3 56 6 5 4 5 5 1 2 3
    Výstup:
    5: ***
    1: ***
    2: ***
    3: ***
    4: **
    56: *
    12: *
    123: *
    6: *
    
    
    # reseni
    while (<>) {
            for (split) {
                    $cisla{$_}++;
            }
    }
    
    for (reverse sort {$cisla{$a} <=> $cisla{$b}} keys %cisla) {
            print "$_: ", '*' x $cisla{$_}, "\n";
    }
    
    
  3. Vypište jména osob ze struktury %o tak, že jsou osoby seřazeny podle věku, v případě stejného věku jsou seřazeny podle jména. Poużijte funkci sort.
    
    %o = ('001' => {vek => 20, jmeno => 'Zeleny Petr'},
          '002' => {vek => 50, jmeno => 'Modry Adam'},
          '003' => {vek => 45, jmeno => 'Cerny Jiri'},
          '004' => {vek => 30, jmeno => 'Zluty Josef'});
    
    print join ', ', 
          map "$o{$_}->{jmeno}", 
          sort {  $o{$a}->{vek} <=> $o{$b}->{vek} 
                                ||
                $o{$a}->{jmeno} cmp $o{$b}->{jmeno} 
               } keys %o; 
    
    # nebo
    
    print join ', ', 
          map "$_->{jmeno}", 
          sort {  $a->{vek} <=> $b->{vek} 
    			||
                $a->{jmeno} cmp $b->{jmeno} 
               } values %o; 
    
  4. Vypište aktuální datum ve formátu: 1. dubna 2012 (sobota)
    
    
    @udaje = localtime;
    print "$udaje[3]. ",
          (qw/ledna února března dubna května června července
              srpna září října listopadu prosince/)[$udaje[4]],
          " ",
          1900+$udaje[5],
          " (",(qw/pondělí úterý středa čtvrtek
                   pátek sobota neděle/)[$udaje[6]-1],")";
    
  5. Načtěte ze souboru údaje o osobách (jméno, příjmení, adresu, plat a poznámku). Pomocí formátu zobrazte tento údaj to tabulky. Na jednu stránku zobrazte 6 řádků (včetně záhlaví). Do záhlaví každé stránky vypište číslo stránky a aktuální datum.
    Data:
    Novak:Petr:Praha:100:Poznamka
    Polak:Pavel:Ostrava:50.60:Bez poznamek
    Vesely:Ivan:Brno:85.8612:
    Bednar:Josef:Olomouc:90:
    Rychly:Arnost:Praha:68.1:
    Dostal:Jiri:Brno:123.456:
    
    Vzor zahlavi:
    
    +---------------------------------------------------------------------------------+
    |Strana: X                            Datum: Tue Mar 25 11:52:10 2003             |
    +------------------+-----------------+----------+--------+------------------------+
    |Jmeno             |Prijmeni         |Adresa    | Plat   |Poznamka                |
    +------------------+-----------------+----------+--------+------------------------+
    
    
    Mozne reseni:
    ========================
    format STDOUT_TOP =
    +---------------------------------------------------------------------------------+
    |Strana:@<<<<                        Datum: @<<<<<<<<<<<<<<<<<<<<<<<<<<<          |
    $%, scalar (localtime)
    +------------------+-----------------+----------+--------+------------------------+
    |Jmeno             |Prijmeni         |Adresa    | Plat   |Poznamka                |
    +------------------+-----------------+----------+--------+------------------------+
    .
    
    format =
    |@<<<<<<<<<<<<<<<<<|@<<<<<<<<<<<<<<<<|@<<<<<<<<<|@####.##|@<<<<<<<<<<<<<<<<<<<<<<<|
    $jmeno,             $prijmeni,        $adresa,   $plat,   $poznamka
    .
    
    open F, "data.txt";
    
    $==6;
    
    while (<F>) {
            chomp;
            ($jmeno, $prijmeni, $adresa, $plat, $poznamka) = split /:/;
            write;
    }