insertion d'un caractère

Aller en bas

insertion d'un caractère

Message  Admin le Dim 1 Mai - 18:18

ÉNONCÉ
Soit un tableau T de n caractères (5≤ n≤ Nmax) qui ne peuvent être que "A","B" ou "C" et tels que deux éléments successifs du tableau ne sont pas égaux.(Nmax est une constante de valeur 15).
On se propose d'insérer un caractère donné Car dans la première position possible dans le tableau T en respectant la règle ci-dessus mentionnée puis d'afficher le tableau T dans son nouvel état (après insertion)
NB:
- Car ne peut pas être que "A","B" ou "C" et ne peut être inséré ni à la première ni a la dernière position du tableau
- On suppose que l'insertion d'un nouveau élément est possible en effet n < Nmax

Exemple:
T à l'état initial
B|A|B |C|A|C|B|A
T après l'insertion d'un caractère Car="B"
B|A|B |C|B|A|C|B|A

Par la suite on donne l'algorithme suivant:
0) Début Insertion
1) Ecrire ("Donner un entier n avec 5 n Nmax"); Lire(n)
Pour i de 1 à n Repeter
Ecrire("Donner une lettre A ou B ou C");
Lire (T[i])
Fin Pour
2) Proc Insert_Car(Car,T,n)
3) Proc Affiche (n,T)
4) Fin Insertion

Questions:
5. Traduire en Pascal l'algorithme Insertion ci-dessus.
6. Transformer la séquence 1) en une procédure saisie, ajouter les contrôles nécessaires pour la lecture de n ainsi que des éléments de T et en tenir compte dans le programme principal.
7. Ecrire la procédure Insert_Car permettant d'insérer un caractère Car dans le tableau T, tout en respectant les conditions mentionnés ci-dessus.
8. Ecrire la procédure Affiche permettant d'afficher les éléments de T après insertion de Car.

PASCAL
PROGRAM insertion;

uses wincrt;
const nmax=15;
type tab =array[1..nmax] of char;
var
t:tab;
car:char;
n:integer;
procedure saisir(var n:integer);
begin
repeat
write ('donnerla valeur de n:');
read(n);
until n in [1..nmax];
end;
procedure remplir (var t:tab;n:integer);
var
i:integer;
begin
repeat
read(T[1]);
until (upcase (T[1]) in['A'..'C']);
for i:=2 to n do
begin
repeat
write ('donne l"élement de rang',i,': ');
readln(t[i]);
until ((t[i]<>t[i+1])and (t[i]<>t[i-1])and (upcase (t[i]) in['A'..'C']));
end;
end;
procedure insert_car (car:char;var t:tab;n:integer);
var
i:integer;
ok:boolean;
begin
i:=2;ok:=false;
repeat
if((t[i-1]<>car) and (t[i]<> car))then
begin
repeat
t[n+1]:=t[n];
n:=n-1;
until(n<i);
t[i]:=car;
ok:=true;
end
else
i:=i+1;
until((i>n) or (ok=true));
end;
procedure affichage ( t:tab;n:integer);
var
i:integer;
begin
for i:=1 to n+1 do
write(t[i],';');
end;
begin
saisir (n);
remplir(t,n);
repeat
write('donner un caractere a inserer =');read(car);
until (upcase (car) in['A'..'C']);
insert_car(car,t,n);
affichage(t,n);
end.


Admin
Admin

Messages : 137
Date d'inscription : 29/12/2010

Voir le profil de l'utilisateur http://aidescolaire.yoo7.com

Revenir en haut Aller en bas

Revenir en haut


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