IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Devoir de vacances d'algorithmique : imprimer des numéros de table en piles
Dans le cadre d'un concours multiple

Le , par APL-AML

97PARTAGES

6  1 
Petit devoir de vacances…

Juste pour vous faire partager le plus sympathique sujet d’algorithmie auquel j’ai été confronté.

Anecdote :

Nous sommes début mars 1992 et je développe l’application examens-concours depuis à peine plus d’un mois lorsqu’une gestionnaire vient s’installer en face de moi. Je la vois inscrire des chiffres avec un gros feutre noir sur des morceaux cartonnés découpés dans des intercalaires.

- « Vous faites quoi ? »

- « Je prépare des numéros de table pour le concours qui va avoir lieu la semaine prochaine, j’ai besoin de calme, les collègues sont trop bruyantes. »

- « Mais c’est fastidieux, ce travail ! Vous ne faites quand même pas ça pour tous les concours ? Si ?... Pour le prochain concours, je résous votre problème… »

Mais bien sûr, il n’est pas question de remplacer l’inconvénient d’inscrire des numéros par l’inconvénient de les trier. L’idée est donc d’imprimer ces numéros de table, quatre par page mais en piles, c’est-à-dire que sous le numéro « un » il y a le « deux », puis le « trois », etc. Deux coups de massicot, il ne suffit plus qu’à réunir les quatre piles, mettre un élastique autour et le tour est joué.

Et tant qu’à faire, plutôt que de se contenter d’un numéro sur un quart de feuille, autant y mettre le libellé du concours, la date, le lieu, la salle, les noms-prénoms et la consigne « Numéro de place à reporter sur votre copie ».
Avant l’envoi des convocations à un concours, un placement des candidatures par ordre alphabétique affecte un numéro de place à chaque candidat. Pour pouvoir imprimer en piles 4 numéros de place par page, il faut nécessairement affecter un nouveau numéro à chaque candidature de façon à ce que les candidatures triées sur ce nouveau numéro permettent au programme d’édition d’imprimer sur chaque page les quatre numéros de place qui conviennent.

Facile de créer ces nouveaux numéros ! Il suffit de connaître le nombre d’inscrits, de diviser par quatre et de prendre en compte l’éventuel reste.

Oui, mais… Car il y a toujours un « Oui, mais » ! Certains candidats peuvent s’inscrire aux deux concours interne et externe. Avant la date d’examen, ils doivent obligatoirement se déterminer pour l’un des deux concours. Cela implique la suppression d’une candidature dans l’un des deux, ce qui génère fatalement une place libre. Mais comment traiter une candidature qui n’existe plus dans la table des candidatures ?

Je vous laisse réfléchir à l’algorithme de création de ces nouveaux numéros… si toutefois cette problématique vous inspire.

Bonnes vacances !

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de anapurna
Expert confirmé https://www.developpez.com
Le 20/07/2021 à 18:03
salut

en fait il ne faut pas supprimer l’étudiant dans la table de Candidature mais le marquer comme valide ou non

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
ETABLESEMENT 
  IDETABLISEMENT 
  NOM 
  LIEU
FINTBL
 
SALLE
  IDSALLE 
  NUMETABLISSEMENT 
  NOMSALLE
FINTBL
 
CONCOURS
  IDCONCOURS
  DTCONCOUR
  NUMSALLE
FINTBL
 
ETUDIANT 
  IDETUDIANT
  NOM
  PRENOM
FINTBL
 
CANDIDATURE  
  IDCANDIDAT
  NUMETUDIANT
  NUMCONCOURS
  VALIDE
FINTBL
 
PLACE 
   IDPLACE 
   NUMCANDIDAT
FINTBL
il te suffit de placer que les étudiants VALIDE
1  0 
Avatar de APL-AML
Membre éclairé https://www.developpez.com
Le 31/07/2021 à 12:00
■ ■ ■ SOMMAIRE ■ ■ ■

  • Simulation
  • Algorigramme LCP
  • Programme post_itBDD.ace
  • Méthodologie « Logique de Construction de Programme (LCP)
  • LCP et le programme post-itBDD.ace
  • Billets LCP



En l’absence de liens hypertexte intra-document, je propose comme palliatif d’utiliser la fonctionnalité de votre navigateur « Rechercher dans la page » : Ctrl/F.

Chaque chapitre correspondant à un item du menu est précédé d’un signet « § ».

Vous saisissez dans la fenêtre de recherche le symbole typographique Paragraphe "§" puis vous naviguer dans le message à l’aide des flèches de direction de la fenêtre ˄ / ˅ ou à l’aide des raccourcis clavier Ctrl+MaJ+G / Ctrl+G.

  1. Affichage du message
  2. Rechercher dans la page : Ctrl/F
  3. Saisie du symbole typographique Paragraphe : "§"
  4. [Entrée] ou ˄ / ˅ ou Ctrl+MaJ+G / Ctrl+G


§ 01 : Simulation
ec_place = Plus grand numéro de place = nombre de candidats = 22 (pour ce jeu d’essai)

Numéro de post-it = Numéro de la pile + (Numéro de la page précédente * 4)
                  => initialiser le numéro de page à zéro

               TRI / NUMÉRO DE PLACE                     TRI / NUMÉRO DE POST-IT
          ┌───────┬───────┬───────┬───────┐          ┌───────┬───────┬───────┬───────┐
          │ Place │Post-it│ Pile  │ Page  │          │ Place │Post-it│ Pile  │ Page  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     1 │     1 │     1 │    1  │          │     1 │     1 │     1 │    1  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     2 │     5 │     1 │    2  │          │     7 │     2 │     2 │    1  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     3 │     9 │     1 │    3  │          │    13 │     3 │     3 │    1  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     4 │    13 │     1 │    4  │          │    18 │     4 │     4 │    1  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     5 │    17 │     1 │    5  │          │     2 │     5 │     1 │    2  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     6 │    21 │     1 │    6  │          │     8 │     6 │     2 │    2  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     7 │     2 │     2 │    1  │          │    14 │     7 │     3 │    2  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     8 │     6 │     2 │    2  │          │    19 │     8 │     4 │    2  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     9 │    10 │     2 │    3  │          │     3 │     9 │     1 │    3  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    10 │    14 │     2 │    4  │          │     9 │    10 │     2 │    3  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    11 │    18 │     2 │    5  │          │    15 │    11 │     3 │    3  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    12 │    22 │     2 │    6  │          │    20 │    12 │     4 │    3  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    13 │     3 │     3 │    1  │          │     4 │    13 │     1 │    4  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    14 │     7 │     3 │    2  │          │    10 │    14 │     2 │    4  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    15 │    11 │     3 │    3  │          │    16 │    15 │     3 │    4  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    16 │    15 │     3 │    4  │          │    21 │    16 │     4 │    4  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    17 │    19 │     3 │    5  │          │     5 │    17 │     1 │    5  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    18 │     4 │     4 │    1  │          │    11 │    18 │     2 │    5  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    19 │     8 │     4 │    2  │          │    17 │    19 │     3 │    5  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    20 │    12 │     4 │    3  │          │    22 │    20 │     4 │    5  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    21 │    16 │     4 │    4  │          │     6 │    21 │     1 │    6  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    22 │    20 │     4 │    5  │          │    12 │    22 │     2 │    6  │
          └───────┴───────┴───────┴───────┘          └───────┴───────┴───────┴───────┘


§ 02 : Algorigramme LCP

Le programme gère deux compteurs que l’on peut assimiler à des tables (voir la simulation ci-dessus) dont le contenu est leur rang (numéro), autrement dit leur indice courant (i_page et i_pile) :

  • une table des pages (nombre d’items = (nombre d’inscrits + 3) /4)
  • et une table des piles de 4 items.
Numéro de post-it = Numéro de la pile + (Numéro de la page précédente * 4)
                  => initialiser le numéro de page à zéro

Initialisations :

LET j_page  =  ec_place / 4            ->  j_page  = 22 / 4       = 5
LET v_reste =  ec_place - (j_page * 4) ->  v_reste = 22 – (5 * 4) = 2  ->  v_reste = 2
LET j_page  = (ec_place + 3) / 4       ->  j_page  = (22 + 3) /4  = 6  ->  j_page  = 6
LET i_page  = 0                                                        ->  i_page  = 0
LET i_pile  = 1                                                        ->  i_pile  = 1
LET v_place = 1                                                        ->  v_place = 1

              ┌─────────────────────┐
              │ v_reste = 2         │
              │ j_page  = 6         │
        D-PRG │ i_page  = 0         │
              │ i_pile  = 1         │
              │ v_place = 1         │
              └──────────┬──────────┘
                         ├────────────────────────────────────────────────────────────────────┐
              ┌──────────┴──────────┐                                                         │
      D-PLACE │    ON EVERY ROW     │                                                         │
              └──────────┬──────────┘                                                         │
                         ├─────────────────────────────────────────────────────────────────┐  │
              ┌──────────┴──────────┐                                                      │  │
D-PLACE LIBRE │ v_place < cec_place │                                                      │  │
         non  └──────────┬──────────┘      oui                                             │  │
         ┌───────────────◊───────────────────┐                                             │  │
         │                        ┌──────────┴──────────┐                                  │  │
         │                 D_PAGE │   i_page = j_page   │                                  │  │
         │                   non  └──────────┬──────────┘  oui                             │  │
         │                   ┌───────────────◊───────────────┐                             │  │
         │                   │                    ┌──────────┴──────────┐                  │  │
         │                   │                    │i_pile  = i_pile + 1 │                  │  │
         │                   │            D_PILE  │i_page  = 0          │                  │  │
         │                   │                    │v_reste > 0          │                  │  │
         │                   │                non └──────────┬──────────┘ oui              │  │
         │                   │               ┌───────────────◊──────────────┐              │  │
  ┌──────┴──────┐     ┌──────┴──────┐ ┌──────┴──────┐           ┌───────────┴───────────┐  │  │
  │      Ø      │     │      Ø      │ │      Ø      │           │v_reste = v_reste - 1  │  │  │
  └──────┬──────┘     └──────┬──────┘ └──────┬──────┘           └───────────┬───────────┘  │  │
         │                   │               └───────────────┬──────────────┘              │  │
         │                   │                    ┌──────────┴──────────┐                  │  │
         │                   │              INTER │    v_reste = 0      │                  │  │
         │                   │               non  └──────────┬──────────┘ oui              │  │
         │                   │               ┌───────────────◊──────────────┐              │  │
         │                   │        ┌──────┴──────┐           ┌───────────┴───────────┐  │  │
         │                   │        │      Ø      │           │j_page = ec_place / 4  │  │  │
         │                   │        └──────┬──────┘           └───────────┬───────────┘  │  │
         │                   │               └───────────────┬──────────────┘              │  │
         │                   │                    ┌──────────┴──────────┐                  │  │
         │                   │             F_PILE │          Ø          │                  │  │
         │                   │                    └──────────┬──────────┘                  │  │
         │                   └───────────────┬───────────────┘                             │  │
         │                        ┌──────────┴──────────┐                                  │  │
         │                 F_PAGE │i_page  = i_page  + 1│                                  │  │
         │                        │v_place = v_place + 1│                                  │  │
         │                        └──────────┬──────────┘                                  │  │
         └───────────────────┬───────────────┘                                             │  │
                  ┌──────────┴──────────┐                                                  │  │
    F-PLACE LIBRE │ v_place < cec_place │                                                  │  │
                  └──────────┬──────────┘ oui                                              │  │
                             ◊─────────────────────────────────────────────────────────────┘  │
                  ┌──────────┴──────────┐                                                     │
            INTER │   i_page = j_page   │                                                     │
             non  └──────────┬──────────┘  oui                                                │
             ┌───────────────◊───────────────┐                                                │
             │                    ┌──────────┴──────────┐                                     │
             │                    │i_pile  = i_pile + 1 │                                     │
             │             D_PILE │i_page  = 0          │                                     │
             │                    │v_reste > 0          │                                     │
             │               non  └──────────┬──────────┘ oui                                 │
             │               ┌───────────────◊──────────────┐                                 │
      ┌──────┴──────┐ ┌──────┴──────┐           ┌───────────┴───────────┐                     │
      │      Ø      │ │      Ø      │           │v_reste = v_reste - 1  │                     │
      └──────┬──────┘ └──────┬──────┘           └───────────┬───────────┘                     │
             │               └───────────────┬──────────────┘                                 │
             │                    ┌──────────┴──────────┐                                     │
             │              INTER │    v_reste = 0      │                                     │
             │               non  └──────────┬──────────┘ oui                                 │
             │               ┌───────────────◊──────────────┐                                 │
             │        ┌──────┴──────┐           ┌───────────┴───────────┐                     │
             │        │      Ø      │           │j_page = ec_place / 4  │                     │
             │        └──────┬──────┘           └───────────┬───────────┘                     │
             │               └───────────────┬──────────────┘                                 │
             │                    ┌──────────┴──────────┐                                     │
             │             F_PILE │          Ø          │                                     │
             │                    └──────────┬──────────┘                                     │
             └───────────────┬───────────────┘                                                │
            ┌────────────────┴────────────────┐                                               │
            │v_post_it = i_pile + (i_page * 4)│                                               │
            │PRINT v_post_it                  │                                               │
    F-PLACE │i_page  = i_page  + 1            │                                               │
            │v_place = v_place + 1            │                                               │
            │v_place > ec_place               │                                               │
            └────────────────┬────────────────┘ non                                           │
                             ◊────────────────────────────────────────────────────────────────┘
            ┌────────────────┴────────────────┐
      F-PRG │           ON LAST ROW           │
            │  PRINT v_post_it (flagué ˮ-ˮ)   │
            └─────────────────────────────────┘


§ 03 : Programme post_itBDD.ace

Cet exercice d’algorithmie n’est autre que le programme post_itBDD.ace d’une application Examens-Concours développée avec le SGBD Informix de 1992 à 2007.

Si le programme a été écrit le 10/03/1992, son logigramme a été réalisé le 26/06/2019 comme support pédagogique d’un billet de blog consacré à la Méthodologie de programmation LCP.
{================================= post_itBDD =================================}
{                                                                              }
{   ACE    :  post_itBDD.ace                                                   }
{                                                                              }
{   SHELL  :  ../shell_1/post_itBDD                                            }
{                                                                              }
{   AUTEUR :  APL-AML                                                          }
{                                                                              }
{   Objet  :  Création du fichier "$(LOGNAME).out" à loader dans la table tmp  }
{             pour mise à jour de l'information cec.post_it                    }
{             à l'aide du sql "post_itBDD.sql"                                 }
{                                                                              }
{             L'édition des post_it s'effectue à l'aide du shell "post_itALL"  }
{                                                                              }
{             post_itBDD et post_itALL gèrent les places libres.               }
{             Il est donc possible de relancer éventuellement cette chaine.    }
{                                                                              }
{   Date   :  10 Mars 1992                                                     }
{                                                                              }
{==============================================================================}

                           {========================}
{==========================} DATABASE concours  END {==========================}
                           {========================}

{================================}  DEFINE  {==================================}
{}                                                                            {}
{}    PARAM[1] p_c_ec        CHAR(5)                                          {}
{}    PARAM[2] p_t_ec        CHAR(2)                                          {}
{}    PARAM[3] p_s_ec        CHAR(2)                                          {}
{}    PARAM[4] p_logname     CHAR(8)                                          {}
{}                                                                            {}
{}    VARIABLE j_page        INTEGER                                          {}
{}    VARIABLE i_page        INTEGER                                          {}
{}    VARIABLE i_pile        INTEGER                                          {}
{}    VARIABLE v_post_it     INTEGER                                          {}
{}    VARIABLE v_place       INTEGER                                          {}
{}    VARIABLE v_reste       INTEGER                                          {}
{}                                                                            {}
{==================================}  END  {===================================}

{==================================  INPUT  ===================================}
{}                                                                            {}
{     PROMPT FOR v_dp USING " CONCOURS : "                                     }
{}                                                                            {}
{===================================  END  ====================================}

{================================}  OUTPUT  {==================================}
{}                                                                            {}
{     REPORT TO PRINTER                                                        }
{}    REPORT TO PIPE "cat > ${LOGNAME}.out"                                   {}
{}    TOP    MARGIN 0                                                         {}
{}    BOTTOM MARGIN 0                                                         {}
{}    LEFT   MARGIN 0                                                         {}
{}    PAGE   LENGTH 58                                                        {}
{}                                                                            {}
{==================================}  END  {===================================}

{=================================}  SELECT  {=================================}

           ec.cts              ec_cts,
           ec.c_ec             ec_c_ec,
           ec.t_ec             ec_t_ec,
           ec.s_ec             ec_s_ec,
           ec.place            ec_place,

          cec.n_cec           cec_n_cec,
          cec.place           cec_place

FROM       ec,
          cec,
           ln

WHERE      ec.c_ec          =  $p_c_ec
AND        ec.t_ec          =  $p_t_ec
AND        ec.s_ec          =  $p_s_ec

AND        ec.cts           = cec.cts

AND      (cec.c_decision    = "A"       OR cec.c_decision = "C")
AND       cec.place        IS NOT NULL

AND        ln.logname       =  $p_logname
AND       (ln.service      IS NULL      OR  ln.service    = ec.service)

{===============================}  ORDER  BY  {================================}

           ec_cts,
          cec_place

{==================================}  END  {===================================}

{=================================}  FORMAT  {=================================}

{------------------------} BEFORE GROUP OF  ec_cts     {-----------------------}

LET j_page  =  ec_place / 4
LET v_reste =  ec_place - (j_page * 4)
LET j_page  = (ec_place + 3) / 4
LET i_page  = 0
LET i_pile  = 1
LET v_place = 1

{----------------------------  FIRST PAGE  HEADER  ----------------------------}

{------------------------------   PAGE  HEADER   ------------------------------}

{-------------------------------  PAGE TRAILER  -------------------------------}

{------------------------------}  ON EVERY ROW  {------------------------------}

WHILE v_place < cec_place
DO   BEGIN
     IF   i_page = j_page
     THEN BEGIN
          LET i_pile = i_pile + 1
          LET i_page = 0
          IF v_reste > 0
          THEN LET v_reste = v_reste - 1
          IF v_reste = 0
          THEN LET j_page  = ec_place / 4
          END
     LET i_page  = i_page  + 1
     LET v_place = v_place + 1
     END

IF   i_page = j_page
THEN BEGIN
     LET i_pile = i_pile + 1
     LET i_page = 0
     IF v_reste > 0
     THEN LET v_reste = v_reste - 1
     IF v_reste = 0
     THEN LET j_page  = ec_place / 4
     END

LET v_post_it = i_pile + (i_page * 4)
PRINT cec_n_cec USING "<<<<<<<<<<<<",  "||",
       ec_c_ec CLIPPED, "|",  ec_t_ec, "|",  ec_s_ec, "|-|-|-|-|||", 
      cec_place USING "<<<<", "||", v_post_it USING "<<<<", "|||||||||"

LET i_page  = i_page  + 1
LET v_place = v_place + 1

{--------------------------  TRAITEMENT FIN DE PAGE  --------------------------}

{------------------------  TRAITEMENT EN-TETE DE PAGE  ------------------------}

{------------------------  TRAITEMENT  LIGNE COURANTE  ------------------------}

{-------------------------  AFTER GROUP OF  ec_cts    -------------------------}

{------------------------------}  ON LAST ROW  {-------------------------------}

PRINT cec_n_cec USING "<<<<<<<<<<<<",  "||",
       ec_c_ec CLIPPED, "|",  ec_t_ec, "|",  ec_s_ec, "|-|-|-|-|||", 
      cec_place USING "<<<<", "||", v_post_it USING "<<<<", "||||||||-|"

{ - Reinitialisation de l'imprimante "HP LASERJET III Si"                      }

{==================================}  END  {===================================}


§ 04 : Méthodologie « Logique de Construction de Programme » (LCP)

LCP procède par structuration :

La structure hiérarchique d'un programme se déduisant logiquement de la structure des données utilisées (FLS/FLE), la construction du programme commence par la structuration des données qu'il doit produire en sortie.

Au-delà de la structuration hiérarchique du programme déterminée par la structure des données, le degré de décomposition algorithmique peut descendre jusqu’au niveau de l’instruction. Cela dépend de la capacité d’abstraction du programmeur. La seule règle qui régit la réflexion :

« Penser hiérarchiquement par traitements, autrement dit : raisonner du plus global vers le plus détaillé, par décompositions hiérarchiques successives sur la base des actions et non sur celle des conditions ».
Structuration du FLS, du FLE et du PRG

Concernant ce programme post_itBDD, la structuration classique LCP est rudimentaire puisqu’il s’agit de créer une seule information en sortie (post_it) à partir d’une seule information en entrée (place).

  1. Structuration des données de sortie (informations présentes).

    Les données de sortie ne sont pas exclusivement des données destinées à être imprimées. Ce peut être des données de la BDD (écran de saisie) ou le résultat d’un traitement particulier comme c’est le cas pour le programme post_itBDD proposé.

  2. Structuration des données d’entrée (informations utiles).

    LCP est une méthode de programmation conçue à l’origine dans un contexte batch où le Fichier Logique en Entrée (FLE) était constitué en amont du programme. Dans un contexte BDD, c’est le développeur qui constitue et structure le FLE dont le programme a besoin.

    C’est la conception et la structuration préalable du FLS qui inspire la conception et la structuration du FLE.

  3. Structuration du programme.

    La structuration du programme se déduit de celle du FLE pour ce qui concerne les Ensembles De Données (EDD), mais la décomposition structurelle du programme peut devoir être poussée plus finement, au-delà des EDD, tout en respectant la logique LCP qui consiste à penser par traitements. C’est le cas pour ce programme post_itBDD.



§ 05 : LCP et le Programme post_itBDD.ace

  • Structuration des données de Sortie (FLS)

    Représentation des Ensembles De Données (EDD) sous forme de patatoïdes :
    ┌───────────────────────────────────────────────────────────────────────────────────┐
    │  EDD FLS (ensemble universel)                                                     │
    │ ┌───────────────────────────────────────────────────────────────────────────────┐ │
    │ │  EDD PLACE CEC (P fois) (Niveau 1)                                            │ │
    │ │ ┌───────────────────────────────────────────────────────────────────────────┐ │ │
    │ │ │ EDD CANDIDATURE (1 fois) (Niveau 2)                                       │ │ │
    │ │ │                                                                           │ │ │
    │ │ │ cec.n_cec (N° de la candidature)                                          │ │ │
    │ │ │ cec.cts   (code du concours = code + type + session)                      │ │ │
    │ │ │ cec.place (place attribuée au candidat lors du placement par ordre alpha.)│ │ │
    │ │ └───────────────────────────────────────────────────────────────────────────┘ │ │
    │ └───────────────────────────────────────────────────────────────────────────────┘ │
    └───────────────────────────────────────────────────────────────────────────────────┘
    
    Représentation de ces mêmes Ensembles De Données à l’aide d’un diagramme avec des accolades :
                 ┌               ┌
                 │               │ CEC_N_CEC
                 │               │ CEC_C_EC
                 │ EDD           │ CEC_T_EC
        EDD FLS <  PLACE (P)    <  CEC_S_EC
                 │               │ CEC_PLACE
                 │               │ CEC_POST_IT
                 │               │ 
                 └               └
         Niveau :  Niveau 1        Niveau 2
    Référentiel :  Place CEC       Candidature
    
  • Structuration des données d’Entrée (FLE)

                 ┌               ┌
                 │               │ CEC_N_CEC 
                 │ EDDEDD FLE <  PLACE (P’)   <  CEC_CTS              
                 │               │
                 │               │ CEC_PLACE
                 └               └
         Niveau :  Niveau 1        Niveau 2
    Référentiel :  Place CEC       Candidature
    
  • Structuration du Programme (PROG)

                 ┌
                 │ D-PRG
                 │
            PRG <  T-PLACE (P')
                 │
                 │ F-PRG
                 └
    
         Niveau :  Niveau 1
    Référentiel :  Place CEC
    
  • Algorigramme

              ┌─────────────┐
          010 │    D-PRG    │
              └──────┬──────┘
                     ├─────────┐
              ┌──────┴──────┐  │
          020 │  T-PLACE    │  │
              └──────┬──────┘  │
                     ◊─────────┘
              ┌──────┴──────┐
          030 │    F-PRG    │
              └─────────────┘
    
  • Structuration in extenso du Programme

    Les candidatures supprimées n’apparaissent pas bien sûr dans le FLE. La structuration du programme prenant en compte les places libres générées par la suppression possible de certaines candidatures ne peut se réaliser que par la réflexion, tout comme la détermination du numéro de post_it. Symboliser cette réflexion sous forme d’un diagramme avec des accolades peut s’avérer très vite compliqué.

    Traduction d’un début de cette réflexion sous forme d’un diagramme avec des accolades :
                 ┌               ┌                   ┌                ┌
                 │ D-PRG         │ D-PLACE           │ D-PLACE LIBRE  │ D-PAGE
                 │               │                   │ PLACE (0,1)    │ T-PAGE (0,1)
                 │               │ PLACE LIBRE (PL) <  PAGE  (0,1)   <              
                 │               │                   │                │ T-PAGE (0,1)
                 │               │                   │ F-PLACE LIBRE  │ F-PAGE
            PRG <  PLACE (P’)   <  INTER             └                └
                 │               │ 
                 │               │ T-PAGE (0,1)
                 │               │ T-PAGE (0,1)
                 │               │
                 │ F-PRG         │ F-PLACE
                 └               └
    
         Niveau :  Niveau 1        Niveau 2            Niveau 3         Niveau 4
    Référentiel :  Place CEC       Place Référente     Place libre      Page
    
  • Algorigramme détaillé au niveau de l’instruction

    Lorsque la Logique de Construction de Programme est acquise, les structurations et le logigramme restent à l’état de construction mentale quasi inconsciente. Le programme post_itBDD n’utilise qu'une vingtaine d'instructions, gère deux tables (page et pile) et 3 variables (v_post_it, v_place, v_reste).

    Si le programme a été écrit le 10/03/1992, soit il y a près de 30 ans, son logigramme a été réalisé le 26/06/2019 pour créer un billet de blog, soit 27 ans plus tard. Dans un souci pédagogique plus rigoureux, les structurations FLS, FLE et PRG ont quant à elles été réalisées encore plus récemment en juillet 2021, suite à la découverte sur internet d’un ancien support de cours LCP qui se transforme progressivement en tutoriel : Logique de Construction des Programmes

  • Les traitements :

    • PLACE : Le traitement « PLACE » correspond au « CANDIDAT ». Un numéro de place a été affecté aux candidats lors du placement par ordre alphabétique avant l’envoi des convocations.

    • PLACE LIBRE : Le traitement « PLACE_LIBRE » est en fait le traitement d’un numéro de place référent qui palie les éventuelles candidatures supprimées.

    • PAGE : Lorsque la dernière place ne correspond pas à un multiple de 4, le nombre de pages n’est pas le même selon la pile.

    • PILE : C’est le nombre de pages qui détermine le changement de pile.



§ 06 : Billets LCP

Pour en savoir davantage sur LCP, vous trouverez trois billets dans mon blog dont le billet Méthodologie de programmation LCP qui m'a permis d'alimenter cette discussion. Ce billet est une ébauche de tutoriel LCP en cours de rédaction.

Adepte LCP, j’expose dans ce billet mon expérience de la méthode en respectant au mieux la pédagogie originelle. Certains aspects de cette pédagogie qui se réfèrent à des supports de cours des années 70 peuvent décourager le lecteur. Il suffit de les survoler ou de passer outre en utilisant la navigation internet « Rechercher dans la page ».

Les 3 billets consacrés à LCP :




Fin de mon devoir de vacances
1  0 
Avatar de mach1974
Membre averti https://www.developpez.com
Le 20/07/2021 à 16:39
Il faut une table pour l' historique des noms des candidats qui ont déjà candidaté et à chaque nouvelle inscription parcourir cette liste et optimiser avec un tri à fusion pour optimiser la complexité
0  0 
Avatar de APL-AML
Membre éclairé https://www.developpez.com
Le 20/07/2021 à 23:16
Citation Envoyé par mach1974 Voir le message
Il faut une table pour l' historique des noms des candidats qui ont déjà candidaté et à chaque nouvelle inscription parcourir cette liste et optimiser avec un tri à fusion pour optimiser la complexité.
Le placement des candidats se réalise au dernier moment avant l’édition et l’envoi des convocations.

Les candidatures postérieures à la date limite d’inscription ne sont pas prises en compte (hors délais) mais une candidature émise avant la date limite d’inscription peut toujours être reçue accidentellement après le placement. L’application gère cette situation mais ce n’est pas le problème présentement. Pour être exhaustif, il y a également le cas des candidats dits COTOREP. Des places particulières doivent alors être attribuées à ces candidats si leur handicap nécessite un aménagement particulier. On leur attribue un numéro de place au-delà du nombre d’inscrits. Mais c’est vraiment pour l’anecdote.

Dans la BDD, il n’y a qu’une seule table des candidatures.

Le sujet que j’ai proposé est simple dans son énoncé :

Il y a une table des candidatures et une place est attribuée à chaque candidature suite à un placement par ordre alphabétique, rien de plus. Le problème consiste donc à partir des numéros de place à déterminer de nouveaux numéros de façon à ce que les candidatures triées sur ce nouveau numéro permettent d’imprimer les numéros de place en piles (4 numéros de place par page), sachant toutefois que certaines candidatures ont pu être supprimées après le placement suite à des désistements.
L’édition des numéros de table est réalisée au dernier moment, la veille ou l’avant-veille des épreuves. Entre la date d’édition des convocations et la date d’édition des numéros de tables, il peut se passer bien des événements qui peuvent venir perturber le bel ordre initial.

Pour en dire un peu plus sur le sujet, j’ai nommé « post_it », le nouveau numéro dans la table des candidatures. Vous en saurez davantage un peu plus tard.

Pour l’instant, le problème consiste à partir de la table des candidatures triée sur le numéro de table à générer un ficher avec :

  • l’identifiant de la candidature
  • le numéro de place
  • le numéro de post_it

Ce fichier sera traité par une requête SQL pour renseigner l’attribut post_it dans la table des candidatures.

Le nombre d’inscrits, ou plutôt la dernière place attribuée pour le concours est renseignée dans la table des concours.

Mes deux tables sont nommées :

  • ec pour examens-concours avec l’attribut :
    ec.place (dernier numéro de place)

  • cec pour candidatures examens-concours avec les attributs :
    cec.n_cec (numéro de candidature)
    cec.place (numéro de place)
    cec.post_it (numéro de post_it)

Je vous fais grâce de la description complète de ces deux tables, inutile pour résoudre l’algorithme de création des nouveaux numéros.

Chacun était libre de créer ses propres noms de tables et d’attributs pour créer son algorithme, soit sous forme d’algorigramme, soit sous forme de pseudocode, ou même encore de codage dans un langage de son choix.

J’ai proposé ce sujet car je pense que c’est un excellent exercice de réflexion bien que ce ne soit pas l’avis du membre qui m’a attribué un vote négatif.

La réflexion doit prendre en compte quatre informations :

  • Numéro de place,
  • Numéro de post_it,
  • Numéro de pile,
  • Numéro de page



Citation Envoyé par anapurna Voir le message
en fait il ne faut pas supprimer l’étudiant dans la table des Candidatures mais le marquer comme valide ou non.
Il te suffit de placer que les étudiants VALIDES.
Une suppression logique génère des complications dans la conception de tous les écrans, de tous les états et nécessiterait un traitement d'épuration au final.

La fonctionnalité Numéros de table n'implique que 2 programmes et deux écrans.

Lorsque le placement est réalisé, toutes les candidatures sont valides. Les désistements éventuels interviennent entre la date à laquelle s'est fait le placement et la date à laquelle sont éditées les numéros de table. Les places libres font l'objet d'un numéro de table "Place libre" de façon à ne pas perturber le chef de salle et les surveillants qui préparent les salles.



L'algorithme à réaliser a plusieurs intérêts :

  • Trouver la formule pour déduire le nouveau numéro
  • Gérer un nombre total de places qui ne soit pas un multiple de 4
  • Gérer les places libres

Mais je vous en dis bien trop. Mon anecdote à l’origine de cette aventure aurait dû suffire à faire bouillir votre imagination et votre réflexion.

Il y avait trois ingrédients essentiels :

  • des candidatures placées par ordre alphabétique,
  • des désistements possibles,
  • et idée farfelue : imprimer des numéros de table en piles.

À partir de là, c’est rien que du bonheur, une passion, le job du développeur… Quoi !

Merci aux 6 votes positifs qui ont compris l’intérêt de ce petit sujet d’algorithmie à la simplicité trompeuse.

Si vous souhaitez mon corrigé tout de suite, vous dites.


0  0 
Avatar de anapurna
Expert confirmé https://www.developpez.com
Le 21/07/2021 à 10:51
salut

donc on a un peu plus d'info

c'est donc cec.post_it a déterminé et c'est lui qui défini la place final attribué

nous savons qu'il faut jouer avec les modulo pour connaitre la page
comme nous avons 4 concourant par page il nous faut donc 16 element pour remplir 1 page complètement
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
 
   0 modulo 4 = 0 => Numero de page 
   1 modulo 4 = 1 => Numero de page 
   2 modulo 4 = 2 => Numero de page 
   3 modulo 4 = 3 => Numero de page 
   ... 
   12 modulo 4 = 0 => Numero de page 
   13 modulo 4 = 1 => Numero de page 
   14 modulo 4 = 2 => Numero de page 
   15 modulo 4 = 3 => Numero de page
pour connaitre la position de celui-ci dans la page il suffit faire un division entière
Code : Sélectionner tout
1
2
3
4
5
 
   0   DIV 4 = 0 => Position dans la page
   4   DIV 4 = 1 => Position dans la page 
   8   DIV 4 = 2 => Position dans la page 
   12 DIV 4 = 3 => Position dans la page
j'aurais pu prendre la deuxieme page
Code : Sélectionner tout
1
2
3
4
5
 
   1   DIV 4 = 0 => Position dans la page
   5   DIV 4 = 1 => Position dans la page 
   9   DIV 4 = 2 => Position dans la page 
   13 DIV 4 = 3 => Position dans la page
le principe reste le même

compte tenu de ses element il est assez facile d'imprimer nos pages

PS : après réflexion => pour ta résolution de place libre c'est assez simple il suffit de décaler les suivants après la place libre
vu que les concurrents sont classés par ordre alphabétique cela revient a une translation d'indice comme pour un tableau
0  0 
Avatar de APL-AML
Membre éclairé https://www.developpez.com
Le 21/07/2021 à 14:26
Citation Envoyé par anapurna Voir le message
Donc on a un peu plus d'info

C'est donc cec.post_it à déterminer et c'est lui qui défini la place finale attribuée.
Comme je l’ai dit, chacun était libre de faire à sa guise. Il fallait prendre ce sujet comme un sujet de DST, se mettre dans ma situation, partir de presque rien (trois éléments) et proposer une solution, créer des attributs si nécessaire en l’occurrence : le numéro de place maximum dans la table des examens-concours (ec.place pour moi) et un nouveau numéro dans la table des candidatures (cec.post_it pour moi) ; puis réaliser l’algorithme (le programme) permettant d’associer à une place, un nouveau numéro afin de permettre au programme d’édition d’imprimer les numéros de place, 4 par page et en piles. Ce nouveau numéro (cec.post_it pour moi) ne définit pas de place finale attribuée. Le placement des candidats a eu lieu, les candidats vont recevoir leur convocation avec leur numéro de place qu’ils trouveront facilement dans la salle où ils sont convoqués.

Mais je parle, je parle et le prochain concours a lieu dans huit jours… Vous serez prêts ? Il y a encore le programme d’édition à développer…

Citation Envoyé par anapurna Voir le message
Nous savons qu'il faut jouer avec les modulos pour connaitre la page…
Je ne sais pas trop où tu vas avec tes modulos. Mais il n’y a pas forcément qu’une seule solution.

Je vous propose la deuxième partie de ma simulation (pas la plus capitale, je fais durer le plaisir) mais on voit bien que la première page imprimera les numéros de place 1, 7, 13 et 18, etc.

Tout le problème, c’est comment arriver à ça.

Pour un concours avec 22 candidatures (sans places libres mais non multiple de 4), la liste des candidatures triées sur le nouveau numéro (post_it) doit ressembler à ça :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
              TRI / NUMÉRO DE POST-IT
          ┌───────┬───────┬───────┬───────┐
          │ Place │Post-it│ Pile  │ Page  │
          ├───────┼───────┼───────┼───────┤
          │     1 │     1 │     1 │    1  │
          ├───────┼───────┼───────┼───────┤
          │     7 │     2 │     2 │    1  │
          ├───────┼───────┼───────┼───────┤
          │    13 │     3 │     3 │    1  │
          ├───────┼───────┼───────┼───────┤
          │    18 │     4 │     4 │    1  │
          ├───────┼───────┼───────┼───────┤
          │     2 │     5 │     1 │    2  │
          ├───────┼───────┼───────┼───────┤
          │     8 │     6 │     2 │    2  │
          ├───────┼───────┼───────┼───────┤
          │    14 │     7 │     3 │    2  │
          ├───────┼───────┼───────┼───────┤
          │    19 │     8 │     4 │    2  │
          ├───────┼───────┼───────┼───────┤
          │     3 │     9 │     1 │    3  │
          ├───────┼───────┼───────┼───────┤
          │     9 │    10 │     2 │    3  │
          ├───────┼───────┼───────┼───────┤
          │    15 │    11 │     3 │    3  │
          ├───────┼───────┼───────┼───────┤
          │    20 │    12 │     4 │    3  │
          ├───────┼───────┼───────┼───────┤
          │     4 │    13 │     1 │    4  │
          ├───────┼───────┼───────┼───────┤
          │    10 │    14 │     2 │    4  │
          ├───────┼───────┼───────┼───────┤
          │    16 │    15 │     3 │    4  │
          ├───────┼───────┼───────┼───────┤
          │    21 │    16 │     4 │    4  │
          ├───────┼───────┼───────┼───────┤
          │     5 │    17 │     1 │    5  │
          ├───────┼───────┼───────┼───────┤
          │    11 │    18 │     2 │    5  │
          ├───────┼───────┼───────┼───────┤
          │    17 │    19 │     3 │    5  │
          ├───────┼───────┼───────┼───────┤
          │    22 │    20 │     4 │    5  │
          ├───────┼───────┼───────┼───────┤
          │     6 │    21 │     1 │    6  │
          ├───────┼───────┼───────┼───────┤
          │    12 │    22 │     2 │    6  │
          └───────┴───────┴───────┴───────┘
Là, je vous ai déjà bien aidé. Moralité : commencer par une simulation.

Il y a encore du chemin à faire dans la réflexion pour arriver à l'algorithme complet. Tant pis, les gestionnaires continueront à faire leurs numéros de table à la mimine !

… C’est ce que me disaient les gestionnaires qui me voyaient trimer 15 heures par jours pour résoudre leurs problèmes :

- Vous savez, nous pouvons faire à la main, nous le faisions bien avant que vous vous intéressiez à nous.

- PAS QUESTION ! Demain matin vous trouverez vos résultats sur le coin de votre bureau.
0  0 
Avatar de anapurna
Expert confirmé https://www.developpez.com
Le 21/07/2021 à 16:47
salut

le modulo c'est le reste de la division dans notre cas le diviseur c'est 4
si tu applique le modulo tels quel tu as un soucis d'indice pour palier a cela
tu applique un décalage de rang de 1
donc 1 mod 4 = 1 => ((1-1) mod 4)+1 = 1
2 mod 4 = 2 => ((2-1) mod 4)+1 = 2
3 mod 4 = 2 => ((2-1) mod 4)+1 = 3
4 mod 4 = 0 => ((4-1) mod 4)+1 = 4 // le décalage de rang ne sert que si le reste est égale a zéro
5 mod 4 = 1 => ((5-1) mod 4)+1 = 1
....
20 mod 4 = 0 => ((20-1) mod 4)+1 = 4
21 mod 4 = 1 => ((21-1) mod 4)+1 = 1
22 mod 4 = 2 => ((22-1) mod 4)+1 = 2

c'est très pratique pour trouver les coordonné dans un tableau
le plus compliqué et le moins compréhensible pour moi c'est ton passage
de Place a Post_it pour les piles et les Pages le reste de la division(modulo) et le quotient(Division entière) suffit a retrouver tes éléments

sous Excel les formule correspondant sont MODULO et QUOTIENT
Pile = MODULO($post_It-1;4) +1
page = QUOTIENT($post_It-1;4) +1

fait un essai sous Excel tu verra que cela fonctionne parfaitement tu récupère les piles et les pages en fonction de ton post_it
0  0 
Avatar de APL-AML
Membre éclairé https://www.developpez.com
Le 21/07/2021 à 23:05
Citation Envoyé par anapurna Voir le message
Le plus compliqué et le moins compréhensible pour moi c'est ton passage de Place à Post_it.
C’est précisément ce qu’il faut élucider Et pas besoin d’Exel pour ça, juste une addition et une multiplication.

Citation Envoyé par anapurna Voir le message
Pour les piles et les Pages le reste de la division(modulo) et le quotient(Division entière) suffit à retrouver tes éléments.
Mais ce n’est pas ce que l’on cherche et il faut d’abord connaitre l’information post_it. Les colonnes Pile et Page de mon extrait de simulation ne sont là que pour mieux visualiser l’évolution de chaque couple Place-Post_it. Ces informations Pile et Page n’existent pas dans la BDD (table cec des candidatures).

Le programme d’édition ne s’intéressera qu’aux informations :

  • post_it pour ce qui est du tri des candidatures et du traitement des places libres,
  • place pour ce qui est de l’édition proprement dite,
  • Et bien sûr aux informations à imprimer sur chaque numéro de table.

Places libres

Je n’ai pas concrétisé de place libre dans ma simulation mais c’est facile à faire. Il suffit par exemple de désister le candidat placé en 13. Il faut alors supprimer la place 13 et le post_it 3. On garde les informations Pile (3) et Page (1) pour visualiser notre simulation.

Le programme d’édition va s’apercevoir qu’il manque le post_it 3 et imprimera un numéro de table 13 avec « Place libre » comme nom-prénom.

Ça vaut un sudoku force maxi mon histoire d’impression de numéros de table en piles. Non ?
0  0 
Avatar de anapurna
Expert confirmé https://www.developpez.com
Le 22/07/2021 à 9:05
salut ,

c'est pas très claire.
reprenons afin de comprendre correctement votre demande.

1°) un personne s'inscrit a un concourt (cec.n_cec)
2°) a la clôtures des candidature on affecte un numéro de place (cec.place) ordre par trie alphabetique
3°) a la mises en place du concours un affecte un nouveau numero de place - les doublon abandonnée cec.post_it

pour moi il n'y a rien de complique
n_cec place post_it Cmt
80 1 1
2 2 2
18 3 -1 // abandon pour un autre concours
4 4 3
25 5 4
122 6 -2 // abandon pour un autre concours
48 7 5
.....
place et post-it étant trié dans le même ordre il suffit simplement d'enlever les décrément
a l'Edition il te suffit de prendre les post_it positif ... une fois cette ordre trouvé
tu utilise les formule précité pour connaitre la pile et la page
0  0 
Avatar de APL-AML
Membre éclairé https://www.developpez.com
Le 22/07/2021 à 15:05
Citation Envoyé par anapurna Voir le message
Ce n'est pas très clair. Reprenons afin de comprendre correctement votre demande.
Ce n’est pas une demande. Il s’agit d’une idée loufoque pour résoudre une fonctionnalité insolite que je voulais partager. Au départ, mais je me répète, j’avais trois éléments :

  • Des candidatures placées par ordre alphabétique,
  • Des désistements possibles,
  • L’idée saugrenue d’imprimer les numéros de table en piles.

Et c’est tout ! À partir de là, c’est à moi de prendre les initiatives pour développer la fonctionnalité.

En proposant ce sujet d’algorithmie, il s’agit donc pour ceux que cela intéresse de se mettre en situation, de s’approprier la problématique et de prendre les initiatives qui s’imposent. Pour cela, il est évident que le programme d’édition doit lire la table des candidatures dans un ordre qui lui permette d’imprimer en piles. Le sujet consiste donc à concevoir l’algorithme ad ’oc. Il n’est pas question pour l’instant du programme d’édition… C’est une autre histoire.

Tu sembles attendre des consignes, un cahier des charges peut-être ? Un MCD ? Un MCT ? Il ne s’agit pas d’appliquer une recette mais de concevoir. Le sujet ne fait appel qu’à ton imagination et à ta réflexion. Mais peut-être ne suis-je pas un très bon pédagogue ?

Citation Envoyé par anapurna Voir le message
3°) À la mise en place du concours, on affecte un nouveau numéro de place - les doublons abandonnés cec.post_it.
Pas du tout. Tu interprètes mes propos. Il ne s’agit surement pas d’affecter un nouveau numéro aux candidats. Tu imagines… On les convoque dans une salle d’examen à la place indiquée sur leur convocation et entre temps on change leur place sans qu’ils le sachent. Certains concours comptent près de 5.000 candidats et sont convoqués dans 5 centres d’examens répartis dans 4 départements. Ce serait un fichu foutoir !

J’ai proposé une simulation de ce que les numéros de post_it doivent être par rapport aux numéros de place. Pourquoi inventer un numéro de post_it équivalent au numéro de place dont on ne peut rien en tirer.

Il n’y a pas de doublons abandonnés. Tu interprètes encore. Les éventuels désistements sont purement et simplement supprimés de la table des candidatures.

Le tri par ordre alphabétique des candidatures facilite tout simplement la gestion. Chaque gestionnaire a en charge une plage de candidatures. Pour les corrections par les membres du jury, il y a plusieurs façons d’attribuer un numéro d’anonymat. L’une des façons consiste tout simplement à couper en deux l’ensemble des candidatures et à mettre la première partie derrière la deuxième partie. Il n’y a que la personne responsable des concours qui sait où a été faite la césure… et le DBA, c’est-à-dire moi ! Il est impossible aux membres du jury de se fier à l’ordre des copies pour espérer en reconnaitre une.

… Mais je déborde du sujet !

Citation Envoyé par anapurna Voir le message
place et post-it étant triés dans le même ordre il suffit simplement d'enlever les décréments
à l'édition il te suffit de prendre les post_it positifs... une fois cet ordre trouvé, tu utilises les formules précitées pour connaitre la pile et la page.
Mais que nenni ! « post_it » est un nouveau numéro dont l’objectif est de fournir au programme d’impression les numéros de table dans un ordre qui lui permette d’imprimer en piles. Il n’a rien à voir avec le numéro de place.

Que ferait-on de tes numéros de post_it ?

Tu sembles te focaliser sur pile et page qui n’existent pas dans la BDD. pile et page ne constituent pas une fin en soi. Leur intérêt est d’intervenir dans une opération permettant d’obtenir le numéro de post_it.

La question est : quelle est cette opération ?

Je vous propose ma simulation complète qui devrait vous permettre de poser cette opération.

La réflexion consiste à s’intéresser aux lignes avec le même numéro de page pour comprendre comment évolue le numéro de post-it par rapport au numéro de place.

Chacun est libre d'afficher ou non ma simulation pour en savoir plus tout de suite ou poursuivre sa réflexion sans aide.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
ec_place = Plus grand numéro de place = nombre de candidats = 22 (pour ce jeu d’essai)

Numéro de post-it = Numéro de la pile + (Numéro de la page précédente * 4)
                  => initialiser le numéro de page à zéro

               TRI / NUMÉRO DE PLACE                     TRI / NUMÉRO DE POST-IT
          ┌───────┬───────┬───────┬───────┐          ┌───────┬───────┬───────┬───────┐
          │ Place │Post-it│ Pile  │ Page  │          │ Place │Post-it│ Pile  │ Page  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     1 │     1 │     1 │    1  │          │     1 │     1 │     1 │    1  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     2 │     5 │     1 │    2  │          │     7 │     2 │     2 │    1  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     3 │     9 │     1 │    3  │          │    13 │     3 │     3 │    1  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     4 │    13 │     1 │    4  │          │    18 │     4 │     4 │    1  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     5 │    17 │     1 │    5  │          │     2 │     5 │     1 │    2  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     6 │    21 │     1 │    6  │          │     8 │     6 │     2 │    2  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     7 │     2 │     2 │    1  │          │    14 │     7 │     3 │    2  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     8 │     6 │     2 │    2  │          │    19 │     8 │     4 │    2  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │     9 │    10 │     2 │    3  │          │     3 │     9 │     1 │    3  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    10 │    14 │     2 │    4  │          │     9 │    10 │     2 │    3  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    11 │    18 │     2 │    5  │          │    15 │    11 │     3 │    3  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    12 │    22 │     2 │    6  │          │    20 │    12 │     4 │    3  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    13 │     3 │     3 │    1  │          │     4 │    13 │     1 │    4  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    14 │     7 │     3 │    2  │          │    10 │    14 │     2 │    4  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    15 │    11 │     3 │    3  │          │    16 │    15 │     3 │    4  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    16 │    15 │     3 │    4  │          │    21 │    16 │     4 │    4  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    17 │    19 │     3 │    5  │          │     5 │    17 │     1 │    5  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    18 │     4 │     4 │    1  │          │    11 │    18 │     2 │    5  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    19 │     8 │     4 │    2  │          │    17 │    19 │     3 │    5  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    20 │    12 │     4 │    3  │          │    22 │    20 │     4 │    5  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    21 │    16 │     4 │    4  │          │     6 │    21 │     1 │    6  │
          ├───────┼───────┼───────┼───────┤          ├───────┼───────┼───────┼───────┤
          │    22 │    20 │     4 │    5  │          │    12 │    22 │     2 │    6  │
          └───────┴───────┴───────┴───────┘          └───────┴───────┴───────┴───────┘

L’opération posée, l’affaire n’est pas pliée pour autant… Mais chaque chose en son temps.

La prochaine étape, c’est l’algorigramme avec encore de la réflexion pour résoudre le cas d’un dernier numéro de place qui ne serait pas un multiple de 4 et bien sûr le cas des places libres suite à des désistements de candidats. Il me parait pertinent d’expliquer ces situations devant un algorigramme.
0  0