Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Euro-Banknoten ()

Auf jeder Banknote ist eine eindeutige Seriennummer aufgedruckt. Im Falle einer Euro-Banknote hat eine solche Seriennummer folgende Struktur:

ANNNNNNNNNNJ

Hierbei ist das erste Zeichen (A) der Ländercode (z.B.: X für Deutschland, N für Österreich, P für Niederlande, Z für Belgien).
Es folgen 10 Nutzziffern (N) und als letztes Zeichen eine Prüfziffer (J).

Die Prüfziffer (J) berechnet sich wie folgt:

  • Betrachte den Buchstaben des Ländercodes als Zahl. Die Zahl ergibt sich aus der Position des Buchstabens im Alphabet (1 für A, 2 für B, ..., 25 für Y, 26 für Z)
  • Bilde die Quersumme aus den so erhaltenen elf oder zwölf Ziffern (Seriennummer ohne Prüfziffer)
  • Berechne den Rest bei der ganzzahligen Division der Quersumme durch 9
  • Berechne 8 - Rest
  • Ist 8 – Rest = 0, dann gilt J = 9, in allen anderen Fällen gilt J = 8 - Rest

Ihr Programm soll

  • eine beliebige Zeichenkette aus zwölf alphanumerischen Zeichen von der Tastatur einlesen und auf dem Bildschirm ausgeben
  • prüfen, ob die Struktur der eingegebenen Zeichenkette der Vorgabe für eine Seriennummer (siehe oben) entspricht
  • bei falscher Struktur eine Fehlermeldung am Bildschirm ausgeben
  • die Prüfziffer der Seriennummer für die eingegebene Zeichenkette aus dem Ländercode und den Nutzziffern berechnen und auf dem Bildschirm ausgeben
  • die so berechnete Prüfziffer (J) mit der eingegebenen Prüfziffer vergleichen
  • als Ergebnis des Vergleichs einen Hinweistext auf dem Bildschirm ausgeben (z.B. „korrekte Serien-Nr.“ oder „gefälschte Banknote“)

Hinweise zum Lösungsweg

  • Der Wert des Ländercodes soll mit Hilfe der ASCII-Werte der Buchstaben A bis Z berechnet werden.
  • Erlauben Sie nur Großbuchstaben bei der Eingabe der Seriennummer.
  • Benutzen Sie den Operator % zur Ermittlung des Divisionsrests

1 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (1)

kuseli 17. Oktober 2017 15:24   reply report
Duplikat von
https://programmieraufgaben.ch/aufgabe/pruefziffer-auf-euro-banknoten/fy4ohgdx
'

2 Lösung(en)

import java.util.Scanner;

/**
 * Created by linus on 15.10.17.
 */
public class Main {

    private String serialNumber;
    private int countryCode;

    public static void main(String[] args) {
        new Main().init();
    }

    private void init() {
        readSerialNumber();
        checkStructure();
        countryCode();
        check();
        good();
    }

    private void readSerialNumber() {
        System.out.print("Seriennummer eingeben: ");
        Scanner scanner = new Scanner(System.in);
        serialNumber = scanner.nextLine().toUpperCase();
    }

    private void checkStructure() {
        char a = serialNumber.charAt(0);

        if(serialNumber.length() != 12) {
            wrong();
        } else if(!('A' <= a && a <= 'Z')) {
            wrong();
        }

        for(int i = 1; i < serialNumber.length(); i++) {
            char nj = serialNumber.charAt(i);

            if(!('0' <= nj && nj <= '9')) {
                wrong();
                break;
            }
        }
    }

    private void countryCode() {
        countryCode = serialNumber.charAt(0) - 'A' + 1;
    }

    private void check() {
        int checksum = countryCode;

        for(int i = 1; i < serialNumber.length() - 1; i++) {
            char nj = serialNumber.charAt(i);
            checksum += Integer.parseInt(String.valueOf(nj));
        }

        int remainder = checksum % 9;
        int result = (8 - remainder) == 0 ? 9 : (8 - remainder);

        System.out.println("Berechnete Prüfziffer: " + result);

        if(result != Integer.parseInt(String.valueOf(serialNumber.charAt(serialNumber.length() - 1)))) {
            wrong();
        }
    }

    private void wrong() {
        System.out.println("Seriennummer ist falsch!");
        System.exit(0);
    }

    private void good() {
        System.out.println("Seriennummer ist richtig!");
    }
}
                

Lösung von: Linus Götz (Lichtenberg-Gymnasium Cuxhaven)

import re

srn = input("Seriennummer: ")

pattern = re.compile(r"^([DEHJMNPRSTUVWXYZ])(\d{10})(\d)$", re.ASCII)

match = pattern.search(srn)

if not match:
    print("Gefaelschte Banknote")
else:
    lc = match.group(1)
    lcn = str(ord(lc)-ord("A")+1)
    print("Laendercode \"" + lc + "\" entspricht Ziffer " + lcn + ".")
    prfzffr_orig = int(match.group(3))
    print("Pruefziffer gegeben. " + str(prfzffr_orig))

    prz_calc = 0

    for i in lcn + match.group(2):
        prz_calc = prz_calc + int(i)

    prz_calc = 8 - (prz_calc % 9)
    if prz_calc == 0:
        prz_calc = 9

    print("Pruefziffer berechnet:" + str(prz_calc))

    if prz_calc == int(prfzffr_orig):
        print("korrekte Serien-Nr.")
    else:
        print("gefaelschte Banknote")



                

Lösung von: André Trobisch ()

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 2
Schwierigkeit: Leicht
Webcode: macy-76jt
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen