NoPaste

"Mathematischer Zaubertrick"

von heinz

SNIPPET_TEXT:
  1. #!/bin/bash
  2. #
  3. # MATHE-RAETSEL (Zaubertrick)
  4. #
  5. # Dieses Script ermittelt eine beliebige, von Ihnen bestimmte Ziffer
  6. # aus einer von Ihnen bestimmten Zahl.
  7. #
  8. # Ursprungstext, loesungsweg und Beispiel, siehe am Ende des Scriptes.
  9. #
  10.  
  11.  
  12.  
  13. # Funktion, auf Tastendruck warten.
  14. function Warte
  15. {
  16.         echo
  17.         read -sn1 -p '  Druecken Sie eine beliebige Taste um Fortzufahren.'
  18.         echo -e '\n'
  19. }
  20.  
  21.  
  22.  
  23. # Beschreibung der Aufgabe ausgeben.
  24. clear
  25. echo "Fuer dieses Experiment benoetigen wir eine groessere Zahl."
  26. echo "Denken Sie sich zu diesem Zweck eine beliebig grosse Zahl aus und"
  27. echo "schreiben Sie diese auf."
  28. Warte
  29. echo "Multiplizieren Sie nun diese Zahl mit 9, um sie weiter zu vergroessern."
  30. echo "Notieren Sie sich auch diese Zahl."
  31. Warte
  32. echo "Suchen Sie sich nun eine Ziffer aus der errechneten Zahl aus und markieren"
  33. echo "Sie diese. Diese Ziffer werde ich versuchen zu erraten."
  34. Warte
  35. echo "Geben Sie nun alle Ziffern der errechneten Zahl ein (ausser der Markierten) und"
  36. echo "bestaetigen Sie die Eingabe mit der ENTER-Taste."
  37. echo "Wenn Sie moechten, koennen Sie die Ziffern auch gerne in beliebiger Reihenfolge"
  38. echo "eingeben."
  39. echo
  40.  
  41. # Ziffern abfragen.
  42. read -p 'Wie lauten diese Ziffern? '
  43. echo -e '\n'
  44.  
  45.  
  46. # Eingabe pruefen.
  47. while test -n "${REPLY//[0-9]}" -o -z "$REPLY"
  48. do
  49.         echo -e "\a\nIhre Eingabe enthaelt ungueltige Zeichen! (>${REPLY//[0-9]}<)"
  50.         read -p 'Wie lauten die Ziffern? '
  51.         echo -e '\n'
  52. done
  53.  
  54.  
  55. # Quersumme bilden.
  56. w=$((`sed 's#[0-9]#&+#g' <<<"$REPLY"`0))
  57.  
  58. # Sonderfall: Quersumme ist null
  59. test $w -eq 0 && z=9 || z=0
  60.  
  61.  
  62. # Zaehlen, bis zum naechsten "glatt" durch 9 teilbaren Wert.
  63. while test $((($w+$z)%9)) -ne 0
  64. do
  65.         let z++
  66. done
  67.  
  68. # Ergebnis ausgeben.
  69. echo -e "\nDie von Ihnen zuvor markierte Ziffer ist eine >$z<.\n"
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81. # MATHE-RAETSEL
  82. #
  83. # Du bittest eine Person, sich eine beliebig lange Zahl auszudenken,
  84. # die sie dir nicht nennt, und diese mit 9 zu multiplizieren.
  85. # Aus dem Ergebnis soll er nun eine beliebige Ziffer herausstreichen und
  86. # dir die uebrig bleibenden Ziffern in beliebiger Reihenfolge nennen.
  87. # Sofort kannst du genau sagen, welche Ziffer der Zuschauer durchgestrichen hatte.
  88. #
  89. #
  90. # Loesung:
  91. # Aus den genannten Ziffern die Quersumme ausrechnen.
  92. # Die naechste Zahl errechnen die "glatt" durch 9 teilbar ist.
  93. # Die Differenz ist die Zahl, die gestrichen wurde.
  94. #
  95. # Sonderfall:
  96. # Ist die Quersumme 0, ist die gestrichene Ziffer 9.
  97. #
  98. #
  99. # Beispiel:
  100. # Gedachte Zahl ist 282
  101. # 282 * 9 = 2538
  102. # Gie Zahl 3 wird gestrichen. Bleibt 25 8
  103. # 2 + 5 + 8 = 15
  104. # Die naechst hoehere Zahl die durch 9 Teilbar ist, ist die 18
  105. # Die Differenz von 18 - 15 = 3
  106. # Die 3 ist die gestrichene Zahl...
  107. #
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN