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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

[TP] La position des entiers dans un tableau


Sujet :

Turbo Pascal

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Points : 193
    Points
    193
    Par défaut [TP] La position des entiers dans un tableau
    Bonsoir tout le monde

    J'ai réussi à faire une fonction pour déterminer le plus petit et plus grand entiers dans un tableau.

    Je les ai affichés.

    Maintenant, il faut que je détermine leur position.

    Ma question en Turbo Pascal est comment détermine-t-on la position d'un entier et comment affiche-t-on dans un tableau.

    Merci

    Cordialement

    A bientôt
      0  0

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Pendant leur recherche, tu stockes l'indice du tableau où tu les as trouvés, et à la sortie, tu as en même temps leur position, et leur valeur (case du tableau indicée par les indices stockés).

    Prendre le temps d'une petite réflexion t'aurait sans doute donné la solution.
      0  0

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Points : 193
    Points
    193
    Par défaut
    Re

    Oui, mai comment récupérer leur indices.

    A+
      0  0

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par argon
    Re

    Oui, mai comment récupérer leur indices.

    A+
    C'est clair dans ce que je t'ai déjà dit. En réfléchissant un peu, tu devrais trouver la réponse.

    Évidemment, la difficulté, c'est réfléchir au lieu d'attendre une solution toute faite, mais c'est comme ça qu'on apprend, sinon ça ne sert à rien.
      0  0

  5. #5
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Comprends-tu ce que tu fais ?

    Leur position dans le tableau est égal à l'indice de la boucle qui te permet de parcourir le tableau.
      0  0

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Points : 193
    Points
    193
    Par défaut Position + min max dans tableau
    Bonsoir tout le monde

    Là plus rien ne va plus il me sort un résultat faux.

    Où est l'erreur dans mon code svp?

    Voici les fonctions et procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    function reminmax(minmax:integer):integer;
     
     
    var i:integer;
    begin
      B:=mytable[i];
         for i:=0 to 10 do
         begin
     
     
       if B > mytable[i] then B:=mytable[i];
     
       end;
    reminmax:=B;
     
          A:=mytable[i];
     for i:=0 to 10 do
     
      begin
     
       if A < mytable[i] then A:=mytable[i];
     
     
     end;
     
     
    reminmax:=A;
     
     
    end;
     
    function positionminmax(x:integer):integer;
     
    var i:integer;
     
    begin
     
    c:=mytable[i];
         for i:=0 to 10 do
         begin
     
     
       if c > mytable[i] then c:=i;
     
       end;
     positionminmax:=c;
     
     
          d:=mytable[i];
     for i:=0 to 10 do
      begin
     
       if d < mytable[i] then d:=i;
     
     
     end;
     
    positionminmax:=d;
    end;
     
    procedure tableau;
     
    begin
     
     
     
    remplir;{Appel procedure remplir avec radomize}
    lire;{procedure lire pour lire le tableau}
     
     
    writeln;
    writeln('plus grand ', reminmax(max));
    writeln('plus petit ',reminmax(min));
    writeln;
    writeln('position du plus grand ', positionminmax(max));
    writeln('position du plus petit ',positionminmax(min));
     
     
     
    end;
    Je tourne bourrique, je ne sais plus quoi faire.

    Merci

    Cordialement

    A bientôt
      0  0

  7. #7
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    La manière dont tu as indenté (enfin presque) ton programme ne donne deja pas du tout envie de le lire.

    Surtout que tu ne mets pas le programme principal donc on ne sait meme pas d'où sortent les variables et on doit tout deviner.

    Bon malgré ça j'ai remarqué qqch, tu parcours de 0 à 10, hors, à moins que ton tableau contiennent 11 éléments, c'est déjà une erreur.

    S'il en contient bien 10 comme je l'imagine, parcours de 0 à 9 et voit si ça donne le bon résultat.

    A part ça tes fonctions et procédures sont un bordel sans nom lol.
    Je ne comprend pas pourquoi tu passes des entiers en paramètre au lieu de passer ton tableau.

    Bref pour vraiment te corriger je devrais réécrire tout ton programme.
    Ce qui ne serait pas vraiment long mais c'est pas ça qui te ferait réfléchir et surtout écrire tes programmes de façon plus claire.

    Edit: en plus je vois que tes paramètres entrant (minmax et x) tu ne les utilises même pas !
    à tu bien compris a quoi servent les paramètres dans les fonctions et procédures?
      0  0

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    1er conseil : indente et présente ton code correctement, tu verras que c'est beaucoup plus facile pour travailler sur le source.

    2ème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function reminmax(minmax:integer):integer; 
    var i:integer;
    begin
      B:=mytable[i];
         for i:=0 to 10 do
         begin
    utilisation de i qui n'est pas initialisé => comportement aléatoire

    3ème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function reminmax(minmax:integer):integer; 
    var i:integer;
    begin
      B:=mytable[i];
         for i:=0 to 10 do
         begin
    Utilisation de variables globales, à éviter, sauf quelques rares cas où on ne peut pas faire autrement.
    Le tableau mytable devrait être un paramètre des fonctions qui l'utilisent.
    (Pense à ce que deviendrait ton code si tu avais 3 ou 4 tableaux à gérer. Tu écrirais une fonction par tableau ?)

    4ème :
    "nombre magique" qu'on retrouve de partout.
    Déclare une constante, et utilise la (tu verras, si tu changes la limite, disons à 20, tu n'auras qu'à changer la constante, au lieu d'éplucher ton code pour changer toutes les apparitions de 10.

    5ème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    remplir;{Appel procedure remplir avec radomize}
    randomize ne doit être appelé qu'une fois au début du programme, et c'est random qu'il faut utiliser ensuite pour avoir des valeurs aléatoires.
      0  0

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Points : 193
    Points
    193
    Par défaut
    Bonjour tout le monde

    J'ai corriger presque tout les bugs.

    La mon problème c'est l'affichage des positions des du plus grand et du plus petit.

    Je vous joins le fichier.

    Cordialement

    A bientôt
    Fichiers attachés Fichiers attachés
      0  0

  10. #10
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    j'ai pris ton fichier, je l'ai indenté correctement ( t'aimes bien les espaces toi !)

    et j'ai mis un commentaire à coté de chaque ligne où y a un problème ou un défaut.

    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    program tab1;
     
    uses crt;
     
    var mytable:array[1..10] of integer; // ok
    var A,B,c,d:integer;                 // essaye d'utiliser des noms plus représentatifs
    var affichemin,affichemax:integer;   // tu déclares ces variables mais tu ne les utilises nulle part !?
     
    const min=0;                         // pas besoin de déclarer des constantes pour ça
    const max=1;                         // idem
     
    procedure remplir;
    var i:integer;
    begin
    randomize; // à mettre dans le program principal et pas dans la procedure
    for i:=1 to 10 do
      begin                      // pas besoin de begin et end s'il n'y a qu'une seule instruction
         mytable[i]:=random(10); 
      end;                      
    end;
     
    procedure lire;
    var i:integer;
    begin
    for i:=1 to 10 do
       begin
          write(mytable[i]);     // mieux vaut rajouter un espace entre les nombres pour que la lecture soit plus facile
       end;
    end;
     
    function testmax(grand:integer):integer;
    var i:integer;
    begin
    i:=1;                // inutile, autant mettre tout de suite b:=mytable[1]
    B:=mytable[i];
    for i:=1 to 10 do    // et ici autant commencer la boucle à la position 2
       begin
          if B > mytable[i] then B:=mytable[i]; // la y a un problème, soit dans le nom de ta fonction,
       end;                                     // soit dans le résultat, car à la fin B contient le plus petit
    testmax:=B; // jamais vu ça, moi j'utilise toujours result, mais si ça marche pourquoi pas.
    end;        // mais bon c'est quand même moins clair que result.
     
    function testmin(petit:integer):integer; // exactement les meme remarques que pour testmax
    var i:integer;
    begin
    i:=1;
    A:=mytable[i];
    for i:=1 to 10 do
       begin
         if A < mytable[i] then A:=mytable[i];
       end;
    testmin:=A;
    end;
     
    function positionmax(x:integer):integer;
    var i:integer;
    begin
    i:=1;       // inutile, directement c:=mytable[1]
    c:=mytable[i];
    for i:=1 to 10 do   // et commencer la boucle à 2
       begin
          if c > mytable[i] then c:=i;  // la y a un problème, tu affectes à c la valeur de l'indice
       end;                             // ce qui fait qu'ensuite tu compares la valeur de l'indice aux éléments du tableau
    positionmax:=c;
    end;
     
    function positionmin(y:integer):integer; // meme remarque que positionmax
    var i:integer;
    begin
    i:=1;
    d:=mytable[i];
    for i:=1 to 10 do
       begin
          if d < mytable[i] then d:=i;
       end;
    positionmin:=d;
    end;
     
    procedure tableau;
    begin
    remplir;
    lire;
    writeln;
    writeln('plus grand ', testmin(min));
    writeln('plus petit ',testmax(max));
    writeln('position du plus grand ', positionmax(max));
    writeln('position du plus petit ',positionmin(min));
    end;
     
    {Ici on appel la procedure tableau}
     
    begin
     
    clrscr;
     
    tableau;
     
    readkey;
     
    end.
    et voici le fichier modifié:
      0  0

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par Mushroom7
    j'ai pris ton fichier, je l'ai indenté correctement ( t'aimes bien les espaces toi !)
    - Pas vraiment bien indenté.

    - Toujours l'utilisation des variables globales par les fonctions : perdre cette habitude, et passer tous les arguments nécessaires à la fonction

    - et là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const min=0;                         // pas besoin de déclarer des constantes pour ça
    const max=1;                         // idem
    C'est au contraire une bonne idée, de définir des constantes (je suppose que max devrait être = 10 ?), plutôt que de truffer le code avec des "nombres magiques" (voir mon message plus haut)
      0  0

  12. #12
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Je t'ai préparé une version du programme bien propre et la plus générale possible pour qu'il fonctionne avec n'importe quel tableau d'entier.

    Je te mettrai le fichier quand tu auras trouver la solution.
      0  0

  13. #13
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Citation Envoyé par thewho
    Bonjour,

    - Pas vraiment bien indenté.

    - Toujours l'utilisation des variables globales par les fonctions : perdre cette habitude, et passer tous les arguments nécessaires à la fonction

    - et là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const min=0;                         // pas besoin de déclarer des constantes pour ça
    const max=1;                         // idem
    C'est au contraire une bonne idée, de définir des constantes (je suppose que max devrait être = 10 ?), plutôt que de truffer le code avec des "nombres magiques" (voir mon message plus haut)

    Je sais j'ai juste indenter, sans modifier le programme.
    "pas tres bien indenter", il n'existe pas de norme officielle pour l'indentation, chacun peut indenter de la manière qui lui convient, le but étant de rendre le programme plus lisible. Et je ne vois pas en quoi mon identation ne serait pas bonne.

    ca ne sert a rien de dire que min = 0, max = 1 puisque le but c'est de trouver le minimum et le maximum justement !

    Ce qui par contre est utile c'est de définir une constante NB_ELEMENTS = 10 et s'en servir pour déclarer un tableau : array[0..NB_ELEMENTS-1] of integer;

    Et remplacer dans les boucles for le 10 par length(tab)-1 ou NB_ELEMENTS-1.

    J'imagine que tu disais que c'est bien car tu pensais utiliser les constantes pour faire mytable: array[min..max] of integer.
    Mais il ne l'a pas fait comme ça. Ca se voit bien qu'il a déclaré des constantes parce que tu lui as dit de le faire mais qu'il ne sait pas trop comment s'en servir: il ne les utilise nulle part dans son programme.
      0  0

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par Mushroom7
    Je sais j'ai juste indenter, sans modifier le programme.
    "pas tres bien indenter", il n'existe pas de norme officielle pour l'indentation, chacun peut indenter de la manière qui lui convient, le but étant de rendre le programme plus lisible. Et je ne vois pas en quoi mon identation ne serait pas bonne.
    C'est vrai, mais généralement, on indente le contenu d'un bloc par rapport à ses marques début/fin, c'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function a : integer;
    begin
      le code; { indenter les lignes du bloc begin end }
    end;
    Essaye, tu verras que ça rend le code plus lisible

    Citation Envoyé par Mushroom7
    J'imagine que tu disais que c'est bien car tu pensais utiliser les constantes pour faire mytable: array[min..max] of integer.
    C'est effectivement ce que je pensais.

    Citation Envoyé par Mushroom7
    Mais il ne l'a pas fait comme ça. Ca se voit bien qu'il a déclaré des constantes parce que tu lui as dit de le faire mais qu'il ne sait pas trop comment s'en servir: il ne les utilise nulle part dans son programme.
    Bigre !
    Effectivement, je n'avais pas chargé, et, a fortiori, pas lu le code posté.
      0  0

  15. #15
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Citation Envoyé par thewho
    Bonjour,

    C'est vrai, mais généralement, on indente le contenu d'un bloc par rapport à ses marques début/fin, c'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function a : integer;
    begin
      le code; { indenter les lignes du bloc begin end }
    end;
    Essaye, tu verras que ça rend le code plus lisible
    je le fais dans mes programmes, mais là j'ai fais ça vite fait pour lire son code parce que vu comment il était arrangé au départ, ça donnait pas envie.
      0  0

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Points : 193
    Points
    193
    Par défaut
    Re

    Mushroom7 le but est bien d'indiquer la position du plus grand et plus petit.


    A+
      0  0

  17. #17
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Oui j'avais compris merci !

    Tu pourrais prendre la peine d'écrire un peu plus qu'une phrase à chaque fois.
    Là ça fait un peu " voici mon problème, faites moi signe quand vous aurez la solution".

    On a beau te conseiller, te donner des pistes, te dire ce qui ne va pas, tout ce que tu trouves à dire c'est "le but est bien d'indiquer la position du plus grand et du plus petit".
    A nouveau ça fait genre: "merci bien mais ce que je vous ai demandé c'est la solution."

    Pourtant tu nous donnes ton code pour qu'on le corrige et c'est ce qu'on fait.

    alors tant pis pour toi, la voilà la solution, mais ça ne fera que retarder le moment où tu devras réfléchir par toi même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    program tab1;
     
    uses crt;
     
    const NB_ELEMENTS = 10;
     
    var mytable: array[0..NB_ELEMENTS-1] of integer;
     
    procedure remplirTableau(var tab: array of integer);
    var i: integer;
    begin
       for i:= 0 to length(tab)-1 do
          tab[i] := random(10);
    end;
     
    procedure afficherTableau(const tab: array of integer);
    var i: integer;
    begin
       for i:= 0 to length(tab)-1 do
          write(tab[i],' ');
    end;
     
    function minimum(const tab: array of integer): integer;
    var min, i: integer;
    begin
       min:= tab[0];
       for i:= 1 to length(tab)-1 do
          if min > tab[i] then min:= tab[i];
       result:= min;
    end;
     
    function maximum(const tab: array of integer): integer;
    var max, i: integer;
    begin
       max:= tab[0];
       for i:= 1 to length(tab)-1 do
          if max < tab[i] then max:= tab[i];
       result:= max;
    end;
     
    function positionDuMin(const tab: array of integer): integer;
    var position, i, min: integer;
    begin
       min:= tab[0];
       position:= 0;
       for i:= 1 to length(tab)-1 do
          if min > tab[i] then
                             begin
                                min:= tab[i];
                                position:= i;
                             end;
       result:= position+1;
    end;
     
    function positionDuMax(const tab: array of integer): integer;
    var position, i, max: integer;
    begin
       max:= tab[0];
       position:= 0;
       for i:= 1 to length(tab)-1 do
          if max < tab[i] then
                             begin
                                max:= tab[i];
                                position:= i;
                             end;
       result:= position+1;
    end;
     
    // début du programme principal
    begin
       randomize;
       remplirTableau(mytable);
       write('myTable: ');
       afficherTableau(mytable);
       writeln;
       writeln('Le plus petit est ',minimum(mytable));
       writeln('Le plus grand est ',maximum(mytable));
       writeln('Le minimum apparait pour la 1ere fois en ',positionDuMin(mytable),'e position');
       writeln('Le maximum apparait pour la 1ere fois en ',positionDuMax(mytable),'e position');
       readln;
    end.
      0  0

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par Mushroom7
    Tu pourrais prendre la peine d'écrire un peu plus qu'une phrase à chaque fois.
    Là ça fait un peu " voici mon problème, faites moi signe quand vous aurez la solution".

    On a beau te conseiller, te donner des pistes, te dire ce qui ne va pas, tout ce que tu trouves à dire c'est "le but est bien d'indiquer la position du plus grand et du plus petit".
    A nouveau ça fait genre: "merci bien mais ce que je vous ai demandé c'est la solution."
    +1

    Citation Envoyé par Mushroom7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function positionDuMin(const tab: array of integer): integer;
    var position, i, min: integer;
    begin
       min:= tab[0];
       position:= 0;
       for i:= 1 to length(tab)-1 do
          if min > tab[i] then
                             begin
                                min:= tab[i];
                                position:= i;
                             end;
       result:= position+1;
    end;
    en rouge : pourquoi le +1 ?

    en bleu : comme on est dans une fonction cherchant un minimum, j'aurais plutôt écrit
    le symbole rappelant que c'est un minimum qu'on cherche (c'est strictement une préférence personnelle, mais j'aime bien que le visuel aille dans le même sens que la logique de la fonction).

    Général : au lieu de faire des fonctions différentes pour avoir le minimum (ou le maximum) et leurs indices dans le tableau, je me serais contenté de renvoyer l'indice, la valeur étant ainsi facilement accessible, et on évite de refaire une recherche déjà faite.
      0  0

  19. #19
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    position+1 parce que comme j'ai fais un tableau qui commence à zero, pour avoir une position qui correspond à ce qu'on vois j'ajoute 1.

    je sais pas si c'est très clair dit comme ça mais un petit exemple fera du bien:
    tableau: 1 4 6 3 6

    le minimum est a l'indice 0 du tableau, mais pour nous, simple humain, c'est la position 1 (visuellement). Encore plus simple: c'est l'élément qui apparait en 1er.

    Sinon sans le +1 on peut aussi modifier la chaine: ... apparait à l'indice...

    pour le if c'est vrai, c'est une question de goût, je l'ai mis dans cet ordre parce que c'est l'ordre qu'il a utilisé dans son programme.

    pour la remarque, au moment de l'écrire j'ai aussi trouvé que c'était lourd de devoir chercher à nouveau le min ou le max pour renvoyer sa position.
    Mais là aussi c'est comme ça qu'il l'a fait alors j'imagine que le prof leur a demandé de faire 2 procédure et 2 fonctions.
    Ca reste très scolaire.
      0  0

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Le problème de l'indice tel que le renvoies, est qu'il ne permet pas d'adresser la bonne valeur dans le tableau.

    Un indice dans un tableau est un indice qui doit pointer sur la valeur adéquate de ce tableau, ce qui n'est pas le cas avec ta manière de faire. La représentation que s'en fait un être humain n'a pas à être prise en compte, ce qui compte, c'est de pouvoir obtenir la bonne valeur en utilisant l'indice obtenu.

    De plus, si l'indice réel était 10, tu renvoies 11 ==> hors du tableau.
      0  0

Discussions similaires

  1. Comment stocker des entiers dans un tableau ?
    Par ING KAM dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 04/07/2015, 13h55
  2. Détection position des yeux dans une image
    Par Morvan Mikael dans le forum Traitement d'images
    Réponses: 16
    Dernier message: 24/12/2008, 23h09
  3. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41
  4. [C#] Affichage des lignes dans un tableau.
    Par maldufleur dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/04/2004, 11h28
  5. Décaler des valeurs dans un tableau
    Par sh2003 dans le forum Langage
    Réponses: 6
    Dernier message: 20/03/2004, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo