Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

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

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (2)

Hilli 28. Oktober 2014 03:05   reply report
Die Python tkinter GUI Loesung entspricht nicht der Spezifikation Nebel --> Leben. Die Grossbuchstaben am Wortanfang werden nicht gesetzt: Nebel --> lebeN.
gressly 4. April 2013 06:45   reply report
Die Aufgabe ist unverständlich.

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.

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: Mittel
Webcode: kynx-z7dy
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen