Vous êtes sur la page 1sur 6

CPI1 Exercices sur la structure d’enregistrement

EXERCICE 1
Nous disposons
• d’un tableau X à une dimension et contenant des nombres entiers dont certains appartiennent à la
suite de Fibonacci (1, 1,2, 3, 5,…) , d’autres ont une partie centrale composée des mêmes
chiffres (exples : 1722259, 56777734) et des intrus, qui n’appartiennent à aucune des deux
catégories précédemment citées.
• Et d’un tableau ( R ) à deux dimensions dont :
9 La 1ère ligne contiendra tous les éléments de X appartenant à la suite de fibonnacci
9 La 2ième ligne contiendra tous les éléments dont la partie centrale est composée des
mêmes chiffres
9 La 3ième ligne contiendra tous les intrus

Nota : les lignes de R doivent être triées par ordre croissant selon le format suivant :

Jeu d’essai final : le tableau donné X

Question 1 : Si nous disposons de plusieurs tableaux de la nature de X et on voudrait associer


chacun d’eux à son tableau résultat (R) et les garder dans un enregistrement, Proposez une
structure de données qui permet cela.

Question 2 : Comment allez-vous remplir une variable appartenant à cette structure proposée ?

Réponse Q1 :
Comme R est un tableau à 2 dimensions et X un tableau à une dimension, il faut déclarer les types Tab1
et tab2. Chaque enregistrement contiendra donc un tableau de type Tab1 et un tableau de type Tab2. Et
puisqu’il y a plusieurs tableaux de la nature de X. On utilisera un tableau dont chaque case contiendra
un enregistrement.

type Tab1D = Tableau [1..1000] d’entiers


Tab2D = Tableau [1..1000,1..1000] d’entiers
E = Enregistrement
X : Tab1
R : tab2
Fin
TabE = tableau [1..1000] de E

Merci d’envoyer vos remarques à b_chergou@esi.dz


CPI1 Exercices sur la structure d’enregistrement

Réponse Q2 :
Ce qui suit n’est donné que pour comprendre l’utilisation des enregistrements

Analyse
// pour remplir un tableau C de type
• on lit le nombre N de tableaux
• on varie i : 1,2,3,…, N
ƒ on lit un tableau A de la nature de X
ƒ on lit un tableau B de la nature de R
ƒ on met A dans l’enregistrement i // on remplit un enregistrement
ƒ on met B dans l’enregistrement i
ƒ on écrit un tableau A de la nature de X contenu dans l’enregistrement // on l’écritt
ƒ on écrit un tableau B de la nature de R contenu dans l’enregistrement

algorithme

Algorithme enrexpl1
type tab1d = Tableau [1..10] entier
Tab2d = tableau [1..100,1..100] entier
E= Enregistrement
X :tab1d
R : tab2d
Fin
tabE = Tableau [1..100] de E
Variables A : tab1d;
taille, lig, col,i, N: entier
B : tab2d
Procédures lect1d, lect2d , ecrit1d, ecrit2d
Vous pouvez écrire cela, autrement dit
affecter un tableau dans un autre tableau
DEBUT mais ATTENTION : à la seule
ecrire ('donnez le nombre de tableaux : ') condition que les 2 tableaux (comme ici
Lire (n) A et X , puis B et R) soient de même
Pour i Allant de 1 à n Faire type ( voir les déclarations)
Dpour
lect1d ( A,taille)
lect2d (B,lig,col)
C[i].X :=A
C[i].R:= B
ecrit1d ( C[i].X,taille)
ecrit2d (C[i].R,lig,col)
Fpour
FIN

Merci d’envoyer vos remarques à b_chergou@esi.dz


CPI1 Exercices sur la structure d’enregistrement

Programmation
program enrexpl1;
uses crt;
type tab1d = array[1..10] of integer;
tab2d = array [1..100,1..100] of integer;
E = record
X :tab1d;
R : tab2d;
end;
tabE = array [1..100] of E;
Var A : tab1d;
taille, lig, col,i, N:integer;
B : tab2d ;
C :tabE;
{$i e:\algo\modules\lect1d.pro}
{$i e:\algo\modules\lect2d.pro}
{$i e:\algo\modules\ecrit1d.pro}
{$i e:\algo\modules\ecrit2d.pro}
BEGIN
clrscr;
Writeln ('donnez le nombre de tableaux : ');
readln(n);
for i := 1 to n do
Begin
lect1d ( A,taille);
lect2d (B,lig,col);
C[i].X :=A ; // on remplit un enregistrement
C[i].R:= B;
ecrit1d ( C[i].X,taille); // on ecrit son contenu
ecrit2d (C[i].R,lig,col);
end;
readln;
END.

EXERCICE 2
Dans cet exercice nous allons reprendre le schéma de l’enregistrement vu en cours et concernant des
étudiants. Nous avons au plus 500 étudiants et pour chaque étudiant nous voulons avoir les informations
suivantes :
Le matricule , le nom et prénom, la section, le groupe, les notes de ses 3 Emd, de ses 3 tp, de son projet
, sa moyenne et son rang
Il faut donc déclarer la structure convenable pour ce problème. Puis construire 2 modules : le premier
(INFOGENE) qui permet de rentrer toutes les informations concernant un étudiant et toutes ses notes en
algorithmique et le second (MOYALGO) qui calcule sa moyenne.

Nota : nous ne donnons que la partie programmation en espérant que cela suffira pour comprendre la manipulation
des enregistrements .

program enreg;
uses crt;
type etudiant = RECORD
matricule :integer;
nom,prenom:string[30];
section:'a'..'d';
sg:1..12;
emd:array[1..3] of real;
tp:array[1..3] of real;
prj,moy:real;
rang:integer;
END;
promo = array[1..500] of etudiant;
Var p1i:promo;
tai,i:integer;

Merci d’envoyer vos remarques à b_chergou@esi.dz


CPI1 Exercices sur la structure d’enregistrement

//----------------------------------------------------------
Procedure INFOGENE (var p:promo;var taille :integer);
BEGIN
write(' Donnez le nombre d"eleves : ');
readln(taille);
for i:=1 to taille do
BEGIN
write('Matricule : ');
readln(p[i].matricule);
write('Nom : ');
readln(p[i].nom);
write('prenom : ');
readln(p[i].prenom);
write('Section : ');
readln(p[i].section);
write('S/G : ');
readln(p[i].sg);
END;
END;
// -----------------------------------------------------------
Procedure MOYALGO(var p:promo;var taille:integer);
var i,k:integer;
cumemd,cumtp:real;
BEGIN
for i:=1 to taille do
BEGIN
cumemd:=0;
cumtp:=0;
writeln ('ETUDIANT :',i);
for k:=1 to 3 do
BEGIN
write('EMD',k,' : ');
readln(p[i].emd[k]);
cumemd:=cumemd + p[i].emd[k];
END;
for k:=1 to 2 do
BEGIN
write('TP',k,' : ');
readln(p[i].tp[k]);
cumtp:=cumtp + p[i].tp[k];
END;
write('PROJET :');
readln(p[i].prj);
p[i].moy := (cumemd + cumtp/8 + p[i].prj) / 4.5;
END;
END;
// ----------------------------------------------------------------------
BEGIN
clrscr;
INFOGENE(p1i,tai);
MOYALGO(p1i,tai);
for i := 1 to tai do writeln('nom : ',p1i[i].nom,' moyenne : ',p1i[i].moy:4:2);
readln;
END.

EXERCICE 3

Dans cet exercice nous avons un enregistrement qui contient : le N° d’une phrase, la phrase elle-même et un
tableau de 26 cases dont chaque case contient la fréquence d’apparition de chaque lettre de l’alphabet . ( la 1ère case
concerne le ‘A’ , la 2ième le ‘B’,…). Le problème consiste donc à donner un N° à la phrase puis à lire la phrase elle-
même. Puis on calculera la fréquence d’apparition de chaque lettre de l’alphabet que l’on rangera dans un tableau.
Lequel sera mis à son tour dans l’enregistrement.
On affiche ensuite le N° et le tableau des fréquences qui se trouvent dans l’enregistrement.

Merci d’envoyer vos remarques à b_chergou@esi.dz


CPI1 Exercices sur la structure d’enregistrement

program enreg;
uses crt;
type tab=array[1..26] of integer;
P = record
nump:integer;
phrase:string;
tabf:tab
end;
var enr:p;
X : tab;
i:integer;
{$i e:\algo\modules\Freq_Let.pro}
BEGIN
Clrscr;
write('SVP ! Donnez le Numero de votre phrase : ');
readln(enr.nump);
writeln('Donnez votre phrase : ');
readln(enr.phrase);
FREQ_LET(enr.phrase,X); // X contient les fréquences d'apparition des lettres de
l'alphabet
enr.tabf:=X; // on met ce tableau dans l'enregistrement
// on ecrit le Nø de la phrase et le contenu du tableau des fréquences
Writeln('La phrase Nø : ',enr.nump,' contient : ');
for i:= 1 to 26 do
if x[i] <> 0 then
writeln(' ',X[i], ' fois le caractere : ',chr(64 +i));
readln;
END.

EXERCICE 4 il s’agit de l’exercice 54 de la série N°4

Lors d’un concours de sudoku on souhaite garder les noms des candidats, leur âge, la grille initiale, le niveau de
la grille, la grille remplie, et le temps mis (en secondes) pour la remplir.
1. Proposer une structure de données sachant que l’on a au maximum 100 candidats.
2. comment remplir les données de x candidats (x<=100) ?
3. comment afficher les données des x candidats.

Nous ne donnons que la partie programmation. On y trouve la structure proposée, un module qui nous permet de
remplir les données de x candidats et ensuite comment afficher les données de ces candidats.

Merci d’envoyer vos remarques à b_chergou@esi.dz


CPI1 Exercices sur la structure d’enregistrement

program cpi54;
uses crt;
type tab2d =array [1..2,1..2] of longint;
candidat = record
nom:string[30];
age : integer;
ginit, gremp:tab2d;
temps:integer;
end;
ListCand = array[1..100] of candidat;

Var nbre,m:integer;
lc:ListCand;
{$i e:\algo\modules\ecrit2d.pro}

//--------------------------------------------------------------------------
procedure rempCand (x:integer; var l : listcand);
Var i ,j,k:integer;
t : tab2d;
{$i e:\algo\modules\lect2d.pro}
BEGIN
for i := 1 to x do
begin
Write ('Nom : ');
readln(l[i].nom);
write ('age : ');
readln(l[i].age);
write (' grille initiale ');
lect2d(t,j,k);
l[i].ginit:=t;
write('temps : ');
readln(l[i].temps);
end;
END;
// ----------------------------------------------------------------------------------
BEGIN
Write ('donner le nombre de candidats : ');
readln(nbre);
RempCand(nbre,lc);
for m := 1 to nbre do
BEGIN
Writeln ('Nom : ',lc[m].nom);
writeln ('age : ',lc[m].age);
writeln (' grille initiale ');
ecrit2d (lc[m].ginit,2,2);
writeln('temps : ',lc[m].temps);
end;
readln;
END.

Merci d’envoyer vos remarques à b_chergou@esi.dz

Vous aimerez peut-être aussi