Forum programmation
 
AccueilPortailFAQRechercherS'enregistrerMembresGroupesConnexion

Partagez | 
 

 Correction de quelques Bac Pratique 2005

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2
AuteurMessage
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 17:21

mtcs a écrit:
merci manianis pour l'explication

merci bcp Chaker cheers


Ya pas de quoi Mohamed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 106
Date d'inscription : 19/03/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 17:25

Ceci est fait par la procédure suivante :

Code:
 procedure milieu(T:TTab;N:integer);
  var i, min, dmin, diff:integer;
  begin
    min:=2;
    dmin := Somme(T, 1, 1) - Somme(T, 3, n);

    for i:=3 to n-1 do begin   
        diff := Somme(T, 1, i - 1) - Somme(T, i + 1, n);
        if (diff < dmin) then begin
            min := i;
            dmin := diff;
        end;
    end;

    writeln;
    writeln(' Ind= ',min);
    writeln(' S1= ',somme(T,1,min-1));
    writeln(' S2= ',somme(T,min+1,n));
  end;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 17:46

Merci Manianis, tu m'as rappelé le fait que les éléments pouvaient être négatifs.
Mais un autre détail nous a encore échapper, ta procédure ne marche pas.
Voici la correction finale qui marche à tous les coups :
Code:
 procedure milieu(T:TTab;N:integer);
  var i, min, dmin, diff:integer;
  begin
    min:=2;
    dmin := ABS(Somme(T, 1, 1) - Somme(T, 3, n));

    for i:=3 to n-1 do begin 
        diff := ABS(Somme(T, 1, i - 1) - Somme(T, i + 1, n));
        if (diff < dmin) then begin
            min := i;
            dmin := diff;
        end;
    end;

    writeln;
    writeln(' Ind= ',min);
    writeln(' S1= ',somme(T,1,min-1));
    writeln(' S2= ',somme(T,min+1,n));
  end;


Tu remarqueras que j'ai ajouter ABS car la différence peut être positive comme elle peut être négative....
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 106
Date d'inscription : 19/03/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 18:02

Si çà marche alors c'est bien... Very Happy bien que je ne suis pas convaincu de la nécessité du ABS(...)

Si je trouve un contre exemple je te le ferais savoir...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 18:09

Voici une exécution avec ta solution :



Il a donné l'indice ou la différence est minimale c'est vrai mais la différence est -143 et si on essaye avec, par exemple, l'indice 5 (S1=47, S2=91) on voit bien que les deux somme sont plus proche mais la différence S1-S2 (algebriquement) n'est pas minimale.
J'éspére que ce petit exemple t'a convaincu de l'utilité de ABS
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 106
Date d'inscription : 19/03/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 20:17

En effet je suis convaincu par ton point de vue. Je trouves que c'est excellent même.

L'élève a le libre choix entre les deux solutions proposées qui sont jugées correctes toutes les deux.

Tu affirmes :
Citation :
Il a donné l'indice ou la différence est minimale c'est vrai mais la différence est -143

Et on demande de :

  • Afficher l'indice (ind) de l'élément du tableau
    dont l'écart entre la somme (S1) des éléments qui le précédent et celle
    des éléments qui le succèdent (S2) soit minimal.

(-143) est minimal et est inférieur à (47-91).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 20:26

Non on ne demande pas l'indice ou (S1-S2) est minimale on demande l'indice ou S1 et S2 sont les plus proches.
Par exemple si on demande de trouver la diffirence minimale d'age entre les éléments d'un tableau et d'afficher les ages à qui elle correspond, le programme n'irait pas checher une différence négative (comme -100) mais il afficherait les deux ages les plus proches
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 106
Date d'inscription : 19/03/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 20:54

Eh bien je mérites 18/20 quand même...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 21:18

manianis a écrit:
Eh bien je mérites 18/20 quand même...

Peut être 18.5 pour la participation en classe! lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 22:42

Exercice 8:

on se propose de:


  • saisir les éléments d'un tableau T de N entiers formés chacun de trois chiffres (5<= N <= 20)
  • déterminer et d'afficher le plus grand élément du tableau T
  • afficher tous les élément du tableau T dont la permutation des chiffres donne la valeur maximale déterminée précedement

Exemple:

soit le tableau T suivant:
234 | 125 | 200 | 324 | 152 | 120 | 214 | 312 | 432 | -110
|

Max = 432
les valeurs dont les chiffres donnent par permutation la valeur maximale sont: 234 et 324

Questions


  1. décomposez ce problème en modules et analysez chacun des modules proposés
  2. traduisez la solution en un programme pascal



j'ai decomposé cet exercice en 2 module, procedure pour saisir la taille de tableau et pour remplire ce tableau et fontion qui cherche le maximum de tableau. maintenant je prepare la procedure qui nous donne les maximum apres la permutation

Code:
program EX8;
uses wincrt;
type Tab=array[1..20] of integer;
var  n:byte; t:tab;  max:integer;
 
 
{saisir la taille du tableau et remplissage}

procedure lecture (var n:byte; var t:tab);
var i:byte;
begin
  repeat
    writeln (' saisir la taille de tableau' );
    readln (n);
  until (n in [5..20]);
  for i:= 1 to n do
    repeat
    writeln ('saisir l''element ',i,' de tableau');
    readln (t[i]);
    until (t[i] < 999) and (t[i] > 100);
end;
 
 
{fonction qui cherche le maximum dans un tableau}

function maxi (t:tab; n:byte):integer;
var max:integer;  i:byte;
begin
max:= t[1];
i:=1;
 repeat
  inc(i);
  if (t[i] > max) then
    begin
      max:= t[i];
    end;
 until (i=n);
maxi:= max;
end;

{programme principale}
begin
lecture (n,t);
maxi (t,n);
max:= maxi(t,n);
write ('la plus grand element de tableau est ',max);
end.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 21 Mar - 22:50

il y a une petite faute dans la condition de saisie

Code:
    repeat
    writeln ('saisir l''element ',i,' de tableau');
    readln (t[i]);
    until (t[i] < 999) and (t[i] > 100);

il faut

Code:
(abs(t[i])< 999) and (abs(t[i]) > 100);
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Jeu 22 Mar - 2:18

Mohamed je crois que tu as oublié l'affichage des valeurs donts les chiffres donnent par permutation la valeur maximale.
Voici une procédure qui permet des les afficher :
Code:
function  existe(T:Tab;N,v:integer):boolean;
  var i:integer;
  begin
    i:=0;
    repeat
      inc(i);
    until (T[i]=v)OR(i>=N);
    existe:=T[i]=v;
  end;

procedure chiffre(T:Tab;n,max:integer);
  var V:Tab;
      i,u,d,c:integer;
  begin
    max:=ABS(max);
    u:=max mod 10;
    d:=(max mod 100)div 10;
    c:=max div 100;
    V[1]:=c*100+d+u*10;
    V[2]:=c+d*10+u*100;
    V[3]:=c*10+d+u*100;
    V[4]:=c*10+d*100+u;
    V[5]:=c+d*100+u*10;

    write(' Les valeurs dont les chiffres donnent par permutation la valeur maximale sont : ');
    for i:=1 to n do
      if existe(v,5,t[i]) then write(T[i]:5);
      writeln;
  end;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Jeu 22 Mar - 2:24

j'ai fai l'exercice n°1 avec une autre methode sans l'utilisation de tableau et avec une seul procedure

tout d'abord rappel de l'ennoncé qui à ecrit deja Chaker
Citation :
On commence par l'exercice N°1 page 174 :
On se propose de chercher puis d'afficher la moyenne d'une classe comportant 30 élèves.
Questions :




  1. Définissez les structures de données à utiliser.
  2. Décomposezce problèmeen modules et analyser chacun des modules proposés
  3. Traduisez la solution en un programme Pascal


et voila ma solution:

Code:
program ex1;
uses wincrt;
var n,moy:real;
 
procedure saisie (var n,moy:real);
var i:byte; x: real;
begin
i:=0; n:=0;
  repeat
    inc(i);
      repeat
          writeln ('saisir la moyenne de l''eleve ',i);  {cet operation repeter 30 fois le nombre des eleve}
          write ('n= ');
          readln (n);
      until (n<= 20) and (n>=0);
  x:=x+n;
  writeln('x= ',x:5:3);
  moy := x/i;
until (i=30);
writeln(moy:5:2);
end;
 
{programme principale}
begin
saisie (n,moy);
end.


s'il ya des quetion je suis pres de repondre, et voila un capture d'ecran
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Jeu 22 Mar - 2:46

Oui Mohamed c'est juste, mais l'affichage est assez mal et les noms des variables n'ont aucun lien avec leurs contenus.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Jeu 22 Mar - 13:00

Code:
program ex1;
uses wincrt;
var moy,moy_total:real;{moy c'est le moyenne d'un eleve, moy_total c'est la moyenne de toute la classe}
 
procedure saisie (var moy ,moy_total:real);
var nbr_eleve:byte; somme: real;
begin
nbr_eleve:=0; n:=0;
  repeat
    inc(nbr_eleve);
      repeat
          writeln ('saisir la moyenne de l''eleve ',nbr_eleve);  {cet operation repeter 30 fois le nombre des eleve}
          write ('moy= ');
          readln (moy);
      until (moy<= 20) and (moy>=0);{il se peut que moy reçoit 0}
  somme:=somme+moy;
  writeln('somme= ',x:5:2);
  moy_total := somme/nbr_eleve;
until (nbr_eleve=30);
writeln(moy_total:5:2);
end;
 
{programme principale}
begin
saisie (moy,moy_total);
end.


j'espere que j'ai reussé à corriger mes fautes Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 106
Date d'inscription : 19/03/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Jeu 22 Mar - 13:04

L'exécution affiche bien un résultat correct mais les noms des variables ainsi que le nom de la procédure ne sont pas trés explicites puisqu'on trouve dans une procédure de saisie le calcul et l'affichage de la moyenne.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Jeu 22 Mar - 13:05

chakerbh a écrit:
Mohamed je crois que tu as oublié l'affichage des valeurs donts les chiffres donnent par permutation la valeur maximale.
Voici une procédure qui permet des les afficher :
Code:
function  existe(T:Tab;N,v:integer):boolean;
  var i:integer;
  begin
    i:=0;
    repeat
      inc(i);
    until (T[i]=v)OR(i>=N);
    existe:=T[i]=v;
  end;

procedure chiffre(T:Tab;n,max:integer);
  var V:Tab;
      i,u,d,c:integer;
  begin
    max:=ABS(max);
    u:=max mod 10;
    d:=(max mod 100)div 10;
    c:=max div 100;
    V[1]:=c*100+d+u*10;
    V[2]:=c+d*10+u*100;
    V[3]:=c*10+d+u*100;
    V[4]:=c*10+d*100+u;
    V[5]:=c+d*100+u*10;

    write(' Les valeurs dont les chiffres donnent par permutation la valeur maximale sont : ');
    for i:=1 to n do
      if existe(v,5,t[i]) then write(T[i]:5);
      writeln;
  end;


merci bcp Chaker
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
fighters
Nouveau
Nouveau
avatar

Nombre de messages : 24
Age : 29
Date d'inscription : 27/03/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 16 Mai - 15:11

merci pour ces exercices
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Mer 16 Mai - 21:57

fighters a écrit:
merci pour ces exercices


Ya pas de koi mon ami
Si tu as encore besoin d'aide, n'hésite pas
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Bassi
Nouveau
Nouveau


Nombre de messages : 12
Date d'inscription : 25/01/2008

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Sam 26 Jan - 0:53

merci
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
afef_ad
Nouveau
Nouveau


Nombre de messages : 2
Date d'inscription : 26/01/2008

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Ven 1 Fév - 22:44

joi merci les amis
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Night_wolf
Nouveau
Nouveau


Nombre de messages : 8
Date d'inscription : 31/01/2008

MessageSujet: Re: Correction de quelques Bac Pratique 2005   Ven 1 Fév - 23:29

merciiii
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Correction de quelques Bac Pratique 2005   

Revenir en haut Aller en bas
 
Correction de quelques Bac Pratique 2005
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» quelques ajouts
» Quelques mots sur moi
» [Laguna II ph 2 - 2.2L dci de 2005 Initiale Paris] David76
» Correction de codage
» Maison de correction Roses Noires

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum programmation :: Programmation :: Delphi & Pascal :: Pascal :: Exercices-
Sauter vers: