الثلاثاء، 3 مايو 2011

série d'exercices 3SI (Enoncé + correction)

Exercice 1 :

Ecrire un programme Pascal qui permet de former puis d’afficher un entier R de quatre chiffres à partir de deux entiers M et N strictement positifs et formés chacun de deux chiffres et ceci en intercalant le nombre n entre les deux chiffres de m.

Exemple :

Si M=56 et N=21 alors l’entier R sera égal à 5216.

Solution :

program Serie1ex1;

uses wincrt;

var

m,n,a,b,c,d,r : integer;

begin

writeln('Donner les deux entiers m et n ');

readln(m,n);

a:=m div 10;

b:=n div 10;

c:=n mod 10;

d:=m mod 10;

r:=a*1000+b*100+c*10+d;

writeln(r);

end.



الاثنين، 2 مايو 2011

Diagonales de la matrice

calculer la somme des element de premier diagonal et la 2eme diagonal puis le transposé d'une matrice en utilisant un methode recursif:


program som_trans;
uses wincrt;
type
mat=array[1..10,1..10] of integer;
var n,j,i:integer; m:mat;
{*******************************************}
procedure remlissage(var m:mat;n:integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to n do
begin
write('M[',i,',',j,']=');
readln (M[i,j]);
end;
end;
{**********************************************}
function som_diag1(m:mat; n,i:integer):integer;
begin
if i=N then som_diag1:=m[n,n]
else
som_diag1:=m[i,i]+som_diag1(m,n,i+1);
end;
{*****************************************}
function som_diag2(m:mat; n,i:integer):integer;

begin
if i=N then som_diag2:=m[n,1]
else
som_diag2:=m[i,n-i+1]+som_diag2(m,n,i+1);
end;

{transposé da la matrice}
procedure trans(var M:mat;n:integer; var i,j:integer);
var aux:integer;
begin
if i<=n then
begin
if j<=i-1 then
begin
aux:=m[i,j];
m[i,j]:=m[j,i];
m[j,i]:=aux;
j:=j+1;
trans(m,n,i,j);
end;
j:=1;
i:=i+1;
trans(m,n,i,j);
end;

end;

{********************************************}

begin
write('nombre des lignes= '); readln(n);
remlissage(m,n);
i:=1;
writeln('somme diago1 = ', som_diag1(m,n,i));
i:=1;
writeln('somme diago2 = ',som_diag2(m,n,i));
i:=1; j:=1;
trans(M,n,i,j);
{affichage de la matrice}
for i:=1 to n do
begin
for j:=1 to n do
write(m[i,j],' ');
writeln;
end;

end.

Les tableaux unidimensionnels

Les tableaux unidimensionnels

1. Introduction :

Les structures de données déjà vues ne sont pas suffisantes (les entiers, les réels, les chaînes de caractères…) en effet il ne permettent pas de stocker des données assez nombreux, une liste d’élèves par exemple. Donc on a besoin d’une autre structure de données. Ce sont les tableaux. On n’étudiera que les tableaux unidimensionnels ou vecteurs.


2. Notion de vecteur.

On veut stocker les notes de 10 élèves pour un certain traitement. On a donc :

Le tableau Notes qui contient 10 réels :

13

10.5

15

18.25

17

9

16

15.25

12

16


Ce tableau est un vecteur, qui est remplie comme suit (Algorithme) :

Notes[1]<- 13

Notes[2]<- 10.5

.

Notes[10]<- 16.


Commentaires :

  1. L’accès à une case du vecteur se fait par accès direct comme pour la chaîne de caractères.

  2. Pascal ne contient aucune fonction ou procédure prédéfini qui agit sur les tableaux, sauf l’affectation est donc permise.

  3. La case Notes[i] joue un rôle similaire à une variable réelle (dans ce cas) on peut donc appliquer une fonction comme Round(x) par exemple, cependant cette fonction n’a pas été appliquée sur le tableau mais sur un élément du tableau.

3. Déclaration d’un tableau :

* Au niveau de l’algorithme :

Objet

Type/Nature

Nom_Tableau

Tableau de Taille de Type_élément

Exemple :

Objet

Type/Nature

Notes

Tableau de 10 réels


* Au niveau du Pascal :

Var

Nom_Tableau : array[BorneInf..BorneSup] of Type_élément.


Exemple :

Var

Notes : array[1..10] of real.


Commentaires

1) La borne inférieure du tableau n’est pas toujours égale à 1, cette déclaration est possible :

Var

Notes : array[7..16] of real.

Mais dans ce cas le séquence se l’affectation doit être modifié :

Notes[7]<- 13

Notes[8]<- 10.5

.

2) Tout élément du tableau joue le rôle d’une variable de son type, par exemple

Soit ce programme

Var

Liste : array[1..5] of string[25] ;

S :string[51]

Begin

Readln(Liste[1]) ;

Readln(Liste[2]) ;

S :=concat(Liste[1],’ ‘,Liste[2]) ;

Writeln(S) ;

Writeln(Liste[1]) ;

End.

  • Ce programme est valide :

Par contre celui là ne l’est pas :

Var

Liste :array[1..5] of string ;

Begin

Readln(Liste) ; {FAUX}

Writeln(Liste) ; {FAUX}

End.


Application :

  1. Ecrire un programme qui remplit un tableau de taille 20 contenant des entiers

  2. Ecrire un programme qui affiche le tableau précédent.

  3. Ecrire un programme qui inverse le tableau précédent.

Annexe : La boucle For ... do :

Dans cette boucle on a deux cas

Si valeur_initiale>valeur_finale on utilse : For compteur :=V_init to V_fin do

Si valeur_initialeFor compteur :=V_init downto V_fin do

Remarque : On ne fait pas de distinction au niveau de l’algorithme.

Type de données numériques en Pascal

Types de données ordinaux numériques en Pascal
Taille Signé
Intervalle
Non signé
Intervalle
8 bits ShortInt
-128 .. 127
Byte
0 .. 255
16 bits Integer
-32768 .. 32767
Word
0 .. 65535
32 bits LongInt
-2.147.483.648 .. 2.147.483.647
LongWord (depuis Delphi 4)
0 .. 4.294.967.295
64 bits Int64 qword (depuis FreePascal 2.0)

Utilisation des fichiers type text

Sur Pascal, il est possible d'utiliser d'autres fichiers externes

La décalration

var
nom_de_variable : text;

Les opérations possibles sur ce genre de fichiers sont les suivantes :

assign (f,'path');
permet de dire que le fichier f se trouve dans le "path" donné

reset(f)
Permet d'ouvrir le fichier pour la lecture

rewrite(f)
permet d'ouvrir le fichier pour l'écriture (si le fichier n'existait pas avant, un nouveau fichier est crée, si un fichier porte son nom, il est écrasé)

close(f)
permet de fermer le fichier (indipensable si on utilise rewrite(f)!!);

Enfin, pour pourvoir lire et écrire c'est simple :

readln(f,s) ça veut dire : lire depuis le fichier f la variable s

writeln(f,s) permet d'écrire dans f la varaible s!!

Conseils pour le bac pratique - Programmation Pascal.

Vous trouverez ici des conseils très utiles pour la bac pratique :

1) Correction des erreurs de compilations

L'erreur de compilation s'affiche en bas de votre fenêtre, les cas les plus classiques sont :

* Oubli d'un ; ou ) ou ( dans ce cas corriger votre syntaxe en rajoutant le symbole manquant

* Type mismatch : problème de type, ceci arrive quand vous utiliser la division avec les integer par exemple, dans ce cas utilisez plutôt div ou si vous utilisez mod pour les réels. Faites attention d'utiliser les bons opérateurs avec les bon types

* Unknown identifier : ceci veut dire que vous n'avez pas défini votre variable, ça peut arriver aussi si vous écrivez mal une fonction ou une procédure

2) Erreurs classiques :

* N'oubliez jamais le uses wincrt; il est indispensable pour l'exécution

* Si vous utilisez une boucle For, faites attention de bien mettre le to ou downto selon que votre boucle "monte" ou "descend"

*Quand vous utilisez les integer, faites bien attention de pas dépasser la limite qui est de 32768m et donc ne pas manipuler des grands nombres. Utilisez le type longint si vous devez absolument travailler avec les grands nombres.

3) Autres erreurs

L'erreur 202 de RunTime peut parfois apparaître, cette erreur est dû au fait que vous utilisez une grande capacité de mémoire. Pensez dans ce cas de limiter l'utilisation, par exemple me déclarer pas un :

array [1..100] of string;

mais plutôt

array [1..100] of string[10];

Et puis bon courage à tout le monde de la part de notre blog.

الأحد، 1 مايو 2011

exercice RC

Exercice d’après www.chimix.com
Un condensateur de capacité C, initialement chargé sous une tension U= 5 V est déchargé à travers un conducteur ohmique de résistance R= 10 kW. On visualise la tenion uc aux bornes du condensateur au cours de la décharge.

  1. Déterminer l'équation différentielle du circuit de décharge en faisant apparaître sur un schéma les grandeurs uc et i.
  2. Vérifier que uc(t)= U exp( -t/(RC)) est solution de cette équation.
  3. Déterminer la constante de temps du circuit en précisant la méthode utilisée et en déduire la capacité du condensateur
                  *********************correction******************************

équation différentielle du circuit de décharge
uc + Ri = 0 avec q = Cuc et i = dq/dt = C duc /dt d'où : uc + RCduc /dt =0 (1)
uc (t) = U exp( -t/(RC)) ; duc /dt = U/(-RC) exp( -t/(RC))
repport dans (1) : U exp( -t/(RC)) +RC U/(-RC) exp( -t/(RC)) =0 vérifié quel que soit t.
donc uc(t)= U exp( -t/(RC)) est solution de cette équation.
constante de temps du circuit
C= t/R = 50 / 104 = 5 10-3 F.