« Römische Zahlen (3) | Main| Desktop Search von Google »

Römische Zahlen (4)

0
Kategorie    
Heute die versprochene Scala Implementierung ....
val letters = Array('M','D','C','L','X','V','I')
 
  case class Container( var value : Int)
 
  trait SimpleRoman  {
   
          def value : Int
          def arabicValue(i : Int) : Int = Math.pow(10, (letters.length - 1 - i) / 2).toInt * (if (i % 2 == 1)  5 else 1)
         
          override def toString = {                          
                  if (value < 1) "" else if (value > 3999) "N" else {
                    var roman = ""
                    var i : Int = value                    
                    for( j <- 0 to letters.length-1 ) {                            
                            val actualValue = arabicValue(j)
                            while (i > actualValue || !(i < actualValue)) {
                                    roman += letters(j)
                                    i -= actualValue
                            }        
                }                                  
                    roman
                  }    
          }            
  }
 
  trait SubstractionRoman extends SimpleRoman {
          override def toString = {
            var roman = super.toString
                for( j <- 1 to letters.length-2) {
                   val search2 = ""+letters(j+1)+letters(j+1)+letters(j+1)+letters(j+1)                
                   val search1 = ""+letters(j) + search2
           roman = roman.replace(search1,""+letters(j+1)+letters(j-1))
           roman = roman.replace(search2,""+letters(j+1)+letters(j))
                }                
                roman
          }                    
  }
 
  implicit def IntToSubstractionRoman(i : Int) = new Container(i) with SubstractionRoman
  implicit def RomanToInt(c : Container) = c.value

Sieht mehr oder weniger aus, wie die C# Implementierung.
Jedoch ein Auge auf die implicit def Zeilen, diese ermöglichen es, dass man mit den Römischen Zahlen rechnen kann wie mit "normalen"

var a = new Container(1984) with SimpleRoman
                  var b = new Container(1984)
                  var c = new Container(1984) with SubstractionRoman
                  var d = a
                  println(a)
                  println(b)
                  println(c)
                  println(d)
                  a.value += b.value
                  b.value = a.value
                  c.value = a.value
                  d = c
                println(a)
                  println(b)
                  println(c)
                  println(d)                  
                  a = ( 1 + 1983 )
                  b = ( 1 + a )
                  println(a)
                  println(b)

Gruß JJR
P.S.: Und noch ein schönes Wochenende!

Mach einen Kommentar

:-D:-o:-p:-x:-(:-):-\:angry::cool::cry::emb::grin::huh::laugh::lips::rolleyes:;-)

Amazon


Impressum

Firmenname: Peanuts-Soft
Straße Nummer: Biinger Strasse 8
PLZ Ort: 55263 Wackernheim
Telefon: +491772134526
E-Mail: joerg.reck @ peanuts-soft.de
Disclaimer: Peanuts-Soft übernimmt keine Garantie dafür, dass die auf dieser Website bereitgestellten Informationen vollständig, richtig und stets aktuell sind. Dies gilt auch für alle Links, auf die verwiesen wird. Peanuts-Soft ist für die Inhalte, auf die per Link verwiesen wird, nicht verantwortlich. Peanuts-Soft haftet nicht für konkrete, mittelbare und unmittelbare Schäden oder Schäden, die durch fehlende Nutzungsmöglichkeiten, Datenverluste oder entgangene Gewinne – sei es aufgrund der Nichteinhaltung vertraglicher Verpflichtungen, durch Fahrlässigkeit oder eine andere unerlaubte Handlung – im Zusammenhang mit der Nutzung von Dokumenten oder Informationen bzw. der Erbringung von Dienstleistungen entstehen, die auf dieser Web Site zugänglich sind.
Datenschutz: Inhalt und Gestaltung der Internetseiten sind urheberrechtlich geschützt. Eine Vervielfältigung der Seiten oder deren Inhalte bedarf der vorherigen schriftlichen Zustimmung von Peanuts-Soft.


Locations of visitors to this page

Powered By

Domino BlogSphere
Version 3.0.2