Ce programme est sensé faire une rotation d'un tableau par un nombre d'éléments k, c'est à dire qu'on assimile le tableau à un cerle qu'on fait tourner autour d'un axe fixe de k cases puis on l'aplatit pour voir le résultat... c'est très mal exprimé tout ça, voici un exemple:
3 5 2 3 9
k=0 on ne fait pas bouger les éléments,
k=2 . . 3 . .
le 3 a pris la case 3 (place du 2), il était en case 1
on continue pour le reste
. . 3 5 2
on est arrivé à la fin du tableau, on reprend depuis le début avec le même ordre bien sûr

3 9 3 5 2
et voila!
evidemment, il faut deux tableaux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
program rotationnellation;
uses wincrt;
type tab = array[1..100] of integer;
procedure remplir(var x:integer; var Table:tab);
var i:integer;
begin
repeat 
	write('nombre de cases du tableau?' );
	read(x);
until x in [3..10];
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 table2[i+k]:=table1[i];
for j:=1 to k do table2[j]:=table1[i];
end;
var T1,T2:tab; n,k,c,i : integer;
begin
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);
for i:=1 to n do write(T2[i] :2);
end.
Je suis convaincu que c'est juste !!!
le programme plante après la saisie de k.
Merci d'avoir lu, je vous remercirai de m'avoir aidé j'espère