1
votes

Définissez une procédure qui prend trois nombres comme arguments et renvoie la somme des carrés des deux plus grands nombres

J'ai du mal à trouver comment trier les 2 plus grands nombres et les renvoyer dans la procédure de somme des carrés. J'ai du mal à écrire le code dans la syntaxe de Scheme. J'essaie de l'écrire aussi proprement que possible, et je continue de faire des cercles dans ma tête et sur papier en essayant de le faire. le livre décrit la pensée «procédurale» et je pense que j'ai des problèmes avec cet aspect.

Le livre fournit du code pour les procédures de la somme des carrés et des carrés. J'inclurais mon pseudo code mais je suis gravement perdu. Voici le code fourni par le livre:

(define (square x) (* x x))

(define (sum-of-squares x y)
  (+ (square x) (square y)))

Comment définir une procédure qui prend trois nombres comme arguments et renvoie la somme des carrés des deux plus grands nombres? P >


2 commentaires

Et votre question est ...?


Copie possible de la demande de commentaires SICP exercice 1.3


3 Réponses :


1
votes

Comment définir une procédure qui prend trois nombres comme arguments et renvoie la somme des carrés des deux plus grands nombres?

Vous avez d'abord besoin d'un nom pour la procédure. Appelons-le sum-of-squares-two-largest .

(define (sum-of-squares-two-largest x y z)
   (if (smallest? x y z)
       (sum-of-squares y z)
       (if (smallest? y x z)
           ...]

Il peut utiliser la somme-des-carrés , mais il doit d'abord trouver les deux plus grands nombres parmi x, y, z.

Une façon de faire serait de se débarrasser du plus petit nombre. Vous pourriez définir une procédure d'aide plus petite? abc qui vérifie que a est le plus petit des 3 nombres en faisant (et (.

(define (sum-of-squares-two-largest x y z)
   ...)

0 commentaires

0
votes

Écrivez le code pour min-of-trois . Son négatif (comme en photographie) est ce dont vous avez besoin:

(define (negative-min-of-three a b c)
   (if (<= a b)
       (if (<= a c)
           (..... b ... c .....)
           (..... a ... b .....))
       (if (<= 
   ..........

Vous pouvez compléter le code et le renommer. L'horloge tourne!


1 commentaires

au cas où un vote négatif serait rebuté par la dernière phrase de cette réponse, il s'agissait d'une référence à la déclaration du profil d'OP, destinée à être un encouragement. Je n'ai aucune idée de ce qui aurait pu être la raison.



0
votes

J'ai créé deux méthodes pour obtenir la plus grande et celle du milieu pour le moment.

(define (largest x y z)
  (cond ((and (> x y) (> x z)) x)
        ((and (> y x) (> y z)) y)
        (else z))
)

(define (mid x y z)
  (cond ((and (> x y) (< x z)) x)
        ((and (> y x) (< y z)) y)
        (else z))
)

(define (square a)
  (* a a)
)

(define (sum-of-two-largest x y z)
  (+ (square (largest x y z)) (square (mid x y z)))
)

(sum-of-two-largest -12 -4 1)


0 commentaires