Bookmark and Share

Liens sponsorisés

Code Print E-mail
Written by Administrator   
Saturday, 15 March 2008 16:03

Source :

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é.

 

Correction :

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.

 

 

 

Liens sponsorisés