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 :

Conversion de C# vers Pascal [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Conversion de C# vers Pascal
    Bonjour,

    Je dois convertir cette ligne C# en Pascal sous Lazarus :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    bool flag = Math.Log10(num3 - 3.0) + Math.Log10(num3 + 1.0) == Math.Log10(4.0 * num3 - 3.0) && Math.Pow(2.0, num + 3.0) - Math.Sqrt(Math.Pow(2.0, num3 - 2.0 + 2.0 * num)) == 4.0 + 2.0 * Math.Pow(4.0, num / 2.0) && Math.Sqrt(3.0) * Math.Pow(Math.Tan(2.0 * num2), 2.0) - 4.0 * Math.Tan((num3 - 4.0) * num2) == Math.Sqrt(3.0) * -1.0;

    J'ai commencé à travailler le code pour arriver à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    flag := (Log10(num3 - 3.0) + Log10(num3 + 1.0)) = (Log10(4.0 * num3 - 3.0) and (Power(2.0, num + 3.0) - Sqrt(Power(2.0, num3 - 2.0 + 2.0 * num))));
    Le problème que je rencontre, c'est que le = ne passe pas, j'ai l'erreur suivante :

    Error: Operation "and" not supported for types "Extended" and "Extended"
    Votre aide est la bienvenue !

    Merci,
    ZiP

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Si je ne me trompe, la ligne en C contient trois comparaisons entre des valeurs numériques. Donc la structure de la ligne en Pascal devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    flag := (a=b) and (c=d) and (e=f);
    De cette façon le and n'est appliqué qu'à des valeurs booléennes, ce qui n'est pas le cas dans l'essai que tu as posté, puisqu'on y trouve ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log10(4.0 * num3 - 3.0) and
    A ta place, je commencerais par présenter la ligne comme ça, et je remplacerais les expressions numériques une par une :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    flag := (
      a = b
    ) and (
      c = d
    ) and (
      e = f
    );
    En espérant ne pas avoir dit de bêtise.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Bonsoir,

    Ce n'est pas parce que le C (et ses dérivés) permettent de faire des choses farfelues, qu'il faut faire pareil en Pascal

    Es-tu obligé de tout garder sur une ligne ? Moi j'aurai découpé l'évaluation en plusieurs bouts, stockant chaque bout dans une variable temporaire de type booléen.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  4. #4
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir,

    Effectivement, une fois modifié j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    flag := (
    log10(num3 - 3.0) + log10(num3 + 1.0) = log10(4.0 * num3 - 3.0)
    ) and (
    power(2.0, num + 3.0) - sqrt(power(2.0, num3 - 2.0 + 2.0 * num)) = 4.0 + 2.0 * power(4.0, num / 2.0)
    ) and (
    sqrt(3.0) * power(tan(2.0 * num2), 2.0) - 4.0 * tan((num3 - 4.0) * num2) = sqrt(3.0) * -1.0
    );
    Par contre, à l’exécution, j'ai une exception (External : SIGFPE) sur la première ligne...

    Cordialement,
    ZiP

  5. #5
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    bonjour,
    essaie ceci :
    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
     
    var  FPUExceptionMask : TFPUExceptionMask;
    begin
     FPUExceptionMask := GetExceptionMask;
      SetExceptionMask(FPUExceptionMask + [exZeroDivide, exInvalidOp]);
     try
     flag := (
    log10(num3 - 3.0) + log10(num3 + 1.0) = log10(4.0 * num3 - 3.0)
    ) and (
    power(2.0, num + 3.0) - sqrt(power(2.0, num3 - 2.0 + 2.0 * num)) = 4.0 + 2.0 * power(4.0, num / 2.0)
    ) and (
    sqrt(3.0) * power(tan(2.0 * num2), 2.0) - 4.0 * tan((num3 - 4.0) * num2) = sqrt(3.0) * -1.0
    );
      finally
        SetExceptionMask(FPUExceptionMask);
      end;
    pour l'explication regarde ici

    Amicalement, nullosse

  6. #6
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    L'encadrement avec le try est suffisant.

    Merci,
    ZiP

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

Discussions similaires

  1. [TP7] Conversion de sources Turbo Pascal 7 vers Delphi 6
    Par M.Tamisier dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 21/04/2006, 21h08
  2. conversion date timestamp vers date mysql
    Par seb0026 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/10/2005, 19h48
  3. [Conversion]Applet Java Vers Java Web Start
    Par robin206 dans le forum JWS
    Réponses: 2
    Dernier message: 20/04/2005, 09h28
  4. Conversion distance , angle vers coordonnées de points
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/03/2004, 22h55

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