Home Olympiades TOI : Tunisian Olympiad in Informatics TOI 2003 - Problème 2 : Codes
Bookmark and Share

Liens sponsorisés

TOI 2003 - Problème 2 : Codes Print E-mail
Written by Administrator   

Problème 2 (CODES)

Une manière de coder un texte consiste en l'opération suivante. On se fixe un entier n donné. On considère que le texte à coder est une chaîne de caractères. En commençant à partir du premier caractère, on divise le texte en blocs de longueur n2 (nxn) caractères consécutifs. Si la longueur du texte n'est pas un multiple de n2, on lui ajoute autant d'espaces qu'il en faut pour  que sa longueur devienne un multiple de n2. Chaque bloc est divisé à son tour en n sous-blocs de longueur n caractères. En disposant ces sous-blocs l'un en dessous de l'autre, on obtient alors n colonnes. Chaque colonne, lue du haut vers le bas,  va donner une chaîne de n caractères. En rassemblant dans l'ordre toutes ces chaînes, on obtient une nouvelle chaîne qui sera le texte codé.

Exemple :

Pour n = 3 et le texte à coder ="Je vais à Tunis pour l'OTI"

La longueur de ce texte est égale à 26. On lui ajoute 1 espace pour que sa longueur devienne multiple de 9. La chaîne devient  "Je vais à Tunis pour l'OTI "

Sa longueur devient donc  27.

En appliquant les étapes ci-dessus évoquées, on obtient :

J

e

     

T

u

 

u

r

 

v

a

i

 

n

i

s

 

l

'

O

s

 

à

 

 

p

o

 

T

I

 

La chaîne codée sera :

                                     "Jvsea  ià n TipusoulTr'I O "

Écrire un programme qui saisit un entier naturel n tel que 2<n<9 et le texte à coder (une chaîne de caractères). Il fait sortir ensuite le texte codé.

 

 

Solution en Pascal

program codes;
uses wincrt;
Var  ch : string;
     nc : integer;
function coder(m : integer; ch_org:string):string;
var    i,j,k,l,d    : integer;
       p,db,nb_bloc : integer;
       ch_out       : string;
begin
l:=length(ch_org); 
d:=sqr(m)-(l mod sqr(m));
if d<>0 then
                  begin
                          For i:=1 to d do ch_org:=ch_org+' ';
                  end;
ch_out:=ch_org;
nb_bloc:=length(ch_org) div sqr(m);
p:=1;
For i:=1 to nb_bloc do
                        begin
                          db:=(i-1)*sqr(m) + 1;
                          for j:=0 to m-1 do
                               begin
                                      for k :=0 to m-1 do
                                         begin
                                           ch_out[p]:=ch_org[db+j+k*m];
                                           p:=p+1;
                                         end;
                               end;
                          end;
coder:=ch_out;
end;
procedure saisie(var m :integer; var txt_coder:string);
begin
   repeat
          write('Donner un entier entre 1 et          5 : '); readln(m);
   until m in [1..5];
   write('Saisir le texte ŕ coder : ');readln(txt_coder);
   writeln;
end;
begin
  saisie(nc,ch);
  writeln('le texte codé sera : ',coder(nc,ch));
end.
 
 

Le jeu de tests pour l'évaluation

Les 5 tests pour le programme CODES  (20 points par test)

Test 1

4

a

a

Test  2

4

olympiade

ope li  ya  md

Test  3

2

je joue

j ejoeu

Test  4

3

je tiens à participer.

Jtneis e àai rcptip. e  r

Test  5

9

le programme doit refuser cette valeur

 

 

 

 

Liens sponsorisés