cours  |  td  |  examens  |  doc  |  liens  |  horaires
 Scheme

Université de Caen - UFR de Sciences
Deug MIAS-MASS
Marc Chemillier

Scheme - TD n° 8
16 avril 2003

Objets d'interface
Récursions sur les listes (suite et fin)




  • Exercices : (1h1/2)

    1. Construire l'interface ci-après. L'action des zones texte est void. L'action du premier bouton consiste à afficher dans la zone texte "Bonjour Toto", et celle du deuxième bouton "Bonjour Titi" (Septembre 2002).

      
      (define w (make-object frame% "")) 
      (define t1 (make-object text-field% "Message:" w void)) 
      (define (action1 o e)  (send t1 set-value "Bonjour Toto")) 
      (define (action2 o e)  (send t1 set-value "Bonjour Titi")) 
      (make-object button% "Toto" w action1) 
      (make-object button% "Titi" w action2) 
      (send w show #t)
      
      
    2. Faire l'interface ci-après. Quand on rentre une lettre dans une fenêtre, elle s'affiche dans l'autre.

      
      (define w (make-object frame% "")) 
      (send w show #t) 
      
      (define (action o e)
        (send (if (equal? o t1) t2 t1) set-value (send o get-value)))
      
      (define t1 (make-object text-field% "Texte1" w action)) 
      (define t2 (make-object text-field% "Texte2" w action))
      
      
    3. Rajouter un bouton dans l'interface qui vide les fenêtres de texte quand on clique.

      
      (define (vider o e)
        (send t1 set-value "") (send t2 set-value ""))
      
      (make-object button% "Bouton" w vider)
      
      
    4. Construire l'interface ci-après. L'action des zones texte est void. L'action du bouton consiste à afficher dans la zone texte inférieure "Pair" ou "Impair" selon la parité du nombre placé dans la zone texte supérieure. On utilisera la fonction string->number qui transforme en nombre une chaîne de caractères. Exemple : (string->number "3") --> 3 (Juin 2002).

      
      (define w (make-object frame% ""))
      
      (define t1 (make-object text-field% "Nombre:" w void))
      
      (define (action o e)
        (send t2 set-value
              (if (even? (string->number (send t1 get-value))) "Pair" "Impair")))
      
      (make-object button% "Click" w action) 
      (define t2 (make-object text-field% "Resultat:" w void)) 
      (send w show #t)
      
      
    5. Faire la fonction (met-a-zero l) qui remplace tous les éléments de l qui sont des nombres par des 0.
      (define (met-a-zero l)
        (cond ((null? l) ())
              ((number? (car l)) (cons 0 (met-a-zero (cdr l))))
              (else (cons (car l) (met-a-zero (cdr l))))))
      
      = (map (lambda (x) (if (number? x) 1 x)) l)
      
      (define (met-a-zero l)
        (cond ((null? l) ())
              (else (cons (if (number? (car l)) 0 (car l))
                          (met-a-zero (cdr l))))))
      
    6. Faire la fonction (mixage l1 l2) qui fabrique une nouvelle liste en alternant les éléments de l1 et l2:
      > (mixage '(1 2 3 4 5) '(a b c)) 
      (1 a 2 b 3 c 4 5) 
      
      > (mixage '(une voiture la ensoleillee) '(belle sur route)) 
      (une belle voiture sur la route ensoleillee)
      
      
      (define (mixage l1 l2)
        (cond ((null? l1) l2)
              (else (cons (car l1) (mixage l2 (cdr l1))))))
      
    7. Faire la fonction (coupler l1 l2) qui fabrique la liste des couples d'éléments de l1 et l2 en même position.
      (define (coupler l1 l2)
        (cond ((or (null? l1) (null? l2)) ())
              (else (cons (list (car l1) (car l2))
                          (coupler (cdr l1) (cdr l2))))))
      
    8. Faire la fonction (double l) qui double tous les éléments de l:
      > (double '(je be gaye)) 
      (je je be be gaye gaye)
      
      (define (double l)
        (cond ((null? l) ())
              (else (cons (car l)
                          (cons (car l) (double (cdr l)))))))
      
    9. Faire une fonction (remplace-max l) qui remplace les deux premiers éléments de l par le plus grand des deux. En remarquant que la liste obtenue est strictement plus courte que l, en déduire une fonction (maximum l) qui calcule l'élément maximum d'une liste de nombres.
      (define (maximum l)
        (cond ((null? l) ())
              ((null? (cdr l)) (car l))
              (else (maximum (remplace-max l)))))
      
      (define (remplace-max l)
        (cons (if (> (car l) (cadr l)) (car l) (cadr l))
              (cddr l)))
      

  • Avec machines : (1h1/2) Interface de l'awélé


    cours  |  td  |  examens  |  doc  |  liens  |  horaires
     Scheme