تمارين محلولة منوعة

achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: كانون الثاني 28, 2009, 08:02:49 مسائاً
السلام عليكم ورحمة الله وبركاته
لقد رايت العديد من الطلبات حول هذا النوع من التمارين حاولت ان اختار مجموعة من التمارين  المنتوعة مع حلولها
فاليكم هذه  مجموعة من التمارين بحلولها بالبسكال

Enoncé de l'exercie
Ecrire un programme intitulé OCCURENCE qui permet  de saisir une chaîne de caractères CH puis d'afficher les occurences des  voyelles qui figurent dans CH.
   
Exemple :
Si CH='LYCEE 25 juillet'
Le  programme OCCURENCE affichera les résultats suivants :
L'occurence de 'E'  est 3
L'occurence de 'I' est 1
L'occurence de 'U' est 1
L'occurence  de 'Y' est 1

NB: La solution doit comporter au moins deux sous  programmes.    Solution en Pascal
{ pour resoudre ce problème on va:
- utiliser  un tableau t d'entiers et d'indice les caractères majuscules
- la fonction  Upcase qui permet de convertir une lettre en majuscule
- la procedure init  qui permet d'intialiser les élément de t a zéro
- la procedure remplir qui  remplit t par les occurences de chaque voyelle de ch
- et enfin la procedure  afficher qui affiche les occurences de chaque voyelle de ch}
program  occurence;
uses wincrt;
type tab=array['A'..'Y'] of integer;
var  t:tab;
ch:string;

{ initialiser tous les éléments de t à zéro }  

procedure init(var T:tab);
var c:char;
begin
for c:='A' to  'Y' do
t[c]:=0;
end;

{ remplir les cases d'indice voyelle par  leurs occurences dans ch }

procedure remplir(var t:tab;ch:string);  
var i:integer;
begin
for i:=1 to length(ch) do
if(upcase(ch)  in ['A','E','I','O','U','Y'])then
T[upcase(ch)]:=T[upcase(ch)]+1;  
end;

{ afiicher le contenu de t avec son indice }

procedure  afficher(t:tab);
var c:char;
begin
for c:='A' to 'Y' do  
if(T[c]>0)then
writeln('L''occurences de ''',c,'''est ',T[c]);  
end;

{ ** programme principal ** }

begin
read(ch);  
init(t);
remplir(t,ch);
afficher(t);
end.
       
  l'exercie
Ecrire un programme en Pascal qui permet de :  
- Saisir aléatoirement N entiers dans le tableau T.(n<=50).
-  Afficher le rang de chaque élément de T.    Solution en Pascal
Program rang;
uses wincrt;
var  T:Array[1..50]of integer;
N,i,Rg,j:integer;
begin
repeat  
read(N);
until(N in [1..50]);
for i:=1 to N do  
T:=random(100);
for i:=1 to N do
begin
Rg:=1;
for j:=1 to  N do
if(T>T[j])Rg:=Rg+1;
write('Le rang de ',T,':',Rg);  
end;
end.
{
Remarque :
Pour déterminer le rang d'un élément  T il suffit de calculer le nombre des éléments de T qui sont superrieurs  strictement à celui-ci ,le rang de T est égal à ce nombre + 1.
}

 

    l'exercie
Ecrire un programme en Pascal qui remplit un  tableau de n réels, cherche le maximum, le minimum et la moyenne des éléments de  ce tableau et les affiche.
On suppose que n est un entier naturel compris  entre 5 et 100.    Solution en Pascal
program statistique;
uses wincrt;
var  max,min,moyenne,somme:real;
i,n:integer;
t:array[1..100]of real;  
begin
repeat
read(n);
until(n in [5..100]);
pour i:=1 to n  do
read(t);
max:=t[1];
min:=t[1];
somme:=0;
for i:=1 to n  do
begin
if(max
 if(min>t)then  min:=t;
somme := somme + t;
end;
moyenne:=somme/n;  
writeln('Le maximum est :',max);
writeln('Le minimum est :',min);  
writeln('La moyenne est :',moyenne);
end.


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: كانون الثاني 28, 2009, 08:04:16 مسائاً
l'exercie
On dispose de deux tableaux T1 et T2 contenant respectivement  n et m entiers positifs et non nuls.
On désire chercher dans T2 tous les  diviseurs d'un élément de tab T1.
Exemple :
T1 :
23
15
10  
277
300
34
T2 :
3
6
5
1

si indice=2  alors 3,5 et 1 seront affichés à l'écran.
Ecrire un programme Pascal qui  permet de saisir les deux tableaux T1 et T2 et l'indice d'un élément p de T1  puis d'afficher à l'écran tous les diviseurs de p figurant dans T2.    Solution en Pascal
program diviseurs;
uses wincrt;
type  tab=array[1..100]of integer;
var T1,T2:tab;
i,n,indice,m:integer;  
{on utilise la procédure saisie_tab(T,n) pour saisir un tableau T et sa  dimension n}
procedure saisie_tab(var T:tab;var n:integer);
var  i:integer;
begin
write('Donner la dimension de votre tableau :');  
read(n);
write('Saisir maintenant les valeurs du tableau qui sont  positifs et non nul :');
for i:=1 to n do
repeat
read(T);  
until(T>0);
end;

{on utilise la fonction divise(a,b)  
pour savoir si b divise a le type de la fonction divise est un boolean}  

function divise(a,b:integer):boolean;
begin
divise:=a mod b =0;  
end;
 
{on utilise la procédure afficher(T,p,n) pour afficher les  diviseurs d'un entier p dans le tableau T de dimension n}

procedure  afficher(T:tab;p,n:integer);
var i:integer;
begin
writeln('*** les  diviseurs de ',p,' dans le tableau T2 sont ****');
for i:=1 to n do  
if(divise(p,T)) then writeln(T);
end;


{programme  principal :
1 : saisir le tableau "T1" et sa dimension "n"
2 : saisir le  tableau "T2" et sa dimension "m"
3 : saisir l'indice "indice"
4 :  afficher les diviseurs de l'élément de "T1" d'indice
"indice" dans le  tableau "T2"}

begin
saisie_tab(T1,n);
saisie_tab(T2,m);  
write('** Donner l''indice de l''élément de T1 :');
read(indice);  
afficher(T2,T1[indice],m);
end
  .


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: كانون الثاني 28, 2009, 08:05:01 مسائاً
Exercice : Le Factoriel    Enoncé de l'exercie
Ecrire un programme en pascal qui permet de  saisir un entier N(N>=100) et afficher son factoriel.    Solution en Pascal
Progarm factoriel;
uses wincrt;
var  N,i,Fact:integer;
begin
repeat
read(N);
until(N >=100);  
Fact:=1;
for i:=1 to N do
Fact:=fact * i;
write('Le Factoriel de  ',N,'est :',Fact);
end
.


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #3 في: كانون الثاني 28, 2009, 08:06:20 مسائاً
Exercice : Recherche d'un élément dans un tab.    Enoncé de l'exercie
Ecrire un programme en Pascal qui permet de:  
- Charger un tableau T de N réels.
- Saisir un réel R.
- Afficher  l'indice de l'élément de T égal a R s'il existe et afficher "R n'existe pas"  sinon.
Solution en Pascal
program recherche;
uses wincrt;
var  i,n:integer;
R:real;
T:array[1..100]of real;
begin
read(n);  
for i:=1 to n do
read(T);
i:=1;
repeat
i:=i+1;  
until(T=R)or(i=n);
if(T=R)then write('R se trouve dans la case  n°:',i)
else write('R ne figure pas dans T');
end
.


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #4 في: كانون الثاني 28, 2009, 08:06:49 مسائاً
Enoncé de l'exercie
Ecrire un programme en Pascal qui saisit un  entier non nul n et 2 n réels à mettre dans un tableau A, puis remplit un  tableau un tableau B par les éléments de A de la manière suivante:
B[1]=A[1]  
B[2]=A[n + 1]
B[3]=A[2]
B[4]=A[n + 2]
Etc.    Solution en Pascal
program tableaux;
uses wincrt;
type  tab=array[1..100]of real;
var A,B :tab;
i,n :integer;
begin  
repeat
read(n);
until(n>0);
for i:=1 to 2*n do
begin  
B[2*i]=A[n + i];
B[2*i - 1]=A;
end;
end
.


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #5 في: كانون الثاني 28, 2009, 08:07:39 مسائاً
Exercice : Affichage d'un tableau dans l'ordre inverse    Enoncé de l'exercie
Ecrire un programme en Pascal qui lit 15 nombres  réels et les affiche en ordre inverse et à raison de trois nombres par  ligne.
   Solution en Pascal
program inverse;
uses wincrt;
const N=15;  
var t:array[1..N]of real;
i:integer;
begin
for i:=1 to N do  
read(t);
for i:=0 to N do
begin
write(' * ',t[N-i]);
if(i  mod 3 = 0)then writeln;
end;
end


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #6 في: كانون الثاني 28, 2009, 08:08:06 مسائاً
Enoncé de l'exercie
Ecrire un programme en pascal qui permet de  saisir un entier N>=100 et afficher
- "N est premier" si N est premier  
- "N n'est pas premier" sinon    Solution en Pascal
program premier;
uses wincrt;
var  n,i:integer;
etat:string;
begin
repeat
read(n);  
until(n>=100);
etat:='N est premier';
i:=2;
repeat
if(N  mod i =0) then etat:='N n''est pas premier';
i:=i+1;
until((n mod  i=0)or(i>sqr(n)));
write(etat);
end
.


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #7 في: كانون الثاني 28, 2009, 08:08:21 مسائاً
Enoncé de l'exercie
Soit la somme :
Sn = 1 + 1/2² + 1/3² + ... +  1/n²
Ecrire un programme en pascal qui permet de saisir un entier n  (n<=100) et afficher la somme Sn    Solution en Pascal
program somme;
uses wincrt;
var  i,n:integer;
sn:real;
begin
repeat
read(n);  
until(n<=100);
sn:=0;
for i:=1 to n do
sn:=sn + 1/sqr(i);  
write(sn);
end
.


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #8 في: كانون الثاني 28, 2009, 08:11:58 مسائاً
Exercice : Tri d'un tableau de caractères    Enoncé de l'exercie
Soit un tableau T1 contenant N lettres  majuscule(de A à Z), n étant un entier compris entre 5 et 20.
On désire  triés en ordre croissant les éléments de T1 et les ranger dans un tableau T2 en  utilisant le principe suivant :
1. chercher la lttre qui a le plus petit  code ASCII dans T1.
2. a) ranger cette lettre dans T2.
b) remplacer  cette lettre par '*' dans T1.
3. répéter n fois les étapes 1 et 2.  
Ecrire un programme Pascal qui permet de :
* saisir les éléments de T1.  
* trier les éléments de T1 et les ranger dans T2.
* afficher les  éléments de T2
   Solution en Pascal
{
La résolution de ce problème demande :
_  Deux tableaux de 20 caractères au max.
_ Une procedure Saisie permettant de  saisir le tableau t1 et sa dimension n.
_ Une procedure Trier qui permet de  remplir le tableau T2 avec les éléments
de t1 triés dans l'ordre croissant.  
_ Une procedure Afficher qui affiche les éléments de T2 apres le tri.
}  
program triage;

uses wincrt;

type tab= array[1..20] of char;  

var t1,t2:tab;
n:integer;

{ La fonction recherche cherche  l'indice de l'élément de T1 qui a le plus petit code Accii .}

function  recherche (t1:tab;n:integer):integer;

var i,ordmin,indmin:integer;  

begin
ordmin:=255;
for i:=1 to n do
if (t1 <> '*')  and (ord(t1)< ordmin) then
begin
ordmin:=ord(t1);  
indmin:=i;
end;
recherche:=indmin;
end;

{ Procedure  Trier }

procedure trier (var t1,t2:tab; n:integer);
var i,indmin:  integer;
begin
for i:=1 to n do
begin
indmin:=recherche(t1,n);  
t2:=t1[indmin];
t1[indmin]:='*';
end;
end;

{  Procedure saisie
les éléments de T1 doivent être des lettres majuscules }  

procedure saisie(var t1: tab ; var n: integer);
var i:integer;  

begin
write('Donner la dimension de votre tableau :');
repeat  
read(n);
until (n in [5..20]);

writeLN('Saisir maintenant des  lettres majuscules :');
for i:= 1 to n do
repeat
read(t1);  
until(t1 in ['A'..'Z']);

end;

{ Procedure Afficher }  

procedure afficher (t2: tab; n: integer);

var i:integer;  

begin
writeLN('Les lettres Triées dans l''ordre croissant :');  
for i:=1 to n do
writeln(t2);
end;

{ Le programme  principal }

begin

saisie(t1,n);
trier(T1,T2,n);  
afficher(t2,n);
end
                    .


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #9 في: كانون الثاني 28, 2009, 08:12:16 مسائاً
Exercice : Polynçome P(x) = 2 x² - 3 x -5    Enoncé de l'exercie
Soit le polynçome P(x)= 2x²-3x-5.
Ecrire un  programme en pascal qui calcule et affiche P(x) pour des valeurs de x variant de  -4 à 4 par pas de 0.5.    Solution en Pascal
program polynome;
uses wincrt;
var  x,p:real;
begin
x:=-4;
repeat
p:=2 * sqr(x) - 3 * x - 5;  
write(p);
x:= x + 0.5;
until(x>4);
end
.


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #10 في: كانون الثاني 28, 2009, 08:12:30 مسائاً
Exercice : Entier de chiffres particuliers    Enoncé de l'exercie
Ecrire un programme en Pascal qui affiche tous  les entiers positifs de deux chiffres de la forme ab tel que la somme (a + b)  divise le produit (a x b).    Solution en Pascal
program chiffres_particuliers;
uses wincrt;  
var i,a,b :integer;
begin
for i:=10 to 99 do
begin
a:= i div  10;
b:= i mod 10;
if((a * b)mod(a + b)=0)then write(i);
end;  
end
.
وفي الاخير اتمنى ان اكون قد افدت ولو قليلا...............................اخوكم اشرف


مامي

  • Hero Member
  • *****
    • مشاركة: 1140
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #11 في: كانون الثاني 29, 2009, 10:22:42 صباحاً

بارك الله فيك أخي لقد أفدتنا كثييييرا
 
 


 


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #12 في: كانون الثاني 29, 2009, 10:26:01 صباحاً
وفيك بركة ....................شكرا لمرورك


lucky girl

  • Hero Member
  • *****
    • مشاركة: 1151
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #13 في: كانون الثاني 29, 2009, 10:54:22 صباحاً
بارك الله فيك أخي اشرف على الموضوع


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #14 في: كانون الثاني 29, 2009, 11:05:29 صباحاً
شكرا لمرورك الطيب