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
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
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 1 |
Schwierigkeit: | k.A. |
Webcode: | kwsx-k6s4 |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |