Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.10 KB | None | 0 0
  1. #lang racket
  2.  
  3. (display "Musterlösung für Übungsblatt 5 - Strings")
  4. (newline)
  5. ;Aufgabe 1 - ohne vordefinierte Prozedur char-downcase
  6. (define (toLower string)
  7. (list->string (toLower-lst (string->list string)))
  8. )
  9.  
  10. (define (toLower-lst lst)
  11. (cond ((null? lst) '())
  12. ((isUpperCase (car lst)) (cons (lowerChar (car lst)) (toLower-lst (cdr lst))))
  13. (else (cons (car lst) (toLower-lst (cdr lst))))
  14. )
  15. )
  16.  
  17. (define (lowerChar c) (integer->char (+ (char->integer c) 32)))
  18.  
  19. (define (isUpperCase c)
  20. (and (>= (char->integer c) 65) (<= (char->integer c) 90)) ; A - Z
  21. )
  22.  
  23. (display "Beispiele - Aufgabe 1")
  24. (newline)
  25. (toLower "HALLO")
  26. (toLower "Das ist Ein TeST")
  27.  
  28. ;Aufgabe 2
  29. (define (countchar string char)
  30. (countchar-lst (string->list string) char)
  31. )
  32.  
  33. (define (countchar-lst lst char)
  34. (cond ((null? lst) 0)
  35. ((char=? (car lst) char) (+ 1 (countchar-lst (cdr lst) char)))
  36. (else (countchar-lst (cdr lst) char))
  37. )
  38. )
  39.  
  40.  
  41. (display "Beispiele - Aufgabe 2")
  42. (newline)
  43. (countchar "Hallo" #\l)
  44. (countchar "Ein ganz normaler Satz." #\n)
  45.  
  46. ;Aufgabe 3
  47. (define (custom-substring string index length)
  48. (list->string (substring-lst (string->list string) index length))
  49. )
  50.  
  51. (define (substring-lst lst index length)
  52. (cond ((null? lst) '())
  53. ((= length 0) '())
  54. ((> index 0) (substring-lst (cdr lst) (- index 1) length))
  55. ((> length 0) (cons (car lst) (substring-lst (cdr lst) 0 (- length 1))))
  56. (else '())
  57. )
  58. )
  59.  
  60. (display "Beispiele - Aufgabe 3")
  61. (newline)
  62. (custom-substring "Hallo wie gehts?" 6 3)
  63. (custom-substring "Test" 42 10)
  64. (custom-substring "Test" 0 10)
  65.  
  66. ;Aufgabe 4
  67. (define (hasPrefix string prefix)
  68. (hasPrefix-lst (string->list string) (string->list prefix))
  69. )
  70.  
  71. (define (hasPrefix-lst lst plst)
  72. (cond ((and (null? lst) (not (null? plst))) #f) ; wenn Ende von lst erreicht aber nicht von plst
  73. ((null? plst) #t)
  74. ((not (char=? (car lst) (car plst))) #f)
  75. (else (hasPrefix-lst (cdr lst) (cdr plst)))
  76. )
  77. )
  78.  
  79. (display "Beispiele - Aufgabe 4")
  80. (newline)
  81. (hasPrefix "my_test" "my_")
  82. (hasPrefix "mx_test" "my_")
  83. (hasPrefix "he" "hey")
  84. (hasPrefix "test" "test")
  85.  
  86. ;Aufgabe 5 + 6
  87. (define (caeser-encrypt string n)
  88. (list->string (caeser-encrypt-lst (string->list string) n))
  89. )
  90.  
  91. (define (caeser-encrypt-lst lst n)
  92. (cond ((null? lst) '())
  93. (else (cons (integer->char (modulo (+ (char->integer (car lst)) n) 128))
  94. (caeser-encrypt-lst (cdr lst) n)))
  95. )
  96. )
  97.  
  98. (define (caeser-decrypt string n)
  99. (list->string (caeser-decrypt-lst (string->list string) n))
  100. )
  101.  
  102. (define (caeser-decrypt-lst lst n)
  103. (cond ((null? lst) '())
  104. (else (cons (integer->char (modulo (- (char->integer (car lst)) n) 128))
  105. (caeser-decrypt-lst (cdr lst) n)))
  106. )
  107. )
  108.  
  109. (display "Beipsiele - Aufgabe 5 und 6")
  110. (newline)
  111. (define geheim (caeser-encrypt "Ein Test" 5))
  112. (display "Ergebnis aus caesar encrypt wird als geheim definiert: Ein Test -> ")geheim(display " -> geheim -> ")(caeser-decrypt geheim 5)
  113.  
  114.  
  115. ;Aufgabe 7
  116. (define (transform operation . args )
  117. (transform-lst operation args)
  118. )
  119.  
  120. (define (transform-lst operation lst)
  121. (cond ((null? lst) '())
  122. (else (cons (operation (car lst)) (transform-lst operation (cdr lst))))
  123. )
  124. )
  125.  
  126.  
  127. (display "Beispiele - Aufgabe 7")
  128. (newline)
  129. (transform (lambda (y) (* y y)) 1 2 3 4 5)
  130. (define (machGerade y) (if (odd? y) (+ y 1) y))
  131. (transform machGerade 1 2 3 4 5)
  132.  
  133. ;Aufgabe 8 iterativ
  134. (define (stringformat-iter format . x)
  135. (list->string (stringformat-iter-lst (string->list format) x '() )))
  136.  
  137. (define (stringformat-iter-lst format lst new)
  138. (cond ((null? format)new)
  139. ((not(char=? (car format) #\*))(stringformat-iter-lst (cdr format)
  140. lst
  141. (append new (list(car format) ))))
  142. (else (stringformat-iter-lst (cdr format)
  143. (cond ((> (length lst) 1) (cdr lst))
  144. (else lst))
  145. (append new (string->list (car lst)))))))
  146.  
  147. ;Aufgabe 8 rekursiv
  148. (define (stringformat-rek format . x)
  149. (list->string (stringformat-rek-lst (string->list format) x)))
  150.  
  151. (define (stringformat-rek-lst format lst)
  152. (cond ((null? format) '())
  153. ((char=? (car format) #\*)(stringformat-rek-lst (append (string->list (car lst))(cdr format))
  154. (cond ((> (length lst) 1) (cdr lst))
  155. (else lst))))
  156. (else (cons (car format)
  157. (stringformat-rek-lst (cdr format) lst)))))
  158.  
  159.  
  160. (display "Beipsiele - Aufgabe 8")
  161. (newline)
  162. (stringformat-rek "Hallo * heute ist es *" "Welt" "schoen")
  163. (stringformat-rek "* ist ein * Fach, das ist *" "Algorithmik" "super")
  164. (stringformat-rek "* ist ein * Fach, das ist *" "Chemie" "blödes" "schade")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement