Program Suit_Min;
Type
Suit = Record
dep,Nb : word ;
End;
Fsuit = file Of Suit ;
Fdep = file Of word;
Var
fd : fdep;
fs : fsuit;
//**************************************
Procedure creation(Var fd:fdep ; Var fs:fsuit);
Begin
assign (fd,'c:\bac2015\depart.dat');
rewrite(fd);
assign (fs,'c:\bac2015\suite.dat');
rewrite(fs);
End;
//**************************************
Function nbterme(u:word) : word;
Var
nb : word;
Begin
nb := 0;
Repeat
If u Mod 2=0 Then
u := u Div 2
Else u := 3*u + 1;
inc(nb);
Until u=1;
nbterme := nb;
End;
//**************************************
Procedure remplir_depart(Var fd:fdep);
Var
i,u0,p : word;
Begin
reset(fd);
Repeat
write('P=');
readln(p);
Until P In[2..30];
For i:=1 To p Do
Begin
Repeat
readln(u0);
Until (u0<=1000) And (u0>=2);
write(fd,u0);
End;
Close(fd);
End;
//**************************************
Procedure remplir_suit(Var fd:fdep ; Var fs:fsuit);
Var
i : word;
st : suit;
Begin
reset(fd);
reset(fs);
While Not(eof(fd)) Do { ou For i:=1 to p do}
Begin
read(fd,st.dep);
st.nb := nbterme(st.dep);
write(fs,st);
End;
Close(fs);
Close(fd);
End;
//**************************************
Procedure affiche (Var fs:fsuit); { non demandé !}
Var
st : suit;
Begin
reset(fs);
While Not(eof(fs)) Do
Begin
read(fs,st);
Writeln('U0=',st.dep,' -------> NB=',st.nb);
End;
Close(fs);
End;
//**************************************
Procedure affich_min(Var fs:fsuit);
Var
st : suit;
min : word;
Begin
reset(fs);
read(fs,st);
min := st.nb;
While Not(eof(fs)) Do
Begin
read(fs,st);
If st.nb<min Then
min := st.nb
End;
seek(fs,0);
Write('Terme(s) :');
While Not(eof(fs)) Do
Begin
read(fs,st);
If st.nb=min Then
Write(st.dep:5);
End;
Close(fs);
End;
//**************************************
Begin
creation(fd,fs);
remplir_depart(fd);
remplir_suit(fd,fs);
affiche(fs);
writeln;
affich_min(fs);
End.
Inscription à :
Publier les commentaires (Atom)