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 :

Erreur au niveau d'un MOD sur un nombre réel


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Par défaut Erreur au niveau d'un MOD sur un nombre réel
    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
    program ;
     
    {$mode objfpc}{$H+}
     
    uses
      {$IFDEF UNIX}{$IFDEF UseCThreads}
      cthreads,
      {$ENDIF}{$ENDIF}
      Classes
      { you can add units after this };
    var n:real;
     
    begin
      writeln('Entrez le code:');
      readln(n);
      repeat
       n MOD 8
      until n DIV 8 = 0 ;
    end.
    Salut a tous,
    J'ai un problème lors de la compilation il me met une erreur au niveau de n MOD 8, précisément au niveau du chiffre 8. Je voudrais savoir pourquoi et avoir d'autres propositions de codes si possible.
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 947
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    repeat
       n := n MOD 8 ; // corrigé
    until n DIV 8 = 0 ;
    mais que doit faire ce code ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Par défaut
    merci tourlourou, mais il reste toujours 1 problème lors de l'exécution du programme, il affiche: Le projet ..... à levé une exception de class 'RunError(106)'.
    In file '.....lpr' at line 15:
    readln(n);


    PS: Ce code doit convertir un nombre de 15 chiffres en octal.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 947
    Billets dans le blog
    6
    Par défaut
    Ph; B. a raison ; et je n'ai pas vu le type Real car lu trop vite... Mais choisir n pour un réel, est-ce judicieux ?

    Si c'est un entier, autant le déclarer integer ou int64, histoire de pouvoir appliquer div et mod !

    Reste à avoir un algorithme qui fonctionne à traduire en Pascal.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut
    Bonjour,

    à mon avis, plusieurs erreurs dans le code proposé :

    1) mod s'applique à des entiers donc déclarer n comme tel

    2) "n mod 8" n'a pas de sens car mod ne modifie pas n et il faut affecter le résultat à une variable (entière également).
    Par exemple : p:= n mod 8
    Mais dans ce cas, il y a une boucle infinie puisque n n'est pas modifié (sauf si n inférieur à 8).

    3) il est possible d'écrire n:= n mod 8

    4) inutile alors de mettre une clause repeat. En effet, mod renvoie le reste de la division entière du nombre à gauche par le nombre à droite.
    Dans notre cas, division de n par 8, le résultat est compris entre 0 et 7 et la condition d'arrêt du repeat sera toujours vraie.

    5) je ne vois pas comment cela peut transformer un nombre en octal. La première étape est de définir l’algorithme adéquat.

  6. #6
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function DecToOct(N: integer): integer;
    var
      LS, LP : Integer;
    begin
      result := 0;
      LS := 0;
      LP := 1;
      repeat
        result := result + ((N shr (3*LS)) and $7) * LP;
        LS := LS + 1;
        LP := LP * 10;
      until LS >= 10;
    end;
    shr 3 = DIV 8
    and $7 = mask b0111

    (10|3041) = (8|5741) = (16|BE1) = (2|101111100001)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //101 111 100 001
    //401 421 400 001 
    //  5   7   4   1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    writeln(DecToOct(3041)); // 5741
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par osquem Voir le message
    J'ai un problème lors de la compilation il me met une erreur au niveau de n MOD 8, précisément au niveau du chiffre 8.
    Indiquer le message d'erreur n'est pas interdit, mais même fortement conseillé !

    Quand je vois le code, je m'interroge...
    Hormis sa finalité comme l'a dit @tourlourou, je vois :
    • que program n'est pas suivi d'un identificateur,
    • que n est de type real alors que mod et div opèrent sur des entiers.

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/11/2006, 13h20
  2. Réponses: 3
    Dernier message: 05/01/2006, 16h14
  3. Réponses: 2
    Dernier message: 12/10/2005, 16h15
  4. [EJB] Erreur au niveau de la récuperation du home
    Par ujoodha dans le forum Java EE
    Réponses: 3
    Dernier message: 05/10/2005, 14h50
  5. [langage] Erreur d'arrondi sur petits nombres
    Par Tchetch dans le forum Langage
    Réponses: 7
    Dernier message: 12/01/2005, 11h11

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