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

Lazarus Pascal Discussion :

Fractionner mon code en procédures et fonctions : quelles différences entre les deux ?


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Février 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2010
    Messages : 58
    Points : 44
    Points
    44
    Par défaut Fractionner mon code en procédures et fonctions : quelles différences entre les deux ?
    Alors voilà, j'ai un souci maintenant que mon code est tapé ( merci à vous) : je dois le fractionner en procédures et fonctions...
    Kesako ??
    J'ai lu que les procédures ne renvoyaient rien et que les fonctions renvoyaient quelque chose.
    Par exemple, dans mon code, à un moment je centre et je redimensionne la taille de la molécule en fonction de la taille du canevas.
    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
    begin
              mox:=0;
               moy:=0;
               dxmin:=PaintBox1.Width;
               dymin:=PaintBox1.Height;
               dxmax:=-1*PaintBox1.Width;
               dymax:=-1*PaintBox1.Height;
               alphax:=0;
               alphay:=0;
     
                   For i:=1 to MyFPMol.p_NX do begin
                   PAt:=MyFPMol.AtmSet[i];
                   dx:=PAt^.P[0]*SclF; dy:=PAt^.P[1]*SclF;
                   writeln('dx :'+FloatToStr(dx));
                   writeln('dy :'+FloatToStr(dy));
     
     
     
                   if dx < dxmin then dxmin:=dx;
                   if dx > dxmax then dxmax:=dx;
                   if dy < dymin then dymin:=dy;
                   if dy > dymax then dymax:=dy;
                   if i = MyFPMol.p_NX then
                   begin
                   xg := (dxmax+dxmin)/2;
                   yg := (dymax+dymin)/2;
     
                   writeln('dxmin :'+FloatToStr(dxmin));
                   writeln('dymin :'+FloatToStr(dymin));
                   writeln('dxmax :'+FloatToStr(dxmax));
                   writeln('dymax :'+FloatToStr(dymax));
                   writeln('xg :'+FloatToStr(xg));
                   writeln('xy :'+FloatToStr(yg));
                   end;
                   end;
     
                   For i:=1 to MyFPMol.p_NX do begin
                   PAt:=MyFPMol.AtmSet[i];
                   dx:=PAt^.P[0]*SclF; dy:=PAt^.P[1]*SclF;
     
                   dx:=dx-xg;
                   dy:=dy-yg;
                   writeln('dxcent :'+FloatToStr(dx));
                   writeln('dycent :'+FloatToStr(dy));
                   alphax:=PaintBox1.Width/(dxmax-dxmin);
                   alphay:=PaintBox1.Height/(dymax-dymin);
                  if (alphax < alphay) then
                   begin
     
                   dx:=alphax * dx;
                   dy:=alphax * dy;
                   writeln('dxalphax :'+FloatToStr(dx));
                   writeln('dyalphax :'+FloatToStr(dy));
     
                   end
     
                   else if (alphax > alphay) then
                   begin
                   dx:=alphay * dx;
                   dy:=alphay * dy;
                    writeln('dxalphay :'+FloatToStr(dx));
                   writeln('dyalphay :'+FloatToStr(dy));
     
                   end;
                   dx:=dx+PaintBox1.Width/2;
                   dy:=dy+PaintBox1.Height/2;
                   writeln('dxfin :'+FloatToStr(dx));
                   writeln('dyfin :'+FloatToStr(dy));
     
                   ix:=round(dx); iy:=round(dy);
     
     
     
    end;
    Je sais que je pourrais l'épurer et le rendre plus propre mais la question n'est pas là.

    Je pense laisser la boucle d'entrée et donc j'aurai cela
    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
      if dx < dxmin then dxmin:=dx;
                   if dx > dxmax then dxmax:=dx;
                   if dy < dymin then dymin:=dy;
                   if dy > dymax then dymax:=dy;
                   if i = MyFPMol.p_NX then
                   begin
                   xg := (dxmax+dxmin)/2;
                   yg := (dymax+dymin)/2;
     
                   writeln('dxmin :'+FloatToStr(dxmin));
                   writeln('dymin :'+FloatToStr(dymin));
                   writeln('dxmax :'+FloatToStr(dxmax));
                   writeln('dymax :'+FloatToStr(dymax));
                   writeln('xg :'+FloatToStr(xg));
                   writeln('xy :'+FloatToStr(yg));
                   end;
                   end;
     
                   For i:=1 to MyFPMol.p_NX do begin
                   PAt:=MyFPMol.AtmSet[i];
                   dx:=PAt^.P[0]*SclF; dy:=PAt^.P[1]*SclF;
     
                   dx:=dx-xg;
                   dy:=dy-yg;
                   writeln('dxcent :'+FloatToStr(dx));
                   writeln('dycent :'+FloatToStr(dy));
                   alphax:=PaintBox1.Width/(dxmax-dxmin);
                   alphay:=PaintBox1.Height/(dymax-dymin);
                  if (alphax < alphay) then
                   begin
     
                   dx:=alphax * dx;
                   dy:=alphax * dy;
                   writeln('dxalphax :'+FloatToStr(dx));
                   writeln('dyalphax :'+FloatToStr(dy));
     
                   end
     
                   else if (alphax > alphay) then
                   begin
                   dx:=alphay * dx;
                   dy:=alphay * dy;
                    writeln('dxalphay :'+FloatToStr(dx));
                   writeln('dyalphay :'+FloatToStr(dy));
     
                   end;
                   dx:=dx+PaintBox1.Width/2;
                   dy:=dy+PaintBox1.Height/2;
                   writeln('dxfin :'+FloatToStr(dx));
                   writeln('dyfin :'+FloatToStr(dy));
     
                   ix:=round(dx); iy:=round(dy);
    J'aurais voulu transformer tout cela en une fonction ou procédure; ainsi, j'aurai juste eu à faire par exemple centrage(dx,dy) à taper.
    Merci

  2. #2
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Alors, procedure et fonction, c'est la base de la programmation. Je t'invite donc a lire des tutos sur le Pascal, c'est très bien expliqué. Tu en as plusieurs sur Developpez, et aussi sur internet.

    Bonne chance

  3. #3
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    Bon courage j'y arrive alors ...

    le principe de ce "découpage" c'est justement pour éviter ces longues enfilades de code indigeste et surtout pour pouvoir réutiliser à volonté une fonction sans la retaper à chaque fois que tu en as besoin

    exemple:
    si tu dessines un cercle d'une façon particulière et que tu dois faire ça souvent dans ton programme, et bien tu écris uen fonction "DessineCercle" et chaque fois tu t'en sers sans tout retaper, c'est vraiment génial le procédural

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Février 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2010
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    merci

Discussions similaires

  1. Quelles différences entre les dossiers Visual Studio ?
    Par soso78 dans le forum Visual Studio
    Réponses: 2
    Dernier message: 03/02/2009, 14h32
  2. Processeur ou MediaPlayer quelle différence entre les deux ?
    Par indepthsight dans le forum Multimédia
    Réponses: 1
    Dernier message: 14/01/2008, 22h12
  3. Réponses: 67
    Dernier message: 16/12/2007, 13h41
  4. [Borland] Quelles différences entre les produits
    Par cchovet dans le forum Delphi
    Réponses: 8
    Dernier message: 23/02/2007, 01h45
  5. Sérialisation: Quelles différences entre les attributs ?
    Par eldoctor.Sylvain dans le forum Framework .NET
    Réponses: 2
    Dernier message: 18/09/2006, 15h12

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