Il doit bien y avoir un moyen de l'écrire pour Turbo Pascal. Peut-être une procédure au lieu d'une fonction ? Personnellement je n'ai pas Turbo Pascal.
Version imprimable
Bonne idée ! Pour tester je me suis installé TP7 sous DosBox et ça donne ceci :
Et ça marche ! aussi bien sous DosBox/TP7 que FPCCode:
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 program TESTSET; Type AlphaChar = 'a'..'z'; AlphaSet = SET Of AlphaChar; Var SetA, SetB, SetResult : Alphaset; Mot : String; k : Char; { StrToAlphaSet renvoie l'ensemble des lettres a à z contenues dans UneChaine} Procedure StrToAlphaSet(Var Result:Alphaset; UneChaine: String); Var i: Integer; Begin Result := []; For i:= 1 To Length(UneChaine) do begin If UneChaine[i] In [Low(AlphaChar)..High(AlphaChar)] Then Result := Result + [UneChaine[i]] end; End; begin Repeat { saisie des deux mots } Write('Donnez un premier mot : '); Readln(Mot); StrToAlphaSet(SetA,Mot); Write('Donnez un second mot : '); Readln(Mot); StrToAlphaSet(SetB,Mot); { c'est cette unique ligne de code qui fait tout le boulot :} SetResult := SetA * SetB; {affichage du resultat} If SetResult = [] Then Writeln('Pas de lettre commune !') Else For k := Low(AlphaChar) To High(AlphaChar) Do If (SetResult * [K]) <> [] Then Writeln('La lettre ',k,' est commune aux deux mots'); Write('Autres mots (o/n) ?') ; Readln(k) until k <> 'o'; end.
C'est ce que j'avais codé dans une première version mais je l'ai changé car une vieille doc Borland que j'ai sur Turbo Pascal 4.0 ne cite pas l'opérateur IN dans la liste des opérateurs d'ensemble.
Comme j'avais eu des erreurs du genre 'Operator not defined for the type' je n'ai pas cherché plus loin et changé le code, mais si je refais le test avec DosBox/TP7 ça marche.
La version 4.0 de TP a été la première version à supporter les ensembles (Une doc TP3 que j'ai aussi ne parle pas du tout des ensembles) et il est possible que l'opérateur IN n'ait été implémenté que postérieurement à la version 4.0.