| 12
 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
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 
 |  
program Suit_Min;
type
	suite = record
		Dep, Nb : integer;
    end;
    Tfichier1 = file of integer;
    Tfichier2 = file of suite;
var
	p : integer;
    F1 : Tfichier1;
    F2 : Tfichier2;
{ ********** La saisie de P ********** }
procedure taille (var p : integer);
    begin
        repeat 
            writeln ('Donnez la taille du fichier');
            readln(p);
        until p in [2..30];
    end;
{ ********** Le remplisage du fichier "Depart.dat" ********** }
procedure remplir (var F1 : Tfichier1 ; p : integer);
    var
        U0, i : integer;
    begin
        rewrite(F1);
        for i:=1 to p do
            begin
                repeat
                    writeln('Donnez le ',i,' eme entier compris entre 2 et 1000 : ');
                    readln(U0);
                until U0 in [2..1000];
                write(F1,U0);
            end;
    end;
{ ********** Calcul de la suite ********** }
function calcul (U : integer) : integer;
    var
        Up, nbr : integer;
    begin
        nbr := 1;
        repeat
            Up := U; 
            if (Up mod 2 = 0) then
                U := Up div 2
            else
                U := 3*Up + 1;
            nbr := nbr + 1;
        until U = 1; 
        calcul := nbr;
    end;
{ ********** Génération du fichier Suite.dat ********** }
procedure generer (var F1: Tfichier1 ; var F2 : Tfichier2 ; p : integer);
    var
        S : suite;
        i , U0: integer;
    begin
        reset(F1);
        rewrite(F2);
        for i:=1 to p do 
            begin
                read(F1, U0);
                S.Dep := U0;
                S.Nb := calcul (U0);
                write(F2 , S);
            end;
    end;
{ ********** Recherche du minimal ********** }
function minimal (var F2 : Tfichier2 ; p : integer) : integer;
    var 
        min, i : integer;
        S : suite;
    begin
        read (F2,S);
        min := S.Nb;
        for i := 1 to p do 
        begin
            read(F2,S);
            if min > S.Nb then
                min := S.Nb;
        end;
    end;
{ ********** Affichage ********** }
procedure afficher (var F2 : Tfichier2  ;  p : integer);
    var
        min, i : integer;
        S : suite;
    begin
        min := minimal (F2, p );
        for i := 1 to p do
            begin
                read (F2,S);
                if (S.Nb = min) then 
                    writeln(S.Dep);
            end;
    end;
{ ********** Programme Principal ********** }
begin
    assign(F1, 'C:\Depart.dat');
    assign(F2, 'C:\Suite.dat');
	taille (p);
	remplir(F1,p);
	generer(F1,F2,p);
	afficher(F2,p);
    close (F1);
    close (F2);
end. | 
Partager