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
| program rotationnellation;
uses wincrt;
type tab = array[1..100] of integer;
function test(x:integer):boolean;
var b:boolean;
begin
b:=false;
if x in [3..10] then b:=true;
test:=b;
end;
procedure remplir(x:integer; var Table:tab);
var i:integer;
begin
for i:=1 to x do
begin
write('Valeur #',i, 'du tableau? ');
read(Table[i]);
end;
end;
procedure rotation(var table2 : tab; k,x :integer; table1:tab);
var i,j:integer;
begin
i:=1;
while i-x+k-1<>0 do
begin
table2[i+k]:=table1[i];
i:=i+1;
end;
for j:=1 to k do
begin
table2[j]:=table1[i];
i:=i+1;
end;
end;
var T1,T2:tab; n,k,c,i : integer;
begin
repeat
writeln('combien de cases? ');
read(n);
test(n);
until test(n);
remplir(n,T1);
writeln('entrez le nombre ''k'' d''éléments de la rotation');
writeln('choisissez un k négatif pour une rotation de sens indirect');
writeln('k ? ');
read(k);
if k>n then
begin
c:=k;
repeat
c:=c-n;
until c<=n;
k:=c;
end;
if k<0 then repeat k:=k+n until k>-1;
rotation(T2,k,n,T1);
for i:=1 to n do write(T1[i] :2);
write(chr(13));
for i:=1 to n do write(T2[i] :2);
end. |