5_3_conseils

Upload: amiri1988

Post on 25-Feb-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 5_3_conseils

    1/56

    Conseils pour crire du code

  • 7/25/2019 5_3_conseils

    2/56

    Problme rsoudre

    Soit un tableau T:

    int T[NB];

    crire le code qui dcale les lments de T, tel que:

    l'lment l'indice ise retrouve l'indice i-1,

    le premier lment du tableau se retrouve la dernire place.

    Par exemple:

    Si le tableau contenait les valeurs: 0 1 2 3 4 (avec NB= 5),

    il contiendra 1 2 3 4 0 aprs le dcalage.

  • 7/25/2019 5_3_conseils

    3/56

    1. Faire un schma;

    2. Dcomposer le problme en problmes plus simples;

    3. Rflchir sur un exemple, sans penser aux boucles ou

    aux conditions;

    4. Gnraliser, en crivant cette fois les boucles et lesconditions;

    5. Vrifier le programme sur un exemple.

  • 7/25/2019 5_3_conseils

    4/56

    Schma

    Soit un tableau T:

    int T[NB];

    crire le code qui dcale les lments de T, tel que:

    l'lment l'indice ise retrouve l'indice i-1,

    le premier lment du tableau se retrouve la dernire place.

    Par exemple, si le tableau contenait les valeurs: 1 2 3 4 5 (avec NB = 5), il contiendra2 3 4 5 1 aprs ce dcalage.

    T:

  • 7/25/2019 5_3_conseils

    5/56

    Dcomposer le problme

    Il faut:

    1. dcaler les lments 0, 1, ... vers la gauche;

    2. grer correctement l'lment d'indice 0.

    T:1

    2

  • 7/25/2019 5_3_conseils

    6/56

    Dcaler les lments 0, 1, ... vers la gaucheRaisonner sur un exemple

    Dans le cas d'un tableau 5 lments (NB = 5), il faut:

    copier T[1]dans T[0],

    T[2]dans T[1]...

    jusque T[4]dans T[3]:

    T[0] = T[1];T[1] = T[2];

    T[2] = T[3];

    T[3] = T[4];

    0 1 2 3 4

    T:

  • 7/25/2019 5_3_conseils

    7/56

    Dcaler les lments 0, 1, ... vers la gaucheGnraliser (1)

    0 1 2 3 4

    T:

    Gnralisons un tableau NB lments (au lieu de 5):"T[3]= T[4];"devient

    T[NB-2]= T[NB-1];

    T[0] = T[1];

    T[1] = T[2];

    ...T[NB-2] = T[NB-1];

  • 7/25/2019 5_3_conseils

    8/56

    Dcaler les lments 0, 1, ... vers la gaucheGnraliser (2)

    0 1 2 3 4

    T:

    Remplaons:T[0] = T[1];

    T[1] = T[2];

    ...

    T[NB-2] = T[NB-1];

    par une boucle for:for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    Une autre possibilit est:for(int i(1); i < NB; ++i) {

    T[i-1] = T[i];

    }

  • 7/25/2019 5_3_conseils

    9/56

    Grer correctement l'lment d'indice 0

    Une premire solution est de faire (pour un tableau 5 lments):

    T[4] = T[0];

    ce qui se gnralise pour un tableau NBlments en:

    T[NB-1] = T[0];

    T:

    2

  • 7/25/2019 5_3_conseils

    10/56

    Premire solution

    T[NB-1] = T[0];

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    T:

  • 7/25/2019 5_3_conseils

    11/56

    Vrifier le code sur un exemple

    T[NB-1] = T[0];

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    0 1 2 3 4T:

    NB

    5

  • 7/25/2019 5_3_conseils

    12/56

    Vrifier le code sur un exemple

    T[NB-1] = T[0];

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    0 1 2 3 4T:

    NB

    5

  • 7/25/2019 5_3_conseils

    13/56

    Vrifier le code sur un exemple

    T[NB-1] = T[0];

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    0 1 2 3 0T:

    NB

    5

  • 7/25/2019 5_3_conseils

    14/56

    Vrifier le code sur un exemple

    T[NB-1] = T[0];

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    0 1 2 3 0T:

    NB

    5

    i

    0

  • 7/25/2019 5_3_conseils

    15/56

    Vrifier le code sur un exemple

    T[NB-1] = T[0];

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    1 1 2 3 0T:

    NB

    5

    i

    0

  • 7/25/2019 5_3_conseils

    16/56

    Vrifier le code sur un exemple

    T[NB-1] = T[0];

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    1 2 2 3 0T:

    NB

    5

    i

    1

  • 7/25/2019 5_3_conseils

    17/56

    Vrifier le code sur un exemple

    T[NB-1] = T[0];

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    1 2 3 3 0T:

    NB

    5

    i

    2

  • 7/25/2019 5_3_conseils

    18/56

    Vrifier le code sur un exemple

    T[NB-1] = T[0];

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    1 2 3 0 0T:

    NB

    5

    i

    3

  • 7/25/2019 5_3_conseils

    19/56

    !

    alors qu'on voulait:

    1 2 3 0 0T:

    1 2 3 4 0

  • 7/25/2019 5_3_conseils

    20/56

    Que s'est-il pass ?

    L'instruction:

    T[NB-1] = T[0];

    a effac le 4 avant que la boucle puisse le copier l'indice 3.

    Comment corriger le code ?

    T[NB-1] = T[0];

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    1 2 3 0 0T:

  • 7/25/2019 5_3_conseils

    21/56

    Solution

    Il faut:

    1.sauvegarder la valeur de T[0]dans une variable intermdiaire;

    2.on peut maintenant dcaler les lments avec la boucle for;

    3.recopier la valeur sauvegarde de T[0]dans T[NB-1].

    T:

    1

    2

    3

    temp

  • 7/25/2019 5_3_conseils

    22/56

    Solution

    Il faut:

    1.sauvegarder la valeur de T[0]dans une variable intermdiaire:int temp(T[0]);

    2.on peut maintenant dcaler les lments avec la boucle for:

    for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    3.recopier la valeur sauvegarde (dans temp) de T[0]dans T[NB-1]:

    T[NB-1] = temp;

    T:

    1

    2

    3

    temp

  • 7/25/2019 5_3_conseils

    23/56

    Vrifier le code sur un exemple

    int temp(T[0]);for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    T[NB-1] = temp;

    0 1 2 3 4T:

    NB

    5

  • 7/25/2019 5_3_conseils

    24/56

    Vrifier le code sur un exemple

    int temp(T[0]);for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    T[NB-1] = temp;

    0 1 2 3 4T:

    NB

    5

    temp

    0

  • 7/25/2019 5_3_conseils

    25/56

    Vrifier le code sur un exemple

    int temp(T[0]);for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    T[NB-1] = temp;

    0 1 2 3 4T:

    NB

    5

    temp

    0

    i

    0

  • 7/25/2019 5_3_conseils

    26/56

    Vrifier le code sur un exemple

    int temp(T[0]);for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    T[NB-1] = temp;

    1 1 2 3 4T:

    NB

    5

    temp

    0

    i

    0

  • 7/25/2019 5_3_conseils

    27/56

    Vrifier le code sur un exemple

    int temp(T[0]);for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    T[NB-1] = temp;

    1 2 3 3 4T:

    NB

    5

    temp

    0

    i

    3

  • 7/25/2019 5_3_conseils

    28/56

    Vrifier le code sur un exemple

    int temp(T[0]);for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    T[NB-1] = temp;

    1 2 3 4 4T:

    NB

    5

    temp

    0

    i

    3

  • 7/25/2019 5_3_conseils

    29/56

    Vrifier le code sur un exemple

    int temp(T[0]);for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    T[NB-1] = temp;

    1 2 3 4 4T:

    NB

    5

    temp

    0

  • 7/25/2019 5_3_conseils

    30/56

    Vrifier le code sur un exemple

    int temp(T[0]);for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    T[NB-1] = temp;

    1 2 3 4 0T:

    NB

    5

    temp

    0

  • 7/25/2019 5_3_conseils

    31/56

    Vrifier le code sur un exemple

    int temp(T[0]);for(int i(0); i < NB-1; ++i) {

    T[i] = T[i+1];

    }

    T[NB-1] = temp;

    1 2 3 4 0T:

    NB

    5

    temp

    0

  • 7/25/2019 5_3_conseils

    32/56

    Exercices

    1. Dcalage dans l'autre sens:0 1 2 3 4 devient 4 0 1 2 3.

    2. crire le code qui inverse les lments du tableau:

    0 1 2 3 4 devient 4 3 2 1 0

  • 7/25/2019 5_3_conseils

    33/56

    Dcalage vers la droitecrire le code qui dcale les lments de Tvers la droite:

    En adaptant le programme prcdent:

    int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {

    T[i+1] = T[i];

    }

    T[0] = temp;

    T:

  • 7/25/2019 5_3_conseils

    34/56

    Vrifier le code sur un exemple

    int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {

    T[i+1] = T[i];

    }

    T[0] = temp;

    0 1 2 3 4T:

    NB

    5

  • 7/25/2019 5_3_conseils

    35/56

    Vrifier le code sur un exemple

    int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {

    T[i+1] = T[i];

    }

    T[0] = temp;

    0 1 2 3 4T:

    NB

    5temp

    4

  • 7/25/2019 5_3_conseils

    36/56

    Vrifier le code sur un exemple

    int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {

    T[i+1] = T[i];

    }

    T[0] = temp;

    0 1 2 3 4T:

    NB

    5temp

    4 i

    0

  • 7/25/2019 5_3_conseils

    37/56

    Vrifier le code sur un exemple

    int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {

    T[i+1] = T[i];

    }

    T[0] = temp;

    0 0 2 3 4T:

    NB

    5temp

    4 i

    0

  • 7/25/2019 5_3_conseils

    38/56

    Vrifier le code sur un exemple

    int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {

    T[i+1] = T[i];

    }

    T[0] = temp;

    0 0 2 3 4T:

    NB

    5temp

    4 i

    1

  • 7/25/2019 5_3_conseils

    39/56

    Vrifier le code sur un exemple

    int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {

    T[i+1] = T[i];

    }

    T[0] = temp;

    0 0 0 3 4T:

    NB

    5temp

    4 i

    1

  • 7/25/2019 5_3_conseils

    40/56

    Vrifier le code sur un exemple

    int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {

    T[i+1] = T[i];

    }

    T[0] = temp;

    0 0 0 0 0T:

    NB

    5temp

    4

  • 7/25/2019 5_3_conseils

    41/56

  • 7/25/2019 5_3_conseils

    42/56

    Vrifier le code sur un exemple

    Au lieu de4 0 0 0 0

    T:

    4 0 1 2 3

  • 7/25/2019 5_3_conseils

    43/56

    Dcalage vers la droite

    Nouvelle tentative:

    int temp(T[NB-1]);

    for(int i(NB 1); i > 0; --i) {T[i] = T[i-1];

    }

    T[0] = temp;

    Vrifiez sur l'exemple que cette version est correcte !

    temp

    T:

  • 7/25/2019 5_3_conseils

    44/56

    Inverser les lments du tableau

    On peut procder en changeant les lments de T2 par 2:

    On change le premier lment avec le dernier, le deuxime avec l'avant

    dernier, etc...

    T:

  • 7/25/2019 5_3_conseils

    45/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    On change le premier lment avec le dernier, le deuxime avec l'avant

    dernier, etc...Pour un tableau de 5 lments:

    T[0] = T[4];

    T[4] = T[0];

    T[1] = T[3];

    T[3] = T[1];

    T:

  • 7/25/2019 5_3_conseils

    46/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    On change le premier lment avec le dernier, le deuxime avec l'avant

    dernier, etc...Pour un tableau de 5 lments:

    temp = T[0];

    T[0] = T[4];

    T[4] = temp;

    temp = T[1];

    T[1] = T[3];

    T[3] = temp;

    T:

  • 7/25/2019 5_3_conseils

    47/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    On change le premier lment avec le dernier, le deuxime avec l'avant

    dernier, etc...Pour un tableau de NBlments:

    temp = T[0];

    T[0] = T[4];

    T[4] = temp;

    temp = T[1];

    T[1] = T[3];

    T[3] = temp;

    T:

  • 7/25/2019 5_3_conseils

    48/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    On change le premier lment avec le dernier, le deuxime avec l'avant

    dernier, etc...Pour un tableau de NBlments:

    temp = T[0];

    T[0] = T[NB-1];

    T[NB-1] = temp;

    temp = T[1];

    T[1] = T[3];

    T[3] = temp;

    T:

  • 7/25/2019 5_3_conseils

    49/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    On change le premier lment avec le dernier, le deuxime avec l'avant

    dernier, etc...Pour un tableau de NBlments:

    temp = T[0];

    T[0] = T[NB-1];

    T[NB-1] = temp;

    temp = T[1];

    T[1] = T[NB-2];

    T[NB-2] = temp;

    T:

  • 7/25/2019 5_3_conseils

    50/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    temp = T[0];

    T[0] = T[NB-1];

    T[NB-1] = temp;

    temp = T[1];T[1] = T[NB-2];

    T[NB-2] = temp;

    T:

    for(int i(0); i < ??; ++i) {

    int temp = T[i];

    T[i] = T[??];

    T[??] = temp;

    }

  • 7/25/2019 5_3_conseils

    51/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    temp = T[0];

    T[0] = T[NB-1];

    T[NB-1] = temp;

    temp = T[1];T[1] = T[NB-2];

    T[NB-2] = temp;

    T:

    for(int i(0); i < ??; ++i) {

    int temp = T[i];

    T[i] = T[??];

    T[??] = temp;

    }

  • 7/25/2019 5_3_conseils

    52/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    temp = T[0];

    T[0] = T[NB-1];

    T[NB-1] = temp;

    temp = T[1];T[1] = T[NB-2];

    T[NB-2] = temp;

    T:

    for(int i(0); i < ??; ++i) {

    int temp = T[i];

    T[i] = T[NB-1];

    T[NB-1] = temp;

    }

  • 7/25/2019 5_3_conseils

    53/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    temp = T[0];

    T[0] = T[NB-1];

    T[NB-1] = temp;

    temp = T[1];T[1] = T[NB-2];

    T[NB-2] = temp;

    T:

    for(int i(0); i < ??; ++i) {

    int temp = T[i];

    T[i] = T[NB-1-i];

    T[NB-1-i] = temp;

    }

  • 7/25/2019 5_3_conseils

    54/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    temp = T[0];

    T[0] = T[NB-1];

    T[NB-1] = temp;

    temp = T[1];T[1] = T[NB-2];

    T[NB-2] = temp;

    T:

    for(int i(0); i

  • 7/25/2019 5_3_conseils

    55/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    T:

    for(int i(0); i

  • 7/25/2019 5_3_conseils

    56/56

    Dcomposer

    On peut procder en changeant les lments de T2 par 2:

    T:

    for(int i(0); i