Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Euro-Banknoten (Selektionen)

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 Modulo-Operator (z. B. % oder MOD) 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
'

4 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 ()

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

int main(void) {
    char serienNummer[13];
    short zeichenPassend = 0;
    int pruefZiffer;
    puts("Bitte geben Sie die Seriennummer der Euro-Banknote ein, die sie prüfen möchten: ");
    scanf("%12s", serienNummer);
    for (int i = 1; i < strlen(serienNummer); i++) {
        if (serienNummer[i] < 48 || serienNummer[i] > 57) {
            zeichenPassend = 1;
            break;
        }
    }
    if (serienNummer[0] < 65 || serienNummer[0] > 91) {
        puts("Ungültiger Ländercode an erster Stelle!");
    } else if (strlen(serienNummer) < 12) {
        puts("Seriennummer ist zu kurz!");
    } else if (zeichenPassend) {
        puts("Die Seriennummer darf nur aus einem Buchstaben und 11 Ziffern bestehen!");
    } else {
        pruefZiffer = (int) serienNummer[0] - 64;
        for (int i = 1; i < strlen(serienNummer) - 1; i++) {
            pruefZiffer += serienNummer[i] - '0';
        }
        pruefZiffer = ((8 - pruefZiffer % 9) == 0) ? 9 : 8 - pruefZiffer % 9;
        if (pruefZiffer != serienNummer[11] - '0') {
            printf("Prüfziffer ungültig! Errechnete Prüfziffer: %d", pruefZiffer);
        } else {
            printf("Die eingegebene Seriennummer ist gültig! Errechnete Prüfziffer: %d", pruefZiffer);
        }
    }
        
    return (EXIT_SUCCESS);
}
                

Lösung von: Swen Krüger ()

 //Farben
        static void ueberschrift()
        {
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.BackgroundColor = ConsoleColor.Gray;
        }
        static void gruen()
        {
            Console.ForegroundColor = ConsoleColor.DarkGreen;
        }
        static void rot()
        {
            Console.ForegroundColor = ConsoleColor.DarkRed;
        }
        static void nix()
        {
            Console.ResetColor();
        }
        static string Umwandlung(string Eingabe)
        {
            
            Eingabe = Convert.ToString(Console.ReadLine());
            Eingabe = Eingabe.Replace("A", "1");
            Eingabe = Eingabe.Replace("B", "2");
            Eingabe = Eingabe.Replace("C", "3");
            Eingabe = Eingabe.Replace("D", "4");
            Eingabe = Eingabe.Replace("E", "5");
            Eingabe = Eingabe.Replace("F", "6");
            Eingabe = Eingabe.Replace("G", "7");
            Eingabe = Eingabe.Replace("H", "8");
            Eingabe = Eingabe.Replace("I", "9");
            Eingabe = Eingabe.Replace("J", "10");
            Eingabe = Eingabe.Replace("K", "11");
            Eingabe = Eingabe.Replace("L", "12");
            Eingabe = Eingabe.Replace("M", "13");
            Eingabe = Eingabe.Replace("N", "14");
            Eingabe = Eingabe.Replace("O", "15");
            Eingabe = Eingabe.Replace("P", "16");
            Eingabe = Eingabe.Replace("Q", "17");
            Eingabe = Eingabe.Replace("R", "18");
            Eingabe = Eingabe.Replace("S", "19");
            Eingabe = Eingabe.Replace("T", "20");
            Eingabe = Eingabe.Replace("U", "21");
            Eingabe = Eingabe.Replace("V", "22");
            Eingabe = Eingabe.Replace("W", "23");
            Eingabe = Eingabe.Replace("X", "24");
            Eingabe = Eingabe.Replace("Y", "25");
            Eingabe = Eingabe.Replace("Z", "26");
            return Eingabe;
        }
        
        static string Ausnahme(string Eingabe)
        {

            if (Eingabe.Length != 13)
            {
                Console.WriteLine();
                rot();
                Console.WriteLine("Die Eingabe erfüllt nicht die Struktur.");
                Console.WriteLine();
                nix();
            }
            return Eingabe;
        }
        static void Main(string[] args)
        {
            string Entscheidung = "";
            do
            {

            string Eingabe = "";
            string Ausnahm = "";
            int pruef = 0;
            Int32 Ausgabe;
            List<int> Ausgabee = new List<int>();


            do
            {
                ueberschrift();
                Console.Write("Geben Sie den Code auf einem Euro-Schein ein: ");
                nix(); gruen();
                Eingabe = Umwandlung(Eingabe);
                nix();
                Ausnahm = Ausnahme(Eingabe);

            } while (Eingabe.Length != 13);


            //definiert die Prüfvariable
            for (int i = Eingabe.Length - 1; i < Eingabe.Length; i++)
            {
                string ein = Eingabe.Substring(i, 1);
                Int32.TryParse(ein, out Ausgabe);
                pruef = Ausgabe;
            }
            //wandelt die Ziffern einzeln um, damit man daraus eine Quersumme bilden kann
            for (int i = 0; i < Eingabe.Length - 1; i++)
            {
                string ein = Eingabe.Substring(i, 1);
                Int32.TryParse(ein, out Ausgabe);
                Ausgabee.Add(Ausgabe);
            }


            //Berechnung. Rundet das Ergebnis auf.
            Console.WriteLine();
            rot();
            double rest = 0;
            rest = (double)Ausgabee.Sum() / 9;
            rest = Math.Ceiling(rest);
            rest = 8 - rest;
           //Ausgabe des Ergebnis
            if (rest == 0)
            {
                Console.WriteLine("DIe Prüfziffer beträgt 9.");
                if (pruef == 9)
                {
                    Console.WriteLine("Die Banknote ist echt.");
                }
                if (pruef != 9)
                {
                    Console.WriteLine("Die Banknote ist eine Fälschung.");
                }
            }
            if (rest != 0)
            {

                Console.WriteLine("Die Prüfziffer beträgt: " + rest);

                if (rest == pruef)
                {
                    Console.WriteLine("Die Banknote ist echt.");
                }
                if (rest != pruef)
                {
                    Console.WriteLine("Die Banknote ist eine Fälschung.");
                }
            }
            nix();
            Console.WriteLine();
            Console.Write("Möchten Sie noch eine Banknote prüfen ? ");
            Entscheidung = Convert.ToString(Console.ReadLine());
            Console.WriteLine();
        }while(Entscheidung=="ja"|| Entscheidung == "j");

        }
                

Lösung von: Goo Muck (Uni)

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