Benutzer:Eritschierschke/Schnapszahlen

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
<language>Scheme</language>
=== ZA: Schnapszahlen ===

Aus einer vorgegebenen numerischen Liste sollen alle Schnapszahlen herausgesucht werden.

'''Beispiel:'''

<pre>(numliste '(2 3 5 -1 3 6 11 18 15 0 19 27 -33 -2 55 31 7 39 22 1))
--> (11 55 22)</pre>

Zunächst sollten wir uns klarmachen, was wir unter einer Schnapszahl verstehen wollen:

'''Beschreibung:'''
* Eine einstellige oder negative Zahl ist keine Schnapszahl.
* Eine zweistellige Zahl ist eine Schnapszahl, wenn beide Ziffern gleich sind. 
* Eine mehrstellige Zahl ist eine Schnapszahl, wenn ihre letzten beiden Ziffern gleich sind und die Zahl ohne die letzte Ziffer eine Schnapszahl ist.

Es empfiehlt sich, ein separates Prädikat zur Schnapszahlprüfung zu implementieren.<br />

'''Hinweise:'''
<ul>
<li>
Mit der Prozedur <tt>quotient</tt> kann eine ganzzahlige Division ohne Rest ausgeführt werden:
<pre>(quotient 35 10) --> 3
(quotient 7 10)  --> 0</pre>
</li>
<li>
Mit der Prozedur <tt>modulo</tt> kann der Rest einer ganzzahlige Division ermittelt werden:
<pre>(modulo 35 10) --> 5
(modulo 7 10)  --> 7</pre>
</li>
</ul>

'''Implementation:'''
 
<code id="4cad83c8b810c">
(define schnapszahl?
  (lambda (n)
    ...))

(define schnapszahlen-h
  (lambda (ls lss)
    ...))

(define schnapszahlen
  (lambda (ls)
    ...))
</code>

<check>
(and (listequal? (schnapszahlen '(2 3 5 -1 3 6 11 18 15 0 19 27 -33 -2 55 31 7 39 22 1))
                 '(11 55 22))
     (listequal? (schnapszahlen '(77777777777777777777 77777778777777777777)) '(77777777777777777777))
     (listequal? (schnapszahlen '(297 121 1 0 -1)) '()))
</check>

<run id="529e3e2bab93c">(schnapszahlen numliste)</run>