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

Bases de données Delphi Discussion :

Comment traduire cette fonction en Delphi


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut Comment traduire cette fonction en Delphi
    Code basic : 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
    Function IRG(SOUMIS)
        Dim BRTS, TAX, TB, IMPAN, IMPOTA, IMPM, ABAT, RET, RTS1, ABAT1 As Single
            SOUMIS = SOUMIS / 10
            SOUMIS = Fix(SOUMIS)
            SOUMIS = SOUMIS * 10
                    BRTS = SOUMIS * 12
            If BRTS >= 0 And BRTS < 120000 Then
                TAX = 0
                IMPAN = 0
                TB = 0
            ElseIf BRTS >= 120000 And BRTS < 360000 Then
                TAX = 20
                IMPAN = 0
                TB = 120000
            ElseIf BRTS >= 360000 And BRTS < 1440000 Then
                TAX = 30
                IMPAN = 48000
                TB = 360000
            ElseIf BRTS >= 1440000 And BRTS < 9999999 Then
                TAX = 35
                IMPAN = 372000
                TB = 1440000
            ElseIf BRTS >= 9999999 Then
                TAX = 0
                IMPAN = 3367999.65
                TB = 9999999
            End If
            IMPOTA = ((BRTS - TB) * TAX / 100) + IMPAN
            IMPM = IMPOTA / 12
            ABAT = ((40 * IMPM) / 100)
            ABAT1 = ABAT
            If ABAT < 1000 Then
                ABAT = 1000
            ElseIf ABAT > 1500 Then
                ABAT = 1500
            ElseIf ABAT >= 1000 And ABAT <= 1500 Then
                ABAT = ABAT
            End If
            RET = IMPM - ABAT
            If RET < 0 Then
                RET = 0
            ElseIf RET >= 0 Then
                RET = RET
            End If
    IRG = RET
    End Function
    Sub CalculeIRG()
    End Sub

  2. #2
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Bonjour,

    Il s'agit essentiellement d'un problème de passage d'une syntaxe VBA à une syntaxe Pascal.
    La fonction donnerait ceci en Pascal :


    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
    function IRG(SOUMIS: Single): Single;
    var
      BRTS, TAX, TB, IMPAN, IMPOTA, IMPM, ABAT, RET: Single;
    begin
      SOUMIS := SOUMIS / 10;
      SOUMIS := Sign(SOUMIS) * Int(Abs(SOUMIS));
      SOUMIS := SOUMIS * 10;
      BRTS := SOUMIS * 12;
      if (BRTS >= 0) and (BRTS < 120000) then
      begin
        TAX := 0;
        IMPAN := 0;
        TB := 0;
      end
      else
      if (BRTS >= 120000) and (BRTS < 360000) then
      begin
        TAX := 20;
        IMPAN := 0;
        TB := 120000;
      end
      else
      if (BRTS >= 360000) and (BRTS < 1440000) then
      begin
        TAX := 30;
        IMPAN := 48000;
        TB := 360000;
      end
      else
      if (BRTS >= 1440000) and (BRTS < 9999999) then
      begin
        TAX := 35;
        IMPAN := 372000;
        TB := 1440000;
      end
      else
      begin
        TAX := 0;
        IMPAN := 3367999.65;
        TB := 9999999;
      end;
      IMPOTA := ((BRTS - TB) * TAX / 100) + IMPAN;
      IMPM := IMPOTA / 12;
      ABAT := ((40 * IMPM) / 100);
      if ABAT < 1000 then
        ABAT := 1000
      else
      if ABAT > 1500 then
        ABAT := 1500;
      RET := IMPM - ABAT;
      if RET < 0 then
        RET := 0;
      Result := RET;
    end;
    J'ai laissé la forme des variables que l'on aurait sans doute écrites autrement (ABAT => Abat, par exemple).
    Si je n'ai pas repris l'algorithme (ni même vérifié), j'ai retiré des portions inutiles du code ainsi que des variables non utilisées (comme ABAT1).

    Cordialement,
    Gilles

    NB: la fonction Sign est dans l'unité MATH
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 477
    Par défaut
    salut

    les if peuvent être aussi remplacés par un case
    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
     
    case  BRTS  of 
    0..119999 :  begin
                        TAX := 0;
                        IMPAN := 0;
                        TB := 0;
                     end;
    120000..399999 :begin
                             TAX := 20;
                             IMPAN := 0;
                             TB := 120000;
                           end
     360000..1439999 : begin
                                  TAX := 30;
                                  IMPAN := 48000;
                                  TB := 360000;
                                end
     1440000 .. 9999998 :  begin
                                      TAX := 35;
                                      IMPAN := 372000;
                                      TB := 1440000;
                                  end
      else
      begin
        TAX := 0;
        IMPAN := 3367999.65;
        TB := 9999999;
      end;
    end;
    dans ton code tu as deux méthode de déclaré

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function IRG(??? SOUMIS: ???): Single;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Procedure CalculeIRG(); // Celle-ci n'est pas implémenté
    ce qui me gène dans la déclaration de l’entête de la fonction c'est que l'on ne sais pas a quoi correspond exactement soumis
    on ne sais pas si ce n'est pas une valeur passer en référence ou pas de quel type est la variable soumis
    tu devrais avoir une pré-déclaration de ton entête de fonction un peu plus documenté

  4. #4
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par anapurna Voir le message
    ce qui me gène dans la déclaration de l’entête de la fonction c'est que l'on ne sais pas a quoi correspond exactement soumis
    on ne sais pas si ce n'est pas une valeur passer en référence ou pas de quel type est la variable soumis
    tu devrais avoir une pré-déclaration de ton entête de fonction un peu plus documenté
    Bonjour,

    J'ai cru comprendre qu'il s'agissait d'un calcul d'impôts : l'IRG est l'impôt algérien sur les revenus. Je suppose donc (et les calculs l'indiquent clairement) que SOUMIS est du type Single.

    Quant à CalculeIRG, elle ne présente pas beaucoup d'intérêt dans la mesure où elle ne ferait que récupérer le résultat de la fonction IRG... pour en faire je ne sais quoi . L'essentiel semblait porter sur la fonction IRG à traduire en Pascal. Elle est d'ailleurs maladroite dans son écriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ElseIf ABAT >= 1000 And ABAT <= 1500 Then
                ABAT = ABAT
            End If
    Et ce n'est qu'un exemple (ou le VBA m'échappe totalement ).
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut merci
    Merci gvasseur58 de votre intérêt pour le sujet pour cet

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

Discussions similaires

  1. [xlswrite1] Comment utiliser cette fonction
    Par Muriellle dans le forum MATLAB
    Réponses: 14
    Dernier message: 19/09/2008, 09h10
  2. [hamming] Comment utiliser cette fonction avec Matlab 6.5
    Par vivematlab dans le forum Signal
    Réponses: 2
    Dernier message: 02/05/2007, 16h52
  3. comment faire cette fonction de temps
    Par yassin123441 dans le forum C++
    Réponses: 4
    Dernier message: 14/03/2007, 23h19
  4. comment utiliser cette fonction?
    Par jojo57 dans le forum Access
    Réponses: 4
    Dernier message: 01/06/2006, 08h38
  5. Comment lancer cette fonction sur un bouton ?
    Par jeronimo dans le forum Access
    Réponses: 2
    Dernier message: 26/01/2006, 11h33

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