Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Dreiersystem (1) (Zeichenketten)

Programmieren Sie eine Methode dreier(dreier: string): integer, die eine Zeichenkette von Ziffern in eine Zahl verwandelt. Die Zeichenkette dreier soll im Dreiersystem angegeben werden. Anstelle von Einern, Zehnern, Hundertern und Tausendern gibt es im Dreiersystem Einer, Dreier, Neuner, Siebenundzwanziger, .... Im Dreiersystem kommen lediglich die Ziffern 0, 1 und 2 vor. Die Zahl "120" bedeutet also 1 Neuner, 2 Dreier und 0 Einer (= Fünfzehn).  Der Wert einer Ziffer (als character) wird beispielsweise in Java mit dem einfachen Trick berechnet: wert := ziffer - '0'

Zusatzaufgabe: Implementieren Sie die Funktion auch für andere Zahlensysteme: system(ziffernfolge: string, basis: integer): integer.

Tipp: Überlegen Sie, ob die gegebene Ziffernfolge besser von links oder von rechts her zu behandeln ist.

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

8 Lösung(en)

def dreier(ziffernfolge, basis=3)
  resultat = 0
  for position in 0...ziffernfolge.size
    resultat = resultat*basis + ziffernfolge[position]-?0
  end
  return resultat
end

def dreier_hardcore_ruby(ziffernfolge, basis=3)
  return ziffernfolge.split("").inject(0) { |resultat,ziffer|
    resultat*3+ziffer[0]-?0
  }
end

def dreier_lazy_ruby(ziffernfolge, basis=3)
  return ziffernfolge.to_i(basis)
end

                
import java.util.Scanner;

public class Dreiersystem {
    
  public static void main(String[] args) {
    new Dreiersystem().top(); }
  
  String einlesenString(String meldung) {
      System.out.println("Bitte " + meldung + " eingeben: ");
      return new Scanner(System.in).next();  }
  
  int einlesenInt(String meldung) {
      return 
        Integer.parseInt(einlesenString(meldung)); }

  /***** Programmstart *****/
  
  void top() {
      String folge = einlesenString("Zahl");
      int    basis = einlesenInt   ("Basis");
      int    zehnersystem = system(folge, basis);
      ausgabe(zehnersystem); }
  
  void ausgabe(int resultat) {
      System.out.println("Das Resultat betraegt: " +
                         resultat); }
  
   int system(String folge, int basis) {
      int resultat = 0;
      int pos = 0; // java: 1. Pos hat index 0
      while(pos < folge.length()) {
          char ziffer = folge.charAt(pos);
          int ziffernwert = ziffer - '0';
          resultat = basis * resultat + ziffernwert;
          pos = pos + 1;
      }
      return resultat;  }
   
} // end of class Dreiersystem
                
def umrechnen(s,b):
    z=0
    for c in s:
        z=b*z+int(c)
    return z

print umrechnen('120',3)
print umrechnen('1212',3)
                
function base3(str) { return parseInt(str, 3); }

// zusatzaufgabe
function toBase(str, base) { return parseInt(str, base); }

console.log( base3('120') );
console.log( base3('1212') );
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// NET Core 3.x

using System;
using System.Linq;

namespace CS_MDL_CORE_Dreiersystem
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(BaseX2Dec("120", 3)); // 15
            Console.WriteLine(BaseX2Dec("1010", 2)); // 10
            Console.WriteLine(BaseX2Dec("FF", 16)); // 255
        }

        static int BaseX2Dec(string s, int b) => s.ToLower().Aggregate(0, (x, y) => b * x + (y - ((y >= 97 && y <= 103) ? 87 : 48)));
    }
}
                

Lösung von: Jens Kelm (@JKooP)

// C++ 11

#include <iostream>
#include <string>
#include <locale>
using namespace std;

int baseX_to_dec(string, int);

int main()
{
    cout << baseX_to_dec("120", 3) << endl; // 15
    cout << baseX_to_dec("1010", 2) << endl; // 10
    cout << baseX_to_dec("FF", 16) << endl; // 255
}

int baseX_to_dec(string s, int b)
{
    auto r{ 0 };
    locale l;

    for (auto c : s)
    {
        c = tolower(c, l);
        r = b * r + c - ((c >= 97 && c <= 103) ? 87 : 48);
    }
    return r;
}
                

Lösung von: Jens Kelm (@JKooP)

#include <stdio.h>
#include <ctype.h>
#include <string.h>

int baseX_to_dec(char*, int);

void main()
{
    char str[] = "FF";
    int base = 16;
    printf("%d", baseX_to_dec(str, base));
}

int baseX_to_dec(char* s, int b)
{
    int r = 0;
    for (unsigned int i = 0; i < strlen(s); i++)
    {
        char c = tolower(s[i]);
        r = b * r + c - ((c >= 97 && c <= 103) ? 87 : 48);
    }
    return r;
}
                

Lösung von: Jens Kelm (@JKooP)

' Als VBA-Funktion für Excel:

Public Function BaseX_To_Decimal(number As String, base As Integer) As Integer

    number = LCase(number)
    r% = 0
    
    For i% = 1 To Len(number)
        c% = Asc(Mid(number, i, 1))
        r = base * r + c - IIf((c >= 97 And c <= 103), 87, 48)
    Next
    
    BaseX_To_Decimal = r
    
End Function
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

120 (Dreiersystem) = 15 (Dezimalsystem)

1212 (Dreiersystem) = 27 + 18 + 3 + 2 = 50 (Dezimalsystem)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: k.A.
Webcode: kwsx-k6s4
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen