Voilà j'ai un DM en informatique à rendre, même si la date limite est passé il me reste deux ou trois jours pour le rendre, bien évidemment cela me vaudra des points malus.
Nous devons rendre un DM avec Dr Scheme, je n'ai pas compris grand chose à ce logiciel de programmation et je suis perdue pour ce dm alors je vous demande votre aide vous génies de l'informatique.
Merci d'avance

Pour ce DM, je dois utiliser des fonctions prédéfinies qui sont celles-ci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
(define (lireChaine)
  ; renvoie un mot saisi au clavier sans " et sans espace
  ; -> chaine
  (symbol->string(read)))


(define (premier chaine)
  ; renvoie le premier caractère d'une chaine saisie au clavier
  ; chaine non vide -> char
  (string-ref chaine 0 ))

(define ( dernier ch)
  ; renvoie le dernier caractere d'une chaine 
  ; chaine non vide -> char
  (string-ref ch (-(string-length ch)1)))

(define (debut ch )
  ; renvoie la chaine de caractere sans le dernier caractere
  ; chaine non vide -> string
  ( substring ch 0 (- (string-length ch)1 )))

(define ( fin ch )
  ; renvoie une chaine sans son premier caractere
  ; chaine non vide -> string  
  (substring ch 1))

(define (carChaine c ch)
  ; renvoie la chaine avec un caractère suplémentaire devant
  ; string, caractere -> string non vide
  (string-append (string c) ch))

(define (chaineCar ch c)
  ; renvoie la chaine avec un caractère suplémentaire à la fin
  ; string, caractere -> string non vide
  (string-append ch (string c)))

et voici ce que j'ai fait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
(load "F:\\chaines.ss")
; Exercice 1

; Programme cryptage décalage de l'alphabet
; Auteur: M.Dupassieux, Avril 2013

(define ( decalDroite ch x)
  ; revoie une chaîne de caratère renvoyée à droite par l'application d'un entier x sur une chaîne de caractère ch
  ; chaîne de caratère, entier >= 0 -> chaîne de caratère
  (if (= x 0)ch ; si x est nul decalDroite renvoie ch
        (decalDroite(carChaine(dernier ch)(debut ch))(- x 1)))) 


(define(carDeMemeRang c ch1 ch2)
  ; recherche un caractère c dans une chaine de caractère ch1 qui va renvoyer l'équivalent de c dans ch2
  ; caractère, 2 chaînes de caractères de même longueur -> caractère
  (if(equal? ch1 "")c
     (if(equal? c (premier ch1))(premier ch2)
        (carDeMemeRang c (fin ch1)(fin ch2)))))

; Exercice 2
(define(appartient? c ch)
  ; revoie vrai si et seulement si le caractère c appartient à la chaîne de caractère ch
  ; caractère, chaîne de caractère -> booléen
  (if(char-ci=? c(premier ch)) #t ; revoie vrai si le premier caractère appartient à ch
             (appartient? c(fin ch)))) ; regarde si dans la fin de ch si c est présent


(define(supprDoublons Double)
  ; revoie une chaîne de caractère sans lettre multiples depuis une chaîne de caractère ch
  ; chaîne de  caractère -> chaîne de caractère
  (cond ((string=? Double "")"")
        ((appartient?(string-ref Double(-(string-length Double)1))(debut Double)))
        ((supprDoublons(debut Double)))
        (else(chaineCar(supprDoublons(debut Double))(string-ref Double(-(string-length Double)1)))))


(define(groupeEnTete ch1 ch2)
  ; renvoie une chaîne de caractère sans doublons construite par deux chaînes de caractères ch1 et ch2
  ; 2 chaines de caractères -> chaine de caractères
  
  

  
;Exercice 3
  
(display "Bonjour veuillez tapper le texte que vous voulez crypter et terminer par $")
  
(define(lireTexte)
    ; renvoie un texte saisie au clavier avec espace et majuscule
    ; -> chaine
    (symbol-> string(read-char)))
  
(display "Quelle clé de cryptage ou décryptage souhaité vous choisir ?")
  
(define(alphaTrans Clé Ch)
    ; renvoie l'alphabet transformé à partir d'un choix entre 3 clés Clé ('décalage, 'permutation et 'combiné) et d'une chaine de caractère Ch
    ; symbole, chaine de caractère -> chaine de caractère            

(display "Quel est le texte à traduire ? Quel est l'alphabet source à utiliser ? Quel est l'alphabet cible ?")

(define(traduit Text As Ac)
  ; renvoie le texte Text traduit par les deux chaines As et Ac
  ; 3 chaines de caractères -> chaine de caractère
  
(display "Voulez vous crypter ou décrypter votre texte ?")  

(define(crypte text1 cle1)
  ; renvoie un texte crypté depuis un texte text1 et une clé cle1
  ; 2 chaines de caractères -> chaine de caractère
  
  
(define(decrypte text2 cle2)
  ; renvoie un texte décrypté depuis un text2 et une clé cle2
  ; 2 chaînes de caractères -> chaines de caractère