Forum INFOMATH
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -20%
-20% Récupérateur à eau mural 300 ...
Voir le deal
79 €

Exercice corrigé Bac 2009 Pratique: Tri par bloc (info)

Aller en bas

Exercice corrigé Bac 2009 Pratique: Tri par bloc (info) Empty Exercice corrigé Bac 2009 Pratique: Tri par bloc (info)

Message par Napoléon Sam 22 Mai - 22:35

Exercice BAC INFO (pratique) 19 MAI 2009
*** pour les section maths, sciences, technique... ***

T un tableau de N lettres minuscules (6 <= N <= 100).
D et N deux entiers vérifiant :

Condition 1) D est un entier diviseur de N, D>1.
Condition 2) N est un entier tel que N = M * D

On se propose de trier les D éléments des M blocs disjoints qui constituent
le tableau T.

Écrire un programme :

1) lire les deux entiers N et D répondant aux conditions 1) et 2)

2) remplir le tableau T par N lettres minuscules

3) trier dans l'ordre croissant les éléments de chaque bloc de T

4) afficher le tableau T après le tri.


Voir la solution :


Code:
program tri2009;

uses wincrt;

type
  TAB = array [1..200] of char;

var
  T: TAB;
  N, D: integer;


procedure afficher(T:TAB; N: integer);
var
  i: integer;
begin
  for i:=1 to N do
      writeln('T[',i,'] = ',T[i]);
end;


procedure saisir(var N: integer; var D: integer);
begin

  repeat
  write('N = ');
  readln(N);

  write('D = ');
  readln(D);
  until (N mod D = 0) and (D > 1);

end;


procedure remplir(var T: TAB; N: integer);
var
 i: integer;
begin

    for i:=1 to N do
    begin
      repeat
        write('Donner une lettre miniscule (n°',i,'): ');
        readln(T[i]);
      until (T[i] in ['a'..'z']);

    end;

end;


procedure trier_bloc(deb: integer; fin: integer; var T:TAB);
var
 i,j,pmin: integer;
 aux: char;
begin

  for i:=deb to fin-1 do
  begin
    pmin := i;
    for j:=i+1 to fin do
        if (T[j] < T[pmin]) then
            pmin := j;

    aux := T[i];
    T[i] := T[pmin];
    T[pmin] := aux;

  end;

end;


procedure tri_global(var T:TAB; N,D: integer);
var
 M,i,deb,fin: integer;
begin

  M := N div D;

  deb := 1;
  fin := D;

  for i:=1 to M do
  begin

        trier_bloc(deb, fin, T);

        deb := deb + D;
        fin := fin + D;

  end;

end;


{ programme principal }

BEGIN

  saisir(N,D);

  remplir(T,N);

  afficher(T,N);

  tri_global(T,N,D);

  writeln('après tri: ');

  afficher(T,N);


END.


Dernière édition par nabiL le Dim 23 Mai - 22:24, édité 1 fois (Raison : Erreur détectée par Mlle FARAH & EMNA)
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7667
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
Exercice corrigé Bac 2009 Pratique: Tri par bloc (info) Left_bar_bleue999/1000Exercice corrigé Bac 2009 Pratique: Tri par bloc (info) Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum