delphi chapitre 5

Transcription

delphi chapitre 5
Chapitre 5
TABLEAUX
Exercice 1
program Ex5_1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
I:integer;
Tableau:array[1..5] of real;
begin
(* Saisie des 5 réels *)
for I:=1 to 5 do
begin
write(’Entrez le ’,I,’ième réel : ’);
readln(Tableau[I]);
end;
(* Affichage du contenu du tableau *)
for I:=1 to 5 do
writeln(’Le ’,I,’ième réel vaut : ’,Tableau[I]);
readln;
end.
Exercice 2
program Ex5_2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
I,Min,Max:integer;
Tableau:array[1..20] of integer;
begin
(* Remplissage du tableau avec 20 entiers aléatoires *)
for I:=1 to 20 do
Tableau[I]:=random(100);
(* Affichage du contenu du tableau *)
for I:=1 to 20 do
writeln(’Le ’,I,’ième entier aléatoire vaut : ’,Tableau[I]);
(* Recherche du miniumum / maximum *)
guygreisen 7 juin 2005
2
(* Initialisation des variables Min et Max *)
Min:=Tableau[1];
Max:=Tableau[1];
(* Parcours du tableau *)
for I:= 2 to 20 do
begin
(* Nouveau minimum? *)
if Tableau[I] < Min then
Min:=Tableau[I];
(* Nouveau maximum? *)
if Tableau[I] > Max then
Max:=Tableau[I];
end;
(* Affichage du minimum et du maximum *)
writeln(’Le minimum vaut : ’,Min);
writeln(’Le maximum vaut : ’,Max);
readln;
end.
Exercice 3
program Ex5_3;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
I,Somme:integer;
Moyenne,EcartType,Variance:real;
Tableau:array[1..10] of integer;
begin
(* Remplissage du tableau avec 10 entiers aléatoires *)
for I:=1 to 10 do
Tableau[I]:=random(100);
(* Calcul de la somme *)
Somme:=Tableau[1];
for I:=2 to 10 do
Somme:=Somme+Tableau[I];
(* Calcul de la moyenne *)
Moyenne:=Somme / 10;
(* Calcul de l’écart-type *)
Variance:=0;
for I:=1 to 10 do
Variance:=Variance+sqr(Tableau[I]-Moyenne);
Variance:=Variance/10;
EcartType:=sqrt(Variance);
(* Affichage des résultats *)
for I:=1 to 10 do
writeln(’Le ’,I,’ième entier aléatoire vaut : ’,Tableau[I]);
writeln(’La somme vaut : ’,Somme);
writeln(’La moyenne vaut : ’,Moyenne:6:1);
writeln(’L’’écart-type vaut : ’,EcartType:6:1);
readln;
end.
Exercice 4
guygreisen 7 juin 2005
3
program Ex5_4;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
I,Nombre,Frequence:integer;
Tableau:array[1..100] of integer;
begin
(* Remplissage du tableau avec 100 entiers aléatoires *)
for I:=1 to 100 do
Tableau[I]:=random(16)+10;
(* Saisie du nombre à compter *)
write(’Quel nombre faut-il compter?’);
readln(Nombre);
(* Comptage *)
Frequence:=0;
for I:= 1 to 100 do
if Tableau[I] = Nombre then
Frequence:=Frequence+1;
(* Affichage *)
writeln(’Le nombre ’,Nombre,’ apparaît ’,Frequence,’ fois.’);
readln;
end.
Exercice 5
program Ex5_5;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
Nombre = 9;
var
I,Temp:integer;
Tableau:array[1..Nombre] of integer;
begin
(* Remplissage du tableau avec "Nombre" entiers aléatoires *)
for I:=1 to Nombre do
Tableau[I]:=random(100);
(* Impression de l’entête du tableau *)
for I:=1 to Nombre do
write(I:4);
writeln;
for I:= 1 to 4*Nombre do
write(’-’);
writeln;
(* Affichage du contenu du tableau *)
for I:=1 to Nombre do
write(Tableau[I]:4);
writeln;
(* Inversion du tableau *)
for I:=1 to Nombre div 2 do
begin
Temp:=Tableau[I];
guygreisen 7 juin 2005
4
Tableau[I]:=Tableau[Nombre-I+1];
Tableau[Nombre-I+1]:=Temp;
end;
(* Affichage du tableau réarrangé *)
for I:=1 to Nombre do
write(Tableau[I]:4);
writeln;
readln;
end.
Exercice 6
program Ex5_6;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
Jours,Mois:integer;
TMois:array[1..12] of integer;
Noms:array[1..12] of string;
begin
(* Remplissage du tableau avec les nombres de jours correspondants aux mois *)
TMois[1]:=31; (* Janvier
*)
TMois[2]:=28; (* Février
*)
TMois[3]:=31; (* Mars
*)
TMois[4]:=30; (* Avril
*)
TMois[5]:=31; (* Mai
*)
TMois[6]:=30; (* Juin
*)
TMois[7]:=31; (* Juillet
*)
TMois[8]:=31; (* Août
*)
TMois[9]:=30; (* Septembre *)
TMois[10]:=31; (* Octobre
*)
TMois[11]:=30; (* Novbembre *)
TMois[12]:=31; (* Décembre *)
(* Remplissage du tableau avec les noms des mois *)
Noms[1]:=’Janvier’;
Noms[2]:=’Février’;
Noms[3]:=’Mars’;
Noms[4]:=’Avril’;
Noms[5]:=’Mai’;
Noms[6]:=’Juin’;
Noms[7]:=’Juillet’;
Noms[8]:=’Août’;
Noms[9]:=’Septembre’;
Noms[10]:=’Octobre’;
Noms[11]:=’Novembre’;
Noms[12]:=’Décembre’;
(* Saisie du nombre de jours *)
write(’Entrez le nombre de jours : ’);
readln(Jours);
(* Détermination de la date *)
Mois:=1;
while Jours > TMois[Mois] do
begin
Jours:=Jours-TMois[Mois];
guygreisen 7 juin 2005
5
Mois:=Mois+1;
end;
(* Affichage du résultat *)
write(’On est le ’,Jours,’.’,Noms[Mois]);
readln;
end.
Exercice 7
program Ex5_7;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
Degre = 5;
var
Coefficients:array[0..Degre] of real;
DCoefficients:array[0..Degre-1] of real;
PCoefficients:array[0..Degre+1]of real;
I:integer;
X,Y,DY,PY:real;
begin
(* Saisie des coefficients du polynôme *)
for I:=degre downto 0 do
begin
write(’Entrez le coefficient pour X puissance ’,I,’ ’);
readln(Coefficients[I]);
end;
(* Calcul de la derivée *)
for I:=0 to degre -1 do
DCoefficients[I]:=(I+1)*Coefficients[I+1];
(* Calcul de la primitive *)
for I:=1 to degre+1 do
PCoefficients[I]:=Coefficients[I-1]/I;
write(’Entrez la constante pour la primitive: ’);
readln(PCoefficients[0]);
(* Affichage du polynôme *)
for I:= degre downto 0 do
write(Coefficients[I]:7:3,’X^’,I,’ ’);
writeln;
(* Affichage de la dérivée *)
for I:= degre-1 downto 0 do
write(DCoefficients[I]:7:3,’X^’,I,’ ’);
writeln;
(* Affichage de la primitive *)
for I:= degre+1 downto 0 do
write(PCoefficients[I]:7:3,’X^’,I,’ ’);
writeln;
writeln;
(* Evaluation des 3 polynômes pour une valeur de X *)
write(’Entrez une valeur pour X: ’);
readln(X);
(* Evaluation du polynôme par la méthode de Horner *)
Y:=0;
for I:= degre downto 0 do
Y:=Y*X+Coefficients[I];
guygreisen 7 juin 2005
6
(* Evaluation de la dérivée par la méthode de Horner *)
DY:=0;
for I:=degre-1 downto 0 do
DY:=DY*X+DCoefficients[I];
(* Evaluation de la primitve par la méthode de Horner *)
PY:=0;
for I:=degre+1 downto 0 do
PY:=PY*X+PCoefficients[I];
(* Affichage *)
writeln;
writeln(’Polynôme: f(’,X:8:3,’)=’,Y:7:3);
writeln(’Dérivée:
f’’(’,X:7:3,’)=’,DY:7:3);
writeln(’Primitive: F(’,X:8:3,’)=’,PY:7:3);
readln;
end.
program ex57;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
valx,valpoly,valderi:real;
i:integer;
poly: array[0..5] of real ;
deri: array[0..4] of real ;
begin
{DONNEE}
for i:=5 downto 0 do read( poly[i]); writeln ;
writeln (’polyn’,char(147),’me ’); writeln;
for i:=5 downto 2 do write( poly[i]:0:0,’x^’,i,’ + ’);write(poly[1]:0:0,’x + ’);writeln( poly[0]:0:0)
{DERIVEE}
for i:=5 downto 1 do deri[i-1]:= i*poly[i]; writeln ;
{PRESENTATION}
writeln(’d’,char(130),’riv’,char(130),’e ’); writeln ;
for i:=4 downto 1 do write( deri[i]:0:0,’x^’,i,’ + ’);writeln( deri[0]:0:0); writeln ;
write(’entrer valeur de x ’,char(133),’ calculer ’); write ;
readln(valx);
valpoly:=0;
for i:=5 downto 0 do valpoly := valpoly * valx + poly[i]; writeln ;
writeln (’la valeur du polynome pour x = ’, valx:0:0 ,’ est ’, valpoly:0:0); writeln ;
valderi:=0;
for i:=4 downto 0 do valderi := valderi * valx + deri[i];
writeln (’la valeur de la d’,char(130),’riv’,char(130),’e pour x = ’, valx:0:0 ,’ est ’, valderi:0
{for i:=0 to 255 do write (i,char(32),char(i),char(32),char(32));}
readln;
end.
Exercice 8
program Ex5_8;
{$APPTYPE CONSOLE}
uses
SysUtils;
guygreisen 7 juin 2005
7
const
Degre = 4;
var
P1,P2,CoefS,CoefD:array[0..Degre] of real;
CoefP:array[0..Degre*2]of real;
I,J:integer;
begin
(* Saisie des coefficients du premier polynôme *)
for I:=degre downto 0 do
begin
write(’Entrez le coefficient pour X puissance ’,I,’ du premier polynôme ’);
readln(P1[I]);
end;
(* Saisie des coefficients du deuxième polynôme *)
for I:=degre downto 0 do
begin
write(’Entrez le coefficient pour X puissance ’,I,’ du deuxième polynôme ’);
readln(P2[I]);
end;
(* Calcul de la somme *)
for I:=0 to degre do
CoefS[I]:=P1[I]+P2[I];
(* Calcul de la différence *)
for I:=0 to degre do
CoefD[I]:=P1[I]-P2[I];
(* Calcul du produit *)
(* Initialisation *)
for I:= 0 to degre*2 do
CoefP[I]:=0;
(* Calcul des produits *)
for I:= 0 to degre do
for J:= 0 to degre do
CoefP[I+J]:=CoefP[I+J]+P1[I]*P2[J];
(* Affichage des polynômes *)
write(’P1:
’);
for I:= degre downto 0 do
write(P1[I]:7:3,’X^’,I,’ ’);
writeln;
write(’P2:
’);
for I:= degre downto 0 do
write(P2[I]:7:3,’X^’,I,’ ’);
writeln;
(* Affichage de la somme *)
write(’Somme:
’);
for I:= degre downto 0 do
write(CoefS[I]:7:3,’X^’,I,’ ’);
writeln;
(* Affichage de la différence *)
write(’Différence: ’);
for I:= degre downto 0 do
write(CoefD[I]:7:3,’X^’,I,’ ’);
writeln;
(* Affichage du produit *)
write(’Produit:
’);
for I:= degre*2 downto 0 do
guygreisen 7 juin 2005
8
write(CoefP[I]:7:3,’X^’,I,’ ’);
writeln;
readln;
end.
Exercice 9
program Ex5_9;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
Taille = 16;
var
Binaire: array[0..Taille-1] of boolean;
Conversion: array [0..Taille-1] of integer;
Decimal,I,Puissance:integer;
begin
(* Saisie du nombre décimal *)
write(’Entrez un nombre décimal: ’);
readln(Decimal);
(* Initialisation du tableau des puissances de 2 *)
Puissance:=1;
for I:=0 to Taille-1 do
begin
Conversion[I]:=Puissance;
Puissance:=Puissance*2;
end;
(* Conversion *)
for I:= Taille-1 downto 0 do
if Decimal >= Conversion[I] then
begin
Binaire[I]:=true;
Decimal:=decimal-Conversion[I];
end
else
Binaire[I]:=false;
(* Affichage *)
writeln(’le nombre binaire correspondant: ’);
for I:= Taille-1 downto 0 do
if Binaire[I] then
write(’1’)
else
write(’0’);
readln;
end.
program ex59;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
bin:array[1..100]of integer;
guygreisen 7 juin 2005
9
i,imax,number :integer;
begin
writeln(’entrer un nombre’);writeln;
readln(number);writeln;
i:=0;
while number >0 do begin
i:=i+1;
bin[i]:=number mod 2;
number:=number div 2;
end;
imax:=i;
for i:=imax downto 1 do write(bin[i]);
readln;
end.
Exercice 10
program Ex5_10;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
Taille = 16;
var
Binaire: array[0..Taille-1] of boolean;
Decimal,I,Saisie: integer;
begin
(* Saisie du nombre binaire *)
for I:= Taille-1 downto 0 do
begin
write(’Entrez la valeur du bit à la position ’,I,’: ’);
readln(Saisie);
if Saisie = 0 then
Binaire[I]:=false
else
Binaire[I]:=true;
end;
(* Conversion *)
Decimal:=0;
for I:=Taille-1 downto 0 do
begin
Decimal:=Decimal*2;
if Binaire[I] then
Decimal:=Decimal+1;
end;
(* Affichage *)
writeln(’Le nombre décimal correspondant est: ’,Decimal);
readln;
end.
Exercice 11
program Ex5_11;
{$APPTYPE CONSOLE}
uses
guygreisen 7 juin 2005
10
SysUtils;
var
Saisie,Tirage:array[1..49] of boolean;
Devines:array[1..6] of integer;
Nombre,Qte,I:integer;
begin
(* Initialisation des tableaux *)
for I:= 1 to 49 do
begin
Saisie[I]:=false;
Tirage[I]:=false;
end;
(* Saisie de l’utilisateur *)
writeln(’Choisissez 6 nombres entre 1 et 49: ’);
Qte:=0;
while Qte <6 do
begin
write(’Entrez le ’,Qte+1,’ième nombre: ’);
readln(Nombre);
if Nombre <=49 then
Saisie[Nombre]:=true;
Qte:=0;
for I:=1 to 49 do
if Saisie[I] then
Qte:=Qte+1;
end;
(* Tirage *)
Qte:=0;
while Qte <6 do
begin
Tirage[random(48)+1]:=true;
Qte:=0;
for I:=1 to 49 do
if Tirage[I] then
Qte:=Qte+1;
end;
(* Détermination des nombres correctement devinés *)
Qte:=0;
for I:=1 to 49 do
if Saisie[I] and Tirage[I] then
(* Attention, il faut utiliser l’opérateur AND pour comparer les 2 tableaux et
pas l’opérateur de comparaison = *)
begin
Qte:=Qte+1;
Devines[Qte]:=I;
end;
(* Affichage de la sélection *)
writeln;
writeln(’Votre sélection:’);
for I:= 1 to 49 do
begin
if (I mod 7) = 1 then
writeln;
if Saisie[I] then
write(’ XX’)
else
write(I:3);
guygreisen 7 juin 2005
11
end;
writeln;
(* Affichage du tirage *)
writeln;
writeln(’Le tirage:’);
for I:= 1 to 49 do
begin
if (I mod 7) = 1 then
writeln;
if Tirage[I] then
write(’ XX’)
else
write(I:3);
end;
writeln;
(* Affichage du résultat *)
writeln;
writeln(’Vous avez deviné correctment ’,Qte,’ nombres.’);
for I:=1 to Qte do
write(Devines[I]:3);
writeln;
readln;
end.
guygreisen 7 juin 2005