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
Je suis convaincu que c'est juste !!!
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.
le programme plante après la saisie de k.
Merci d'avoir lu, je vous remercirai de m'avoir aidé j'espère![]()
Partager