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

Delphi Discussion :

Probleme avec ma procedure.


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut Probleme avec ma procedure.
    Cette procedure doit supprimer un element d'un tableau mais parfois elle plante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure effacer(i:integer);
    begin
      for i:=i to length(tab)-2 do tab[i]:=tab[i+1];
      tab:= Copy(tab,0,length(tab)-1);
    end;
    Quelqun peut m'aider je suis sure que c'est quelque chose de simple.

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Par défaut
    Le problème c'est que dans ta boucle for tu boucle sur la variable i qui elle contient ton indice. par contre je sais pas le type de tab donc je vais pas réécrire le code. Mais personellement je passerai la variable tableau en parametre a la procédure aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure efface( tableau : LE_TYPE_DU_TAB; index : Integer);
      var i : Integer;
    begin
      for i:= index to ..........
    ...
    ...

  3. #3
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    C'est un tableau de record.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tab:array of record
      carre:trect;
      vitesse,xdest,ydest:integer;
      tipe:string;
      x,y:real;
    end;
    Mais je vois pas à quoi sa sert de passer le type en parametre ?

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Par défaut
    Citation Envoyé par poly128
    Mais je vois pas à quoi sa sert de passer le type en parametre ?
    En fait c'est nettement plus propre nivceau programmation. Sinon dans 6 mois quand tu relis ton code tu ne pense pas forcément que cette procédure modifie un tableau. Donc dans la limite du possible toujours passer qqch qu'on modifie dans une procédure en paramètre à celle ci.

    Bon maintenant c'est peut-être de la maniaquerie d'ingénieur en informatique

  5. #5
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Citation Envoyé par hy00ga
    Bon maintenant c'est peut-être de la maniaquerie d'ingénieur en informatique
    Tout ce qui facilite la lecture donc la maintenance d'un code est toujours une bonne chose. Donc point de maniaquerie !

    +1

    @+

  6. #6
    Membre confirmé Avatar de poly128
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Par défaut
    Merci à tous pour toute ces réponses.
    Le code de Claudius40 marche impec.

  7. #7
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut,

    Il faut toujours être prudent avec les tableaux dynamiques, et s'assurer qu'on ne sort jamais des limites. Low et High sont faits pour ça.

    Je ferais plutôt comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure Efface(AIndex: Integer);
    var
      i: integer;
    begin
      if (AIndex < Low(Tab)) or (AIndex > High(Tab)) then Exit;
     
      for i := AIndex to High(Tab) - 1 do
        Tab[i] := Tab[i + 1];
      SetLength(Tab, High(Tab));
    end;
    @+ Claudius

  8. #8
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    Citation Envoyé par Claudius40
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure Efface(AIndex: Integer);
    var
      i: integer;
    begin
      if (AIndex < Low(Tab)) or (AIndex > High(Tab)) then Exit;
     
      for i := AIndex to High(Tab) - 1 do
        Tab[i] := Tab[i + 1];
      SetLength(Tab, High(Tab));
    end;
    [EDIT]
    Fais gaffe au High(Tab) - 1, car là pour le coup, il faut bien High(Tab) - 2 (puisque il y a un Tab[i + 1])
    Surement une inattention de ta part

    [/EDIT]

  9. #9
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Citation Envoyé par neilbgr
    Fais gaffe au High(Tab) - 1, car là pour le coup, il faut bien High(Tab) - 2 (puisque il y a un Tab[i + 1])
    Surement une inattention de ta part
    Que nenni mon ami
    Si le tableau comprend 10 éléments, ils seront indicés de 0 à 9. High(Tab) renvoie 9. High(Tab) - 1 est bien égal à Length(Tab) - 2. L'itération se sera bien de 0 à 8.

    Sûrement une inattention de ta part

    Salut @+

  10. #10
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut

    Evidement...


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec une procedure
    Par youssef ouazir dans le forum C++/CLI
    Réponses: 1
    Dernier message: 09/03/2011, 01h46
  2. [MySQL] probleme avec les procedures stockées
    Par searchf dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 19/05/2010, 11h16
  3. Probleme avec une procedure stocké avec IF
    Par el_quincho dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/10/2006, 16h21
  4. probleme avec ma procedure
    Par Sardonnen dans le forum Oracle
    Réponses: 4
    Dernier message: 07/10/2005, 17h26
  5. [C#] [Oracle] Probleme avec une procedure stockée
    Par sronin1 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/05/2004, 19h04

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