Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Mehrdimensionale Felder (Felder)

Schreiben Sie ein einfaches Kodierungsprogramm, das ein zweidimensionales Array mit 26 Spalten und 2 Zeilen enthält. Die 1. Zeile soll die Zeichen A - Z, die 2. Zeile - das Code-Alphabet, d. h. das um einen bestimmten Wert verschobene "normale" Alphabet aus der 1. Zeile - z. B.: 2. Zeile: C D E F G H I J K L M N O P Q R S T U V W X Y Z A B. Nun soll ein beliebiger Text eingegeben werden (Eingabeende mit ";"), wobei nur Kleinbuchstaben, Großbuchstaben und das Sonderzeichen ";" als Eingabezeichen erlaubt sind, alle anderen Zeichen sollen ignoriert werden. Wenn das Zeichen ";" eingegeben wird, soll das Programm den kodierten (ausgetauschten) Text ausgeben und sich beenden.

1 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (1)

gressly 23. März 2021 22:20   reply report
Die allgemeine Version dieser Aufgabe ist bereits im Buch "Programmieren lernen" enthalten.

7 Lösung(en)

from string import ascii_letters, ascii_lowercase as l, ascii_uppercase as u
lines, cur, shift = [], None, 24
mapped = str.maketrans(ascii_letters, l[-shift:] + l[:-shift] + u[-shift:] + u[:-shift])
while not cur or cur[-1] != ";":
    lines.append(cur := input())
for line in lines:
    print("".join(filter(lambda x: ord(x) in mapped, line)).translate(mapped))
                

Lösung von: Name nicht veröffentlicht

/*==================================================================*\
|  Ich hätte für eine cäsar-verschlüsselung wohl sicher nicht den    |
|  umweg über ein mehrdimensionales array genommen; genauso sicher   |
|  hätte ich mir das getu mit der einzelzeicheneingabe und dem       |
|  abschließenden semikolon erspart. Aber sei's drum.                |
\*==================================================================*/

// hier der kern des ganzen:
// das zweidimensionale array
let RotatedCharDict = function(offset) {
  let out = [];
  for (let i = 65; i <= 90; i++) {
    out.push([String.fromCharCode(i), '']);
    out[out.length-1][1] = (i + offset > 90) ?
      String.fromCharCode(i + offset - 26) : String.fromCharCode(i + offset);
  }
  return out;
}

// ausgabemaske
document.write('<div id="code"></div>');

let myTable = new RotatedCharDict(3), // A => C, B => D &c.
    listening = true, //......................................... s. u.
    code = document.getElementById('code');

// eingabe
document.addEventListener('keypress', function(evt) {
   if (listening) {  //.......................................... s. o.
     if (evt.key == ';') listening = false;
     else {
       let c = evt.key.toUpperCase(),
           out = '';
       for (let i = 0; i < myTable.length; i++)
         if (myTable[i][0] == c) out = myTable[i][1];
       code.innerHTML += (out == '') ? evt.key : out;
     }
   }
});

                

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

zeichen = [['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'],
           ['C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B']]

print('Text eingeben: ', end='')
eingabe = []
 
from pynput import keyboard

# The event listener will be running in this block
with keyboard.Events() as events:
    for event in events:
        if event.key == keyboard.KeyCode.from_char(';'):
            break         
        else:
            if (str(event.key)[1:2]).upper() in zeichen[0]:
                eingabe.append(str(event.key)[1:2].upper())  
           
eingabe.pop(-1)
text = ''
a = 1
for i in eingabe:
    if a == 1:  text += i; a = 0
    else: a = 1

def code(text, a):
    if a == 0: b = 1 
    else: b = 0
    t = ''
    for i in text:
        try:
            index = zeichen[a].index(i)
            t += zeichen[b][index]
        except:
            pass
    return t

verschlüsselt = code(text,0)
print('\nverschlüsselt:', verschlüsselt)

entschlüsselt = code(verschlüsselt,1)
print('entschlüsselt:',entschlüsselt)
                

Lösung von: Alex Groeg (Freies Lernen)

# frozen_string_literal: false

# Klasse fuer Caesar-Verschluesselung
class MultiDimField
  @encode_dict = nil
  @decode_dict = nil
  @shift = 0

  ENCODE = true
  DECODE = false

  attr_accessor :encode_dict, :decode_dict, :shift

  def do_the_shift
    alphabet = ('A'..'Z').to_a
    (0..25).each do |i|
      @encode_dict[alphabet[i]] = alphabet.rotate(@shift)[i]
    end
    @decode_dict = @encode_dict.invert
  end

  def initialize(shift = 1)
    @encode_dict = @decode_dict = {}
    @shift = shift
    do_the_shift
  end

  def code_char(char, direction = ENCODE)
    dict = direction == ENCODE ? @encode_dict : @decode_dict
    out = char == char.capitalize ? dict[char] : dict[char.capitalize].downcase

    return char if out.nil?

    out
  end

  def code_string(str, direction = ENCODE)
    out = ''
    str.each_char do |c|
      out += code_char(c, direction)
    end
    out
  end
end

# Testcode:

my_caesar = MultiDimField.new(2)

test_char = my_caesar.code_char('a')
puts test_char # => c
test_string = my_caesar.code_string('Hallo, Welt!')
puts test_string # => Jcnnq, Ygnv!
puts my_caesar.code_string(test_string, MultiDimField::DECODE) # => Hallo, Welt!

                

Lösung von: Ich Bins (tubs)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Swaping {

    private final static char[] ALPHABET = new char[26];
    private static final char[] SHIFTED_ALPHABET = new char[26];

    protected static String getUserInput() throws IOException {
        return new BufferedReader(new InputStreamReader(System.in)).readLine();
    }

    protected static String swapString(String input) {
        StringBuilder builder = new StringBuilder();
        for(char c : input.toCharArray()){
            if(c == ';'){return builder.toString();}
            for(int i = 0; i < ALPHABET.length; i++){
                char testedChar = ALPHABET[i];
                if(testedChar == c){builder.append(SHIFTED_ALPHABET[i]);}
            }
        }
        return "failure";
    }

    protected static void fillAlphabets(int key) {
        for (int i = 0; i < ALPHABET.length; i++) {
            ALPHABET[i] = (char) (97+i);
            SHIFTED_ALPHABET[i] = (char) ((i+key)%26+97);
        }
    }
}

                

Lösung von: Name nicht veröffentlicht

// NET 6.x | C# 10.x | VS-2022

static string EncryptText(string text, int move, char eof, bool toUpper = true)
{
    var getChar = (char c) => c is >= 'A' and <= 'Z' ? (char)('A' + ((c - 39 + Math.Abs(move)) % 26)) : c;
    return new string(text.Split(eof)[0].Select(c => char.IsUpper(c) || toUpper ? getChar(char.ToUpper(c)) : char.ToLower(c)).ToArray());
}

var text = "Das hier ist ein Beispieltext; der auch noch weitergeht!";
Console.WriteLine(EncryptText(text, 5, ';', true));
                

Lösung von: Jens Kelm (@JKooP)

// C++ 14 | VS-2022

#include <iostream>

std::string encrypt_text(std::string txt, int move, char eof, bool upper_case = true) {
    const auto& get_char{ [&move](char c) { return c >= 'A' && c <= 'Z' ? (char)('A' + ((c - 39 + abs(move)) % 26)) : c; } };
    std::string txt_out{};
    for (const auto& s : txt.substr(0, txt.find(eof)))
        txt_out += isupper(s) || upper_case ? get_char(toupper(s)) : tolower(s);
    return txt_out;
}

int main() {
    auto txt{ "Das hier ist ein Beispieltext; der auch noch weitergeht!" };
    std::cout << encrypt_text(txt, 5, ';', true) << "\n";
}
                

Lösung von: Jens Kelm (@JKooP)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.25
Schwierigkeit: Mittel
Webcode: bk0j-50z5
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen