Backtracking (Schleifen)
Schreiben Sie eine Subroutine (Unterprogramm), das ein Wort entgegen nimmt, und dieses rückwärts wieder ausgibt.
Prototyp:
«function» backTrackWord(ac: string): string;
Zusatzaufgabe: Versuchen Sie einen rekursiven Algorithmus dazu zu finden.
2 Kommentare
14 Lösung(en)
wort = input("Geben Sie das Wort ein: ")
wort_von_hinten = wort[::-1]
print ("Das Wort von hinten gelesen: ", wort_von_hinten)
Lösung von: Py Thon ()
public final class ReverseTest {
public static void main(final String[] args) {
final String word = "nebel";
System.out.println("Normal: " + word);
System.out.println("Umgekehrt: " + reverse(word));
}
public static String reverse(final String word) {
return word.length() <= 1 ? word
: reverse(word.substring(1)) + word.charAt(0);
}
}
Lösung von: Name nicht veröffentlicht
import java.util.Scanner;
public class stringumdrehen {
// Kehrt den String um durch das überschreiben eines Arrays
private String stringDurchArrayUmdrehen1(String str) {
// Array das umgekehrt wird
char[] c = str.toCharArray();
// Array das normal bleibt
char[] d = c.clone();
// String der am Ende wiedergegeben wird
str = "";
// Array wird umgedreht und dann in den String geschrieben
for (int i = 0; i < d.length; i++) {
c[i] = d[d.length - i - 1];
str = str + String.valueOf(c[i]);
}
return str;
}
// Kehrt den String um indem ein Array von hinten ausgelesen wird
private String stringDurchArrayUmdrehen2(String str) {
// Array das den String beinhaltet
char[] c = str.toCharArray();
// String der am Ende wiedergegeben wird
str = "";
// Array wird, von hinten angefangen, in den String geschrieben
for (int i = c.length - 1; i >= 0; i--) {
str = str + String.valueOf(c[i]);
}
return str;
}
// Kehrt den String um durch einen StringBuffer und dessen Methode reverse()
private String stringDurchStringBufferUmdrehen(String str) {
/*
* String wird einem StringBuffer Objekt übergeben, welches umgedreht
* wird und dann wieder zu String umgewandelt wird.
*/
return (str = new StringBuffer(str).reverse().toString());
}
// Hauptmethode
public static void main(String[] args) {
// Klassenobjekt um auf die Methoden zugreifen zu können
stringumdrehen tue = new stringumdrehen();
// Scanner um das umzudrehende Wort einzulesen
Scanner scan = new Scanner(System.in);
/*
* Alle 3 Befehle kehren den String um. 2 davon sind nur auskommentiert
* damit die Hauptmethode aufrufbar bleibt ohne ihre Funktion zu ändern
*/
System.out.println(System.getProperty("line.separator")
+ tue.stringDurchArrayUmdrehen1(scan.nextLine()));
// System.out.println(System.getProperty("line.separator")
// + tue.stringDurchArrayUmdrehen2(scan.nextLine()));
// System.out.println(System.getProperty("line.separator")
// + tue.stringDurchStringBufferUmdrehen(scan.nextLine()));
scan.close();
}
}
Lösung von: Sebastian Littel ()
var result="";
function backtrackword(string){
string.length > 1 ? backtrackword(string.substr(1, string.length-1)) : false;
result += string[0];
return result;
}
Lösung von: Name nicht veröffentlicht
package ch.programmieraufgaben.iteration.backtrack;
import java.util.Scanner;
/**
* Es geht ohne Rekursion sogar einfacher!
* @author Philipp Gressly (phi@gressly.ch)
*/
public class BackTrackWord {
public static void main(String[] args) {
new BackTrackWord().top();
}
Scanner sc = new Scanner(System.in);
String wortLesen(String name) {
System.out.println(name);
return sc.nextLine();
}
String backTrackWord(String ac) {
return (new StringBuffer(ac)).reverse().toString();
}
void top() {
String wort = wortLesen("Wort");
System.out.println("Rückwärts: " + backTrackWord(wort));
}
} // end of clas
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
#Das gleiche noch einmal nur mit einer tkinter - GUI
import tkinter as tk
def einlesen():
wort.config(text = wort_entry.get())
def umdrehen():
wort_gedreht = wort_entry.get()[::-1]
wort.config(text = wort_gedreht)
main = tk.Tk()
wort_label =tk.LabelFrame(main, text = "Wort")
wort_label.grid()
wort_entry = tk.Entry(wort_label)
wort_entry.grid()
wort = tk.Label(main)
wort.grid()
button_einlesen = tk.Button(main, text = "Wort einlesen", command = einlesen)
button_einlesen.grid()
button = tk.Button(main, text = "Wort umdrehen", command = umdrehen)
button.grid()
main.mainloop()
Lösung von: Py Thon ()
#include <stdio.h>
#include <conio.h>
void backTrack(char* ptr) {
char *ptrNext = ptr+1;
if(*ptrNext!='\0')
backTrack(ptrNext);
printf("%c", *ptr);
}
int main() {
char string[100];
printf("Bitte Eingabe: ");
gets(string);
backTrack(string);
return 0;
}
Lösung von: Christian :) (Hochschule Merseburg)
private string reverse(string Str) {
string Result = "";
for(int i = 0; i < Str.Length; i++) {
Result = Str[i] + Result;
}
return Result;
}
Lösung von: Kurt Cobain ()
# Python 3.4.2
def backTrackWord(wort):
rueckwaerts = ''
laenge = len(wort)
for i in range(laenge, 0, -1):
rueckwaerts += wort[i -1]
print(wort.title(), '-->', rueckwaerts.title())
wort = input('Welches Wort soll rueckwaerts ausgegeben werden? ')
backTrackWord(wort)
Lösung von: Hilli Hilli ()
// nicht-rekursiv
function backTrackWord(str) {
return str.split("").reverse().join("");
}
// rekursiv
function backTrackWordRec(str) {
if (str.length > 0)
return str[str.length-1] + backTrackWordRec(str.substr(0, str.length - 1));
return str;
}
console.log(backTrackWord("hallo"));
console.log(backTrackWordRec("hallo"));
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
static void Main(string[] args)
{
Console.WriteLine("Bitte geben Sie Ihren Text ein:");
Console.WriteLine(Rückwärts(Console.ReadLine()));
Console.ReadLine();
}
static private string Rückwärts(string input)
{
string ausgabe = "";
for (int i = 0; i <= input.Length-1; i++)
{
ausgabe = input.Substring(i, 1)+ausgabe;
}
return ausgabe;
}
Lösung von: Michael Senzenberger (Lehrausbildung zum IT-Informatiker)
// NET 6.x | C# 10.x | VS-2022
// Variante 1 (mit Bordmitteln)
string Backtracking1(string s) => new string(s.ToCharArray().Reverse().ToArray());
// Variante 2 (als 'halbe' Schleife)
string Backtracking2(string s) {
var c = s.ToCharArray();
for (int i = 0; i < c.Length / 2; i++)
(c[i], c[^(i + 1)]) = (c[^(i + 1)], c[i]);
return new string(c);
}
// Variante 3 (rekursiv)
string Backtracking3(string s) => s.Length <= 1 ? s : Backtracking3(s[1..]) + s[0];
Console.WriteLine(Backtracking1("Leben"));
Console.WriteLine(Backtracking2("Leben"));
Console.WriteLine(Backtracking3("Leben"));
Lösung von: Jens Kelm (@JKooP)
// C++ 17 | VS-2022
#include <iostream>
using s_t = std::string;
s_t backtracking_1(const s_t& s) {
return (s.size() <= 1 ? s : backtracking_1(s.substr(1)) + s[0]);
}
s_t backtracking_2(const s_t& s) {
auto t{ s };
std::reverse(t.begin(), t.end());
return t;
}
s_t backtracking_3(const s_t& s) {
s_t t{};
for (auto it{ s.rbegin() }; it != s.rend(); ++it)
t.push_back(*it);
s_t str(t);
return str;
}
s_t backtracking_4(const s_t& s) {
s_t t{ s };
for (size_t i{ 0 }; i < t.length() / 2; ++i)
std::swap(t[i], t[t.size() - 1 - i]);
return t;
}
int main() {
const s_t str{ "Leben" };
std::cout << backtracking_1(str) << "\n";
std::cout << backtracking_2(str) << "\n";
std::cout << backtracking_3(str) << "\n";
std::cout << backtracking_4(str) << "\n";
}
Lösung von: Jens Kelm (@JKooP)
' VBA
Function Backtracking(txt$)
arr = Split(StrConv(txt, vbUnicode), Chr$(0))
ubd% = UBound(arr)
For i% = LBound(arr) To ubd / 2
tmp$ = arr(i)
arr(i) = arr(ubd - i)
arr(ubd - i) = tmp
Next i
Backtracking = Join(arr, "")
End Function
Sub Main()
Debug.Print Backtracking("LEBEN")
End Sub
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
Nebel --> Leben
bzw.
Nebel --> lebeN
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Kommentare (2)
Was bedeutet "ein Wort wird rückwärts gelesen?"
Wie kann man mit einer Rekursion etwas zeigen, das ja vielleicht Iterativ bereits gelöst ist?
Sollte man nicht eher ein Programm (oder Unterprogramm) schreiben, als einen Sachverhalt theoretisch zu beweisen?
Ich würde die Aufgabe umformulieren:
"Schreiben Sie eine Subroutine (Unterprogramm), das ein Wort entgegen nimmt, und dieses rückwärts wieder ausgibt.
Prototyp:
(function)
rueckwaerts(eingabe: String): String
(Ob die Aufgabe dann rekursiv oder iterativ gelöst wird, steht nicht in unserer Macht.)
Wir können jedoch eine Zusatzaufgabe formulieren:
Zusatzaufgabe: Versuchen Sie dazu einen rekursiven Algorithmus dazu zu finden.