Roman: Römische und Indisch-Arabische Zahlen konvertieren

Veröffentlicht von Thomas Fahle am (Permalink)

Das Modul Roman - Perl module for conversion between Roman and Arabic numerals - von Alexandr Ciornii vereinfacht die Umrechnung von Römische Zahlen in Indisch-Arabische Zahlen und umgekehrt.

Indisch-Arabische Zahlen in römische Zahlen umrechnen

Die automatisch exportierte Funktion Roman liefert römische Zahlen in Großbuchstaben. Wer kleine Buchstaben bevorzugt, verwendet statt dessen die (hier nicht gezeigte) Funktion roman.

#!/usr/bin/perl
use strict;
use warnings;
use Roman;

my @arabic_numbers = ( 1 .. 10 );

foreach my $arabic (@arabic_numbers) {
    my $roman = Roman($arabic);
    printf( "%-5s %-5s\n", $arabic, $roman );
}

Das Programm erzeugt folgende Ausgabe:

1     I    
2     II   
3     III  
4     IV   
5     V    
6     VI   
7     VII  
8     VIII 
9     IX   
10    X  

 

Römische Zahlen in Indisch-Arabische Zahlen umrechnen

Die ebenfalls automatisch exportiert Funktion arabic rechnet römische Zahlen in Indisch-Arabische Zahlen um. isroman prüft, ob es sich auch wirklich um eine gültige römische Zahl handelt.

#!/usr/bin/perl
use strict;
use warnings;
use Roman;

my @roman_numbers = qw( X XX L C CM MCD );

foreach my $roman (@roman_numbers) {
    if ( isroman($roman) ) {
        my $arabic = arabic($roman);
        printf( "%-5s %5s\n", $roman, $arabic );
    }
    else {
        warn "$roman ist keine gueltige roemische Zahl!\n";
    }
}

Das Programm erzeugt folgende Ausgabe:

X        10
XX       20
L        50
C       100
CM      900
MCD    1400

 

Datum in römischen Zahlen

Das nachfolgende Snippet habe ich im Blog von Ovid im Beitrag Dates in Latin gefunden und als Grundlage für ein kleines Programm verwendet:

#!/usr/bin/perl
use strict;
use warnings;

use Roman;
use DateTime;

my $dt = DateTime->new(
    year      => 2010,
    month     => 06,
    day       => 7,
    time_zone => 'Europe/Berlin',
);

my $date           = latin_date($dt);
my $workshop_count = Roman(12);

print
    qq~Der $workshop_count. Deutsche Perl-Workshop in Schorndorf (bei Stuttgart)
       startet am "$date".\n~;

sub latin_date {

    # Quelle: http://blogs.perl.org/users/ovid/2010/05/dates-in-latin.html
    my $datetime = shift;
    my @days     = (
        'Dies Dominica',
        'Dies Lunae',
        'Dies Martis',
        'Dies Mercurii',
        'Dies Iovis',
        'Dies Veneris',
        'Dies Saturni',
        'Dies Dominica',
    );
    my @months = (
        'Januarius', 'Februarius', 'Martius',   'Aprilis',
        'Maius',     'Junius',     'Julius',    'Augustus',
        'September', 'October',    'Novembris', 'December'
    );
    return join ' ' => $days[ $datetime->day_of_week ],
        roman( $datetime->day ), $months[ $datetime->month - 1 ],
        uc( roman( $datetime->year ) );
}

Das Programm erzeugt folgende Ausgabe:

Der XII. Deutsche Perl-Workshop in Schorndorf (bei Stuttgart) 
startet am "Dies Lunae vii Junius MMX".

 

Siehe auch:

Weitere Posts