Program BacPratique_2020;
Uses wincrt;
Var
NB : integer;
FN,F7,F13 : Text;
(*************************************************)
//Saisie de NB >=5;
Procedure Saisie(Var NB:integer);
Begin
Repeat
write('Taille du fichier (>=5) : ');
Readln(NB);
Until (NB >= 5);
End;
(*************************************************)
Procedure Creation(Var F1,F2,F3:Text);
Begin
Assign(F1,'C:\BAC2020\123456\Nombre.txt');
Assign(F2,'C:\BAC2020\123456\DIV13.txt');
Assign(F3,'C:\BAC2020\123456\DIV7.txt');
End;
(*************************************************)
//Verifier si la chaine saisie est numérique
Function Verif(ch:String) : Boolean;
Var
i : integer;
Begin
i := 1;
While (i<=Length(ch)) And (ch[i] In ['0'..'9']) Do
i := i+1;
Verif := (i>Length(ch));
End;
(*************************************************)
//Verif Récursive
Function Verifier(ch:String) : Boolean;
Begin
If (ch='') Then
Verifier := True
Else
If (Not(ch[1] In ['0'..'9'])) Then
Verifier := False
Else
Verifier := Verifier(Copy(ch,2,Length(ch)-1));
End;
(*************************************************)
Procedure Remplir_Nombre(Var F:Text; N : integer);
Var
i : integer;
ch : String;
Begin
Rewrite(F);
For i:=1 To N Do
Begin
Repeat
write(i,' : Donner un Nombre: ');
Readln(ch);
Until (ch<>'') And (Verifier(ch));
WRITELN(F,ch);
End;
Close(F);
End;
(*************************************************)
Function DIV13(N:String) : Boolean;
Var
S,Sg,V,e : integer;
Begin
S := 0;
Sg := -1;
While (Length(N)>=3) Do
Begin
VAL(Copy(N,Length(N)-2,3),V,e);
S := S+V*Sg;
Sg := -Sg;
Delete(N,Length(N)-2,3);
End;
VAL(N,V,e);
S := S+V*Sg;
DIV13 := (ABS(S) Mod 13 = 0);
End;
(*************************************************)
Function DIV7(ch:String) : Boolean;
Var
S,P1,P2,P3,U,D,C,e : integer;
ch1 : String;
Begin
Repeat
//Ajustement pour que la taille devient un multiple de 3
While (Length(ch) Mod 3 <> 0) Do
ch := '0'+ch;
P1 := 1;
P2 := 3;
P3 := 2;
//P : Période
S := 0;
Repeat
ch1 := Copy(ch,Length(ch)-2,3);
Delete(ch,Length(ch)-2,3);
VAL(ch1[3],U,e);
//U : Unité
VAL(ch1[2],D,e);
//D: Dizaine
VAL(ch1[1],C,e);
//C: Centaine
S := S+P1*U+P2*D+P3*C;
P1 := -P1;
P2 := -P2;
P3 := -P3;
//1 devient -1 ,3 devient -3 et 2 devient -2
Until (ch='');
//writeln('S = ',S);
STR(S,ch);
Until (Length(ch)=1);
//La somme est formée d'un seul chiffre (Condition d'arrêt)
DIV7 := (S In [0,7]);
End;
(*************************************************)
Procedure Eclater(Var FN,F13,F7 : Text);
Var
ch : String;
Begin
Reset(FN);
Rewrite(F13);
Rewrite(F7);
While (Not(EOF(FN))) Do
Begin
READLN(FN,ch);
If (DIV13(ch)) Then
WRITELN(F13,ch);
If (DIV7(ch)) Then
WRITELN(F7,ch);
End;
Close(FN);
Close(F13) ;
Close(F7);
End;
(*************************************************)
Begin
Creation(FN,F13,F7);
Saisie(NB);
Remplir_Nombre(FN,NB);
Eclater(FN,F13,F7);
End.
Inscription à :
Publier les commentaires (Atom)