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 :

Insertion d'un nombre entier dans un tableau trié


Sujet :

Turbo Pascal

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    sdsd
    Inscrit en
    Avril 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : sdsd
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Insertion d'un nombre entier dans un tableau trié
    Salut ,
    j'ai essayé de résoudre un problème : un programme permettant de lire un tableau trié au moment de la saisie ensuite saisir un entier et le positionner en bonne place de sort que le tableau reste trié

    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
    program abc ;
    uses wincrt ;
    type tab = array [1..100]of integer ;  
    var n,x :integer;
    t:tab ;
     
     
    {**procédure de lecture de l'entier n}
    {--Début--}
    procedure saisir (var n:integer);                                    
    begin
    repeat                                                                       
     
    writeln('entrez un entier n compris entre 4 et 10');
    readln(n);
     
    until  n in [4..20] ;
    end;
    {--Fin-------------------------------------------}
     
    {** procédure du remplissage du tableau triés directement  }
    {--Début--}
    procedure remplir (var t:tab ; n:integer);
    var i:integer ;
     
    begin
    writeln('entrez l''élement 1');readln(t[1]);
     
    for i:=2 to n do
    begin
    repeat
    writeln('entrez l''élement ',i);readln(t[i]);
    until t[i] > t[i-1];                            
    end;
    end;
    {--Fin--------------------------------------------}
     
    {** procédure de l'insertion de l'entier n dans sa bonne place  }
    {--Début--}
    procedure insert (Var t:tab ; n,x:integer );
    var i :integer ;
    begin
    writeln('tapez un entier x ');readln(x);
    i:=1;
    for i:=n downto 1 do
    if (t[i]>x) then 
    begin
    t[i+1]:=t[i];
     
    end;
    t[i]:=x;
    end;
     
     
    {--Fin--------------------------------------------}
     
    {** procédure de l'affichage du tableau trié  }
    {--Début--}
     
    procedure affiche (t:tab ; n:integer );
    var k :integer ;
     
    begin
    for k:=1 to n+1 do ;
    begin
     
    writeln(t[k]);
    end;
     
    end;
     
    {--Fin--------------------------------------------}
     
     
     
    begin
     
    saisir(n);
    remplir(t,n);
     
    insert(t,n,x); 
    affiche(t,n); 
     
    end.
    malheureusement ceci ne fonctionne pas
    Merci de m'aider

  2. #2
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour,

    La procédure insert ne fonctionne pas correctement dans toutes les situations.
    Pour corriger ce problème, il est préférable d'utiliser une boucle de type while.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure insert (Var t:tab ; n,x:integer );
    var i :integer ;
    begin
         writeln('tapez un entier x ');
         readln(x);
         i:=n;
         while ((t[i]>x) and (i > 0)) do
            begin
                t[i+1]:=t[i];
                dec(i);
            end ;
         t[i+1]:=x;
    end;

  3. #3
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    Une autre approche pour l’insertion d'un élément dans le tableau trié est de chercher d'abord la position où il doit être inséré ensuite l'y mettre puis à la fin, incrémenter n de 1 :
    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
    procedure insert(var tl:tab;var n:integer;x:integer);
      var i,ipos :integer ;
      begin
        iPos:=1; {position 1 si l'élément est plus petit que tous ceux du tableau}
        for i:=1 to n do
          begin
            if (tl[i]<x) then iPos:=iPos+1;{on incrémente la position de recherche jusqu'à satisfaire à la condition}
          End;
       {Redimensionnement du tableau}
        For i:= n DownTo iPos Do
         Begin
           tl[i+1]:=tl[i]; {décalage vers la droite des éléments plus grands que la valeur à insérer}
         End;
        tl[iPos]:=x;  {Insertion à la bonne position}
        n:=n+1;{n doit être incrémenté de 1}
    end;
    De plus, la procédure Affiche(telle qu'elle est) ne permet d'afficher que le dernier élément du tableau non modifié à cause d'un ( ; ) en trop à la ligne 64 :
    for k:=1 to n+1 do ; Enlève donc ce point-virgule pour pouvoir accéder à la boucle en entier.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

Discussions similaires

  1. [PHP 5.2] Additionner des nombres entiers dans une chaine de caractères
    Par lecaptain dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2009, 12h12
  2. Réponses: 3
    Dernier message: 13/04/2008, 02h03
  3. [TP] La position des entiers dans un tableau
    Par argon dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 21/12/2006, 11h42
  4. [VBA-E]insertion automatique d'une ligne dans un tableau
    Par janus82 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/04/2006, 15h42
  5. Insertion d'un nombre réel dans une table
    Par mouloudéen dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/09/2005, 23h17

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