Сделайте программу, которая определяет среднее число его цифр из числа - PullRequest
0 голосов
/ 02 апреля 2020

Я должен составить программу, которая усредняет цифры числа, но для меня это невозможно, особенно модуль деления (остаток).

Что я могу сделать?

(define (digitos number)
  (cond
  [(and (>= number 1) (< number 11)) 1]
  [else (+ 1 (digitos (/ number 10)))]))

(define (modulo_ n m)
  (cond
    [(real? n) (- n (* (floor (/ n m)) m))]
    [else (remainder n m)]))

(define (sumatoria number)
  (cond
    [(equal? number 0) 0]
    [else (+ (modulo_ number 10) (sumatoria (/ number 10)))]))

(define (promedio number)
  (/ (sumatoria number) (digitos number)))

;(promedio 40) ;3

1 Ответ

0 голосов
/ 03 апреля 2020

обновление: ваш вопрос повторяется Как подсчитать количество цифр? Количество цифр в списке Ракетка Возвращает сумму нечетных цифр числа Преобразовать число в список цифр

; only consider nature number 0,1,2,3,...
; if you want input Decimal use number->string

(define (cut-right-digit n)
  (/ (- n (remainder n 10)) 10))

(define (sum-each-digit n result)
  (cond
    [(<= 0 n 9)
     (+ result n)]
    [else 
     (sum-each-digit (cut-right-digit n) (+ result (remainder n 10)))]))

(define (digits n result)
  (cond
    [(<= 0 n 9)
     result]
    [else
     (digits (cut-right-digit n) (+ 1 result))]))

(define (avg-digits n)
  (/ (sum-each-digit n 0) (digits n 1)))

;;; TEST

(avg-digits 0) ; 0
(avg-digits 1) ; 1
(avg-digits 11111) ; 1
(avg-digits 10203040506789) ; (/ 55 14)
(avg-digits 101001) ; 1/2

...